View
78
Download
1
Category
Preview:
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
terroso@ee.pucrs.br http://www.ee.pucrs.br/~terroso sisc-l@ee.pucrs.br 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
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
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
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
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
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
20
AO NÍVEL DE ESQUEMÁTICO, EXISTEM INÚMEROSCOMPONENTES, ALÉM DE MESCLAR COMPONENTES DIGITAIS + VHDL
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
25
FEITA A ESCOLHA, COMPILA-SE (MAX+PLUS II => COMPILER) O CKT E VERIFICA A ÁREA OCUPADA POR ESTE CKT.
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).
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
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
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.
67
FINALIDADE:
• ESQUEMÁTICO;• VHDL;• AHDL;
------------------------------------------------------------------------• COMPILAR PARA UM DETERMINADO CHIP• SIMULAR
• FAZER O DOWNLOAD DO CÓDIGO PARA FPGA
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.
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.
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.
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
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
98
Seleciona-se o modo (byte-blaster, bit-blaster ou gravador de FPGA)que será feito o download - OPTIONS => HARDWARE SETUP
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.
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
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
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
Recommended