39
Introdução ao V H D L EPUSP PTC2527 2010 Guido Stolfi 1 .. . . . ... . .. . .. . .... . . . . . . . . . ... . . . .. . . . . . . . .... . .. . . . . .. . . . . .. .. .. .

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

Embed Size (px)

Citation preview

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

Introdução ao

V H D LEPUSP – PTC2527

2010Guido Stolfi

1

.. . . . ... . .. ... . .... . . . .

. . . . . ... . .. .. . . .

. . . ..... . .. . . .

. .. . . .. .. .. .. .

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

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

2

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

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 3

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

Descrição de um Circuito

• Abordagens e Níveis de Abstração

Estru

tura

l

Comportamental

FísicaCélulas

Módulos

Chips

Subsistemas

Algo

ritm

osRT

L

Funç

ões L

ógica

sFu

nc.

Tran

sfer

ência

Processadores

Registradores

PortasTransistores

4

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

Descrição Estrutural por Esquema

5

Qual a função deste circuito?

Qual a resposta a um conjunto deestímulos?

Como modificá-lopara alterar suafunção?

Tem algum erro?

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

Descrição Estrutural por V H D L

-- declaração:

ENTITY circuito_1 ISPORT( 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

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

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

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

Simulação de um Circuito

8

A

B

C

Q ? ? ? ? ?

R ? ? ? ? ?

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

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

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

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

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

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 ISBEGIN

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

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

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

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

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

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

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 ISBEGIN 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)

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

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 ISBEGIN 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)

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

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

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

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

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

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

False True

False False False

True False True

Ex.: Função AND

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

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)

19

0 1

0 0 0

1 0 1

Ex.: Função AND

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

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

X 0 1 Z W L H -

X X 0 X X X 0 X X

0 0 0 0 0 0 0 0 0

1 X 0 1 X X 0 1 X

Z X 0 X X X 0 X X

W X 0 X X X 0 X X

L 0 0 0 0 0 0 0 0

H X 0 1 X X 0 1 X

- X 0 X X X 0 X X

Ex.: Função AND

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

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

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

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

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

Tipos de Dados em VHDL

-- outros tipos pré definidos:

TYPE INTEGER IS RANGE -2147483648 TO +2147483647;

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

23

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

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órioBEGINIF A = ‘0’ THEN

Q <= B;ELSE

Q <= NOT B; -- implementa XOREND IF;

END PROCESS;

24

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

Lógica Sequencial com Processos

• Lista de sensibilidade inclui um Clock

PROCESS (CLK) -- processo sequencial (contador)BEGINIF CLK’EVENT AND CLK = ‘1’ THEN -- borda de subida Q <= Q + 1; -- precisa de ieee.std_logic_arith.allEND IF;

END PROCESS;

PROCESS (CLK) -- registrador de deslocamentoBEGINIF CLK’EVENT AND CLK = ‘0’ THEN -- borda de descida Q (7 DOWNTO 1) <= Q (6 DOWNTO 0); Q (0) <= D;END IF;

END PROCESS;

25

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

Lógica Sequencial

PROCESS (CLK, RST) -- contador c/ reset assíncronoBEGIN IF RST = ‘1’ THEN -- reset

Q <= “00000000”; -- zera 8 bits

ELSE IF CLK’EVENT AND CLK = ‘1’ THEN

IF Q = 191 THENQ <= (OTHERS => ‘0’); -- zera 8

bits ELSE

Q <= Q + 1; -- conta de 0 a 191 END IF; END IF; -- fim evento CLK

END IF; -- fim RSTEND PROCESS;

26

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

Exemplo Não Sintetizável

PROCESS (CLK) -- contador nas duas bordas do clock !BEGINIF 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.

27

CLK

Q 0 1 2 3 4 5 ...

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

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

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

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

29

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

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 ISBEGINPROCESS (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 ; 30

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

CASE ... WHEN

-- multiplexador de barramentos usando CASEENTITY 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 ISBEGINPROCESS (A, B, SEL) -- logica combinatoria BEGIN CASE SEL IS WHEN “00” => X <= A; WHEN “01” => X <= B; WHEN OTHERS => X <= “000000000000”; END CASE; END PROCESS;END arquit;

31

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

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

32

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

Exemplo architecture Behavioral of fec_3 issignal DEL : std_logic_vector(5 downto 0); -- Shift Registersignal B3 : std_logic; -- temporary bitsignal BITCNT : std_logic_vector(2 downto 0); -- counts input bits

begin-------------------------------------------------------------------------

process (CLK,BITIN,DEL)variable OX : std_logic; -- output bitsvariable OY : std_logic;

begin

OX := BITIN xor ((DEL(5) xor DEL(4)) xor (DEL(3) xor DEL(0))); -- FECOY := 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;-- --------------------------------------------------------------------

33

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

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;

34

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

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

35

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

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;

-- --------------------------------------------------------------------

36

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

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

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

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 rateend if; -- end clock eventend process;--------------------------------------------------------------------------------

end Behavioral;

38

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

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); -- posicionalblk002: delay_2000 PORT MAP ( TRIG => D, TRIGDEL => Q, CLOCK => CLK); -- nominal

39