A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

I n t r o d u ç ã o a o V H D L EPUSP – PTC2527 2010 Guido Stolfi 1.................................................................

Apresentações semelhantes


Apresentação em tema: "I n t r o d u ç ã o a o V H D L EPUSP – PTC2527 2010 Guido Stolfi 1................................................................."— Transcrição da apresentação:

1 I n t r o d u ç ã o a o V H D L EPUSP – PTC Guido Stolfi

2 V H D L VHDL = VHSIC Hardware Description Language – VHSIC = Very High Speed Integrated Circuits Departamento de Defesa –EUA – 1985 IEEE IEEE – IEEE

3 V H D L Objetivos: – Simulação – Descrição de Funcionamento – Síntese Lógica FPGAs, EPLDs, ASICs Independente de Tecnologia Vários níveis de abstração – Alternativa: Verilog 3

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

5 Descrição Estrutural por Esquema 5 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 6

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

8 Simulação de um Circuito 8 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; 9 A B C Q ? ? ? ? ? R ? ? ? ? ?

10 Simulação VHDL T = 0 ns 10 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; Atribuição gera novo evento para a variável Q num instante futuro: Q <= 1; Sinais A e B mudaram e afetam uma atribuição

11 Simulação VHDL T = 0 ns 11 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; Novo evento para a variável Q é inserido na lista de eventos Implícito

12 Simulação VHDL T = 0 ns 12 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; Novo evento para a variável R é inserido na lista de eventos Implícito

13 Simulação VHDL T = 5 ns 13 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; Novo evento para a variável R é inserido na lista de eventos Implícito

14 Simulação VHDL T = 10 ns 14 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 15 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 16 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 17 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) 18 FalseTrue False TrueFalseTrue 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 20 X01ZWLH- XX0XXX0XX X01XX01X ZX0XXX0XX WX0XXX0XX L HX01XX01X -X0XXX0XX 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) 21

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; 22

23 Tipos de Dados em VHDL -- outros tipos pré definidos: TYPE INTEGER IS RANGE TO ; TYPE NATURAL IS RANGE 0 TO ; -- 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; 23

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; 24

25 Lógica Sequencial com Processos Lista de sensibilidade inclui um Clock PROCESS (CLK)-- processo sequencial (contador) BEGIN IF CLKEVENT 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 CLKEVENT AND CLK = 0 THEN-- borda de descida Q (7 DOWNTO 1) <= Q (6 DOWNTO 0); Q (0) <= D; END IF; END PROCESS; 25

26 Lógica Sequencial PROCESS (CLK, RST)-- contador c/ reset assíncrono BEGIN IF RST = 1 THEN -- reset Q <= ;-- zera 8 bits ELSE IF CLKEVENT AND CLK = 1 THEN IF Q = 191 THEN Q 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; 26

27 Exemplo Não Sintetizável PROCESS (CLK)-- contador nas duas bordas do clock ! BEGIN IF CLKEVENT 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. 27 CLK Q

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 28

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 CLKEVENT 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; 29

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 CLKEVENT AND CLK = 0 THEN reg := reg + 1; IF reg = 1080 THEN reg := 0; END IF; END IF; LINHA <= reg; END PROCESS; END arquit ; 30

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)-- logica combinatoria BEGIN CASE SEL IS WHEN 00 => X <= A; WHEN 01 => X <= B; WHEN OTHERS => X <= ; END CASE; END PROCESS; END arquit; 31

32 Exemplo -- Laboratorio de TV Digital – Mackenzie -- Eng. Guido Stolfi - 25/05/ Projeto: ISDTV MOD Modulo: fec_3.VHD -- Descricao: Generates FEC for ISDB-T -- Frame Sync resets puncturing pattern -- Rev /11/07 - FS input on first bit -- Slices: 49 FF´s: 19 LUT´s: 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: 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; 34

35 Exemplo elsif RATE = "010" and ENA = '1' then -- 3/4 if BITCNT = "010" or RST = '1' then -- pattern: 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: 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: 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; 37

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 39


Carregar ppt "I n t r o d u ç ã o a o V H D L EPUSP – PTC2527 2010 Guido Stolfi 1................................................................."

Apresentações semelhantes


Anúncios Google