Baixe o app para aproveitar ainda mais
Prévia do material em texto
VHDL3 Prof. Rangel Arthur FT/UNICAMP 1 Comandos Concorrentes Básicos em VHDL 1. Introdução ..................................................................................................................... 2 2. Atribuição de Valor para um Sinal ............................................................................... 5 3. Descrição de um Circuito de Seleção ........................................................................... 6 4. Construção WHEN ELSE ............................................................................................. 9 5. Construção WITH SELECT ....................................................................................... 11 6. Comando BLOCK ...................................................................................................... 14 7. Comando PROCESS .................................................................................................. 16 8. Palavra reservada UNAFFECTED ............................................................................. 17 9. Prática de Laboratório................................................................................................. 17 10. Referências ............................................................................................................... 20 VHDL3 Prof. Rangel Arthur FT/UNICAMP 2 1. Introdução Os comandos concorrentes presentes em um determinado código são executados conjuntamente e, por isso, a seqüência como são apresentados é irrelevante. Em uma região de código concorrente a ordem dos comandos no código não deve interferir no resultado final da simulação. Para isso, o simulador necessita de um atraso interno Δ, de modo a coordenar a avaliação de eventos que ocorrem no mesmo instante. Durante uma simulação, a alteração de uma condição do circuito pode ativar um ou mais comandos do código. Para todos os comandos ativados, o resultado é transferido 1Δ após. A nova condição pode ativar novos comandos e o processo se repete por sucessivas iterações até atingir uma condição estável. VHDL3 Prof. Rangel Arthur FT/UNICAMP 3 1 2 3 4 5 6 7 8 9 10 ENTITY sig_tes0 IS PORT (sa : IN BIT; sb, sc : BUFFER BIT); END sig_tes0; ARCHITECTURE teste OF sig_tes0 IS BEGIN sc <= sb; sb <= sa; END teste; VHDL3 Prof. Rangel Arthur FT/UNICAMP 4 1 2 3 4 5 6 7 8 9 10 ENTITY c04_delt IS PORT (z : IN BIT; x, y : BUFFER BIT); END c04_delt; ARCHITECTURE teste OF c04_delt IS BEGIN x <= z AND y; y <= '1' XOR x; END teste; Os simuladores normalmente limitam o número máximo de iterações e abortam a simulação caso uma condição estável nunca seja atingida. #** Error: (vsim-3601) Iteration limit reached at time 10 ns. VHDL3 Prof. Rangel Arthur FT/UNICAMP 5 2. Atribuição de Valor para um Sinal A atribuição de um valor a um objeto da classe sinal pode ocorrer tanto em regiões de código concorrente como em regiões de código seqüencial. Uma atribuição ocorrendo em uma área de comandos concorrentes é considerada como tal e, portanto, a ordem dos comandos é irrelevante. A linguagem VHDL é rigorosa com relação a operações envolvendo tipos diferentes. Transferência de valores entre objetos de tipos diferentes não é permitida. sinal_destino_a <= sinal_fonte; -- tipo de sinal_destino_a = tipo do sinal_fonte sinal_destino_b <= sinal_x OR sinal_y; VHDL3 Prof. Rangel Arthur FT/UNICAMP 6 3. Descrição de um Circuito de Seleção Entradas: i0, i1, i2 e i3. Saída: ot. Controle da seleção: s0 e s1. VHDL3 Prof. Rangel Arthur FT/UNICAMP 7 Exemplo: descrição do circuito de seleção em linguagem VHDL: o A descrição emprega uma única expressão. o Observar: uso de parêntesis → AND e OR de igual precedência. 1 2 3 4 5 6 7 8 9 10 11 12 13 ENTITY mux_0 IS PORT (i0, i1, i2, i3 : IN BIT; -- entradas s0, s1 : IN BIT; -- selecao ot : OUT BIT); -- saida END mux_0; ARCHITECTURE nivel_logico OF mux_0 IS BEGIN ot <= (i0 AND NOT s1 AND NOT s0) OR (i1 AND NOT s1 AND s0) OR (i2 AND s1 AND NOT s0) OR (i3 AND s1 AND s0); END nivel_logico; VHDL3 Prof. Rangel Arthur FT/UNICAMP 8 Exemplo: - nova descrição do circuito de seleção em linguagem VHDL: o Emprega 5 expressões. o Sinais internos: int0, int1, int2 e int3. o Observar concorrência do código. O valor de ot é determinado pelas expressões linhas 11, 12, 13 e 14. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ENTITY mux_00 IS PORT (i0, i1, i2, i3 : IN BIT; -- entradas s0, s1 : IN BIT; -- selecao ot : OUT BIT); -- saida END mux_00; ARCHITECTURE teste OF mux_00 IS SIGNAL int0, int1, int2, int3 : BIT; -- sinais internos BEGIN ot <= int0 OR int1 OR int2 OR int3; int0 <= i0 AND NOT s1 AND NOT s0; int1 <= i1 AND NOT s1 AND s0; int2 <= i2 AND s1 AND NOT s0; int3 <= i3 AND s1 AND s0; END teste; VHDL3 Prof. Rangel Arthur FT/UNICAMP 9 4. Construção WHEN ELSE Esse tipo de construção pode acontecer quando há um desejo de transferência condicional de um sinal. Contém uma lista de condições e expressões, sendo que a condição verdadeira define a expressão transferida. O formato da construção é dado a seguir. Exemplo: circuito de seleção usando a construção WHEN ELSE. Nota-se que há um nível de abstração mais elevado, fazendo com que a descrição seja mais próxima do comportamento do circuito. VHDL3 Prof. Rangel Arthur FT/UNICAMP 10 1 2 3 4 5 6 7 8 9 10 11 12 13 ENTITY mux_1 IS PORT (i0, i1, i2, i3 : IN BIT; s0, s1 : IN BIT; ot : OUT BIT); END mux_1; ARCHITECTURE teste OF mux_1 IS BEGIN ot <= i0 WHEN s1= '0' AND s0='0' ELSE i1 WHEN s1= '0' AND s0='1' ELSE i2 WHEN s1= '1' AND s0='0' ELSE i3; END teste; VHDL3Prof. Rangel Arthur FT/UNICAMP 11 5. Construção WITH SELECT Usa-se essa construção quando da transferência condicional de um sinal. Contém: uma lista de opções e expressões, sendo que todas as condições da expressão de escolha devem ser consideradas. Não existe uma prioridade como na construção WHEN ELSE. Opções pode ser agrupadas: o caracter | equivale a “ou”; o TO e DOWNTO delimitam faixas de opções. Opções restantes: uso da palavra reservada OTHERS. Formato da construção: VHDL3 Prof. Rangel Arthur FT/UNICAMP 12 No quadro a seguir apresenta-se a parte de um código contendo dois exemplos com a construção WITH SELECT. No primeiro exemplo o sinal é do tipo CHARACTER e no segundo, do tipo BIT. WITH s0 SELECT -- s0 tipo CHARACTER x0 <= i0 AND i1 WHEN ‘a’, -- condicao unica i0 OR i1 WHEN ‘b’ | ‘c’, -- uma ou outra condição i0 XOR i1 WHEN ‘d’ TO ‘g’, -- faixa crescente de condições i0 WHEN ‘x’ DOWNTO ‘k’, -- faixa decrescente de condições i1 WHEN OTHERS; WITH b1 AND b0 SELECT -- b1 e b0 tipo BIT x1 <= i0 WHEN ‘0’, i1 WHEN ‘1’; VHDL3 Prof. Rangel Arthur FT/UNICAMP 13 Exemplo: circuito de seleção em linguagem VHDL usando a construção WITH SELECT. O nível de abstração é mais elevado, fazendo da descrição algo mais próxima do comportamento do circuito. Utilização da expressão de escolha: sinal sel = s1 e s0 concatenados. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ENTITY mux_9 IS PORT (i0, i1, i2, i3 : IN BIT; s0, s1 : IN BIT; ot : OUT BIT); END mux_9; ARCHITECTURE teste OF mux_9 IS SIGNAL sel : BIT_VECTOR (1 DOWNTO 0); BEGIN sel <= s1 & s0; WITH sel SELECT ot <= i0 WHEN "00", i1 WHEN "01", i2 WHEN "10", i3 WHEN "11"; END teste; VHDL3 Prof. Rangel Arthur FT/UNICAMP 14 6. Comando BLOCK O comando BLOCK tem a finalidade de dividir o código em regiões para facilitar o entendimento da descrição. Sinais podem ser declarados no interior de um bloco, e a visibilidade destes é restrita ao interior do bloco. A divisão não interfere, naturalmente, no circuito sintetizado. No quadro a seguir apresenta-se o circuito de seleção que vem sendo apresentado, visando apenas a visualização de um possível emprego do comando BLOCK. Outro emprego do comando BLOCK é desabilitar sinais no interior do bloco segundo condições definidas por expressões de guarda. A expressão de guarda retorna um valor booleano. nome_rotulo: BLOCK expressao_guarda -- definicao de sinais visiveis no bloco BEGIN sinal_a <= GUARDED expressao_1 -- comandos END BLOCK nome_rotulo; VHDL3 Prof. Rangel Arthur FT/UNICAMP 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ENTITY mux_5 IS PORT (i0, i1, i2, i3 : IN BIT; -- entradas sel : IN INTEGER RANGE 3 DOWNTO 0;-- selecao ot : OUT BIT); -- saida END mux_5; ARCHITECTURE com_block OF mux_5 IS SIGNAL global : BIT_VECTOR(0 TO 1); BEGIN abc: BLOCK BEGIN ot <= i0 WHEN global = "00" ELSE i1 WHEN global = "01" ELSE i2 WHEN global = "10" ELSE i3; END BLOCK abc; def: BLOCK SIGNAL interno_abc : BIT_VECTOR(0 TO 1); -- sinal visivel no bloco abc BEGIN WITH sel SELECT interno_abc <= "00" WHEN 0, "01" WHEN 1, "10" WHEN 2, "11" WHEN OTHERS; global <= interno_abc; END BLOCK def; END com_block; VHDL3 Prof. Rangel Arthur FT/UNICAMP 16 7. Comando PROCESS Um processo permite definir uma área contendo comandos seqüenciais. A palavra reservada PROCESS identifica o comando conforme o formato apresentado no quadro a seguir. Um processo é composto de duas regiões: parte de declaração e parte de comandos seqüenciais. abc: PROCESS (lista de sensibilidade) -- parte_de_declaracao_do_processo -- declaracao_de_tipo_e_subtipo; -- declaracao_de_constante; -- declaracao_de_variavel; -- declaracao_de_pseudonimo; -- não_e_permitido: declaracao_de_sinal e decalaracao_de_variavel_compartilhada BEGIN -- parte_de_comandos_sequenciais -- comando_sequencial; -- comando_sequencial; ... -- comando_sequencial; END PROCESS abc; VHDL3 Prof. Rangel Arthur FT/UNICAMP 17 8. Palavra reservada UNAFFECTED A palavra reservada UNAFFECTED pode ser empregada na atribuição de valor a um sinal, quando não se deseja afetar o valor do sinal. A palavra UNAFFECTED somente é permitida em atribuições concorrentes de valores a sinais, não é definida para a versão VHDL-1987 e nem sempre é suportada pelas ferramentas de síntese. 9. Prática de Laboratório 1. Proponha descrições para os circuitos a seguir. Analise a seqüência de iterações que devem ser executadas pelo simulador, com base nas formas de onda apresentadas na figura. VHDL3 Prof. Rangel Arthur FT/UNICAMP 18 2. Desenvolva o código para um detector de prioridade com quatro entradas empregando a construção WHEN ELSE. A entrada de prioridade máxima é p0 e a entrada de prioridade mínima é p3. O detector deve ser empregado em um sistema microprocessado, onde quatro periféricos podem solicitar uma interrupção. Uma das entradas em nível alto corresponde a um pedido de interrupção; neste caso, a saída int deve ser ativada. 3. Repita o desenvolvimento anterior, empregando a construção WITH SELECT. VHDL3 Prof. Rangel Arthur FT/UNICAMP 19 4. Com base na figura a seguir, desenvolva o código descrevendo o sistema contendo um decodificador BCD para 7 segmentos e um circuito de seleção. A descrição deve ser dividida em dois blocos. Um deles contendo o decodificador e o outro, o circuito de seleção. Os mostradores são acionados em nível baixo e os segmentos acionados em nível alto. VHDL3 Prof. Rangel Arthur FT/UNICAMP 20 10. Referências [1] d’Amore, Roberto, VHDL: Descrição e Síntese de Circuitos Digitais, LTC, São Paulo, 2005.
Compartilhar