Professional Documents
Culture Documents
Introdução
Escrever um testbench é tão complexo como escrever o próprio código RTL.
Atualmente, os ASIC estão ficando cada vez mais complexos e, assim, verificá-los
tornou-se um desafio. Normalmente, 60-70% do tempo necessário para qualquer
ASIC é gasto em verificação/validação/teste. Apesar disso, a maioria dos engenheiros
de ASIC ainda acham que não há glória na verificação.
Criando o DUT
Antes de escrever o testbench, é importante ter a especificação do projeto do
“dispositivo sob teste” (Device Under Test, DUT). As especificações precisam ser
claramente compreendidas e um plano de teste, que basicamente documenta a
arquitetura do banco de teste e os cenários de teste (casos de teste) em detalhes,
precisa ser feito
Contador.sv
Crie um novo projeto, conforme Parte 1, no ModelSim para um contador. Assuma
que teremos que testar um simples contador de 4bits que realiza a contagem sempre
que a entrada enable é ativada, e reseta a zero quando a entrada reset é ativada. Reset
é sincrono com o clock.
Plano de testes
Antes de realizar os testes, é necessário realizar a geração do sinal do clock, para isso,
vamos escrever nosso counter_tb.sv, adicionando-o no projeto.
Após adicionar seu testbench no projeto, verifique se o clock está sendo gerado da
maneira adequada, analise o formato de onda gerado. Simule o seu testbench e
verfique.
Para realizar auto-verificações será necessário utilizar de recursos que não são
sintetizáveis, úteis apenas para fase de verificações. Esse é o caso $dumpfile, que é
usado para especificar um arquivo que o simulador usará para armazenar a forma de
onda, que pode ser usado mais tarde por um visualizador de forma de onda.
Já $dumpvar orienta o compilador a inicializar o dumping de todos os sinais para o
arquivo “counter.vcd”.
Agora compile o código. Após compila-lo, clique duas vez no módulo testbench na
“library”. Para executar a simulação, ao invés de usar o botão de execução, vá ao
prompt de comando e digite “run”:
Escrevendo um Testbench
http://www.asic-world.com/code/verilog_tutorial/counter_tb2.v
$display é usado para imprimir textos ou variáveis na tela, \t é para inserir tabs. A
sintaxe é a mesma do printf do C. $monitor, na segunda linha, é um pouco diferente:
$monitor mantém o histórico de mudanças das variáveis que estão na lista
(clk,reset,enable,cout). Independentemente da mudança de qualquer uma, ele
imprimirá seus valores, na respectiva representação especificação (binário, hex, etc).
$finish é usado para terminar a simulação após #100 unidades de tempo (note: todo
bloco initial e alwayes inicia a execução no tempo 0).
Referência:
Esse laboratório é uma tradução as pressas do tutorial online ;) :
http://www.asic-world.com/verilog/art_testbench_writing1.html