Forum: FPGA, VHDL & Co. Clock loop für N cycles


von Patrick M. (Firma: na) (bitdiver)


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;

von Vancouver (Gast)


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.

von Christoph Z. (christophz)


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 :-)

von Vancouver (Gast)


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.

von Christopher C. (trihexagon)


Lesenswert?

Seit VHDL-2008 gibt es in VHDL auch stop und finish als Anweisung (in 
std.env).

von Christoph Z. (christophz)


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.

von Vancouver (Gast)


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..

von Gustl B. (-gb-)


Lesenswert?

Gibt es in Verilog kein "after"?

CLK <= not CLK after 5 ns;

Würde man doch im VHDL schreiben.

von vancouver (Gast)


Lesenswert?

#5 clk <= ~clk;

Verilog ist weniger geschwätzig :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.