Buscar

Introdução ao VHDL

Prévia do material em texto

Projeto a partir de VHDL 
Prof. Thiago Felski Pereira
Universidade do Sul de Santa Catarina– UNISUL 
Slides utilizados para apresentação 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
Tópicos
 Introdução ao VHDL
 Noções Básicas de VHDL
 Pacotes e Bibliotecas
 Sinais Variáveis
 Modelagem de Circuitos Combinacionais em VHDL
 Modelagem de Circuitos Seqüenciais em VHDL
 Considerações Finais
Introdução ao VHDL
 Definição
 Tipos de modelagem
 Fluxos de simulação e síntese
 Aspectos gerais
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
O que é VHDL?
 É uma linguagem de descrição de hardware 
 Desenvolvida a partir da necessidade do Departamento de 
Defesa (DoD) dos EUA para unificar a documentação de 
projetos de seus fornecedores no contexto do programa 
VHSIC, substituindo os diagrama esquemáticos
 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 programação, 
em português, costuma-se “masculinizar” o gênero 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 históricos
 1980: criação da linguagem
 1987: padronização pelo IEEE (IEEE Std 1076-1987)
 1993: revisão do padrão
 2008: modernização da linguagem (IEEE Std 1076-2008)
 Uso
 Documentação
 Simulação
 Síntese
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
Simulação funcional de um modelo VHDL
Biblioteca
VHDL
Modelo
VHDL
Testbench
VHDL
Modelo de
Simulação
Vetores 
de teste
Opcional
Diagrama de
Formas de Onda
Saída em 
Formato texto
Simulação
VHDL
Compilador
de Simulação
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Síntese de um modelo VHDL
Biblioteca
VHDL
Modelo
VHDL
Arquivo de
Tecnologia
Netlist
Opcional
Simulação
VHDL
com timing
Compilador
de Síntese
Análise de 
Timing
Posicionamento
e Roteamento
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Aspectos gerais do VHDL
 Dois conjuntos de construtores
 Simulação
 Síntese
 Características
 É baseado em palavras reservadas (BEGIN, END, ...)
 É insensível à caixa (BEGIN = Begin = begin)
 Declarações terminadas por ponto e vírgula “;”
 Comentários marcados precedidos por duplo hífen “--”
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
 Comentários
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Resumo
 VHDL é uma linguagem de descrição de hardware para
 Documentação
 Simulação
 Síntese
 Foi criada no contexto de um projeto do DoD-USA e hoje é 
uma HDL padronizada pelo IEEE
Noções Básicas de VHDL
 Entidade
 Arquitetura
 Configuração
 Componentes
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Estrutura de um modelo VHDL básico
 Modelo VHDL = Entidade + Arquitetura
 Entidade (ENTITY)
 Define a interface com o mundo externo (portas de entrada e 
saída)
 Arquitetura (ARCHITECTURE): 
 Define a implementação do projeto (ex. equações lógicas)
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Estrutura de um modelo VHDL básico
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
Equação lógica
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 esquemático
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 são declarados os parâmetros (GENERIC) da 
entidade e os seus sinais de entrada e de saída (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)
 Parâmetros (GENERIC)
 Permite passar informações a um modelo. Ex:
Especificação de atrasos de propagação (somente simulação)
Especificação de largura de canais em modelos parametrizáveis
 Podem ser definidos com valores defaults e modificados por 
instâncias superiores em uma descrição hierárquica
 Estrutura geral da declaração de um parâmetro GENERIC
<parameter_name>: <type> := <default_value>;
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Entidade (ENTITY)
 Sinais da interface (PORTS)
 Entradas e saídas do modelo
 Existem quatro modos de port
IN entrada
OUT saída
BUFFER saída com realimentação 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 VHDLThiago 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 múltiplas arquiteturas
 Estilos de arquitetura
 Comportamental 
 Estrutural
 Híbrida
ARCHITECTURE structural OF mux_2x1 IS
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura (ARCHITECTURE)
 Um arquitetura é constituída por processos
 Tipos de processos
 Implícito (em inglês, usa-se implied = implicado)
Uma declaração de atribuição a um sinal
 Explícito
Consiste de declarações seqüenciais
 Os múltiplos processos de uma arquitetura são 
executados de forma concorrente 
 Não importa a ordem em que são 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 mínima de uma descrição 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 implícito
Uma atribuição 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 mínima de uma descrição 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 explícito
Declarações seqüenciais
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 genérica
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Configuração (CONFIGURATION)
 Usada para fazer associações em modelos
 Associar uma entidade a um arquitetura
 Associar um componente a um par entidade-arquitetura
 Largamente usada em ambientes de simulação
 Facilita a exploração do espaço de projeto
 Uso limitado em ambientes de síntese (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
Configuração (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 configuração 
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 configuração 
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 múltiplos 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 múltiplos arquivos
ou
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Componente (COMPONENT)
 Um modelo VHDL pode ser implementado de forma 
hierárquica, utilizando instâncias de componentes baseados 
em outros modelos VHDL
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Componente (COMPONENT)
 Declaração 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)
 Declaração do componente x declaração 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)
 Instanciação do componente
 Mapeamento dos ports da instância do componente com os sinais 
do modelo de nível mais alto Mapeamento posicional (feito na ordem exata da declaração)
 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”
 Híbrida (estrutural + comportamental)
 Um modelo pode ter múltiplas arquiteturas (selecionadas 
pela configuração)
 Um modelo pode ser implementado usando instâncias 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 
informações ao longo de um modelo completo 
(tipicamente com múltiplas entidades)
 Um pacote consiste de:
 Declaração do pacote
 Declaração de tipos
 Declaração de subprogramas
 Corpo do pacote (opcional)
 Definição de subprogramas (se declarados)
 VHDL possui dois pacotes implícitos (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 genérica
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Exemplo: Pacote com a declaração 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
Declaração
do 
componente
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Bibliotecas
 Contém um ou mais pacotes
 Bibliotecas de recursos
 Pacotes padrão
 Pacotes IEEE
 Pacotes específicos da ferramenta EDA (ex. pacotes Altera)
 Qualquer biblioteca de unidades de projeto que são referenciadas 
em um projeto
 Biblioteca de trabalho (WORK)
 Biblioteca na qual a unidade de projeto corrente está sendo 
compilada
 Bibliotecas implícitas: WORK e STD
 Não precisam ser referenciadas
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Referenciando uma biblioteca ou um pacote
 Bibliotecas implícitas: WORK e STD
 Cláusula LIBRARY
 Define um nome simbólico da biblioteca referenciada, o qual 
aponta para um caminho de diretórios
 LIBRARY <identifier>;
 Cláusula 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;
Instâncias
do 
componente
Referência à biblioteca WORK (opcional)
Referência ao pacote my_package
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca STD
 Contém os seguintes pacotes
 STANDARD
Suporta os tipos: BIT, BOOLEAN, INTEGER, REAL e TIME)
Funções de operadores para os tipos suportados
 TEXTIO
Suporte a operações com arquivos
 É uma biblioteca implícita e não 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 representação 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
Numérico INTEGER -231 x  231-1 19, 8#57#, 16#A2#, 2#11#
REAL -3.65x1047  x  +3.65x1047 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 declaração de um tipo composto, seus limites são 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”, B”11_10”, O”32”, X”A2”
STRING Tipo CHARACTER “teste”, “oi mundo”
bit 0
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
 Contém os seguintes pacotes
 STD_LOGIC_1164
Descreve os tipos STD_LOGIC e STD_LOGIC_VECTOR e funções 
relacionadas
 STD_LOGIC_ARITH
Descreve os tipos SIGNED e UNSIGNED, funções de conversão, 
aritméticas e relacionais 
 STD_LOGIC_SIGNED e STD_LOGIC_UNSIGNED
Fazem referência aos pacotes NUMERIC_BIT e NUMERIC_STD os 
quais descrevem funções que permitem à ferramenta de síntese 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 lógicos (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’)
Possui funções de resolução associadas para a modelagem de 
múltiplos drivers acionando o mesmo sinal (ex. barramento)
 STD_LOGIC_VECTOR
Vetor de elementos STD_LOGIC
 STD_ULOGIC
Não possui funções de resolução
 STD_ULOGIC_VECTOR
Vetor de elementos STD_ULOGIC
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
 Funções disponíveis no pacote STD_LOGIC_1164 Operadores lógicos
and, or, nand, nor, xor, xnor, not 
 Funções de conversão entre BIT, STD_LOGIC e STD_ULOGIC
To_bit, To_bitvector, To_StdLogicVector, e outras
 Funções de detecção 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
Número inteiro sem sinal
Composto por elementos do tipo STD_LOGIC (ou BIT)
Os elementos mais significativos são posicionados à esquerda
 Tipos de dados do pacote STD_LOGIC_SIGNED
 SIGNED
Número inteiro com sinal
Representação em complemento de dois
O bit mais à esquerda é o bit de sinal
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Biblioteca IEEE
 Funções disponíveis nos pacotes STD_LOGIC_SIGNED e
STD_LOGIC_SIGNED
Tipo do operador Nome do operador (função)
Lógico and, or, nand, nor, xor, xnor
Relacional =, /=, <, <=, >, >=
Adição e subtração +, –
Concatenação &
Multiplicação e divisão *, /, mod, rem
Sinalização –
Miscelânea **, abs e not
Deslocamento shift_right, shift_left, srl, sll
Rotação rotate_right,rotate_left, ror, rol
Conversão to_integer, to_unsigned, to_signed
... ...
Sinais e Variáveis
 Sinais 
 Processos implícitos
 Processos explícitos
 Variáveis
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Sinais
 Representam interconexão física (fio) que realizam a 
comunicação de informações entre os processos
 Declaração
 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 implícitos)
 A atribuição é feita usando <=
 Uma atribuição a um sinal possui um processo implícito 
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 <= X“AA”; 
 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 atribuição a sinais concorrentes 
Exemplo: mux_2x1
 Atribuição simples
 Atribuição condicional
 Atribuição 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 explícitos
 Necessários na implementação de funções compostas por 
atribuição seqüenciais (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 explícitos
 Um processo é executado 
infinitamente se não for 
quebrado por uma 
declaração WAIT ou por uma 
lista de sensibilidade
 Uma lista de sensibilidade 
infere uma declaração WAIT
no final do processo
 Um processo pode ter 
múltiplos WAIT, mas não 
pode ter um WAIT e uma 
lista de sensibilidade
 As atribuições a sinais em 
um processo são efetivadas 
ao término da sua execução
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
Variáveis
 Declaradas dentro de processos e constituem-se em 
objetos de armazenamento temporário
 Declaração
 A atribuição é feita usando “:=”
 São atualizadas no momento da atribuição (não ao término 
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 variáveis
 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 Variáveis
Sinal Variável
Atribuição <= :=
Utilidade Representa um fio no 
circuito
Representa um local de 
armazenamento temp. 
Escopo Global 
(comunicação 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 variáveis
 Exemplo
 Atribuindo valor a todos os bits (usar aspas duplas)
temp := “10101010”;
temp := X“AA”; 
 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
 Definição
 Multiplexadores
 Somadores
 Comparadores
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos Combinacionais 
 São aqueles cujas saídas dependem exclusivamente do 
estado atual das entradas
 Exemplos:
 Codificadores e decodificadores
 Multiplexadores e demultiplexadores
 Somadores e subtratores
 Unidade Aritmética e Lógica
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
Associação 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 replicação 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
yc
d
0
1
0
1
Sel(1)
s
Associação em série 
de mux_2x1
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Modelando o mux_4x1 – Entidade 
 Várias arquiteturas possíveis
 Baseada em equações lógicas
 Associação em série 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 equações lógicas
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
 Associação em série 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;
-------------------------------------------------------------------
ARCHITECTUREbehavior 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 saída
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
 Números de 4 bits sem sinal [0,15]
 Números de 4 bits com sinal [-8, 7]
Modelagem de Circuitos 
Seqüencias em VHDL
 Blocos construtivos básicos
 Inferência de flip-flops 
 Registradores
 Contadores
 Máquinas de Estado
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Circuitos Seqüenciais
 São aqueles cujas saídas dependem do estado atual e 
passado das entradas
 Exemplos:
 Registradores
 Contadores
 Máquinas de Estado
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Arquitetura genérica de um circuito seqüencial
Registrador de Estado
Circuito Combinacional
Entradas Saídas
Próximo
Estado
Estado
Atual
Função de Transição 
de Estado
Função de 
Saída
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Blocos construtivos básicos
 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
Inferência de flip-flops
 Quando flip-flops serão 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
Inferência de flip-flops
 Quando flip-flops serão inferidos reg1.vhd?
D Q D QD Q
clk
d
a b
q
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferência de flip-flops
 Quando flip-flops serão 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
Inferência de flip-flops
 Quando flip-flops serão inferidos reg1.vhd?
D QD Q
clk
d
a b
q = b
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Inferência de flip-flops
 Quando flip-flops serão 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
Inferência de flip-flops
 Quando flip-flops serão 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; -- enableq : 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
 Aplicação típica: 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 é assíncrono
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
Máquinas de Estado
 Máquina de Moore mínima
S0
0
S1
1
go
/go
back
/back
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Máquinas de Estado
 Máquina de Moore mínima – 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
Máquinas de Estado
 Máquina de Moore mínima – 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
Máquinas de Estado
 Máquina de Moore mínima – Função de transição 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
Máquinas de Estado
 Máquina de Moore mínima – Função de saída
-- Output
q <= '1' WHEN (state_reg = s1) ELSE '0';
Considerações Finais
Projeto a partir de VHDL
Thiago Felski Pereira, UNISUL/2014
Para saber mais
 Referência
 D’AMORE, Roberto. VHDL: descrição e síntese de circuitos 
digitais. Rio de Janeiro: LTC, 2012 (na Saraiva por R$ 142,00)
 Muitos outros livros internacionais (mais caro$)
 Repositório
 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)

Continue navegando