apostila de vhdl - juliano benfica - versão 3

54
 FACULDADE DE ENGENHARIA DEPARTAMENTO DE ENGENHARIA EL ´ ETRICA LINGUAGEM DE DESCRI ¸ C ˜ AO DE HARDWARE VHDL PROF. JULIANO D’ORNELAS BENFICA Porto Alegre 2009

Upload: leonardo-f-soares

Post on 21-Jul-2015

71 views

Category:

Documents


1 download

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