1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

103
1 == VHDL == V hsic H ardware D escription L anguage Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ

Transcript of 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

Page 1: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

1

== VHDL ==

Vhsic Hardware Description LanguageVersão 24/10/2003

Manuel Lois Anido - NCE/UFRJ

Page 2: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

2

BibliografiaDisponível no Help On-line de um dos ambientes a ser usado (Aldec,

Xilinx, Altera, Modelsim, Warp, etc)

Na página da Disciplina ( http://equipe.nce.ufrj.br/adriano/circlog)Cópia das Transparências do Professor (Formato Power Point)Resumo de Dicas VHDL em formato Word 97.Notas de aula sobre o uso das Ferramentas Warp e Active-HDL Sim

Livros:“Digital Design and Modeling with VHDL and Synthesis”, K.C. Chang

IEEE Computer Society - Melhor Livro - Biblioteca NCE

“The VHDL Cookbook” - Peter J. Ashenden Disponível na Web: www.ecsi.org/EARNEST/digests/VHDL_cookbook

“VHDL for Programmable Logic” - Kevin Skahill Addison Wesley Publishers, 1996 - Biblioteca NCE Vem com CD-ROM WARP da Cypress e Simulador Active-VHDL - Público

Lista de Discussão da Disciplina: [email protected] (subscrever a lista)

Page 3: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

3

VHDL

Introdução

Page 4: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

4

VHDL- Introdução VHDL :

Very high speed integrated circuit (Demanda Gov. USA, 1980,1983- Progr. VHSIC) Hardware Description Language

Linguagem de alto nível conhecida por permitir: A modelagem de projetos eletrônicos complexos (especificações).

A simulação dos modelos de componentes.

A síntese lógica, ou seja, ferramentas pegam a descrição em VHDL e geram uma lista otimizada de portas lógicas e registros que pode ser sintetizada.

Linguagem padronizada (IEEE Std 1076-1987 e 1076/93)

Para uma boa descrição (e futura síntese do circuito) em VHDL recomenda-se ter em mente a implementação em Hardware.

Page 5: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

5

VHDL - Introdução

Modelagem de circuitos eletrônicos complexos.

Linguagem de alto nível facilitando a descrição do comportamento dos modelos.

Forte nível de abstração. A possibilidade de implementar fisicamente o projeto não é necessariamente levada em conta neste nível (comportamental).

A partição em vários elementos permite dividir um modelo complexo em um número de elementos mais simples de desenvolver separadamente.

Page 6: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

6

VHDL - Introdução

Programação Programação em VHDL é semelhante à programação procedural usual, mas

com alguns conceitos novos.

A noção de atraso (delay) e ambiente de simulação são dois conceitos novos em VHDL. VHDL também suporta concorrência e netlisting de componentes, que não são comuns em linguagens de programação.

VHDL suporta concorrência usando o conceito de sentenças concorrentes rodando em tempo de simulação (este é o modo default da linguagem). Em VHDL também existem sentenças sequenciais para descrever comportamento algorítmico (especificadas dentro de um Process).

Em VHDL, hierarquia de projeto é realizada compilando componentes separadamente e instanciando-os num componente de mais alto nível.

COMPILADOR VHDL

CÓDIGO FONTE VHDL

BIBLIOTECA COMPONENT

SIMULADOR VHDL

Page 7: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

7

VHDL - Introdução

Simulação (1): VHDL possui um conjunto de instruções particularmente potente para:

Geração de estímulosCaptura de resultados.

Os modelos de comportamento (especificações) são simulados com a finalidade de verificar sua coerência.

O conjunto de modelos de comportamento + arquivos de simulação constituem por sua vez uma especificação e um meio de verificação.

O comportamento de um modelo e de sua realização física deveriam ser idênticos.

Page 8: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

8

VHDL - Introdução Simulação (2):

A descrição de um projeto ou modelo, escrito em VHDL, é normalmente rodada num simulador VHDL para demonstrar o comportamento do sistema modelado. O fato de se ter um simulador associado é uma característica marcante de se trabalhar em VHDL.

A linguagem VHDL suporta a descrição de vetores de teste (estímulos) para executar a simulação e a captura dos resultados.

COMPILADOR VHDL

CÓDIGO FONTE VHDL

BIBLIOTECA COMPONENT

SIMULADOR VHDL

ARQUIVO ESTÍMULO

ARQUIVO SAÍDA

GRAFICADOR

MAQ. ESTADOS

Page 9: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

9

VHDL - Introdução

Síntese lógica: Converte uma descrição HDL de um bloco na descrição de um circuito

(estrutural - tal como esquemático) com portas lógicas e registros interligados, fazendo o maior número de otimizações possível. Síntese Lógica não é aplicável a blocos tais como RAMs, ROMs, PLAs e “Datapaths”, por duas razões: velocidade e área.

Usa somente uma parte reduzida do conjunto de instruções da linguagem VHDL. Numerosas construções utilizáveis em modelos ou em simulação geram uma sintetização muito ruim (consomem muitos gates) ou não são diretamente sintetizáveis.

As construções suportadas variam segundo as ferramentas.

Síntese de Alto Nível: Converte uma descrição funcional (tal como em “C” ou Pascal) numa

descrição com portas lógicas e registros (ou direto layout). É menos eficiente que síntese lógica. Compiladores de Silício.

Page 10: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

10

VHDL - Introdução

Uso de Bibliotecas: A linguagem VHDL consiste de diversas partes (assim como outras

linguagens), algumas embutidas e outras que são adicionadas usando Packages. Estas partes são listadas abaixo:

Declarações adicionais de tipos de dados no Package STANDARD. Algumas funções utilitárias de I/O no Package TEXTIO Alguns tipos de dados para simulação no Package STD_LOGIC_1164. Algumas bibliotecas e Packages de fornecedores. Bibliotecas e Packages do usuário.

Exemplos: Biblioteca IEEE : Package STD_LOGIC_1164 e Package STD_LOGIC_ARITH

Biblioteca STD : Package TEXTIO e Package STANDARD

Page 11: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

11

VHDL - Introdução Projeto Top-Down:

Uma descrição VHDL pode ser escrita em vários níveis de abstração. Algorítmico (comportamental)

Transferência de Registros

Funcional a nível de portas lógicas com atraso unitário

Nível de portas lógicas com atrasos detalhados

Na metodologia Top-Down, o projetista começa com um nível de abstração mais elevado e simula o sistema. Posteriormente, ele pode descrevê-lo em maior detalhe e voltar a simulá-lo. Um exemplo é o uso do operador “+”.

Na hora em que usamos um operador “+” (e.g. “b+c”), abstraimos-nos do tipo de somador que é usado. Poderíamos definir um operador “plus16” que definiria uma soma inteira em 16 bits (“plus16 (b,c)”).

Page 12: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

12

VHDL

VHDL

Características Marcantes

Page 13: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

13

VHDL - Características Marcantes VHDL - Estrutura

Entity - Representa algo físico (subsistema, placa, chip, etc) - Os sinais de interface de um projeto são descritos na entidade.

Architecture - Esta Unit descreve o comportamento do projeto. Package - Armazena certas especificações frequentemente usadas. Configuration - Permite selecionar uma variação de um projeto de uma biblioteca.

PackagesDeclaram constantes, tipos de dados, componentes, e subprogramas usados por diversos projetos e/ou entidades

ConfiguraçõesDefinem as configurações específicas de componentes

Especificações de EntidadesDefinem as interfaces das entidades

ArquiteturasDefinem as implementações das entidades

Arquivos VHDLProjeto VHDL

Page 14: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

14

VHDL - Características Marcantes

VHDL permite:

Definir os “ports” de entrada/saída do conjunto lógico descritivo (ENTITY).Sinais simples ou na forma de “bus”.

Definir um modelo de comportamento (ARCHITECTURE) usando o conjunto de instruções. Dependendo das ferramentas de síntese e simulação, podem ser usados os modelos comportamental, estrutural e fluxo de dados (data flow).

Unir os diferentes módulos descritos separadamente.(Gerência de hierarquía, VHDL estrutural).

Declaração da Interface

Definição Funcional

Corpo da Arquitetura

Declaração da Entidade

Entidade

Page 15: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

15

VHDL - Características Marcantes

Entidade (1) Declaração

entity somador4 is port(a, b : in std_logic_vector (3 downto 0);vem1 : in std_logic;soma: out std_logic_vector (3 downto 0);vai1 : out std_logic);end somador4;

Ports e Modos Cada sinal de I/O numa entidade é um PORT, que é

análogo a um pino num diagrama esquemático.

Modos In - Os dados fluem só p/dentro da entidade Out - Saída somente. Não há realimentação Buffer - Permite realimentação mas não há

dados bidirecionais. Inout - Para sinais bidirecionais

a [3:0]

b [3:0]

soma [3:0]

vai1

vem1

somador4

Buffer

In

In

InMODE MODE

Out

Out

Inout

Page 16: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

16

VHDL - Características Marcantes Entidade (2)

Tipos de dados para Ports Existem diversos tipos de dados, que estão disponíveis em diferentes “packages”. Alguns tipos facilitam o trabalho de simulação mas não são aplicáveis à síntese.

Os tipos do padrão IEEE 1076/93, que são os mais úteis, bem suportados por ferramentas e que são aplicáveis à síntese são:boolean, bit, bit_vector e integer.

Os tipos mais úteis e mais bem suportados do “package” IEEE std_logic_1164 para síntese são os tipos std_ulogic e std_logic e arrays destes tipos. Como os nomes indicam, “standard logic” é direcionado a ser um tipo standard usado para descrever circuitos para síntese e simulação.

Package Tipos de DadosSTD_LOGIC_1164 Std_logic, std_logic_vector, std_ulogicSTD_LOGIC_ARITH Signed, unsignedTEXTIO File, LineSTANDARD Boolean, bit, character, time, string, bit_vector, natural, positiveVHDL Language Integer, real

Page 17: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

17

VHDL - Características Marcantes

Arquitetura - Estrutura e Principais Características Toda Arquitetura está associada a uma Entidade (é uma parelha). Uma arquitetura descreve o funcionamento de uma entidade. VHDL permite descrever o funcionamento do sistema usando vários estilos de

arquitetura.

DeclaraçõesDeclara sinais para comunicar entre sentenças concorrentes e entre sentenças concorrentes e portas da interface. Nem todas as arquiteturas contém todas as construções mostradas.

BlocosSentenças concorrentes grupadas Instanciação de Componentes

Criar uma instância de outra entidade

ProcessosDefinem um novo algoritmo

Atribuições a SinaisComputa valores e atribui-os a sinais

Procedure CallsInvocam um algoritmo pré-definido

SENTENÇAS CONCORRENTES

ARQUITETURA

Page 18: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

18

VHDL - Características Marcantes Arquitetura - Descrição Comportamental

library ieee;use ieee.std_logic_1164.all;entity comparador4 is port (

a, b : in std_logic_vector (3 downto 0);igual : out std_logic );

end comparador4;

architecture behavioral of comparador4 isbegincomp: process (a, b)

beginif a=b then igual <= “1”;else igual <= “0”;end if;end process comp;

end behavioral;

COMPARADOR4

a

igual

b 4

4

1

( Descrição Algorítmica ou High-Level )

Page 19: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

19

VHDL - Características Marcantes Arquitetura - Descrição Dataflow

library ieee;use ieee.std_logic_1164.all;entity comparador4 is port (

a, b : in std_logic_vector (3 downto 0);igual : out std_logic );

end comparador4;

architecture dataflow of comparador4 isbegin igual <= ‘1’ when (a = b) else ‘0’;end dataflow;

COMPARADOR4

a

igual

b 4

4

1

A arquitetura é “dataflow” porque ela especifica como os dados serão transferidos de sinal para sinal e de entrada para saída, sem o uso de sentenças sequenciais (fora de process)

library ieee;use ieee.std_logic_1164.all;entity comparador4 is port (

a, b : in std_logic_vector (3 downto 0);igual : out std_logic );

end comparador4;

architecture dataflow of comparador4 isbegin

igual <= not(a(0) xor b(0)) and not(a(1) xor b(1)) and not(a(2) xor b(2)) and not(a(3) xor b(3));

end dataflow;

ESCREVENDO DE OUTRA FORMA :

Page 20: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

20

VHDL - Características Marcantes Arquitetura - Descrição Estrutural

library ieee;use ieee.std_logic_1164.all;entity comparador4 is port (

a, b : in std_logic_vector (3 downto 0);igual : out std_logic );

end comparador4;

use work.gatespkg.all;architecture struct of comparador4 is signal x : std_logic_vector (0 to 3);begin

u0 : xnor2 port map (a(0), b(0), x(0)); u1 : xnor2 port map (a(1), b(1), x(1)); u2 : xnor2 port map (a(2), b(2), x(2)); u3 : xnor2 port map (a(3), b(3), x(3)); u4 : and4 port map (x(0), x(1), x(2), x(3),igual);end struct;

COMPARADOR4

a

igual

b 4

4

1

a0

b0

a1

b1

a2

b2

a3

b3

a(3:0)b(3:0)

igual

COMPARADOR4

Page 21: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

21

VHDL - Características Marcantes Modelando p/ Síntese x Modelando p/ Simulação

A linguagem VHDL possui diversas construções que são mais orientadas à simulação e à verificação do que à síntese.

Entender como um simulador VHDL processa o código ajuda a clarificar a semântica de algumas sentenças VHDL e assim permitir escrever código mais adequado.

Uma codificação não adequada ao objetivo final pode levar à frustração com relação às ferramentas de síntese e de simulação.

A princípio, o código VHDL usado para simulação e para síntese do circuito deveria ser o mesmo. No entanto, pode ser desejável para uma primeira simulação do sistema usar um código VHDL que não é sintetizável, mas que permite uma rápida codificação e simulação.

Page 22: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

22

VHDL - Características Marcantes As noções de Atraso e Tempo de Simulação (1)

Embora VHDL seja similar a uma linguagem de programação procedural, ela possui diferenças marcantes. Entre estas diferenças estão a noção de atraso e o tempo de simulação (do ambiente de simulação).

Exemplo1:processo_P1 : process (a, b, c)begin x <= a and b and c;end process;Este processo executará quando ocorrer uma mudança no valor dos sinais a, b ou c. A sentença x <= a and b and c sendo avaliada no tempo de simulação corrente Tc, é escalonada para atribuição a x, um atraso delta () no tempo de simulação Tc+ . O atraso é infinitesimal e implica um (1) ciclo do simulador.

Exemplo2:processo_P2 : process (a, b, c)begin x <= a and b and c after 5 ns;end process;No exemplo 2 x é escalonado para mudar, 5ns após mudança em a, b ou c.

O exemplo 1 é sintetizável e o exemplo 2 não é (usado para simulação).

Page 23: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

23

VHDL - Características Marcantes As noções de Atraso e Tempo de

Simulação (2)Processo P1 está escalonado para executar

em Tc= 5ns

Processo_P1 : process (a, b, c)beginx <= ‘0’;if (a = b or c = ‘1’ ) then x <= ‘1’;end if;

end process Processo_P1;

NOTA: No gráfico da forma de onda, só a transição em ‘a’ dispara o processo. Embora em T=10ns, ‘c’ esteja em ‘1’, ele não dispara o processo P1 pois não transiciona. Em T=15ns c dispara mas avalia falso o if.

a

b

c

x

5ns

a

10ns 15ns

(‘0’,5ns (‘1’, 5ns + )x

Tc=5nsx<= ‘0’

Lista de Sensibilidades

Tc=5ns + x <= ‘1’

Page 24: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

24

VHDL - Características Marcantes O Modelo de Tempo

com Eventos Discretos •Inicializar Sinais, •Tempo de Simulação=0•Executa cada módulo•Se resultam transições, elas são escalonadas

INICIALIZAÇÃO

• Avança Tempo de Simulação para o primeiro tempo (mais cedo) em que haja transição escalonada.•Executa Todas as transições escalonadas para aquele tempo. Isto pode causar eventos ocorrerem -> 2o estágio

• Todos os módulos que reagem a eventos do 1o estágio são executados.•Tais módulos normalmente escalonarão mais transições em seus sinais de saída.

1o ESTÁGIO DE UM CICLO DE SIMULAÇÃO

2o ESTÁGIO DE UM CICLO DE SIMULAÇÃO

FIM

Executou Todos os módulos e há mais Transições Escalonadas

Não há mais Transições Escalonadas

Ainda não Executou Todos os Módulos e há Transições Escalonadas

Ocorreram Eventos em Sinais

Não Ocorreram Eventos em Sinais

Page 25: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

25

VHDL - Características Marcantes A Noção de Sentenças Concorrentes

Quando estão fora de um process, aatualização dos sinais de uma arquiteturafunciona de modo concorrente. A ordem deaparecimento e execução das sentenças não é importante.

entity Test_sinais is port (a, b, c, d: in bit;u, v, w, x, y, z: buffer bit);

end Test_sinais;

architecture Arquitet_1 of Test_sinais is

beginz <= not y;y <= w or x;x <= u or v;w <= u and v;v <= c or d;u <= a and b;

end Arquitet_1;

(‘1’, 0ns+)

(‘0’, 0ns)u

(‘0’, 0ns)v

(‘0’, 0ns)w

(‘0’, 0ns)x

(‘0’, 0ns)y

(‘0’, 0ns)z

INICIALIZAÇÃO

CicloSim

ns a b c d u v w x y z

1 000 +0 0 0 0 0 0 0 0 0 0 0000 +1 0 0 0 0 0 0 0 0 0 1

2 100 +0 1 0 0 0 0 0 0 0 0 13 200 +0 1 1 0 0 0 0 0 0 0 1

200 +1 1 1 0 0 1 0 0 0 0 1200 +2 1 1 0 0 1 0 0 1 0 1200 +3 1 1 0 0 1 0 0 1 1 1200 +4 1 1 0 0 1 0 0 1 1 0

4 300 +0 0 1 0 0 1 0 0 1 1 0300 +1 0 1 0 0 0 0 0 1 1 0300 +2 0 1 0 0 0 0 0 0 1 0300 +3 0 1 0 0 0 0 0 0 0 0300 +4 0 1 0 0 0 0 0 0 0 1

5 400 +0 0 0 0 0 0 0 0 0 0 1

Para mostrar que a ordem não importa, será executado do último para o primeiro

Page 26: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

26

VHDL - Características Marcantes Concorrência entre Processos e

Sequenciamento dentro de Processos

Processo_A

execução sequencial

Processo_B

execução sequencial

Processo_C

execução sequencial

Sentença_1

Sentença_2

ARQUITETURA

Dentro da Arquitetura as sentenças são concorrentes.

Os processos são concorrentes entre si e com as sentenças.

Dentro dos processos as sentenças executam sequencialmente.

NOTAS:

1 - Fora do processo os sinais mudam de estado na hora da atribuição (só esperam os delta infinitesimais da resolução das dependências para mudar de estado)

2 - Dentro do processo os sinais só mudam de estado ao final do processo e não na hora da atribuição.

Page 27: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

27

VHDL - Características Marcantes Drivers Múlltiplos e Funções de Resolução

VHDL não permite um sinal ter mais de um driver, a menos que tenha uma função de resolução associada.architecture ComErro of proj1 isbeginy <= a and b;y <= a or b;end ComErro;

function calcula_valor (a, b : X01) return X01 isbeginif a /= b then return ( ‘X’); - - se há conflito, sai ‘X’else return (a); - - ou return(b)end

SE FOSSE UM PROCESS, SERIA POSSÍVEL TERAS DUAS ATRIBUIÇÕES:processo_teste: process (a, b)

beginy <= a and b;y <= a or b;end process;

ab y

a b a AND b a OR b y0 0 0 0 00 1 0 1 X1 0 0 1 X1 1 1 1 1

Função de Resolução (Resolve o Conflito):

-- este processo sequencial é sintetizável pois o-- sintetizador não gerará circuitos AND e OR como acima.-- No instante corrente é atribuído ao sinal “y” o AND lógico de a e b.-- No instante corrente + delta é atribuído ao sinal “y” o OR de a e b.-- a atribuição AND não importa pois o último valor que fica é o OR.

ÚTIL PARA SIMULAR BARRAMENTOS

Page 28: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

28

VHDL - Características Marcantes Hierarquía

Um projeto VHDL consiste de uma hierarquía de componentes conectados, compilados de arquiteturas comportamentais, dataflow ou estruturais.

É sempre muito útil esquematizar o sistema como sendo um conjunto de componentes (arquiteturas e/ou processos) que se comunicam através de sinais.

architecture S of COMPARE issignal I: bit;

component XR2 port (X, Y : in bit; Z : out bit);end component;

component INV port (X : in bit; Z: out bit);end component;

beginU0 : XR2 port map (A, B, I);U1 : INV port map (I, C);end S; XR2 INV

U0 U1I

AB

C

COMPARE

Use work.xyz_gates.all;architecture T of COMPARE issignal I : bit;begin U0 : XR2 port map (A, B, I); U1 : INV port map (I, C);end T;

Na arquitetura “T” abaixo, as declarações dos componentes estão num “package” chamado “xyz_gates” da biblioteca “work”.

Page 29: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

29

VHDL - Características Marcantes Packages - Exemplo: Package STANDARD

Contém Declarações de Tipos Compartilhados que foi compilada separado-- tipos enumerados pré-definidos

type Boolean is (FALSE, TRUE); type BIT is (‘0’, ‘1’);type CHARACTER is ( NUL, SOH, ….., ‘A’, ‘B’, ‘C’, …,’0’, ‘1’, ‘2’, ‘3’, ...., ‘}’, DEL);

-- tipos numéricos pré-definidostype INTEGER {REAL} is range implementation_defined;

-- tipo TIME pré-definidotype TIME is range implementation_defined

unitsfs; -- femtosecondps=1000fs; -- picosecondns=1000ps; -- nanosecond- - - - - - - --

end units;-- subtipos numéricos pré-definidos

subtype NATURAL is INTEGER range 0 to INTEGER’HIGH;subtype POSITIVE is INTEGER range 1 to INTEGER’HIGH;

-- tipos array pré-definidostype STRING is array (POSITIVE range <>) of CHARACTER;type BIT_VECTOR is array (NATURAL range <>) of BIT;

Page 30: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

30

VHDL - Características Marcantes Packages - Exemplo: Package TEXTIO

-- Definições de Tipos para TEXTIOtype LINE is access STRING; -- um LINE é um ponteiro para uma stringtype TEXT is file of STRING; -- um arquivo de registros ASCII de tamanho variaveltype SIDE is (RIGHT, LEFT); -- para justificar dados de saída em campos……………..

-- Arquivos Texto Standardfile INPUT: TEXT is in “STD_INPUT”;file OUTPUT: TEXT is out “STD_OUTPUT”;

-- Rotinas de Entrada para Tipos Standardprocedure READLINE (F: in TEXT; L: out LINE);procedure READ (L:inout LINE; VALUE: out BIT_VECTOR);

-- Rotinas de Saída para Tipos Standardprocedure WRITELINE (F: out TEXT; L: in LINE);procedure WRITE (L: inout LINE; VALUE: in BIT; JUSTIFIED: in SIDE:=RIGHT;FIELD: in WIDTH :=0);…………………

-- Predicados de Posição de Arquivofunction ENDLINE (L: in LINE) return Boolean;function ENDFILE (F: in TEXT) return Boolean;

Page 31: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

31

VHDL - Características Marcantes Sentenças Concorrentes:

Executam ao mesmo tempo. Elas são: Sentença Process Sentença de Instanciação de Componente Sentença de Atribuição a Sinal Concorrente Relação: Exemplo: v <= (a and b and c) or d;

Atribuição Condicional a Sinal Usando: WHEN … ELSE Exemplo: Y <= j when state = idle else

k when state = first_state else l when others;

Atribuição Condicional a Sinal Usando: WITH…SELECT….WHEN Exemplo: with state select

X <= “0000” when st0 or st1; - - st0 “or” st1 “0010” when st2 and st3; Y when st4; Z when others;

Procedure Call Concorrente Sentença Gerar (Generate) para Instanciação de Componentes ou Equações:

Exemplo: G1: for I in 0 to 7 generate reg1: register8 port map (clock, reset, enable, data_in(I), data_out(I));

end generate G1; Sentença Block Sentença de Declarar / Reportar Concorrente (Assert / Report).

Page 32: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

32

VHDL - Características Marcantes Sentenças Sequenciais

Definem algoritmos para a execução de um subprograma ou processo. Sentença If – then - else

if (count = “00”) then a <=b;elsif (count = “10”) then a <=c;else a <=d;end if;

Sentença Case - whencase count is when “00” => a <= b; when “10” => a <= c; when others => a <= d;end case;

Sentença Exit Sentenças: For –Loop e While-Loop Sentença Next Sentença Null Sentença Procedure Call Sentença Return Sentença Wait Sentença de Atribuição a Sinal Sentença de Atribuição a Variável Sentença de Declarar / Reportar (Assert / Report)

Page 33: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

33

Elementos Primitivos de VHDL

Tipos Escalares e ArraysNomes e Objetos

ExpressõesAtributos

Page 34: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

34

VHDL

Apresentação Geral:

Informações prévias sobre a sintaxe (cont):

Separadores: os separadores utilizados são:“ ; “ (ponto e vírgula, entre duas declarações ou ao fim de uma instrução).“ , “ (vírgula, entre dois nomes de sinal dentro de uma mesma declaração).“ : “ (dentro de uma declaração entre o nome de um objeto e seu tipo).“ “ (espaço).

Espaços: o número de espaços entre duas palavras é indiferente, sempre que o mínimo seja respeitado.

Retorno carro : Uma mesma instrução ou declaração pode ser escrita em várias linhas consecutivas.Os comentários podem ser inseridos ao final das linhas sem afetar a integridade do código.

Page 35: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

35

VHDL Objetos que se podem manipular em VHDL e seus tipos:

3 classes principais de objetos: SINAIS : similares aos sinais encontrados nos esquemas

Os “ports” declarados dentro de uma entidade são sinais. Podem ser declarados como “bus”. São definidos e utilizados dentro da arquitetura, mas dentro de um processo não podem ser definidos nem usados do lado direito de uma expressão. Só podem ser usados do lado esquerdo da expressão ( exemplo: sinal_a <= (X or Y) and Z;

CONSTANTES : permitem definir valores permanentes.

VARIAVEIS : utilizadas somente dentro dos “PROCESS” (instruções sequenciais). Não podem ser definidas nem utilizadas na arquitetura fora de um processo.

Uma declaração de objeto compreende: CLASSE: sinal, constante ou variável. NOME : à escolha do criador (exceto palavras reservadas). MODO : (somente sinais) : in, out, inout, buffer. TIPO : bit, bit_vector, boolean, integer ...

Page 36: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

36

VHDL Tipos de objetos que se podem manipular em VHDL: Tipos pré-definidos principais:

BIT : pode tomar o valor ‘0’ ou ‘1’. (difere de Boolean pois não se pode tomar uma decisão(true/false) baseado num tipo bit).

BIT VECTOR : grupo de bits (bus).O valor binário de um bit_vector é definido entre aspas duplas.EXEMPLO:

signal A : bit_vector (7 downto 0);- - o bit de maior peso (MSB) esstá à esquerda (bit 7 no exemplo) begin

A <= “01011010”; - - equivalente a: A <= X”5A”; - - X “valor” indica um valor hexadecimal.

Page 37: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

37

VHDL Tipos de objetos que se podem manipular em VHDL: Tipos pré-definidos principais (cont):

BOOLEAN:Pode tomar os valores TRUE ou FALSE.

INTEGER : Valor inteiro codificado em 32 bits.(de -2.147.483.648 a + 2.147.483.647)Um inteiro pode estar limitado em sua declaração, a fim de evitar sua codificação em 32 bits. São subtipos de integer os tipos positive (1,2,3,…) e natural (0,1,2,…)

EXEMPLO:signal VALOR_A : integer range 0 to 255;beginVALOR_A <= 143 when INIT = ‘1’ else 33;

Page 38: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

38

VHDL Tipos de dados que se podem manipular em VHDL: STD_LOGIC e STD_ULOGIC: Extensões do tipo BIT,

Podem assumir 9 valores diferentes:type STD_ULOGIC is (‘U’, -- Uninitialized‘X’, -- Forcing Unknown ‘0’, -- Forcing 0‘1’, -- Forcing 1‘Z’, -- High impedance‘W’, -- Weak unknown‘L’, -- Weak 0‘H’, -- Weak 1‘-’); -- Don’t care

(Extraído do código fonte do package “STD_LOGIC_1164”.)

O tipo STD_LOGIC dá uma maior potência operacional que o tipo BIT, tanto para a simulação como para a síntese.(particularmente os valores ‘z’ e ‘-’ para a síntese).

Page 39: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

39

VHDL

Tipos de objetos que se podem manipular em VHDL:

Tipo STD_LOGIC_VECTORGrupo de objetos similar a BIT_VECTOR, mas com os 9 estados

possíveis do STD_LOGIC para cada um dos 9 bits.

Para utilizar estes tipos de dados (STD_LOGIC_VECTOR e STD_LOGIC), devemos declarar a utilização da biblioteca IEEE que contém o package particular (STD_LOGIC_1164), no cabeçalho do arquivo .vhd.

Library IEEE;use IEEE.STD_LOGIC_VECTOR_1164.all;

Page 40: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

40

VHDL Tipos de objetos que se podem manipular em VHDL: EXEMPLO de declaração da biblioteca IEEE, e do package

STD_LOGIC_1164:

library IEEE;use IEEE.STD_LOGIC_164.all;entitiy EXEMPLO is

port ( A,B : in STD_LOGIC_VECTOR(7 downto 0); SEL : in STD_LOGIC; MUX_OR : out STD_LOGIC);

end EXEMPLO; architecture ARCHI of EXEMPLO is . . . . .

Page 41: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

41

VHDL Tipos de objetos que se podem manipular em VHDL:

Tipos enumerados:Principalmente utilizados em síntese para definir os estados das

máquinas de estado.

architecture ARCHI of MACHINE is . . . . .

- - parte declaratória da arquiteturatype ESTADOS is (REPOUSO, LEITURA, ESCRITA);

signal ESTADO_ATUAL, ESTADO_SEGUINTE : ESTADOS; - - os sinais ESTADO_ATUAL e ESTADO_SEGUINTE, poderão - - tomar os valores “REPOUSO”, “LEITURA” ou “ESCRITA”. begin - - atribuições

Enumeração

de tipo !!

Page 42: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

42

VHDL Tipos de objetos que se podem manipular em VHDL: Sub-tipos:

subconjunto de um tipo predefinido ou declarado anteriormenteExemplo:

subtype BYTE is STD_LOGIC_VECTOR (7 downto 0);signal A_BUS, B_BUS, SAIDA_A, SAIDA_B, SAIDA_C : BYTE;signal ENTRADA : STD_LOGIC_VECTOR (7 downto 0);

constant K : BYTE := X”C8”;begin

SAIDA_A <= A_BUS or K;SAIDA_B <= B_BUS and X”9C”;SAIDA_C <= ENTRADA;

Byte não é palavra reservada !

Page 43: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

43

VHDL Regras de atribuição dos vetores de dados:

A ordem na qual se utiliza o vetor (bus) deve ser a mesma que na declaração do vetor.(valores crescentes ou decrescentes dos índices)

Não é necessário utilizar o vetor inteiro. (utilização de uma parte dos sinais em um bus).

A largura do bus (tamanho do vetor) deve corresponder para a maioria das operações.(exceto para comparação).

Page 44: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

44

VHDL Regras de atribuição dos vetores de dados:

architecture ARCHI of VECTOR is-- parte declaratória da arquiteturasignal D_IN, MASCARA, D_OUT : std_logic_vector (7 downto 0);signal Q_OUT : std_logic_vector (7 downto 0);constant FIXA : std_logic_vector (2 downto 0) := “010”;-- a atribuição de um valor a uma constante ou variável-- se realiza pelo símbolo “ :=“-- de forma diferente da atribuição de sinais.

Begin

D_OUT <= D_IN and not (MASCARA); --Todas as operações são de 8 bits

Q_OUT <= (D_IN(6 downto 2) and not (MASCARA (7 downto 3))) & FIXA;- - O sinal “&” é um operador chamado de concatenação

end [ARCHI];

Page 45: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

45

VHDL Atribuição de valores a um objeto segundo seu tipo:

Inteiros:signal A, S, T, U, V : integer range 0 to 255;

- - Base default : decimal s <= A + 83; - - sem aspas

Especificação da base: T <= 16#B3#; -- Base Hexadecimal U <= 10#145#; -- Base Decimal V <= A - 2#010010110# -- Base Binaria

- - equivalente a:-- V <= A - 2#0100_1010#; -- Com separadores p/ ficar + claro

Page 46: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

46

VHDL Atributos Simbólicos (1):

Um atributo provê informação sobre itens tais como entidades, arquiteturas, tipos e sinais.

Há diversos tipos pré-definidos de valor, sinal e range.

Tipos escalares tem atributos de valor, que são: ‘left, ‘right, ‘high, ‘low, e ‘length (pronuncia-se as aspas simples como “tick”). Exemplo:

type count is integer range(0 to 127);type states is (idle, decision, read, write);Entao tem-se que: count’left = 0 ; states’high = write ; states’left = idle

Um atributo importante de sinal, muito útil em simulação e síntese, é: ‘event. Ele retorna um valor booleano de “true” se um evento acabou de acontecer (transição). É utilizado principalmente para determinar se um clock transicionou. Exemplo:

if CK’event and CK=“1” -- transicionou de ‘0’ para ‘1’

Um atributo útil de range é: ‘range. Ele retorna o range de um objetoque possui limites. Exemplo:

signal word: std_logic_vector (15 downto 0);word’range = 15 downto 0

Page 47: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

47

VHDL Atributos Simbólicos(2):

Atributos de Sinais ck’event - sinal ck - Um valor booleano que indica se um evento ocorreu em ck saida’stable(T) - sinal saída e parâmetro T - Um sinal BOOLEANO que é verdade

quando o sinal de referência não tem tido eventos por um temo T. outros atributos (ver livros) .....

Atributos Relacionados a Arrays VetA’low - retorna limite inferior da faixa de índice (se faixa 0 a 511, retorna 0) VetA’high - retorna limite superior da fiaxa de índice. VetA’range - retorna o range de um tipo particular. Outros atributos (ver livros) ....

Atributos Relacionados a Tipos NomeTipo’succ(v) - retorna o próximo valor no tipo após v. NomeTipo’pred(v) - retorna o valor anterior no tipo antes de v. NomeTipo’leftof(v) - retorna o valor imediatamente à esquerda de v. outros atributos (ver livros) ....

Page 48: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

48

VHDL

Os operadores

Page 49: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

49

VHDL

Operadores frequentemente utilizados em síntese:

Operadores lógicos pré-definidos

and, or, nand, nor, xor e not (NOTA: não há operadores “|”, “&” como em C

Operam sobre todos os objetos de todas as classes (sinais, constantes, variáveis) e de tipo:

bit bit_vector std_logic, std_ulogic std_logic_vector, std_ulogic_vector boolean

Os operandos devem ser do mesmo tipo e conter o mesmo número de bits.

Page 50: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

50

VHDL

Operadores frequentemente utilizados em síntese:

Operadores lógicos pré-definidos

Exemplo de utilização (1):

entity OPE is port (A, B, C : in bit;

S : out bit);end OPE;

architecture ARCHI of OPE is begin

S <= (A and B) and not (C);end ARCHI;

Page 51: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

51

VHDL

Operadores correntemente utilizados em síntese: Operadores relacionais:

= (igual ) /= (diferente)< (menor ) <= (menor ou igual )> (maior ) >= (maior ou igual )

Operam sobre objetos do tipo: bit, bit_vector std_logic, std_logic_vector std_ulogic, std_ulogic_vector integer boolean

Os operandos devem ser do mesmo tipo, mas o número de bits comparados pode ser diferente !

Page 52: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

52

VHDL Operadores correntemente utilizados em síntese: Operadores relacionais: Comparação de vetores:

A comparação se faz comparando bit a bit os dois vetores començando pelo MSB.Os resultados podem surpreender se os vetores não são do mesmo número de bits.Exemplo:

signal REG : std_logic_vector (4 downto 0);signal CNT : std_logic_vector (3 downto 0);begin-- temos o direito de escrever :-- REG CNT

-- “01111” > “0100” -- resultado nada surpreendente-- “01111” < “1000” -- resultado surpreendente !!-- O MSB de CNT(bit3) é superior ao MSB de REG (bit 4),-- o vetor CNT é considerado como superior.

Page 53: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

53

VHDL Operadores correntemente utilizados em síntese: Operadores aritméticos:

+ (soma) - (subtração)* (multiplicação) / (divisão)** (potência) mod rem abs

Operam sobre objetos do tipo INTEGER (sem precisar declarar biblioteca aritmética especial), mas recomendamos transformar sempre os inteiros em vetores (std_logic_vector) e não usar multiplicação, nem divisão nem potência. O motivo é a baixa eficiência na implementação – gera um circuito muito grande.

Podem igualmente operar sobre STD_LOGIC_VECTOR utilizando os pacotes STD_LOGIC_UNSIGNED e STD_LOGIC_ARITH do Synopsys.

CUIDADO !!: Se declarar um vetor contador como std_logic_vector e fizer: “contador = contador + 1”, nao esquecer de declarar no início a biblioteca aritmética utilizada (use std_logic_arith.all por exemplo).

Restrições: A maioria das ferramentas de síntese só autoriza as operações de multiplicação e divisão entre CONSTANTES, ou uma CONSTANTE potência de 2 e um SINAL.

Page 54: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

54

VHDL Altera provides several packages for use with MAX+PLUS II. All packages are located in subdirectories of the \maxplus2\

vhdlnn directory, where nn is "87" or "93". These directories are created automatically during MAX+PLUS II installation. See the following table:

File: Package: Library: Contents:

maxplus2.vhd maxplus2 altera MAX+PLUS II primitives, macrofunctions, and selected megafunctions supported by VHDL.

megacore.vhd megacore altera Pre-tested megafunctions consisting of several different design files.std1164.vhd std_logic_1164 ieee Standard for describing interconnection data types for VHDL std1164b.vhd modeling, and the STD_LOGIC and STD_LOGIC_VECTOR types. MAX+PLUS II does not support the

to_x01(), is_x(), to_x01z(), or to_ux01() functions in the std_logic_1164 package.lpm_pack.vhd lpm_components lpm LPM megafunctions supported by VHDL.arith.vhd std_logic_arith ieee SIGNED and UNSIGNED types, arithmetic and comparison arithb.vhd functions for use with SIGNED and UNSIGNED types, and the conversion

functions CONV_INTEGER, CONV_SIGNED, and CONV_UNSIGNED. MAX+PLUS II does not support the shl(), shr(), ext(), or sxt() functions in the std_logic_arith package.

signed.vhd std_logic_signed ieee Functions that allow MAX+PLUS II to use STD_LOGIC_VECTOR typessignedb.vhd as if they are SIGNED types.unsigned.vhd std_logic_unsigned ieee Functions that allow MAX+PLUS II to use STD_LOGIC_VECTOR unsignedb.vhd types as if they are UNSIGNED types.

NOTE: If you use more than one of these packages in a single VHDL Design File, you must use them in the order in which they are listed in this table.

Page 55: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

55

VHDL

A Parelha Entidade - Arquitetura

Page 56: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

56

VHDL A parelha entidade / arquitetura : Entidade : Porção do código que permite definir em particular as Entradas e

Saídas.

Exemplo: Equivalência Esquemática

entitiy EXEMPLO isport ( A,B : in bit_vector(7 downto 0); SEL : in bit; MUX_OR : out bit );

end EXEMPLO;

OBS: Dar preferencialmente o mesmo nome à entidade e ao arquivo VHDL (neste caso EXEMPLO.VHD).

A [ 7 : 0 ]

MUX_OR

B [ 7 : 0 ]

SEL

SÍMBOLO EXEMPLO

Page 57: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

57

VHDL A parelha entidade / arquitetura : Arquitetura : Porção de descrição do

comportamento do dispositivo a sintetizar.

Está associada a uma entidade

architecture ARQUI of EXEMPLO is- - parte declaratóriasignal MUX_OUT : bit_vector (7 downto 0); - - sinal interno - - - - - - - - - - - - - - - - - - - - - - - - - - -- - parte operatória begin- - Sentenças concorrentes e/ou Sequencias (processos)- - o sinal “<=“ é o símbolo de atribuição de um valor a um sinal MUX_OUT <= A when SEL = ‘0’else B; MUX_OR <= ‘1’ when MUX_OUT /= “00000000” else ‘0’;end [ARQUI];

NOTA: As atribuiçõs a MUX_OUT e MUX_OR ocorrem concorrentemente !!

Declaração da Interface

Definição Funcional

Corpo da Arquitetura

Declaração da Entidade

Page 58: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

58

VHDL

A parelha entidade / arquitetura : Arquitetura : Informações complementares (1)

A parte declaratória pode conter:Declarações de sinais internos. (que nao sejam I/Os)

Declarações de componentes. (gerência da hierarquía, VHDL estrutural).

Declarações de constantes.

Declarações de tipos de objetos. (utilizados em particular para as máquinas de estado).

Declarações de sub-programas. (funções e procedimentos).

Page 59: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

59

VHDL A parelha entidade / arquitetura : Arquitetura : Informações complementares (2)

O código operatório pode conter:Atribuições concorrentes de sinais. (os resultados de síntese e de simulação são independentes da ordem de

escrita das instruções).

Atribuições sequenciais: Processos e/ou sub programas Na simulação a execução de instruções ocorre na ordem de escrita do

código (sequencialmente). Na síntese lógica, ou seja, na implementação, o mesmo comportamento é

reproduzido.

Instanciação de “caixas pretas”. (componentes). O módulo sendo desenvolvido pode chamar a outros sub-módulos (gerência

de hierarquía, VHDL estrutural).

CÓDIGO

RTL

CÓDIGO

ESTRUTURAL

Page 60: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

60

VHDL A parelha entidade / arquitetura : Solução Completa : Arquivo “EXEMPLO.vhd”

entitiy EXEMPLO isport ( A,B : in bit_vector(7 downto 0); SEL : in bit; - - O símbolo “;” se utiliza como separador entre MUX_OR : out bit - - duas declarações de sinais e não deve ); - - aparecer depois do último símbolo declarado

end [EXEMPLO];architecture ARQUI of EXEMPLO is- - parte delaratóriasignal MUX_OUT : bit_vector (7 downto 0); - - sinal interno- - parte operativabegin MUX_OUT <= A when SEL= ‘0’ else B; MUX_OR <= ‘1’ when MUX_OUT /= “00000000” else ‘0’;end [ARQUI];

Page 61: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

61

VHDL - COMPONENT O Componente é uma Estrutura que Referencia

Diretamente uma Entidade e Possibilita a Instanciação e Replicação da Mesma sem a Necessidade de Descrevê-la Novamente.

ENTITY inv IS PORT (e : IN bit;s: OUT bit);

END inv;

ARCHITECTURE inversor OF inv ISBEGIN

s<= NOT e;END inversor;

ENTITY yyy is PORT (------)

END yyy;ARQUITECTURE xxx of yyy ISsignal T : ------------COMPONENT inv IS

port (e: IN bit; s:OUT bit);END COMPONENT;BEGIN

---U1: inv PORT MAP (e=>a , s=> s1);U2: inv PORT MAP (e=> b, s=> s2);

END ARCHITECTURE xxx;

Page 62: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

62

VHDL – PACKAGE

Coleção de Tipos, Constantes, Subprogramas, agrupando Elementos Relacionados. Dividem-se em: Declaração Corpo

Corpo Pode Conter Definição de Procedimentos e Funções

Declaração:PACKAGE cpu IS

SUBTYPE byte IS bit_vector (7 DOWNTO 0);FUNCTION inc (valor: integer) RETURN integer;

END cpu;PACKAGE BODY cpu IS

FUNCTION inc (valor:integer) RETURN integer IS

VARIABLE result : integer;BEGIN

result := valor + 1;RETURN result;

END inc;END cpu;

USO:LIBRARY ieee;USE ieee.std_logic_1164.all;USE work.cpu.ALL;

ENTITY xxx IS---------

END xxx;ARCHITECTURE yyy OF xxx IS

BEGIN---------PROCESS

---------VARIABLE reg: byte;pc <= inc (pc);---------

END PROCESSEND ARCHITECTURE;

NOTA: Se não declarar o package no início, aponta-se o caminho:VARIABLE reg : work.cpu.byte;pc <= work.cpu.inc (pc);

Page 63: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

63

VHDL – Exemplo: PACKAGE e COMPONENT

ARQUIVO: meu_package.vhdlibrary ieee;use ieee.std_logic_1164.all;

package meu_package is component nor2 port(

a, b: in bit; sai: buffer bit);end component;

end meu_package;

library ieee;use ieee.std_logic_1164.all;

entity nor2 is port ( a,b: in bit;

sai: buffer bit);end nor2;

architecture meu_nor2 of nor2 isbegin sai <= a nor b;end meu_nor2;

ARQUIVO: Tst_ff_SR.vhd

library ieee;use ieee.std_logic_1164.all;use work.meu_package.all;

entity meu_ff_SR is port ( set, reset : in bit;

Q, NQ : buffer bit);end meu_ff_SR;

architecture Tst_FF_SR of meu_ff_SR isbegin CI1: nor2 port map (reset, NQ, Q); CI2: nor2 port map (Q, set, NQ);

end Tst_FF_SR;

NOTA: OBSERVAR QUE AO DECLARAR O COMPONENTE NOR2 (esquerda) TIVEMOS QUE DECLARAR NOVAMENTE AS BIBLIOTECAS UTILIZADAS – FAZE-LO PARA TODOS OS COMPONENTES !!!!!

Page 64: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

64

SUBPROGRAMA: FUNÇÕES

Funções São Usadas para Computar Valores e não Para Mudar o Valor de Objetos Associados c/Parâmetros (não mudam sinais). Parâmetros devem ser do modo IN e da classe SIGNAL ou CONSTANT.

LIBRARY ieee;USE ieee.std_logic_1164.all;

ENTITY mult4bits is port ( a, b: IN std_logic_vector (3 downto 0); s: OUT std_logic_vector (3 downto 0);END mult4bits;

ARCHITECTURE arch_mult4bits of mult4bits IS

FUNCTION deslocador (x:std_logic_vector (3 downto 0)) RETURN std_logic_vector ISVARIABLE y : std_logic_vector (3 downto 0);BEGIN for i in 3 downto 1 loop y(i) := x(i-1); end loop; y(0) := ´0´; return y;END;

FUNCTION somador4bits(a:std_logic_vector (3 downto 0);b:std_logic_vector (3 downto 0))

RETURN std_logic_vector ISVARIABLE vaium: std_logic;VARIABLE soma: std_logic_vector(3 downto 0);BEGIN vaium := ´0´; FOR i IN 0 TO 3 LOOP

soma(i) := a(i) xor b(i) xor vaium;vaium := (a(i) and b(i) ) or (b(i) and vaium) or (vaium and a(i));

END LOOP; RETURN soma;END;BEGIN -- BEGIN da ARQUITETURA PROCESS (a, b) VARIABLE ---- BEGIN

------------aux1 := deslocador (aux1);------------aux2 := somador4bits (aux1, b);------------

END PROCESS;END arch_mult4bits;

Page 65: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

65

SUBPROGRAMA: PROCEDURES

Procedures Podem Trocar os Valores de Objetos Associados c/Parâmetros Formais (podem trocar sinais de valor). Parâmetros Podem ser do modo IN, OUT e INOUT.

LIBRARY ieee;USE ieee.std_logic_1164.all;

ENTITY mult4bits is port ( a, b: IN std_logic_vector (3 downto 0); s: OUT std_logic_vector (3 downto 0);END mult4bits;

ARCHITECTURE arch_mult4bits of mult4bits IS

PROCEDURE deslocador ( SIGNAL x: IN std_logic_vector (3 downto 0); SIGNAL y: OUT std_logic_vector (3 dwonto 0)ISBEGIN for i in 3 downto 1 loop y(i) <= x(i-1); end loop; y(0) <= ´0´;END;

------------------ O SOMADOR4BITS é semelhante ao caso de

Funcao ------------------

BEGIN -- BEGIN da ARQUITETURA

------------ deslocador (ent1(3 downto 0), sai1 (3 downto 0); ------------ somador4bits (A (3 downto 0), B (3 downto 0),

SOMA (3 downto 0)); ------------

END arch_mult4bits;

Page 66: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

66

VHDL

Instruções, Sentenças e Procedures Concorrentes

Instrução When ….ElseInstrução With ….. SelectInstrução For i in ….. GenerateSentença ProcessSentença de Instanciação de ComponenteProcedure Call ConcorrenteSentença de Atribuição a Sinal ConcorrenteSentença BlockSentença de Declarar / Reportar Concorrente (Assert / Report).

Page 67: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

67

VHDL Instruções concorrentes:

As operações se efetúam ao mesmo tempo (em paralelo).

A ordem de escrita do código VHDL não afeta o resultado da síntese ou da simulação

O estilo de escrita é comparável às linguagens de programação de PALs ou Linguagens Declarativas (equações lógicas).

Exemplo de atribuições simples: (equações)

entity CONCURRENT is port (A, B, C : in bit;

S, T : out bit); end CONCURRENT;architecture ARCHI of CONCURRENT is

begin S <= (A and B) and not (C); T <= B xor C; -- a ordem da atribuição de S e de T é

indiferente.end ARCHI;

Não precisava ter este nome

Page 68: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

68

VHDL Instruções concorrentes:

Atribuição de sinais por condição: WHEN ... ELSE Sintaxe:signal_x <= valor_x when signal_y = valor_y else valor_z;

Notar que valor_z é indicado diretamente depois de “else”. (O símbolo de atribuição “<=“ é aqui implícito).

Exemplo:entity LOGICA1 is port (A, B, C : in bit;

S, T : out bit);end LOGICA1;architecture ARCHI of LOGICA1 is begin S<= A when C=‘1’ else B; -- SINTETIZA COM MUX 2:1 !!

T <= not B;end ARCHI;

As duas instruções sãoconcorrentes e geram => TBS

A

BC

1

0

MUX

Page 69: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

69

VHDL Instruções concorrentes:

Atribuição de sinais por condição: WHEN ... ELSE

entity BUFFER_BUS_TRISTATE is port (A, B : in std_logic_vector (15 downto 0);

C : in std_logic; S : out std_logic_vector (15 downto 0));

end BUFFER_BUS_TRISTATE;architecture ARCHI of BUFFER_BUS_TRISTATE is begin

S <= A when C = ‘1’else “ZZZZZZZZZZZZZZZZ”; -- SINTETIZA COM S <= B when C = ‘0’else “ZZZZZZZZZZZZZZZZ”; -- BUFFER 3-

STATE end ARCHI;

As duas instruções sãoconcorrentes e geram =>

S[15:0]B[15:0]

A[15:0]

C

Page 70: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

70

VHDL Instruções concorrentes:

Atribuição de sinais por seleção: WITH ... SELECT Exemplo:

architecture ARCHI of SELETOR_SINAIS is begin with SEL select S <= A when “00”, -- SINTETIZA COM CIRCUITO MUX N:1

B when “01”, -- OU TAMBÉM CHAMADO SELETORC when “10”,D when others;

T <= not B;end ARCHI;

TBS

A

B

C

00

01

10

Outros casosDSEL [1:0]

Page 71: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

71

VHDL Instruções Concorrentes:

Instrução de Loop: FOR i IN ... GENERATE :Sintaxe:LABEL : for I in inteiro_a to inteiro_b generate

- - instruções concorrentesend generate;

A utilização de um LABEL é obrigatória.LABEL1 : for I in 0 to 15 generate

S(I) <= A(I) when C = ‘0’ else ‘Z’;S(I) <= B(I) when C = ‘1’ else ‘Z’;

end generate;

LABEL1 : for I in S’range generateS(I) <= A(I) when C = ‘0’else ‘Z’;S(I) <= B(I) when C = ‘1’else ‘Z’;

end generate;

RANGE é um atributo pré-definido em VHDL. Código genérico, independente da largura do bus. Portabilidade, re-uso, evolução

S[15:0]B[15:0]

A[15:0]

C

Page 72: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

72

VHDL Exercício:

C

A

B

6VAL[3:0]MIN[3:0]1

0MUX 2:1

1

0

MUX 2:1

MAX[3:0]

BUS_A[3:0]

BUS_B[3:0]

SEL_MIN

A_MIN

DISPLAY[6:0]

G

F

E

D

5

4

3

2

1

0

(Declarado em modo OUT)

(sinal interno)

Decodificador

7 segmentos

(with ... Select)

Multiplexor tri-state (for I in ... Generate)

Mux Lógicos

(when ... Else)

A

B

A < B

Comparador (when ... Else)

gf

e

d

c

b

a

DECODER

Page 73: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

73

VHDL Exercício: library ieee;

use ieee.std_logic.1164.all;entity COMPARADOR_DISPLAY is port (

-----;end COMPARADOR_DISPLAY;

architecture AQUITETURA of .... Is signal ..... Signal ..... ----- ----- VALOR1 : for I in .... generate -------- end generate; with VAL select DISPLAY <= “0000001” when x”0”,

------- “0000000” when others;

A <= ......; ------------;end ARCHI;

Page 74: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

74

VHDL

Instruções Sequenciais

Algumas Características de Processos

Page 75: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

75

VHDL Instruções Sequenciais: noção de PROCESSO

Um PROCESSO é uma parte do código onde as instruções executam em sequencia (na ordem em que são escritas), mas uma variável ou sinal só armazenará o último valor atribuído.

Uma mesma arquitetura pode conter diversos PROCESSOS.

Todos os processos executam em paralelo. (um PROCESSO é equivalente a uma instrução concorrente complexa).

O conjunto de instruções utilizáveis dentro de um processo é diferente do conjunto de instruções concorrentes.

A ordem de escrita das instruções afeta os resultados da simulação e da síntese.

Page 76: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

76

VHDL Instruções sequenciais:

As operações se efetuam em sequência. A ordem afeta os resultados de simulação e de síntese. Estilo de escrita parecido às linguagens de alto nível de informática. As instruções sequenciais se utilizam em partes específicas do código:

PROCESS ou subprogramas. Exemplo:

architecture ARCHI of SEQUENCIA is begin process begin

wait until CK’event and CK=‘1’; if ENA = ‘1’ then COUNT <= COUNT +1; end if;

end process; end ARCHI;

Page 77: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

77

VHDL Instruções sequenciais: noção de PROCESS Implementação de:

Lógica combinatória (processo combinatório). Lógica síncrona (processo síncrono). Lógica síncrona com inicialização assíncrona.

Em simulação, um process diz-se dormindo até que os sinais suscetíveis de ativá-lo troquem de estado.

Estrutura geral de um process:

[Label:] process (lista_de_sensibilidades)-- parte declaratória

-- declaração eventual de variáveisbegin -- parte operatória-- instruções sequenciais (if, case, loop ...)

end process;

Label opcional

Lista dos sinais podendo provocar uma reavaliação do valor dos sinais atribuídos no Process

Page 78: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

78

VHDL Metodologia de uso dos PROCESS em síntese:

Process (A, B, C, D)

- - process combinatório

begin

if (A=‘1’ and B=‘0’)

then ....

Process (CK)

- - process sincrono

begin

if CK’event and CK=‘1’

then

if (A=‘1’and B=‘0’

then ...

Process (CK, Reset)

- - process sincrono- - com iniciação - - assíncrona

beginif Reset =‘1’then

S <= ‘1’; T <= ‘0’; elsif CK’event and CK=‘1’ then

if (A=‘1’ and B=‘0’) then ...

D QC

S

D QC R

ResetCK

AB

CD

S

T

A

B

CD

S

T

D QC

D QC

A

B

CD

CK

S

T

U

Page 79: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

79

VHDL Incoerências de projeto de hardware

(suportadas pela linguagem VHDL)

S

T

D QC

D QC

A

B

CD

CK

D QC

S

D QC R

INITCK

AB

CD

S

T

Process (CK,A,B,C,D)

-- processo sincrono

begin

if CK’event and CK=‘1’

then

if (A=‘1’ and B=‘0’

then ...

Não podem estar na lista de sensibilidade !!

Process (CK,INIT,A,B,C,D)

- - process sincrono- - com iniciação - - assíncrona

beginif INIT =‘1’then

S <= ‘1’; T <= ‘0’; elseif CK’event and CK=‘1’ then if (A=‘1’ and B=‘0’)

then ...

Page 80: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

80

VHDL Instruções Sequenciais : Noção de PROCESS.

Processos combinatórios : Exemplo:

MUX : process (A, B, SEL) -- lista de sensibilidades-- parte declaratória não usada neste exemplobegin

if SEL = ‘0’ then SAIDA <= A;else SAIDA <= B;end if;

end process;

Os sinais tratados dentro deste tipo de process são puramente combinatórios (não se faz nenhuma referência à detecção do flanco de troca (subida ou descida) do relógio.

A lista de sensibilidades contem todos os sinais que podem causar uma atividade no processo. A parte declaratória pode conter variáveis e só será visível dentro do process em que está declarada.

Page 81: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

81

VHDL Instruções Sequenciais : Noção de PROCESS.

Processo síncrono simples : (sem iniciação assíncrona) Exemplo:

process -- sem lista de sensibilidades neste caso !!!begin

wait until (CK’event and CK=‘1’);COUNT <= COUNT + 1; -- isto só é legal se a biblioteca

-- std_logic_unsigned for declaradaend process;

O sinal COUNT (std_logic_vector) será construído por flip-flops.

Nenhum sinal tratado neste process pode ser combinatório pois estará sempre sendo analisado na subida do clock.

Não há lista de sensibilidades (Usa-se Wait ) - a única condição que provocará uma troca de estado será o flanco de subida do relógio (CK).

Page 82: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

82

VHDL Instruções Sequenciais : Noção de PROCESS.

Processos síncronos com iniciação assíncrona Exemplo:

[LABEL]: process(CK, RST) -- lista de sinsibilidadesbegin

if RST = ‘1’then COUNT <= “0000”; -- ação

assíncrona ao CKelsif (CK’event and CK=‘1’)then

COUNT <= COUNT + 1; -- ação síncrona com CK end if;end process [LABEL];

A lista de sensibilidades contém o sinal de relógio e sua iniciação assíncrona. Neste caso, a condição assíncrona tem prioridade (IF RST=‘1’) e o flanco do relógio não se leva em conta se a condição de iniciação é verdadeira.

Page 83: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

83

VHDL PROCESS e conjunto de instruções sequenciais Variáveis e sinais: Exemplo sobre os sinais:

entity SIG is port (A, B, C, CK: in std_logic;

S, T: out std_logic);end SIG;architecture ARCHI of SIG issignal TMP : std_logic; begin process begin

wait until CK’event and CK=‘1’; TMP <= A or B; -- esta linha será ignorada S <= TMP; TMP <= A and C; -- anula a atribuição precedente T <= TMP; -- ao sinal TMP.

end process;end ARCHI;

S

TD QC

D QC

A

C

CK

D QC

TMP

Page 84: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

84

VHDL PROCESS e conjunto de instruções sequenciais

Variáveis e sinais: Exemplo utilizando uma variável:

entity VARI is port (A, B, C, CK: in std_logic;

S, T: out std_logic);end VARI;architecture ARCHI of VARI isbegin process variable TMP : std_logic; begin

wait until CK’event and CK=‘1’; TMP <= A or B; -- esta linha será efetiva S <= TMP; -- para a atribuição do sinal S TMP <= A and C; -- esta o será T <= TMP; -- para a atribuição do sinal T

end process;end ARCHI;

S

T

D QC

D QC

A

C

CK

AB

Page 85: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

85

VHDL

Instruções SequenciaisSentença IfSentença CaseSentença For-LoopSentença While-LoopSentença NextSentença NullSentença Procedure CallSentença ReturnSentença WaitSentença de Atribuição a SinalSentença de Atribuição a VariávelSentença de Declarar / Reportar (Assert / Report)

Page 86: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

86

VHDLPROCESS e conjunto de instruções sequenciais

Instruções sequenciais frequentemente utlizadas

IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF;Similar à atribuição de sinais por condição.

CASE … END CASE;Similar à atribuição de sinais por seleção.

FOR … LOOP END LOOP;Similar à instrução FOR … GENERATE.

Page 87: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

87

VHDL IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF;

Exemplo:

signal A, B, C, D : std_logic_vector (7 downto 0);signal SEL : std_logic_vector (1 downto 0);signal MUX : std_logic_vector (7 downto 0);

BLABLA : process (A, B, C, D, SEL) -- rótulo BLABLA-- parte declaratória não utilizada neste exemplobeginif SEL = “00” then MUX <= A;elsif SEL = “01” then MUX <= B;elsif SEL = “10” then MUX <= C;else MUX <= D;end if;

end process;

Page 88: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

88

VHDL IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF; Mais Exemplos:

process (A, B, C, D, SEL) begin if SEL=“00” then MUX <= A; else if SEL = “01” then MUX <= B;

else if SEL = “10” then MUX <= C; else MUX <= D; end if; end if; end if;

end process;

process (A, B, C, D, SEL) begin if SEL = “00” then MUX <= A; elsif SEL = “01” then MUX <= B;

elsif SEL = “10” then MUX <= C;else MUX <= D;end if; -- Um só “end if” !!!

end process;

Page 89: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

89

VHDL IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF; Mais Exemplos:

process (A, B, C, D, SEL) begin if SEL=“00” then MUX <= A; else if SEL = “01” then MUX <= B;

else if SEL = “10” then MUX <= C; else MUX <= D; end if; end if; end if;

end process;

process (A, B, C, D, SEL) begin if SEL = “00” then MUX <= A; elsif SEL = “01” then MUX <= B;

elsif SEL = “10” then MUX <= C;else MUX <= D;end if; -- Um só “end if” !!!

end process;

Page 90: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

90

VHDL IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF;

Resultados de síntese:

CMP

=

C

“10”

SEL[1:0]

0

1

CMP

=

B

“01”

SEL[1:0]

0

1

CMP

=

A

“00”

SEL[1:0]

0

1

MUX

D

Page 91: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

91

VHDL IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF;

Exemplo 3 : Utilização do Clock_Enable dedicado (com wait until):

architecture ARCHI of SEQUENCE is begin process begin wait until CK’event and CK = ‘1’;

if ENA = ‘1’ then COUNT <= COUNT + 1; end if;

end process;end ARCHI;

-- se ENA /= ‘1’, o processo pode ser ativado pelo flanco-- do relógio, mas se a condição if ENA = ‘1’não é verdadeira-- o último valor de COUNT será conservado.-- Este estilo de escrita garante o uso do Clock_Enable-- dos flip-flops FPGAs Xilinx, e permite por isso uma-- economia substancial de elementos de lógica combinatória,-- e de aumento da frequência de funcionamento.

Utilização do Clock Enable

dedicado dos FF Xilinx

Page 92: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

92

VHDL IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF;

Exemplo 3b : Utilização do Clock_Enable dedicado (if CK’event ...):

architecture ARCHI of SEQUENCE is begin process (CK) begin

if CK’event and CK = ‘1’ then if ENABLE = ‘1’ then COUNT <= COUNT + 1; end if; end if;

end process;end ARCHI;

Utilização do Clock Enable

dedicado dos FF Xilinx

Page 93: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

93

VHDL IF … THEN … ; [ELSIF … THEN … ]; [ ELSE …]; END IF;

Cuidado com os riscos de inserção de lógica combinatória nos caminhos do relógio !

Process (CK, EC)begin if (CK’event and CK = ‘1’ and EC = ‘1’) then Q <= D; end if;end process;

QD QC

D

ECCK

Page 94: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

94

VHDL CASE ... END CASE:

Instruções que permitem revisar todos os valores possíveis de um sinal.Exemplo:

Process (A, B, C, D, SEL) begincase SEL is

when “00” => MUX <= A;when “01” => MUX <= B;when “10” => MUX <= C;when others => MUX <= D;

end case;end process;

-- When others permite citar no final todos os outros-- casos possíveis que não foram citados anteriormente-- O símbolo “=>”’é interpretado como “portanto”.

MUX

“00”, ”01”, ”10” SEL [1:0]

DC

B

A

Decodificação

de valores

others

“10”

“01”

“00”

Page 95: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

95

VHDL IF ... END IF e CASE ... END CASE:

Mistura de IF e de CASE. Exemplo:Process (FASE, AÇÃO) begin

case FASE is when “00”=> if AÇÃO = “00” then SAIDA <= “010”; STATUS <= “01”; elseif AÇÃO = “10” then SAIDA <= “011”; STATUS <= “01”; else SAIDA <= “000”; STATUS <= “00”; end if;when “01” => if AÇÃO = “00” then SAIDA <= “100”; STATUS <= “10”; else SAIDA <= “101”; STATUS <= “00”; end if; when others => SAIDA <= “000”; STATUS <= “00”;end case;

end process;

Page 96: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

96

VHDL FOR …. LOOP:

Exemplo:

Meu_For_Loop:for i in 3 downto 0 loop

if reset(i) = ‘1’thendata_out(i) := ‘0’;

end if;end loop Meu_For_Loop;

Page 97: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

97

VHDL WHILE ….. LOOP:

Exemplo:

count:= 16;Meu_While_Loop: While (count > 0) loop

count := count -1; result <= result + data_in;

end loop Meu_While_Loop;

Page 98: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

98

VHDL

Os Sub-programas

Funções e Procedimentos

Page 99: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

99

VHDL

Funções:Sub-programa podendo ser chamado uma ou varias vezes pelo

programa principal. Permite organizar o código separando as partes repetidas.

Uma função deve ser declarada antes de ser utilizada.

Necessita um ou mais parâmetros de entrada e regressa um valor.

Exemplo:

function BOOL_TO_BIT ( A: in boolean) return STD_LOGIC isbegin

if A then return ‘1’; else return ‘0’;end if;

end BOOL_TO_BIT; PALAVRA RESERVADA !!

Page 100: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

100

VHDL

Funções: As funções usam o conjunto das instruções sequenciais. Os parâmetros (entradas) da função são inteiramente genéricos. Ex:

function COISA ( ABUS: in std_logic_vector) return boolean is ... Variáveis locais podem ser declaradas As variáveis declaradas dentro de uma função são reinicializadas a cada

chamada. As funções podem ser declaradas dentro da parte declaratória da arquitetura

ou dentro de um package. Utilizadas para efetuar as conversões de dados (e.g.: std_logic_vector para

inteiro), ou operações lógicas e aritméticas diversas. Os operadores “+”, “-”, “=“, … são definidos por funções As funções podem ser redefinidas (sobrecarregadas) com o fim de, por

exemplo, serem aplicáveis a tipos de dados não previstos inicialmente. Por exemplo:

O package STD_LOGIC_UNSIGNED redefine os operadores aritméticos e relacionais para serem aplicáveis ao tipo STD_LOGIC_VECTOR.

Page 101: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

101

VHDL Funções: Exemplo de sobrecarga de funções

(operador “+” para somas entre STD_LOGIC_VECTOR e inteiros)

function “+” (A : std_logic_vector; B : integer)return std_logic_vector is

variable INT_A : integer range 0 to ((2**(A’high+1))-1);variable STD_OUT : std_logic_vector (A’range);begin

INT_A := 0;for I in A’range loop if A(I) = ‘1’ then INT_A:=INT_A + 2**I; else INT_A:=INT_A; end if; -- este loop converte o vetor para inteiro

end loop;INT_A := INT_A + B; -- soma de 2 inteirosfor J in A’reverse_range loop if INT_A rem 2 = 1 then STD_OUT(J):=‘1’; else STD_OUT(J):=‘0’; end if; INT_A := INT_A / 2;end loop; -- conversão do int. INT_A em std_logic_vectorreturn STD_OUT; -- o valor retornado é um std_logic_vectorend;

Page 102: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

102

VHDL Procedimentos:

Sub-programa que pode ser chamado uma ou varias vezes desde o programa principal.

Um procedimento pode ter como parâmetros objetocs em modo in, out ou inout.(como um “component”, mas o tamanho dos parâmetros sempre é genérico).

Os procedimentos usam o conjunto de instruções sequenciais.

Variáveis locais podem ser declaradas e estarão reiniciadas a cada chamada do procedimento.

Page 103: 1 == VHDL == Vhsic Hardware Description Language Versão 24/10/2003 Manuel Lois Anido - NCE/UFRJ.

103

VHDL Procedimentos: Exemplo 1:

library IEEE;

use IEEE.STD_LOGIC_1164.all;entity PROCED isport (A, B : in STD_LOGIC_VECTOR (9 downto 0);

SAIDA : out STD_LOGIC_VECTOR (9 downto 0));end PROCED;

architecture ARCHI of PROCEDU isprocedure MIN (signal L, M : in STD_LOGIC_VECTOR;

signal S : out STD_LOGIC_VECTOR) isbegin if L < M then S<=L; else S<=M; end if;end MIN;

begin MIN (A, B, SAIDA);end ARCHI;

Especifícação da classe de objeto

(Sinais e constantes)

Declaração de ProcedimentoChamada