Você está na página 1de 129

Projeto a partir de VHDL

Prof. Thiago Felski Pereira


Universidade do Sul de Santa Catarina UNISUL

Slides utilizados para apresentao dos conceitos iniciais de
VHDL no LEDS/UNIVALI

Adaptado da palestra da EMICRO 2007 do prof. Dr. Cesar
Albenes Zeferino
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Tpicos
Introduo ao VHDL
Noes Bsicas de VHDL
Pacotes e Bibliotecas
Sinais Variveis
Modelagem de Circuitos Combinacionais em VHDL
Modelagem de Circuitos Seqenciais em VHDL
Consideraes Finais


Introduo ao VHDL
Definio
Tipos de modelagem
Fluxos de simulao e sntese
Aspectos gerais
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
O que VHDL?
uma linguagem de descrio de hardware

Desenvolvida a partir da necessidade do Departamento de
Defesa (DoD) dos EUA para unificar a documentao de
projetos de seus fornecedores no contexto do programa
VHSIC, substituindo os diagrama esquemticos

VHDL = VHSIC HDL
VHSIC = Very High Speed Integrated Circuit
HDL = Hardware Description Language
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
O VHDL ou a VHDL?
Assim como toda e qualquer linguagem de programao,
em portugus, costuma-se masculinizar o gnero da
linguagem
o C
o Delphi
o JAVA
o assembly
o VHDL


Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Cronologia e uso do VHDL
Marcos histricos
1980: criao da linguagem
1987: padronizao pelo IEEE (IEEE Std 1076-1987)
1993: reviso do padro
2008: modernizao da linguagem (IEEE Std 1076-2008)

Uso
Documentao
Simulao
Sntese
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Tipos de modelagem
Estrutural
O que
Comportamental
O que faz

ENTITY mux_2x1 IS
PORT (a, b : IN BIT;
sel : IN BIT;
s : OUT BIT);
END mux;

ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
ENTITY mux_2x1 IS
PORT (a, b : IN BIT;
sel : IN BIT;
s : OUT BIT);
END mux;

ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Simulao funcional de um modelo VHDL
Biblioteca
VHDL
Modelo
VHDL
Testbench
VHDL
Modelo de
Simulao
Vetores
de teste
Opcional
Diagrama de
Formas de Onda
Sada em
Formato texto
Simulao
VHDL
Compilador
de Simulao
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Sntese de um modelo VHDL
Biblioteca
VHDL
Modelo
VHDL
Arquivo de
Tecnologia
Netlist
Opcional
Simulao
VHDL
com timing
Compilador
de Sntese
Anlise de
Timing
Posicionamento
e Roteamento
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Aspectos gerais do VHDL
Dois conjuntos de construtores
Simulao
Sntese
Caractersticas
baseado em palavras reservadas (BEGIN, END, ...)
insensvel caixa (BEGIN = Begin = begin)
Declaraes terminadas por ponto e vrgula ;
Comentrios marcados precedidos por duplo hfen --
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Aspectos gerais do VHDL
Ex: Editor de texto com destaque coloridos de sintaxe
Palavras reservadas
Comentrios
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Resumo
VHDL uma linguagem de descrio de hardware para
Documentao
Simulao
Sntese

Foi criada no contexto de um projeto do DoD-USA e hoje
uma HDL padronizada pelo IEEE
Noes Bsicas de VHDL
Entidade
Arquitetura
Configurao
Componentes
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Estrutura de um modelo VHDL bsico
Modelo VHDL = Entidade + Arquitetura
Entidade (ENTITY)
Define a interface com o mundo externo (portas de entrada e
sada)
Arquitetura (ARCHITECTURE):
Define a implementao do projeto (ex. equaes lgicas)

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Estrutura de um modelo VHDL bsico
ENTITY <identifier> IS
...
END <identifier>;
ARCHITECTURE <identifier> OF <entity_identifier> IS
...
END <identifier>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo: Multiplexador 2-para-1 (mux_2x1)
s
a
b
sel
0
1
s
a
b
0
0
1
sel s
0 a
1 b
Tabela verdade
s = sel.a + sel.b
Equao lgica
if (sel == 0)
s = a;
else
s = b;
Funcionalidade (C)
s
a
b
1
0
1
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo: Multiplexador 2-para-1 (mux_2x1)
Diagrama esquemtico
s = sel.a + sel.b
sel.a
sel.b
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo: Multiplexador 2-para-1 (mux_2x1)
Diagrama de formas de onda
sel = 0 sel = 1
sel
a
b
s
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_2x1 em VHDL
ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
ENTITY mux_2x1 IS
PORT (a, b : IN BIT; -- data inputs
sel : IN BIT; -- selector
s : OUT BIT); -- data output
END mux_2x1;
ARQUITETURA
ENTIDADE
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_2x1 em VHDL
ENTIDADE
ARQUITETURA
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_2x1 em VHDL
ENTIDADE
ARQUITETURA
ENTITY mux_2x1 IS
PORT (a, b : IN BIT;
sel : IN BIT;
s : OUT BIT);
END mux_2x1;
ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Entidade (ENTITY)
onde so declarados os parmetros (GENERIC) da
entidade e os seus sinais de entrada e de sada (PORT)


ENTITY <identifier> IS
GENERIC (
<parameter_name> : STRING := <default_value>;
<parameter_name> : INTEGER := <default_value>
);

PORT (
<input_name> : IN BIT;
<bidir_name> : INOUT BIT;
<buffer_name> : BUFFER BIT;
<output_name> : OUT BIT
);
END <identifier>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Entidade (ENTITY)
Parmetros (GENERIC)
Permite passar informaes a um modelo. Ex:
Especificao de atrasos de propagao (somente simulao)
Especificao de largura de canais em modelos parametrizveis

Podem ser definidos com valores defaults e modificados por
instncias superiores em uma descrio hierrquica

Estrutura geral da declarao de um parmetro GENERIC
<parameter_name>: <type> := <default_value>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Entidade (ENTITY)
Sinais da interface (PORTS)
Entradas e sadas do modelo
Existem quatro modos de port
IN entrada
OUT sada
BUFFER sada com realimentao interna
INOUT bidirecional





SIGNAL <signal_name>: <mode> <type>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Entidade (ENTITY)
Exemplo



ou
ENTITY mux_2x1 IS
PORT (SIGNAL a, b : IN BIT; -- data inputs
SIGNAL sel : IN BIT; -- selector
SIGNAL s : OUT BIT); -- data output
END mux_2x1;
ENTITY mux_2x1 IS
PORT (a, b : IN BIT; -- data inputs
sel : IN BIT; -- selector
s : OUT BIT); -- data output
END mux_2x1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
Descreve a estrutura e/ou a funcionalidade do modelo
Tem que ser associada a uma entidade. Ex:


Uma entidade pode ter mltiplas arquiteturas
Estilos de arquitetura
Comportamental
Estrutural
Hbrida
ARCHITECTURE structural OF mux_2x1 IS
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
Um arquitetura constituda por processos
Tipos de processos
Implcito (em ingls, usa-se implied = implicado)
Uma declarao de atribuio a um sinal

Explcito
Consiste de declaraes seqenciais

Os mltiplos processos de uma arquitetura so
executados de forma concorrente
No importa a ordem em que so declarados no modelo

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
ARCHITECTURE <identifier> OF <entity_identifier> IS
BEGIN
-- Concurrent Signal Assignments (implied processes)
-- ...
END <identifier>; --(1076-1987 Version)
END ARCHITECTURE; --(1076-1993 Version)
Estrutura mnima de uma descrio estrutural
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
Exemplo
ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
Processo implcito
Uma atribuio a um sinal
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
ARCHITECTURE <identifier> OF <entity_identifier> IS
BEGIN
-- Process statements (explicit processes)
-- ...
END <identifier>; --(1076-1987 Version)
END ARCHITECTURE; -- (1076-1993 Version)
Estrutura mnima de uma descrio comportamental
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
Exemplo
ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;

Processo explcito
Declaraes seqenciais
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
ARCHITECTURE <identifier> OF <entity_identifier> IS
-- Signal Declarations
-- Constant Declarations
-- Type Declarations
-- Component Declarations
-- Subtype Declarations
-- Attribute Declarations
-- Attribute Specifications
-- Subprogram Declarations
-- Subprogram Body
BEGIN
-- Process Statements
-- Concurrent Procedural Calls
-- Concurrent Signal Assignment
-- Component Instantiation Statements
-- Generate Statements
END <identifier> ; --(1076-1987 Version)
END ARCHITECTURE; -- (1076-1993 Version)

Estrutura genrica
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Configurao (CONFIGURATION)
Usada para fazer associaes em modelos
Associar uma entidade a um arquitetura
Associar um componente a um par entidade-arquitetura
Largamente usada em ambientes de simulao
Facilita a explorao do espao de projeto
Uso limitado em ambientes de sntese (nem sempre
suportada)
CONFIGURATION <identifier> OF <entity_name> IS
FOR <architecture_name>
END FOR;
END; -- (1076-1987 version)
END CONFIGURATION; -- (1076-1993 version)
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Configurao (CONFIGURATION)
Exemplos
CONFIGURATION config OF mux_2x1 IS
FOR structural
END FOR;
END;
CONFIGURATION config OF mux_2x1 IS
FOR behavior
END FOR;
END;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo de modelo
ENTITY mux_2x1 IS
PORT (a, b : IN BIT; -- data inputs
sel : IN BIT; -- selector
s : OUT BIT); -- data output
END mux_2x1;
-------------------------------------
ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
-------------------------------------
ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;
-------------------------------------
CONFIGURATION config OF mux_2x1 IS
FOR behavior
END FOR;
END;
Este modelo possui duas
arquiteturas
Estrutural
Comportamental
A configurao
seleciona a arquitetura a
ser usada
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo de modelo
ENTITY mux_2x1 IS
PORT (a, b : IN BIT; -- data inputs
sel : IN BIT; -- selector
s : OUT BIT); -- data output
END mux_2x1;
-------------------------------------
ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
-------------------------------------
ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;
-------------------------------------
CONFIGURATION config OF mux_2x1 IS
FOR behavior
END FOR;
END;
Este modelo possui duas
arquiteturas
Estrutural
Comportamental
A configurao
seleciona a arquitetura a
ser usada
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
mux_2x1.vhd
Alternativas de modelagem:
em um nico arquivo ou em mltiplos arquivos
ENTITY mux_2x1 IS
PORT (a, b : IN BIT; -- data inputs
sel : IN BIT; -- selector
s : OUT BIT); -- data output
END mux_2x1;
-------------------------------------
ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
-------------------------------------
ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;
-------------------------------------
CONFIGURATION config OF mux_2x1 IS
FOR behavior
END FOR;
END;
mux_2x1_entity.vhd
ENTITY mux_2x1 IS
PORT (a, b : IN BIT; -- data inputs
sel : IN BIT; -- selector
s : OUT BIT); -- data output
END mux_2x1;
mux_2x1_arch_behavior.vhd
ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;
mux_2x1_arch_structural.vhd
ARCHITECTURE structural OF mux_2x1 IS
BEGIN
s <= (a AND NOT sel) OR
(b AND sel);
END structural;
mux_2x1_config.vhd
CONFIGURATION config OF mux_2x1 IS
FOR behavior
END FOR;
END;
ou
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Alternativas de modelagem:
em um nico arquivo ou em mltiplos arquivos
ou
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Componente (COMPONENT)
Um modelo VHDL pode ser implementado de forma
hierrquica, utilizando instncias de componentes baseados
em outros modelos VHDL
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Componente (COMPONENT)
Declarao do componente
COMPONENT <identifier> IS
PORT ( <signal_name> : <mode> <type>;
...
<signal_name> : <mode> <type>);
END COMPONENT;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Componente (COMPONENT)
Declarao do componente x declarao de entidade
COMPONENT <identifier> IS
PORT ( <signal_name> : <mode> <type>;
...
<signal_name> : <mode> <type>);
END COMPONENT;
ENTITY <identifier> IS
PORT ( <signal_name> : <mode> <type>;
...
<signal_name> : <mode> <type>);
END <identifier>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Componente (COMPONENT)
Instanciao do componente
Mapeamento dos ports da instncia do componente com os sinais
do modelo de nvel mais alto

Mapeamento posicional (feito na ordem exata da declarao)



Mapeamento nomeado (pode ser feito em qualquer ordem)

<label> : <component_identifier>
PORT MAP(<signal_name>,..., <signal_name>);
<label> : <component_identifier>
PORT MAP(<component_signal_name> => <signal_name>,
...
<component_signal_name> => <signal_name>);
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Componente (COMPONENT)
Onde declarar e instanciar o componente?
Na arquitetura do modelo
ARCHITECTURE <identifier> OF <entity_identifier> IS
-- ...
-- Component Declarations
-- ...
BEGIN
-- ...
-- Component Instantiation Statements
-- ...
END <identifier> ; --(1076-1987 Version)
END ARCHITECTURE; -- (1076-1993 Version)
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo: Circuito com dois mux_2x1 (mux_2x1_duo)
s0
a0
b0
sel
0
1
s1
a1
b1
0
1
ENTITY mux_2x1_duo IS
PORT (SIGNAL a0, b0 : IN BIT; -- data inputs
SIGNAL a1, b1 : IN BIT; -- data inputs
SIGNAL sel : IN BIT; -- selector
SIGNAL s0, s1 : OUT BIT); -- data output
END mux_2x1_duo;

ARCHITECTURE structural OF mux_2x1_duo IS
-- Component declaration
COMPONENT mux_2x1
PORT (SIGNAL a, b : IN BIT; -- data inputs
SIGNAL sel : IN BIT; -- selector
SIGNAL s : OUT BIT); -- data output
END COMPONENT;

BEGIN
-- Component instantiation
u0 : mux_2x1 PORT MAP (a0, b0, sel, s0);
u1 : mux_2x1 PORT MAP (sel => sel,
a => a1,
b => b1,
s => s1);
END structural;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Resumo
Um modelo VHDL formado por
Entidade (ENTITY): interface
Arquitetura (ARCHITECTURE): corpo do modelo
A arquitetura pode ser modelada de forma
Estrutural: O que o circuito
Comportamental: O que o circuito faz
Hbrida (estrutural + comportamental)
Um modelo pode ter mltiplas arquiteturas (selecionadas
pela configurao)
Um modelo pode ser implementado usando instncias de
outros modelos (componentes)

Pacotes e Bibliotecas
Pacotes
Bibliotecas
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Pacote (PACKAGE)
uma forma conveniente para armazenar e usar
informaes ao longo de um modelo completo
(tipicamente com mltiplas entidades)
Um pacote consiste de:
Declarao do pacote
Declarao de tipos
Declarao de subprogramas
Corpo do pacote (opcional)
Definio de subprogramas (se declarados)
VHDL possui dois pacotes implcitos (built in)
Standard
Textio

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Pacote (PACKAGE)
PACKAGE <identifier> IS
-- Constant Declarations
-- Type Declarations
-- Signal Declarations
-- Subprogram Declarations
-- Component Declarations
END <identifier>; -- (1076-1987)
END PACKAGE <identifier>; -- (1076-1993)

PACKAGE BODY <identifier> IS
-- Constant Declarations
-- Type Declarations
-- Subprogram Body
END <package_name>; -- (1076-1987)
END PACKAGE BODY <package_name>; -- (1076-1993)
Estrutura genrica
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo: Pacote com a declarao do componente mux_2x1
PACKAGE my_package IS
-- Component declaration
COMPONENT mux_2x1
PORT (SIGNAL a, b : IN BIT; -- data inputs
SIGNAL sel : IN BIT; -- selector
SIGNAL s : OUT BIT); -- data output
END COMPONENT;
END my_package;

-- There is no package body
Declarao
do
componente
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Bibliotecas
Contm um ou mais pacotes
Bibliotecas de recursos
Pacotes padro
Pacotes IEEE
Pacotes especficos da ferramenta EDA (ex. pacotes Altera)
Qualquer biblioteca de unidades de projeto que so referenciadas
em um projeto
Biblioteca de trabalho (WORK)
Biblioteca na qual a unidade de projeto corrente est sendo
compilada
Bibliotecas implcitas: WORK e STD
No precisam ser referenciadas
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Referenciando uma biblioteca ou um pacote
Bibliotecas implcitas: WORK e STD
Clusula LIBRARY
Define um nome simblico da biblioteca referenciada, o qual
aponta para um caminho de diretrios
LIBRARY <identifier>;
Clusula USE
Especifica o pacote e o objeto a serem utilizados da biblioteca


A palavra reservada ALL permite referenciar todos os objetos do
pacote
USE <lib_id>.<package_id>.<object_id>;
USE <lib_id>.<package_id>.ALL;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo: Modelagem o mux_2x1_duo com o mux_2x1
declarado no pacote my_package
LIBRARY WORK;
USE WORK.my_package.ALL;

ENTITY mux_2x1_duo IS
PORT (SIGNAL a0, b0 : IN BIT; -- data inputs
SIGNAL a1, b1 : IN BIT; -- data inputs
SIGNAL sel : IN BIT; -- selector
SIGNAL s0, s1 : OUT BIT); -- data output
END mux_2x1_duo;

ARCHITECTURE structural OF mux_2x1_duo IS
BEGIN
u0 : mux_2x1 PORT MAP(a0, b0, sel, s0);
u1 : mux_2x1 PORT MAP(a1, b1, sel, s1);
END structural;
Instncias
do
componente
Referncia biblioteca WORK (opcional)
Referncia ao pacote my_package
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca STD
Contm os seguintes pacotes
STANDARD
Suporta os tipos: BIT, BOOLEAN, INTEGER, REAL e TIME)
Funes de operadores para os tipos suportados
TEXTIO
Suporte a operaes com arquivos
uma biblioteca implcita e no precisa ser referenciada
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca STD
Tipos de dados escalares do pacote STANDARD






No tipo INTEGER conveniente limitar a faixa de representao para
economizar recursos. Ex:
SIGNAL int_8bit : INTEGER RANGE 0 TO 255;

Classe Tipo Valores Exemplo
Enumerado
BIT
Um e zero 1, 0
BOOLEAN
Verdadeiro e falso TRUE, FALSE
CHARACTER
Caracteres ASCII a, b, c,..., A, B, C
Numrico
INTEGER
-2
31
x 2
31
-1 19, 8#57#, 16#A2#, 2#11#
REAL
-3.65x10
47
x +3.65x10
47
2.63, 1.75E+2, 16#8.C#
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca STD
Tipos de dados compostos do pacote STANDARD




Na declarao de um tipo composto, seus limites so definidos por TO
e DOWNTO
Exemplos
CONSTANT X: BIT_VECTOR(0 TO 3) := "1011"
CONSTANT X: BIT_VECTOR(3 DOWNTO 0) := "1101"

Classe Tipo Valores Exemplo
Vetor
BIT_VECTOR Tipo BIT
1110, B11_10, O32, XA2
STRING Tipo CHARACTER

teste, oi mundo
bit 0
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
Contm os seguintes pacotes
STD_LOGIC_1164
Descreve os tipos STD_LOGIC e STD_LOGIC_VECTOR e funes
relacionadas

STD_LOGIC_ARITH
Descreve os tipos SIGNED e UNSIGNED, funes de converso,
aritmticas e relacionais

STD_LOGIC_SIGNED e STD_LOGIC_UNSIGNED
Fazem referncia aos pacotes NUMERIC_BIT e NUMERIC_STD os
quais descrevem funes que permitem ferramenta de sntese usar
os tipos BIT_VECTOR e STD_LOGIC_VECTOR para sintetizar os tipos
SIGNED e UNSIGNED
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
Tipos de dados do pacote STD_LOGIC_1164
STD_LOGIC
9 valores lgicos (U, X, 0, 1, Z, W, L, H, -)
Possui funes de resoluo associadas para a modelagem de
mltiplos drivers acionando o mesmo sinal (ex. barramento)

STD_LOGIC_VECTOR
Vetor de elementos STD_LOGIC

STD_ULOGIC
No possui funes de resoluo

STD_ULOGIC_VECTOR
Vetor de elementos STD_ULOGIC

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
Funes disponveis no pacote STD_LOGIC_1164
Operadores lgicos
and, or, nand, nor, xor, xnor, not

Funes de converso entre BIT, STD_LOGIC e STD_ULOGIC
To_bit, To_bitvector, To_StdLogicVector, e outras

Funes de deteco de borda de subida
rising_edge e falling_edge

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
Tipos de dados do pacote STD_LOGIC_UNSIGNED
UNSIGNED
Nmero inteiro sem sinal
Composto por elementos do tipo STD_LOGIC (ou BIT)
Os elementos mais significativos so posicionados esquerda

Tipos de dados do pacote STD_LOGIC_SIGNED
SIGNED
Nmero inteiro com sinal
Representao em complemento de dois
O bit mais esquerda o bit de sinal
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
Funes disponveis nos pacotes STD_LOGIC_SIGNED e
STD_LOGIC_SIGNED
Tipo do operador Nome do operador (funo)
Lgico
and, or, nand, nor, xor, xnor
Relacional
=, /=, <, <=, >, >=
Adio e subtrao
+,
Concatenao
&
Multiplicao e diviso
*, /, mod, rem
Sinalizao

Miscelnea
**, abs e not
Deslocamento
shift_right, shift_left, srl, sll
Rotao
rotate_right,rotate_left, ror, rol
Converso
to_integer, to_unsigned, to_signed
...
...
Sinais e Variveis
Sinais
Processos implcitos
Processos explcitos
Variveis
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Sinais
Representam interconexo fsica (fio) que realizam a
comunicao de informaes entre os processos
Declarao
Declarados na entidade, na arquitetura ou em um pacote


ENTIDADE
ARQUITETURA
Processo A Processo B
sinal
sinal
sinal sinal
SIGNAL <signal_name>: <type>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Atribuindo valores a sinais (processos implcitos)
A atribuio feita usando <=

Uma atribuio a um sinal possui um processo implcito
associado

<signal_name> <= <expression>;
a
b
c d
ENTIDADE
ARQUITETURA
c <= a and b; d <= not c;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Atribuindo valores a sinais
Exemplo

Atribuindo valor a todos os bits (usar aspas duplas)
temp <= 10101010;
temp <= XAA;
Atribuindo valor a um nico bit (usar aspas simples)
temp(7) <= 1;
Atribuindo valor a um grupo de bits
temp (7 downto 4)<= 1010;
SIGNAL temp : STD_LOGIC_VECTOR (7 DOWNTO 0);
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Tipos de atribuio a sinais concorrentes
Exemplo: mux_2x1
Atribuio simples

Atribuio condicional


Atribuio selecionada

s <= (a AND NOT sel) OR (b AND sel);
s <= a WHEN sel=0 ELSE
b;
WITH sel SELECT
s <= a WHEN 0
b WHEN OTHERS;
No caso de sel ser do
tipo STD_LOGIC, WHEN
OTHERS garante um valor
definido para s (ou seja b)
quando sel possuir
qualquer outro valor
diferente de 0
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Processos explcitos
Necessrios na implementao de funes compostas por
atribuio seqenciais (ex. if-then-else)
<process_label>: -- (optional)
PROCESS (<sensitive_list>)
-- Constant declarations
-- Type declarations
-- Variable declarations
BEGIN
-- Signal Assignment Statement (optional)
-- Variable Assignment Statement (optional)
-- Procedure Call Statement (optional)
-- If Statement (optional)
-- Case Statement (optional)
-- Loop Statement (optional)
END PROCESS <process_label>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Processos explcitos
Um processo executado
infinitamente se no for
quebrado por uma
declarao WAIT ou por uma
lista de sensibilidade
Uma lista de sensibilidade
infere uma declarao WAIT
no final do processo
Um processo pode ter
mltiplos WAIT, mas no
pode ter um WAIT e uma
lista de sensibilidade
As atribuies a sinais em
um processo so efetivadas
ao trmino da sua execuo
ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;
ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
WAIT(a,b,sel);
END PROCESS;
END behavior;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Variveis
Declaradas dentro de processos e constituem-se em
objetos de armazenamento temporrio
Declarao
A atribuio feita usando :=

So atualizadas no momento da atribuio (no ao trmino
do processo, como os sinais)

<variable_name> := <expression>;
VARIABLE <variable_name>: <type>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Atribuindo valores a variveis
Exemplo

ARCHITECTURE behavior OF mux_2x1 IS
VARIABLE temp := BIT;
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
temp := a;
ELSE
temp := b;
END IF;

s <= temp;
END PROCESS;
END behavior;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Sinais x Variveis
Sinal Varivel
Atribuio <= :=
Utilidade Representa um fio no
circuito
Representa um local de
armazenamento temp.
Escopo Global
(comunicao entre
processos)
Local
(dentro do processo)
Comportamento Atualizado no final do
processo
Atualizada imediatamente
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Atribuindo valores a variveis
Exemplo

Atribuindo valor a todos os bits (usar aspas duplas)
temp := 10101010;
temp := XAA;
Atribuindo valor a um nico bit (usar aspas simples)
temp(7) := 1;
Atribuindo valor a um grupo de bits
temp (7 downto 4):= 1010;
VARIABLE temp : STD_LOGIC_VECTOR (7 DOWNTO 0);
Modelagem de Circuitos
Combinacionais em VHDL
Definio
Multiplexadores
Somadores
Comparadores
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos Combinacionais
So aqueles cujas sadas dependem exclusivamente do
estado atual das entradas
Exemplos:
Codificadores e decodificadores
Multiplexadores e demultiplexadores
Somadores e subtratores
Unidade Aritmtica e Lgica

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Multiplexador 2-para-1 com canais de W bits
(mux_2x1_Wbits)
s(W-1..0)
a (W-1..0)
b (W-1..0)
sel
0
1
s(0)
a(0)
b(0)
sel
0
1
s(w-1)
a(w-1)
b(w-1)
0
1
Associao em paralelo
de mux_2x1
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_2x1_Wbits Entidade
ENTITY mux_2x1_Wbits IS
GENERIC (W : NATURAL := 16);

PORT (a, b : IN BIT_VECTOR (W-1 DOWNTO 0); -- data inputs
sel : IN BIT; -- selector
s : OUT BIT_VECTOR (W-1 DOWNTO 0)); -- data output
END mux_2x1_Wbits;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_2x1_Wbits Arq. Estrutural
ARCHITECTURE structural OF mux_2x1_Wbits IS
BEGIN
f0: FOR i IN (W-1) DOWNTO 0 GENERATE
s(i) <= (a(i) AND NOT sel) OR (b(i) AND sel);
END GENERATE f0;
END structural;
__generate_label:
FOR __index_variable IN __range GENERATE
__statement;
__statement;
END GENERATE;
FOR ... GENERATE
Realiza a replicao concorrente
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_2x1_Wbits Arq. Estrutural
ARCHITECTURE structural OF mux_2x1_Wbits IS
BEGIN
f0: FOR i IN 3 DOWNTO 0 GENERATE
s(i) <= (a(i) AND NOT sel) OR (b(i) AND sel);
END GENERATE f0;
END structural;
ARCHITECTURE structural OF mux_2x1_Wbits IS
BEGIN
s(3) <= (a(3) AND NOT sel) OR (b(3) AND sel);
s(2) <= (a(2) AND NOT sel) OR (b(2) AND sel);
s(1) <= (a(1) AND NOT sel) OR (b(1) AND sel);
s(0) <= (a(0) AND NOT sel) OR (b(0) AND sel);
END structural;
=
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_2x1_Wbits Arq. Comportmental
Igual do mux_2x1
ARCHITECTURE behavior OF mux_2x1_Wbits IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;

ARCHITECTURE behavior OF mux_2x1 IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF (sel='0') THEN
s <= a;
ELSE
s <= b;
END IF;
END PROCESS;
END behavior;

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Multiplexador 4-para-1 com canais de 1 bit
s0
a
b
sel(1..0)
0
1
c
d
2
3
x
a
b
Sel(0)
0
1
y
c
d
0
1
0
1
Sel(1)
s
Associao em srie
de mux_2x1
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 Entidade
Vrias arquiteturas possveis
Baseada em equaes lgicas
Associao em srie de mux_2x1
WHEN ... ELSE
WITH ... SELECT
IF-THEN-ELSE
CASE
ENTITY mux_4x1 IS
PORT (a, b, c, d : IN BIT; -- data inputs
sel : IN BIT_VECTOR(1 DOWNTO 0); -- selector
s : OUT BIT); -- data output
END mux_4x1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 Arquitetura 1
Baseada em equaes lgicas
ARCHITECTURE arch_1 OF mux_4x1 IS
BEGIN
s <= ((NOT sel(1)) AND (NOT sel(0)) AND a) OR
((NOT sel(1)) AND ( sel(0)) AND b) OR
(( sel(1)) AND (NOT sel(0)) AND c) OR
(( sel(1)) AND ( sel(0)) AND d);
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 Arquitetura 2
Associao em srie de mux_2x1
ARCHITECTURE arch_2 OF mux_4x1 IS
-- Component declaration
COMPONENT mux_2x1
PORT (SIGNAL a, b : IN BIT; -- data inputs
SIGNAL sel : IN BIT; -- selector
SIGNAL s : OUT BIT); -- data output
END COMPONENT;

-- Signals declaration
SIGNAL x,y : BIT;
BEGIN
-- Component instantiation
u0 : mux_2x1 PORT MAP (a, b, sel(0), x);
u1 : mux_2x1 PORT MAP (c, d, sel(0), y);
u3 : mux_2x1 PORT MAP (x, y, sel(1), s);
END arch_2;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 Arquitetura 3
WHEN ... ELSE
ARCHITECTURE arch_3 OF mux_4x1 IS
BEGIN
s <= a WHEN sel = "00" ELSE
b WHEN sel = "01" ELSE
c WHEN sel = "10" ELSE
d ;
END arch_3;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 Arquitetura 4
WITH ... SELECT
ARCHITECTURE arch_4 OF mux_4x1 IS
BEGIN
WITH sel SELECT
s <= a WHEN "00",
b WHEN "01",
c WHEN "10",
d WHEN OTHERS;
END arch_4;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 Arquitetura 5
IF-THEN-ELSE
ARCHITECTURE arch_5 OF mux_4x1 IS
BEGIN
PROCESS(a,b,c,d,sel)
BEGIN
IF sel(1) = '0' THEN
IF sel(0) = '0' THEN
s <= a;
ELSE
s <= b;
END IF;
ELSE
IF sel(0) = '0' THEN
s <= c;
ELSE
s <= d;
END IF;
END IF;
END PROCESS;
END arch_5;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 Arquitetura 6
CASE
ARCHITECTURE arch_6 OF mux_4x1 IS
BEGIN
PROCESS(a,b,c,d,sel)
BEGIN
CASE sel IS
WHEN "00" => s <= a;
WHEN "01" => s <= b;
WHEN "10" => s <= c;
WHEN OTHERS => s <= d;
END CASE;
END PROCESS;
END arch_6;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
Meio somador (half adder) Arquitetura estrutural
ENTITY half_adder IS
PORT (a, b : IN BIT; -- data inputs
s : OUT BIT; -- data output
cout : OUT BIT); -- carry out
END half_adder;
--------------------------------------------------
ARCHITECTURE structural OF half_adder IS
BEGIN
s <= a XOR b;
cout <= a AND b;
END structural;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
RTL do meio somador (half adder)
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
Somador completo (full adder) Arquitetura estrutural
ENTITY full_adder IS
PORT (a, b : IN BIT; -- data inputs
cin : IN BIT; -- carry in
s : OUT BIT; -- data output
cout : OUT BIT); -- carry out
END full_adder;
--------------------------------------------------
ARCHITECTURE structural OF full_adder IS
BEGIN
s <= a XOR b XOR cin;
cout <= (a AND b) OR (a AND cin) OR (b AND cin);
END structural;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
RTL do somador completo (full adder)
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
Somador ripple carry de W bits Entidade
ENTITY adder_Wbits IS
GENERIC(W : NATURAL := 4);

PORT (a, b : IN BIT_VECTOR(W-1 DOWNTO 0); -- data inputs
cin : IN BIT; -- carry in
s : OUT BIT_VECTOR(W-1 DOWNTO 0); -- data output
cout : OUT BIT); -- carry out
END adder_wbits;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
Somador ripple carry de W bits Arq. Estrutural 1
ARCHITECTURE arch_1 OF adder_Wbits IS
-- Signals declaration
SIGNAL carry : BIT_VECTOR(W DOWNTO 0); -- internal carry in

BEGIN
carry(0) <= cin;

f0: FOR i IN (W-1) DOWNTO 0 GENERATE
s(i) <= a(i) XOR b(i) XOR carry(i);
carry(i+1) <= (a(i) AND b(i))
OR (a(i) AND carry(i))
OR (b(i) AND carry(i));
END GENERATE f0;

cout <= carry(W);
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
Somador ripple carry de W bits Arq. Estrutural 2
ARCHITECTURE arch_2 OF adder_Wbits IS
-- Component declaration
COMPONENT full_adder IS
PORT (a, b : IN BIT; -- data inputs
cin : IN BIT; -- carry in
s : OUT BIT; -- data output
cout : OUT BIT); -- carry out
END COMPONENT;
-- Signals declaration
SIGNAL carry : BIT_VECTOR(W DOWNTO 0); -- internal carry in
BEGIN
carry(0) <= cin;

f0: FOR i IN (W-1) DOWNTO 0 GENERATE
u: full_adder PORT MAP(a(i), b(i),carry(i),s(i),carry(i+1));
END GENERATE f0;

cout <= carry(W);
END arch_2;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
RTL do somador ripple carry com W = 4bis
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
Utilizando o operador + do pacote std_logic_unsigned
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;

ENTITY adder_unsigned_Wbits IS
GENERIC(W : NATURAL := 4);

PORT (a, b : IN STD_LOGIC_VECTOR(W-1 DOWNTO 0); -- data inputs
s : OUT STD_LOGIC_VECTOR(W-1 DOWNTO 0)); -- data output
END adder_unsigned_Wbits;

------------------------------------------------------------------
ARCHITECTURE behavior OF adder_unsigned_Wbits IS
BEGIN
s <= a + b;
END behavior;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos somadores
Utilizando o operador + do pacote std_logic_unsigned
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;

ENTITY adder_unsigned_Wbits_carried IS
GENERIC(W : NATURAL := 4);

PORT (a, b : IN STD_LOGIC_VECTOR(W-1 DOWNTO 0); -- data inputs
s : OUT STD_LOGIC_VECTOR(W-1 DOWNTO 0); -- data output
cout : OUT STD_LOGIC); -- carry out
END adder_unsigned_Wbits_carried;

-------------------------------------------------------------------
ARCHITECTURE behavior OF adder_unsigned_Wbits_carried IS
SIGNAL result : STD_LOGIC_VECTOR(W DOWNTO 0);

BEGIN
result <= ('0'& a) + ('0' & b);
s <= result(W-1 DOWNTO 0);
cout <= result(W);
END behavior;
Inclui carry de sada
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuito comparador
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;

ENTITY comparator_Wbits IS
GENERIC(W : NATURAL := 4);

PORT (a, b : IN STD_LOGIC_VECTOR(W-1 DOWNTO 0); -- data inputs
eq : OUT STD_LOGIC; -- a = b
gt : OUT STD_LOGIC; -- a > b
lt : OUT STD_LOGIC); -- a < b
END comparator_Wbits;

------------------------------------------------------------------
ARCHITECTURE behavior OF comparator_Wbits IS
BEGIN
lt <= '1' WHEN (a < b) ELSE '0';
eq <= '1' WHEN (a = b) ELSE '0';
gt <= '1' WHEN (a > b) ELSE '0';
END behavior;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuito comparador
Nmeros de 4 bits sem sinal [0,15]



Nmeros de 4 bits com sinal [-8, 7]

Modelagem de Circuitos
Seqencias em VHDL
Blocos construtivos bsicos
Inferncia de flip-flops
Registradores
Contadores
Mquinas de Estado
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos Seqenciais
So aqueles cujas sadas dependem do estado atual e
passado das entradas
Exemplos:
Registradores
Contadores
Mquinas de Estado

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura genrica de um circuito seqencial

Registrador de Estado

Circuito Combinacional







Entradas
Sadas
Prximo
Estado
Estado
Atual
Funo de Transio
de Estado
Funo de
Sada
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Blocos construtivos bsicos
Latches


Flip-flops
D Q
ENA
D Q
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Latch transparente
ENTITY latch_d IS
PORT (d : IN BIT; -- data input
ena : IN BIT; -- enable
q : OUT BIT); -- data output
END latch_d;

---------------------------------------
ARCHITECTURE behavior OF latch_d IS
BEGIN
PROCESS(d,ena)
BEGIN
IF (ena = '1') THEN
Q <= D;
END IF;
END PROCESS;
END behavior;
D Q
ENA
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Latch com clear
ENTITY latch_d_clear IS
PORT (d : IN BIT; -- data input
ena : IN BIT; -- enable
clrn: IN BIT; -- clear
q : OUT BIT); -- data output
END latch_d_clear;

-----------------------------------------
ARCHITECTURE behavior OF latch_d_clear IS
BEGIN
PROCESS(d,ena,clrn)
BEGIN
IF (clrn = '0') THEN
Q <= '0';
ELSIF (ena = '1') THEN
Q <= D;
END IF;
END PROCESS;
END behavior;
D Q
ENA
CLRN
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Flip-flop D (gatilhado pela borda de subida do clock)
D Q
ENTITY ff_d IS
PORT (d : IN BIT; -- data input
clk : IN BIT; -- clock
q : OUT BIT); -- data output
END ff_d;

---------------------------------------
ARCHITECTURE arch_1 OF ff_d IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL clk='1';
Q <= D;
END PROCESS;
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Flip-flop D (gatilhado pela borda de subida do clock)
D Q
ENTITY ff_d IS
PORT (d : IN BIT; -- data input
clk : IN BIT; -- clock
q : OUT BIT); -- data output
END ff_d;

---------------------------------------
ARCHITECTURE arch_2 OF ff_d IS
BEGIN
PROCESS(clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN
Q <= D;
END IF;
END PROCESS;
END arch_2;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Flip-flop D
D Q
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;

ENTITY ff_d_std_logic IS
PORT (d : IN STD_LOGIC; -- data input
clk : IN STD_LOGIC; -- clock
q : OUT STD_LOGIC); -- data output
END ff_d_std_logic;

---------------------------------------------
ARCHITECTURE arch_1 OF ff_d_std_logic IS
BEGIN
PROCESS(clk)
BEGIN
IF rising_edge(clk) THEN
Q <= D;
END IF;
END PROCESS;
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Flip-flop D com clear
ENTITY ff_d_clear IS
PORT (d : IN BIT; -- data input
clk : IN BIT; -- clock
clrn: IN BIT; -- clear
q : OUT BIT); -- data output
END ff_d_clear;
---------------------------------------
ARCHITECTURE arch_1 OF ff_d_clear IS
BEGIN
PROCESS(clk,clrn)
BEGIN
IF (clrn='0') THEN
Q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
Q <= D;
END IF;
END PROCESS;
END arch_1;
D Q
CLRN
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Flip-flop D com clear e enable
ENTITY ff_d_clear_ena IS
PORT (d : IN BIT; -- data input
clk : IN BIT; -- clock
clrn: IN BIT; -- clear
ena : IN BIT; -- enable
q : OUT BIT); -- data output
END ff_d_clear_ena;
----------------------------------------
ARCHITECTURE arch_1 OF ff_d_clear_ena IS
BEGIN
PROCESS(clk,clrn)
BEGIN
IF (clrn='0') THEN
Q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
IF (ena='1') THEN
Q <= D;
END IF;
END IF;
END PROCESS;
END arch_1;
D Q
CLRN
ENA
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferncia de flip-flops
Quando flip-flops sero inferidos para reg1.vhd?
ENTITY reg1 IS
PORT ( d : IN BIT;
clk : IN BIT;
q : OUT BIT);
END reg1;
------------------------------------
ARCHITECTURE arch_1 OF reg1 IS
SIGNAL a, b : BIT;
BEGIN
PROCESS(clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN
a <= d;
b <= a;
q <= b;
END IF;
END PROCESS;
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferncia de flip-flops
Quando flip-flops sero inferidos reg1.vhd?
D Q D Q D Q
clk
d
a b
q
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferncia de flip-flops
Quando flip-flops sero inferidos para reg2.vhd?
ENTITY reg2 IS
PORT ( d : IN BIT;
clk : IN BIT;
q : OUT BIT);
END reg1;
------------------------------------
ARCHITECTURE arch_1 OF reg2 IS
SIGNAL a, b : BIT;
BEGIN
PROCESS(clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN
a <= d;
b <= a;
END IF;
END PROCESS;
q <= b;
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferncia de flip-flops
Quando flip-flops sero inferidos reg1.vhd?
D Q D Q
clk
d
a b
q = b
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferncia de flip-flops
Quando flip-flops sero inferidos para reg3.vhd?
ENTITY reg3 IS
PORT ( d : IN BIT;
clk : IN BIT;
q : OUT BIT);
END reg1;
------------------------------------
ARCHITECTURE arch_1 OF reg3 IS
BEGIN
PROCESS(clk)
VARIABLE a, b : BIT;
BEGIN
IF (clk'EVENT AND clk='1') THEN
a := d;
b := a;
q <= b;
END IF;
END PROCESS;
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferncia de flip-flops
Quando flip-flops sero inferidos reg3.vhd?
D Q
clk
d q
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Registradores
Registrador Paralelo-Paralelo de W bits
D Q
CLRN
ENA
D Q
CLRN
ENA
D Q
CLRN
ENA
ena
clk
clrn
d(W-1)
d(1) d(0)
q(0) q(1) q(W-1)
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Registradores
Registrador Paralelo-Paralelo de W bits
ENTITY reg_pp_Wbits IS
GENERIC(W : NATURAL := 4);
PORT (d : IN BIT_VECTOR(W-1 DOWNTO 0);-- data input
clk : IN BIT; -- clock
clrn: IN BIT; -- clear
ena : IN BIT; -- enable
q : OUT BIT_VECTOR(W-1 DOWNTO 0));-- data output
END reg_pp_Wbits;

ARCHITECTURE arch_1 OF reg_pp_Wbits IS
BEGIN
PROCESS(clk,clrn)
BEGIN
IF (clrn='0') THEN
q <= (OTHERS => '0');
ELSIF (clk'EVENT AND clk='1') THEN
IF (ena='1') THEN
q <= d;
END IF;
END IF;
END PROCESS;
END arch_1;
Igual ao
flip-flop
tipo D com
clear e
enable
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Registradores
Registrador Paralelo-Paralelo de W bits
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Contadores
Incrementador de W bits
Aplicao tpica: Program Counter (PC)
CLRN Ena Load Qf
0 X X 0
1 0 X Qa
1 1 D
0 Qa+1
D(W-1..0)
CLRN
ENA
Q(W-1..0)
LOAD
CLRN assncrono
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Contadores
Incrementador de W bits Entidade
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;

ENTITY counter_Wbits IS
GENERIC(W : NATURAL := 4);
PORT (d : IN STD_LOGIC_VECTOR(W-1 DOWNTO 0);-- data input
clk : IN BIT; -- clock
clrn: IN BIT; -- clear
ena : IN BIT; -- enable
load: IN BIT; -- load
q : BUFFER STD_LOGIC_VECTOR(W-1 DOWNTO 0));-- data
output
END counter_Wbits;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Contadores
Incrementador de W bits Arquitetura

ARCHITECTURE arch_1 OF counter_Wbits IS
BEGIN
PROCESS(clk,clrn)
BEGIN
IF (clrn='0') THEN
q <= (OTHERS => '0');
ELSIF (clk'EVENT AND clk='1') THEN
IF (ena='1') THEN
IF (load='1') THEN
q <= d;
ELSE
q <= q+1;
END IF;
END IF;
END IF;
END PROCESS;
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Contadores
Incrementador de W bits
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Mquinas de Estado
Mquina de Moore mnima
S0
0
S1
1
go
/go
back
/back
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Mquinas de Estado
Mquina de Moore mnima Entidade e Arquitetura
ENTITY fsm_go_back IS
PORT (clk : IN BIT; -- clock
clrn: IN BIT; -- clear
go : IN BIT; -- input 1
back: IN BIT; -- input 2
q : OUT BIT); -- output
END fsm_go_back;

ARCHITECTURE arch_1 OF fsm_go_back IS
TYPE state_type IS (s0, s1);
SIGNAL state_reg : state_type;
SIGNAL next_state: state_type;

BEGIN
-- next slides
END arch_1;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Mquinas de Estado
Mquina de Moore mnima Registrador de estado
p_state_reg: PROCESS(clk,clrn)
BEGIN
IF (clrn='0') THEN
state_reg <= s0;
ELSIF (clk'EVENT AND clk='1') THEN
state_reg <= next_state;
END IF;
END PROCESS;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Mquinas de Estado
Mquina de Moore mnima Funo de transio de estado
p_next_state: PROCESS(state_reg)
BEGIN
CASE (state_reg) IS
WHEN s0 => IF (go='1') THEN
next_state <= s1;
ELSE
next_state <= s0;
END IF;

WHEN s1 => IF (back='1') THEN
next_state <= s0;
ELSE
next_state <= s1;
END IF;

WHEN OTHERS=> next_state <= s0;
END CASE;
END PROCESS;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Mquinas de Estado
Mquina de Moore mnima Funo de sada
-- Output
q <= '1' WHEN (state_reg = s1) ELSE '0';
Consideraes Finais

Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Para saber mais
Referncia
DAMORE, Roberto. VHDL: descrio e sntese de circuitos
digitais. Rio de Janeiro: LTC, 2012 (na Saraiva por R$ 142,00)
Muitos outros livros internacionais (mais caro$)

Repositrio
The Hamburg VHDL Archive
http://tams-www.informatik.uni-hamburg.de/vhdl/
Livros e tutoriais gratuitos
Artigos
Modelos (8051, DLX, Leon, ...)
Ferramentas (Compiladores, Editores, Visualizadores)