Baixe o app para aproveitar ainda mais
Prévia do material em texto
ANOTAÇÕES DE AULA VHDL – Circuitos Digitais com Comandos Sequenciais • Estrutura, tipos, objetos e operadores • Comandos sequenciais 02/10/2018 UFAM / prof. MgN 1 Referências bibliográficas 02/10/2018 UFAM / prof. MgN 2 Estrutura de Código e Síntese em VHDL Diálogo sobre a estrutura de código e síntese de circuito em VHDL 02/10/2018 UFAM / prof. MgN 3 Linguagem de descrição de hardware (VHDL) • Linguagem de especificações de chips de forma não ambígua, padronizada pelo IEEE • Facilita o projeto (síntese e simulação) de sistemas digitais que independa de tecnologia e fabricante • Sintaxe baseada na linguagem ADA (tipada) e permite a descrição de códigos concorrentes e sequenciais 02/10/2018 UFAM / prof. MgN 4 Estrutura de código em VHDL LIBRARY (Biblioteca) ENTITY (Entidade) ARCHITECTURE (Arquitetura) Descreve as bibliotecas e pacotes necessário para o projeto 02/10/2018 UFAM / prof. MgN 5 Descreve a lógica de operação do circuito que está dentro do bloco Descreve as portas (pinos) de entradas e saídas do circuito Exemplo de programa em VHDL Descreva o circuito do diagrama lógico em pseudoVHDL 1 -- acesso a biblioteca IEEE 2 library IEEE; 3 use IEEE.STD_LOGIC_1164.all; 4 entity ckt_e is 5 port( a, b, c : in bit; 6 x : out bit ); 7 end ckt_e; 8 architecture ckt of ckt_e is 9 begin 10 x <= (a and b) or c; 11 end ckt; 02/10/2018 UFAM / prof. MgN 6 Pinos de entrada Pino de saída Operação do diagrama lógico a b c x Relação entre entidade e arquitetura 1 entity e1_e is 2 port( a, b : in bit; 3 s : out bit ); 4 end coinc; 5 architecture a1 of e1_e is 6 begin 7 s <= not (a xor b); 8 end a1; 9 architecture a2 of e1_e is 0 begin 1 s <= a xnor b; 2 end a2; 02/10/2018 UFAM / prof. MgN 7 Instância 1 Instância 2 As arquiteturas a1 e a2 alocam células lógicas do FPGA quando embarcadas, sendo as entradas a e b e a saída s com os tipos definidos na entidade e1_e Tipos de Dados em VHDL Diálogo sobre os tipos de dados em VHDL 02/10/2018 UFAM / prof. MgN 8 Modos de uma porta • Modos possíveis: IN, OUT, BUFFER e INOUT 02/10/2018 UFAM / prof. MgN 9 1 entity modo_e is 2 port( x0, x1 : in bit; 3 y0, y1 : out bit; 4 y2 : buffer bit; 5 z0, z1 : inout bit); 6 end modo_e; x0 x1 y0 y2 z1 y1 z0 out out buffer inout in in inout • in e out operam exclusivamente como Entrada e Saída, respectivamente • buffer opera como saída e pode ser referenciada dentro da arquitetura • inout opera como Entrada/Saída, usada em barramento de dados Arquitetura Tipos de dados da biblioteca STD Tipo Valor Exemplos boolean Verdadeiro, falso true, false bit Um, zero '1','0' bit_vector 1, 0 "1010", B"10_10", O"12", X"A" integer -231-1 ≤ x ≤ 231-1 123, 2#11_11_011#, 8#173#, 16#7B# obs.: o “_” é para tornar mais legível natural 0 ≤ x ≤ 231-1 positive 1 ≤ x ≤ 231-1 character Caracteres ASCII a, b, 0, 1, C, D, ?, ), * string Tipo character "teste", ""com aspas"" time ps, ns, us, ms, sec, min, hr 1 ms, 100 us, 1 ns, 1 sec 02/10/2018 UFAM / prof. MgN 10 Tipos de dados da biblioteca IEEE Tipo Valor Exemplos *std_logic (tabela ao lado) '1', '0', 'Z' *std_logic _vector (tabela ao lado) "ZZ01", B"10_10", O"12" 02/10/2018 UFAM / prof. MgN 11 Valores possíveis (std_logic e std_logic_vector) Valor Descrição '1' Nível lógico 1 (tipo Bit) '0' Nível lógico 0 (tipo Bit) 'Z' Alta impedância '–' Irrelevante 'U' Não Inicializado 'X' Desconhecido 'W' Fraco, desconhecido 'L' Fraco '0' 'H' Fraco '1' Existem dois pacotes que não podem ser usados conjuntamente • numeric_bit possui os tipos bit e bit_vector • numeric_std possui os tipos std_logic e std_logic_vector Vetores unidimensionais 02/10/2018 UFAM / prof. MgN 12 1 -- definições de vetores 2 s : string(1 to 4) := "mesa"; 3 d : bit_vector(3 downto 0):="1011"; 4 -- atribuições de vetores 5 -- "1011" na notação posicional 6 d <= ('1','0','1','1'); 7 -- "1011" com associação por nomes 8 d <= (2 => '0', others => '1'); 'a''s''e''m' s(4)s(3)s(2)s(1) '1''1''0''1' d(0)d(1)d(2)d(3) Inicialização de sinais e variáveis 1 entity tp_e is 2 port( 3 -- sinais de 8 bits 4 p: in bit_vector(0 to 7); 5 ad: buffer bit_vector(0 to 7)); 6 end tp_e; 7 architecture tp of tp_e is 8 begin 9 -– porta 8 bits <= saída A/D 10 p <= ad; 11 end tp; Exemplo de transferência paralela Descreva a transferência do conversar A/D para a porta paralela em pseudoVHDL 02/10/2018 UFAM / prof. MgN 13 Conversor A/D Porta Paralela8 pad P [7] P [6] P [5] P [4] P [3] P [2] P [1] P [0] (MSB) Conversor A/D (LSB) Tipos de dados definidos pelo usuário 02/10/2018 UFAM / prof. MgN 14 1 -- tipo vetor de 4 x 1 bit 2 type vetor4x1 is array (0 to 3) 3 of bit; 4 –- tipo vetor de 8 x 4 bits 5 type vetor8x4 is array (0 to 7) 6 of bit_vector (3 downto 0); 7 -- tipo enumerado 8 type cores is (vd, am, vm); 1 Conteúdo 0 0 0 1 2 13 Índice 1000 0100 0010 0001 1000 0100 0 1 2 3 4 5 ConteúdoÍndice 0010 0001 6 7 Vetor 4x1 bit Vetor 8x4 bits Operadores e Atributos em VHDL Diálogo sobre os principais operadores e atributos usados em VHDL 02/10/2018 UFAM / prof. MgN 15 Operadores de atribuição Operador Operação := • Atribuir valor a variável e constante • Inicializar constante, sinal e variável <= • Atribuir valor a sinal => • Atribuir valor ou valores com a cláusula others em vetores 02/10/2018 UFAM / prof. MgN 16 1 –- atrib. de variáveis “:=” 2 variable x : natural 3 range 0 to 15 := 9; 4 x := x + 2; 5 –- atrib. de sinais “<=” 6 signal s1 : bit; 7 s1 <= '1'; 8 –- atrib. de sinais “=>” 9 s2: bit_vector(7 downto 0); 10 s2 <= (0=>'1', others=>'0') Operador de concatenação Operador Operação & Agrupamento de objetos e valores 1 –- concatenação de bits 2 x1 <= 'Z' & '0' & '1' & '1'; 3 -- concatenação de cadeias de bits 4 x2 <= "Z0" & "11"; 5 -- concatenação com vírgula 6 x4 <= ('Z', '0', '1', '1'); 7 -- concatenação com “others” 8 x5 <= ('Z', '0', others => '1'); 02/10/2018 UFAM / prof. MgN 17 As quatro expressões são equivalentes e ambas atribuem o valor Z011 Operadores lógicos, aritméticos e de comparações • Lógicos • And, Or, Not, Nand, Nor, Xor e Xnor • Aritméticos • +, –, *, / e ** • Comparações • =, /=, >, <, >= e <= 02/10/2018 UFAM / prof. MgN 18 1 entity som_e is 2 port( 3 a,b : in natural range 0 to 15; 4 s : out natural range 0 to 15); 5 end som_e; 6 architecture som of som_e is 7 begin 8 s <= a + b; 9 end som; a[3..0] b[3..0] s[3..0]Somador de 4 bits Descreva um somador de 4 bits em pseudoVHDL Atributos e funções de sinais 02/10/2018 UFAM / prof. MgN 19 Discriminação Operação Atributo s‘event Retorna true se ocorreu transição em ‘s’ Função IEEE rising_edge(s) Retorna true se ocorreu a transição de subida em ‘s’ Função IEEE falling_edge(s) Retorna true se ocorreu a transição de descida em ‘s’ 1 –- exemplo com atributo 2 b : bit; -- Tipo STD 3 -- bordas de subida/descida 4 if b'event and b='1' then 5 if b'event and b='0' then 6 -- exemplo com função IEEE 7 s : std_logic; -- Tipo IEEE 8 -- bordas de subida/descida 9 if rising_edge(s) then 10 if falling_edge(s) then Operadores de deslocamento 02/10/2018 UFAM / prof. MgN 20 1 entity deslo_e Is 2 port( 3 p : out bit_vector(3 to 0); 4 q : out bit_vector(3 downto 0) 5 );6 end deslo_e; 7 architecture deslo of deslo_e is 8 begin 9 p <= q ror 1; -- giro horário 10 q <= q sll 2; -- realiza 4*q 11 end deslo; B3 B2 B1 B0 B3 B2 B1 B0 B3 B2 B1 B0 B3 B2 B1 B0 0 0 sll – Shift Left Logical srl – Shift Right Logical ror – Rotate Right rol – Rotate Left Circuitos Sequenciais com Comandos PROCESS e IF Diálogo sobre os conceitos de comandos sequenciais básicos de VHDL 02/10/2018 UFAM / prof. MgN 21 Comandos sequenciais básicos •Descrição de circuitos combinacionais e sequenciais •Principais comandos: • Process – construção de código sequencial • If – semelhante ao if da linguagem C • Wait – espera uma condição ser satisfeita • Case – seleciona uma opção dentre várias (switch de C) • Loop – laço com For, While, Exit e Next • Escritas dentro de processo, procedimento ou função 02/10/2018 UFAM / prof. MgN 22 Somador com o comando PROCESS • Usada na construção de código sequencial • São permitidos os comandos if, case, loop e wait no trecho de código sequencial 1 –- soma/subtração sequencial 2 entity seq_e is 3 port( a, b : in integer; 4 sum, carry : out integer); 5 end seq_e; 6 architecture seq of seq_e is 7 begin 8 process (a, b) 9 begin 10 sum <= a xor b; 11 carry <= a and b; 12 end process; 13 end proc; • O código será reavaliado sempre que os sinais a e/ou b mudarem • As declarações internas ao process são processadas sequencialmente 02/10/2018 UFAM / prof. MgN 23 Flip-flop tipo D com o comando IF • É um dos comandos sequencias mais usados • Descreva o flip-flop tipo D em pseudoVHDL 02/10/2018 UFAM / prof. MgN 24 1 entity ffd_e is 2 port( clk, d : in std_logic; 3 q : out std_logic ); 4 end ffd_e; 5 architecture ffd of ffd_e is 6 begin 7 process (clk) 8 begin 9 if rising_edge(clk) then 10 q <= d; 11 end if; -- memória implícita 12 end process; 13 end ffd; q d clk FF D O process é executado quando a entrada clk é alterada Flip-flop D com reset prioritário e comando IF • Descreva o flip-flop D com entrada reset assíncrona prioritária em pseudoVHDL 02/10/2018 UFAM / prof. MgN 25 1 entity ffd_e is 2 port( q : out std_logic; 3 clk, d, rst : in std_logic); 4 end ffd_e; 5 architecture ffd of ffd_e is 6 begin 7 process (clk, rst) 8 begin 9 if rst = '1' then q <= '0’; 10 elsif rising_edge(clk) then 11 q <= d; 12 end if; -- memória implícita 13 end process; 14 end ffd; q d clk rst FF D O rst (assíncrono) é prioritário com relação ao clk (síncrono) Circuitos Sequenciais com Comandos CASE e WAIT Diálogo sobre os conceitos de comandos sequenciais básicos de VHDL 02/10/2018 UFAM / prof. MgN 26 Contador com comando CASE • Seleciona uma opção dentre várias existentes p/ executar • Permite a criação fácil de circuitos combinacionais • Descreva o contador da máquina de estados a seguir em pseudoVHDL 02/10/2018 UFAM / prof. MgN 27 1 entity cont_e is 2 port( clk : in std_logic; 3 q: buffer bit_vector(1 downto 0)); 4 end cont_e; 5 architecture cont of cont_e is 6 begin 7 process (clk) begin 8 if rising_edge(clk) then 9 case q is 10 when "00" => q <= "01"; 11 when "01" => q <= "10"; 12 when others => q <= "00"; 13 end case; 14 end if; 15 end process; 16 end cont; 00 0110 11 Tabela da Verdade com comando CASE • Descreva o circuito lógico do bloco e TV em pseudoVHDL 02/10/2018 UFAM / prof. MgN 28 1 entity tv_e is 2 port( a, b : in bit; 3 s : out bit ); 4 end tv_e; 5 architecture tv of tv_e is 6 begin 7 process (a, b) 8 begin 9 case a & b is 10 when "00" => s <= '0’; 11 when "01" => s <= '1’; 12 when "10" => s <= '1’; 13 when others=> s <='0’; 14 end case; 15 end process; 16 end tv; Condição do sinal de entrada Operação simbólica ab = "00" s '0' ab = "01" s '1' ab = "10" s '1' ab = "11" s '0' s a b Circuito Lógico Bloco funcional Tabela funcional Exemplo com contador síncrono módulo 10 02/10/2018 UFAM / prof. MgN 29 Descreva um contador crescente, síncrono de módulo 10 em pseudoVHDL cout q[3..0]cin aclear Contador Crescente Módulo 10 clk Sinal de dados Descrição do sinal q[3..0] Saída de dados Condição dos sinais de entrada Operação simbólica Prior aclear='0' q '0‘ (modo reset) 0 cout '0' cin='1' e clk='↑' qq+1 se q<9 cc0 (modo contagem) 1 cout '1' se q=9 cc '0' cin='0' e clk='↑' Nenhuma (modo memória) Tabela funcional Bloco funcional Entidade do contador síncrono 02/10/2018 UFAM / prof. MgN 30 1 entity count_e is 2 type count_t is natural 3 range 0 to 9; 4 port( 5 q : out count_t; 6 aclear : in bit; 7 cin : in bit; 8 cout : out bit; 9 clk : in bit 10 ); 11 end count_e; cout q[3..0]cin aclear Contador Crescente Módulo 10 clk Bloco funcional Arquitetura do contador síncrono 02/10/2018 UFAM / prof. MgN 31 12 architecture count of count_e is 13 begin 14 process (aclear, clk, cin) 15 variable cont : count_t:=0; 16 begin 17 if aclear = '0' then cont:=0; 18 elseif rising_edge (clk) then 19 if cin = '1' then 20 if cont = 9 then cont := 0; 21 else cont := cont+1; end if; 22 if cont = 9 then cout <= '1'; 23 else cout <= '0'; end if; 24 end if; 25 end if; 26 q <= cont; 27 end process; 28 end count; Sinal de dados Descrição do sinal q[3..0] Saída de dados Condição dos sinais de entrada Operação simbólica Pri or aclear='0' q '0' 0 cout '0' cin='1' e clk='↑' qq+1 se q<9, cc 0 1cout '1' se q=9, cc '0' cin='0' e clk='↑' Nenhuma Tabela funcional Delays com o comando WAIT • O processo ou subprograma suspenda a execução até situação externa ocorrer • Descreva as esperas em pseudoVHDL: • Expiração de 10 ms • Transição de subida de clk • Mudança em rst 1 entity esp_e is 2 port( clk,rst : in std_logic); 3 end esp_e; 4 architecture esp of esp_e is 5 begin -- processo não pode ter 6 -- lista de sensibilidade 7 process 8 begin 9 -- espera subida de clk 10 wait for 10 ms; 11 -- espera rst mudar 12 wait until rising_edge(clk); 13 -- espera rst ser igual a 1 14 wait on rst; 15 end process; 16 end esp; 02/10/2018 UFAM / prof. MgN 32 Principais aprendizados de VHDL – Comandos Sequenciais – Aprendizados conceituais (Comandos sequenciais) • Estrutura de código • Tipos de dados • Operadores atribuição, concatenação, lógico, aritmético, comparação e deslocamento • Atributos e operadores de sinais • Comandos IF, CASE, LOOP e WAIT Aprendizados de negócios (Circuitos digitais síncronos) • Flip-flops e registradores • Contadores • Circuitos em máquinas de estados • Circuitos em Tabelas da Verdade (TV) • Circuitos de temporização com espera 02/10/2018 UFAM / prof. MgN 33
Compartilhar