Forum: FPGA, VHDL & Co. Verilog: Clock-Generierung unterbrechen


von Fry (Gast)


Lesenswert?

Hallo zusammen,

ich bin in Sachen Verilog noch Einsteiger und habe eine Frage bzgl. 
Testbenches: Ich möchte eine Testbench schreiben, die temporär einen 
Clock generiert, falls bestimmte Bedingungen erfüllt sind. Der "normale" 
Ansatz der Clockerzeugung ist entweder ein always- oder ein 
initial-Block mit forever-Statement. Jetzt möchte ich aber neben dem 
eigentlichen Systemtakt einen weiteren Takt generieren, der nur dann 
aktiv ist, falls bspw. eine Variable gesetzt ist. Dieser zusätzliche 
Takt soll quasi ein Input des FPGAs sein.

Funktioniert das mit einem always-Block? Mein erster Gedanke war 
folgender:
1
always begin : clock_generation
2
   if (clock_active == 0)
3
      disable clock_generation;
4
   #Tclk temp_clock = ~temp_clock;
5
end
Das disable-Statement sollte praktisch den Rest des always-Blocks 
überspringen. Leider klappt das so nicht, der Simulator (ISim) bricht 
ab, weil die Speicherauslastung zu hoch ist.

Kann mir hier jemand weiterhelfen bzw. einen Gedankenanstoß geben, wie 
man so etwas realisieren kann?

Vielen Dank!

von Vancouver (Gast)


Lesenswert?

Warum beschreibst Du nicht einen Clockmultiplexer, der entweder den 
Clock oder eine Konstante weiterleitet, abhängig von clock_active?
1
assign clk_fpga = (clock_active) ? temp_clk : 1'b0;

Den Clock-Prozess lässt Du einfach durchlaufen, ohne disable.

Der Simulator wird bei deiner Variante aussteigen, weil der disabelte 
always-Block sofort wieder gestartet wird, ohne das #Tclk-Delay. Damit 
beschäftigt sich Isim nur mit diesem einen Statement, der Rest 
verhungert. (Ich bin allerdings in Verilog nicht so sattelfest, um das 
mit Sicherheit sagen zu können, aber bei VHDL passieren solche Sachen 
gerne mal.)

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.