PCS3225 Sistemas Digitais II Biestáveis em VHDL Marcos A. Simplicio Jr. Slides baseados em material de Edson Midorikawa e Bruno Albertini PCS3225-2015 1 Tópicos VHDL: recapitulação Circuitos sequenciais em VHDL comando process exemplos Biestáveis em VHDL Referência: Wakerly, pág. 625-645 e pág. 697-701. PCS3225-2015 2 1
Recapitulando: conceito de HDL Programação de software: compilação Compilador: transforma código em linguagem de alto nível ( for(...) ) em código de máquina Resultado: 0s e 1s prontos para serem interpretados por processador (execução sequencial) Descrição de hardware (HDL): síntese, ou sintetização Sintetizador: interpreta comandos em linguagem de alto nível ( Z <= 1 ), mapeando-o em elementos de hardware Resultado: um conjunto de portas lógicas ligadas às entradas e saídas, implementando lógica desejada (tudo executa concorrentemente) Recapitulando: estrutura básica Entity: define interface Entradase saídas: númeroe tipo Architecture : define o comportamento Como as entradas são processadas para gerar saída Umamesmaentity podetermaisde umaarchitecture X Z Y 2
Formas equivalentes Recapitulando: tipos de dados Algunspadrãodalinguagem: bit, boolean, character, integer, real, string, time MasosmaisusadossãodoispadronizadosIEEE : std_logic, std_logic_vector Exemplos de uso: signal x : std_logic; signal v1,v2, v3 : std_logic_vector (3 downto 0); x <= 1 ; v1 <= 0001 ; v2(3 downto 1) <= 000 ; v2(0) <= x; v3 <= (0 => 1, (others => 0 ); PCS3225-2015 5 Recapitulando: abstrações Estrutural: componentes e ligação entre eles entity Inhibit is port (X, Y: in STD_LOGIC; Z: out STD_LOGIC); end Inhibit architecture Inhibit_structure of Inhibit is component AND2 port (A,B: in STD_LOGIC; O: out STD_LOGIC); component NOT port (I: in STD_LOGIC; O: out STD_LOGIC); signal ny: STD_LOGIC; U1: INV port map (Y, ny); X Z U1: AND2 port map (X, ny, Z); end Inhibit_structure Y PCS3225-2015 6 3
Recapitulando: abstrações Fluxode dados: expressões lógicas descrevem como entrada é processada até saída entity Inhibit is port (X, Y: in STD_LOGIC; Z: out STD_LOGIC); end Inhibit architecture Inhibit_flow of Inhibit is Z <= X and (not Y); end Inhibit_flow X Y Z PCS3225-2015 7 Recapitulando: abstrações Fluxo de dados: também possível com select-when Similar ao switch-case emlinguagenscomoc e Java Masé hardware: sintetizadocom um MUX! Podeser uma função Um ou vários valores entity prime is port(n: in STD_LOGIC_VECTOR(3 downto 0); F: out STD_LOGIC); end prime architecture prime_flow of prime is with N select F <= 1 when 0001, 1 when 0010 0011 0101, 1 when 0111 1011 1101, 0 when others; end prime_flow Similar ao default emc 8 4
Recapitulando: abstrações Comportamental: descreve comportamento do circuito Pode ser concorrente: usando o when-else Também pode ser sintetizado com MUX, computando lógica na entrada de seleção entity Inhibit is port (X, Y: in STD_LOGIC; Z: out STD_LOGIC); end Inhibit architecture Inhibit_flow of Inhibit is Z <= X when Y = 0 else 0 ; end Inhibit_flow X Y Z PCS3225-2015 9 Recapitulando: exemplo Como construir o circuito de comparação entre dois númerosde 4 bits emvhdl? A 3 B 3 A 2 B 2 A 1 B 1 A 0 B 0 igual PCS3225-2015 10 5
Recapitulando: exemplo Como construir o circuito de comparação entre dois números de 4 bits em VHDL? entity compare is port(a,b: in STD_LOGIC_VECTOR(0 to 3); igual: out STD_LOGIC); end compare architecture arch_behavior of compare is igual <= 1 when A = B else 0 ; end arch_behavior architecture arch_flow of compare is signal v : STD_LOGIC_VECTOR (0 to 3); v <= A xnor B; igual <= v(0) and v(1) and v(2) and v(3); end arch_flow PCS3225-2015 11 Recapitulando: modelo temporal As declarações em VHDL são executadas concorrentemente Estamos descrevendo um hardware, não uma sequência de instruções de software Exemplo: operação de swap(a,b): troca a por b e vice-versa Em C, isso nãofunciona: 1: a = b; 2: b = a; Em C, isso funciona: 1: x = a; 2: a = b; 3: b = x Em C, também funciona: (mas desperdiça memória...) 1: sa = b; 2: PCS3225 sb = - 2015 a; tempo memória a b 0 5 7 1 7 7 2 7 7 tempo memória a b x 0 5 7 * 1 5 7 5 2 7 7 5 3 5 5 5 memória a b t 1 t 2 memória a b t 2 x t 1 t 3 6
Recapitulando: modelo temporal As declarações em VHDL são executadas concorrentemente Estamos descrevendo um hardware, não uma sequência de instruções de software Exemplo: operação de swap(a,b): troca a por b e vice-versa Em C, isso nãofunciona: 1: a = b; 2: b = a; Em C, isso funciona: 1: x = a; 2: a = b; 3: b = x Em VHDL, isso não funciona: 1: x <= a; 2: a <= b; 3: b <= x; Em VHDL, isso funciona: 1: sa <= b; 2: sb <= a; memória tempo a b x 0 5 7 * 1,2,3?????? a b x entity swap is port (a, b: in STD_LOGIC; sa,sb: out STD_LOGIC); PCS3225-2015 end swap 13 a b sa sb VHDL comportamental: pode ser descrito na forma de construção sequencial, usando o comando process Nota: sequencial aqui significa usando flip-flops/latches Importante: não confundir com execução sequencial de instruções... Múltiplos processos executam concorrentemente entre si Instruções dentro de processo executam concorrentemente entre si A diferença principal nesse caso é que processos são ativados em resposta a estímulos definidos por projetista Isso permite a construção de circuitos síncronos 14 7
VHDL comportamental: pode ser descrito na forma de construção sequencial, usando o comando process Múltiplos processos executam concorrentemente entre si Lista de sensibilidade: processo executa sempre que algum sinal da lista mudar de valor process-statement process-statement Similar a signal, porém mais abstrato: não corresponde necessariamente a algo físico no circuito sintetizado. processos não podem declarar sinais locais PCS3225-2015 15 Controle de processos: lista de sensibilidade ou comando de espera ; ; ; PCS3225-2015 16 Slide elaborado por Bruno Albertini. 8
Sintaxe do comando WAIT: wait [sensibilidade][condição][timeout] Tipos: Sensibilidade: on nome_sinal Exemplo: wait on CLOCK; Condição: until expressão_booleana Exemplo: wait until CLOCK = 1 ; Timeout: for expressão_temporal Exemplo: wait for 150 ns; PCS3225-2015 17 Slide elaborado por Bruno Albertini. Lista de sensibilidade ou WAIT Exemplo: processo para cálculo de soma PCS3225-2015 18 Slide elaborado por Bruno Albertini. 9
Detector de primos de 4 bits (assumindo 1 primo ) n 3,n 2,n 1,n 0 n 3 n 0 + n 3 n 2 n 1 + n 2 n 1 n 0 + n 2 n 1 n 0 Recalcula saída F sempre quen muda de valor Diferente do <= do signal Construção condicional em processos: if-then-else Exemplo: z = XOR (a,b) process(a,b) -- descrição comportamental do XOR if (a /= b) then z <= 1 ; else z <= 0 ; endif; end process; 10
Construção condicional em processos: if-then-else Aqui assume-se o uso de uma função CONV_INTEGER, que converte um array ( STD_LOGIC_VECTOR ) em um inteiro 21 function: como funções em linguagens procedurais Tomam argumentos como entrada, retornam um resultado variáveis locais comandos process-statement process-statement 22 11
X Z Y Implementação sem função Declaraçãoda função Implementação com função 23 Outra construção condicional: case-when Similar ao switch-case emlinguagenscomoc e Java Aqui assume-se o uso de uma função CONV_INTEGER, que converte um array ( STD_LOGIC_VECTOR ) em um inteiro 24 12
Equivalência cada statement concorrente equivale a um processo q1 <= a xor b; process q2 <= a xor b; wait on a, b; end process Sinais q1, q2 e q3 são calculados ao mesmo tempo: Processos e demais declarações executam concorrentemente; process(a, b) if (a /= b) then q3 <= 1 ; else q3 <= 0 ; endif; end process PCS3225-2015 25 Atrasos: comando after q1 <= a xor b; process q2 <= a xor b; wait on a, b; end process process(a, b) if (a /= b) then q3 <= 1 ; else q3 <= 0 ; endif; end process E se eu quiser criar um atraso(e.g., criar um tempo de propagação )? Comando after Também é possível configurar simulador para utilizar os atrasos das portas utilizadas na síntese Nota: no hardware físico, o atraso sempre existe... if (a /= b) then q3 <= 1 after 15 ns; -- tplh else q3 <= 0 after 10 ns; -- tphl endif; PCS3225-2015 26 13
Processos também permitem comandos de repetição Mas não faz com que execução seja sequencial: O que é feito é a expansão do loop... Isso pode causar muitos erros de projeto melhor evitar se possível... process(enable) for i in 0 to 3 loop temp <= temp + 1; end loop; end process; Resultado: soma 1 a temp (não 4...) process(enable) temp <= temp + 1; temp <= temp + 1; temp <= temp + 1; temp <= temp + 1; end process; 27 Biestáveis em VHDL Também funcionariase omitido VHDL comportamental: representação de Latch tipod com lógicapositiva D Q Q C QN PCS3225-2015 28 14
Biestáveis em VHDL Esse sinal mudou, causando a execução do process VHDL comportamental: duas possíveis representações de Flip-Flop tipo D ativado por borda positiva D CLK Q PCS3225-2015 29 Biestáveis em VHDL D Q CLK CLR VHDL comportamental: Flip-Flop tipo D ativado por borda positiva, com clear assíncrono PCS3225-2015 30 15
Biestáveis em VHDL D PR Q CLK QN CLR VHDL comportamental: Flip-Flop tipo D ativado por borda positiva, com clear e preset assíncronos PCS3225-2015 31 Biestáveis em VHDL process(clk) if (CLK event and CLK= 1 ) then if En = 1 then Q <= D; end if; end if; end process; D CLK En Q VHDL comportamental: Flip-Flop tipo D ativado por borda positiva, com enable PCS3225-2015 32 16
Referências Referências desta aula: Wakerly, pág. 625-628 Wakerly, pág. 697-700. Referência para a próxima aula Máquina de estados: Síntese de FSM Referência: Wakerly, pág. 553-570. PCS3225-2015 33 17