vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e...

63
VII - SEMANA DA ENGENHARIA PUCRS MINICURSO 2 DISPOSITIVO lógico PROGRAMÁVEl (FPGA) E LINGUAGEM DE DESCRIÇÃO DE HARDWARE (VHDL) ELABORADO E MINISTRADO PELO ENGENHEIRO ANDERSON ROYES TERROSO

Transcript of vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e...

Page 1: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

VII - SEMANA DA ENGENHARIA PUCRS

MINICURSO 2

DISPOSITIVO lógico PROGRAMÁVEl (FPGA) E

LINGUAGEM DE DESCRIÇÃO DE HARDWARE (VHDL)

ELABORADO E MINISTRADO PELO ENGENHEIRO ANDERSON ROYES TERROSO

PORTO ALEGRE, SETEMBRO DE 1998

Page 2: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

1 INTRODUÇÃO...............................................................................................................................

1.1 DISPOSITIVOS LÓGICOS PROGRAMÁVEIS FPGA..............................................................1.1.2 DEFINIÇÃO DE BLOCOS LÓGICOS:..............................................................................1.1.3 DEFINIÇÃO DE ROTEAMENTO.......................................................................................1.1.3 DEFINIÇÃO DE IOB´S......................................................................................................

1.2 CIRCUITOS PROGRAMÁVEIS EPLD.....................................................................................

2 LINGUAGEM DE DESCRIÇÃO DE HARDWARE (VHDL).......................................................

2.1 O QUE É VHDL?......................................................................................................................2.2 O QUE SIGNIFICA VHDL?......................................................................................................2.3 O QUE É UMA LINGUAGEM DE DESCRIÇÃO DE HARDWARE?......................................2.4 BREVE HISTÓRICO................................................................................................................

2.4.1 LINHA CRONOLÓGICA....................................................................................................2.5 VANTAGENS E DESVANTAGENS DE SE UTILIZAR VHDL...............................................

3 COMPONENTES DE UM PROJETO VHDL...............................................................................

3.1 PACKAGE (PACOTES)............................................................................................................3.2 ENTITY (ENTIDADE)..............................................................................................................

3.2.1 TIPO DE PORTAS.............................................................................................................3.2.2 TIPOS DE SINAIS..............................................................................................................

3.3 ARCHITECTURE (ARQUITETURA).......................................................................................3.3.1 ARQUITETURA SIMPLES.................................................................................................3.3.2 ARQUITETURA CONCORRENTE.....................................................................................

3.4 CONFIGURATION (CONFIGURAÇÃO).................................................................................

4 SEMÂNTICA DA LINGUAGEM VHDL.......................................................................................

4.1 ELEMENTOS LÉXICOS..........................................................................................................4.1.1 COMENTÁRIOS.................................................................................................................4.1.2 IDENTIFICADORES..........................................................................................................4.1.3 TIPOS DE DADOS NÃO LÓGICOS...................................................................................4.1.4 EXPRESSÕES E OPERADORES........................................................................................

5 COMANDOS SEQÜENCIAIS........................................................................................................

5.1 ATRIBUIÇÃO DE VARIÁVEIS...............................................................................................5.2 ATRIBUIÇÃO DE SINAIS.......................................................................................................5.3 COMANDO WAIT....................................................................................................................5.4 COMANDO IF THEN ELSE.....................................................................................................5.5 COMANDO LOOP FOR - WHILE............................................................................................5.6 COMANDO NEXT...................................................................................................................5.7 COMANDO EXIT.....................................................................................................................5.8 COMANDO CASE....................................................................................................................5.9 COMANDO NULL...................................................................................................................5.10 COMANDO RETURN............................................................................................................

6 ESPECIFICANDO A ESTRUTURA DE UM SISTEMA...............................................................

7 ALGUNS EXEMPLOS DE IMPLEMENTAÇÕES EM VHDL....................................................

8 BIBLIOGRAFIA.............................................................................................................................

Page 3: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

1 INTRODUÇÃO

O rápido desenvolvimento dos recursos de concepção de circuitos

integrados, tanto na área de processos quanto na área de CAD, tornou

possível o aparecimento de dispositivos com Lógica Programável. Tais

dispositivos permitem aos usuários implementar circuitos complexos sem a

necessidade do uso de onerosos recursos de fundição em sílicio.

A primeira utilização 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 Lógica Programável tornam-se

cada vez mais densos e rápido, o processo de concepção de projetos

eletrônicos 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 lógica programável, tais

circuitos passam a ser utilizados em projetos industriais como substituto dos

circuitos ASIC (Application Specific Integrated Circuits).

1.1 DISPOSITIVOS LÓGICOS PROGRAMÁVEIS FPGA

FPGA (Field Programmable Gate Array) são circuitos programáveis

compostos por um conjunto de células lógicas ou blocos lógicos alocados

em forma de uma matriz. Em geral, a funcionalidade destes blocos assim

como o seu roteamento, são configuráveis por software. A palavra Field

indica que a configuração do circuito pode ser feita pelo usuário final sem a

necessidade da utilização de recursos de foundries. Na Figura 1.1, está

demonstrado a estrutura de uma FPGA.

Page 4: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

FIGURA 1.1: A estrutura de uma FPGA.

1.1.2 DEFINIÇÃO DE BLOCOS LÓGICOS:

As funções lógicas são implementadas no interior dos Blocos Lógicos.

Em algumas arquiteturas os Blocos Lógicos possuem recursos seqüenciais

tais como flip-flop ou registradores. O fabricante Xilinx chama seu Bloco

Lógico de CLB (Configurable Logic Block), conforme a Figura 1.2. Enquanto

que a Actel usa o termo LM (Logic Modules), já a Altera utiliza o termo LE

(Logic Element) para as séries 8000 e 10000 e Macrocell para as séries

5000, 7000 e 9000.

Page 5: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

FIGURA 1.2: A estrutura de uma FPGA.

1.1.3 DEFINIÇÃO DE ROTEAMENTO

A interconexão entre os blocos é feita através de uma rede de duas

camadas de metal. A conexões físicas entre os fios são feitas ora com

transistores de passagem controlados por bits de memória (PIP) ora com

chaves de interconexão (Switch Matrix).

Os recursos de roteamento da série XC3000 da Xilinx possuem:

· Conexões Globais: formam uma rede de interconexão em linha e

colunas de cinco fios de metal cada, que se ligam através de

chaves de interconexão. Esta rede circunda os blocos lógicos

(CLB´s) e os blocos de E/S (IOB´s);· Matrizes de Conexão (Switch Matrix): são chaves de

interconexão que permitem o roteamento entre os Blocos

Lógicos através das Conexões Globais (Figura 1.3). Estas

conexões são programáveis na fase de roteamento automático,

executada pelo software de projeto do fabricante ou

manualmente com o uso de uma ferramenta de software

chamada Edinet.

Page 6: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

CLB

SB

SBSB

SB 1 2

3

4

56

7

8

Switch BoxFIGURA 1.3:Representação de um Switch Box.

· Conexões Diretas: são conexões entre CLB´s vizinhos e permitem

conectar blocos com menor atraso, pois não utilizam os recursos

globais de roteamento.

· Linhas Longas: são conexões que atravessam todo o circuito sem

passar pelas switch matrix e são utilizadas para conectar sinais

longos e com restrições de skew entre múltiplos destinos (Figura

1.4)

Page 7: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

FIGURA 1.4: Roteamento de uma FPGA.

1.1.3 DEFINIÇÃO DE IOB´S

Os blocos de E/S possuem buffer tristate e um flip-flop para os sinais

da saída. O sinal de saída pode ser invertido por programa assim como o

sinal de controle do tristate (Figura 1.5)

Page 8: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

FIGURA 1.5: Representação de um IOB da família XC 3000 da XILINX

1.2 CIRCUITOS PROGRAMÁVEIS EPLD

EPLD (EPROM Programmable Logic Devices) são componentes que

possuem transistores EPROM para possibilitar sua programação. Os

transistores EPROM são usados para forçar valores nas entradas dos blocos

lógicos, ou seja, enquanto eles não são programados em seu estado OFF, a

word line pode forçar 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.

Page 9: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

2 LINGUAGEM DE DESCRIÇÃO DE HARDWARE (VHDL)

2.1 O QUE É VHDL?

VHDL é uma forma de se descrever, através de um programa, o comportamento de um circuito ou componente digital.

2.2 O QUE SIGNIFICA VHDL?

Very Hight Speed Integrated CircuitHardwareDescriptionLanguage

Linguagem de Descrição de Hardware com ênfase em Circuitos Integrados de altíssima velocidade.

2.3 O QUE É UMA LINGUAGEM DE DESCRIÇÃO DE HARDWARE?

Uma linguagem de descrição de hardware descreve o que um sistema faz e como. Esta descrição é um modelo do sistema hardware, que será executado em um software chamado simulador. Um sistema descrito em linguagem de hardware pode ser implementado em um dispositivo programável (FPGA - Field Program Gate Array), permitindo assim o uso em campo do seu sistema, tendo a grande vantagem da alteração do código a qualquer momento.

2.4 BREVE HISTÓRICO

A idéia da criação de uma linguagem de descrição de hardware partiu do Departamento de Defesa dos Estados Unidos da América (DoD). As forças armadas americanas, compravam grande quantidade de placas de circuitos impressos, sendo que muitas delas compostas de circuitos integrados de aplicação específica (ASIC - Application Specific Integrated Circuits). Como era comum, empresas da área de eletrônica, mudarem de área ou trocar de ramo, necessitava-se garantir a reposição das peças durante a vida

Page 10: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

útil das placas, com isso o DoD iniciou o desenvolvimento de uma linguagem padrão de descrição de hardware.

Page 11: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

2.4.1 LINHA CRONOLÓGICA

1968: foram desenvolvidas as primeiras linguagens de descrição de hardware, porém em 1970 tinha-se inúmeras linguagens com sintaxe e semântica incompatíveis;

1973: surge o primeiro esforço de padronização da linguagem, comandado pelo projeto CONLAN (CONsensus LANguage), cujo o objetivo principal era: definir formalmente uma linguagem de multi-nível com sintaxe única e semântica igual. Paralelamente, iniciou-se outro projeto financiado pelo DoD cujo o objetivo era criar uma linguagem de programação.

1983: em janeiro de 1983, foi publicado o relatório final do projeto CONLAN. Neste mesmo ano, também foi publicado o relatório final do projeto DoD, que deu origem a linguagem ADA. Em março de 83, o DoD começou o programa VHSIC, afim de melhorar a tecnologia de concepção, engenharia e construção nos EUA. Participaram deste projeto a IBM, Intermetrics e Texas Instruments.

1986: a Intermetrics desenvolveu um compilador e um simulador. Além disso foi criado um grupo de padronização da IEEE para VHDL.

1988: primeiros softwares são comercializados.

1991: recomeçou-se um novo processo de padronização, cujo o objetivo era a coleta e análise de requisitos, definição dos objetivos e a especificação das modificações à linguagem.

1992: as modificações propostas foram avaliadas e votadas.

1993: um novo padrão é publicado, chamado VHDL-93, padronizado IEEE Std 1164-1993.

1997: em dezembro de 97 foi publicado o manual de referência da linguagem VHDL.

Page 12: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

2.5 VANTAGENS E DESVANTAGENS DE SE UTILIZAR VHDL

A descrição de um sistema em VHDL apresenta inúmeras vantagens, tais como:

· Intercâmbio de projetos entre grupos de pesquisa sem a necessidade de alteração;

· Permite ao projetista considerar no seu projeto os delay´s comuns aos circuitos digitais;

· A linguagem independe da tecnologia atual, ou seja, você pode desenvolver um sistema hoje e implementá-lo depois;

· Os projetos são fáceis de serem modificados;· O custo de produção de um circuito dedicado é elevado, enquanto que

usando VHDL e Dispositivos Programáveis, isto passa a ser muito menor;

· Reduz consideravelmente o tempo de projeto e implementação.

Quanto as desvantagens, apenas uma é relevante:

· VHDL não gera um hardware otimizado;

Page 13: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

3 COMPONENTES DE UM PROJETO VHDL

A estrutura de um programa VHDL, baseia-se em 4 blocos:

PACKAGEENTITY

ARCHITECTURECONFIGURATION

· PACKAGE são declarados as constantes, tipos de dados, sub-programas;· ENTITY declaração dos pinos de entrada e saída;· ARCHITECTURE define as implementações do projeto;· CONFIGURATION define as arquiteturas que serão utilizadas.

Abaixo está representado a estrutura de um programa descrito em

VHDL.

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.all;

PACKAGE(BIBLIOTECAS)

ENTITY exemplo ISPORT (

< descrição dos pinos de entrada e saída >

);END exemplo;

ENTITY(PINOS DE I/O)

ARCHITECTURE teste OF exemplo ISBEGIN

PROCESS( <pinos de entrada e signal > )

BEGIN

< descrição do circuito integrado >

END PROCESS;END teste;

ARCHITECTURE(ARQUITETURA)

Page 14: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.all;entity placa isport (

a : in bit_vector( 6 downto 0);b : out bit_vector( 6 downto 0)

);end placa;architecture TTL of placa issignal pino_1 bit;signal pino_2 bit;signal pino_3 bit;signal pino_4 bit;

beginCI_X : process( a )begin

<descrição do processo>end process CI_Y;

CI_Y : process( a )begin

<descrição do processo>end process CI_Z;

end TTL;

FIGURA 2.1: Apresentação de um programa em VHDL e o sua representação em hardware.

Page 15: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

3.1 PACKAGE (PACOTES)

Os pacotes (biblioteca) contém uma coleção de elementos incluindo descrição do tipos de dados (relacione com os includes da Linguagem C).

Pacotes usados normalmente:IEEE.std_logic_arith – funções aritméticasIEEE.std_logic_signed – funções aritméticas com sinalIEEE.std_logic_unsigned – funções aritméticas sem sinalIEEE.std_logic_1164 – std_logic e funções relacionadasALTERA.maxplus2 – declaração de todas as macro-funções e mega-funções.

Como utilizá-los:

LIBRARY <nome_da_biblioteca> e/ou

USE <nome_da_biblioteca>.all

OBS. 1: .all significa que todos os elementos da bibliotecas devem ser utilizados, caso não seja acrescentado .all deve-se especificar os elementos que serão utilizados.

REGRA GERAL => COLOQUE SEMPRE .all

Page 16: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

3.2 ENTITY (ENTIDADE)

3.2.1 TIPO DE PORTAS

IN = porta de entrada;

OBS.: não pode receber atribuição de valor dentro do programa.

OUT = porta de saída;

OBS.: não pode ser utilizado como entrada para outro circuito.

INOUT = porta de entrada e saída;

BUFFER = porta de saída que pode ser atualizada por mais de uma fonte;

LINKAGE = o valor da porta pode ser lido e atualizado.EX.: Entity <nome> isport ( 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_logicstd_logic_vector vetor de bits. x : in std_logic_vector(7 downto 0); Boolean assume valores true ou false (verdadeiro ou falso)Real

Page 17: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

3.3 ARCHITECTURE (ARQUITETURA)

Arquitetura pode ser definida como sendo a(s) implementação(ões) do

projeto. Na figura 3.1, temos uma placa mãe de um PC, por exemplo, onde

está faltando o chip, considere que a interface entre o chip e o meio externo

seja idêntica. Na figura 3.2, foi colocado um chip, com toda a arquitetura do

projeto.

Figura 3.1 Figura 3.2

3.3.1 ARQUITETURA SIMPLES

A arquitetura simples contém apenas um processo, ou seja, apenas um bloco. Architecture topologia_arquitetura of teste is

begin process ( a, b)

variable temp : bit;

begin

temp := a and b; z <= temp xor a;

end process;end topologia_arquitetura;

Page 18: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

3.3.2 ARQUITETURA CONCORRENTE

A arquitetura concorrente é uma forma mais complexa de descrever um sistema, geralmente apresenta várias processos dentro de uma arquitetura.

No programa 1 e 2, temos uma arquitetura com três processos, podendo ser ou não idependentes. Estes processos são executados em paralelo, porém os processos só serão executados se algum sinal (A, B ou C) tiver seu estado alterado. Novamente tem-se um ganho de processamento.

Programa 1 Programa 2

Architecture topologia_arquitetura of teste is

begin

signal temp1 : bit;signal temp2 : bit;

processo_1 : process ( a, b, temp1 )

variable temp3 : bit;

begin

temp1 <= ‘0’; temp2 := a and b; z <= temp1 xor temp2;

end process process_1;

Page 19: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

processo_2 : process ( a, b, temp1, temp2 )

variable temp3 : bit;

begin

temp2 <= ‘1’; temp3 := a and temp1; w <= temp3 xor temp2;

end process process_2;end topologia_arquitetura;

O exemplo acima, apresenta algumas características, tais como:1. Uma arquitetura com dois processos, que serão executados 2. paralelamente;2. Os dois processos possuem variáveis com mesmo nome, mas isto não influência no processamento;

Page 20: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

3.4 CONFIGURATION (CONFIGURAÇÃO)

uma mesma entity pode ter várias arquiteturas.

Exemplo:

configuration nome_da_config of contador isfor estrutural

for all: Tflip_flop

use entity work.Tflip_flop(comp);

end for;for all: inversor

use entity work.Tflip_flop(comp);

end for;end for

end nome_da_config

Page 21: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

4 SEMÂNTICA DA LINGUAGEM VHDL

4.1 ELEMENTOS LÉXICOS

4.1.1 COMENTÁRIOS

Comentários em VHDL são iniciados por dois hífens adjacentes (--), podendo ser estendido até o final da linha.

Exemplo 1:

· -- a linha que você colocar como comentário, deverá colocar antes de · -- iniciá-la dois hífens adjacentes.

Exemplo 2:

A <= B and C; -- esta operação realiza a and de B com C e o resultado é -- colocado em A

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 válidos e inválidos.

IDENTIFICADORES VÁLIDOS

· palavras seguidas do caracter underline _ Ex.: teste_padrao, input_1_x· não é sensivel a LETRA MAIÚSCULA e minúscula Ex.: SOMA = soma

· nome com underline são diferentes de nomes sem underline. Ex.: Teste_Padrao ¹ TestePadrao

IDENTIFICADORES INVÁLIDOS

· uso de palavras reservadas da linguagem com outras finalidades identificador começando com número => 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

Page 22: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

4.1.3 TIPOS DE DADOS NÃO LÓGICOS

· BIT: assume valores ‘0’ e ‘1’, bit_vector é um conjunto de bits. Ex.: “010001”

· Boolean: assume valores true ou false· Real: sempre com ponto decimal. Ex.: -3.2, 4.56, 6.0, -2.3E+2· Inteiros: não é possível realizar conversão sobre inteiros. Ex.: 3, 546, -

349· Physical: representam uma medida física: voltagem, capacitância, tempoTipos pré-definidos: fs, ps, ns, um, ms, sec, min, hr.· Intervalos: permite determinar um intervalo de utilização dentro de um

determinado tipo.range <valor_menor> to <valor_maior>range <valor_maior> downto <valor_menor>· Array: em VHDL um array é definido como uma coleção de elementos

todos do mesmo tipo.Abaixo seguem alguns exemplos de array:

type word is array (31 downto 0) of bit;type memory is array (address) of word;type transform is array (1 to 4, 1 to 4) of real;type vector is array (integer range<>) of real;type string is array (positive range<>) of character

Ex.:type b is array (1 to 5) of character;(‘t’, ‘e’,’s’,’t’,’e’)(1 =>’t’, 5 => ‘e’, 2 => ’e’, 3 => ‘s’, 4 => ‘t’)(3 => ‘s’, 2 => ‘e’, 5 => ‘e’, others => ‘t’)

· Record: semelhante a “struct” da Linguagem C, ou seja, é uma coleção de elementos de tipos diferentes.

type instruction is record Mneumonico : String;Code : Bit_vector( 3 downto 0);;Ciclos : integer;

end record;

signal Instr1: instruction;

Instr1.Mneumonico : “or reg1, reg2”Instr1. Code : “0010”Instr1.Ciclos : 3

Page 23: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

4.1.4 EXPRESSÕES E OPERADORES

4.1.4.1 OPERADORES LÓGICOS

Os operadores lógicos são: and, or, nand, nor, xor, xnor e not.

4.1.4.2 OPERADORES NUMÉRICOS

Os operadores numéricos são: soma (+), subtração (-), multiplicação (*), divisão (/), módulo (mod), remanescente (rem - ex.: 6 rem 4 = 2), expoente (**), valor absoluto (abs).

4.1.4.3 OPERADORES RELACIONAIS

Os operadores relacionais são; igual (=), diferente (/=), menor do que (<), menor ou igual (<=), maior do que (>), maior ou igual (>=).

4.1.4.4 OPERADORES DE DESLOCAMENTO

Operadores Exemplosll - shift left logical 01101001 => 11010010 (acrescenta 0 no bit - sign.)srl - shift right logical 01101001 => 01101001 (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 bits para dir.)

4.1.4.5 OPERADOR DE CONCATENAÇÃO

Esta operação consiste em criar um novo vetor a partir de dois vetores já 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 <= (dado1(0 to 1) & dado2(2 to 5) & dado1(6 to 7));

[01010011]

Page 24: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

5 COMANDOS SEQÜENCIAIS

Nesta seção será apresentado alguns comandos sequenciais que o VHDL dispõe, são eles:

atribuição à variáveis comando nextatribuição à sinais comando exitcomando wait comando nullcomando if-then-else comando returncomando loop for- while comando case

5.1 ATRIBUIÇÃO DE VARIÁVEIS

Note que a passagem de parâmetros é realizada utilizando :=.

Interpretação do programa abaixo:Na linha 15 o bit menos significativo do vetor C receberá “um” e o outro “zero”,

Nas linhas 16 e 17 foram utilizados operadores booleanos;Nas linhas 18 e 19, utilizou-se o operador & para realizar a concatenação (vide SEMÂNTICA DA LINGUAGEM);Na linha 20, o bit menos significativo do vetor D será igual a “0” enquanto que o outro “1”;Na linha 21 o vetor W teria os seguintes valores após a operação: [1G00], onde G é o valor dele mesmo.

Na linha 22, DATA será todo preenchido com 0’s.1 architecture topologia_arquitetura of teste is2 signal A, B, J : bit_vector(1 downto 0);3 signal E, F, G : bit;4 begin56 process ( A, B, E, F, G, J)78 variable C, D, H, Y : bit_vector(1 downto 0);9 variable W, Q : bit_vector(3 downto 0);

10 variable Z : bit_vector(7 to 0);11 variable X : bit;12 variable DATA : bit_vector(31 downto 0);1314 begin15 C := “01”;16 X := E nand F;17 Y := H or J;18 Z(0 to 3) := C & D;19 Z(4 to 0) := (not A) & (A nor B);20 D := (‘1’, ‘0’);21 W := (2 downto 1 => G, 3 => ‘1’, others => ‘0’);

Page 25: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

22 DATA := (others => ‘0’);23 end process;24 end topologia_arquitetura;

A função de uma variável dentro de um processo serve para intermediar valores.OBS. 1: A variável (VARIABLE) só pode ser utilizada dentro do processo em que foi criada;OBS. 2: Ela poderá assumir os mesmo tipos descritos anteriormente;OBS. 3: Sempre que for passado algum parâmetro para uma variável, estes devem ser do mesmo tipo.OBS. 4: Note que a passagem de valores para uma variável é através de := e para pinos de saída a atribuição é feita com <=

Outro exemplo: Note que a atualização da variável é automática. Este exemplo apresenta as etapas de simulação de um programa em VHDL, acompanhe cada bloco (horizontalmente).D <= 2;process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1B = 1C = 1D = 2 E = 1

process (C, D)variable Av, Bv, Ev : integer :=0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 0B = 1 Bv = 0C = 1D = 2 E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 2B = 1 Bv = 0C = 1D = 2 E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 2B = 1 Bv = 3C = 1D = 2 E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 3B = 1 Bv = 3C = 1D = 2 E = 1 Ev = 0

process (C, D)variable Av, Bv, Ev : integer := 0;begin

Av := 2;Bv := Av + C;Av := D +1;Ev := Av * 2;A <= Av;B <= Bv;E <= Ev;

end process;A = 1 Av = 3B = 1 Bv = 3C = 1D = 2 E = 1 Ev = 6

Page 26: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

5.2 ATRIBUIÇÃO DE SINAIS

A passagem de parâmetros para sinais se dá com o uso de <=.Interpretação do programa abaixo:Na linha 11, inicialmente A vale 0, após 20ns o valor de A é alterado para 1 e após 40ns, retorna a ser 0;

Na linha 12 e linha 13, são operações lógicas;

Na linha 14, o processo é semelhante ao da linha 11, entretanto os dados agora são do tipo inteiro.

1 architecture teste of topologia_arquitetura is2 signal A, B, C : bit;3 signal D: integer;4 begin56 process ( A, B, C, D)78 variable L, M, N, Q bit;9

10 begin11 A <= ‘0’, ‘1’ after 20ns, ‘0’ after 40ns12 B <= not L;13 C <= ((L andM) xor (N nand Q));14 D <= 3, 5 after 20ns, 7 after 40ns, 9 after 60ns;1617 end process;18 end topologia_arquitetura;

OBS. 1: Note que a atribuição a um sinal é feita através de <=;OBS. 2: Houve uma atribuição ao SIGNAL dentro do processo, isto não implica em dizer que em outro processo eu possa utilizá-lo atribuindo outro valor, ou seja, ele poderá ser utilizado por outro processo, mas não poderá receber uma atribuição de valores;OBS. 3: O signal deve ser passado ao processo, como mostra o exemplo.

Page 27: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

Outro exemplo: Neste exemplo, fica bem claro a diferença entre uma variável e um sinal, ou seja, todos os sinais só serão atualizados no final do processo, enquanto que a variável é atualizada sempre que usada. Novamente, acompanhe a simulação 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;

A = 1B = 1C = 1D = 1 E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1B = 1C = 1D = 2 E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= 2B = 1C = 1D = 2 E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= 2B = 1 B <= A + CC = 1D = 2 E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= D + 1B = 1 B <= A + CC = 1D = 2 E = 1

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= D + 1B = 1 B <= A + CC = 1D = 2 E = 1 E <= A * 2;

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 1 A <= 3B = 1 B <= 2C = 1D = 2 E = 1 E <= 2;

process (C, D)begin

A <= 2;B <= A + C;A <= D +1;E <= A * 2;

end process;

A = 3 B = 2 e não 3C = 1D = 2E = 2 e não 6

Qual a diferença entre o SIGNAL e a VARIABLE?1. O signal pode ser utilizado por qualquer processo pertencente aquela

arquitetura, enquanto que a variável é interna ao processo e,2. A atualização da variável é imediata, enquanto que o signal só é

atualizado no final do processo.

Page 28: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

5.3 COMANDO WAIT

Este comando tem a finalidade de causar uma suspensão do processo declarado ou procedimento. O comando wait pode ser utilizado de quatro formas diferentes, são elas:

1 wait until <conditional>; wait until CLK’event and CLK = ‘1’;2 wait on <signal_list>; wait on a, b;3 wait for <time>; wait for 10ns;4 wait; wait;

Interpretação da tabela acima:Na linha 1, o comando wait until implica que a operação está suspensa até (until) que haja uma transição (‘event) e (and) o CLK seja igual a 1, ou seja, está aguardando uma borda de subida;

Na linha 2, o comando wait on suspende a operação até que a e b sejam igual a 1;

Na linha 3, suspende a operação por 10ns;

Na linha 4, suspende a operação.

5.4 COMANDO IF THEN ELSE

Existem inúmeras formas de se utilizar if-then-else(elsif), abaixo segue um quadro explicativo do if-then-else e ao lado dois exemplos simples. O próximo quadro apresenta um exemplo usando este comando e o comando anterior (wait).

MODELOif condição_1 then <comandos>elsif condição_2 then <comandos>else

<comandos>end if;

exemplo 1:if ( A = ‘0’) then B <= “00”;else B <= “11”;end if;

exemplo 2:if (CLK’event and CLK =’1’) then FF <= ‘0’;elsif (CLK’event and CLK =’0’) then FF <= ‘1’;elsif (J = ‘1’) and (K=’1’) then FM <= ‘1’;end if;

1 architecture topologia_arquitetura of teste is2 signal CLK : bit;3 signal SEL : bit_vector(1 downto 0);4 begin5 process6 begin7 if (SEL = “00”) then8 wait until CLK’event and CLK = ‘1’;9 elsif SEL = “01” then

Page 29: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

10 wait for 60ns;11 else12 null;13 end if;14 end process;15 end topologia_arquitetura;

-------------------------------------------------------------------------------------------------------------- * * * * * Comentários * * * * *-- O programa deve receber o nome de lab1.vhd------------------------------------------------------------------------------------------------------------

library IEEE;use ieee.std_logic_1164.all;

entity lab1 isport ( 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’ ) thensoma_total <= parcela_1 + parcela_2;

else mult_total <= parcela_1 * parcela_2;

end if;

end process;end logica;

Page 30: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

-------------------------------------------------------------------------------------------------------------- * * * * * Comentários * * * * *-- O programa deve receber o nome de lab2.vhd------------------------------------------------------------------------------------------------------------

library IEEE;use ieee.std_logic_1164.all;

entity lab2 isport ( 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’ ) thensoma_total <= parcela_1 + parcela_2;

else mult_total <= parcela_1 * parcela_2;

end if;

end process soma;

operacao_logica : process ( controle, parcela_1, parcela_2 )begin

if ( controle = ‘1’ ) thenoperacao_and <= parcela_1 and parcela_2;

else operacao_xor <= parcela_1 xor parcela_2;

end if;

end process operacao_logica;

Page 31: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

end logica;

Page 32: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

-------------------------------------------------------------------------------------------------------------- * * * * * Comentários * * * * * -- O programa deve receber o nome de lab3.vhd------------------------------------------------------------------------------------------------------------

library IEEE;use ieee.std_logic_1164.all;

entity lab3 isport ( 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’ ) thensoma_total := parcela_1 + parcela_2;

else mult_total := parcela_1 * parcela_2;

end if;

soma <= soma_total;multiplicacao <= mult_total;

end process;

end logica;

Page 33: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

5.5 COMANDO LOOP FOR - WHILE

<label opcional>: for <parâmetros> in <valor_final> loop<seqüência de comandos>

end loop <label opcional>;

OBS.: O PARÂMETRO NÃO PODE TER SEU VALOR ALTERADO EM HIPÓTESE ALGUMA DENTRO DO LOOP FOR

O exemplo abaixo, apresenta de que forma pode ser utilizado o comando LOOP-FOR.

1 process (A)23 begin4 variable Z : bit_vector( 3 downto 0);5 A <= 2;6 Z := “0000”;7 for i in 0 to 3 loop8 if(A = i) then9 Z(i) := ‘1’;

10 end if;11 end loop;12 end process;

Note que este loop será realizado 4 vezes, independentemente da condição IF-THEN. O funcionamento deste programa baseia-se na atribuição de 1 na posição Z(2) quando i for igual a A, ou seja, 2..

Usando o loop While

1 2

Na figura 1, o processo aguarda até que clk seja igual a 1, enquanto isso ele fica parado. Quando o clk for igual a 1 (figura 2), então o processo

Page 34: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

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).

3 4

Quando Level for igual a 1, então ele incrementa o contador (figura 4).

5.6 COMANDO NEXT

O comando NEXT é utilizado para terminar prematuramente execução de uma iteração do tipo while, for ou um loop infinito.

process(A)begin

Z <= “0000”;for i in 0 to 3 loop

next when A/=i;Z(I) <= ‘1’;

end loop;end process;

5.7 COMANDO EXIT

exit => utilizado para terminar um while, for;exit <label_loop> => termina o laço e desloca para o label;exit <label_loop> when <condição> => termina o laço quando (when) condi- ção é satisfeita;

Page 35: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

5.8 COMANDO CASE

O comando case seleciona a execução que ocorrerá de uma lista de alternativas.

porta_programável : process (Mode, PrGIn1, PrGIn2)begin

case Mode iswhen “000” => PrGOut <= PrGIn1 and PrGIn2;when “001” => PrGOut <= PrGIn1 or PrGIn2;when “010” => PrGOut <= PrGIn1 nand PrGIn2;when “011” => PrGOut <= PrGIn1 nor PrGIn2;when “100” => PrGOut <= not PrGIn1;when “101” => PrGOut <= not PrGIn2;when others => PrGOut <= ‘0’

end case;end process porta_programavel;porta_programável : process (Mode, PrGIn1, PrGIn2)

begincase Mode is

when “000” => PrGOut <= PrGIn1 and PrGIn2;when “001” => PrGOut <= PrGIn1 or PrGIn2;when “010” => PrGOut <= PrGIn1 nand PrGIn2;when “011” => PrGOut <= PrGIn1 nor PrGIn2;when “100” => PrGOut <= not PrGIn1;when “101” => PrGOut <= not PrGIn2;when others => PrGOut <= ‘0’

end case;end process porta_programavel;porta_programável : process (Mode, PrGIn1, PrGIn2)

begincase Mode is

when “000” => PrGOut <= PrGIn1 and PrGIn2;when “001” => PrGOut <= PrGIn1 or PrGIn2;when “010” => PrGOut <= PrGIn1 nand PrGIn2;when “011” => PrGOut <= PrGIn1 nor PrGIn2;when “100” => PrGOut <= not PrGIn1;when “101” => PrGOut <= not PrGIn2;when others => PrGOut <= ‘0’

end case;

Page 36: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

end process porta_programavel;

5.9 COMANDO NULL

O comando null é frequentemente utilizado com o comando case, a última opção do case ficaria com null. Similar ao null da Linguagem C.

5.10 COMANDO RETURN

Utilizado em funções, tem a finalidade de retornar um valor.

Page 37: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

6 ESPECIFICANDO A ESTRUTURA DE UM SISTEMA

Neste capítulo será apresentado uma outra forma de detalhamento de um sistema, visando obter um sistema compacto, sem a necessidade de repetição de processos. Para isso, é necessário o uso de component e port map.

O component é exatamente a descrição 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 situação, porém ao invés de um CI completo, vamos supor que tenha somente uma porta lógica.

FIGURA 6.1: Exemplo de um sistema

Page 38: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

Note que a placa acima possui cinco blocos internos, que são 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 instrução

component componente_andport( a: in bit; b : in bit; c : out bit);

end component;

está chamando o componente and anteriormente modelado. Já a instrução

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----------------------------------------------------------- Arquivo componente_inv.vhd-- Modelo do inversor---------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity componente_inv isport(

x : in bit;y : out bit);

end componente_inv;

architecture arquitetura_inv of componente_inv is

begin y <= not x;

end arquitetura_inv;

----------------------------------------------------------- Arquivo componente_and.vhd-- Modelo da porta AND---------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity componente_and isport(

a : in bit;b : in bit;c : out bit);

end componente_and;

architecture arquitetura_and of componete_and is

begin c <= a and b;

end arquitetura_and;

Page 39: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

Programa 3-------------------------------------------------------- Arquivo componente_sistema.vhd-- Modelo da porta AND------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity componente_sistema isport(

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_andport( a: in bit; b : in bit; c : out bit);

end component;

component componente_invport( 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;

Page 40: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

7 ALGUNS EXEMPLOS DE IMPLEMENTAÇÕES EM VHDL

A seguir são apresentado três exemplos utilizando a Linguagem de Descrição de Hardware (VHDL).

O primeiro deles é a implementação de uma ULA (Unidade Lógica Aritmética). A estrutura é igual aos exemplos anteriores, na entity foi declarado 4 sinais: controle, operando_a, operando_b e saída. Então, 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 operação que será realizada, para isso foi utilizado if-then-else.

A Figura 7.1, apresenta a simulação feita no MAXPLUX II. Note que a saída está atrasada em relação ao sinal de controle, justificando o atraso inerente as portas lógicas.

------------------------------------------------------------------ Implementação de uma ULA.----------------------------------------------------------------library IEEE;use IEEE.std_logic_1164.all;

entity ula isport(

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)beginif (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);

Page 41: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

elsif (controle = "110") thensaida <= operando_a nand operando_b;

elsif (controle = "111") thensaida <= not(operando_a xor operando_b);

end if;end process;

end estrutura;

FIGURA 7.1: Simulação da ULA.

Page 42: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

O próximo exemplo apresenta a implementação de um decodificador 3x8. Como no exemplo anterior, a estrutura é a mesma, na entity são declarados os pinos de entrada e saída. Neste exemplo, utilizou-se o comando case para a implementação do decodificador. A Figura 7.2 apresenta a simulação do decodificador 3x8.

----------------------------------------------------------------------- Implementação de um decodificador 3x8.---------------------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity decodificador isport(

controle : in bit_vector(2 downto 0);saida : out bit_vector(7 downto 0));

end decodificador;

architecture estrutura of decodificador isbegin

process (controle)begin

case controle iswhen "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;

Page 43: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

Dispositvos Programáveis (FPGA) e Linguagem de Descrição de Hardware (VHDL)

FIGURA 7.2: Simulação do decodificador

Eng. Anderson Royes Terroso http://www.ee.pucrs.br/~terroso

43

Page 44: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

Dispositvos Programáveis (FPGA) e Linguagem de Descrição de Hardware (VHDL)

O próximo exemplo é bem simples, apresenta a implementação de um registrador de 12 bits, note que o processo só enviará os dados da entrada para a saída quando o clock for nível lógico um. A Figura 7.3, apresenta a simulação deste programa.

------------------------------------------------------------------------- Implementação de um registrador de 12 bits.-----------------------------------------------------------------------

library IEEE;use IEEE.std_logic_1164.all;

entity reg12 isport(

d : in bit_vector(11 downto 0);clk : in bit;q : out bit_vector(11 downto 0));

end reg12;

architecture estrutura of reg12 isbegin

processbegin

wait until clk = '1';q <= d;

end process;end estrutura;

FIGURA 7.3: Simulação do registrador de 12 bits.

Eng. Anderson Royes Terroso http://www.ee.pucrs.br/~terroso

44

Page 45: vargas/SisC/poligrafo-vhdl.doc  · Web viewminicurso 2. dispositivo lógico programÁvel (fpga) e linguagem de descriÇÃo de hardware (vhdl) elaborado e ministrado pelo . engenheiro

Dispositvos Programáveis (FPGA) e Linguagem de Descrição de Hardware (VHDL)

8 BIBLIOGRAFIA

Bostock, Geoff, FPGAs and programmable LSI : a designer's handbook. Oxford : Butterworth-Heinemann, 1996. 216p.

Hachtel, Gary D. ; Somenzi, Fabio, Logic synthesis and verification algorithms. Boston : Kluwer Academic, 1996. 564p.

Brown, Stephen D. et al. Field-programmable gate arrays. Boston : Kluwer Academic, 1992. 206p.

Trimberger, Stephen M. (Ed). Field-programmable gate array technology. Boston : Kluwer Academic, 1994. 258p.

Grünbacher, Herbert ; Hartenstein, Reiner W. (Ed.).Field-programmable gate arrays : architectures and tools for rapid prototyping. Berlin : Springer, 1993. 220p.

IEEE Workshop on FPGAs for Custom Computing Machines (1993 :Napa) Proceedings. ; Buell, Duncan A. ; Pocek, Kenneth L. (Ed.).Los Alamitos, CA : IEEE Computer Society Press, 1993. 212p.

CHANG, K. C., Digital Design and Modeling with VHDL and Synthesis.IEEE Computer Society Press, 1997

AIRIAU, R. et all. VHDL du langage à la modélisation. Presses Polytechniques Universitaires Romandes, 1990.

MAX+PLUS II & VHDL, Customer Training - ALTERA.

MAX+PLUS II, Programmable Logic Development System - Getting Started. ALTERA, Version 6.0, 1995.

VHDL Reference Guide, ACTIVE-VHDL Series Book1. ALDEC, 1998.

INTERNET:

ftp://ftp.cs.adelaide.edu.au/pub/VHDLhttp://www.altera.comhttp://www.aldec.com

Eng. Anderson Royes Terroso http://www.ee.pucrs.br/~terroso

45