1 / 65

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

Validação de VHDL: técnicas e ferramentas. Alexandre Amory (amory@inf.pucrs.br). 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

onofre
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 Tópicos Abordados

  3. scripts Fluxo de Projeto Simplificado especificação descrição do HDL • guidelines • estílo 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 [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

  5. Referê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

  6. Técnicas de Verificação Alexandre Amory (amory@inf.pucrs.br)

  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. 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. 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; Inferência de Registradores

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

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

  18. 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; Evitar Latches

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

  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 • VHDLRTL X VHDLcomportamental • 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. ack==0 ack==1 req=1 req=0 ack==1 ack==0 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; endif; ... endcase; endprocess; SEQ: process(clk) begin if clk’event and clk = ‘1’ then if reset = ‘1’ then state <= ....; else state <= NEXT_STATE; endif; endif; endprocess; process begin ... req <= ‘1’; waituntil ack = ‘1’; req <= ‘0’; waituntil ack = ‘0’; ... endprocess;

  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(...); endpackage; packagebody IO_Pack is procedureReadFile(...) is begin ... readline(...); read(...); read(...); ... end procedure; procedureWriteFile(...) is begin ... writeline(...); write(...); write(...); ... endprocedure; end package body;

  30. 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)); ... type vector is record LD : std_logic; LL : std_logic; RST : std_logic; D : std_logic_vector(7 downto 0); P : std_logic; endrecord; type vectorArrayType is array (0 to TABLE_SIZE) ofvector; 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’), ... ); Registros e Matrizes

  31. 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; Listas, Ponteiros e Alocação Dinâmica 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. 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; endif; sig := i; end procedure; Atributos Pré-Definidos ... 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”); endentity ... 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. 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. testbench geração de estímulos UUT referencial avaliação de respostas Geração de estímulos • Origem dos estímulos: • formas de onda • de arquivos • de tabelas • aleatória • mista

  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 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. 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); ... endloop; endprocedure; 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; endrecord; type vectorArrayType is array (0 to TABLE_SIZE) ofvector; 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

  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 0 clk UUT

  45. Tipos de LFSRs Standard LFSR 1 x x2 x4 x3 Modular LFSR x4 x x2 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

More Related