Escolar Documentos
Profissional Documentos
Cultura Documentos
Gustavo G. Parma
Revisao 1.0 - Julio C. D. de Melo
Assunto: Introducao `a VHDL.
Objetivos: O aluno devera ser capaz de compreender os conceitos basicos de VHDL.
Introduc
ao Te
orica
A linguagem VHDL acronimo em ingles para VHSIC (Very High Speed Integrated Circuits) Hardware
Description Language, foi desenvolvido como um padrao de linguagem de programacao que descreve a
estrutura e o funcionamento de circuitos integrados digitais. Sendo um padrao desenvolvido pelo IEEE,
a cada cinco anos e feita uma revisao do assunto podendo haver modificacoes no padrao inicialmente
proposto.
A utilizacao do VHDL possibilita o desenvolvimento metodologico de sistemas complexos. Inicialmente ele permite a descricao do sistema em partes, ou seja, ele permite a decomposicao de um grande
sistema em subsistemas indicando como estes subsistemas estao conectados. Em segundo lugar, ele
permite a utilizacao de formas padroes de programacao no desenvolvimento de um sistema digital e,
como conseq
uencia, ele permite a simulacao do sistema digital antes de sua implementacao. Alem
disto, por ser uma linguagem padrao de programacao de circuitos digitais, o codigo VHDL e desenvolvido independentemente do CI a ser utilizado permitindo, desta forma, uma grande flexibilidade
no instante da implementacao do sistema.
Por se tratar de uma linguagem de programacao, VHDL segue alguns preceitos basicos de um
linguagem estruturada.
Em VHDL um elemento que executa uma funcao digital qualquer e chamado de entidade (entity)
e os pinos de entrada ou sada deste componente estao listados na secao de portas (port). A primeira
etapa no desenvolvimento de um sistema digital utilizando VHDL e a definicao da entidade e seus
pinos de entrada e sada, que funciona como a interface entre o que o componente realmente faz e o
mundo exterior a ele. A declaracao utiliza o seguinte formato:
entity nome-do-elemento is
port (NPI1,NPI2,NPI3 : in tipo-variavel;
NPI4,NPI5 : in tipo-variavel;
NPO1,NPO2 : out tipo-variavel;
NPO3,NPO4 : out tipo-variavel);
end nome-do-elemento;
onde:
NPI1, NPI2, NPI3, NPI4 e NPI5 sao os nomes dos sinais de entrada;
NPO1, NPO2, NPO3 e NPO4 sao os nomes dos sinais de sada;
As palavras em negrito sao palavras reservadas, nao podendo ser usadas em nomes criados pelo
usuario;
tipo-variavel indica qual o tipo da variavel de entrada/sada do sinal. Este tipo define quais
operacoes podem ser executadas com um determinado sinal. Os seguintes tipos sao suportados pelas
D <= 0101; - - para vetores de variaveis (BIT vector ou STD logic vector) usa-se (aspas)
Nos exemplos acima, foi usado o duplo traco (- -) para se adicionar um comentario ao programa.
Essa e a u
nica forma de comentar um programa em VHDL.
A diferenca de uma variavel signal - definida na arquitetura - para uma variavel variable - definida dentro do processo - e que a primeira tem o seu valor associado apenas quando o processo
termina, enquanto o valor da segunda e associado a cada passo de execucao do processo. Alem disto,
uma variavel signal possui escopo global, ou seja, se a arquitetura possui mais de um processo, todos
os processos tem acesso `a variavel signal, enquanto que o escopo da variavel variable e local, somente
o processo no qual ela foi definida tem acesso a ela.
variable A, B: BIT;
signal C: BIT VECTOR (4 downto 1);
A := 1; - - a variavel A possui o valor 1
B := 0; - - a variavel B possui o valor 0
C <= 1100; - - a variavel C possui o valor 1100
Em funcao do tipo da variavel, pode-se executar operacoes matematicas ou logicas com a variavel
criada. Os operadores em VHDL podem ser logicos, relacionais, unarios, soma, multiplicadores ou
outros.
1. Operadores logicos: AND, OR, NAND, NOR, XOR e NOT, podendo ser aplicados a variaveis
importante ressaltar que a precedencia de
do tipo BIT, BOOLEAN ou vetores destes tipos. E
execucao do AND e igual `a do OR, desta forma e importante separar os termos com parenteses
para que a implementacao de uma dada funcao logica nao ocorra de forma erronea.
signal A, B, C: BIT VECTOR (3 downto 0);
signal D, E, F, G: BIT VECTOR (1 downto 0);
signal H, I, J, K: BIT;
signal L, M, N, O, P: BOOLEAN;
A <= B and C;
D <= E or F or G;
H <= (I nand J) nand K;
L <= (M xor N) and (O xor P);
2. Operadores relacionais: = (igual), / = (diferente), < (menor), <= (menor ou igual), > (maior),
e >= (maior ou igual). Os dois primeiros operadores (igual e diferente) podem ser aplicados a
qualquer tipo de variavel. Os demais podem ser aplicados a variaveis com sinal ou inteiros. O
resultado de uma operacao relacional e do tipo BOOLEAN. A comparacao de vetores e feita bit
a bit, da esquerda para a direita, independentemente do n
umero de elementos em cada um dos
vetores a serem comparados. Desta forma,o vetor 101011 e menor do que o vetor 1011, porque
o quarto bit (da esquerda para a direita) do primeiro vetor e igual `a 0 e o quarto bit do segundo
vetor e igual `a 1.
signal A, B: BIT VECTOR (3 downto 0);
signal C, D: BIT VECTOR (1 downto 0);
signal E, F, G, H, I, J: BOOLEAN;
G <= (A = B);
H <= (C < D);
3
Parte Experimental :
a
1
0
1
1
1
0
1
1
1
1
1
1
SAIDAS
c d e
1 1 1
1 0 0
0 1 1
1 1 0
1 1 1
1 0 0
0 1 1
1 1 0
0 1 1
1 1 0
0 1 1
0 1 1
b
1
1
1
1
1
1
1
1
1
1
0
0
f g
VISOR
1 0
0
0 0
1
0 1
2
0 1
3
1 0
4
0 0
5
0 1
6
0 1
7
0 1
8
0 1
9
1 1 APAGADO
1 1 APAGADO
As entradas devem ser declaradas com STD LOGIC VECTOR e as sadas como STD LOGIC.
As sadas dos segmentos devem ser calculadas como equacoes logicas em funcao das entradas BCD.
Para isso, use mapas de Karnaugh para deduzir cada equacao.