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])
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
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
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
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
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
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
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
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 !!!
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
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 !!!
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
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
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;
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
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
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;
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
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 )
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
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;
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;
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
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
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;
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
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)
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;
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’),
...
);
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
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!!!”
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);...
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";
...
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
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
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
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
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
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
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
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
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
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
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
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”
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
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
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)
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
51V
alid
ação
de
HD
LV
alid
ação
de
HD
LMISR
x2 x 1x4
x3
UUT
x2 x 1x4
x3
UUT
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;
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
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
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
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
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
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
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
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
62V
alid
ação
de
HD
LV
alid
ação
de
HD
LTópicos
• sqtr• wrapper• polígonos
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)
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
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