PUCRS 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 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] [email protected] http://www.ee.pucrs.br/~terroso http://www.ee.pucrs.br/~sisc 2 • 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 3 – 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 4 OBJETIVO CKT ESQUEMÁTICO E/OU VHDL PROTOTIPAGEM EM FPGA 5 FPGA & VHDL 1 - Dispositivos Programáveis (FPGA) 1.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 6 FPGA & VHDL 1.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; 7 8 FPGA & VHDL • 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 9 FPGA & VHDL continuação • Representação de um CLB da família XC3000 10 FPGA & VHDL continuação • 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; 11 FPGA & VHDL 12 FPGA & VHDL • SB’s - Switch Box – Finalidade: Permite a interconexão entre os CLB’s através dos canais de roteamento; SB 1 SB 2 8 3 7 4 CLB SB SB 6 5 Switch Box 13 FPGA & VHDL • Roteamento A 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) 14 FPGA & VHDL 15 FPGA & VHDL 1.3 Tipos de FPGA - ALTERA Família do Componente Tecnologia de Programação FLEX 10K SRAM FLEX 8K SRAM MAX 9K EEPROM MAX 7K EEPROM MAX 5K EEPROM 16 FPGA & VHDL 1.4 Técnicas de programação • Esquemático • VHDL • AHDL • Handel C 17 MAX+PLUS II - SOFTWARE QUE PERMITE O PROJETO AO NÍVEL DE ESQUEMÁTICO E VHDL. 18 A ESCOLHA É FEITA NA OPÇÃO FILE => NEW 19 AO NÍVEL DE ESQUEMÁTICO, EXISTEM INÚMEROSCOMPONENTES, ALÉM DE MESCLAR COMPONENTES DIGITAIS + VHDL 20 EXEMPLO: SCH + VHDL DUPLO CLIQUE 21 PROGRAMA EM VHDL if(clkin'event and clkin='1') then library IEEE; if(cont1 < 5) then use IEEE.std_logic_1164.all; clk <= '1'; entity gera_clk is cont1 := cont1 + 1; port( cont2 := 0; clkin : in std_logic; else clk : out std_logic if(cont2 < 4) then ); clk <= '0'; end gera_clk; cont2 := cont2 + 1; architecture arq_scl of gera_clk is else cont1 := 0; begin end if; clk8: process(clkin) end if; variable cont1 : integer range 0 to 5 := 0; end if; variable cont2 : integer range 0 to 5 := 0; end process clk8; begin end arq_scl; 22 EM ASSIGN => DEVICE, PERMITE ESCOLHER O COMPONENTE EM QUE SERÁ GRAVADO O CKT PROJETADO. 23 ESCOLHE-SE UMA FAMÍLIA E POSTERIORMENTE UM DISPOSITIVO, ONDE SERÁ GRAVADO O CKT 24 FEITA A ESCOLHA, COMPILA-SE (MAX+PLUS II => COMPILER) O CKT E VERIFICA A ÁREA OCUPADA POR ESTE CKT. 25 FPGA & VHDL 26 FPGA & VHDL O arquivo RPT (Report) apresenta a capacidade da FPGA utilizada, bem como a distribuição dos pinos na FPGA (próxima tela). ** DEVICE SUMMARY ** Chip/ POF Device Input Output Bidir Pins Pins Pins LCs core_iic EPM7128SLC84-15 2 User Pins: Project Information 2 3 1 104 Shareable Expanders % Utilized 60 81 % 3 1 c:\z80_vhdl\core_iic.rpt 27 28 FPGA & VHDL 2 - Linguagem de Descrição de 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 VHDL Very Hight Speed Integrated Circuit Hardware Description Linguage • Linguagem de Descrição de Hardware com ênfase em Circuitos Integrados de altíssima velocidade. 29 FPGA & VHDL – 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. 30 FPGA & VHDL – 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; 31 FPGA & VHDL 2.2 - Componentes de um projeto VHDL PACKAGE 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. 32 FPGA & VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.all; PACKAGE (BIBLIOTECAS) ENTITY exemplo IS PORT ( < descrição dos pinos de entrada e saída > ENTITY (PINOS DE I/O) ); END exemplo; ARCHITECTURE teste OF exemplo IS BEGIN PROCESS( <pinos de entrada e signal > ) BEGIN ARCHITECTURE (ARQUITETURA) < descrição do circuito integrado > END PROCESS; END teste; 33 FPGA & VHDL ARCHITECTURE (ARQUITETURA) PROCESSOS N ENTITY (ENTIDADE) PINOS DE I/O 34 FPGA & VHDL 35 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; USE IEEE.STD_LOGIC_UNSIGNED.all; entity placa is port ( a : in bit_vector( 6 downto 0); b : out bit_vector( 7 downto 0) ); end placa; architecture TTL of placa is signal pino_1 bit; signal pino_2 bit; signal pino_3 bit; signal pino_4 bit; signal pino_5 bit; begin CI_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; 36 FPGA & VHDL • 2.2.1 Package Os 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éticas IEEE.std_logic_signed – funções aritméticas com sinal IEEE.std_logic_unsigned – funções aritméticas sem sinal IEEE.std_logic_1164 – std_logic e funções relacionadas ALTERA.maxplus2 – declaração de todas as macro-funções e mega-funções. 37 FPGA & VHDL • 2.2.2 Entity Descriçã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> is port ( sinal_controle : in <tipo>; parcela_1 : in <tipo>; parcela_2 : out <tipo> ); end <nome>; <tipo> : bit, bit_vector, std_logic_vector. real, inteiro, etc. 38 FPGA & VHDL • 2.2.3 Architecture Arquitetura pode ser definida como sendo a(s) implementação(ões) do projeto. 39 FPGA & VHDL • Arquitetura Simples architecture topologia_arquitetura of teste is begin process ( a, b) variable temp : bit; begin temp := a and b; z <= temp xor a; end process; end topologia_arquitetura; 40 FPGA & VHDL • Arquitetura Concorrente A arquitetura concorrente é uma forma mais complexa de descrever um sistema, geralmente apresenta várias processos dentro de uma arquitetura. 41 FPGA & VHDL 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 uso de underline (input_1_x) Inválidos uso de palavras reservadas uso do caracter @ underline no fim de um identificador uso de dois caracteres underlines 42 FPGA & VHDL •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, tempo Tipos 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. 43 FPGA & VHDL •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 (>=) 44 FPGA & VHDL • 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] 45 FPGA & VHDL 2.4 - Comandos Seqüênciais • 2.4.1 Atribuição de Variáveis 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 architecture topologia_arquitetura of teste is signal A, B, J, G : bit_vector(1 downto 0); signal E, F: bit; begin process ( A, B, E, F, G, J) variable variable variable variable variable C, D, H, Y : bit_vector(1 downto 0); W : bit_vector(3 downto 0); Z : bit_vector(7 to 0); X : bit; DATA : bit_vector(31 downto 0); begin A <= “11”, B <= “01”, J <= “10”, G <= “00’’; E <= ‘0’, F <= ‘1’; C := “01”; X := E nand F; Z(0 to 3) := C & D; Z(4 to 0) := (not A) & (A nor B); D := (‘1’, ‘0’); W := (2 downto 1 => G, 3 => ‘1’, others => ‘0’); DATA := (31 downto 28 => ‘1’, others => ‘0’); end process; end topologia_arquitetura; 46 FPGA & VHDL • 2.4.2 Atribuição de Sinais 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 architecture topologia_arquitetura of teste is signal A, B, C : bit; signal D: integer; begin process ( A, B, C, D) variable L, M, N, Q bit; begin A <= ‘0’, ‘1’ after 20ns, ‘0’ after 40ns B <= not L; C <= ((L andM) xor (N nand Q)); D <= 3, 5 after 20ns, 7 after 40ns, 9 after 60ns; end process; end topologia_arquitetura; 47 FPGA & VHDL 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) 48 D <= 2; process (C, D) process (C, D) process (C, D) variable Av, Bv, Ev : integer := 0; variable Av, Bv, Ev : integer :=0; variable Av, Bv, Ev : integer := 0; begin begin begin Av := 2; Bv := Av + C; Av := D +1; Ev := Av * 2; A <= Av; B <= Bv; E <= Ev; end process; A=1 B=1 C=1 D=2 E=1 process (C, D) Av := 2; Bv := Av + C; Av := D +1; Ev := Av * 2; A <= Av; B <= Bv; E <= Ev; end process; A=1 Av = 0 B=1 Bv = 0 C=1 D=2 E=1 Ev = 0 process (C, D) Av := 2; Bv := Av + C; Av := D +1; Ev := Av * 2; A <= Av; B <= Bv; E <= Ev; end process; A=1 Av = 2 B=1 Bv = 0 C=1 D=2 E=1 Ev = 0 process (C, D) variable Av, Bv, Ev : integer := 0; variable Av, Bv, Ev : integer := 0; variable Av, Bv, Ev : integer := 0; begin begin begin Av := 2; Bv := Av + C; Av := D +1; Ev := Av * 2; A <= Av; B <= Bv; E <= Ev; end process; A=1 Av = 2 B=1 Bv = 3 C=1 D=2 E=1 Ev = 0 Av := 2; Bv := Av + C; Av := D +1; Ev := Av * 2; A <= Av; B <= Bv; E <= Ev; end process; A=1 Av = 3 B=1 Bv = 3 C=1 D=2 E=1 Ev = 0 Av := 2; Bv := Av + C; Av := D +1; Ev := Av * 2; A <= Av; B <= Bv; E <= Ev; end process; A=1 Av = 3 B=1 Bv = 3 C=1 D=2 E=1 Ev = 6 Siga as setas pretas. A seta em vermelho mostra a execução passo-a-passo do programa 49 D <= 2; process (C, D) begin A <= 2; B <= A + C; A <= D +1; E <= A * 2; end process; process (C, D) begin A <= 2; B <= A + C; A <= D +1; E <= A * 2; end process; process (C, D) begin A <= 2; B <= A + C; A <= D +1; E <= A * 2; end process; process (C, D) begin A <= 2; B <= A + C A <= D +1; E <= A * 2; end process; A=1 B=1 C=1 D=1 E=1 process (C, D) begin A <= 2; B <= A + C; A <= D +1; E <= A * 2; end process; A=1 B=1 C=1 D=2 E=1 process (C, D) begin A <= 2; B <= A + C; A <= D +1; E <= A * 2; end process; A=1 A <= 2 B=1 C=1 D=2 E=1 process (C, D) begin A <= 2; B <= A + C; A <= D +1; E <= A * 2; end process; A = 1 A <= 2 B = 1 B <= A + C C=1 D=2 E=1 process (C, D) begin A <= 2; B <= A + C; A <= D +1; E <= A * 2; end process; A=1 B=1 C=1 D=2 E=1 A <= D + 1 A = 1 B <= A + C B = 1 C=1 D=2 E=1 A <= D + 1 A = 1 B <= A + C B = 1 C=1 D=2 E <= A * 2; E = 1 A <= 3 B <= 2 A=3 B=2 C=1 D=2 E <= 2; E = 2 e não 3 e não 6 A diferença entre os valores deve-se a forma de atribuição 50 FPGA & VHDL • 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 2 3 4 wait until <conditional>; wait on <signal_list>; wait for <time>; wait; wait until CLK’event and CLK = ‘1’; wait on a, b; wait for 10ns; wait; 51 FPGA & VHDL • 2.4.4 Comando IF-THEN-ELSE Existem inúmeras formas de se utilizar if-thenelse(elsif), abaixo segue um quadro explicativo do ifthen-else e ao lado dois exemplos simples. MODELO if 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; 52 ------------------------------------------------------------------------------------------------------------***** Comentários ***** -O programa deve receber o nome de lab1.vhd -----------------------------------------------------------------------------------------------------------library IEEE; use ieee.std_logic_1164.all; entity lab1 is port ( 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 begin process ( controle, parcela_1, parcela_2) begin if (controle = ‘1’ ) then soma_total <= parcela_1 + parcela_2; else mult_total <= parcela_1 * parcela_2; end if; end process; end logica; 53 ------------------------------------------------------------------------------------------------------------***** Comentários ***** -O programa deve receber o nome de lab2.vhd -----------------------------------------------------------------------------------------------------------library IEEE; use ieee.std_logic_1164.all; entity lab2 is port ( 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); begin process ( controle, parcela_1, parcela_2) begin if (controle = ‘1’ ) then soma_total := parcela_1 + parcela_2; else mult_total := parcela_1 * parcela_2; end if; soma <= soma_total; multiplicacao <= mult_total; end process; end logica; 54 FPGA & VHDL • 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 ALGUMA DENTRO DO LOOP FOR 1 2 3 4 5 6 7 8 9 10 process (A) begin Z <= “0000”; for i in 0 to 3 loop if(A = i) then Z(i) <= ‘1’; end if; end loop; end process; 55 56 FPGA & VHDL • 2.4.6 Comando Case porta_programável : process (Mode, PrGIn1, PrGIn2) begin case Mode is when “000” => PrGOut when “001” => PrGOut when “010” => PrGOut when “011” => PrGOut when “100” => PrGOut when “101” => PrGOut when others => PrGOut end case; end process porta_programavel; <= PrGIn1 and PrGIn2; <= PrGIn1 or PrGIn2; <= PrGIn1 nand PrGIn2; <= PrGIn1 nor PrGIn2; <= not PrGIn1; <= not PrGIn2; <= ‘0’ 57 FPGA & VHDL 2.5 - Especificando a Estrutura de um Sistema O component é exatamente a descrição de um componente O port map é um mapeamento deste componente em um sistema maior. 58 FPGA & VHDL Programa 1 Programa 2 ---------------------------------------------------------- Arquivo componente_inv.vhd -- Modelo do inversor --------------------------------------------------------- ---------------------------------------------------------- Arquivo componente_and.vhd -- Modelo da porta AND --------------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; library IEEE; use IEEE.std_logic_1164.all; entity componente_inv is port( x : in bit; y : out bit ); end componente_inv; entity componente_and is port( a : in bit; b : in bit; c : out bit ); end componente_and; architecture arquitetura_inv of componente_inv is begin y <= not x; end arquitetura_inv; architecture arquitetura_and of componete_and is begin c <= a and b; end arquitetura_and; 59 Programa 3 ------------------------------------------------------- Arquivo componente_sistema.vhd -- Modelo da porta AND -----------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; entity componente_sistema is port( 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_and port( a: in bit; b : in bit; c : out bit); end component; component componente_inv port( x: in bit; y : out bit); end component; signal s1, s2, s3, s4 : bit; begin and1 : 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; 60 FPGA & VHDL Exemplos de circuitos descritos em VHDL Anderson Royes Terroso http://www.ee.pucrs.br/~terroso 1 - Codificador Um exemplo clássico de codificador é o BCD para sete-segmentos. case codigo is when “0000” => digito <=“0111111”; when “0001” => digito <=“0000110”; when “0010” => digito <=“1011011”; when “0011” => digito <=“1001111”; ..... end case; 62 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) then case comando is when “000” => resposta <= oper1 and oper2; when “001” => resposta <= oper1 or oper2; when “010” => resposta <= oper1 nor oper2; ..... end case; else 63 -- continuação do else case comando is when “000” => resp_aritm <= oper1 + oper2; when “001” => resp_aritm <= oper1 - oper2; ... when others => resp_aritm <= X’0’; end case; end if; 64 3 - Gerador do Código de Hamming Tarefa: Implementar o gerador do código de Hamming. 65 ALTERA MAX-PLUS II FINALIDADE: • ESQUEMÁTICO; • VHDL; • AHDL; -----------------------------------------------------------------------• COMPILAR PARA UM DETERMINADO CHIP • SIMULAR • FAZER O DOWNLOAD DO CÓDIGO PARA FPGA 67 68 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. 69 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. Portas lógicas Clique duas vezes aqui e a tela ao lado irá aparecer. chip comercial (TTL) 70 Com o botão direito você poderá fazer as conexões entre as portas 71 Feito o circuito, coloque os conectores de entrada e de saída. Estes conectores estão disponíveis na biblioteca /prim. xor Conector output Conector input 72 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 73 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. 74 Agora, você precisa selecionar o dispositivo que deseja gravar o seu arquivo compilado. (Assign => Device) 75 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. 76 77 O próximo passo será compilar este arquivo. Isto é feito em MAX-PLUS II => Compiler 78 Uma tela igual a esta será aberta e seu arquivo (vhdl ou gdf) será compilado. 79 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) 80 O próximo passo é a simulação, mas antes você precisa criar as formas de ondas. Isto é feito em MAX+PLUS II => Waveform Editor. 81 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 82 Escolhendo aquela opção abrirá uma tela Enter Nodes from SNF. No ícone List, você listará todos os sinais em Available Nodes & Groups. 83 Todos os sinais de entrada e saída do meu arquivo Selecione todos os sinais 84 Agora você tem todas os sinais disponíveis no Waveform Editor. 85 Selecione o tempo final da simulação e informe qual é este intervalo 86 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 na opção indicada você poderá associar o trem de pulso a este pino 87 Nesta tela você seleciona a duração do pulso Count Every 88 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 89 Salve o arquivo 90 Automaticamente ele atribui o mesmo nome do arquivo original + a extensão scf 91 O próximo passo é simular este arquivo (MAX+PLUS II => Simulator) 92 Simulando !!!! 93 Ok!!! Sem erros 94 Resultado da simulação 95 Próximo passo é a programação do chip (MAX+plus II => Programmer) 96 Na opção Program você programa o dispositivo 97 Seleciona-se o modo (byte-blaster, bit-blaster ou gravador de FPGA) que será feito o download - OPTIONS => HARDWARE SETUP 98 Como usamos o cabo BYTE-BLASTER para o download, então selecione esta opção. 99 No menu JTAG você irá selecionar o arquivo que será gravado na FPGA. 100 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ília MAX 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-BLASTER está corretamente conectada na porta paralela. 101 Pronto!!!! Na opção Program você programa o dispositivo. 102 Exemplo de um arquivo em VHDL de um decodificador 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 is begin decoder1 : process(endereco) begin case 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; 103 CABO BYTE-BLASTER 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 30cm 105 Esquema elétrico do cabo BYTE-BLASTER 106 107 Esquema elétrico para gravar a FLEX 10K 108 Esquema elétrico para gravar o MAX7000 e o MAX9000 109 2.8 BIBLIOGRAFIA Bostock, 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, 1997 AIRIAU, 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/VHDL http://www.altera.com http://www.aldec.com 110