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

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

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

Apresentações semelhantes


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

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

2 2 Validação de HDL Tó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

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

4 4 Validação de HDL Referências Writing Testbenches [ 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 5 Validação de HDL 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] –TextBook de Teste A Designers Guide to Built-In Self-Test [ s925d] Muitos Outros

6 Técnicas de Verificação Alexandre Amory

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

8 8 Validação de HDL 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 9 Validação de HDL SUMÁRIO Introdução Práticas Básicas Design for Portability Design for Synthesis Design for Verification Técnicas de Verificação Ferramentas

10 10 Validação de HDL 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 11 Validação de HDL SUMÁRIO Introdução Práticas Básicas Design for Portability Design for Synthesis Design for Verification Técnicas de Verificação Ferramentas

12 12 Validação de HDL 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 13 Validação de HDL SUMÁRIO Introdução Práticas Básicas Design for Portability Design for Synthesis Design for Verification Técnicas de Verificação Ferramentas

14 14 Validação de HDL 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 15 Validação de HDL Inferência de Registradores reset síncrono process(clk) begin if clkevent 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 clkevent and clk = 1 then... end if; end process;

16 16 Validação de HDL Inferê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) 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 clkevent and clk = 1 then ea <= pe; end if; end process; 2 processos

17 17 Validação de HDL Inferê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) 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 clkevent and clk = 1 then ea <= pe; end if; end process; comb_proc: outputs 0); 3 processos

18 18 Validação de HDL 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; 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 19 Validação de HDL 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 20 Validação de HDL 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 21 Validação de HDL 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 22 Validação de HDL 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 23 Validação de HDL 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;

24 24 Validação de HDL 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 25 Validação de HDL 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 26 Validação de HDL 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 process; req=1req=0 ack==1 ack==0 ack==1 ack==0 process begin... req <= 1; wait until ack = 1; req <= 0; wait until ack = 0;... end process;

27 27 Validação de HDL 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 28 Validação de HDL 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 29 Validação de HDL 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 begin... writeline(...); write(...);... end procedure; end package body;

30 30 Validação de HDL Registros e Matrizes 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 => 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 (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), ( 1, 0, 0, ), ( 0, 1, 0, ), ( 0, 0, 0, xxxxxxxx 1),... );

31 31 Validação de HDL 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; begin... end process; Fonte: writing testbenches

32 32 Validação de HDL 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 33 Validação de HDL Atributos Pré-Definidos Alguns são: –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;... variable var: integer;... write(outline,valor = & integer'image(var);...

34 34 Validação de HDL 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 35 Validação de HDL 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 36 Validação de HDL 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 37 Validação de HDL 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 38 Validação de HDL Arquiteturas 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

39 39 Validação de HDL Geraçã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

40 40 Validação de HDL 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 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

41 41 Validação de HDL 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 42 Validação de HDL 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, 1, 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 43 Validação de HDL Comparação entre Estímulos de Arquivo e de Tabela Fonte: Modeltech Applications Note 116: VHDL Style Guidelines for Performance

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

45 45 Validação de HDL Tipos de LFSRs 1xx2x2 x3x3 x4x4 x2x2 x 1 x4x4 x3x3 Polinômio primitivo: P(x) = 1 + x 3 + x 4 Provê os 2 n -1 padrões Standard LFSR Modular LFSR

46 46 Validação de HDL 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 47 Validação de HDL 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 48 Validação de HDL 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 UUT testbench geração de estímulos avaliação de respostas referencial

49 49 Validação de HDL 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 50 Validação de HDL 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 51 Validação de HDL MISR x2x2 x 1 x4x4 x3x3 UUT x2x2 x 1 x4x4 x3x3

52 52 Validação de HDL 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 53 Validação de HDL Referencial Módulo que produz valores de referencia para o comparador UUT testbench geração de estímulos avaliação de respostas referencial

54 54 Validação de HDL Descriçõ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ímulos comparação TB VHDL referência (C/Java/SDL) OK NOK sockets

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

56 56 Validação de HDL Tipos 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

57 57 Validação de HDL 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 58 Validação de HDL 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 59 Validação de HDL 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 60 Validação de HDL 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 62 Validação de HDL Tópicos sqtr wrapper polígonos

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

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


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

Apresentações semelhantes


Anúncios Google