construção sequencial case when sintaxe: case is when => ; ; : ; when => ; ; : ; when others...

13
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>; :

Upload: internet

Post on 17-Apr-2015

105 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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;

Page 2: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; 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

Page 3: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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

Page 4: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

Simulação do exemplo_case

A B C

0 0 0

0 1 1

1 0 1

1 1 0

Page 5: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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

Page 6: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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;

Page 7: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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;

Page 8: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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

Page 9: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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

Page 10: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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

Page 11: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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

Page 12: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

Simulação do ordem_bit

Page 13: Construção sequencial CASE WHEN Sintaxe: CASE IS WHEN => ; ; : ; WHEN => ; ; : ; WHEN OTHERS => ; ; : ; END CASE;

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;