110
DISPOSITIVO LÓGICO PROGRAMÁVEL (FPGA) LINGUAGEM DE DESCRIÇÃO DE HARDWARE (VHDL) Prof. Anderson Royes Terroso Abril, 2000. P U C R S P U C R S Faculdade de Engenharia Faculdade de Engenharia

DISPOSITIVO LÓGICO PROGRAMÁVEL ( FPGA ) LINGUAGEM DE DESCRIÇÃO DE HARDWARE ( VHDL )

Embed Size (px)

DESCRIPTION

P U C R S Faculdade de Engenharia. DISPOSITIVO LÓGICO PROGRAMÁVEL ( FPGA ) LINGUAGEM DE DESCRIÇÃO DE HARDWARE ( VHDL ). Prof. Anderson Royes Terroso Abril, 2000. FPGA & VHDL. Tópicos. 1 - Dispositivos Programáveis (FPGA) 1.1 Introdução 1.2 Estrutura da FPGA 1.3 Tipos de FPGA - PowerPoint PPT Presentation

Citation preview

DISPOSITIVO LÓGICO PROGRAMÁVEL

(FPGA) LINGUAGEM DE DESCRIÇÃO DE HARDWARE

(VHDL)

Prof. Anderson Royes TerrosoAbril, 2000.

P U C R SP U C R SFaculdade de EngenhariaFaculdade de Engenharia

2

TópicosTópicos1 - Dispositivos Programáveis (FPGA)

– 1.1 Introdução– 1.2 Estrutura da FPGA – 1.3 Tipos de FPGA– 1.4 Técnicas de programação

2 - Linguagem de Descrição de Hardware (VHDL)– 2.1 Introdução

• 2.1.1 O que é VHDL

[email protected] http://www.ee.pucrs.br/~terroso [email protected] http://www.ee.pucrs.br/~sisc

FPGA & VHDL

3

• 2.1.2 O que significa VHDL

• 2.1.3 O que significa uma Linguagem de Descrição de Hardware

• 2.1.4 Breve Histórico

• 2.1.5 Vantagens e Desvantagens de se utilizar VHDL

– 2.2 Componentes de um projeto VHDL• 2.2.1 Package

• 2.2.2 Entity

• 2.2.3 Architecture

• 2.2.4 Configuration

– 2.3 Semântica da Linguagem• 2.3.1 Elementos Léxicos

– Comentários, Identificadores, tipos de dados não lógicos, expressões e operadores

4

– 2.4 Comandos Seqüênciais• 2.4.1 Atribuição de Variáveis• 2.4.2 Atribuição de Sinais• 2.4.3 Comando Wait• 2.4.4 Comando If - Then - Else• 2.4.5 Comando Loop For - While• 2.4.6 Comando Case

– 2.5 Especificando a Estrutura de um Sistema– 2.6 Exemplos de Circuitos Digitais utilizando a

ferramenta MAX PLUS II– 2.7 Placa University Program ALTERA

• Exemplos práticos

– 2.8 Bibliografia

5

CKT

ESQUEMÁTICO E/OU VHDL

PROTOTIPAGEM EM FPGA

OBJETIVOOBJETIVO

6

1 - Dispositivos Programáveis (FPGA)1.1 - Introdução1.1 - Introdução

• FPGA (Field Programmable Gate Array) são circuitos programáveis compostos por um conjunto de células lógicas ou blocos lógicos alocados em forma de uma matriz. Em geral, a funcionalidade destes

blocos assim como o seu roteamento, são configuráveis por software. • Surgiram em 1985 com Xilinx

– XC 2000

• Outras companhias:– Actel, Altera, Plessey, Plus, AMD, QuickLogic

FPGA & VHDL

7

1.2 - Estrutura da FPGA1.2 - Estrutura da FPGA

• Três elementos básicos:– CLB’s (Configurable Logic Block): Blocos

Lógicos Configuráveis;– IOB’s (In/Out Block): Blocos de entrada e saída;– SB’s (Switch Box): Caixa de conexão;

FPGA & VHDL

8

9

• CLB’s– Unidade lógica do FPGA;– Família XC 4000 Xilinx tem 100 CLB’s

• 3 Geradores de Função Combinacional;

• 2 Flip-Flop tipo D;

• Lógica de Controle;

• Lógica Aritmética Dedicada;

Cada Bloco pode ser configurado como um Somador de 2 bits

FPGA & VHDL

10

• Representação de um CLB da família XC3000continuação

FPGA & VHDL

11

• IOB’s– Interface entre uma FPGA e o resto do sistema;– O FPGA XC 4003 Xilinx tem 80 IOB’s– Localizam na periferia do chip;

continuação

FPGA & VHDL

12

FPGA & VHDL

13

• SB’s - Switch Box– Finalidade: Permite a interconexão entre os

CLB’s através dos canais de roteamento;

CLB

SB

SBSB

SB 1 2

3

4

56

7

8

Switch Box

FPGA & VHDL

14

• RoteamentoA interconexão entre os blocos é feita através

de uma rede de duas camadas de metal. As conexões físicas entre os fios são feitas ora com transistores de passagem controlados por bits de memória (PIP) ora com chaves de interconexão (Switch Matrix).– Conexões Globais

– Conexões Diretas

– Linhas Longas

– Matrizes de Conexão (Switch Matrix)

FPGA & VHDL

15

FPGA & VHDL

16

Família do Componente Tecnologia de Programação

FLEX 10K SRAM

FLEX 8K SRAM

MAX 9K EEPROM

MAX 7K EEPROM

MAX 5K EEPROM

1.3 Tipos de FPGA - ALTERA1.3 Tipos de FPGA - ALTERA

FPGA & VHDL

17

1.4 Técnicas de programação1.4 Técnicas de programação

• Esquemático

• VHDL

• AHDL

• Handel C

FPGA & VHDL

18

MAX+PLUS II - SOFTWARE QUE PERMITE O PROJETO AO NÍVEL DE ESQUEMÁTICO E VHDL.

19

A ESCOLHA É FEITA NA OPÇÃO FILE => NEW

20

AO NÍVEL DE ESQUEMÁTICO, EXISTEM INÚMEROSCOMPONENTES, ALÉM DE MESCLAR COMPONENTES DIGITAIS + VHDL

21

EXEMPLO: SCH + VHDL

DUPLOCLIQUE

22

library IEEE;use IEEE.std_logic_1164.all;entity gera_clk isport(

clkin : in std_logic;clk : out std_logic);

end gera_clk;architecture arq_scl of gera_clk isbegin clk8: process(clkin)variable cont1 : integer range 0 to 5 := 0;variable cont2 : integer range 0 to 5 := 0;begin

if(clkin'event and clkin='1') thenif(cont1 < 5) then

clk <= '1';cont1 := cont1 + 1;cont2 := 0;

elseif(cont2 < 4) then clk <= '0'; cont2 := cont2 + 1;else cont1 := 0;end if;

end if;end if;end process clk8;end arq_scl;

PROGRAMA EM VHDL

23

EM ASSIGN => DEVICE, PERMITE ESCOLHER O COMPONENTE EM QUE SERÁ GRAVADO O CKT PROJETADO.

24

ESCOLHE-SE UMA FAMÍLIA E POSTERIORMENTE UM DISPOSITIVO, ONDE SERÁ GRAVADO O CKT

25

FEITA A ESCOLHA, COMPILA-SE (MAX+PLUS II => COMPILER) O CKT E VERIFICA A ÁREA OCUPADA POR ESTE CKT.

26

FPGA & VHDL

27

** DEVICE SUMMARY **

Chip/ Input Output Bidir ShareablePOF Device Pins Pins Pins LCs Expanders % Utilized

core_iic EPM7128SLC84-15 2 3 1 104 60 81 %

User Pins: 2 3 1 Project Information c:\z80_vhdl\core_iic.rpt

FPGA & VHDL

O arquivo RPT (Report) apresenta a capacidade da FPGA utilizada, bem como a distribuição dos pinos na FPGA (próxima tela).

28

29

2 - Linguagem de Descrição de 2 - Linguagem de Descrição de Hardware (VHDL)Hardware (VHDL)

2.1 - Introdução– 2.1.1 O que é VHDL

• VHDL é uma forma de se descrever, através de um programa, o comportamento de um circuito ou componente digital.

– 2.1.2 O que significa VHDLVery Hight Speed Integrated Circuit

Hardware

Description

Linguage• Linguagem de Descrição de Hardware com ênfase em Circuitos Integrados de altíssima velocidade.

FPGA & VHDL

30

– 2.1.3 O que significa uma Linguagem de Descrição de Hardware

Uma linguagem de descrição de hardware descreve o que um sistema faz e como

– 2.1.4 Breve Histórico- final de 1960: primeiras Linguagem de hardware;

- 1973: projeto CONLAN (CONsensus LANguage);

- 1983: relatório final do CONLAN e a Linguagem ADA;

- 1986: a Intermetrics desenvolve compilador e simulador, criado um grupo de padronização da IEEE para VHDL;

- 1988: primeiros softwares são comercializados;

- 1991: recomeçou-se um novo processo de padronização;

- 1992: modificações propostas foram avaliadas e votadas;

- 1993: um novo padrão é publicado, chamado VHDL-93;

- 1997: publicado o manual de referência da linguagem.

FPGA & VHDL

31

– 2.1.5 Vantagens e Desvantagens de se utilizar VHDL

• Vantagens– Projeto independente da

tecnologia;

– Facilidade na atualiza-ção dos projetos;

– Reduz tempo de projeto;

– Elimina erros de baixo nível;

• Desvantagens– Hardware gerado é

menos otimizado;

FPGA & VHDL

32

2.2 - Componentes de um projeto VHDLPACKAGE

ENTITY

ARCHITECTURE

CONFIGURATION

– 2.2.1 Pacote: constantes, bibliotecas;– 2.2.2 Entidade: pinos de entrada e saída;– 2.2.3 Arquitetura: implementações do projeto;– 2.2.4 Configuração: define as arquiteturas que

serão utilizadas.

FPGA & VHDL

33

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.all;

PACKAGE(BIBLIOTECAS)

ENTITY exemplo ISPORT (

< descrição dos pinos de entrada e saída >

);END exemplo;

ENTITY(PINOS DE I/O)

ARCHITECTURE teste OF exemplo ISBEGIN

PROCESS( <pinos de entrada e signal > )

BEGIN

< descrição do circuito integrado >

END PROCESS;END teste;

ARCHITECTURE(ARQUITETURA)

FPGA & VHDL

34

ENTITY (ENTIDADE)PINOS DE I/O

ARCHITECTURE(ARQUITETURA) PROCESSOS

N

FPGA & VHDL

35

FPGA & VHDL

36

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.all;entity placa isport (

a : in bit_vector( 6 downto 0);b : out bit_vector( 7 downto 0)

);end placa;architecture TTL of placa issignal pino_1 bit;signal pino_2 bit;signal pino_3 bit;signal pino_4 bit;signal pino_5 bit;

beginCI_X : process( a )begin

<descrição do processo>end process CI_Y;

CI_Y : process( a )begin

<descrição do processo>end process CI_Z;

end TTL;

37

• 2.2.1 PackageOs pacotes (biblioteca) contém uma

coleção de elementos incluindo descrição do tipos de dados (relacione com os includes da Linguagem C).

LIBRARY <nome_da_biblioteca> e/ou

USE <nome_da_biblioteca>.all IEEE.std_logic_arith – funções aritméticasIEEE.std_logic_signed – funções aritméticas com sinalIEEE.std_logic_unsigned – funções aritméticas sem sinalIEEE.std_logic_1164 – std_logic e funções relacionadasALTERA.maxplus2 – declaração de todas as macro-funções e mega-funções.

FPGA & VHDL

38

• 2.2.2 EntityDescrição da interface de I/O do sistema com a

placa.

IN = porta de entrada;

OBS.: não pode receber atribuição de valor dentro do programa.

OUT = porta de saída;

OBS.: não pode ser utilizado como entrada para outro circuito.

INOUT = porta de entrada e saída;Entity <nome> isport ( sinal_controle : in <tipo>;

parcela_1 : in <tipo>;parcela_2 : out <tipo>

);end <nome>;

<tipo> : bit, bit_vector, std_logic_vector.

real, inteiro, etc.

FPGA & VHDL

39

• 2.2.3 ArchitectureArquitetura pode ser definida

como sendo a(s) implementação(ões) do projeto.

FPGA & VHDL

40

• Arquitetura Simples

architecture topologia_arquitetura of teste is

beginprocess ( a, b)

variable temp : bit;

begin

temp := a and b; z <= temp xor a;

end process;end topologia_arquitetura;

FPGA & VHDL

41

• Arquitetura ConcorrenteA arquitetura concorrente é uma

forma mais complexa de descrever um sistema, geralmente apresenta várias processos dentro de uma arquitetura.

FPGA & VHDL

42

2.3 - Semântica da Linguagem

• 2.3.1 Elementos Léxicos• Comentários

• -- isto é um comentário em VHDL

• C <= A + B; -- soma de A + B

• Identificadores

Válidos Inválidosuso de underline (input_1_x) uso de palavras reservadas

uso do caracter @ underline no fim de um identificador

uso de dois caracteres underlines

FPGA & VHDL

43

•Tipos de dados não lógicos

BIT: assume valores ‘0’ e ‘1’, bit_vector é um conjunto de bits. Ex.: “010001”

Boolean: assume valores true ou false

Real: sempre com ponto decimal. Ex.: -3.2, 4.56, 6.0, -2.3E+2

Inteiros: não é possível realizar conversão sobre inteiros. Ex.: 3, 546, -349

Physical: representam uma medida física: voltagem, capacitância, tempoTipos pré-definidos: fs, ps, ns, um, ms, sec, min, hr.

Intervalos: permite determinar um intervalo de utilização dentro de um determinado tipo.range <valor_menor> to <valor_maior>range <valor_maior> downto <valor_menor>

Array: em VHDL um array é definido como uma coleção de elementos todos do mesmo tipo.

FPGA & VHDL

44

•Expressões e operadores

• operadores lógicos: and, or, nand, nor, xor, xnor e not

• operadores numéricos: soma (+), subtração (-), divisão (/), multiplicação (*), módulo (mod), remanescente (rem - ex.: 6 rem 4 = 2), expoente (**), valor absoluto (abs)

• operadores relacionais: igual (=), diferente (/=), menor do que (<), menor ou igual (<=), maior do que (>), maior ou igual (>=)

FPGA & VHDL

45

• operadores de deslocamento: sll (shift left logical), srl (shift right logical), sla (shift left arithmetic), sra (shift right arithmetic), rol (rotate left logical), ror (rotate right logical)

• operador de concatenação: esta operação consiste em criar um novo vetor a partir de dois vetores já existentes, por exemplo:

dado1 : bit_vector(0 to 7);

[01011011]

dado2 : bit_vector(0 to 7);

[11010010]

novo_dado : bit_vector(0 to 7);

novo_dado <= (dado1(0 to 1) & dado2(2 to 5) & dado1(6 to 7));

[01010011]

FPGA & VHDL

46

2.4 - Comandos Seqüênciais• 2.4.1 Atribuição de Variáveis1 architecture topologia_arquitetura of teste is2 signal A, B, J, G : bit_vector(1 downto 0);3 signal E, F: bit;4 begin56 process ( A, B, E, F, G, J)78 variable C, D, H, Y : bit_vector(1 downto 0);9 variable W : bit_vector(3 downto 0);

10 variable Z : bit_vector(7 to 0);11 variable X : bit;12 variable DATA : bit_vector(31 downto 0);1314 begin15 A <= “11”, B <= “01”, J <= “10”, G <= “00’’;16 E <= ‘0’, F <= ‘1’;17 C := “01”;18 X := E nand F;19 Z(0 to 3) := C & D;20 Z(4 to 0) := (not A) & (A nor B);21 D := (‘1’, ‘0’);22 W := (2 downto 1 => G, 3 => ‘1’, others => ‘0’);23 DATA := (31 downto 28 => ‘1’, others => ‘0’);24 end process;25 end topologia_arquitetura;

FPGA & VHDL

47

• 2.4.2 Atribuição de Sinais1 architecture topologia_arquitetura of teste is2 signal A, B, C : bit;3 signal D: integer;4 begin56 process ( A, B, C, D)78 variable L, M, N, Q bit;9

10 begin11 A <= ‘0’, ‘1’ after 20ns, ‘0’ after 40ns12 B <= not L;13 C <= ((L andM) xor (N nand Q));14 D <= 3, 5 after 20ns, 7 after 40ns, 9 after 60ns;1617 end process;18 end topologia_arquitetura;

FPGA & VHDL

48

Diferença entre atribuições sinal (signal) / variável (variable)

• Quando utiliza-se sinal, a atribuição ocorre no final do processo, enquanto que a atribuição a variável ocorre simultaneamente.

• Nas próximas duas telas, está mostrado a diferença entre estas atribuições.

<= (atribuição de signal)

:= (atribuição de variável)

FPGA & VHDL

49

D <= 2;process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1B = 1C = 1D = 2E = 1

process (C, D)variable Av, Bv, Ev : integer :=0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 0B = 1 Bv = 0C = 1D = 2E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 2B = 1 Bv = 0C = 1D = 2E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 2B = 1 Bv = 3C = 1D = 2E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 3B = 1 Bv = 3C = 1D = 2E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 3B = 1 Bv = 3C = 1D = 2E = 1 Ev = 6

Siga as setas pretas.A seta em vermelho mostra a execução passo-a-passodo programa

50

D <= 2;

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1B = 1C = 1D = 1E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1B = 1C = 1D = 2E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= 2B = 1C = 1D = 2E = 1

process (C, D)begin

A <= 2;B <= A + CA <= D +1;E <= A * 2;

end process;

A = 1 A <= 2B = 1 B <= A + CC = 1D = 2E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= D + 1B = 1 B <= A + CC = 1D = 2E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= D + 1B = 1 B <= A + CC = 1D = 2E = 1 E <= A * 2;

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= 3B = 1 B <= 2C = 1D = 2E = 1 E <= 2;

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 3B = 2 e não 3C = 1D = 2E = 2 e não 6

A diferença entre os valores deve-se a forma de atribuição

51

• 2.4.3 Comando Wait

Este comando tem a finalidade de causar uma suspensão do processo declarado ou procedimento. O comando wait pode ser utilizado de quatro formas diferentes, são elas:

1 wait until <conditional>; wait until CLK’event and CLK = ‘1’;2 wait on <signal_list>; wait on a, b;3 wait for <time>; wait for 10ns;4 wait; wait;

FPGA & VHDL

52

• 2.4.4 Comando IF-THEN-ELSE Existem inúmeras formas de se utilizar if-then-

else(elsif), abaixo segue um quadro explicativo do if-then-else e ao lado dois exemplos simples.

MODELOif condição_1 then <comandos>elsif condição_2 then <comandos>else

<comandos>end if;

exemplo 1:if ( A = ‘0’) then B <= “00”;else B <= “11”;end if;

exemplo 2:if (CLK’event and CLK =’1’) then FF <= ‘0’;elsif (CLK’event and CLK =’0’) then FF <= ‘1’;elsif (J = ‘1’) and (K=’1’) then FM <= ‘1’;end if;

FPGA & VHDL

53

-------------------------------------------------------------------------------------------------------------- * * * * * Comentários * * * * *-- O programa deve receber o nome de lab1.vhd------------------------------------------------------------------------------------------------------------

library IEEE;use ieee.std_logic_1164.all;

entity lab1 isport ( controle : in bit;

parcela_1 : in bit_vector( 3 downto 0);parcela_2 : in bit_vector( 3 downto 0);soma_total : out bit_vector( 4 downto 0);mult_total : out bit_vector( 7 downto 0)

);end lab1;

architecture logica of lab1 is

beginprocess ( controle, parcela_1, parcela_2)

begin

if (controle = ‘1’ ) thensoma_total <= parcela_1 + parcela_2;

elsemult_total <= parcela_1 * parcela_2;

end if;

end process;end logica;

54

-------------------------------------------------------------------------------------------------------------- * * * * * Comentários * * * * *-- O programa deve receber o nome de lab2.vhd------------------------------------------------------------------------------------------------------------

library IEEE;use ieee.std_logic_1164.all;

entity lab2 isport ( controle : in bit;

parcela_1 : in bit_vector( 3 downto 0);parcela_2 : in bit_vector( 3 downto 0);soma : out bit_vector( 4 downto 0);multiplicacao : out bit_vector( 7 downto 0)

);end lab2;

architecture logica of lab2 is

signal soma_total : bit_vector ( 4 downto 0);signal mult_total : bit_vector ( 7 downto 0);

beginprocess ( controle, parcela_1, parcela_2)

begin

if (controle = ‘1’ ) thensoma_total := parcela_1 + parcela_2;

elsemult_total := parcela_1 * parcela_2;

end if;

soma <= soma_total;multiplicacao <= mult_total;

end process;

end logica;

55

• 2.4.5 Comando Loop For - While<label opcional>: for <parâmetros> in <valor_final> loop

<seqüência de comandos>end loop <label opcional>;

OBS.: O PARÂMETRO NÃO PODE TER SEU VALOR ALTERADO EM HIPÓTESE ALGUMADENTRO DO LOOP FOR

1 process (A)23 begin4 Z <= “0000”;5 for i in 0 to 3 loop6 if(A = i) then7 Z(i) <= ‘1’;8 end if;9 end loop;

10 end process;

FPGA & VHDL

56

57

• 2.4.6 Comando Case

porta_programável : process (Mode, PrGIn1, PrGIn2)begin

case Mode iswhen “000” => PrGOut <= PrGIn1 and PrGIn2;when “001” => PrGOut <= PrGIn1 or PrGIn2;when “010” => PrGOut <= PrGIn1 nand PrGIn2;when “011” => PrGOut <= PrGIn1 nor PrGIn2;when “100” => PrGOut <= not PrGIn1;when “101” => PrGOut <= not PrGIn2;when others => PrGOut <= ‘0’

end case;end process porta_programavel;

FPGA & VHDL

58

2.5 - Especificando a Estrutura de um SistemaO component é exatamente a descrição de um componenteO port map é um mapeamento deste componente em um sistema maior.

FPGA & VHDL

59

Programa 1 Programa 2

----------------------------------------------------------- Arquivo componente_inv.vhd-- Modelo do inversor---------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity componente_inv isport(

x : in bit;y : out bit);

end componente_inv;

architecture arquitetura_inv ofcomponente_inv is

beginy <= not x;

end arquitetura_inv;

----------------------------------------------------------- Arquivo componente_and.vhd-- Modelo da porta AND---------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity componente_and isport(

a : in bit;b : in bit;c : out bit);

end componente_and;

architecture arquitetura_and of componete_and is

beginc <= a and b;

end arquitetura_and;

FPGA & VHDL

60

Programa 3-------------------------------------------------------- Arquivo componente_sistema.vhd-- Modelo da porta AND------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity componente_sistema isport(

in1 : in bit;in2 : in bit;in3 : in bit;in4 : in bit;out1 : out bit);

end componente_sistema;

architecture arquitetura_sistema of componente_sistema is

component componente_andport( a: in bit; b : in bit; c : out bit);

end component;

component componente_invport( x: in bit; y : out bit);

end component;

signal s1, s2, s3, s4 : bit;

beginand1 : componente_and port map (a => in1, b => in2, c => s1);and2 : componente_and port map (a => in3, b => in4, c => s2);and3 : componente_and port map (a => s3, b => s4, c => ut1);inv1 : componente_inv port map (x => s1, y => s3);inv2 : componente_inv port map (x => s2, y => s4);

end arquitetura_sistema;

Exemplos de circuitos descritos Exemplos de circuitos descritos em VHDLem VHDL

Anderson Royes Terroso http://www.ee.pucrs.br/~terroso

FPGA & VHDL

62

1 - CodificadorUm exemplo clássico de codificador é o BCD para sete-segmentos.

case codigo iswhen “0000” =>

digito <=“0111111”;when “0001” =>

digito <=“0000110”;when “0010” =>

digito <=“1011011”;when “0011” =>

digito <=“1001111”; .....

end case;

63

2 - ULA (Unidade Lógica Aritmética)Operações Lógicas: and, or, nand, nor, xor, xnor, not .Operações Aritméticas: +, -, * .

if (mode = 1) thencase comando is

when “000” =>resposta <= oper1 and oper2;

when “001” =>resposta <= oper1 or oper2;

when “010” =>resposta <= oper1 nor oper2;

.....end case;

else

64

case comando iswhen “000” =>

resp_aritm <= oper1 + oper2;when “001” =>

resp_aritm <= oper1 - oper2;...when others =>

resp_aritm <= X’0’;end case;

end if;

-- continuação do else

65

3 - Gerador do Código de Hamming

Tarefa: Implementar o Tarefa: Implementar o gerador do código de Hamming.gerador do código de Hamming.

ALTERA ALTERA MAX-PLUS IIMAX-PLUS II

67

FINALIDADE:

• ESQUEMÁTICO;• VHDL;• AHDL;

------------------------------------------------------------------------• COMPILAR PARA UM DETERMINADO CHIP• SIMULAR

• FAZER O DOWNLOAD DO CÓDIGO PARA FPGA

68

69

Primeiro passo: criar um novo projeto. Se for esquemático escolha a opção Graphic Editor file (.gdf). Se o projeto for feito em VHDL, escolha a opção Text Editor file.

70

Portas lógicas

chipcomercial

(TTL)

Se a escolha for por esquemático o próximo passo será colocar as portas lógicas ou outros circuitos. Para isso, clique duas vezes na área de trabalho, então uma tela Enter Symbol irá aparecer. Escolha os chips nas bibliotecas \prim e na biblioteca \mf. Depois clique sobre o símbolo desejado.

Clique duas vezes aqui e a tela ao lado irá aparecer.

71

Com o botão direito você poderá fazer as conexões entre as portas

72

Conector input

Conector outputxor

Feito o circuito, coloque os conectores de entrada e de saída. Estes conectores estão disponíveis na biblioteca /prim.

73

Próximo passo, salvar o arquivo. A extensão do esquemático é gdf. Caso você tivesse feito um arquivo em VHDL, você salvaria com a extensão .vhd

74

Próximo passo, é obrigatório setar o projeto, indicando que o arquivo em questão será compilado e simulado. A forma de setar é a mostrada abaixo.

75

Agora, você precisa selecionar o dispositivo que deseja gravar o seu arquivo compilado. (Assign => Device)

76

Quando você seleciona aquela opção uma tela igual a apresentada abaixo é aberta. Em Device Family, você escolhe a família (5K, 6K, 8K, 9K, 10K) e em Devices, você escolhe o componente que deseja utilizar.

77

78

O próximo passo será compilar este arquivo.Isto é feito em MAX-PLUS II => Compiler

79

Uma tela igual a esta será aberta e seu arquivo (vhdl ou gdf) será compilado.

80

Esta mensagem indica que o circuito foi compilado corretamente e três arquivos foram criados: rpt : report (você encontra qual o espaço utilizado da FPGA e onde os seus sinais foram ligados), snf: (será usado pelo simulador) e pof: arquivo para download (pof => MAX e sof => FLEX)

81

O próximo passo é a simulação, mas antes você precisa criar as formas de ondas.Isto é feito em MAX+PLUS II => Waveform Editor.

82

Aberto a tela abaixo, precisamos colocar os sinais de entrada e de saída, isto éfeito clicando com o botão direito do mouse na área Name, então uma telinha como esta será aberta, escolha a opção Enter Nodes from SNF.

Clique com o botão direito nesta região

83

Escolhendo aquela opção abrirá uma tela Enter Nodes from SNF. No ícone List,você listará todos os sinais em Available Nodes & Groups.

84

Todos os sinais de entrada e saída do meu arquivoSelecione todos os sinais

85

Agora você tem todas os sinais disponíveis no Waveform Editor.

86

Selecione o tempo final da simulação e informe qual é este intervalo

87

Você precisa criar os estímulos, por exemplo, se você quer criar um trem de pulsos clique sobre o pino de entrada (d7) toda a linha ficará selecionada e naopção indicada você poderá associar o trem de pulso a este pino

88

Nesta tela você seleciona a duração do pulso Count Every

89

Ou então, você pode selecionar uma determinada região (com mouse marque uma determinada área) e selecione a opção de setá-lo ou resetá-lo

90

Salve o arquivo

91

Automaticamente ele atribui o mesmo nome do arquivo original + a extensão scf

92

O próximo passo é simular este arquivo (MAX+PLUS II => Simulator)

93

Simulando !!!!

94

Ok!!! Sem erros

95

Resultado da simulação

96

Próximo passo é a programação do chip (MAX+plus II => Programmer)

97

Na opção Program você programa o dispositivo

98

Seleciona-se o modo (byte-blaster, bit-blaster ou gravador de FPGA)que será feito o download - OPTIONS => HARDWARE SETUP

99

Como usamos o cabo BYTE-BLASTER para o download, então selecione esta opção.

100

No menu JTAG você irá selecionar o arquivo que será gravado na FPGA.

101

Neste menu você irá escolher o arquivo que será gravado na FPGA. Em Select Programming File você acha todos os arquivos (*.POF para a famíliaMAX e *.SOF para a família FLEX). Após encontrar o arquivo, clique em ADD. Se existir um outro arquivo na listagem, marque-o e exclua (DELETE).

Em Detect JTAG Chain Info, você irádetectar se a BYTE-BLASTERestá corretamenteconectada na porta paralela.

102

Pronto!!!! Na opção Program você programa o dispositivo.

103

library IEEE;use IEEE.std_logic_1164.all;entity decod3x8 is

port( endereco : in bit_vector(2 downto 0);saida : out bit_vector(7 downto 0) );

end decod3x8;architecture logica_decod of decod3x8 isbegindecoder1 : process(endereco)

begincase endereco is

when "000" => saida <= "00000001";when "001" => saida <= "00000010";when "010" => saida <= "00000100";when "011" => saida <= "00001000";when "100" => saida <= "00010000";when "101" => saida <= "00100000";when "110" => saida <= "01000000";when "111" => saida <= "10000000";

end case;end process decoder1;

end logica_decod;

Exemplo de um arquivo em VHDL de um decodificador

CABO CABO BYTE-BLASTERBYTE-BLASTER

105

Com este cabo você pode fazer o download para vários dispositivos MAX e FLEX. A seguir será apresentado o esquema elétrico do cabo, bem como de como conectá-lo a FPGA.O cabo é o mesmo para qualquer tipo, porém as FPGA’s tem a disposição dos pinos dem terminais diferentes. As próximas telas mostram como fazer para gravar cada uma delas. Para maiores informações consulte a página da ALTERA na Internet (http://www.altera.com).Uma extremidade (DB25) é conectado porta paralela do micro, enquanto que a outra (10pinos) é conectado na FPGA.

OBS: O cabo NÃO deve ser maior que 30cmOBS: O cabo NÃO deve ser maior que 30cm

106

Esquema elétrico do cabo BYTE-BLASTER

107

108

Esquema elétrico para gravar a FLEX 10K

109

Esquema elétrico para gravar o MAX7000 e o MAX9000

110

2.8 BIBLIOGRAFIABostock, Geoff, FPGAs and programmable LSI : a designer's handbook. Oxford : Butterworth-Heinemann, 1996. 216p.Hachtel, Gary D. ; Somenzi, Fabio, Logic synthesis and verification algorithms. Boston : Kluwer Academic, 1996. 564p.Brown, Stephen D. et al. Field-programmable gate arrays. Boston : Kluwer Academic, 1992. 206p.Trimberger, Stephen M. (Ed). Field-programmable gate array technology. Boston : Kluwer Academic, 1994. 258p.Grünbacher, Herbert ; Hartenstein, Reiner W. (Ed.).Field-programmable gate arrays : architectures and tools for rapid prototyping. Berlin : Springer, 1993. 220p.IEEE Workshop on FPGAs for Custom Computing Machines (1993 :Napa) Proceedings. ; Buell, Duncan A. ; Pocek, Kenneth L. (Ed.).Los Alamitos, CA : IEEE Computer Society Press, 1993. 212p.CHANG, K. C., Digital Design and Modeling with VHDL and Synthesis.IEEE Computer Society Press, 1997AIRIAU, R. et all. VHDL du langage à la modélisation. Presses Polytechniques Universitaires Romandes, 1990.MAX+PLUS II & VHDL, Customer Training - ALTERA.MAX+PLUS II, Programmable Logic Development System - Getting Started. ALTERA, Version 6.0, 1995.VHDL Reference Guide, ACTIVE-VHDL Series Book1. ALDEC, 1998.

INTERNET:

ftp://ftp.cs.adelaide.edu.au/pub/VHDLhttp://www.altera.comhttp://www.aldec.com