Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorial FPGA e VHDL PDF
Tutorial FPGA e VHDL PDF
PUCRS
MINICURSO 2
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 ....................................................................................... 7
2 LINGUAGEM DE DESCRIO DE HARDWARE (VHDL) ....................................................... 8
2.1 O QUE VHDL?........................................................................................................................... 8
2.2 O QUE SIGNIFICA VHDL? ......................................................................................................... 8
2.3 O QUE UMA LINGUAGEM DE DESCRIO DE HARDWARE? ........................................ 8
2.4 BREVE HISTRICO .................................................................................................................... 8
2.4.1 LINHA CRONOLGICA ....................................................................................................... 9
2.5 VANTAGENS E DESVANTAGENS DE SE UTILIZAR VHDL............................................... 10
3 COMPONENTES DE UM PROJETO VHDL ............................................................................... 11
3.1 PACKAGE (PACOTES) ............................................................................................................. 13
3.2 ENTITY (ENTIDADE) ............................................................................................................... 14
3.2.1 TIPO DE PORTAS............................................................................................................... 14
3.2.2 TIPOS DE SINAIS ............................................................................................................... 14
3.3 ARCHITECTURE (ARQUITETURA) ....................................................................................... 15
3.3.1 ARQUITETURA SIMPLES .................................................................................................. 15
3.3.2 ARQUITETURA CONCORRENTE...................................................................................... 16
3.4 CONFIGURATION (CONFIGURAO) ................................................................................. 18
4 SEMNTICA DA LINGUAGEM VHDL....................................................................................... 19
4.1 ELEMENTOS LXICOS ............................................................................................................ 19
4.1.1 COMENTRIOS .................................................................................................................. 19
4.1.2 IDENTIFICADORES ........................................................................................................... 19
4.1.3 TIPOS DE DADOS NO LGICOS ................................................................................... 20
4.1.4 EXPRESSES E OPERADORES ........................................................................................ 21
5 COMANDOS SEQENCIAIS......................................................................................................... 22
5.1 ATRIBUIO DE VARIVEIS ................................................................................................ 22
5.2 ATRIBUIO DE SINAIS ......................................................................................................... 24
5.3 COMANDO WAIT...................................................................................................................... 26
5.4 COMANDO IF THEN ELSE....................................................................................................... 26
5.5 COMANDO LOOP FOR - WHILE ............................................................................................. 31
5.6 COMANDO NEXT ..................................................................................................................... 32
5.7 COMANDO EXIT....................................................................................................................... 32
5.8 COMANDO CASE...................................................................................................................... 33
5.9 COMANDO NULL ..................................................................................................................... 34
5.10 COMANDO RETURN .............................................................................................................. 34
6 ESPECIFICANDO A ESTRUTURA DE UM SISTEMA ............................................................. 35
7 ALGUNS EXEMPLOS DE IMPLEMENTAES EM VHDL................................................... 38
8 BIBLIOGRAFIA ............................................................................................................................... 43
INTRODUO
O rpido desenvolvimento dos recursos de concepo de circuitos in-
tegrados, 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
SB
SB
CLB
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)
1.2
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
2.4
BREVE HISTRICO
2.5
PACKAGE
ENTITY
ARCHITECTURE
CONFIGURATION
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 >
ENTITY
(PINOS DE I/O)
);
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)
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;
3.1
PACKAGE (PACOTES)
3.2
ENTITY (ENTIDADE)
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
Programa 2
3.4
CONFIGURATION (CONFIGURAO)
4.1
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;
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
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
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.)
COMANDOS SEQENCIAIS
5.1
comando next
comando exit
comando null
comando return
comando case
ATRIBUIO DE VARIVEIS
22
23
24
DATA
:= (others => 0);
end process;
end topologia_arquitetura;
D <= 2;
process (C, D)
process (C, D)
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)
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
process (C, D)
5.2
ATRIBUIO DE SINAIS
A passagem de parmetros para sinais se d com o uso de <=.
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;
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 no 3
e no 6
5.3
COMANDO WAIT
5.4
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;
1
2
3
4
5
6
7
8
9
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;
10
11
12
13
14
15
-----------------------------------------------------------------------------------------------------------* * * * * 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;
-----------------------------------------------------------------------------------------------------------*****
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
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;
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
5.7
COMANDO EXIT
exit
exit <label_loop>
exit <label_loop> when <condio>
5.8
COMANDO CASE
5.9
COMANDO NULL
6
ESPECIFICANDO A ESTRUTURA DE UM SISTEMA
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.
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
Programa 2
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;
begin
y <= not x;
end arquitetura_inv;
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
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;
41
http://www.ee.pucrs.br/~terroso
42
http://www.ee.pucrs.br/~terroso
BIBLIOGRAFIA
INTERNET:
ftp://ftp.cs.adelaide.edu.au/pub/VHDL
http://www.altera.com
http://www.aldec.com
43
http://www.ee.pucrs.br/~terroso