Validação de VHDL: técnicas e ferramentas Alexandre Amory ([email protected])
Transcript of 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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/2.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/3.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/4.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/5.jpg)
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 7: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/7.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/8.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/9.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/10.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/11.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/12.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/13.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/14.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/15.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/16.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/17.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/18.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/19.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/20.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/21.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/22.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/23.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/24.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/25.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/26.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/27.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/28.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/29.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/30.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/31.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/32.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/33.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/34.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/35.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/36.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/37.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/38.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/39.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/40.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/41.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/42.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/43.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/44.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/45.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/46.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/47.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/48.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/49.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/50.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/51.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/52.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/53.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/54.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/55.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/56.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/57.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/58.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/59.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/60.jpg)
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 62: Validação de VHDL: técnicas e ferramentas Alexandre Amory (amory@inf.pucrs.br)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/62.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/63.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/64.jpg)
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)](https://reader036.fdocumentos.tips/reader036/viewer/2022062700/552fc133497959413d8d6f98/html5/thumbnails/65.jpg)
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