1 / 39

I n t r o d u ç ã o a o V H D L

.. . . . ... . .. . .. . .... . . . . . . . . . ... . . . .. . . . . . . . .... . .. . . . . .. . . . . .. .. .. . I n t r o d u ç ã o a o V H D L. EPUSP – PTC2527 2010 Guido Stolfi. V H D L. VHDL = VHSIC Hardware Description Language

afram
Télécharger la présentation

I n t r o d u ç ã o a o V H D L

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. .. . . . ... . .. . .. . .... . . . . . . . . . ... . . . .. . . . . . . . .... . .. . . . . .. . . . . .. .. .. . Introdução aoV H D L EPUSP – PTC2527 2010 Guido Stolfi

  2. V H D L • VHDL = VHSIC Hardware Description Language • VHSIC = Very High Speed Integrated Circuits • Departamento de Defesa –EUA – 1985 • IEEE 1076-1987 • IEEE 1076-1993 • IEEE 1164

  3. V H D L • Objetivos: • Simulação • Descrição de Funcionamento • Síntese Lógica • FPGA’s , EPLD’s, ASIC’s • Independente de Tecnologia • Vários níveis de abstração • Alternativa: Verilog

  4. Descrição de um Circuito • Abordagens e Níveis de Abstração Estrutural Processadores Registradores Portas Transistores Comportamental Algoritmos RTL Funções Lógicas Func. Transferência Células Módulos Chips Subsistemas Física

  5. Descrição Estrutural por Esquema Qual a função deste circuito? Qual a resposta a um conjunto de estímulos? Como modificá-lo para alterar sua função? Tem algum erro?

  6. Descrição Estrutural por V H D L -- declaração: ENTITY circuito_1 IS PORT( A, B, C : IN BIT; R : OUT BIT; Q : INOUT BIT ); END circuito_1; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q ; END arq_circ_1; -- fim da descrição

  7. V H D L x Programa Programa V H D L Código Operações Concorrentes Paralelismo Execução assíncrona ou síncrona • Software, Firmware • Algoritmos • Passos Sequenciais • Execução síncrona

  8. Simulação de um Circuito A B C Q ? ? ? ? ? R ? ? ? ? ?

  9. Simulação VHDL -- descrição das entradas: BEGIN A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 50 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; END; A B C Q ? ? ? ? ? R ? ? ? ? ?

  10. Simulação VHDL T = 0 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 50 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q ; END arq_circ_1; Sinais A e B mudaram e afetam uma atribuição Atribuição gera novo evento para a variável Q num instante futuro: Q <= ‘1’;

  11. Simulação VHDL T = 0 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; WAIT 45 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ) AFTER 5ns; R <= C AND Q ; END arq_circ_1; Implícito Novo evento para a variável Q é inserido na lista de eventos

  12. Simulação VHDL T = 0 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 45 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q AFTER 5ns; END arq_circ_1; Implícito Novo evento para a variável R é inserido na lista de eventos

  13. Simulação VHDL T = 5 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 5 ns; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q AFTER 5ns; END arq_circ_1; Implícito Novo evento para a variável R é inserido na lista de eventos

  14. Simulação VHDL T = 10 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 5 ns; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q; END arq_circ_1; A variável de saída R não causa nenhum evento (não é entrada do circuito)

  15. Simulação VHDL T = 50 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 5 ns; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 5 ns; Q <= ‘1’; WAIT 45 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q; END arq_circ_1; Novo evento para a variável Q poderia ser inserido na lista de eventos, mas é redundadnte (não há alteração no estado de Q)

  16. Simulação VHDL T = 100 ns A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 5 ns; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 5 ns; Q <= ‘0’; WAIT 45 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; -- descrição comportamental: ARCHITECTURE arq_circ_1 OF circuito_1 IS BEGIN Q <= NOT ( A AND B ); R <= C AND Q; END arq_circ_1; Novo evento para a variável Q é inserido na lista de eventos etc...

  17. Simulação VHDL T = 300 ns BEGIN A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 5 ns; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; WAIT 5 ns; Q <= ‘0’; WAIT 5 ns; R <= ‘0’; WAIT 40 ns; C <= ‘0’; WAIT 50 ns; A <= ‘0’; B <= ‘0’; WAIT 5 ns; Q <= ‘1’; END; A B C Q R

  18. Tipos de Dados em VHDL • BOOLEAN : pode ser ‘False’ ou ‘True’ • Funções pré-definidas: • and, or, nand, nor, xor, xnor, not (retornam BOOLEAN) • =, /=, <, >, <=, >= (retornam BOOLEAN) Ex.: Função AND

  19. Tipos de Dados em VHDL • BIT : pode ser ‘0’ ou ‘1’ • Funções pré-definidas: • and, or, nand, nor, xor, xnor, not (retornam BIT) • =, /=, <, >, <=, >= (retornam BOOLEAN) Ex.: Função AND

  20. Tipos de Dados em VHDL • STD_LOGIC ( IEEE1164): • ‘X’ = Desconhecido • ‘0’ = Força Nível 0 • ‘1’ = Força Nível 1 • ‘Z’ = Alta Impedância • ‘W’ = Desconhecido Fraco • ‘L’ = Nível 0 Fraco • ‘H’ = Nível 1 Fraco • ‘-’ = Indiferente Ex.: Função AND

  21. Tipos de Dados em VHDL • INTEGER: Depende de implementação; p. ex. 32 bits • Funções pré-definidas: • +, -, abs, *, /, mod, rem, ** (retornam INTEGER) • =, /=, <, >, <=, >= (retornam BOOLEAN)

  22. Tipos de Dados em VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -- std_logic USE IEEE.STD_LOGIC_ARITH.ALL; -- numeros e funções ENTITY circuito_2 IS-- exemplos: PORT ( A, B : IN STD_LOGIC; -- entradas -- barramentos: Q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); P : BUFFER STD_LOGIC_VECTOR (1 TO 5)); END circuito2;

  23. Tipos de Dados em VHDL -- outros tipos pré definidos: TYPE integer is range -2147483648 to +2147483647; typeNAtural is range 0 to +2147483647; -- exemplos de tipos definidos pelo usuario: TYPE uint_6 IS RANGE 0 TO 63; TYPE estado_mp IS (play, pause, ff, ref, rec, stop); TYPE vetor8 IS ARRAY (7 DOWNTO 0) OF STD_LOGIC; TYPE matriz8 IS ARRAY (7 DOWNTO 0) OF vetor8;

  24. Processos • Blocos de código contendo IF, WAIT, CASE, LOOP e lista de sensibilidade • São executados quando um dos sinais da lista sofre alteração de estado. PROCESS (A, B) -- processo combinatório BEGIN IF A = ‘0’ THEN Q <= B; ELSE Q <= NOT B; -- implementa XOR END IF; END PROCESS;

  25. Lógica Sequencial com Processos • Lista de sensibilidade inclui um Clock PROCESS (CLK) -- processo sequencial (contador) BEGIN IF CLK’EVENT AND CLK = ‘1’ THEN -- borda de subida Q <= Q + 1; -- precisa de ieee.std_logic_arith.all END IF; END PROCESS; PROCESS (CLK) -- registrador de deslocamento BEGIN IF CLK’EVENT AND CLK = ‘0’ THEN -- borda de descida Q (7 DOWNTO 1) <= Q (6 DOWNTO 0); Q (0) <= D; END IF; END PROCESS;

  26. Lógica Sequencial PROCESS (CLK, RST) -- contador c/ reset assíncrono BEGIN IF RST = ‘1’ THEN -- reset Q <= “00000000”; -- zera 8 bits ELSE IF CLK’EVENT AND CLK = ‘1’ THEN IF Q = 191 THEN Q <= (OTHERS => ‘0’); -- zera 8 bits ELSE Q <= Q + 1; -- conta de 0 a 191 END IF; END IF; -- fim evento CLK END IF; -- fim RST END PROCESS;

  27. Exemplo Não Sintetizável PROCESS (CLK) -- contador nas duas bordas do clock ! BEGIN IF CLK’EVENT THEN -- a sintaxe do VHDL permite... Q <= Q + 1; -- pode ser simulado... END IF; -- mas não é implementável c/ flip-flops! END PROCESS; --- Problema: Implementar um contador que conta nas duas bordas do Clock. CLK Q 0 1 2 3 4 5 ...

  28. Sinais e Variáveis • SIGNAL: • Pode ser declarado em uma ENTITY ou ARCHITECTURE • Representa um sinal elétrico (fio, barramento, registrador) • Disponível após a conclusão de um PROCESS • VARIABLE: • Declarado apenas dentro de um PROCESS • Representa um valor ou informação de uso local • Valor disponível imediatamente • Não é passado para fora do PROCESS

  29. Sinais ENTITY delay_2000 IS PORT ( D, CLK : IN STD_LOGIC; Q : OUT STD_LOGIC); END delay_2000; -- atrasador de 2000 amostras ARCHITECTURE delay_2000 OF delay_2000 IS SIGNAL REG : STD_LOGIC_VECTOR (1999 DOWNTO 0); BEGIN PROCESS (CLK) -- registrador de deslocamento BEGIN IF CLK’EVENT AND CLK = ‘0’ THEN -- shifta na descida REG (0) <= D; REG (1999 DOWNTO 1) <= REG (1998 DOWNTO 0); END IF; END PROCESS; Q <= REG(1999); -- atribuição fora do processo END delay_2000;

  30. Variáveis ENTITY count_1080 IS PORT ( R, CLK : IN STD_LOGIC; LINHA : OUT STD_LOGIC_VECTOR(10 downto 0)); END count_1080; -- contador de linhas HDTV ARCHITECTURE arquit OF count_1080 IS BEGIN PROCESS (CLK) -- contador up 0 a 1079 VARIABLE reg : INTEGER RANGE 0 to 2047; BEGIN IF R = ‘1’ THEN reg := 0; ELSIF CLK’EVENT AND CLK = ‘0’ THEN reg := reg + 1; IF reg = 1080 THEN reg := 0; END IF; END IF; LINHA <= reg; END PROCESS; END arquit ;

  31. CASE ... WHEN -- multiplexador de barramentos usando CASE ENTITY mux2_12b IS PORT( SEL : IN STD_LOGIC_VECTOR(1 downto 0); A, B : IN STD_LOGIC_VECTOR(11 downto 0); X : OUT STD_LOGIC_VECTOR(11 downto 0)); END mux2_12b; -- seleciona 2 barramentos de 10 b ARCHITECTURE arquit OF mux2_12b IS BEGIN PROCESS (A, B, SEL) -- logicacombinatoria BEGIN CASE SEL IS WHEN “00” => X <= A; WHEN “01” => X <= B; WHEN OTHERS => X <= “000000000000”; END CASE; END PROCESS; END arquit;

  32. Exemplo -- Laboratorio de TV Digital – Mackenzie -- Eng. Guido Stolfi - 25/05/2007 -- Projeto: ISDTV MOD -------------------------------------------------------------------------------- -- Modulo: fec_3.VHD -- Descricao: Generates FEC for ISDB-T -- Frame Sync resets puncturing pattern -- Rev. 2.0 14/11/07 - FS input on first bit -- Slices: 49 FF´s: 19 LUT´s: 72 -------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity fec_3 is Port ( CLK : in std_logic; -- bit clock (32 MHz) RST : in std_logic; -- Frame Sync (1 pulse) BITIN : in std_logic; -- serial bit input ENA : in std_logic; -- enables FEC RATE : in std_logic_vector(2 downto 0); -- 1/2, 2/3, 3/4, 5/6, 7/8 B0 : out std_logic; -- output bit b0, b1 B1 : out std_logic; ENAOUT : out std_logic; -- enables output (XY) symbol RSTOUT : out std_logic); -- delayed reset (1 pulse) end fec_3; --------------------------------------------------------------------------------

  33. Exemplo architecture Behavioral of fec_3 is signal DEL : std_logic_vector(5 downto 0); -- Shift Register signal B3 : std_logic; -- temporary bit signal BITCNT : std_logic_vector(2 downto 0); -- counts input bits begin ------------------------------------------------------------------------- process (CLK,BITIN,DEL) variable OX : std_logic; -- output bits variable OY : std_logic; begin OX := BITIN xor ((DEL(5) xor DEL(4)) xor (DEL(3) xor DEL(0))); -- FEC OY := BITIN xor ((DEL(4) xor DEL(3)) xor (DEL(1) xor DEL(0))); if CLK'event and CLK = '1' then RSTOUT <= RST; if ENA = '1' then -- register shifting DEL(4 downto 0) <= DEL(5 downto 1); DEL(5) <= BITIN; end if; -- --------------------------------------------------------------------

  34. Exemplo if RATE = "000" and ENA = '1' then -- rate 1/2 ,no reset BITCNT <= "000"; B0 <= OX; B1 <= OY; ENAOUT <= ENA; -- -------------------------------------------------------------------- elsif RATE = "001" and ENA = '1' then -- 2/3 (4/6) if BITCNT = "011" or RST = '1' then -- pattern: 0-1-2-3- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "011" then B0 <= OX; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "000" then B3 <= OY; -- stores bit ENAOUT <= '0'; elsif BITCNT = "001" then B0 <= B3; B1 <= OX; B3 <= OY; -- stores bit ENAOUT <= ENA; else B0 <= B3; B1 <= OY; ENAOUT <= ENA; end if;

  35. Exemplo elsif RATE = "010" and ENA = '1' then -- 3/4 if BITCNT = "010" or RST = '1' then -- pattern: 0-1-2- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "010" then B0 <= OX; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "000" then B0 <= OY; ENAOUT <= '0'; else B1 <= OX; ENAOUT <= ENA; end if; -- --------------------------------------------------------------------

  36. Exemplo elsif RATE = "011" and ENA = '1' then -- 5/6 if BITCNT = "100" or RST = '1' then -- patern: 0-1-2-3-4- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "100" then B0 <= OX; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "000" then B0 <= OY; ENAOUT <= '0'; elsif BITCNT = "001" then B1 <= OX; ENAOUT <= ENA; elsif BITCNT = "010" then B0 <= OY; ENAOUT <= '0'; else B1 <= OX; ENAOUT <= ENA; end if; -- --------------------------------------------------------------------

  37. Exemplo elsif RATE = "100" and ENA = '1' then -- 7/8 if BITCNT = "110" or RST = '1' then -- pattern: 0-1-2-3-4-5-6- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "110" then B0 <= OX; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "000" then B3 <= OY; -- stores bit ENAOUT <= '0'; elsif BITCNT = "001" then B0 <= B3; B1 <= OY; ENAOUT <= ENA; elsif BITCNT = "010" then B0 <= OY; ENAOUT <= '0'; elsif BITCNT = "011" then B1 <= OX; ENAOUT <= ENA; elsif BITCNT = "100" then B0 <= OY; ENAOUT <= '0'; else B1 <= OX; ENAOUT <= ENA; end if;

  38. Exemplo -- -------------------------------------------------------------------- elsif ENA = '1' then -- no FEC (1/1) Hypotetic if BITCNT = "001" or RST = '1' then -- pattern: 0-1- 0 BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "001" then B0 <= BITIN; ENAOUT <= '0'; else B1 <= BITIN; ENAOUT <= ENA; end if; -- -------------------------------------------------------------------- else -- ENA = 0 ENAOUT <= '0'; end if; -- end rate end if; -- end clock event end process; -------------------------------------------------------------------------------- end Behavioral;

  39. Uso de Componentes --- declaração de componentes (descritos em outro lugar): COMPONENT count_1080 IS PORT ( R, CLK : IN STD_LOGIC; LINHA : OUT STD_LOGIC_VECTOR(10 downto 0)); END COMPONENT; -- contador de linhas HDTV COMPONENT delay_2000 IS PORT ( D, CLK : IN STD_LOGIC; Q : OUT STD_LOGIC); END COMPONENT; -- atrasador de 2000 amostras --------- -- CLOCK, TRIG : IN STD_LOGIC; LINEOUT: OUT STD_LOGIC_VECTOR(10 downto 0); -- SIGNAL TRIGDEL : STD_LOGIC; --- uso dos componentes declarados: blk001: count_1080 PORT MAP ( TRIGDEL, CLOCK, LINEOUT); -- posicional blk002: delay_2000 PORT MAP ( TRIG => D, TRIGDEL => Q, CLOCK => CLK); -- nominal

More Related