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

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

EPUSP – PTC Guido Stolfi

Apresentações semelhantes


Apresentação em tema: "EPUSP – PTC Guido Stolfi"— Transcrição da apresentação:

1 EPUSP – PTC2527 2010 Guido Stolfi
Introdução ao V 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 IEEE 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
Estrutural Processadores Registradores Portas Transistores Comportamental Algoritmos RTL Funções Lógicas Func. Transferência Células Módulos Chips Subsistemas Física Abordagens e Níveis de Abstração

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 Software, Firmware Algoritmos
Passos Sequenciais Execução síncrona Código Operações Concorrentes Paralelismo Execução assíncrona ou síncrona

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

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

10 Simulação VHDL T = 0 ns Sinais A e B mudaram e afetam uma atribuição
A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 50 ns; A <= ‘1’; B <= ‘1’; C <= ‘0’; 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 Implícito
A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; WAIT 45 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; 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 Implícito
A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; WAIT 45 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; 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 Implícito
-- 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; A <= ‘0’; B <= ‘0’; C <= ‘1’; WAIT 5 ns; Q <= ‘1’; R <= ‘X’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; A <= ‘0’; B <= ‘0’; 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’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; C <= ‘0’; 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’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; Q <= ‘1’; WAIT 45 ns; B <= ‘1’; WAIT 50 ns; C <= ‘0’; 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’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; Q <= ‘0’; WAIT 45 ns; C <= ‘0’; 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 A B C Q R BEGIN
WAIT 5 ns; Q <= ‘1’; R <= ‘X’; R <= ‘1’; WAIT 40 ns; A <= ‘1’; WAIT 50 ns; B <= ‘1’; Q <= ‘0’; R <= ‘0’; C <= ‘0’; A <= ‘0’; B <= ‘0’; 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 False True

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 1

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 X 1 Z W L H -

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

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 IF CLK’EVENT AND CLK = ‘0’ THEN -- borda de descida Q (7 DOWNTO 1) <= Q (6 DOWNTO 0); Q (0) <= D;

26 Lógica Sequencial PROCESS (CLK, RST) -- contador c/ reset assíncrono
BEGIN IF RST = ‘1’ THEN reset Q <= “ ”; -- zera 8 bits ELSE IF CLK’EVENT AND CLK = ‘1’ THEN IF Q = 191 THEN Q <= (OTHERS => ‘0’); -- zera 8 bits 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 1 2 3 4 5 ...

28 Sinais e Variáveis SIGNAL: VARIABLE:
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 SIGNAL REG : STD_LOGIC_VECTOR (1999 DOWNTO 0);
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 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; 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) -- logica combinatoria CASE SEL IS WHEN “00” => X <= A; WHEN “01” => X <= B; WHEN OTHERS => X <= “ ”; END CASE; END PROCESS; END arquit;

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: 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; 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: else BITCNT <= BITCNT + 1; end if; if BITCNT = "011" then elsif BITCNT = "000" then B3 <= OY; -- stores bit ENAOUT <= '0'; elsif BITCNT = "001" then B0 <= B3; B1 <= OX;

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'; B1 <= OX;

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; elsif BITCNT = "010" then

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; elsif BITCNT = "010" then B0 <= OY; elsif BITCNT = "011" then B1 <= OX; elsif BITCNT = "100" then

38 Exemplo elsif ENA = '1' then -- no FEC (1/1) Hypotetic if BITCNT = "001" or RST = '1' then -- pattern: BITCNT <= "000"; else BITCNT <= BITCNT + 1; end if; if BITCNT = "001" then B0 <= BITIN; ENAOUT <= '0'; B1 <= BITIN; ENAOUT <= ENA; else -- ENA = 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


Carregar ppt "EPUSP – PTC Guido Stolfi"

Apresentações semelhantes


Anúncios Google