apostila de vhdl - juliano benfica - versão 3
TRANSCRIPT
FACULDADE DE ENGENHARIA DEPARTAMENTO DE ENGENHARIA ELETRICA
LINGUAGEM DE DESCRICAO DE HARDWARE
VHDLPROF. JULIANO DORNELAS BENFICA
Porto Alegre 2009
Sumrio a
1 Introduo ca 1.1 1.2 1.3 O que VHDL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e O que Signica VHDL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vantagens e Desvantagens . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 5 5 5 7 8 8 9
2 Estrutura de um Programa em VHDL 2.1 ENTITY (Entidade) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 2.1.2 2.1.3 Tipos de Portas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de Sinais . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Intervalos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 11
3 Tipos de Dados 3.1
Constantes e Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 a 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 a Sinais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Exemplos de Atribuioes . . . . . . . . . . . . . . . . . . . . . . . . 13 c Tipo Escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Tipo Inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Tipo Ponto Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . 15 Tipos F sicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Tipo Enumeraao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 c
3.1.10 Tipos Compostos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.11 Cometrio em VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . 21 a 4 Operadores e Expresses o 4.1 22
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 Operadores Lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 o Operadores Numricos . . . . . . . . . . . . . . . . . . . . . . . . . 23 e Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . 24 Operadores de Deslocamento . . . . . . . . . . . . . . . . . . . . . . 25 Operadores de Concatenaao . . . . . . . . . . . . . . . . . . . . . . 27 c
4.2
Representao de Nmeros e Caracteres . . . . . . . . . . . . . . . . . . . 27 ca u 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 Nmeros Inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 u Nmeros Reais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 u Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Strings de Bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 31
5 Estruturas e Comandos em VHDL 5.1 5.2 5.3 5.4 5.5 5.6
Comando IF-THEN-ELSIF-ELSE . . . . . . . . . . . . . . . . . . . . . . . 31 Comando WAIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Comando CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Comando WHILE-LOOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Comando WHILE-FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Comando EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.6.1 Estrutura Loop com Sa Forada por Exit . . . . . . . . . . . . . 38 da c
5.7
Comando NEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.7.1
Estrutura Loop com Rein Forado por Next . . . . . . . . . . . 40 cio c 42
6 Funoes e Procedimentos c 6.1 6.2
Funoes em VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 c Procedimentos em VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.2.1 6.2.2 Procedimentos com Parmetros em VHDL . . . . . . . . . . . . . . 45 a Procedimentos com Parmetros e Retornos em VHDL . . . . . . . . 47 a 50
7 Converso de Tipos a 7.1 7.2 7.3 7.4 7.5
STD LOGIC para BIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 STD LOGIC VECTOR para BIT VECTOR . . . . . . . . . . . . . . . . . 50 BIT VECTOR para STD LOGIC VECTOR . . . . . . . . . . . . . . . . . 51 PARA INTEGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 PARA STD LOGIC VECTOR . . . . . . . . . . . . . . . . . . . . . . . . 52 54
8 Bibliograa
5
1
Introduo ca
1.1
O que VHDL? e
VHDL uma forma de se descrever, atravs de um programa, o comportamento de e e um circuito ou componente digital.
1.2
O que Signica VHDL?
Very High Speed Integrated Circuit Hardware Decription Language Linguagem de Descrio de Hardware com nfase em Circuitos ca e Integrados de altssima velocidade. 1.3 Vantagens e Desvantagens
Vantagens de se utilizar VHDL: Projeto independente da tecnologia; Recongurao parcial e dinamica; ca
6
Intercambio de projetos entre grupos de pesquisa; Reduz tempo de projeto; Aumento da performance; Fabricao direta de um circuito integrado. ca Desvantagens de se utilizar VHDL: Hardware gerado menos otimizado. e
7
2
Estrutura de um Programa em VHDL
A estrutura de um programa VHDL, baseia-se em 4 blocos: PACKAGE Onde sao declarados as constantes, tipos de da dos, sub-programas; ENTITY Onde sao declarados os pinos de entrada e sada; ARCHITECTURE Onde sao denidas as implementaes co do projeto; CONFIGURATION Onde sao denidas as arquiteturas que serao utilizadas. Abaixo esta representado a estrutura de um programa descrito em VHDL:
8
Figura 1: Estrutura de um Programa em VHDL
2.12.1.1
ENTITY (Entidade)Tipos de Portas:
IN - Porta de entrada. No pode receber atribuio de valor dentro a cado programa; OUT - Porta de sa da. No pode ser utilizado como entrada para a outro circuito; BUFFER - Porta de sa que pode ser atualizada por mais de uma da fonte; LINKAGE - O valor da porta pode ser lido e atualizado.
Exemplo:
9
Entity is port ( sinal_controle : in ; parcela_1 : in ; parcela_2 : out ); end ;
2.1.2
Tipos de Sinais
=> bit, bit vector, std logic, std logic vector, boolean, real. BIT - Assume valor 0 ou 1. Ex: x : in bit; BIT VECTOR - vetor de bits. Ex: x : in bit vector(7 downto 0); ou x : in bit vector(0 to 7); STD LOGIC - Assume os valores: U: No inicializado. a X: Sem valor determinado (Dont Care). 0: N lgico 0. vel o 1: N lgico 1. vel o Z: Alta Impedncia (TRI-STATE). a W: Sinal fraco, no pode-se armar se deve ser 0 ou 1. a
10
L: Sinal fraco que provavelmente ir para 0. a H: Sinal fraco que provavelmente ir para 1. a -: Dont care. STD LOGIC VECTOR - Vetor de bits. Ex: x : in std logic vector(7 downto 0); Integer - Assume valores inteiros decimais. Ex: x : integer range 0 to 100; Boolean - Assume valores true ou false (verdadeiro ou falso). Ex: x : out boolean; Real - Assume valores decimais em ponto utuante, sempre com ponto decimal. Ex.: -3.2, 4.56, 6.0, -2.3E+2.
2.1.3
Intervalos
Permite determinar um intervalo de utilizao dentro de um ca determinado tipo. range to range downto
11
3
Tipos de Dados
3.1
Constantes e Variveis a
Ambos os tipos constantes e variaveis devem ser denidas antes de serem utilizadas na descrio VHDL. Os elementos do tipo conca stante nao podem ser sobrescritos, enquanto que os do tipo variavel podem ser alterados a qualquer momento.3.1.1 Constantes
A declarao de uma constante feita atravs do uso da palavraca e e chave constant, como nos exemplos: constant valor de pi : real := 3.141592653; constant ativado : bit := 1; constant atraso : time := 5ns;3.1.2 Variveis a
A declarao de variaveis segue a mesma estrutura, utilizando ca a palavra-chave variable. Uma variavel pode ser iniciada com
12
algum valor prvio na sua declarao, o qual ira manter at que e ca e seja feita a primeira escrita. OBS: Uma variable pode ser considerada como uma varivel local, ou seja, s pode ser acessado por um a o processo local. E deve ser declarada entre o Process e o Begin A seguir, alguns exemplos: variable numero de contagens : integer := 50; variable liga saida1 : bit; (sem inicializao) ca variable liga saida1 : bit:=0; (com inicializao) ca variable tempo medida : time := 0ns; As atribuies em VHDL para constantes e variaveis sao feitas co com o operador :=3.1.3 Sinais
Um sinal (signal) utilizado para interligao de blocos em e ca VHDL, funcionando de maneira similar a uma variavel. O sinal traz porm a capacidade de permitir a ligao (ao ser ligado a uma e ca porta de entrada e sada) ou troca de valores (quando opera com variaveis internas) entre blocos funcionais distintos. As atribuies de sinais em VHDL feita normalmente com o co e
13
operador 0, 5 =>0, 6 =>1,7 =>1); variable display2: 7 segm := ( 1 =>1, 2 to 5 => 0; 6 to 7 =>1); variable display3: 7 segm := ( 1 | 6 | 7 => 1, 2 to 5 => 0); variable display4: 7 segm := ( 1 | 6 | 7 => 1, others => 0);3.1.11 Cometrio em VHDL a
O comentario em VHDL dado por - - na frente do comentario. e
22
4
Operadores e Expresses o
4.14.1.1
OperadoresOperadores Lgicos o
Figura 2: Tabela de Operadores Lgicos em VHDL. o
23
4.1.2
Operadores Numricos e
Figura 3: Tabela de Operadores Numricos em VHDL. e
Exemplos de uso dos operadores numricos: e
24
Figura 4: Tabela de Operadores Numricos em VHDL. e
4.1.3
Operadores Relacionais
Figura 5: Tabela de Operadores Relacionais em VHDL.
25
4.1.4
Operadores de Deslocamento
Figura 6: Tabela de Operadores de Deslocamento em VHDL.
Exemplos: sll - shift left logical 01101001 => 11010010 (acrescenta 0 no bit - sign.) srl - shift right logical 01101001 => 00110100 (acrescenta 0 no bit + sign.) sla - shift left arithmetic 01101001 => 11010011 (repete o bit sign.) sra - shift right arithmetic 01101001 => 00110100 (repete o bit + sign.) rol - rotate left logical 01101001 => 11010010 (desloca todos bits para esq.) ror - rotate right logical 01101001 => 10110100 (desloca todos
26
bits para dir.)
27
4.1.5
Operadores de Concatenao ca
Esta operao consiste em criar um novo vetor a partir de dois ca vetores ja 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 saida when "100" => saida