1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software...

99
1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: [email protected] URL: http://w3.ualg.pt/~jmcardo 2005

Transcript of 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software...

Page 1: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

1

Linguagens de Descrição de HardwareVHDLFoco: Síntese Lógica

Integração Hardware-Software

João M. P. CardosoEmail: [email protected]: http://w3.ualg.pt/~jmcardo

2005

Page 2: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

2

Modelação de Sistemas Digitais Razões para modelar

Especificação dos requisitos documentação Teste utilizando simulação Verificação formal síntese

Objectivo Processo de desenho mais fiável, com custo

e tempo mínimos Fuga aos erros de desenho!

Page 3: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

3

Modelação de Sistemas Digitais Linguagens de Programação de

HardwareVHDL (VHSIC Hardware Description

Language)• VHSIC: Very High Speed Integrated

CircuitVerilog

Page 4: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

4

Domínios e Níveis de Modelação

high level of abstraction

FunctionalStructural

Geometric “Y-chart” due to Gajski & Kahn

low level of abstraction

Page 5: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

5

Domains and Levels of Modeling

FunctionalStructural

Geometric “Y-chart” due to Gajski & Kahn

Algorithm(behavioral)

Register-TransferLanguage

Boolean Equation

Differential Equation

Page 6: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

6

Domains and Levels of Modeling

FunctionalStructural

Geometric “Y-chart” due to Gajski & Kahn

Processor-MemorySwitch

Register-Transfer

Gate

Transistor

Page 7: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

7

Domains and Levels of Modeling

FunctionalStructural

Geometric “Y-chart” due to Gajski & Kahn

Polygons

Sticks

Standard Cells

Floor Plan

Page 8: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

8

Conceitos básicos de VHDL

Interfaces Comportamento (behavior) Estrutura Conjuntos de teste (Test Benchs) Análise, elaboração, simulação Síntese

Page 9: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

9

Interfaces de Modelação

Declaração da EntityDescreve as entradas/saídas de cada módulo

entity reg4 isport ( d0, d1, d2, d3, en, clk : in bit;

q0, q1, q2, q3 : out bit );end reg4;

entity name port names port mode (direction)

port typereserved words

punctuation

Page 10: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

10

Modelação do Behavior

Corpo da Architecture Descreve uma implementação da entity Podem ser várias por entity

Arquitectura Behavioral Descreve o algoritmo realizado pelo módulo contém

• process statements, cada contém• sequential statements, incluindo• signal assignment statements e• wait statements

Page 11: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

11

Exemplo de Behaviorarchitecture behav of reg4 isbegin

storage : processvariable stored_d0, stored_d1, stored_d2, stored_d3 : bit;

beginif en = '1' and clk = '1' then

stored_d0 := d0; stored_d1 := d1; stored_d2 := d2; stored_d3 := d3;

end if;q0 <= stored_d0 after 5 ns;

q1 <= stored_d1 after 5 ns; q2 <= stored_d2 after 5 ns; q3 <= stored_d3 after 5 ns;

wait on d0, d1, d2, d3, en, clk;end process;

end behav;

Page 12: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

12

Modelação de Estruturas

Structural architecture Implementa o módulo como uma

composição de sub-sistemas contém

• signal declarations, para interligações internas• Portos da entity são também tratados como sinais

• component instances• Instâncias de pares entity/architecture previamente

declarados• port maps em component instances

• Conecta sinais a portos dos componentes

Page 13: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

13

Exemplo de Estrutura

int_clk

d0

d1

d2

d3

en

clk

q0

q1

q2

q3

bit0d_latchd

clk

q

bit1d_latchd

clk

q

bit2d_latchd

clk

q

bit3d_latchd

clk

q

gateand2

a

b

y

Page 14: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

14

Exemplo de Estrutura Declarar primeiro entidades e arquitecturas

para o D-latch e and-gateentity d_latch is

port ( d, clk : in bit; q : out bit );end d_latch;

architecture basic of d_latch isbegin

latch_behavior : process (clk, d)begin

if clk = ‘1’ thenq <= d after 2 ns;

end if;end process;

end basic;

entity and2 isport ( a, b : in bit; y : out bit );

end and2;

architecture basic of and2 isbegin

and2_behavior : process (a, b)begin

y <= a and b after 2 ns;end process;

end basic;

Page 15: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

15

Exemplo de Estrutura

Declarar os componentes correspondentes no corpo da arquitectura do registo

architecture struct of reg4 iscomponent d_latch

port ( d, clk : in bit; q : out bit );end component;component and2

port ( a, b : in bit; y : out bit );end component;signal int_clk : bit;

...

Page 16: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

16

Exemplo de Estrutura

Utilizá-los para implementar o registo

...begin

bit0 : d_latchport map ( d0, int_clk, q0 );

bit1 : d_latchport map ( d1, int_clk, q1 );

bit2 : d_latchport map ( d2, int_clk, q2 );

bit3 : d_latchport map ( d3, int_clk, q3 );

gate : and2port map ( en, clk, int_clk );

end struct;

Page 17: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

17

Exemplo de Estrutura

Configurar os modelos: necessário quando temos mais do que um modelo para cada entidade

configuration basic_level of reg4 isfor struct

for all : d_latchuse entity work.d_latch(basic);

end for;for all : and2

use entity work.and2(basic)end for;

end for;end basic_level;

Page 18: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

18

Mistura de comportamento e estrutura Uma arquitectura pode ser descrita com

comportamentos e estruturas Instruções process e instâncias de

componentes Processos podem ler e atribuir sinais

Exemplo: modelo register-transfer-level (RTL) Data-path é descrito estruturalmente Unidade de controlo descrita

comportamentalmente

Page 19: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

19

Exemplo com mistura

shift_reg

reg

shift_adder

control_section

multiplier multiplicand

product

Page 20: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

20

Exemplo com misturaentity multiplier is

port ( clk, reset : in bit;multiplicand, multiplier : in integer;product : out integer );

end multiplier;

architecture mixed of mulitplier is-- falta declaração de componentessignal partial_product, full_product : integer;signal arith_control, result_en, mult_bit, mult_load : bit;

beginarith_unit : shift_adder

port map ( addend => multiplicand, augend => full_product,sum => partial_product, add_control => arith_control );

result : regport map ( d => partial_product, q => full_product,

en => result_en, reset => reset );...

Page 21: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

21

Exemplo com mistura

…multiplier_sr : shift_reg

port map ( d => multiplier, q => mult_bit,load => mult_load, clk => clk );

product <= full_product;

control_section : process-- variable declarations for control_section-- …

begin-- sequential statements to assign values to control signals-- …wait on clk, reset;

end process;end mixed;

Page 22: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

22

Bancada de teste

Testar um desenho por simulação Utilizar um modelo de test bench

Um corpo de arquitectura que inclui uma instância do desenho a testar

Aplicar sequências de valores de teste às entradas

Monitorizar valores em sinais de saída• Utilizando o simulador• Ou com um processo que verifica a correcta

operacionalidade

Page 23: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

23

Exemplo de bancada de teste

architecture test_reg4 of test_bench is

-- falta declaração do componente a testar: reg4signal d0, d1, d2, d3, en, clk, q0, q1, q2, q3 : bit;

begindut : reg4

port map ( d0, d1, d2, d3, en, clk, q0, q1, q2, q3 );stimulus : process begin

d0 <= ’1’; d1 <= ’1’; d2 <= ’1’; d3 <= ’1’; wait for 20 ns; en <= ’0’; clk <= ’0’; wait for 20 ns;en <= ’1’; wait for 20 ns;clk <= ’1’; wait for 20 ns;d0 <= ’0’; d1 <= ’0’; d2 <= ’0’; d3 <= ’0’; wait for 20 ns;en <= ’0’; wait for 20 ns;…wait;

end process;end test_reg4;

entity test_bench isend test_bench;

Page 24: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

24

Teste de regressão

Testar se um refinamento do desenho está correcto se um modelo estrutural de mais baixo nível

faz o mesmo que um modelo comportamental

A bancada de teste inclui duas instâncias do desenho em teste Comportamental e estrutural de baixo-nível Simula ambos com as mesmas entradas Verifica igualdade dos resultados

Necessita de ter em conta diferenças temporais

Page 25: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

25

Exemplo de teste de regressão

architecture regression of test_bench is

-- falta declaração do componente a testarsignal d0, d1, d2, d3, en, clk : bit;signal q0a, q1a, q2a, q3a, q0b, q1b, q2b, q3b : bit;

begindut_a : entity reg4(struct)

port map ( d0, d1, d2, d3, en, clk, q0a, q1a, q2a, q3a );dut_b : entity reg4(behav)

port map ( d0, d1, d2, d3, en, clk, q0b, q1b, q2b, q3b );stimulus : process begin

d0 <= ’1’; d1 <= ’1’; d2 <= ’1’; d3 <= ’1’; wait for 20 ns; en <= ’0’; clk <= ’0’; wait for 20 ns;en <= ’1’; wait for 20 ns;clk <= ’1’; wait for 20 ns;…wait;

end process;...

Page 26: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

26

Exemplo de teste de regressão

…verify : process begin

wait for 10 ns;assert q0a = q0b and q1a = q1b and q2a = q2b and q3a = q3b

report ”implementations have different outputs”severity error;

wait on d0, d1, d2, d3, en, clk;end process;

end regression;

Page 27: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

27

Processamento do Desenho

Análise Elaboração Simulação Síntese

Page 28: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

28

Análise

Verifica sintaxe e semântica sintaxe: gramática da linguagem semântica: o sentido do modelo

Analisa cada unidade de desenho em separado Declaração da entity Corpo da architecture … Preferível unidades de desenho em ficheiros

separados Unidades de desenho analisadas são colocadas numa

biblioteca Numa forma interna de implementação dependente A biblioteca corrente é designada por work

Page 29: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

29

Elaboração

“Flattening” da hierarquia do desenho Cria portos Cria sinais e processos no corpo da

arquitectura Para cada instância de um componente,

copia a entity e a architecture instanciada Repete recursivamente

• Corpos de architecture unicamente comportamentais

Resultado final da elaboração Colecção planar de nets de sinais e

processos

Page 30: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

30

Exemplo Elaborado

int_clk

d0

d1

d2

d3

en

clk

q0

q1

q2

q3

bit0d_latchd

clk

q

bit1d_latchd

clk

q

bit2d_latchd

clk

q

bit3d_latchd

clk

q

gateand2

a

b

y

reg4(struct)

Page 31: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

31

Exemplo Elaborado

int_clk

d0

d1

d2

d3

en

clk

q0

q1

q2

q3

bit0

bit1

bit2

bit3

gate

reg4(struct)d_latch(basic)d

clk

q

d_latch(basic)d

clk

q

d_latch(basic)d

clk

q

d_latch(basic)d

clk

q

and2(basic)a

b

yprocess with variables

and statements

Page 32: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

32

Simulação

Execução dos processos no modelo elaborado Simulação de eventos discretos

Tempo avança em passos discretos Quando os sinais mudam de valor - eventos

Um processo é sensível a eventos nos sinais de entrada Especificados em instruções wait ou na lista de

sensibilidades do processo Resume e escalona novos valores nos sinais de

saída• Escalona transacções• Evento num sinal se um novo valor é diferente do valor

antigo

Page 33: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

33

Síntese

Traduz desenho RTL em netlist ao nível da porta lógica

Restrições no estilo de código para o modelo RTL

Dependente da ferramenta de síntese utilizada

Page 34: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

34

Simulação versus Síntese

Todos os desenhos sintetizáveis podem ser simulados

Nem todos os desenhos simuláveis podem ser sintetizáveis

dout <= din after 10 ns;Sintetizável?

Page 35: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

35

Metodologia de desenho básica

Requirements

SimulateRTL Model

Gate-levelModel

Synthesize

Simulate Test Bench

ASIC or FPGA Place & Route

TimingModel Simulate

Page 36: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

36

VHDL

Detalhes sobre a linguagem

Page 37: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

37

Bibliotecas e Pacotes

BibliotecasFornecem um conjunto de desenhos,

componentes, e funções Pacotes (packages)

Fornecem uma colecção de tipos de dados e sub-programas utilizados num desenho

library IEEE;use IEEE.STD_LOGIC_1164.ALL;

Page 38: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

38

Ports

Nomes Letras, dígitos, e/ou underscores Começa sempre com uma letra Não é case-sensitive

Escolha de direcções de ports In: port de entrada Out: port de saída Inout: port bidireccional

Tipos de sinal do port (sugestões): STD_LOGIC STD_LOGIC_VECTOR(<max> DOWNTO/TO <min>)

Page 39: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

39

Signals

Representam fios e elementos de armazenamento num desenho VHDL

Só podem ser declarados dentro de architecture

São associados com um certo tipo de dados

VHDL é uma linguagem fortemente tipificada Apenas é suportada conversão de tipos

explicita

Page 40: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

40

Representações Signal

Em termos físicos os fios não podem ser modelados com exactidão utilizando a representação binária

São necessários outros valores além do ‘0’ e do ‘1’ para representar o estado de um fio

Page 41: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

41

Representações de lógica multi-valor MVL (Multi-Valued Logic)

MVL-4• Forçar ‘1’: ‘1’• Forçar ‘0’: ‘0’• Forçar desconhecido: ‘X’• Forçar alta impedância: ‘Z’

MVL-9• Forçar ‘1’: ‘1’• Forçar ‘0’: ‘0’• Forçar desconhecido: ‘X’• Forçar alta impedância: ‘Z’• Não interessa o valor: ‘-’• Não inicializado: ‘U’• 1 fraco: ‘H’• 0 fraco: ‘L’• Desconhecido fraco: ‘W’

Page 42: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

42

Tipos de Dados pré-definidos Os tipos de dados pré-definidos funcionam

bem para simulação mas não são ideais para síntese

Exemplos de Tipos de dados Bit (1 bit) bit_vector (vector de bits) Integer Real

Outros tipos de dados podem ser definidos pelo utilizador

Page 43: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

43

Tipos de Dados pré-definidos Time: hr, min, sec, ms, us, ns, ps, fs STRING(positivo): array de chars CHARACTER: 7-bit ASCII BIT_VECTOR(natural): Array of bits BIT: ‘0’, ‘1’ REAL: Floating-point POSITIVE: inteiros > 0 NATURAL: inteiros >= 0 INTEGER: 32 ou 64 bits BOOLEAN: True ou false

Page 44: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

44

STD_LOGIC_1164

Pacote standard que implementa um conjunto de tipos de dadosUtiliza MVL-9

IEEE recomenda a utilização dos tipos de dados STD_LOGIC e STD_LOGIC_VECTOR

utilização recomendada pela maioria das ferramentas de síntese

Page 45: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

45

Operadores Lógicos

VHDL suporta AND OR XOR XNOR NOT NAND NOR

VHDL suporta a sobrecarga dos operadores existentes e a criação de novos

Page 46: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

46

Outros operadores

Relacionais = (igualdade) /= (diferente) < (menor que) > (maior que) <= (menor ou igual) >= (maior ou igual)

Deslocamento sll Srl Sla Sra Rol ror

Aritméticos + (adição) - (subtracção) * (multiplicação) / (divisão) mod Rem

outros & (concatenação) abs (valor absoluto) ** (potência)

Page 47: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

47

Instruções de atribuição

X: std_logic Y: std_logic_vector(7 downto 0) Z: integer; Instruções de atribuição de sinais concorrentes

X <= Y AND z; A <= B OR c; (X e A são produzidos concorrentemente)

Atribuição de constantes a sinais X <= ‘0’; X <= ‘1’; X <= ‘Z’; Y <= “00111010”; -- atribui 0x3A a Y Y <= X”3A”; -- atribui 0x3A a Y Y <= X”3” & X”A”; -- atribui 0x3A a Y Z <= 9; -- atribui 9 a Z Y <= (others => ‘0’); -- atribui todos os bits a ‘0’

Joao Cardoso
Aula
Page 48: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

48

Constantes

Exemplos:constant a : integer := 5;constant b: std_logic := ‘1’;constant c: std_logic_vector(3 downto

0) := “0000”;constant d: std_logic_vector(0 to 3) :=

“0000”;constant delay : time := 5 ns;

Page 49: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

49

Arrays

Uma ou mais dimensõesarray (0 to 7) of integer range 0 to

15;type array1 of char is array(1 to 4) of

character;type matrix is array(1 to 4, 1 to 7) of

integer;

Page 50: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

50

Definição de novos tipos de dados type

type gap is range 10 to 100; type word is range -32768 to 32767; type myInteger is range -2147483647 to

2147483647 subtype

subtype G is INTEGER range 0 to 9; subtype word is bit_vector(31 downto 0); subtype myNatural is myInteger range 0 to

myInteger'HIGH;

Page 51: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

51

Definição de novos tipos de dados Enumerados

type color is (white, black, blue, red, yellow);

signal my_color: color;Type instr is (load, store, add, mult);type BOOLEAN is (FALSE, TRUE);type BIT is ('0', '1');

Page 52: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

52

Atributos pré-definidos

‘event Para identificar um evento (mudança de

estado) num sinal Exemplo: clock’event

‘length Exemplo: bus’length

‘range (esquerda downto/to direita) ‘high (valor do limite superior) ‘low (valor do limite inferior) ...

Page 53: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

53

Comentários

Cada linha de comentários é precedida por ”--”Exemplo

• -- exemplo de um comentário

Page 54: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

54

Contador de 0 a 7

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity count is Port ( clk : in std_logic; reset : in std_logic; cnt : out std_logic_vector(2 downto 0));end count;

architecture Behavioral of count issignal cnt1 : std_logic_vector(2 downto 0);

beginprocess(clk, reset)begin if reset = '1' then

cnt1 <= (others => '0'); elsif clk'event AND clk = '1' then

cnt1 <= cnt1 + 1; end if;end process;cnt <= cnt1;

end Behavioral;

• Com std_logic_vector

Page 55: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

55

Contador de 0 a 7

library IEEE;use IEEE.STD_LOGIC_1164.ALL;

entity count is Port ( clk : in std_logic; reset : in std_logic; cnt : out integer range 0 to 7);end count;

architecture Behavioral of count issignal cnt1 : integer range 0 to 7;

beginprocess(clk, reset)begin if reset = '1' then

cnt1 <= 0; elsif clk'event AND clk = '1' then

cnt1 <= cnt1 + 1; end if;end process;cnt <= cnt1;

end Behavioral;

• Com integer

Page 56: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

56

Bancada de teste Declaração de um sinal periódico:

exemplo do relógioLIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.numeric_std.ALL;

ENTITY testbench ISEND testbench;

ARCHITECTURE behavior OF testbench IS

COMPONENT countPORT(clk : IN std_logic;reset : IN std_logic; cnt : OUT std_logic_vector(2 downto 0));END COMPONENT;

SIGNAL clk : std_logic;SIGNAL reset : std_logic;SIGNAL cnt : std_logic_vector(2 downto 0);

SIGNAL clock : std_logic := '0'; -- for simulation

BEGINuut: count PORT MAP(clk => clk,reset => reset,cnt => cnt);

clock <= not clock after 10 ns; -- T = 20nsclk <= clock;

-- *** Test Bench - User Defined Section *** tb : PROCESS BEGIN

reset <= '1';wait for 20 ns;reset <= '0';wait for 200 ns;

--wait; -- will wait forever END PROCESS; -- *** End Test Bench - User Defined Section ***END;

Page 57: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

57

Processos: process

Secções onde a execução é sequencialProcess(........)

• -- declaração de variáveisBegin

• ...– código sequencialEnd process;

Lista de sensibilidades: sinais de entrada do processo

Lista de sensibilidades

Page 58: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

58

Processos: process

Declaração de variáveis (variable) apenas visíveis no escopo do processo

process (A, B, Cin)variable carry : std_logic;

beginS <= A xor B xor Cin;carry := (A and B) or (Cin and B) or (Cin and A);Cout <= carry;

end process;

Atribuição a variáveis utiliza :=

Page 59: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

59

Processos: process

Possibilidade de utilização de instruções de controlo com o modelo imperativo

Condicionais• If: [LABEL:] if expr then ... [{elsif expr then ...}]

[else ... ] end if [LABEL];• Case: [LABEL:] case expr is {when choice [{|

choice}] => ...} end case [LABEL]; Ciclos

• For: [LABEL:] for ID in range loop ... end loop [LABEL];

• While: [LABEL:] [while expr] loop ... end loop [LABEL];

• next [LOOPLBL] [when expr];• exit [LOOPLBL] [when expr];

Page 60: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

60

if

S, temp: std_logic_vector(7 downto 0) Enable: std_logic

process(enable, temp)begin IF enable = ‘0' THEN S <= temp; ELSE S <= "ZZZZZZZZ"; END IF;end process;

Page 61: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

61

case

Descodificador de código BCD para disply de sete segmentos

process(inp_data)begin

case inp_data is when "0000" => out_data <= "0000001";

when "0001" => out_data <= "1001111"; when "0010" => out_data <= "0010010"; when "0011" => out_data <= "0000110"; when "0100" => out_data <= "1001100"; when "0101" => out_data <= "0100100"; when "0110" => out_data <= "0100001"; when "0111" => out_data <= "0001111"; when "1000" => out_data <= "0000000"; when "1001" => out_data <= "0000100";when others => out_data <= "1111111";end case;

end process;

Descodificador deBCD para 7–segmentos

c0 c1 c2 c3 c4 c5 c6

A B C D

c1c5

c2c4 c6

c0

c3

when others => out_data <= “-------";

Page 62: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

62

for

Tris, A, tris: std_logic_vector(7 downto 0)

process(tris, A)begin for i in 0 to 7 loop IF tris(i) = '0' THEN PORTA(i) <= A(i); ELSE PORTA(i) <= 'Z'; END IF; end loop;end process;

Page 63: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

63

while

Tris, A, tris: std_logic_vector(7 downto 0)

process(tris, A)variable i: integer; -- :=0;

begini := 0;

while i <=7 loop IF tris(i) = '0' THEN PORTA(i) <= A(i); ELSE PORTA(i) <= 'Z'; END IF; i := i+1; end loop;end process;

Page 64: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

64

Loop

Tris, A, tris: std_logic_vector(7 downto 0)

process(tris, A)variable i: integer; -- :=0;

begini := 0;

L1: loop IF tris(i) = '0' THEN PORTA(i) <= A(i); ELSE PORTA(i) <= 'Z'; END IF; i := i+1;

exit L1 when i > 7; -- if(i > 7) then return; end if; end loop;end process;

Page 65: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

65

Processos: process

Cuidados com a síntese lógica Ciclos (loops)

Número de iterações tem de ser conhecido estaticamente

A ferramenta de síntese lógica desenrola completamente os ciclos

Não consegue gerar uma arquitectura com controlo (essa síntese chama-se de síntese de alto-nível)

Page 66: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

66

Processos: variables versus signals Variables

Actualizadas instantaneamente

Signals Actualizados no

fim do processo

Page 67: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

67

Processos: variables versus signalsentity xor_sig isport (A, B, C: in STD_LOGIC;

X, Y: out STD_LOGIC);end xor_sig;architecture SIG_ARCH of xor_sig issignal D: STD_LOGIC;begin

SIG:process (A,B,C)begin

D <= A; -- ignored !!X <= C xor D;D <= B; -- overrides !!Y <= C xor D;

end process;end SIG_ARCH;

entity xor_var isport (A, B, C: in STD_LOGIC;X, Y: out STD_LOGIC);end xor_var;architecture VAR_ARCH of xor_var isbegin

VAR:process (A,B,C)variable D:

STD_LOGIC;begin

D := A;X <= C xor D;D := B;Y <= C xor D;

end process;end VAR_ARCH;

Page 68: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

68

Exemplo: somador de 4 bits

library IEEE;use IEEE.std_logic_1164.all;

entity adder isport(A, B: in std_logic_vector(3 downto 0);Cin: in std_logic;S : out std_logic_vector(3 downto

0);Cout: out std_logic);

end adder;

Page 69: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

69

Exemplo: somador de 4 bits

architecture comportamental of adder issignal S0: std_logic_vector(4 downto 0);

BeginS0 <= ('0' & A) + ('0' & B) + Cin;S <= S0(3 downto 0);Cout <= S0(4);

end comportamental;

use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

Page 70: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

70

Exemplo: somador de 4 bits

architecture comportamental of adder issignal S0: std_logic_vector(4 downto 0);

BeginS0 <= ('0' & A) + ('0' & B) + Cin;S <= S0(3 downto 0);Cout <= S0(4);

end comportamental;

Page 71: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

71

Exemplo: somador de 4 bits

architecture estrutural of adder iscomponent FullAdder

port (A , B, CI: in std_logic;CO, S : out std_logic );

end component;signal cin_temp: std_logic_vector(4 downto 0);

begincin_temp(0) <= Cin;

gen: for i in 0 to 3 generateFA: FullAdder port map(A=>A(i), B=>B(i), Cin=>cin_temp(i), Cout=>cin_temp(i+1), S=>S(i));

end generate gen;

Cout <= cin_temp(4);end estrutural;

ab Cout

sFA1Cin

ab Cout

sFA2Cin

a2

b2

s2

s3

a1

b1

s1

a0

b0

s0ab Cout

sFA0CinCin

ab Cout

sFA3Cin

Couta3

b3

Page 72: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

72

Exemplo: somador de 4 bits

Full Adder (FA)

ab Cout

sFACin

a s

b

Cout

Cin

Page 73: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

73

Exemplo: somador de 4 bits

Full Adder (FA)entity FullAdder is

port (A , B, Cin: in std_logic;Cout, S : out std_logic );

end FullAdder;

architecture logic of FullAdder isBegin

process (A, B, Cin)variable carry : std_logic;

beginS <= A xor B xor Cin;Cout <= (A and B) or (Cin and b) or (Cin and a);

end process;end logic;

ab Cout

sFACin

a sb

Cout

Cin

Page 74: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

74

Exemplo: somador de N bits?

Utilização de parâmetros

entity adder isgeneric(N: integer := 8);port(A, B: in std_logic_vector(N-1 downto 0);Cin: in std_logic;S : out std_logic_vector(N-1 downto 0);Cout: out std_logic);

end adder;

Por omissão N=8

Page 75: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

75

Exemplo: somador de N bits?

architecture comportamental of adder_param issignal S0: std_logic_vector(N downto 0);

BeginS0 <= ('0' & A) + ('0' & B) + Cin;S <= S0(N-1 downto 0);Cout <= S0(N);

end comportamental;

Page 76: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

76

Exemplo: somador de N bits?

architecture estrutural of adder_param iscomponent FullAdder

port (A , B, Cin: in std_logic;Cout, S : out std_logic );

end component;

signal cin_temp: std_logic_vector(N downto 0);Begin

cin_temp(0) <= Cin;gen: for i in 0 to N-1 generate

FA: FullAdder port map(A=>A(i), B=>B(i), Cin=>cin_temp(i), Cout=>cin_temp(i+1), S=>S(i));

end generate gen;Cout <= cin_temp(N);

end estrutural;

Instrução para gerar N instâncias do FullAdder

Page 77: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

77

Parâmetros

Como redefinir o valor dos parâmetros para cada instância do componente?ADD1: adder generic map(32) port

map(A1, B1, Cin1, S1, Cout1)ADD2: adder generic map(8) port

map(A2, B2, Cin2, S2, Cout2)

Page 78: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

78

Parâmetros

Declarados como generic na entity Ou num package como constantes Utilização de duas instruções para

gerar instânciasFor ... Generate : instrução cíclicaIf ... generate : geração condicional

Page 79: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

79

Exemplo: Máquina de Bebidas Disponibiliza a lata depois de 150 ou

mais escudos terem sido depositados Uma única abertura para moedas

(50$00 e 100$00) Não dá troco

FSMda máquina

debebidas

CEM

CINQ

Reset

Clock

AbreSensorde

MoedasMecanismo

deLibertar Lata

Page 80: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

80

Exemplo: Máquina de Bebidas Tabela e Diagrama de Estados

0$

Reset

50$

CINQ

CINQ

CEM + CINQ

100$

CEM

150$[open]

CEM

Tabela de estados Simbólica

Estado Entrada Próx. SaídaActual CEMCINQ Estado open 0$ 0 0 0$ 0

0 1 50$ 01 0 100$ 01 1 – –

50$ 0 0 50$ 00 1 100$ 01 0 150$ 01 1 – –

100$ 0 0 100$ 00 1 150$ 01 0 150$ 01 1 – –

150$ – – 150$ 1

Page 81: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

81

Exemplo: Máquina de Bebidas

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity fsm is Port ( clk : in std_logic; reset : in std_logic; CEM : in std_logic; CINQ : in std_logic; s_open : out std_logic);end fsm;

architecture Behavioral of fsm istype state_type is (zero, cinquenta, st_cem, cent_cinq);signal current_state, next_state: state_type;

beginprocess(reset, clk)begin if reset = '1' then current_state <= zero; elsif clk'event AND clk='1' then current_state <= next_state; end if;end process;

process(current_state, CEM, CINQ) begin s_open <= '0'; case current_state is when zero =>

if CINQ = '1' then next_state <= cinquenta; elsif CEM = ‘1’ then next_state <= st_cem;

else next_state <= zero; end if; when cinquenta => if CINQ = '1' then next_state <= st_cem;

elsif CEM = '1' then next_state <= cent_cinq;else next_state <= cinquenta; end if;

when st_cem => if CINQ = '1' OR CEM = '1' then next_state <= cent_cinq;

else next_state <= st_cem; end if;when cent_cinq =>s_open <= '1'; next_state <= zero;

when others =>next_state <= zero;

end case;end process;end Behavioral;

Page 82: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

82

Funções e Procedimentos

Corpo executa sequencialmente Permitem declaração de variáveis locais

Funções: devolvem dados utilizando a instrução returnfunction allzero(A: std_logic_vector(7 downto 0)) return std_logic is

variable val: std_logic;Begin

…Return Val;

End allzero;

Procedimentos: devolvem dados através de variáveis de saída nos argumentos

procedure allzero(A: in std_logic_vector(7 downto 0), O: out std_logic) isBegin

O := …;End allzero;

Page 83: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

83

Redefinição de funções e procedimentos Exemplo:

function max(A, B: myType) return myType;

function max(A, B, C: myType) return myType;

Page 84: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

84

Sobrecarga de operadores

Exemplo: function "+"(L: UNSIGNED; R: UNSIGNED) return UNSIGNED; function "+"(L: SIGNED; R: SIGNED) return SIGNED; function "+"(A,B: myType) return myType;

function "+"(L: UNSIGNED; R: UNSIGNED) return UNSIGNED isconstant length: INTEGER := max(L'length, R'length);

begin return unsigned_plus(CONV_UNSIGNED(L, length), CONV_UNSIGNED(R, length));

end;

function "+"(L: SIGNED; R: SIGNED) return SIGNED isconstant length: INTEGER := max(L'length, R'length);

begin return plus(CONV_SIGNED(L, length), CONV_SIGNED(R, length));

end; ...

Page 85: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

85

Packages

library IEEE; use IEEE.std_logic_1164.all;

package aritmetica is function allzero(A: std_logic_vector(7 downto 0)) return std_logic; function "+"(A,B: std_logic_vector(7 downto 0)) return std_logic_vector; …

end aritmetica; package body aritmetica is

function allzero(A: std_logic_vector(7 downto 0)) returnstd_logic is

variable Z: std_logic; begin if (A = "00000000") then Z := '1'; else Z := '0'; end if; return(Z);end allzero;…

end aritmetica;

Page 86: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

86

Packages Exemplo:library IEEE;use IEEE.std_logic_1164.all;

package rom isconstant ROM_WIDTH: integer := 12;constant ROM_LENGTH: integer := 135;subtype ROM_WORD is std_logic_vector (ROM_WIDTH-1 downto 0);subtype ROM_RANGE is integer range 0 to ROM_LENGTH-1;type ROM_TABLE is array (0 to ROM_LENGTH-1) of ROM_WORD;constant ROM: ROM_TABLE := ROM_TABLE'(

ROM_WORD'("000000000000"),ROM_WORD'("000001000000"),ROM_WORD'("000000000010"),...ROM_WORD'("000000000000"),ROM_WORD'("000000000000"));

end rom;

Utilização da package:Library work;Use work.rom.all;

Page 87: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

87

Outras potencialidades

Ficheirosutilizados para simulaçãocomo armazenamento de dados de

memórias Etc.

Page 88: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

88

Síntese

Gera a estrutura de um circuitoA partir do código VHDLUtiliza os componentes existentes

numa biblioteca (portas lógicas, unidades aritméticas, etc.)

Inferência de determinados componentes com base na descrição VHDL

Page 89: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

89

Síntese: Inferência

Largura em bits numa linhaNúmero de bits atribuído a um sinal

ou portoExemplo: Port A: in integer range 0

to 15;• Síntese atribui 4 bits a A

Page 90: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

90

Síntese: Inferência

A, B, S: std_logic_vector(7 downto 0)

S <= A + B; Síntese atribui um somador de 8

bits sem sinal S <= SIGNED(A) + SIGNED(B);

Síntese atribui um somador de 8 bits com sinal

SIGNED é uma função da package STD_LOGIC_ARITH da biblioteca IEEE Converte std_logic_vector em

representação de inteiros com sinal: signed

Page 91: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

91

Síntese: Inferência

Flip Flop com reset assíncronoprocess(reset, clk)Begin if(reset = '1') then

Q <= '0'; elsif(clk'event and clk='1') then Q <= D; End if;

end process;

Page 92: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

92

Síntese: Inferência

Flip Flop com reset síncronoprocess(reset, clk)begin

if(clk'event and clk='1') then if(reset = '1') then

Q <= '0'; else

Q <= D; end if; End if;

end process;

Page 93: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

93

Síntese: Inferência

Latchprocess(load, D)begin

if(load = '1') then Q <= D;

end if; end process;

Page 94: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

94

Síntese: Inferência

Multiplexadorprocess(sel, D1, D2)begin

if(sel = '1') then Q <= D1;else Q <= D2;

end if; end process;

Page 95: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

95

Síntese: Inferência

Flip-Flop com sinal de loadprocess(reset, clk, load) begin

if(reset = '1') then Q <= '0';elsif(clk'event and clk='1') then if(load = '1') then

Q <= D; end if;End if;

end process;

Page 96: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

96

Síntese: Inferência

tabelas de valores: ROMs ou portas lógicas

library IEEE;use IEEE.std_logic_1164.all;

entity tabela isport (ADDR : in INTEGER range 0 to 3;

DATA : out STD_LOGIC_VECTOR (1 downto 0));end tabela ;

architecture description of tabela issubtype ROM_WORD is STD_LOGIC_VECTOR (1 downto 0);type ROM_TABLE is array (0 to 3) of ROM_WORD;constant ROM : ROM_TABLE := ROM_TABLE’(

ROM_WORD’("01"),ROM_WORD’("00"),ROM_WORD’("10"), ROM_WORD’("11"));

beginDATA <= ROM(ADDR); -- Read from the ROM

end description ;

Page 97: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

97

Síntese: Inferência

Distributed RAMs...process (clk)

beginif (clk'event and clk = '1') thenif (we = '1') thenRAM(conv_integer(a)) <= di;end if;end if;end process;do <= RAM(conv_integer(a));

...Read assíncrono

Page 98: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

98

Síntese: Inferência

Block RAMs...process (clk)

beginif (clk'event and clk = '1') thenif (we = '1') thenRAM(conv_integer(a)) <= di;end if;index <= conv_integer(a);end if;end process;do <= RAM(index);

...Read síncrono

Page 99: 1 Linguagens de Descrição de Hardware VHDL Foco: Síntese Lógica Integração Hardware-Software João M. P. Cardoso Email: jmcardo@ualg.ptjmcardo@ualg.pt URL:

99

Comentários

VHDL é uma linguagem definida para simulação de sistemas digitais Inclui muitas formas de especificação não

suportadas por ferramentas de síntese No projecto de sistemas digitais com síntese

lógica utiliza-se um sub-conjunto de VHDL boa regra de descrição: evitar código ao

qual não associamos um tipo de estrutura de hardware