2010-06-30 16 views
0

J'ai écrit un compteur dans Verilog, puis un banc d'essai pour le tester. Mon testbench donne les résultats corrects, donc mon code est OK. Mais est-ce que cela donne le résultat d'un long moment instantanément.Les bancs de test Verilog peuvent-ils fonctionner avec une vraie horloge?

Est-il possible de prendre le résultat en temps réel? Je veux dire dans chaque seconde mon testbench produira une nouvelle ligne de résultat ?? (et si c'est possible comment?)

+1

Sur intérêt, pourquoi ne voulez-vous faire cela? Habituellement nous nous plaignons que les simulations sont trop lentes !!! – Marty

Répondre

3

Ce que vous essayez d'accomplir n'est pas très clair, mais le simulateur Synopsys VCS a une tâche système nommée $system qui peut être utilisée pour exécuter une commande shell pendant la simulation. Si vous exécutez sleep 1 comme suit, la simulation s'arrêtera pendant 1 seconde de l'horloge murale pour chaque pas de temps. Votre simulation affichera un message une fois par seconde. Bien sûr, votre simulation sera extrêmement lente. Notez que $system ne fait pas partie de la norme IEEE pour Verilog.

Mise à jour: J'ai d'abord déclaré que $system est spécifique à VCS. Mais, Marty nous a informés que Cadence le soutient également.

`timescale 1ns/1ns 

module tb; 

initial begin 
    $timeformat(-9, 1, "ns"); 
    #5 $finish; 
end 

integer sec = 0; 
always begin 
    #1; 
    $system("sleep 1"); 
    sec = sec + 1; 
    $display("seconds = %0d, time = %0t", sec, $time); 
end 

endmodule 

Cette imprime les éléments suivants:

seconds = 1, time = 1.0ns 
seconds = 2, time = 2.0ns 
seconds = 3, time = 3.0ns 
seconds = 4, time = 4.0ns 
$finish called from file "tb.v", line 8. 
$finish at simulation time    5.0ns 
+1

'$ system()' fonctionne sur Incisive de Cadence (NC-Verilog) aussi ... – Marty

+0

@Marty: Merci. J'ai mis à jour ma réponse. – toolic