construção sequencial case when sintaxe: case is when => ; ; : ; when => ; ; : ; when others...
TRANSCRIPT
Construção sequencial CASE WHEN
Sintaxe:
CASE <sinal> IS WHEN <alvo1> => <expressão 1>; <expressão 2>; : <expressão n>;
WHEN <alvo2> => <expressão 1>; <expressão 2>; : <expressão n>;
WHEN OTHERS => <expressão 1>; <expressão 2>; : <expressão n>;END CASE;
Exemplo da construção CASE WHEN
A B C
0 0 0
0 1 1
1 0 1
1 1 0
Descrever a função da tabela verdade ao lado em VHDL, usando a instrução CASE WHEN
Exemplo da construção CASE WHEN
ENTITY exemplo_case IS PORT( A, B : IN BIT; C : OUT BIT );END exemplo_case;
ARCHITECTURE comportamental OF exemplo_case IS SIGNAL auxiliar IS BIT_VECTOR (2 DOWNTO 1); BEGIN auxiliar <= A&B; -- & operador de concatenação PROCESS (auxiliar) BEGIN CASE auxiliar is WHEN "00" => C <= ‘0’; WHEN “11" => C <= ‘0’; WHEN OTHERS => C<= ‘1’; END CASE; END PROCESS;END comportamental;
A B C
0 0 0
0 1 1
1 0 1
1 1 0
Tabela Verdade
Simulação do exemplo_case
A B C
0 0 0
0 1 1
1 0 1
1 1 0
Exemplo2 da construção CASE WHEN
ENTITY exemplo_case IS PORT( ENTRADA : IN BIT_VECTOR(2 DOWNTO 1); C : OUT BIT );END exemplo_case;
ARCHITECTURE comportamental OF exemplo_case IS BEGIN PROCESS (ENTRADA) BEGIN CASE ENTRADA is WHEN "00" => C <= '0'; WHEN "11" => C <= '0'; WHEN OTHERS => C<= '1'; END CASE; END PROCESS;END comportamental;
A B C
0 0 0
0 1 1
1 0 1
1 1 0
Tabela Verdade
Exemplo 3 da construção CASE WHEN
ENTITY decodificador IS PORT( controle : IN BIT_VECTOR(2 DOWNTO 1); saida : OUT BIT_VECTOR(4 DOWNTO 1) );END decodificador;
ARCHITECTURE comportamental OF decodificador IS BEGIN PROCESS (controle) BEGIN CASE controle is WHEN "00" => saida <= "0001"; -- vetor (entre aspas duplas “) WHEN "01" => saida <= "0010"; WHEN "10" => saida <= "0100"; WHEN "11" => saida <= "1000"; END CASE; END PROCESS;END comportamental;
Exemplo 4 da construção CASE WHENlibrary IEEE;use ieee.std_logic_1164.all;
ENTITY decodificador IS PORT( controle : IN STD_LOGIC_VECTOR(2 DOWNTO 1); saida : OUT STD_LOGIC_VECTOR(4 DOWNTO 1) );END decodificador;
ARCHITECTURE comportamental OF decodificador IS BEGIN PROCESS (controle) BEGIN CASE controle is WHEN "00" => saida <= "0001"; -- vetor (entre aspas duplas ) WHEN "01" => saida <= "0010"; WHEN "10" => saida <= "0100"; WHEN "11" => saida <= "1000"; END CASE; END PROCESS;END comportamental;
library IEEE;use ieee.std_logic_1164.all;ENTITY circuito_soma IS PORT ( a, b : IN STD_LOGIC; soma : OUT STD_LOGIC_VECTOR (2 DOWNTO 1) ); END circuito_soma;ARCHITECTURE comportamental OF circuito_soma IS SIGNAL auxiliar : STD_LOGIC_VECTOR (2 DOWNTO 1); BEGIN auxiliar <= a&b; PROCESS (auxiliar) BEGIN CASE (auxiliar) IS WHEN "00" => soma <= "00"; WHEN "01" => soma <= "01"; WHEN "10" => soma <= "10"; WHEN "11" => soma <= "11"; WHEN OTHERS => soma <= "00"; END CASE; END PROCESS; END comportamental;
Síntese do circuito – Descrição RTL e Tecnologia
Construção FOR LOOP
Sintaxe:
FOR i IN <valor inicial> TO <valor final> LOOP <expressão 1>; -- i é uma variável do tipo inteiro <expressão 2>; -- valor inicial < valor final : -- valor inicial e valor final não podem ser <expressão n>; -- expressãoEND LOOP
OU
FOR i IN <valor inicial> DOWNTO <valor final> LOOP <expressão 1>; -- i é uma variável do tipo inteiro <expressão 2>; -- valor inicial > valor final : <expressão n>;END LOOP
Exemplo da construção FOR LOOP • Descrever em VHDL um circuito para determinar a ordem do bit ‘1’ de mais alta significância em um vetor de entrada de 8 bits.
•Solução:ordem_bit
A B
8 bits 3 bits
Exemplo da construção FOR LOOPlibrary IEEE; -- Biblioteca IEEE use ieee.std_logic_1164.all; -- Define o tipo STD_LOGICuse ieee.std_logic_arith.all; -- e funções envolvendo os tipos STD_LOGIC e inteiro
ENTITY ordem_bit IS PORT ( entrada : IN STD_LOGIC_VECTOR (7 DOWNTO 0); z : OUT STD_LOGIC_VECTOR (3 DOWNTO 1) ); END ordem_bit;ARCHITECTURE comportamental OF ordem_bit IS BEGIN PROCESS (entrada) VARIABLE i, k : INTEGER; -- definição das variáveis do processo BEGIN FOR i IN 0 TO 7 LOOP IF entrada(i) = '1' THEN k := i; -- operador de atribuição de variável END IF; END LOOP; z <= CONV_STD_LOGIC_VECTOR(k,3); -- função para conversão de inteiro para END PROCESS; -- sinal do tipo STD_LOGIC_VECTOREND comportamental; -- representado com 3 bits
Simulação do ordem_bit
Exemplo da construção FOR LOOPlibrary IEEE; -- Biblioteca IEEE use ieee.std_logic_1164.all; -- Define o tipo STD_LOGICuse ieee.std_logic_arith.all; -- e funções envolvendo os tipos STD_LOGIC e inteiroENTITY ordem_bit2 IS PORT ( entrada : IN STD_LOGIC_VECTOR (7 DOWNTO 0); -- z : OUT STD_LOGIC_VECTOR (3 DOWNTO 1) z : OUT INTEGER RANGE 0 TO 7 -- saída inteiro de 0 a 7 ); END ordem_bit2;ARCHITECTURE comportamental OF ordem_bit2 IS BEGIN PROCESS (entrada) VARIABLE i, k : INTEGER; BEGIN FOR i IN 0 TO 7 LOOP IF entrada(i) = '1' THEN k := i; END IF; END LOOP; z <= k; -- índice é passado para a saída que também é inteiro -- z <= CONV_STD_LOGIC_VECTOR(k,3); -- não precisa conversão END PROCESS; END comportamental;