Baixe o app para aproveitar ainda mais
Prévia do material em texto
VHDL5 Prof. Rangel Arthur FT/UNICAMP 1 Estratégias de Descrição de Circuitos Síncronos 1. Introdução ..................................................................................................................... 2 2. Registrador sensível a nível .......................................................................................... 6 3. Registrador sensível à borda (Inicialização Síncrona) .................................................. 8 4. Registrador Sensível à borda (Inicialização Assíncrona) ............................................ 10 5. Máquinas de Estados .................................................................................................. 13 6. Contadores .................................................................................................................. 19 7. Prática de Laboratório................................................................................................. 21 VHDL5 Prof. Rangel Arthur FT/UNICAMP 2 1. Introdução A descrição de um circuito pode empregar os mais diversos recursos disponíveis na linguagem. Uma descrição visando à síntese, entretanto, nem sempre pode lançar mão de todos esses meios. Os aplicativos de síntese não reconhecem todas as estruturas de linguagem e possuem, normalmente, estilos preferenciais de descrição para a inferência das estruturas. Um elemento de memória pode ser inferido quando um valor é atribuído a um sinal ou variável em pelo menos uma condição, e nenhum valor é atribuído a esse objeto em pelo menos uma condição. A falta de atribuição de um valor acarreta a necessidade de armazenamento do valor quando nenhuma condição de atribuição é atingida. Em um registrador composto por elementos sensíveis a nível, a condição para memorização correspondente a um determinado nível lógico do sinal de controle. Na figura a seguir mostra-se a operação de um latch. VHDL5 Prof. Rangel Arthur FT/UNICAMP 3 Aqui, apresenta-se o formato geral, empregando processo. O sinal d deve estar na lista de sensibilidade. Uma transição em sinal pode ser detectada através dos atributos EVENT e STABLE. Numa borda de subida, após a ocorrência de um evento, o valor do sinal deve corresponder a um nível lógico alto. No caso de uma borda de descida, o nível do sinal após o evento deve ser baixo. Como abordado anteriormente, atributos garantem informações adicionais associadas ao objeto, como tipos e unidades de projeto. Um objeto (em um dado instante de tempo) pode conter um único valor mas possuir vários atributos. VHDL5 Prof. Rangel Arthur FT/UNICAMP 4 Atributo pode ser referenciado na forma: prefixo’nome_atributo. O prefixo corresponde ao item (por exemplo um sinal) e o nome_atributo, o atributo desejado do item. O caractere ’ separa o prefixo e o nome_atributo. Dois exemplos de atributos são, como já antecipado, o STABLE e o EVENT. Esses dois atributos são utilizados então na verificação de bordas de subida ou de descida em sinais. VHDL5 Prof. Rangel Arthur FT/UNICAMP 5 No quadro a seguir são apresentadas as condições de teste normalmente aceitas pelas ferramentas de síntese para detecção de bordas de subida e de descida. Nesses exemplos o sinal é do tipo BIT. A inicialização de um registrador permite levar as saídas a um nível lógico independente do valor de entrada. A operação que leva as saídas ao nível lógico alto costuma se denominada set, e a operação que leva as saídas ao nível lógico baixo pode ser denominada reset. As operações de inicialização são denominadas síncronas, caso a sua execução dependa do sinal de controle e as operações assíncronas podem ser executadas independentemente da condição de sinal de controle. VHDL5 Prof. Rangel Arthur FT/UNICAMP 6 2. Registrador sensível a nível O código abaixo apresenta uma possível descrição de um registrador de três bits sensível a nível, com inicialização assíncrona. O sinal en controla o armazenamento da informação presente no sinal d (en no nível lógico baixo mantém a informação; en no nível lógico alto o sinal q segue a entrada d). O sinal rst estabelece a operação de reset e o sinal set, a operação de set. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ENTITY latch3_1 IS PORT (en : IN BIT; -- habilita rst : IN BIT; -- rst=1 leva q=000 set : IN BIT; -- set=1 leva q=111 d : IN BIT_VECTOR(2 DOWNTO 0); q : OUT BIT_VECTOR(2 DOWNTO 0)); END latch3_1; ARCHITECTURE teste OF latch3_1 IS BEGIN PROCESS (en, d, rst, set) BEGIN IF (rst ='1') THEN q <="000"; -- q=000 independente de en ELSIF (set ='1') THEN q <="111"; -- q=111 independente de en ELSIF (en ='1') THEN q <=d; -- condicao do sinal para habilitar END IF; END PROCESS; END teste; VHDL5 Prof. Rangel Arthur FT/UNICAMP 7 A figura a seguir ilustra o esquema do circuito sintetizado a partir da descrição do código anterior. VHDL5 Prof. Rangel Arthur FT/UNICAMP 8 3. Registrador sensível à borda (Inicialização Síncrona) O esquema a seguir apresenta um exemplo de um registrador com três bits sensíveis à borda de subida do terminal de controle. As operações de set e reset são síncronas (dependem do relógio). A descrição emprega duas construções do tipo IF ELSE: a primeira detecta a condição do sinal de controle, e a segunda testa sucessivamente as condições para realizar operações de set, reset ou armazenamento. VHDL5 Prof. Rangel Arthur FT/UNICAMP 9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ENTITY flip3_2 IS PORT (ck : IN BIT; -- relogio rst : IN BIT; -- rst=1 leva q=000 sincrono set : IN BIT; -- set=1 leva q=111 sincrono d : IN BIT_VECTOR(2 DOWNTO 0); q : OUT BIT_VECTOR(2 DOWNTO 0)); END flip3_2; ARCHITECTURE teste OF flip3_2 IS BEGIN PROCESS (ck) BEGIN IF (ck'EVENT AND ck = '1') THEN -- condicao do sinal relogio IF (rst = '1') THEN q <= "000"; -- teste para levar q=000 ELSIF (set = '1') THEN q <= "111"; -- teste para levar q=111 ELSE q <= d; -- armazena dado END IF; END IF; END PROCESS; END teste; VHDL5Prof. Rangel Arthur FT/UNICAMP 10 4. Registrador Sensível à borda (Inicialização Assíncrona) Um registrador com inicialização assíncrona apresenta as operações set e reset independentes do sinal de relógio ck. VHDL5 Prof. Rangel Arthur FT/UNICAMP 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ENTITY flip3_3 IS PORT (ck : IN BIT; -- relogio rst : IN BIT; -- rst=1 leva q=000 assincrono set : IN BIT; -- set=1 leva q=111 assincrono d : IN BIT_VECTOR(2 DOWNTO 0); q : OUT BIT_VECTOR(2 DOWNTO 0)); END flip3_3; ARCHITECTURE teste OF flip3_3 IS BEGIN PROCESS (ck, rst, set) BEGIN IF (rst = '1') THEN q <="000"; -- q=000 independente de ck ELSIF (set = '1') THEN q <="111"; -- q=111 independente de ck ELSIF (ck'EVENT AND ck ='1') THEN q <=d; -- condicao do sinal relogio END IF; END PROCESS; END teste; VHDL5 Prof. Rangel Arthur FT/UNICAMP 12 Na figura a seguir é apresentado o resultado da síntese do registrador proposto a partir do código mostrado anteriormente. VHDL5 Prof. Rangel Arthur FT/UNICAMP 13 5. Máquinas de Estados Uma máquina de estados é um circuito seqüencial que transita numa seqüência predefinida de estados. A transição entre os estados é comandada por um sinal de controle. O estado atual é definido por um elemento de memória e o estado futuro é determinado com base no estado atual e na condição das entradas. Dois estilos de máquinas de estado são definidos: as máquinas de Mealy e de Moore. Na máquina de Mealy, o valor de saída é função do estado atual e da condição das entradas. Na máquina de Moore, o valor da saída depende exclusivamente do estado atual. VHDL5 Prof. Rangel Arthur FT/UNICAMP 14 Na figura a seguir mostra-se o diagrama de estados que representa, na forma de um grafo orientado, a evolução entre os estados. Cada estado é representado por um nó e a transição entre os estados é indicada por arcos. O nó contém o estado atual e o arco, a condição de entrada que leva ao próximo estado indicado. Na máquina de Mealy o valor da saída é incluído no arco e na máquina de Moore ele é indicado no nó. No exemplo da figura a seguir é ilustrado o diagrama de estados de uma máquina com quatro estados que realiza uma contagem entre os valores 00, 01, 11 e 10. Para simplificação do circuito, o valor que representa o estado atual corresponde ao valor das saídas. VHDL5 Prof. Rangel Arthur FT/UNICAMP 15 O quadro a seguir apresenta uma possível descrição para a máquina proposta, usando um código com descrições tipo IF ELSE e CASE WHEN. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ENTITY maq_est1 IS PORT (ck : IN BIT; -- relogio borda subida rst : IN BIT; -- rst=1, q=00 q : BUFFER BIT_VECTOR (1 DOWNTO 0)); -- saida codigo Gray END maq_est1; ARCHITECTURE teste OF maq_est1 IS BEGIN abc: PROCESS (ck, rst) BEGIN IF rst = '1' THEN -- estado inicial q <= "00"; ELSIF (ck'EVENT and ck ='1') THEN -- ciclo de estados CASE q IS WHEN "00" => q <= "01"; WHEN "01" => q <= "11"; WHEN "11" => q <= "10"; WHEN "10" => q <= "00"; END CASE; END IF; END PROCESS abc; END teste; VHDL5 Prof. Rangel Arthur FT/UNICAMP 16 Essa máquina de estados pode ser descrita a partir do circuito abaixo. VHDL5 Prof. Rangel Arthur FT/UNICAMP 17 O exemplo a seguir segue o caso mais geral de uma máquina de estados, em que o valor assumido pelo estágio atual não corresponde diretamente ao valor da saída; ele é codificado a partir do estado atual. O exemplo proposto é um contador crescente ou decrescente, com o sentido da contagem definido pela entrada sobe. Os estados da máquina são designados como caso_a, caso_b, caso_c e caso_d. VHDL5 Prof. Rangel Arthur FT/UNICAMP 18 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ENTITY maq_est2 IS PORT (ck : IN BIT; -- relogio borda subida sobe : IN BIT; -- sobe=1, q=00,01,11,10,00... iniciar : IN BIT; -- iniciar=1, q=00 q : OUT BIT_VECTOR (1 DOWNTO 0)); -- saida END maq_est2; ARCHITECTURE teste OF maq_est2 IS -- q=2 q=3 q=1 q=0 TYPE st IS (caso_d, caso_c, caso_b, caso_a); -- novo tipo definido SIGNAL estado : st; -- sinal estado tipo "st" BEGIN abc: PROCESS (ck, iniciar) BEGIN IF iniciar = '1' THEN -- estado inicial estado <= caso_a; -- q=0 ELSIF (ck'EVENT and ck ='1') THEN -- ciclo de estados CASE estado IS WHEN caso_a => -- q=0 IF sobe = '1' THEN estado <= caso_b; -- q=1 ELSE estado <= caso_d; -- q=2 END IF; WHEN caso_b => -- q=1 IF sobe = '1' THEN estado <= caso_c; -- q=3 ELSE estado <= caso_a; -- q=0 END IF; WHEN caso_c => -- q=3 IF sobe = '1' THEN estado <= caso_d; -- q=2 ELSE estado <= caso_b; -- q=1 END IF; WHEN caso_d => -- q=2 IF sobe = '1' THEN estado <= caso_a; -- q=0 ELSE estado <= caso_c; -- q=3 END IF; END CASE; END IF; END PROCESS abc; WITH estado SELECT -- decodifica estado q <= "00" WHEN caso_a, -- q=0 "01" WHEN caso_b, -- q=1 "11" WHEN caso_c, -- q=3 "10" WHEN caso_d; -- q=2 END teste; VHDL5 Prof. Rangel Arthur FT/UNICAMP 19 6. Contadores Um contador pode ser descrito como uma máquina de estados em que o código de cada estado corresponde ao valor da contagem. Uma outra opção para a descrição de contadoresé o emprego de operações aritméticas de soma ou subtração controladas por um sinal de relógio. O código apresentado no quadro abaixo apresenta uma descrição que realiza uma contagem entre os valores 0 e 9, com reset assíncrono e carga de dados paralela síncrona. A operação de carga é controlada pelo sinal ld. Como o incremento do contador é realizado através de uma operação de soma, o tipo dos sinais d e q, bem como o da variável qv foram declarados como inteiro. O código é similar aos exemplos anteriores, diferindo pelo emprego de uma variável, em vez de um sinal, para definição do registrador que armazena o valor da contagem. VHDL5 Prof. Rangel Arthur FT/UNICAMP 20 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 ENTITY cnt_dec2 IS PORT (ck : IN BIT; -- relogio ld : IN BIT; -- carrega dados sincrono rst : IN BIT; -- rst=1 leva q=0000 assincrono d : IN INTEGER RANGE 15 DOWNTO 0; q : OUT INTEGER RANGE 15 DOWNTO 0); END cnt_dec2; ARCHITECTURE teste OF cnt_dec2 IS BEGIN abc: PROCESS (ck, rst) VARIABLE qv : INTEGER RANGE 15 DOWNTO 0; BEGIN IF (rst = '1') THEN -- q=0000 independente de ck qv := 0; ELSIF (ck'EVENT AND ck = '1') THEN -- condicao do sinal relogio IF (ld = '1') THEN qv := d; -- carrega dados ELSE IF qv >= 9 THEN qv := 0; -- retorna a zero ELSE qv := qv +1; -- incrementa END IF; END IF; END IF; q <= qv; END PROCESS abc; END teste; VHDL5 Prof. Rangel Arthur FT/UNICAMP 21 7. Prática de Laboratório 1. Apresente a descrição de registrador com 4 bits e duas entradas de 4 bits, da e db. O sinal de seleção sel define de qual entrada o dado será armazenado na borda de descida do sinal de relógio ck. A operação do circuito é similar ao registrador 74298 da família TTL. 2. Apresente a descrição de um contador de 4 bits crescente / decrescente com a opção para carga de dados paralela e reset assíncrono. O contador deve contar entre os valores 0 a 11. A figura a seguir ilustra o contador. O terminal ld permite o armazenamento do dado d na borda de subida do sinal de relógio ck. O terminal crs define se a contagem é crescente ou decrescente, e rst executa uma operação de reset assíncrona. Os sinais d e q são do tipo INTEGER, e os sinais restantes do tipo BIT. VHDL5 Prof. Rangel Arthur FT/UNICAMP 22 3. Apresente a descrição de um registrador de deslocamento equivalente ao circuito TTL 74166. O registrador contém 8 bits, possibilidade de carga paralela através das entradas d0 a d7 e uma entrada serial (terminal ds). O terminal rst_l leva a saída de todos os registradores ao nível lógico baixo de modo assíncrono. O terminal ld_l permite a carga dos dados presentes nas entradas de d0 a d7 na borda de subida do sinal ck. A operação de deslocamento é executada, também, na borda de subida do sinal ck. O terminal ce_l habilita as operações síncronas: deslocamento e carga paralela. A figura a seguir ilustra simplificadamente o componente e uma tabela contendo os modos de operação do registrador.
Compartilhar