Você está na página 1de 46

DISPOSITIVO LGICOS PROGRAMVEIS (FPGA) E LINGUAGEM DE DESCRIO DE HARDWARE (VHDL)

ELABORADO POR ANDERSON ROYES TERROSO

PORTO ALEGRE, SETEMBRO DE 1998

1 INTRODUO ............................................................................................................................. 3 1.1 DISPOSITIVOS LGICOS PROGRAMVEIS FPGA ............................................................ 3 1.1.2 DEFINIO DE BLOCOS LGICOS:............................................................................ 4 1.1.3 DEFINIO DE ROTEAMENTO..................................................................................... 5 1.1.3 DEFINIO DE IOBS .................................................................................................... 7 1.2 CIRCUITOS PROGRAMVEIS EPLD ................................................................................... 8 2 LINGUAGEM DE DESCRIO DE HARDWARE (VHDL) .................................................... 9 2.1 O QUE VHDL? .................................................................................................................... 9 2.2 O QUE SIGNIFICA VHDL? .................................................................................................... 9 2.3 O QUE UMA LINGUAGEM DE DESCRIO DE HARDWARE?..................................... 9 2.4 BREVE HISTRICO............................................................................................................... 9 2.4.1 LINHA CRONOLGICA ................................................................................................ 11 2.5 VANTAGENS E DESVANTAGENS DE SE UTILIZAR VHDL ........................................... 12 3 COMPONENTES DE UM PROJETO VHDL ........................................................................... 13 3.1 PACKAGE (PACOTES)........................................................................................................ 16 3.2 ENTITY (ENTIDADE).......................................................................................................... 17 3.2.1 TIPO DE PORTAS.......................................................................................................... 17 3.2.2 TIPOS DE SINAIS .......................................................................................................... 17 3.3 ARCHITECTURE (ARQUITETURA) ................................................................................... 18 3.3.1 ARQUITETURA SIMPLES ............................................................................................. 18 3.3.2 ARQUITETURA CONCORRENTE ................................................................................. 19 3.4 CONFIGURATION (CONFIGURAO).............................................................................. 21 4 SEMNTICA DA LINGUAGEM VHDL................................................................................... 22 4.1 ELEMENTOS LXICOS....................................................................................................... 22 4.1.1 COMENTRIOS............................................................................................................. 22 4.1.2 IDENTIFICADORES...................................................................................................... 22 4.1.3 TIPOS DE DADOS NO LGICOS ............................................................................... 23 4.1.4 EXPRESSES E OPERADORES.................................................................................... 24 5 COMANDOS SEQENCIAIS.................................................................................................... 25 5.1 ATRIBUIO DE VARIVEIS............................................................................................ 25 5.2 ATRIBUIO DE SINAIS.................................................................................................... 27 5.3 COMANDO WAIT................................................................................................................ 29 5.4 COMANDO IF THEN ELSE ................................................................................................. 29 5.5 COMANDO LOOP FOR - WHILE ........................................................................................ 34 5.6 COMANDO NEXT ............................................................................................................... 35 5.7 COMANDO EXIT ................................................................................................................. 35 5.8 COMANDO CASE ................................................................................................................ 36 5.9 COMANDO NULL................................................................................................................ 37 5.10 COMANDO RETURN......................................................................................................... 37 6 ESPECIFICANDO A ESTRUTURA DE UM SISTEMA........................................................... 38 7 ALGUNS EXEMPLOS DE IMPLEMENTAES EM VHDL ................................................ 41 8 BIBLIOGRAFIA ......................................................................................................................... 46

INTRODUO
O rpido desenvolvimento dos recursos de concepo de circuitos

integrados, tanto na rea de processos quanto na rea de CAD, tornou possvel o aparecimento de dispositivos com Lgica Programvel. Tais dispositivos permitem aos usurios implementar circuitos complexos sem a necessidade do uso de onerosos recursos de fundio em slicio. A primeira utilizao destes circuitos naturalmente nos projetos de prototipagem. Tendo em vista que grande parte destes circuitos podem ser reprogramados, o seu uso nas fases preliminares de projeto possibilita uma grande economia de tempo e dinheiro. A medida em que os dispositivos de Lgica Programvel tornam-se cada vez mais densos e rpido, o processo de concepo de projetos eletrnicos se beneficia destes circuitos fazendo com que o tempo de projeto seja reduzido em muitos dias. Assim sendo, devido grande complexidade dos projetos capazes de ser implementados em lgica programvel, tais circuitos passam a ser utilizados em projetos industriais como substituto dos circuitos ASIC (Application Specific Integrated Circuits).

1.1

DISPOSITIVOS LGICOS PROGRAMVEIS FPGA


FPGA (Field Programmable Gate Array) so circuitos programveis

compostos por um conjunto de clulas lgicas ou blocos lgicos alocados em forma de uma matriz. Em geral, a funcionalidade destes blocos assim como o seu roteamento, so configurveis por software. A palavra Field indica que a configurao do circuito pode ser feita pelo usurio final sem a necessidade da utilizao de recursos de foundries. Na Figura 1.1, est demonstrado a estrutura de uma FPGA.

FIGURA 1.1: A estrutura de uma FPGA. 1.1.2 DEFINIO DE BLOCOS LGICOS: As funes lgicas so implementadas no interior dos Blocos Lgicos. Em algumas arquiteturas os Blocos Lgicos possuem recursos seqenciais tais como flip-flop ou registradores. O fabricante Xilinx chama seu Bloco Lgico de CLB (Configurable Logic Block), conforme a Figura 1.2. Enquanto que a Actel usa o termo LM (Logic Modules), j a Altera utiliza o termo LE (Logic Element) para as sries 8000 e 10000 e Macrocell para as sries 5000, 7000 e 9000.

FIGURA 1.2: A estrutura de uma FPGA. 1.1.3 DEFINIO DE ROTEAMENTO A interconexo entre os blocos feita atravs de uma rede de duas camadas de metal. A conexes fsicas entre os fios so feitas ora com transistores de passagem controlados por bits de memria (PIP) ora com chaves de interconexo (Switch Matrix). Os recursos de roteamento da srie XC3000 da Xilinx possuem: Conexes Globais: formam uma rede de interconexo em linha e colunas de cinco fios de metal cada, que se ligam atravs de chaves de interconexo. Esta rede circunda os blocos lgicos (CLBs) e os blocos de E/S (IOBs); Matrizes de Conexo (Switch Matrix): so chaves de

interconexo que permitem o roteamento entre os Blocos Lgicos atravs das Conexes Globais (Figura 1.3). Estas conexes so programveis na fase de roteamento automtico, executada pelo software de projeto do fabricante ou manualmente com o uso de uma ferramenta de software chamada Edinet.

SB

SB

1 8

2 3 4

CLB

7
SB

SB

Switch Box
FIGURA 1.3:Representao de um Switch Box. Conexes Diretas: so conexes entre CLBs vizinhos e permitem conectar blocos com menor atraso, pois no utilizam os recursos globais de roteamento. Linhas Longas: so conexes que atravessam todo o circuito sem passar pelas switch matrix e so utilizadas para conectar sinais longos e com restries de skew entre mltiplos destinos (Figura 1.4)

FIGURA 1.4: Roteamento de uma FPGA.

1.1.3 DEFINIO DE IOBS Os blocos de E/S possuem buffer tristate e um flip-flop para os sinais da sada. O sinal de sada pode ser invertido por programa assim como o sinal de controle do tristate (Figura 1.5)

FIGURA 1.5: Representao de um IOB da famlia XC 3000 da XILINX

1.2

CIRCUITOS PROGRAMVEIS EPLD


EPLD (EPROM Programmable Logic Devices) so componentes que

possuem transistores EPROM para possibilitar sua programao. Os transistores EPROM so usados para forar valores nas entradas dos blocos lgicos, ou seja, enquanto eles no so programados em seu estado OFF, a word line pode forar valores para o bit line, ora fechando o circuito entre o dreno e a fonte do transistor, ora abrindo o circuito entre dreno e a fonte.

2 LINGUAGEM DE DESCRIO DE HARDWARE (VHDL)


2.1 O QUE VHDL?

VHDL uma forma de se descrever, atravs de um programa, o comportamento de um circuito ou componente digital.

2.2

O QUE SIGNIFICA VHDL?

Very High Speed Integrated Circuit Hardware Description Language


Linguagem de Descrio de Hardware com nfase em Circuitos Integrados de altssima velocidade.

2.3 O QUE UMA LINGUAGEM DE DESCRIO DE HARDWARE?


Uma linguagem de descrio de hardware descreve o que um sistema faz e como. Esta descrio um modelo do sistema hardware, que ser executado em um software chamado simulador. Um sistema descrito em linguagem de hardware pode ser implementado em um dispositivo programvel (FPGA - Field Program Gate Array), permitindo assim o uso em campo do seu sistema, tendo a grande vantagem da alterao do cdigo a qualquer momento.

2.4

BREVE HISTRICO

A idia da criao de uma linguagem de descrio de hardware partiu do Departamento de Defesa dos Estados Unidos da Amrica (DoD). As foras armadas americanas, compravam grande quantidade de placas de circuitos impressos, sendo que muitas delas compostas de circuitos integrados de aplicao especfica (ASIC - Application Specific Integrated Circuits). Como era comum, empresas da rea de eletrnica, mudarem de rea ou trocar de ramo, necessitava-se garantir a reposio das peas durante a vida

til das placas, com isso o DoD iniciou o desenvolvimento de uma linguagem padro de descrio de hardware.

2.4.1 LINHA CRONOLGICA 1968: foram desenvolvidas as primeiras linguagens de descrio de hardware, porm em 1970 tinha-se inmeras linguagens com sintaxe e semntica incompatveis; 1973: surge o primeiro esforo de padronizao da linguagem, comandado pelo projeto CONLAN (CONsensus LANguage), cujo o objetivo principal era: definir formalmente uma linguagem de multi-nvel com sintaxe nica e semntica igual. Paralelamente, iniciou-se outro projeto financiado pelo DoD cujo o objetivo era criar uma linguagem de programao. 1983: em janeiro de 1983, foi publicado o relatrio final do projeto CONLAN. Neste mesmo ano, tambm foi publicado o relatrio final do projeto DoD, que deu origem a linguagem ADA. Em maro de 83, o DoD comeou o programa VHSIC, afim de melhorar a tecnologia de concepo, engenharia e construo nos EUA. Participaram deste projeto a IBM, Intermetrics e Texas Instruments. 1986: a Intermetrics desenvolveu um compilador e um simulador. Alm disso foi criado um grupo de padronizao da IEEE para VHDL. 1988: primeiros softwares so comercializados. 1991: recomeou-se um novo processo de padronizao, cujo o objetivo era a coleta e anlise de requisitos, definio dos objetivos e a especificao das modificaes linguagem. 1992: as modificaes propostas foram avaliadas e votadas. 1993: um novo padro publicado, chamado VHDL-93, padronizado IEEE Std 1164-1993. 1997: em dezembro de 97 foi publicado o manual de referncia da linguagem VHDL.

2.5

VANTAGENS E DESVANTAGENS DE SE UTILIZAR VHDL

A descrio de um sistema em VHDL apresenta inmeras vantagens, tais como: Intercmbio de projetos entre grupos de pesquisa sem a necessidade de alterao; Permite ao projetista considerar no seu projeto os delays comuns aos circuitos digitais; A linguagem independe da tecnologia atual, ou seja, voc pode desenvolver um sistema hoje e implement-lo depois; Os projetos so fceis de serem modificados; O custo de produo de um circuito dedicado elevado, enquanto que usando VHDL e Dispositivos Programveis, isto passa a ser muito menor; Reduz consideravelmente o tempo de projeto e implementao. Quanto as desvantagens, apenas uma relevante: VHDL no gera um hardware otimizado;

COMPONENTES DE UM PROJETO VHDL


A estrutura de um programa VHDL, baseia-se em 4 blocos: PACKAGE ENTITY ARCHITECTURE CONFIGURATION

PACKAGE so declarados as constantes, tipos de dados, sub-programas; ENTITY declarao dos pinos de entrada e sada; ARCHITECTURE define as implementaes do projeto; CONFIGURATION define as arquiteturas que sero utilizadas. Abaixo est representado a estrutura de um programa descrito em

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

PACKAGE (BIBLIOTECAS)

ENTITY exemplo IS PORT ( < descrio dos pinos de entrada e sada > ); END exemplo; ARCHITECTURE teste OF exemplo IS BEGIN PROCESS( <pinos de entrada e signal > ) BEGIN < descrio do circuito integrado > END PROCESS; END teste; ARCHITECTURE (ARQUITETURA) ENTITY (PINOS DE I/O)

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( 6 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; begin CI_X : process( a ) begin <descrio do processo> end process CI_Y; CI_Y : process( a ) begin <descrio do processo> end process CI_Z; end TTL;

FIGURA 2.1: Apresentao de um programa em VHDL e o sua representao em hardware.

3.1

PACKAGE (PACOTES)

Os pacotes (biblioteca) contm uma coleo de elementos incluindo descrio do tipos de dados (relacione com os includes da Linguagem C). Pacotes usados normalmente: IEEE.std_logic_arith funes aritmticas IEEE.std_logic_signed funes aritmticas com sinal IEEE.std_logic_unsigned funes aritmticas sem sinal IEEE.std_logic_1164 std_logic e funes relacionadas ALTERA.maxplus2 declarao de todas as macro-funes e megafunes. Como utiliz-los: LIBRARY <nome_da_biblioteca> e/ou USE <nome_da_biblioteca>.all OBS. 1: .all significa que todos os elementos da bibliotecas devem ser utilizados, caso no seja acrescentado .all deve-se especificar os elementos que sero utilizados. REGRA GERAL => COLOQUE SEMPRE .all

3.2

ENTITY (ENTIDADE)

3.2.1 TIPO DE PORTAS IN = porta de entrada; OBS.: no pode receber atribuio de valor dentro do programa. OUT = porta de sada; OBS.: no pode ser utilizado como entrada para outro circuito. INOUT = porta de entrada e sada; BUFFER = porta de sada que pode ser atualizada por mais de uma fonte; LINKAGE = o valor da porta pode ser lido e atualizado.
EX.:

Entity <nome> is port ( sinal_controle : in <tipo>; parcela_1 : in <tipo>; parcela_2 : out <tipo> ); end <nome>; 3.2.2 TIPOS DE SINAIS <tipo> => bit, bit_vector, std_logic, std_logic_vector, boolean, real, bit assume valor 0 ou 1 x : in bit; bit_vector vetor de bits. x : in bit_vector(7 downto 0); ou x : in bit_vector(0 to
7);

std_logic std_logic_vector vetor de bits. x : in std_logic_vector(7 downto 0); Boolean assume valores true ou false (verdadeiro ou falso) Real

3.3

ARCHITECTURE (ARQUITETURA)
Arquitetura pode ser definida como sendo a(s) implementao(es) do

projeto. Na figura 3.1, temos uma placa me de um PC, por exemplo, onde est faltando o chip, considere que a interface entre o chip e o meio externo seja idntica. Na figura 3.2, foi colocado um chip, com toda a arquitetura do projeto.

Figura 3.1

Figura 3.2

3.3.1 ARQUITETURA SIMPLES A arquitetura simples contm apenas um processo, ou seja, apenas um bloco. 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;

3.3.2 ARQUITETURA CONCORRENTE A arquitetura concorrente uma forma mais complexa de descrever um sistema, geralmente apresenta vrias processos dentro de uma arquitetura. No programa 1 e 2, temos uma arquitetura com trs processos, podendo ser ou no idependentes. Estes processos so executados em paralelo, porm os processos s sero executados se algum sinal (A, B ou C) tiver seu estado alterado. Novamente tem-se um ganho de processamento. Programa 1 Programa 2

Architecture topologia_arquitetura of teste is begin signal temp1 : bit; signal temp2 : bit; processo_1 : process ( a, b, temp1 ) variable temp3 : bit; begin temp1 <= 0; temp2 := a and b; z <= temp1 xor temp2;

end process process_1; processo_2 : process ( a, b, temp1, temp2 ) variable temp3 : bit; begin temp2 <= 1; temp3 := a and temp1; w <= temp3 xor temp2; end process process_2; end topologia_arquitetura; O exemplo acima, apresenta algumas caractersticas, tais como: 1. Uma arquitetura com dois processos, que sero executados 2. paralelamente; 2. Os dois processos possuem variveis com mesmo nome, mas isto no influncia no processamento;

3.4

CONFIGURATION (CONFIGURAO)

uma mesma entity pode ter vrias arquiteturas. Exemplo: configuration nome_da_config of contador is for estrutural for all: Tflip_flop use entity work.Tflip_flop(comp); end for; for all: inversor use entity work.Tflip_flop(comp); end for; end for end nome_da_config

4
4.1

SEMNTICA DA LINGUAGEM VHDL


ELEMENTOS LXICOS

4.1.1 COMENTRIOS Comentrios em VHDL so iniciados por dois hfens adjacentes (--), podendo ser estendido at o final da linha. Exemplo 1: -- a linha que voc colocar como comentrio, dever colocar antes de -- inici-la dois hfens adjacentes. Exemplo 2: A <= B and C; -- esta operao realiza a and de B com C e o resultado -- colocado em A

4.1.2 IDENTIFICADORES Quando se escreve um programa em VHDL, deve-se tomar certos cuidados, com os identificadores, abaixo segue uma tabela apresentando alguns identificadores vlidos e invlidos.

IDENTIFICADORES VLIDOS palavras seguidas do caracter underline _ Ex.: teste_padrao, input_1_x no sensivel a LETRA MAISCULA e minscula Ex.: SOMA = soma nome com underline so diferentes de nomes sem underline. Ex.: Teste_Padrao TestePadrao

IDENTIFICADORES INVLIDOS uso de palavras reservadas da linguagem com outras finalidades identificador comeando com nmero => 7AB uso do caracter @ Ex.: A@B o caracter underline no fim de um identificador Ex.: soma_ o uso de dois caracteres underlines seguidos Ex.: IN__1

4.1.3 TIPOS DE DADOS NO LGICOS 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: no possvel realizar converso sobre inteiros. Ex.: 3, 546, 349 Physical: representam uma medida fsica: voltagem, capacitncia, tempo Tipos pr-definidos: fs, ps, ns, um, ms, sec, min, hr. Intervalos: permite determinar um intervalo de utilizao 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 coleo de elementos todos do mesmo tipo. Abaixo seguem alguns exemplos de array: type word is array (31 downto 0) of bit; type memory is array (address) of word; type transform is array (1 to 4, 1 to 4) of real; type vector is array (integer range<>) of real; type string is array (positive range<>) of character Ex.: type b is array (1 to 5) of character; (t, e,s,t,e) (1 =>t, 5 => e, 2 => e, 3 => s, 4 => t) (3 => s, 2 => e, 5 => e, others => t) Record: semelhante a struct da Linguagem C, ou seja, uma coleo de elementos de tipos diferentes. type instruction is record Mneumonico : String; Code : Bit_vector( 3 downto 0);; Ciclos : integer; end record; signal Instr1: instruction; Instr1.Mneumonico : or reg1, reg2 Instr1. Code : 0010 Instr1.Ciclos :3

4.1.4 EXPRESSES E OPERADORES


4.1.4.1 OPERADORES LGICOS

Os operadores lgicos so: and, or, nand, nor, xor, xnor e not.
4.1.4.2 OPERADORES NUMRICOS

Os operadores numricos so: soma (+), subtrao (-), multiplicao (*), diviso (/), mdulo (mod), remanescente (rem - ex.: 6 rem 4 = 2), expoente (**), valor absoluto (abs).
4.1.4.3 OPERADORES RELACIONAIS

Os operadores relacionais so; igual (=), diferente (/=), menor do que (<), menor ou igual (<=), maior do que (>), maior ou igual (>=).
4.1.4.4 OPERADORES DE DESLOCAMENTO

Operadores sll - shift left logical srl - shift right logical sla - shift left arithmetic sra - shift right arithmetic rol - rotate left logical ror - rotate right logical

Exemplo 01101001 => 11010010 (acrescenta 0 no bit - sign.) 01101001 => 01101001 (acrescenta 0 no bit + sign.) 01101001 => 11010011 (repete o bit - sign.) 01101001 => 00110100 (repete o bit + sign.) 01101001 => 11010010 (desloca todos bits para esq.) 01101001 => 10110100 (desloca todos bits para dir.)

4.1.4.5 OPERADOR DE CONCATENAO

Esta operao 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]

COMANDOS SEQENCIAIS

Nesta seo ser apresentado alguns comandos sequenciais que o VHDL dispe, so eles: atribuio variveis atribuio sinais comando wait comando if-then-else comando loop for- while comando next comando exit comando null comando return comando case

5.1

ATRIBUIO DE VARIVEIS

Note que a passagem de parmetros realizada utilizando :=. Interpretao do programa abaixo: Na linha 15 o bit menos significativo do vetor C receber um e o outro zero, Nas linhas 16 e 17 foram utilizados operadores booleanos; Nas linhas 18 e 19, utilizou-se o operador & para realizar a concatenao (vide SEMNTICA DA LINGUAGEM); Na linha 20, o bit menos significativo do vetor D ser igual a 0 enquanto que o outro 1; Na linha 21 o vetor W teria os seguintes valores aps a operao: [1G00], onde G o valor dele mesmo. Na linha 22, DATA ser todo preenchido com 0s. 1 architecture topologia_arquitetura of teste is 2 signal A, B, J : bit_vector(1 downto 0); 3 signal E, F, G : bit; 4 begin 5 6 process ( A, B, E, F, G, J) 7 8 variable C, D, H, Y : bit_vector(1 downto 0); 9 variable W, Q : 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); 13 14 begin 15 C := 01; 16 X := E nand F; 17 Y := H or J; 18 Z(0 to 3) := C & D; 19 Z(4 to 0) := (not A) & (A nor B); 20 D := (1, 0);

21 22 23 24

W := (2 downto 1 => G, 3 => 1, others => 0); DATA := (others => 0); end process; end topologia_arquitetura;

A funo de uma varivel dentro de um processo serve para intermediar valores.


OBS. 1: A varivel (VARIABLE) s pode ser utilizada dentro do processo em que foi criada; OBS. 2: Ela poder assumir os mesmo tipos descritos anteriormente; OBS. 3: Sempre que for passado algum parmetro para uma varivel, estes devem ser do mesmo tipo. OBS. 4: Note que a passagem de valores para uma varivel atravs de := e para pinos de sada a atribuio feita com <= Outro exemplo: Note que a atualizao da varivel automtica. Este exemplo apresenta as etapas de simulao de um programa em VHDL, acompanhe cada bloco (horizontalmente).

D <= 2; process (C, D)


variable Av, Bv, Ev : integer := 0;

process (C, D)
variable Av, Bv, Ev : integer :=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 B=1 C=1 D=2 E=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 = 0 B=1 Bv = 0 C=1 D=2 E=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 = 2 B=1 Bv = 0 C=1 D=2 E=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 = 2 B=1 Bv = 3 C=1

begin 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

begin 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

D=2 E=1

Ev = 0

D=2 E=1

Ev = 6

5.2

ATRIBUIO DE SINAIS
A passagem de parmetros para sinais se d com o uso de <=.

Interpretao do programa abaixo: Na linha 11, inicialmente A vale 0, aps 20ns o valor de A alterado para 1 e aps 40ns, retorna a ser 0; Na linha 12 e linha 13, so operaes lgicas; Na linha 14, o processo semelhante ao da linha 11, entretanto os dados agora so do tipo inteiro. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 architecture teste of topologia_arquitetura 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;

OBS. 1: Note que a atribuio a um sinal feita atravs de <=; OBS. 2: Houve uma atribuio ao SIGNAL dentro do processo, isto no implica em dizer que em outro processo eu possa utiliz-lo atribuindo outro valor, ou seja, ele poder ser utilizado por outro processo, mas no poder receber uma atribuio de valores; OBS. 3: O signal deve ser passado ao processo, como mostra o exemplo.

Outro exemplo: Neste exemplo, fica bem claro a diferena entre uma varivel e um sinal, ou seja, todos os sinais s sero atualizados no final do processo, enquanto que a varivel atualizada sempre que usada. Novamente, acompanhe a simulao do programa passo-a-passo (horizontalmente). D <= 2; 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; 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; 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; 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 E <= 2;

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

e no 3 e no 6

Qual a diferena entre o SIGNAL e a VARIABLE? 1. O signal pode ser utilizado por qualquer processo pertencente aquela arquitetura, enquanto que a varivel interna ao processo e, 2. A atualizao da varivel imediata, enquanto que o signal s atualizado no final do processo.

5.3

COMANDO WAIT

Este comando tem a finalidade de causar uma suspenso do processo declarado ou procedimento. O comando wait pode ser utilizado de quatro formas diferentes, so elas: 1 2 3 4 wait until <conditional>; wait on <signal_list>; wait for <time>; wait; wait until CLKevent and CLK = 1; wait on a, b; wait for 10ns; wait;

Interpretao da tabela acima: Na linha 1, o comando wait until implica que a operao est suspensa at (until) que haja uma transio (event) e (and) o CLK seja igual a 1, ou seja, est aguardando uma borda de subida; Na linha 2, o comando wait on suspende a operao at que a e b sejam igual a 1; Na linha 3, suspende a operao por 10ns; Na linha 4, suspende a operao.

5.4

COMANDO IF THEN ELSE

Existem inmeras formas de se utilizar if-then-else(elsif), abaixo segue um quadro explicativo do if-then-else e ao lado dois exemplos simples. O prximo quadro apresenta um exemplo usando este comando e o comando anterior (wait). MODELO if condio_1 then <comandos> elsif condio_2 then <comandos> else <comandos> end if; exemplo 1: if ( A = 0) then B <= 00; else B <= 11; end if; exemplo 2: if (CLKevent and CLK =1) then FF <= 0; elsif (CLKevent and CLK =0) then FF <= 1; elsif (J = 1) and (K=1) then FM <= 1; end if;

1 2 3 4 5 6 7 8

architecture topologia_arquitetura of teste is signal CLK : bit; signal SEL : bit_vector(1 downto 0); begin process begin if (SEL = 00) then wait until CLKevent and CLK = 1;

9 10 11 12 13 14 15

elsif SEL = 01 then wait for 60ns; else null; end if; end process; end topologia_arquitetura;

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

-----------------------------------------------------------------------------------------------------------***** Comentrios ***** -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_total : out bit_vector ( 4 downto 0); mult_total : out bit_vector ( 7 downto 0); operacao_and : out bit_vector ( 3 downto 0); operacao_xor : out bit_vector ( 3 downto 0) ); end lab2; architecture logica of lab2 is begin soma : 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 soma; operacao_logica : process ( controle, parcela_1, parcela_2 ) begin if ( controle = 1 ) then operacao_and <= parcela_1 and parcela_2; else operacao_xor <= parcela_1 xor parcela_2; end if;

end process operacao_logica; end logica;

-----------------------------------------------------------------------------------------------------------***** Comentrios ***** -O programa deve receber o nome de lab3.vhd ----------------------------------------------------------------------------------------------------------library IEEE; use ieee.std_logic_1164.all; entity lab3 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 lab3; architecture logica of lab3 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;

5.5

COMANDO LOOP FOR - WHILE

<label opcional>: for <parmetros> in <valor_final> loop <seqncia de comandos> end loop <label opcional>;

OBS.: O PARMETRO NO PODE TER SEU VALOR ALTERADO EM HIPTESE ALGUMA DENTRO DO LOOP FOR O exemplo abaixo, apresenta de que forma pode ser utilizado o comando LOOP-FOR. 1 2 3 4 5 6 7 8 9 10 11 12 process (A) begin variable Z : bit_vector( 3 downto 0); A <= 2; Z := 0000; for i in 0 to 3 loop if(A = i) then Z(i) := 1; end if; end loop; end process;

Note que este loop ser realizado 4 vezes, independentemente da condio IF-THEN. O funcionamento deste programa baseia-se na atribuio de 1 na posio Z(2) quando i for igual a A, ou seja, 2.. Usando o loop While

Na figura 1, o processo aguarda at que clk seja igual a 1, enquanto isso ele fica parado. Quando o clk for igual a 1 (figura 2), ento o processo

entra no loop while. Este loop aguarda at que o Level seja igual 1, enquanto isso ele fica no loop while Level = 1 loop => end loop (figura 3).

Quando Level for igual a 1, ento ele incrementa o contador (figura 4).

5.6

COMANDO NEXT

O comando NEXT utilizado para terminar prematuramente execuo de uma iterao do tipo while, for ou um loop infinito. process(A) begin Z <= 0000; for i in 0 to 3 loop next when A/=i; Z(I) <= 1; end loop; end process;

5.7

COMANDO EXIT
=> utilizado para terminar um while, for; => termina o lao e desloca para o label; => termina o lao quando (when) condio satisfeita;

exit exit <label_loop> exit <label_loop> when <condio>

5.8

COMANDO CASE

O comando case seleciona a execuo que ocorrer de uma lista de alternativas.

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

PrGIn1 and PrGIn2; PrGIn1 or PrGIn2; PrGIn1 nand PrGIn2; PrGIn1 nor PrGIn2; not PrGIn1; not PrGIn2; 0

PrGIn1 and PrGIn2; PrGIn1 or PrGIn2; PrGIn1 nand PrGIn2; PrGIn1 nor PrGIn2; not PrGIn1; not PrGIn2; 0

PrGIn1 and PrGIn2; PrGIn1 or PrGIn2; PrGIn1 nand PrGIn2; PrGIn1 nor PrGIn2; not PrGIn1; not PrGIn2; 0

end process porta_programavel;

5.9

COMANDO NULL

O comando null frequentemente utilizado com o comando case, a ltima opo do case ficaria com null. Similar ao null da Linguagem C.

5.10 COMANDO RETURN


Utilizado em funes, tem a finalidade de retornar um valor.

6 ESPECIFICANDO SISTEMA

ESTRUTURA

DE

UM

Neste captulo ser apresentado uma outra forma de detalhamento de um sistema, visando obter um sistema compacto, sem a necessidade de repetio de processos. Para isso, necessrio o uso de component e port map. O component exatamente a descrio de um componente, ou seja, define-se anteriormente sua topologia, permitindo assim o uso repetidas vezes. O port map um mapeamento deste componente em um sistema maior. EX.: Suponha que voc tenha um sistema composto por cinco componentes, mas de dois tipos diferentes, por exemplo 7408 e 7404. A Figura 6.1, apresenta esta situao, porm ao invs de um CI completo, vamos supor que tenha somente uma porta lgica.

FIGURA 6.1: Exemplo de um sistema

Note que a placa acima possui cinco blocos internos, que so representados por dois componentes. O primeiro passo modelar estes componentes, o programa 1 apresenta esta modelagem e o programa 2 modela o segundo componente. J o programa 3, modela os cinco blocos dentro da placa. Note que a instruo component componente_and port( a: in bit; b : in bit; c : out bit); end component; est chamando o componente and anteriormente modelado. J a instruo and1 : componente_and port map (a => in1, b => in2, c => s1); mapeia o bloco (componente and) na placa. Todos os blocos precisam ser nomeados na placa dentro da placa. Programa 1: descreve o componente inversor; Programa 2: descreve o componente and; Programa 3: descreve um sistema utilizando estes dois componentes;

Programa 1
---------------------------------------------------------- Arquivo componente_inv.vhd -- Modelo do inversor --------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; entity componente_inv is port( x : in bit; y : out bit ); end componente_inv; architecture arquitetura_inv of componente_inv is begin y <= not x; end arquitetura_inv;

Programa 2
---------------------------------------------------------- Arquivo componente_and.vhd -- Modelo da porta AND --------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; entity componente_and is port( a : in bit; b : in bit; c : out bit ); end componente_and;

architecture arquitetura_and of componete_and is


begin c <= a and b; end arquitetura_and;

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 => out1); inv1 : componente_inv port map (x => s1, y => s3); inv2 : componente_inv port map (x => s2, y => s4); end arquitetura_sistema;

7 ALGUNS EXEMPLOS DE IMPLEMENTAES EM VHDL


A seguir so apresentado trs exemplos utilizando a Linguagem de Descrio de Hardware (VHDL). O primeiro deles a implementao de uma ULA (Unidade Lgica Aritmtica). A estrutura igual aos exemplos anteriores, na entity foi declarado 4 sinais: controle, operando_a, operando_b e sada. Ento, a interface do sistema definida por estes pinos de I/O . Logo a seguir, est estruturada a arquitetura da ULA, de forma que a palavra de controle seleciona o tipo de operao que ser realizada, para isso foi utilizado if-then-else. A Figura 7.1, apresenta a simulao feita no MAXPLUX II. Note que a sada est atrasada em relao ao sinal de controle, justificando o atraso inerente as portas lgicas.
----------------------------------------------------------------Implementao de uma ULA. ---------------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; entity ula is port( controle : in bit_vector(2 downto 0); operando_a : in bit_vector(7 downto 0); operando_b : in bit_vector(7 downto 0); saida : out bit_vector(7 downto 0) ); end ula; architecture estrutura of ula is begin process (controle, operando_a, operando_b) begin if (controle = "000") then saida <= operando_a and operando_b; elsif (controle = "001") then saida <= operando_a or operando_b; elsif (controle = "010") then saida <= operando_a xor operando_b; elsif (controle = "011") then saida <= operando_a nor operando_b; elsif (controle = "100") then saida <= not(operando_a); elsif (controle = "101") then

saida <= not(operando_b); elsif (controle = "110") then saida <= operando_a nand operando_b; elsif (controle = "111") then saida <= not(operando_a xor operando_b); end if; end process; end estrutura;

FIGURA 7.1: Simulao da ULA.

O prximo exemplo apresenta a implementao de um decodificador 3x8. Como no exemplo anterior, a estrutura a mesma, na entity so declarados os pinos de entrada e sada. Neste exemplo, utilizou-se o comando case para a implementao do decodificador. A Figura 7.2 apresenta a simulao do decodificador 3x8. ---------------------------------------------------------------------Implementao de um decodificador 3x8. --------------------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; entity decodificador is port( controle : in bit_vector(2 downto 0); saida : out bit_vector(7 downto 0) ); end decodificador; architecture estrutura of decodificador is begin process (controle) begin case controle 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; end estrutura;

Dispositvos Programveis (FPGA) e Linguagem de Descrio de Hardware (VHDL)

FIGURA 7.2: Simulao do decodificador

44

Dispositvos Programveis (FPGA) e Linguagem de Descrio de Hardware (VHDL)

O prximo exemplo bem simples, apresenta a implementao de um registrador de 12 bits, note que o processo s enviar os dados da entrada para a sada quando o clock for nvel lgico um. A Figura 7.3, apresenta a simulao deste programa.
-----------------------------------------------------------------------Implementao de um registrador de 12 bits. ----------------------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; entity reg12 is port( d clk q end reg12;

: in bit_vector(11 downto 0); : in bit; : out bit_vector(11 downto 0));

architecture estrutura of reg12 is begin process begin wait until clk = '1'; q <= d; end process; end estrutura;

FIGURA 7.3: Simulao do registrador de 12 bits.

45

Dispositvos Programveis (FPGA) e Linguagem de Descrio de Hardware (VHDL)

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. Grnbacher, 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 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. modlisation. Presses

INTERNET: ftp://ftp.cs.adelaide.edu.au/pub/VHDL http://www.altera.com http://www.aldec.com

46

Você também pode gostar