65
Validação de VHDL: técnicas e ferramentas Alexandre Amory ([email protected] )

Validação de VHDL: técnicas e ferramentas Alexandre Amory ([email protected])

Embed Size (px)

Citation preview

Page 1: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

Validação de VHDL:técnicas e ferramentas

Alexandre Amory

([email protected])

Page 2: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

2V

alid

ação

de

HD

LV

alid

ação

de

HD

LTópicos Abordados

Técnicas• Práticas Básicas

• Design for Portability

• Design for Synthesis

• Design for Verification

– VHDL comportamental

• Técnicas de Verificação

– Arquiteturas de TB

• Automatização

Ferramentas

• FPGA Advantage

• Co-sim

• ModelSim

• LeonardoSpectrum

• Quartus

Exemplos

• somador

• sqrt

• polígonos

• wrapper

Page 3: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

3V

alid

ação

de

HD

LV

alid

ação

de

HD

L

scr i

pts

Fluxo de Projeto Simplificado

especificação

descrição do HDL

verificação funcional

sínteselógica

verificação temporal

síntesefísica

prototipação

•guidelines•estílo

•Modelsim/co-sim•TB estruturado•qualidade•Leonardo

•Modelsim•ganho de tempo•re-utiliza TB•Chipscope•SignalTap

Page 4: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

4V

alid

ação

de

HD

LV

alid

ação

de

HD

LReferências

• Writing Testbenches [621.38173 B496w]

– ferramentas de verificação– HDL comportamental– arquitetura de testbenches– tipos de geradores de estímulos e avaliadores de respostas

• Reuse Methodology Manual [621.38173 K25r]

– guidelines• System-on-chip Verification [004.16 R224s]

– validação no nível de sistema– co-verificação

• Manual do Modelsim/FLI• Diversos livros de VHDL

– guidelines para síntese

Page 5: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

5V

alid

ação

de

HD

LV

alid

ação

de

HD

LReferências

• Principles of Testing Electronic Systems [621.381548 M929p]

– TextBook de Teste– Geradores de estímulos e compactadores de respostas

embutidos: LFSR, MISR entre outros• Essentials of Electronic Testing [621.38173 B978e]

– TextBook de Teste• A Designer’s Guide to Built-In Self-Test [621.381 s925d]

• Muitos Outros

Page 6: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

Técnicas de Verificação

Alexandre Amory

([email protected])

Page 7: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

7V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification• Técnicas de Verificação• Ferramentas

Page 8: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

8V

alid

ação

de

HD

LV

alid

ação

de

HD

LIntrodução

• Porque devo me importar com verificação?– Porque você tem que fazer algo que funcione!!! Óbvio!!!– Porque você não tem todo o tempo do mundo para terminar

o projeto• Porque devo fazer um testbench que leva mais tempo para

fazer e é mais complicado?

– Economia de tempo BURRA !!!!– Efeito “bola de neve”

• 70% do tempo de projeto é para verificação

Page 9: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

9V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification• Técnicas de Verificação• Ferramentas

Page 10: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

10V

alid

ação

de

HD

LV

alid

ação

de

HD

LPráticas Básicas

• Convenções de nomes (sinais, entidades, arquivos, etc)• Incluir headers nos fontes

– descrição (func, autor, versão, etc)– formato e temp. de entrada e saída– histórico

• Comentários (inglês)• Indentação• Instanciação (associação por nomes)• Uma linha por comando/declaração

DISCIPLINA !!!

Page 11: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

11V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification• Técnicas de Verificação• Ferramentas

Page 12: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

12V

alid

ação

de

HD

LV

alid

ação

de

HD

LDesign for Portability

• Usar tipos baseados nos tipos padrões IEEE– std_logic x std_ulogic

• Não usar valores fixos na descrição– use generic ou constant

• Evitar código dependente de tecnologia– usar e abusar de regras de inferência (ISE e Quartus)– se for inevitável, descreva-o em uma entidade separada

• Não se vicie num único conjunto de ferramentas– simule com diversos simuladores– sintetize para targets diferentes

DISCIPLINA !!!

Page 13: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

13V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification• Técnicas de Verificação• Ferramentas

Page 14: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

14V

alid

ação

de

HD

LV

alid

ação

de

HD

LRegras de Clock

• Evite utilizar duas bordas– isto é necessário somente para projetos com restrições de

timing rigorosas– complica testabilidade (criação de cadeias diferentes por

borda)– complica timing analysis (duty cycle torna-se crítico)

• Evitar gated clocks• Evitar clocks e resets gerados internamente

Page 15: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

15V

alid

ação

de

HD

LV

alid

ação

de

HD

LInferência de Registradores

reset síncrono

process(clk)

begin

if clk’event and clk = ‘1’ then

if rst = ‘1’ then

...

else

...

end if;

end if;

end process;

reset assíncrono

process(clk,rst)

begin

if rst = ‘1’ then

...

elsif clk’event and clk = ‘1’ then

...

end if;

end process;

Page 16: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

16V

alid

ação

de

HD

LV

alid

ação

de

HD

LInferência de Máquina de Estados

architecture ....type state is (S0,S1,S2,S3);signal ea,pe : state;...comb_proc: process(inputs,ea)begin

case (ea) iswhen S0 =>

outputs <= input +1;...pe <= S1;

when S1 =>when S2 =>when S3 =>when others =>

end case;end process;

synch_proc : process (rst,clock)

begin

if rst = ‘1’ then

ea <= S0;

elsif clk’event and clk = ‘1’ then

ea <= pe;

end if;

end process;

2 processos

Page 17: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

17V

alid

ação

de

HD

LV

alid

ação

de

HD

LInferência de Máquina de Estados

architecture ....type state is (S0,S1,S2,S3);signal ea,pe : state;...trans_proc: process(inputs,ea)begin

case (ea) iswhen S0 =>

pe <= S1;when S1 =>when S2 =>when S3 =>when others =>

end case;end process;

synch_proc : process (rst,clock)

begin

if rst = ‘1’ then

ea <= S0;

elsif clk’event and clk = ‘1’ then

ea <= pe;

end if;

end process;

comb_proc: outputs <= inputs + 1 when ea = S1 else (others => ‘0’);

3 processos

Page 18: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

18V

alid

ação

de

HD

LV

alid

ação

de

HD

LEvitar Latches

Maus exemplos:

process (a,b)

begin

if (a = ‘1’) then

q <= b;

end if;

end process;

process(c)

begin

case c is

when ‘0’ => q <= ‘1’; z <= ‘0’;

when others => q <= ‘0’;

end case;

end process;

• Exemplo1 falta else• Exemplo2 falta atribuição de z

quando c é diferente de ‘0’.

• Para evitar:• atribua valores default as saídas• process(inputs,state)• begin

– outpus <= ‘0’;– case (state)– ...– end case;

• end process;

Page 19: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

19V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification

– VHDL comportamental• Técnicas de Verificação• Ferramentas

Page 20: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

20V

alid

ação

de

HD

LV

alid

ação

de

HD

LTeste x Verificação

• Verificação– usado para verificar se o projeto está de acordo com o desejado– objetivo é verificar a funcionalidade– a ferramenta mais utilizada é o simulador

• Teste– usado para verificar a fabricação do dispositivo– objetivo não é verificar a funcionalidade– objetivo é exercitar as nós físicos do sistema

• nós devem ir de 0 para 1 ou de 1 para 0

– usa padrões específicos para exercitar estes nós• estes padrões são gerados por ferramenta de ATPG (automatic test

pattern generation )

Page 21: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

21V

alid

ação

de

HD

LV

alid

ação

de

HD

LControlabilidade e Observabilidade

• Alguns projetos podem ter pontos onde é:– difícil de colocar em um valor determinado

• difícil controlabilidade

– difícil de ler seu valor pelas portas de saída• difícil observabilidade

• Alguma vez você já teve que colocar mais portas de entrada ou de saída no top, para controlar ou para receber seu valor de um circuito ? – Imagine que este circuito está bem “escondido” lá no 7º

nível de hierarquia do seu projeto ???? Oque você faria ???– Teria que modificar todas as entidades superiores ao nível

Page 22: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

22V

alid

ação

de

HD

LV

alid

ação

de

HD

LSignalSpy e Sinal Global

• SignalSpy é um recurso do Modelsim que permite acesso a sinais internos da UUT

• uso:– Signal_Spy("/uut/sum", "/buried_sum");

• Sinais globais podem ser utilizados nos níveis inferiores do projeto

library ieee;

use ieee.std_logic_1164.all;

package global_sigs is

signal sum_int : integer range 0 to 255;

signal maximum : bit;

end;

Page 23: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

23V

alid

ação

de

HD

LV

alid

ação

de

HD

LExemplo de Sinal Global

ENTITYlibrary IEEE;

use IEEE.std_logic_1164.all;

use work.global_sigs.all;

entity adder is

port (...);

end adder;

architecture behavioral of adder is

begin

vsum <= a + b;

sum <= vsum;

...

end architecture

TBlibrary IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use work.global_sigs.all;

architecture adder of testbench is

component adder

port (...);

end component;

begin

...

value_vsum <= vsum;

...

end architecture;

Page 24: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

24V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification

– VHDL comportamental• Técnicas de Verificação• Ferramentas

Page 25: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

25V

alid

ação

de

HD

LV

alid

ação

de

HD

LVHDL Comportamental

• VHDL RTL X VHDL comportamental– RTL foca implementação– Comportamental foca comportamento

• não use VHDL RTL para descrever TB– código comportamental é mais rápido de descrever e mais

simples– código comportamental aumenta desempenho da simulação

• descrever sistema e seu TB requer conhecimento de TODA a linguagem VHDL

Page 26: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

26V

alid

ação

de

HD

LV

alid

ação

de

HD

LRTL X Comportamental

Type STATE_TYPE is (...,MAKE_REQ,RELEASE,...);signal STATE, NEXT_STATE : STATE_TYPE;...COMB:process(state,ack)begin

case STATE is...when MAKE_REQ =>

REQ <= ‘1’;if ACK = ‘1’ then

NEXT_STATE <= RELEASE;end if;

...end case;

end process;SEQ: process(clk)begin

if clk’event and clk = ‘1’ thenif reset = ‘1’ then

state <= ....;else

state <= NEXT_STATE;end if;

end if;end process;

req=1 req=0ack==1

ack==0 ack==1

ack==0

processbegin ... req <= ‘1’; wait until ack = ‘1’; req <= ‘0’; wait until ack = ‘0’; ...end process;

Page 27: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

27V

alid

ação

de

HD

LV

alid

ação

de

HD

LVHDL Comportamental

• Algumas estruturas geralmente não utilizadas em código RTL mas úteis em código comportamental são:– funções e procedimentos– tipo string e time– arquivos– registros, matrizes– listas, ponteiros e alocação dinâmica– asserção– outras dicas

Page 28: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

28V

alid

ação

de

HD

LV

alid

ação

de

HD

LFunções e Procedimentos

• Encapsular detalhes de implementação– funções de conversão de tipo– funções de leitura e escrita de arquivo

• encapsula a formatação do arquivo

– encapsular temporização de sinais e barramentos (BFM)

Page 29: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

29V

alid

ação

de

HD

LV

alid

ação

de

HD

LArquivos

• Usar packges para encapsupar detalhes do formato dos arquivos de entrada e saída

package IO_Pack isfile InputFile : TEXT open READ_MODE is ”input.txt";file OutputFile : TEXT open WRITE_MODE is ”output.txt";procedure ReadFile(...);procedure WriteFile(...);

end package;package body IO_Pack is

procedure ReadFile(...) isbegin

...readline(...);read(...);read(...);...

end procedure;procedure WriteFile(...) isbegin

...writeline(...);write(...);write(...);...

end procedure;end package body;

Page 30: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

30V

alid

ação

de

HD

LV

alid

ação

de

HD

LRegistros e Matrizes

EXEMPLO 1type bus_data is array(integer range <>) of

std_logic_vector(31 downto 0);

signal bus_interface busdata(N-1 downto 0);

...

If reset = ‘0’ then

bus_interface <= (others => (others => ‘0’));

else

...

EXEMPLO 2type array1T is array(1 to 2) of natural;

type array2T is array(1 to 1024) of array1T;

...

signal table : array2T

table <= ( others => (0,0));

...

type vector is record

LD : std_logic;

LL : std_logic;

RST : std_logic;

D : std_logic_vector(7 downto 0);

P : std_logic;

end record;

type vectorArrayType is array (0 to TABLE_SIZE) of vector;

constant vectorTable : vectorArrayType := (

-- LD LL RST D P

( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘0’),

( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’),

( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’),

( ‘1’, ‘0’, ‘0’, “00000101” ‘0’),

( ‘0’, ‘1’, ‘0’, “11010100” ‘0’),

( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’),

( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’),

...

);

Page 31: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

31V

alid

ação

de

HD

LV

alid

ação

de

HD

LListas, Ponteiros e Alocação Dinâmica

process

type list_typ;

type list_ptr is access list_typ;

type list_typ is record

base_addr : natural;

data : natural;

next_node : list_ptr;

end record;

variable head : list_ptr;

begin

...

end process;

process

procedure get_data(addr : in natural; here : out list_ptr) is

variable element : list_ptr;

begin

element := head;

-- busca posição

element := new list_typ;

element.base := 123;

element.next_node := head;

element.data := 456;

head := element;

here := element;

end procedure;

begin

...

end process;Fonte: writing testbenches

Page 32: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

32V

alid

ação

de

HD

LV

alid

ação

de

HD

LAsserção

• Útil para comparar valores de saída e parar a simulação em caso de erro

• Exemplo:

Assert (golden_out /= data_out)

report “error in sumulation!!!”

Page 33: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

33V

alid

ação

de

HD

LV

alid

ação

de

HD

LAtributos Pré-Definidos

• Alguns são:

– T’Left

– T’Right

– T’Low

– T’High

– T’Image

– T’ Ascending

procedure lfsr(constant polynomial : in std_logic_vector;

variable sig: inout std_logic_vector) is

variable i : std_logic_vector(polynomial'range) := sig;

begin

i := i(i'left-1 downto 0)&i(i'left);

if sig(sig'left) = '1' then

i := i xor polynomial;

end if;

sig := i;

end procedure;...variable var: integer;...write(outline,”valor = ” & integer'image(var);...

Page 34: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

34V

alid

ação

de

HD

LV

alid

ação

de

HD

LOutras Dicas Gerais

• Como gerar arquivos de saída com nomes diferentes para cada simulação

entity tb is

generic (outputFile: string := "saida”);

end entity

...

file PoligFile : TEXT open READ_MODE is outputFile & ".txt";

...

Page 35: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

35V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification• Técnicas de Verificação

– Tipos de Verificação– Arquiteturas de TestBenches

• Geração de Estímulos

• Avaliação de Respostas

• Referencial

• Ferramentas

Page 36: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

36V

alid

ação

de

HD

LV

alid

ação

de

HD

LTipos de Verificação

• Compliance Testing– verificar projeto de acordo com especificação

• Corner Case– verificar situações críticas do projeto

• Random– complementar aos testes anteriores– cria situações “inusitadas”

• Real Code– utilizar estímulos reais da aplicação

• Regression– evita inserção de novos bugs no sistema

Fonte: reuse methodology manual

Page 37: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

37V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification• Técnicas de Verificação

– Tipos de Verificação– Arquiteturas de TestBenches

• Geração de Estímulos

• Avaliação de Respostas

• Referencial

• Ferramentas

Page 38: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

38V

alid

ação

de

HD

LV

alid

ação

de

HD

LArquiteturas de Testbench

• Principais partes:– geração de estímulos– avaliação/comparação de respostas– UUT– referencial

UUT

testbench

geração de estímulos

avaliação de respostas

referencial

Page 39: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

39V

alid

ação

de

HD

LV

alid

ação

de

HD

LGeração de estímulos

• Origem dos estímulos:

– formas de onda

– de arquivos

– de tabelas

– aleatória

– mista

UUT

testbench

geração de estímulos

avaliação de respostas

referencial

Page 40: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

40V

alid

ação

de

HD

LV

alid

ação

de

HD

LEstímulos Tipo Forma de Onda

process

begin

s <= ‘0’ ; wait for 20 ns;

s <= ‘1’ ; wait for 10 ns;

s <= ‘0’ ; wait for 10 ns;

s <= ‘1’ ; wait for 20 ns;

s <= ‘0’ ; wait for 50 ns;

s <= ‘1’ ; wait for 10 ns;

s <= ‘0’ ; wait for 20 ns;

s <= ‘1’ ; wait for 10 ns;

s <= ‘0’ ; wait for 20 ns;

s <= ‘1’ ; wait for 40 ns;

s <= ‘0’ ; wait for 20 ns;

end process;

viável somente nas primeiras versões de TB

Page 41: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

41V

alid

ação

de

HD

LV

alid

ação

de

HD

LEstímulos de Arquivos

procedure ReadFile() is

variable lineAux : line;

file PatternFile : TEXT open READ_MODE is “inputPattern.txt";

begin

for i in 0 to nPolig-1 loop

readline(PatternFile , lineAux);

read(lineAux,value);

...

end loop;

end procedure;

Vantagem: simples implementação para padrões simples

Desvantagem: •difícil de implementar para padrões complexos•aumenta tempo de simulação devido as chamadas de sistema

Page 42: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

42V

alid

ação

de

HD

LV

alid

ação

de

HD

LEstímulos de Tabela

type vector is record

LD : std_logic;

LL : std_logic;

RST : std_logic;

D : std_logic_vector(7 downto 0);

P : std_logic;

end record;

type vectorArrayType is array (0 to TABLE_SIZE) of vector;

constant vectorTable : vectorArrayType := (

-- LD LL RST D P

( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘0’),

( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’),

( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’),

( ‘1’, ‘0’, ‘0’, “00000101” ‘0’),

( ‘0’, ‘1’, ‘0’, “11010100” ‘0’),

( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’),

( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’),

...

);

Vantagem: menor tempo de simulação que estímulo de arquivo

Desvantagem:

•aumenta tempo de compilação

•consome memória para muitos padrões

Page 43: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

43V

alid

ação

de

HD

LV

alid

ação

de

HD

LComparação entre Estímulos de Arquivo e

de Tabela

Fonte: Modeltech Applications Note 116: VHDL Style Guidelines for Performance

Page 44: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

44V

alid

ação

de

HD

LV

alid

ação

de

HD

LEstímulos de Dados Pseudo-Aleatórios

LFSR padrão

FF3

FF3

FF2

FF2

FF1

FF1

FF0

FF0

clk

UUT

Page 45: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

45V

alid

ação

de

HD

LV

alid

ação

de

HD

LTipos de LFSRs

1 x x2

x3

x4

x2 x 1x4

x3

Polinômio primitivo: P(x) = 1 + x3 + x4

Provê os 2n-1 padrões

Standard LFSR

Modular LFSR

Page 46: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

46V

alid

ação

de

HD

LV

alid

ação

de

HD

LDescrição Comportamental de LFSR Modular

procedure lfsr(constant polynomial : in std_logic_vector;

variable value: inout std_logic_vector) is

variable i : std_logic_vector(sig'range) := value;

begin

i := i(i'left-1 downto 0)&i(i'left);

if value(i'left) = '1' then

i := i xor polynomial;

end if;

value := i;

end procedure;

value: “0111”

i: “1110”

polynomial: “1100”

value: “0010”

Page 47: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

47V

alid

ação

de

HD

LV

alid

ação

de

HD

LGeração de Mista de Estímulos

• Geração pseudo-aletaória pode demorar muito para gerar um padrão específico– geralmente que estimula algum corner case– pode aumentar muito o tempo de simulação

• Nestes casos é desejável utilizar uma geração de estímulo mista– estímulos de tabela + estímulos aleatórios

Page 48: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

48V

alid

ação

de

HD

LV

alid

ação

de

HD

LAvaliação e Comparação de Respostas

• Tipos:– sem comparação (inspeção visual)– usando assert– com compactação de dados– de arquivo– de tabela

UUT

testbench

geração de estímulos

avaliação de respostas

referencial

Page 49: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

49V

alid

ação

de

HD

LV

alid

ação

de

HD

LComparação de Respostas com Assert

• para a simulação se condição for verdadeira• Exemplo:

Assert (golden_out /= data_out)

report “error in sumulation!!!”

• Aplicado somente há sistemas pequeno– validação de operação aritméticas (sqrt)

Page 50: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

50V

alid

ação

de

HD

LV

alid

ação

de

HD

LComparação com Compactação de Dados

• Usa técnica similar ao CRC para diminuir o número de comparações e diminuir o volume da dados de referência

• Utilizar uma variação de LFSR (MISR) para gerar uma assinatura das respostas

Page 51: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

51V

alid

ação

de

HD

LV

alid

ação

de

HD

LMISR

x2 x 1x4

x3

UUT

x2 x 1x4

x3

UUT

Page 52: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

52V

alid

ação

de

HD

LV

alid

ação

de

HD

LDescrição Comportamental de um MISR

procedure misr(constant polynomial : in std_logic_vector;

signal input : in std_logic_vector;

variable sig: inout std_logic_vector) is

variable i : std_logic_vector(sig'range) := sig;

begin

i := i(i'left-1 downto 0)&i(i'left);

i := i xor input;

if sig(i'left) = '1' then

i := i xor polynomial;

end if;

sig := i;

end procedure;

Page 53: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

53V

alid

ação

de

HD

LV

alid

ação

de

HD

LReferencial

• Módulo que produz valores de referencia para o comparador

UUT

testbench

geração de estímulos

avaliação de respostas

referencial

Page 54: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

54V

alid

ação

de

HD

LV

alid

ação

de

HD

LDescrições do Referencial

• pode ser descrito em HDL comportamental

• pode ser descrito em uma linguagem de mais alta abstração

– C, java, SDL, outras

• pode ser um hardware (hard core)

– 8051

• o ambiente de co-simulação pode ser usado para ligar HDL com outras linguagens ou hardware

UUT

estí

mul

os

com

para

ção

TB VHDL

referência(C/Java/SDL)

OK

NOK

sockets

Page 55: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

55V

alid

ação

de

HD

LV

alid

ação

de

HD

LSUMÁRIO

• Introdução• Práticas Básicas• Design for Portability• Design for Synthesis• Design for Verification• Técnicas de Verificação• Ferramentas

Page 56: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

56V

alid

ação

de

HD

LV

alid

ação

de

HD

LTipos de Ferramentas

• Compiladores– modelsim/active

• Simulação funcional/temporal– modelsim/active

• Co-simulação hw/sw• Verificação Formal

– equivalence checking• compara dois modelos

– model checking• procura por violações e problemas genéricos do projeto

• Testbench automation tool

Page 57: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

57V

alid

ação

de

HD

LV

alid

ação

de

HD

LTipos de Ferramentas

• Code coverage– estimativa da qualidade do TB– modelsim/active– 100% não indica um projeto “error free”

• Code Profiling– aumenta o desempenho da simulação– diminui tempo de projeto– quantas vezes você simula seu projeto até que ele funcione

na placa ? • Controle de Revisão e Automatização

– gerenciamento do projeto– CVS e Make

• Emulação• Prototipação

Page 58: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

58V

alid

ação

de

HD

LV

alid

ação

de

HD

LAutomatização

• Baseado no uso de scripts e utilização das ferramentas em batch mode

• Necessidade de uma estrutura padrão de diretórios• Necessidade de modelos de scripts para cada ferramenta

– na apresentação sobre ferramentas de verificação serão apresentados scripts para cada ferramenta

• uso de makefiles para executar scripts

Page 59: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

59V

alid

ação

de

HD

LV

alid

ação

de

HD

LExemplo de Makefile

• comp: teste.vhd– vcom teste.vhd

• simul:– vsim teste.beh

• temp_simul:– vsim teste.beh -sdf

• syn:– spectrum -file syn.tcl

Page 60: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

60V

alid

ação

de

HD

LV

alid

ação

de

HD

LExemplo de Estrutura de Diretório

Makefile

doc

syn (projeto de síntese lógica do Leonardo)

altera (projeto de síntese física da Altera)

xilinx (projeto de síntese física da Xilinx)

simul

model (projeto de simulação do Modelsim)

active (projeto de simulação do Active)

scr

tb

Page 61: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

Exemplos de TestBenchs

Alexandre Amory

([email protected])

Page 62: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

62V

alid

ação

de

HD

LV

alid

ação

de

HD

LTópicos

• sqtr• wrapper• polígonos

Page 63: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

63V

alid

ação

de

HD

LV

alid

ação

de

HD

LSqrt

• Usa lfsr para gerar estímulos• o referencial é comportamental, implementado em uma

biblioteca• testbench com 11 linhas

• arquitetura ideal para validação de operadores aritméticos ou datapaths (seqüência de operações aritméticas)

Page 64: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

64V

alid

ação

de

HD

LV

alid

ação

de

HD

LPolígonos

• Estímulos lidos de arquivo (geração complexa)

• referencial escrito em C

• Valor esperado compactado e gerado por software

• tb aplica estímulos de arquivo e compara compactação feita online com assinatura lida do arquivo

CassinaturaTB VHDL

ok/nok

estímulos

Gerador de polígonos aleatórios

Page 65: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)

65V

alid

ação

de

HD

LV

alid

ação

de

HD

LWrapper

ISCASISCAS

wrapper

LFSR

adaptação

adaptação

Comparação

ok/nok

referencial

Patterns

n

m

32

32

n

m