Você está na página 1de 65

Validao de VHDL: tcnicas e ferramentas

Alexandre Amory (amory@inf.pucrs.br)

Tpicos Abordados
Tcnicas
Ferramentas FPGA Advantage Co-sim ModelSim LeonardoSpectrum Quartus Exemplos somador sqrt polgonos wrapper

Validao de HDL

Prticas Bsicas Design for Portability Design for Synthesis Design for Verification VHDL comportamental Tcnicas de Verificao Arquiteturas de TB Automatizao

Fluxo de Projeto Simplificado


especificao descrio do HDL verificao funcional sntese lgica verificao temporal sntese fsica prototipao

Validao de HDL

guidelines estlo Modelsim/co-sim TB estruturado qualidade Leonardo Modelsim ganho de tempo re-utiliza TB Chipscope SignalTap

Referncias
Writing Testbenches [621.38173 B496w] ferramentas de verificao HDL comportamental arquitetura de testbenches tipos de geradores de estmulos e avaliadores de respostas Reuse Methodology Manual [621.38173 K25r] guidelines System-on-chip Verification [004.16 R224s] validao no nvel de sistema co-verificao Manual do Modelsim/FLI Diversos livros de VHDL guidelines para sntese

Validao de HDL

Referncias
Principles of Testing Electronic Systems [621.381548 M929p] TextBook de Teste Geradores de estmulos e compactadores de respostas embutidos: LFSR, MISR entre outros Essentials of Electronic Testing [621.38173 B978e] TextBook de Teste
A Designers Guide to Built-In Self-Test [621.381 s925d]

Validao de HDL

Muitos Outros

Tcnicas de Verificao

Alexandre Amory (amory@inf.pucrs.br)

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification Tcnicas de Verificao Ferramentas

Validao de HDL

Introduo
Porque devo me importar com verificao? Porque voc tem que fazer algo que funcione!!! bvio!!! Porque voc no tem todo o tempo do mundo para terminar o projeto Porque devo fazer um testbench que leva mais tempo para fazer e mais complicado?

Validao de HDL

Economia de tempo BURRA

!!!!

Efeito bola de neve 70% do tempo de projeto para verificao

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification Tcnicas de Verificao Ferramentas

Validao de HDL

10

Prticas Bsicas
Convenes de nomes (sinais, entidades, arquivos, etc) Incluir headers nos fontes descrio (func, autor, verso, etc) formato e temp. de entrada e sada histrico Comentrios (ingls) Indentao Instanciao (associao por nomes) Uma linha por comando/declarao

Validao de HDL

DISCIPLINA !!!

11

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification Tcnicas de Verificao Ferramentas

Validao de HDL

12

Design for Portability


Usar tipos baseados nos tipos padres IEEE std_logic x std_ulogic No usar valores fixos na descrio use generic ou constant Evitar cdigo dependente de tecnologia usar e abusar de regras de inferncia (ISE e Quartus) se for inevitvel, descreva-o em uma entidade separada No se vicie num nico conjunto de ferramentas simule com diversos simuladores sintetize para targets diferentes

Validao de HDL

DISCIPLINA !!!

13

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification Tcnicas de Verificao Ferramentas

Validao de HDL

14

Regras de Clock
Evite utilizar duas bordas isto necessrio somente para projetos com restries de timing rigorosas complica testabilidade (criao de cadeias diferentes por borda) complica timing analysis (duty cycle torna-se crtico) Evitar gated clocks Evitar clocks e resets gerados internamente

Validao de HDL

15

Inferncia de Registradores
reset sncrono process(clk) begin if clkevent and clk = 1 then if rst = 1 then ... else ... end if; end if; end process; reset assncrono process(clk,rst) begin if rst = 1 then ... elsif clkevent and clk = 1 then ... end if; end process;

Validao de HDL

16

Inferncia de Mquina de Estados


architecture .... type state is (S0,S1,S2,S3); signal ea,pe : state; ... comb_proc: process(inputs,ea) begin case (ea) is when S0 => outputs <= input +1; ... pe <= S1; when S1 => when S2 => when S3 => when others => end case; end process;

2 processos
synch_proc : process (rst,clock) begin if rst = 1 then ea <= S0; elsif clkevent and clk = 1 then ea <= pe; end if; end process;

Validao de HDL

17

Inferncia de Mquina de Estados


architecture .... type state is (S0,S1,S2,S3); signal ea,pe : state; ... trans_proc: process(inputs,ea) begin case (ea) is when S0 => pe <= S1; when S1 => when S2 => when S3 => when others => end case; end process;

3 processos
synch_proc : process (rst,clock) begin if rst = 1 then ea <= S0; elsif clkevent and clk = 1 then ea <= pe; end if; end process;

Validao de HDL

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

18

Evitar 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;

Validao de HDL

Exemplo1 falta else Exemplo2 falta atribuio de z quando c diferente de 0. Para evitar: atribua valores default as sadas process(inputs,state) begin outpus <= 0; case (state) ... end case; end process;

19

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification VHDL comportamental Tcnicas de Verificao Ferramentas

Validao de HDL

20

Teste x Verificao
Verificao 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 fabricao do dispositivo objetivo no verificar a funcionalidade objetivo exercitar as ns fsicos do sistema
ns devem ir de 0 para 1 ou de 1 para 0

Validao de HDL

usa padres especficos para exercitar estes ns


estes padres so gerados por ferramenta de ATPG (automatic test pattern generation )

21

Controlabilidade e Observabilidade
Alguns projetos podem ter pontos onde : difcil de colocar em um valor determinado
difcil controlabilidade

Validao de HDL

difcil de ler seu valor pelas portas de sada


difcil observabilidade

Alguma vez voc j teve que colocar mais portas de entrada ou de sada no top, para controlar ou para receber seu valor de um circuito ? Imagine que este circuito est bem escondido l no 7 nvel de hierarquia do seu projeto ???? Oque voc faria ??? Teria que modificar todas as entidades superiores ao nvel

22

SignalSpy 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 nveis 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;

Validao de HDL

23

Exemplo de Sinal Global


ENTITY
library 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

TB
library 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;

Validao de HDL

24

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification VHDL comportamental Tcnicas de Verificao Ferramentas

Validao de HDL

25

VHDL Comportamental
VHDL RTL X VHDL comportamental RTL foca implementao Comportamental foca comportamento no use VHDL RTL para descrever TB cdigo comportamental mais rpido de descrever e mais simples cdigo comportamental aumenta desempenho da simulao descrever sistema e seu TB requer conhecimento de TODA a linguagem VHDL

Validao de HDL

26

RTL 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 clkevent and clk = 1 then if reset = 1 then state <= ....; else state <= NEXT_STATE; end if; end if; end process;

ack==0

req=1
ack==0

ack==1

req=0
ack==1

Validao de HDL

process begin ... req <= 1; wait until ack = 1; req <= 0; wait until ack = 0; ... end process;

27

VHDL Comportamental
Algumas estruturas geralmente no utilizadas em cdigo RTL mas teis em cdigo comportamental so: funes e procedimentos tipo string e time arquivos registros, matrizes listas, ponteiros e alocao dinmica assero outras dicas

Validao de HDL

28

Funes e Procedimentos
Encapsular detalhes de implementao funes de converso de tipo funes de leitura e escrita de arquivo
encapsula a formatao do arquivo

Validao de HDL

encapsular temporizao de sinais e barramentos (BFM)

29

Arquivos
Usar packges para encapsupar detalhes do formato dos arquivos de entrada e sada
package IO_Pack is file 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(...) is begin ... readline(...); read(...); read(...); ... end procedure; procedure WriteFile(...) is begin ... writeline(...); write(...); write(...); ... end procedure; end package body;

Validao de HDL

30

Registros e Matrizes
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), ... );

EXEMPLO 1
type 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 ...

Validao de HDL

EXEMPLO 2
type array1T is array(1 to 2) of natural; type array2T is array(1 to 1024) of array1T; ... signal table : array2T table <= ( others => (0,0)); ...

31

Listas, Ponteiros e Alocao Dinmica


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 posio 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

Validao de HDL

32

Assero
til para comparar valores de sada e parar a simulao em caso de erro Exemplo: Assert (golden_out /= data_out) report error in sumulation!!!

Validao de HDL

33

Atributos Pr-Definidos
Alguns so: TLeft TRight TLow THigh TImage 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;

Validao de HDL

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

34

Outras Dicas Gerais


Como gerar arquivos de sada com nomes diferentes para cada simulao entity tb is generic (outputFile: string := "saida); end entity ... file PoligFile : TEXT open READ_MODE is outputFile & ".txt"; ...

Validao de HDL

35

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification Tcnicas de Verificao Tipos de Verificao Arquiteturas de TestBenches
Gerao de Estmulos Avaliao de Respostas Referencial

Validao de HDL

Ferramentas

36

Tipos de Verificao
Compliance Testing verificar projeto de acordo com especificao Corner Case verificar situaes crticas do projeto Random complementar aos testes anteriores cria situaes inusitadas Real Code utilizar estmulos reais da aplicao Regression evita insero de novos bugs no sistema

Fonte: reuse methodology manual

Validao de HDL

37

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification Tcnicas de Verificao Tipos de Verificao Arquiteturas de TestBenches
Gerao de Estmulos Avaliao de Respostas Referencial

Validao de HDL

Ferramentas

38

Arquiteturas de Testbench
Principais partes: gerao de estmulos avaliao/comparao de respostas UUT referencial testbench
gerao de estmulos

Validao de HDL

UUT

referencial

avaliao de respostas

39

Gerao de estmulos
Origem dos estmulos: formas de onda de arquivos de tabelas aleatria mista

Validao de HDL

testbench
gerao de estmulos

UUT

referencial

avaliao de respostas

40

Estmulos 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;

Validao de HDL

vivel somente nas primeiras verses de TB

41

Estmulos 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 Vantagem: simples implementao readline(PatternFile , lineAux); para padres simples read(lineAux,value); ... end loop; Desvantagem: end procedure;

Validao de HDL

difcil de implementar para padres complexos aumenta tempo de simulao devido as chamadas de sistema

42

Estmulos de Tabela
type vector is record LD : std_logic; LL : std_logic; Vantagem: menor tempo de RST : std_logic; simulao que estmulo de arquivo 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 := ( Desvantagem: -- LD LL RST D P ( 0, 0, 0, xxxxxxxx 0), aumenta tempo de compilao ( 0, 0, 1, xxxxxxxx 0), ( 0, 0, 1, xxxxxxxx 0), consome memria para muitos ( 1, 0, 0, 00000101 0), padres ( 0, 1, 0, 11010100 0), ( 0, 0, 0, xxxxxxxx 1), ( 0, 0, 0, xxxxxxxx 1), ... );

Validao de HDL

43

Comparao entre Estmulos de Arquivo e de Tabela

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

Validao de HDL

44

Estmulos de Dados Pseudo-Aleatrios

Validao de HDL

FF 3

FF 2

FF 1

FF 0

LFSR padro

clk

UUT
clk 0 1 2 3 4 5 6 7 Q3 1 1 1 1 0 1 0 1 Q2 0 1 1 1 1 0 1 0 Q1 0 0 1 1 1 1 0 1 Q0 0 0 0 1 1 1 1 0 clk 8 9 10 11 12 13 14 15=0 Q3 1 0 0 1 0 0 0 1 Q2 1 1 0 0 1 0 0 0 Q1 0 1 1 0 0 1 0 0 Q0 1 0 1 1 0 0 1 0

45

Tipos de LFSRs
Standard LFSR

Validao de HDL

x2

x4

x3
Modular LFSR

x4 x3

x2

Polinmio primitivo: P(x) = 1 + x3 + x4 Prov os 2n-1 padres

46

Descrio 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; value: 0111 end if; i: 1110 value := i; end procedure;

Validao de HDL

polynomial: 1100 value: 0010

47

Gerao de Mista de Estmulos


Gerao pseudo-aletaria pode demorar muito para gerar um padro especfico geralmente que estimula algum corner case pode aumentar muito o tempo de simulao Nestes casos desejvel utilizar uma gerao de estmulo mista estmulos de tabela + estmulos aleatrios

Validao de HDL

48

Avaliao e Comparao de Respostas


Tipos: sem comparao (inspeo visual) usando assert com compactao de dados de arquivo testbench de tabela gerao de
estmulos

Validao de HDL

UUT

referencial

avaliao de respostas

49

Comparao de Respostas com Assert


para a simulao se condio for verdadeira Exemplo: Assert (golden_out /= data_out) report error in sumulation!!! Aplicado somente h sistemas pequeno validao de operao aritmticas (sqrt)

Validao de HDL

50

Comparao com Compactao de Dados


Usa tcnica similar ao CRC para diminuir o nmero de comparaes e diminuir o volume da dados de referncia Utilizar uma variao de LFSR (MISR) para gerar uma assinatura das respostas

Validao de HDL

51

MISR

Validao de HDL

UUT

x4 x3

x2

x4 x3

x2

UUT

52

Descrio 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;

Validao de HDL

53

Referencial
Mdulo que produz valores de referencia para o comparador

Validao de HDL

testbench
gerao de estmulos

UUT

referencial

avaliao de respostas

54

Descries do Referencial
pode ser descrito em HDL comportamental pode ser descrito em uma linguagem de mais alta abstrao C, java, SDL, outras pode ser um hardware (hard core) 8051 o ambiente de co-simulao pode ser usado para ligar HDL com outras linguagens ou hardware

Validao de HDL

referncia (C/Java/SDL)
sockets

comparao

estmulos

OK

UUT

NOK

TB VHDL

55

SUMRIO
Introduo Prticas Bsicas Design for Portability Design for Synthesis Design for Verification Tcnicas de Verificao Ferramentas

Validao de HDL

56

Tipos de Ferramentas
Compiladores modelsim/active Simulao funcional/temporal modelsim/active Co-simulao hw/sw Verificao Formal equivalence checking
compara dois modelos

Validao de HDL

model checking
procura por violaes e problemas genricos do projeto

Testbench automation tool

57

Tipos de Ferramentas
Code coverage estimativa da qualidade do TB modelsim/active 100% no indica um projeto error free Code Profiling aumenta o desempenho da simulao diminui tempo de projeto quantas vezes voc simula seu projeto at que ele funcione na placa ? Controle de Reviso e Automatizao gerenciamento do projeto CVS e Make Emulao Prototipao

Validao de HDL

58

Automatizao
Baseado no uso de scripts e utilizao das ferramentas em batch mode Necessidade de uma estrutura padro de diretrios Necessidade de modelos de scripts para cada ferramenta na apresentao sobre ferramentas de verificao sero apresentados scripts para cada ferramenta uso de makefiles para executar scripts

Validao de HDL

59

Exemplo de Makefile
comp: teste.vhd vcom teste.vhd simul: vsim teste.beh temp_simul: vsim teste.beh -sdf syn: spectrum -file syn.tcl

Validao de HDL

60

Exemplo de Estrutura de Diretrio


Makefile doc syn (projeto de sntese lgica do Leonardo) altera (projeto de sntese fsica da Altera) xilinx (projeto de sntese fsica da Xilinx) simul model (projeto de simulao do Modelsim) active (projeto de simulao do Active) scr tb

Validao de HDL

Exemplos de TestBenchs

Alexandre Amory (amory@inf.pucrs.br)

62

Tpicos
sqtr wrapper polgonos

Validao de HDL

63

Sqrt
Usa lfsr para gerar estmulos o referencial comportamental, implementado em uma biblioteca testbench com 11 linhas arquitetura ideal para validao de operadores aritmticos ou datapaths (seqncia de operaes aritmticas)

Validao de HDL

64

Polgonos
Estmulos lidos de arquivo (gerao complexa) referencial escrito em C Valor esperado compactado e gerado por software tb aplica estmulos de arquivo e compara compactao feita online com assinatura lida do arquivo
Gerador de polgonos aleatrios

Validao de HDL

estmulos

TB VHDL
ok/nok

assinatura

65

Wrapper
Patterns LFSR
n

Validao de HDL

adaptao
32
wrapper

ISCAS
32

ISCAS
m

referencial

adaptao m

Comparao
ok/nok