Escolar Documentos
Profissional Documentos
Cultura Documentos
ELE 315
Eletrônica Digital I
Fernando Rangel
frangel@dee.ufrn.br
Introdução a VHDL
Histórico
Eletrônica digital I 2
Hierarquia e níveis de abstração
Estrutural Funcional
Algorítimo
(comportamento)
Linguagem de
Transferência entre
Registradores
Equações booleanas
“Y-chart” de
Gajski & Kahn
Equações diferenciais
Geométrico
Eletrônica digital I 3
Hierarquia e níveis de abstração
Estrutural Funcional
Comutação entre
Processador e memória
Transferência
entre Registradores
Portas
Transistores
Geométrico
Eletrônica digital I 4
Hierarquia e níveis de abstração
Estrutural Funcional
Polígonos
Grade virtual
Biblioteca de células
Planta baixa
Geométrico
Eletrônica digital I 5
Usando HDL para descrever sistemas
digitais
Interface
a
b F(a,b,c) S
c Fluxo VHDL simplificado
Arquivo Compilador
Comportamento
VHDL VHDL
S= a and b and c
Simulação
Estrutura
a S
b
c
Eletrônica digital I 6
Modelando Interfaces
• Declaração da interface : entity
– Descreve as portas de entrada e saída de um
módulo
Nome da entidade Nome das portas Modo das portas (direção)
entity and3 is
port ( a, b, c: in bit;
S : out bit ); pontuação
end entity and3;
Eletrônica digital I 7
Modelando a arquitetura
• Corpo do módulo (architecture)
– Descreve uma implementação do módulo
– Pode haver diversas implementações de uma
mesma entidade.
• Descrição comportamental: Fornece
explicitamente a relação entre as entradas e as
saídas
• Descrição estrutural: Permite construir
funções lógicas a partir da combinação de
elementos mais primitivos
Eletrônica digital I 8
Declaração da arquitetura de um módulo
Nome do
Versão/tipo da módulo
arquitetura
Eletrônica digital I 9
Identificadores válidos em VHDL
• Caracteres alfanuméricos: A‐Z, a‐z, 0‐9;
• Símbolo de sublinhado ‘_’ desde que não
seja no início ou fim de um identificador.
• Um identificador deve sempre começar por
uma letra;
• Não é permitido utilizar dois ‘_’ em
seqüência
• VHDL não distingue letras maiúsculas de
minúsculas. VHdl é idêntico a vhDL.
Eletrônica digital I 10
Operadores lógicos em VHDL
• O operador not tem maior nível de
Operador Exemplo Significado precedência
not not a a • Os demais operadores têm mesmo nível
de precedência. Neste caso a “execução”
and c and d c.d é feita segundo a ordem em que os
or u or v u+v operadores se encontram na expressão: da
esquerda para a direita. Usar parênteses;
xor x xor y x⊕ y
nand c nand d c.d •Ex.: A expressão Booleana q=a+b.c deve
nor f nor g f +g ser escrita em VHDL como q<=a or (b and
c). Caso contrário, se for escrita em VHDL
xnor x xnor u x⊕ y como q <=a or b and c, será
interpretada pelo compilador como
q=(a+b).c;
Eletrônica digital I 11
Operadores relacionais
Operador Significado
= Igual a
/= Não igual a
> Maior do que
< Menor do que
>= Maior do que ou igual a
<= Menor do que ou igual a
entity porta_ex is
port ( x, y, z: in bit;
g : out bit );
end porta_ex;
architecture concorrente of porta_ex is
begin
g <= (x nand y) or (not z);
x
end concorrente; y
g
Eletrônica digital I 14
Modelando atrasos
• Atrasos de propagação em portas:
• g <= x nand y after 10 ns;
x g
tp=10 ns
y
x g
tp=10 ns
1 ns out
y
11 ns
Eletrônica digital I 15
Modelo estrutural
• Numa descrição VHDL estrutural, um
módulo lógico é criado pela conexão de
módulos mais simples;
Funcao_G
f = X 1+ X 2
a
X1
b A1
f X 1 = a.b e X 2 = c.d
O2
c
d
A2 X2
f = a.b + c.d
Eletrônica digital I 16
Modelo estrutural em VHDL
entity Funcao_G is port ( a, b, c, d: in bit; f : out bit );
end Funcao_G;
architecture G_estrtural of Funcao_G is
--------------------------------------------
component Funcao_A is
port ( x, y: in bit; z : out bit );
end component;
--------------------------------------------
component Funcao_O is
port ( x, y: in bit; z : out bit );
end component;
--------------------------------------------
signal X1, X2 : bit
--------------------------------------------
begin
A1: Funcao_A port map (a, b, X1);
A2: Funcao_A port map (c, d, X2);
O1: Funcao_A port map (X1, X2, f);
end G_estrtural;
Eletrônica digital I 17
Modelos condicionais
entity somador is port ( a, b, ci : in bit; s, co : out bit );
end somador;
ci b a s co
0 0 0 0 0
architecture somaDtFw of somador is 0 0 1 1 0
begin
0 1 0 1 0
s <= ‘1’ when (a=‘1’ and b=‘0’ and ci= ‘0’) else 0 1 1 0 1
‘1’ when (a=‘0’ and b=‘1’ and ci= ‘0’) else 1 0 0 1 0
‘1’ when (a=‘0’ and b=‘0’ and ci= ‘1’) else 1 0 1 0 1
‘1’ when (a=‘1’ and b=‘1’ and ci= ‘1’) else 1 1 0 0 1
‘0’; 1 1 1 1 1
co <= ‘1’ when (a=‘1’ and b=‘1’ and ci= ‘0’) else
‘1’ when (a=‘1’ and b=‘0’ and ci= ‘1’) else
‘1’ when (a=‘0’ and b=‘1’ and ci= ‘1’) else s
a
‘1’ when (a=‘1’ and b=‘1’ and
‘0’;
ci= ‘1’) else b
ci
+ co
end somaDtFw;
Eletrônica digital I 18
Palavras binárias
• VHDL permite que se trabalhe com
palabras binárias usando vetores de bits,
simplificando o código final.
Bit_ops
entity bit_ops is
port ( In_a, In_b: in bit_vector(3 downto 0); In_a(3)
f1, f2 : out bit ); In_b(3)
end bit_ops; f1
architecture Basico of bit_ops is In_a(2)
begin In_b(2)
Eletrônica digital I 19
Bibliotecas
• Coleções de quantidades pré‐definidas e
procedimentos utilizados pelo compilador VHDL.
library Nome_da_biblioteca;
• Podem conter identificadores, tipos de dados,
funções, etc.
• Numa biblioteca, as informações são sepadaras em
pacotes.
– O pacote IEEE 1164 da biblioteca IEEE é um exemplo de
pacote bastanteutilizado e útil.
library ieee;
use ieee.std_logic_1164.all;
Eletrônica digital I 20
Tipos de dados padrão
• Principais tipos definidos no pacote STANDARD
interno à linguagem VHDL:
– INTEGER : operações de número com sinal. Para que
resulte numa construção sintetizável, faz‐se necessário
delimitar o número de bits.
• Ex.: contador : in integer range 0 to 15; ‐‐ 4 bits
– REAL : represntação de números em ponto flutuante.
Usado apenas para simulação, sendo não sintetizável
– BOOLEAN: FALSO or VERDADEIRO
– BIT e BIT_VECTOR:representação de bits ou palavras
binárias. Preferível usar STD_LOGIC.
Eletrônica digital I 21
Tipos de dados estendidos
• Definindos no pacote STD_LOGIC_1164
(“standard logic”)
– Um sinal do tipo STD_LOGIC pode assumir um dos
nove valores abaixo:
• ‘U’= não inicializado
• ‘X’= forçando desconhecido
• ‘0’= 0 forte (nível lógico 0)
• ‘1’= 1 forte (nível lógico 1)
• ‘Z’= alta impedância
• ‘W’= desconhecido fraco
• ‘L’= 0 fraco
• ‘H’= 1 fraco
• ‘‐’= irrelevante (don’t care)
– STD_LOGIC initializes to unknown
Eletrônica digital I 22
Usando tipos estendidos
• Adicione a biblioteca IEEE library no início do arquivo
VHDL e referencie o pacote desejado:
library ieee;
use ieee.std_logic_1164.all;
• O tipo STD_LOGIC_VECTOR type é equivalente de uma matriz de BITs
• STD_LOGIC and STD_LOGIC_VECTOR são os tipos de dados mais
comumente usados:
– Permite o uso de sinais em estado de alta‐ impedância
– Permite simular corrtamente
– Deve ser usado sempre que possível!
Eletrônica digital I 23
Usando tipos estendidos
• Exemplo de atribuição de valores
– data_bit <= ‘1’;
– data_bus <=“110011”;
– data_bus <= bitA & bitB & bitC & bitD; ‐‐ concatena bits para formar um vetor
• Bits individuais devem estar entre aspas simples (‘ b‘)
• Cadeias de bits são delimitadas por aspas duplas (“bbbb”)
• O operador de atribuição deve ser “<=“
• “&” não é o mesmo que “AND” (programadores da
linguagem C tende a fazer a confusão)
Eletrônica digital I 24
A cláusula others
• Seu código pode se tornar mais portátil e mais fácil de
atualizar com o uso de others.
– Ex.1:
• count <=“00010”;
– Ex.2:
• count <= ( 1 => ‘1’, others => ‘0’ );
Eletrônica digital I 25
Esqueleto de um arquivo VHDL
Package (optional)
Entity (design I/0) • A definição de pacotes
Architecture (design function) (package) permite
concurrent statements agrupar as definições de
Signal declaration tipos e subprogramas
Component instantiation statement
usados no arquivo
Conditional signal assignment statement • A entidade (entity)
Selected signal assignment statement
Generate statement descrever a interface do
Process statement módulo
sequential statements
Variable declaration
• A arquietura
(architecture) define
Signal assignment
Variable assignment o comportamento do
Procedure call módulo
if, case, loop, next, exit, return
Wait statement
Eletrônica digital I 26
Aprendendo VHDL
Eletrônica digital I 27