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; |
|
Forum: FPGA, VHDL & Co. Clock loop für N cycles
Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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:
Nicht getestet, aber sollte so gehen:
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. 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 :-) 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. 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. 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.. 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.
|
|