A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Validação de VHDL: técnicas e ferramentas"— Transcrição da apresentação:

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

2 Tópicos Abordados Técnicas Ferramentas Práticas Básicas FPGA Advantage
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

3 Fluxo de Projeto Simplificado
especificação descrição do HDL guidelines estílo scripts verificação funcional Modelsim/co-sim TB estruturado qualidade síntese lógica Leonardo verificação temporal Modelsim ganho de tempo re-utiliza TB síntese física Chipscope SignalTap prototipação

4 Referê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 [ K25r] guidelines System-on-chip Verification [ R224s] validação no nível de sistema co-verificação Manual do Modelsim/FLI Diversos livros de VHDL guidelines para síntese

5 Referências Principles of Testing Electronic Systems [ M929p] TextBook de Teste Geradores de estímulos e compactadores de respostas embutidos: LFSR, MISR entre outros Essentials of Electronic Testing [ B978e] A Designer’s Guide to Built-In Self-Test [ s925d] Muitos Outros

6 Técnicas de Verificação
Alexandre Amory

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

8 Introduçã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

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

10 DISCIPLINA !!! Prá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 !!!

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

12 Design 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 !!!

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

14 Regras 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

15 Inferência de Registradores
reset síncrono process(clk) begin if clk’event and clk = ‘1’ then if rst = ‘1’ then ... else 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;

16 Inferência de Máquina de Estados
2 processos 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; 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;

17 Inferência de Máquina de Estados
3 processos 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; 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’);

18 Evitar Latches Exemplo1 falta else
Maus exemplos: process (a,b) begin if (a = ‘1’) then q <= b; end if; end process; process(c) case c is when ‘0’ => q <= ‘1’; z <= ‘0’; when others => q <= ‘0’; end case; 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;

19 SUMÁRIO Introdução Práticas Básicas Design for Portability
Design for Synthesis Design for Verification VHDL comportamental Técnicas de Verificação Ferramentas

20 Teste 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 )

21 Controlabilidade 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

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

23 Exemplo de Sinal Global
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; 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

24 SUMÁRIO Introdução Práticas Básicas Design for Portability
Design for Synthesis Design for Verification VHDL comportamental Técnicas de Verificação Ferramentas

25 VHDL 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

26 RTL X Comportamental req=1 req=0 ack==1 ack==0 process begin ...
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) if clk’event and clk = ‘1’ then if reset = ‘1’ then state <= ....; else state <= NEXT_STATE; process begin ... req <= ‘1’; wait until ack = ‘1’; req <= ‘0’; wait until ack = ‘0’; end process;

27 VHDL 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

28 Funçõ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)

29 Arquivos Usar packges para encapsupar detalhes do formato dos arquivos de entrada e saída 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(...); end procedure; procedure WriteFile(...) is writeline(...); write(...); end package body;

30 Registros e Matrizes EXEMPLO 1 EXEMPLO 2 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’), ( ‘1’, ‘0’, ‘0’, “ ” ‘0’), ( ‘0’, ‘1’, ‘0’, “ ” ‘0’), ( ‘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 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 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; ... end process; Fonte: writing testbenches

32 Asserçã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!!!”

33 Atributos 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);

34 Outras 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";

35 SUMÁ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

36 Fonte: reuse methodology manual
Tipos 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

37 SUMÁ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

38 Arquiteturas de Testbench
Principais partes: geração de estímulos avaliação/comparação de respostas UUT referencial testbench geração de estímulos UUT referencial avaliação de respostas

39 Geração de estímulos testbench 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

40 Estí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 40 ns; end process; viável somente nas primeiras versões de TB

41 Estí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

42 Estí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’), ( ‘1’, ‘0’, ‘0’, “ ” ‘0’), ( ‘0’, ‘1’, ‘0’, “ ” ‘0’), ( ‘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

43 Comparação entre Estímulos de Arquivo e de Tabela
Fonte: Modeltech Applications Note 116: VHDL Style Guidelines for Performance

44 Estímulos de Dados Pseudo-Aleatórios
LFSR padrão FF 3 FF 2 FF 1 FF clk UUT

45 Polinômio primitivo: P(x) = 1 + x3 + x4
Tipos de LFSRs Standard LFSR 1 x x2 x4 x3 Modular LFSR x4 x2 x 1 x3 Polinômio primitivo: P(x) = 1 + x3 + x4 Provê os 2n-1 padrões

46 Descriçã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”

47 Geraçã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

48 Avaliação e Comparação de Respostas
Tipos: sem comparação (inspeção visual) usando assert com compactação de dados de arquivo de tabela testbench geração de estímulos UUT referencial avaliação de respostas

49 Comparaçã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)

50 Comparaçã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

51 MISR x4 x2 x 1 UUT x3 x4 x2 x 1 x3 UUT

52 Descriçã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;

53 Referencial Módulo que produz valores de referencia para o comparador
testbench geração de estímulos UUT referencial avaliação de respostas

54 Descrições do Referencial
UUT estímulos comparação TB VHDL referência (C/Java/SDL) OK NOK sockets 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

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

56 Tipos de Ferramentas Compiladores modelsim/active
Simulação funcional/temporal 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

57 Tipos 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

58 Automatizaçã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

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

60 Exemplo 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

61 Exemplos de TestBenchs
Alexandre Amory

62 Tópicos sqtr wrapper polígonos

63 Sqrt 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)

64 Polígonos TB VHDL C 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 estímulos Gerador de polígonos aleatórios TB VHDL ok/nok C assinatura

65 Wrapper Patterns LFSR ISCAS ISCAS Comparação n adaptação n m adaptação
32 wrapper ISCAS ISCAS referencial 32 m adaptação Comparação m ok/nok


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

Apresentações semelhantes


Anúncios Google