Clock loop für N cycles

OP (Firma: na) #6171829
Lesenswert?

Hi,

ich frage mich wie ich im Verilog eine CLK für eine Testbench baue.
Im VHDL hatte ich diesen "Process" welcher mir gut gefallen hat:
1
  
2
  begin
3
    clk <= not clk;
4
    wait for clk_period/2;
5
  
6
    if NOW > 100 ns then
7
      wait;
8
    end if;
9
  end process;
Gast #6173255
Lesenswert?

Nicht getestet, aber sollte so gehen:
1
initial begin
2
   clk <= 0;
3
   for (int j=0; j<100; ++j)
4
      #clk_half_period clk <= ~clk;
5
end

Es ist allerdings recht ungewöhnlich, einen Takt zu stoppen. Meistens 
lässt man den durchlaufen und stoppt stattdessen die Simulation nach der 
gewissen Zeit.
#6173283
Lesenswert?

Vancouver schrieb:
> Es ist allerdings recht ungewöhnlich, einen Takt zu stoppen. Meistens
> lässt man den durchlaufen und stoppt stattdessen die Simulation nach der
> gewissen Zeit.

In VHDL finde ich das gar nicht ungewöhnlich, da es keine reguläre 
Möglichkeit gibt den Simulator zu stoppen.

- Also entweder gibt es nichts mehr zu simulieren, dann stoppt der 
Simulator von selber (darum den Takt nach einer Weile/per Signal 
stoppen)
- Ein assert false severity failure; machen, dann stoppt der Simulator 
auch, ist aber super hässlich, dass in der letzten Zeit des Logfiles 
"failure" steht und in der Zeile darüber "simulation done, everything 
OK" oder so ähnlich :-)
Gast #6173314
Lesenswert?

Christoph Z. schrieb:
> - Also entweder gibt es nichts mehr zu simulieren, dann stoppt der
> Simulator von selber (darum den Takt nach einer Weile/per Signal
> stoppen)

Das wird bei komplexeren Simulation aber anstrengend, wenn du viele 
Clocks und Datenquellen einzeln stoppen musst, damit die Eventqueue des 
Simulators leer läuft. Außerdem weiß man nicht immer im Voraus, nach 
wievielen Takten eine Simulation durch ist.

Christoph Z. schrieb:
> Ein assert false severity failure; machen, dann stoppt der Simulator
> auch, ist aber super hässlich,

Das ist in VHDL der offizielle Weg um eine Simulation zu beenden. In 
Verilog ist es $finish oder $stop. Beides erlaubt es dir, in der 
Simulation z.B. ein Statusbit zu pollen und dann den Simulator zu 
stoppen.
#6174817
Lesenswert?

Christopher C. schrieb:
> Seit VHDL-2008 gibt es in VHDL auch stop und finish als Anweisung (in
> std.env).

Vielen dank!

Vancouver schrieb:
> Das wird bei komplexeren Simulation aber anstrengend, wenn du viele
> Clocks und Datenquellen einzeln stoppen musst, damit die Eventqueue des
> Simulators leer läuft. Außerdem weiß man nicht immer im Voraus, nach
> wievielen Takten eine Simulation durch ist.

Ja, ich weiss ich nicht, wie lange meine Simulation läuft, bzw. ich kann 
das auch mit ein paar Variablen anpassen bzw. Testcases per externer 
Datei aktivieren/deaktivieren.

Jeder Clockgenerator und Datenquelle bekommt einen boolean Eingang 
"EndOfSim" und alle werden miteinander verbunden.
Gast #6174866
Lesenswert?

Klar, das kann man so machen. Viele Wege führen nach Rom. Ich frage mich 
nur, ob sich der Aufwand lohnt, nur um eine "hässliche" Meldung ganz am 
Ende des Logfiles zu vermeiden, deren Grund ja auch bekannt ist.

Wenn der interessante Teil durchsimuliert ist, kann man die Simulation 
einfach abbrechen und gut is. Das kontrollierte Stoppen aller 
Taktquellen erfüllt an dieser Stelle keinen Zweck mehr, außer du willst 
tatsächlich wissen, wie dein Design darauf reagiert. Aber nur um dem 
Simulator zu sagen, dass er jetzt aufhören soll, ist das ziemlich viel 
Aufwand..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren