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)