vhdl - introdução 1vhdlintrodução paulo c. centoducatte [email protected] fevereiro de 2005
TRANSCRIPT
![Page 1: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/1.jpg)
1
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDLVHDLIntroduçãoIntrodução
Paulo C. [email protected]
fevereiro de 2005
![Page 2: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/2.jpg)
2
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Introdução
• Vantagens do Uso de HDLs e Ferramentas de Sínteses – Aumento da produtividade, diminuindo o ciclo de
desenvolvimento– Redução dos custos NRE (Non-Recurring Engineering)– Reusabilidade – Facilidade em introduzir alterações nos projetos– Exploração de alternativas de arquiteturas– Exploração de alternativas tecnológicas – Geração de circuitos testáveis automaticamente – Facilidades na verificação do projeto
![Page 3: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/3.jpg)
3
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Introdução
• Dispositivos ASICs e FPGAs– ASIC - Application-Specific Integrated Circuits– FPGA - Field-Programmable Gate-Array
• ASIC– Parcialmente manufaturado pelo fabricante– Gate Arrays
• Channeled gate array • Channel-less gate array (sea-of-gates)
– Standard Cell• Fabricante fornece uma biblioteca de had-macros e soft-macros
(70% a 90% do # de gates disponíveis são efetivamente usados)
![Page 4: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/4.jpg)
4
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Introdução
• FPGA– Completamente manufaturado pelo fabricante– Blocos programáveis interconectados por matrizes de
chaves programáveis
• FPGAs são muito utilizadas para pequena produção e prototipagem de sistemas
ASIC x FPGA
ASIC
FPGA
NRC
$20,000 a $100,000
Por unidade
$10
$150 a $250---
![Page 5: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/5.jpg)
5
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Introdução
• Metodologia de Projeto
– Descrição do sistema completo em um nível de abstração usando uma linguagem de descrição de hardware (HDL - Hardware Description Language) e uso de ferramentas automáticas para particionamento e síntese.
– A descrição do hardware deve ser independente da tecnologia a ser usada na implementação.
• PCB ou MCMs (multichip modules)• IC, ASICs, FPGA, PLD, full-custom
![Page 6: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/6.jpg)
6
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Hardware Description Languages (HDLs)
• HDL - Linguagem de programação usada para modelar a operação de um hardware– VHDL, Verilog, SystemC, ...
• VHDL - História– 1980
• USA Department of Defense (DOD)– Documentação– Metodologia de Projeto comum– re-usável com novas tecnologias
• O DOD, dentro do programa “Very High Speed Integreted Circuit” (VHSIC) criou um projeto com a finalidade de criar uma linguagem de descrição de hardware
– VHSIC Hardware Description Language ( VHDL)
![Page 7: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/7.jpg)
7
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Hardware Description Languages (HDLs)
– 1983• Início do desenvolvimento de VHDL
– IBM, Texas Instruments e Intermetrics
– 1987 • Todo projeto de eletrônica digital ligado ao DOD deveria ser
descrito em VHDL• IEEE - Institute of Electrical and Electronics Engineers
– IEEE Standard 1076– F-22
» Todos os subsistemas eletrônicos descritos em VHDL
» O desenvolvimento dos subsistemas foram distribuídos em diversos subcontratos
» Estabeleceu um marco no uso de VHDL e da metodologia de projeto Top-Down
![Page 8: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/8.jpg)
8
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Hardware Description Languages (HDLs)
– 1993• Revisão de VHDL - IEEE 1076’93
– 1996• Ferramentas comerciais para Simulação e Sínteses para o
padrão IEEE 1076’93• IEEE 1076.3 - VHDL package para uso com ferramentas
de sínteses • IEEE 1076.4 (VITAL) - padrão para modelagem de bibliotecas
para ASICs e FPGAs em VHDL
![Page 9: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/9.jpg)
9
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Ferramentas para Automação de Projetos
• Computer Aided Design (CAD) e Computer Aided Engineering (CAE)
• Simulação– Processo usado para verificar as características
funcionais do modelo em qualquer nível comportamental. Usa o timing definido no modelo HDL, antes da sínteses, ou o timing extraído das células da tecnologia alvo, após a sínteses.
Circuit
Model
InputtestWaveform(vectors)
Output
responses
![Page 10: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/10.jpg)
10
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Ferramentas para Automação de Projetos
• Fault Simulation
– Simulação do modelo com uma particular entrada de estímulos (vetor) e com injeção de falhas típicas de manufatura no modelo
– Identificar áreas do circuito que não foram funcionalmente testadas pelos vetores de testes funcionais
– Checar a qualidade dos vetores de teste e sua habilidade de detectar defeitos de manufatura
– Executar os testes de produção e de reparo
![Page 11: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/11.jpg)
11
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Ferramentas para Automação de Projetos
• Register Transfer Level Synthesis
– É o processo que mapeia um modelo de um hardware descrito em HDL no nível RTL em uma implementação otimizada no nível de gate, em uma tecnologia específica.
![Page 12: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/12.jpg)
12
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Ferramentas para Automação de Projetos
• Otimizações no nível RTL– Algumas transformações efetuadas
• expansão - sub-programas são expandidos in-line• constant folding - Ex. A + 3 + 5 => A + 8• loop unrolling• dead code removel - código não utilizado é removido• bit minimization - Ex.: codificação dos estados de FSM
– Uso de CFG (Control-data Flow Graph) como representação interna
• escalonamento• particionamento• resource binding
![Page 13: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/13.jpg)
13
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Ferramentas para Automação de Projetos
• Otimizações no nível lógico
– otimização da lógica combinacional– reestruturação das equações booleanas– minimização– equation flatting– fatorização das equações
![Page 14: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/14.jpg)
14
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Ferramentas para Automação de Projetos
• Síntese de Teste– Modificações introduzidas no projeto original para tornar o
chip e/ou o PCB, onde ele será usado, mais testável e permitir a geração automática de padrões de teste (Automatic Test Pattern Generation ATPG)
– Design For Test (DFT)• “ad-hoc”• full internalscan• partial internal scan• boundary scan
• OBS.: Normalmente em projetos ASICs esta tarefa é executada pelo fabricante.
![Page 15: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/15.jpg)
15
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Síntese e Otimizações
• Restrições
– Global - Aplicada igualmente a todo o projeto• Exemplos: Biblioteca do fabricante; tensão e temperatura de uso.
– Específica por circuito - Aplicada um particular circuito• Exemplos:
– Área - área máxima (# gates equivalentes, # transistores)– Timing - input e output loading, máx. fan-out, capacidade
de driving das entradas, mínima freqüência do clock, etc.
– Potência - máxima potência consumida– Testabilidade - tipo das células para scan, scan parcial ou full,
boundary scan.
![Page 16: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/16.jpg)
16
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL- Uma visão Geral
• Característica– Adequada à descrição de hardware
• programação seqüencial e paralela
– Permite descrição em diferentes níveis de abstração• Comportamental • RTL• Estrutural (gate)
– Simulável– Sintetizável– Padrão
![Page 17: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/17.jpg)
17
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Uma visão Geral
• Conceitos:
– time step: É o menor intervalo de tempo do simulador, em algumas ferramentas é definido pelo usuário. Para VHDL time-step é o tempo gasto para a resolução de uma iteração de todos os comandos concorrentes
– Concorrência: A cada time-step do simulador todos os comandos são executados concorrentemente. Também os processos (conjunto de comandos seqüenciais) ocorrem em concorrência com o restante dos comandos de um modelo VHDL
– Tipo: A linguagem VHDL é fortemente dependente dos tipos dos dados.
![Page 18: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/18.jpg)
18
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - uma visão geral
• 5 tipos de unidades
– Entity - define a interface do projeto, módulo, etc.– Architecture - descreve funcionalmente a entidade. Pode
haver mais de uma arquitetura para uma mesma entidade.
– Package - declarações comuns a todo o projeto. Exemplo: constantes, tipos de dados e subprogramas.
– Packge Body - contém o corpo dos subprogramas definidos no Packge
– Configuration - Faz a ligação de uma entidade com uma particular arquitetura, formando um componente.
![Page 19: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/19.jpg)
19
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - uma visão geral
• Packages: Assim como em linguagens de programação são utilizadas bibliotecas (de funções, procedimentos, definições de tipos e declarações de constantes etc), em VHDL isto é feito com a utilização de Packages e Bibliotecas de componentes.
• Entidades: Define a interface de um componente: nome, tipo dos sinais de entrada e/ou saída, ...
• Arquiteturas: Define a funcionalidade de um componente e a temporização. Uma mesma entidade pode possuir múltiplas arquiteturas e para efeito de simulação e síntese é usada a última arquitetura compilada.
![Page 20: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/20.jpg)
20
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - uma visão geral
• Processo: É uma porção de código delimitada pelas palavras Process e End Process que contém comandos seqüenciais (são simulados em delta-delay que somados resultam em zero). Todos os processos de um modelo VHDL de um componente são executados concorrentemente em um time-step.
• Função: Uma função em VHDL tem comportamento similar as funções em outras linguagens, contudo funções em VHDL não afetam os parâmetros de entrada, simplesmente retornam um valor com tipo definido.
![Page 21: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/21.jpg)
21
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - uma visão geral
• Procedimento: Um procedimento em VHDL tem comportamento similar aos procedimentos de outras linguagens e distinguem-se das funções pela possibilidade de alteração nos parâmetros de chamada.
• Bloco: O comando BLOCK pode ser utilizado tanto para definir hierarquia de circuitos como também em conjunto com expressões GUARD definindo condições de uso de sinais de escopo restrito.
• Componente: É descrito pelo par entidade e arquitetura. Um modelo VHDL é dito estrutural se faz uso de instanciação de componentes.
![Page 22: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/22.jpg)
22
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Estrutura do Código VHDL
• Declarações – Objetos que serão usados em comandos concorrentes ou
seqüenciais – Declarados antes da clausula begin em arquiteturas,
blocos, processos, procedimentos e funções
• Comandos concorrentes– comandos que serão executados em paralelo,
independentemente um dos outros – block e process
![Page 23: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/23.jpg)
23
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Estrutura do Código VHDL
• Comandos seqüenciais– comandos que serão executados de forma seqüencial,
obedecendo o fluxo de controle– comandos após a clusula begin em processos
![Page 24: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/24.jpg)
24
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Elementos Léxicos
• Comentários: --
• Identificadores: Formados por letras, números e underline (necessariamente iniciados por letra e não podem terminar em underline)
• Palavras reservadas
• Símbolos especiais: Utilizados em operadores, para delimitação e pontuação da linguagem:
/ : - . + | & ‘ “ ( ) * , => > = < /= >= <= <> ;
![Page 25: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/25.jpg)
25
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Elementos Léxicos (cont.)
• Números, caracteres e string
– Números inteiros: 17 25 0 55E5 – Números reais: 14.33 0.0 33.4E10– caracteres: ‘A’ ‘f’ ‘K’ ‘7’ ‘?’– String: “String” “A”
• Bit strings: Somente utilizados com o tipo bit_vector
– Binário: B”0011011”– Octal: O”234”– Hexadecimal: X”E3F”
![Page 26: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/26.jpg)
26
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Entidade
• Define a interface do componente com o restante do sistema
Entity nome ISEntity nome IS GENERIC (lista_dos_genericos);GENERIC (lista_dos_genericos); PORT (lista_dos_ports);PORT (lista_dos_ports);END nome;END nome;
![Page 27: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/27.jpg)
27
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Port
• Formato:
– Modo: in, out, inout, buffer, linkage
• Exemplo:
Port (nome: MODO tipo);Port (nome: MODO tipo);
Port (a, b : in bit;Port (a, b : in bit; c: out bit);c: out bit);
aa
bbcc
in1in1
in2in2out1out1
![Page 28: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/28.jpg)
28
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Exemplo
Entity Entity porta_andporta_and IS IS GENERIC (numeroGENERIC (numero_de_entradas: integer := 4_de_entradas: integer := 4);); PORT (PORT (entradas : in bit_vector (1 to numero_de_entradasentradas : in bit_vector (1 to numero_de_entradas);); saida : out bit);saida : out bit);END porta_end;END porta_end;
• Port MODE:– IN: sinal é somente de entrada
– OUT: sinal é somente de saída
– Buffer: sinal é de entrada e saída (um de cada vez)
– Inout: sinal é bidirecional, imblica em um BUS
– Linkage: direção do sinal é desconhecida
![Page 29: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/29.jpg)
29
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Exemplo
• Qual é a Entidade?
DD
clkclk
QQ88
bitsbits88
bitsbits LatchLatch
Entity latch isEntity latch is port (d : in bit_vector(7 downto 0);port (d : in bit_vector(7 downto 0); clk : in bit;clk : in bit; q : out out bit_vector(7 downto 0);q : out out bit_vector(7 downto 0);End latch;End latch;
![Page 30: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/30.jpg)
30
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Exemplo
Entity latch isEntity latch is generic(w : integer := 8);generic(w : integer := 8); port (d : in bit_vector(w-1 downto 0);port (d : in bit_vector(w-1 downto 0); clk : in bit;clk : in bit; q : out bit_vector(w-1 downto 0);q : out bit_vector(w-1 downto 0);End latch;End latch;
• Usando generic?
![Page 31: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/31.jpg)
31
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Arquitetura
• Estabelece a relação entre entradas e saídas– Funções– Procedimentos– Execução paralela de processos– Instanciação de componentes
• Arquiteturas múltiplas– Utiliza a última compilada
![Page 32: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/32.jpg)
32
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Arquitetura
ARCHITECTURE label OF nome_entidade ISARCHITECTURE label OF nome_entidade IS -- parte declarativa (declarações de tipos, subtipos, sinais, -- parte declarativa (declarações de tipos, subtipos, sinais, -- funções, procedimentos, ...)-- funções, procedimentos, ...)
BEGINBEGIN -- comandos concorrentes-- comandos concorrentesEND label;END label;
ARCHITECTURE rtl OF porta_and ISARCHITECTURE rtl OF porta_and IS constant atraso : time := 5 ns;constant atraso : time := 5 ns;
BEGINBEGIN y <= a AND b AFTER atraso;y <= a AND b AFTER atraso;END porta_and;END porta_and;
Qual a entidade?Qual a entidade?
![Page 33: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/33.jpg)
33
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Arquitetura
Entity porta_and isEntity porta_and is port (a, b : in bit;port (a, b : in bit; y : out bit);y : out bit);End porta_and;End porta_and;
Entity porta_and isEntity porta_and is generic(w : integer := 8);generic(w : integer := 8); port (a, b : in bit_vector(w-1 downto 0);port (a, b : in bit_vector(w-1 downto 0); y : out bit_vector(w-1 downto 0);y : out bit_vector(w-1 downto 0);End latch;End latch;
![Page 34: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/34.jpg)
34
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Declarações
• Constantes:– CONSTANT atraso : TIME := 3 ns;
• Variáveis:– VARIABLE tmp : INTEGER :+ 0;
• SINAIS:– SIGNAL clk : BIT := ‘1’;
![Page 35: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/35.jpg)
35
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Declarações
• Constante: nome assinalado a um valor fixo
» CONSTANT vdd: real := 4.5;
» CONSTANT cinco: integer := 3 +2;
• Variável: nome assinalado a um valor que muda de acordo com um determinado processo
» VARIABLE largura_pulso: time range 1ns to 15ns := 3;
» VARIABLE memoria: bit_vector (0 to 7);
• SINAl: conectam entidades e transmitem mudanças de valores entre os processos (todo port é um sinal).
» SIGNAL contador : integer range 0 to 63
» SIGNAL condicao : boolean := TRUE;
![Page 36: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/36.jpg)
36
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Declarações
• Áreas declarativas
– Onde são definidos os sinais internos, variáveis, constantes, subprogramas, aliases
– Àreas declarativas existem para packages, entidades, arquiteturas, subprogramas, processos e blocos
– A área não declarativa é chamada de área de comandos
![Page 37: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/37.jpg)
37
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Declarações
• Área declarativa em Arquitetura– Declarações no topo da arquitetura são “visíveis” em toda
a arquitetura
![Page 38: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/38.jpg)
38
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Declarações
• Área declarativa em Arquitetura– Declarações no topo da arquitetura são “visíveis” em toda
a arquitetura
ARCHITECTURE exemplo OF circuito ISARCHITECTURE exemplo OF circuito IS CONSTANT cte : time := 10 ns;CONSTANT cte : time := 10 ns; SIGNAL tmp : integer;SIGNAL tmp : integer; SIGNAL cnt : bit;SIGNAL cnt : bit;
BEGINBEGIN
........
![Page 39: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/39.jpg)
39
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Declarações
• Área declarativa em Processos– Declarações no topo de um processo são “visíveis” em
toda o processo
Exemplo: PROCESS isExemplo: PROCESS is CONSTANT cte : time := 10 ns;CONSTANT cte : time := 10 ns; VARIABLE tmp : integer;VARIABLE tmp : integer; SIGNAL cnt : bit;SIGNAL cnt : bit;
BEGINBEGIN
........
![Page 40: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/40.jpg)
40
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Declarações
• Escopo: da declaração do identificador até a declarção END desta região
• Limites:– Componente
• Entidade– Arquitetura
» Bloco
» Processo
» Subprograma
![Page 41: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/41.jpg)
41
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Escopo
• Na linguagem VHDL é possível a utilização de identificadores homônimos com diferentes significados, dependendo do contexto onde é definido cada identificador ele pode assumir diferentes significados a nível lógico.
• Um sinal definido dentro da parte declarativa de um componente, entidade, arquitetura, bloco, processo ou subprograma tem o escopo controlado dentro deste contexto. Desta forma é possível a utilização de nomes idênticos para indicações de sinais distintos.
• Para a distinção de sinais homônimos, cada sinal definido em VHDL pode ser acessado por seu endereço completo, indicando biblioteca, package, componente, arquitetura, processo e nome do sinal na forma:
biblioteca.componente.arquitetura.processo.sinalbiblioteca.componente.arquitetura.processo.sinal
![Page 42: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/42.jpg)
42
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Visibilidade
• Estabelece o significado dos identificadores
• As declarações são visíveis somente no seu escopo
• Uso de endereços em identificadores
» var1 := architecture2.cte;
» var2 := process1.cte;
![Page 43: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/43.jpg)
43
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Atribuições
• Atribuição de sinal:
• Atribuição de variáveis e constantes:
• Inicialização:
<=<=
:=:=
:=:=
![Page 44: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/44.jpg)
44
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Atribuições de Dados
• Constante:
• Variável:
• Sinal:
Constant cnt_reset := “1001”;Constant cnt_reset := “1001”;
var1 := 2005;var1 := 2005;
dado <= ‘1’;dado <= ‘1’;
d <= ‘1’, ‘0’ AFTER 5 ns;d <= ‘1’, ‘0’ AFTER 5 ns;
![Page 45: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/45.jpg)
45
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Operadores Aritméticos
Operador Operação Exemplo
+ Adição I := i + 2;
- Subtração J <= j -10;
* Multiplicação M := fator * n;
/ Divisão K := i / 2;
** Potenciação I := i ** 3;
ABS Valor absoluto Y <= ABS(tmp)
MOD Módulo Z <= MOD(t);
REM resto R <= REM(tot);
![Page 46: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/46.jpg)
46
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Operadores Lógicos
• Predefinidos para os tipos: bit; std_logic, std_ulogic, boolean
– NOT– AND– NAND– OR– NOR– XOR– XNOR
![Page 47: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/47.jpg)
47
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Operadores Relacionais
Operador Operação
= Igual
/= Diferente
> Maior que
< Menor que
>= Maior ou igua que
<= Menor ou igual que
![Page 48: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/48.jpg)
48
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Modelo Completo
• Indica as bibliotecas utilizadas
• Faz uso das definições contidas nas bibliotecas
• Descreve a entidade
• Descreve a arquitetura
![Page 49: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/49.jpg)
49
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL – or de 2 entradas
Library IEEE;Library IEEE;Use IEEE.std_logic;Use IEEE.std_logic;
Entity or2 isEntity or2 is -- porta or de duas entradas-- porta or de duas entradas port (i1, i2 : in bit;port (i1, i2 : in bit; out1 : out bit);out1 : out bit);End or2;End or2;
Architecture rtl of or2 isArchitecture rtl of or2 isBeginBegin out1 <= i1 or i2;out1 <= i1 or i2;End rtl; End rtl;
![Page 50: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/50.jpg)
50
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Packages
• Coleção de declarações comuns definidas fora dos modelos (corpo + declaração)
• Uso de:– Tipos; Subtipos– Subprogramas (Funções e Procedimentos)– Constantes; Sinais; Aliases– Atributos– Componentes
![Page 51: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/51.jpg)
51
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Packages
PACKAGE label ISPACKAGE label IS
-- declarações;-- declarações;
END label;END label;
Package BODY label ISPackage BODY label IS
-- Corpo de subprogramas;-- Corpo de subprogramas;
END label;END label;
![Page 52: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/52.jpg)
52
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL – Library e USE
• LIBRARY nome_da_biblioteca;
• A cláusula USE torna os pacotes visíveis em entidades e arquiteturas– USE nome_biblioteca.nome_package;– USE nome_package.identificador;
Library IEEE;
USE IEEE.std_ulogic.all;USE math.all;USE textio.all;
![Page 53: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/53.jpg)
53
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipos
• Definição de tipos– Integer– Natural– Real– Array– ....
• Tipos padrão– bit– std_logic– std_ulogic
![Page 54: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/54.jpg)
54
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipos
• Vetores– bit_vector– std_logic_vector– std_ulogic_vector
• Tipos são associados a:– sinais– variáveis– constantes
![Page 55: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/55.jpg)
55
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipos de Dados
• Scalar– Numeric– Enumeration– Physical
• Composite– Array– Records
• Acess– Similar aos pointers em linguagens de programação– Permite alocação dinâmica de memória
![Page 56: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/56.jpg)
56
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo Scalar
• NUMERIC– TYPE integer IS RANGE -214748368 to 2147483647– TYPE real is RANGE -1.797769E308 to 1.79769E308;
• ENUMERATION– TYPE instr IS (“add”, “sub”, “mult”, “div”);– TYPE character IS (‘a’, ‘b’, ‘c’, ‘d’, .... );
• PHYSICALTYPE time IS RANGE 0 to 1e55
UNITS
fs;
ps = 1000 fs;
...
END UNITS;
![Page 57: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/57.jpg)
57
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo Escalar
ESCALARESCALAR
REALREAL DISCRETODISCRETO
EnumeradoEnumeradoInteiroInteiro
Definido pelo usuárioDefinido pelo usuárioStd_logicStd_logicBitBitBooleanBoolean
![Page 58: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/58.jpg)
58
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo Composite
• Consiste de elementos de dados relacionados na forma de um array ou record
• Os elementos de um composite podem ser manipulados como um objeto ÚNICO ou individualmente
• Tipicamente utilizados para modelar barramentos e memórias (RAM e ROM)
![Page 59: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/59.jpg)
59
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo Composite
CompositeComposite
ArrayArray
VetorVetor1 dim1 dim
TabelaTabela2 dim2 dim
RecordeRecorde
Conjunto de camposConjunto de campos
![Page 60: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/60.jpg)
60
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo - ARRAY
• Formato:
TYPE word IS ARRAY (31 downto 0) OF bit;
SUBTYPE coef IS integer range 0 to 15;
TYPE matriz IS array(coef,word) of word;
![Page 61: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/61.jpg)
61
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo - RECORD
• Formato:
TYPE time_stamp IS RECORD
segundos : integer range 0 to 59;
minutos : integer range 0 to 59;
horas : integer range 0 to 23;
END RECORD time_stamp;
• Podem ser acessados elementos individuais do record ou como um todo
![Page 62: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/62.jpg)
62
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo - RECORD
• Exemplo de uso:
constant meia_noite : time_stamp := (0,0,0);
constant meio_dia : time_stamp :=
(horas => 12, minutos => 0, segundos => 0);
horario_atual := meio_dia;
hora_atual := meia_noite.horas;
![Page 63: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/63.jpg)
63
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo Pré-Definidos
• BIT (‘0’, ’1’)• BOOLEAN (TRUE, FALSE)• INTEGER (-1, 1, 6, 10, 15, ...)• REAL (-4.3, 5.5, 0.35 ....)• CHARACTER (‘a’, ‘b’, ‘c’, .... )• TIME (5 ns, 1 ps, 2s, ... )• SEVERITY_LEVEL (note, warning, ...)
![Page 64: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/64.jpg)
64
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Tipo Standard Logic
• Definidos no pacote IEEE:TYPE std_logic IS ( ‘U’, -- não inicializado
‘X’ -- indeterminado forte
‘0’ -- zero lógico forte
‘1’ -- um lógico forte
‘Z’ -- alta impedância
‘W’ -- indeterminado fraco
‘L’ -- zero lógico fraco
‘H’ -- um lógico fraco
‘-’ -- dont´t care );
![Page 65: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/65.jpg)
65
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Subtipos
• Formato:
SUBTYPE natural IS INTEGER RANGE 0 to 2147483647;
SUBTYPE positive IS INTEGER RANGE 1 to 2147483647;
![Page 66: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/66.jpg)
66
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Conversão de Tipos
• Possível para conversão de alguns tipos– Inteiro --> Ponto Flutuante– array --> array com conteúdo do mesmo tipo
• Formato:
tipo(objeto)
• Exemplo:soma := REAL(N1) + N2;
![Page 67: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/67.jpg)
67
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Exemplo
• Qual o circuito implementado (em termos de portas lógicas)?
Library IEEE;
use IEEE.std_logic;
Entity cct1 IS
Port (in1, in2,in3,in4 : IN std_logic;
out1, out2 : OUT std_logic);
End cct1;Architecture rtl OF cct1 IS signal out_i : std_logic;Begin out_i <= in1 and in2 and in3; out1 <= out_i; out2 <= in4 XOR out_i;End rtl
![Page 68: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/68.jpg)
68
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Modelando Atrasos
• Em quanto tempo a saída out1 do circuito anterior é resolvida?
• Atraso interno (desta)
dado <= dado_interno;• Atraso inercial (filtra spikes)
Q <= d_in AFTER 10ns;• Atraso transport (passa o sinal independentemente
da sua duração)Q <= TRANSPORT d_in AFTER 10ns;
![Page 69: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/69.jpg)
69
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Modelando Atrasos
• Um sinal não muda imediatamente quando assinalamento ocorre
• Um assinalamento de sinal é programado para ocorrer no próximo ciclo de simulação
![Page 70: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/70.jpg)
70
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Inertial Delay
• O atraso inercial rejeita pulsos que são menores que o valor de atraso especificado
• O comando y <= d after 20 ns; pode ser lido como y recebe o valor d se este tiver duração de pelo menos 20 ns
dd
yy
![Page 71: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/71.jpg)
71
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Transport Delay
• modela resposta em freqüência infinita
• não importa a duração do pulso copiado para a saída
• se o atraso de uma nova transição é menor ou igual ao atraso das transições programadas, então estas transições são substituídas pela nova transição, caso este atraso seja maior as transições são somadas
dd
yy
![Page 72: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/72.jpg)
72
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Processos
• São comandos concorrentes que contém instruções seqüênciais
• Todos os processos são executados concorrentemente
• Cada instrução dentro de um processo leva um tempo “delta time” que somados são iguais a zero
![Page 73: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/73.jpg)
73
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Process
Label: PROCESS (lista de sensitividade)
cláusulas declarativas;
BEGIN
-- comentários
inicializações;
cláusulas acertivas;
END PROCESS label;
OBS.: A lista de sensibilidade funciona como um comando WAIT ON
![Page 74: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/74.jpg)
74
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Process
Architecture bhv OF generic_decoder IS
Begin
PROCESS (sel, en)
BEGIN
y <= (others => ‘1’;
FOR i IN y’range LOOP
IF (en = ‘1’ and bvtoi(To_Bitvector(sel)) = i)
THEN
y(i) <= ‘0’;
END IF;
END LOOP;
END PROCESS;
END bhv;
atributoatributo
Função de conversão de Função de conversão de
tipo bit_vector para inteirotipo bit_vector para inteiro
![Page 75: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/75.jpg)
75
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Assinalamento seqüencial
Process (a,b)
variable i : integer := 0;
begin
c := ‘1’ after 3 ns;
i := 1;
c <= ‘0’ after 5 ns;
d <= ‘0’ after 10 ns;
i := i -1;
d <= transport ‘1’ after 15 ns;
c <= ‘1’ after 10 ns;
d <= ‘0’ after 25 ns;
end process;
![Page 76: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/76.jpg)
76
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Assinalamento seqüencial
Process (a,b)
variable i : integer := 0;
begin
c := ‘1’ after 3 ns;
i := 1; -- i = 1 imediatamente
c <= ‘0’ after 5 ns;
d <= ‘0’ after 10 ns;
i := i -1; -- i = 0 imediatamente
d <= transport ‘1’ after 15 ns; -- d = ‘1’ depois de 15 ns
c <= ‘1’ after 10 ns; -- c = ‘1’ depois de 10 ns
d <= ‘0’ after 25 ns; -- d = ‘0’ depois de 25 ns
end process;
![Page 77: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/77.jpg)
77
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Comando WAIT
• Utilizado dentro da estrutura PROCESS• Formato
WAIT [ON lista]
espera atividade em algum sinal da lista
WAIT [UNTIL condição]
espera até que condição ocorra
WAIT [FOR tempo]
espera pelo tempo especificado
![Page 78: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/78.jpg)
78
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Comando WAIT
Process
variable i : integer := 0;
begin
i := i + 1;
j <= j + 1;
wait on k;
wait for 100 ns;
wait on m until j > 5;
end process;
![Page 79: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/79.jpg)
79
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Comando WAIT
wait; -- espera infinita
wait until clk = ‘1’; -- espera até que um evento satisfaça a condição clk = ‘1’
wait on clk until reset = ‘0’; -- espera até que ocorra um evento em clk e que se satisfaça a condição reset =‘0’
wait until trigger = ‘1’ for 1 ms; -- espera até que ocorra um evento em trigger ou se passe 1 milisegundo
![Page 80: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/80.jpg)
80
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Comando wait
• Exemplo:
exemplo: process
variable var : integr := 0;
signal x, y : bit := ‘0’;
begin
var := var + 1;
var := var + var;
x <= not y;
x <= y;
wait; -- por quanto tempo?
End process exemplo;
![Page 81: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/81.jpg)
81
VHDL - Introdução
http://www.lsc.ic.unicamp.br
Exerc.: Escrever um modelo para um latch tipo D
Library ieee;
use ieee.std_logic;
entity latch_d is
port (dado, enable : in std_logic;
q, notq : out std_logic);
end latch_d;architecture rtl of latch_d is
begin
latch: process
begin
wait until enable = ‘1’
q <= dado;
notq <= not dado;
end process latch;
end rtl;
![Page 82: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/82.jpg)
82
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Comandos seqüenciais
• Chamada de procedimentos (também concorrente)• Assertion (também concorrente)• Assinalamento de sinal (também concorrente)• Assinalamento de variáveis• WAIT• IF, CASE• NEXT• EXIT, RETURN, LOOP• NULL
![Page 83: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/83.jpg)
83
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Atribuição Condicional
• Cláusula IF
• Cláusula WHEN
• Cláusula CASE
![Page 84: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/84.jpg)
84
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Cláusula IF
IF (condição 1) THEN
Cláusula acertiva 1;
ELSEIF (condição 2) THEN
Cláusula acertiva 2;
ELSE
Cláusula acertiva 3;
END IF;
![Page 85: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/85.jpg)
85
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Cláusula IF
Process (acao, cor)
IF cor = verde THEN
acao <= va_em_frente;
ELSEIF cor = amarelo THEN
acao <= atencao;
ELSE
acao <= pare;
END IF;
![Page 86: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/86.jpg)
86
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Cláusula IF
latchD: process (dado,enable)
begin
IF enable = ‘1’ THEN
Q <= dado;
notQ <= not dado
END IF;
end process latchD;
![Page 87: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/87.jpg)
87
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Cláusula IF
Architecture rtl of is
signal prec : std_ulogic;
signal Xsp : std_logic_vector(7 downto 0) := “00000000”;
begin
process(clk)
begin
if (clk´event and clk´last_value = ‘0’ and clk = ‘1’) then
if en_sr = ‘0’ then
ultimo_bit <= Xsp(7);
Xsp(7 downto 1) <= Xsp(6 downto 0);
Xsp(0) <= IO;
elseif em_load = ‘1’ then
Xsp <= bus_data;
end if; end if;
end process;
end rtl;
-- Conversor paralelo/serie-- Conversor paralelo/serie
-- shift right-- shift right
-- carga paralela-- carga paralela
![Page 88: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/88.jpg)
88
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Escrever o processo de um contador de 4 bits
Architecture rtl of contador is
signal cont : unsigned(3 downto 0) := “0000”;
begin
process(reset,clk)
begin
if reset = ‘1’ then
cont <= “0000”;
elseif (clk´event and clk = ‘1’) then
if enable = ‘1’ then
if incr = ‘1’ then cont <= cont + “0001”;
else cont <= cont - “0001”;
end if;
end if;
end if; end process; end rtl;
![Page 89: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/89.jpg)
89
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Cláusula When (concorrente)
Atribuição WHEN condição
sinal <= atribuição WHEN valor_expressão
Exemplo:
acao <= prosseguir WHEN sinal_verde;
![Page 90: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/90.jpg)
90
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Seletor
out <= in1 WHEN sel
else in0;
if sel = ‘1’ then
out <= in1;
else
out <= in0;
out <= in0 WHEN sel0 else
in1 WHEN sel1 else
in2 WHEN sel2 else
in3 WHEN sel3 else
inx;
![Page 91: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/91.jpg)
91
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL- Cláusula With (concorrente)
• WITH expressão SELECT
signal <= atribuição WHEN valor_expressão
Exemplo:
WITH cor SELECT
acao <= prosseguir WHEN “verde”,
parar WHEN “vermelho”,
alerta WHEN OTHERS;
![Page 92: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/92.jpg)
92
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL- Cláusula With
with regsel select
z <= A after Tprop when “00’,
B after Tprop when “01”,
C after Tprop when “10”,
D after Tprop when “11”,
“X” after Tprop when others;
![Page 93: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/93.jpg)
93
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL- Cláusula With
signal Y : std_logic_vector(0 to3);
signal opcode : std_logic_vector(0 to 1);
with opcode select
Y <= “0001” when “00”,
“0010” when “01”,
“0100” when “10”,
“1000” when “11”;
![Page 94: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/94.jpg)
94
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL- Exercícios
• Escrever o modelo vhdl de um multiplexador 2x1 com 8 bits de dados
– usando WHEN– usando IF– usando somente comando de atribuição simples
Signal temp : std_logic_vector(7 downto 0);Signal temp : std_logic_vector(7 downto 0);BeginBegin temp <= (s,s,s, others => s); -- s é o sinal de seleçãotemp <= (s,s,s, others => s); -- s é o sinal de seleção y <= (temp and IN1) or (not temp and IN0); y <= (temp and IN1) or (not temp and IN0);
![Page 95: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/95.jpg)
95
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL- Cláusula Case
CASE sinal IS
WHEN “condição 1” => dado <= dado1;
WHEN “condição 2” => dado <= dado2;
WHEN others => dado <= dado3;
END CASE;
![Page 96: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/96.jpg)
96
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL- Cláusula Case
signal p : integer range 0 to 3;
signal y : std_logic_vector(0 to 1);
CASE p IS
WHEN 0 => y <= “10”;
WHEN 1 => y <= A;
WHEN 2 => y <= B
WHEN 3 => y <= “01”;
END CASE;
![Page 97: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/97.jpg)
97
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Comando NULL
• Utilizado no caso de não ser necessário nenhuma ação em uma alternativa que precisa ser coberta
• Exemplo:
case opcode is
when add => Acc := Acc + operando;
when sub => Acc := Acc - operando;
when nop => NULL;
end case;
![Page 98: VHDL - Introdução 1VHDLIntrodução Paulo C. Centoducatte ducatte@ic.unicamp.br fevereiro de 2005](https://reader036.vdocuments.site/reader036/viewer/2022062512/552fc10b497959413d8c1127/html5/thumbnails/98.jpg)
98
VHDL - Introdução
http://www.lsc.ic.unicamp.br
VHDL - Exercício
• Utilizado o comando case escreva um conversor do código binário para o código Gray