Verilog-Block-Anweisungen
Es gibt Möglichkeiten, eine Reihe von Anweisungen zu gruppieren, die syntaktisch einer einzelnen Anweisung entsprechen und als Blockanweisungen bezeichnet werden . Es gibt zwei Arten von Blockanweisungen:sequentiell und parallel.
Sequentiell
Anweisungen werden mit begin
umschlossen und end
Schlüsselwörter und werden sequentiell in der angegebenen Reihenfolge nacheinander ausgeführt. Verzögerungswerte werden relativ zum Zeitpunkt der Ausführung der vorherigen Anweisung behandelt. Nachdem alle Anweisungen innerhalb des Blocks ausgeführt wurden, kann die Steuerung an eine andere Stelle übergeben werden.
module design0;
bit [31:0] data;
// "initial" block starts at time 0
initial begin
// After 10 time units, data becomes 0xfe
#10 data = 8'hfe;
$display ("[Time=%0t] data=0x%0h", $time, data);
// After 20 time units, data becomes 0x11
#20 data = 8'h11;
$display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule
Im obigen Beispiel erste Anweisung im begin-end
Block wird wegen der relativen Natur in 10 Zeiteinheiten und die zweite Anweisung in 30 Zeiteinheiten ausgeführt. Es sind 20 Zeiteinheiten nach Ausführung der vorherigen Anweisung.
ncsim> run [Time=10] data=0xfe [Time=30] data=0x11 ncsim: *W,RNQUIE: Simulation is complete.
Parallel
Eine Parallele block kann Anweisungen gleichzeitig ausführen, und die Verzögerungssteuerung kann verwendet werden, um eine zeitliche Reihenfolge der Zuweisungen bereitzustellen. Anweisungen werden parallel gestartet, indem sie in fork
eingeschlossen werden und join
Schlüsselwörter.
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end
Im obigen Beispiel fork-join
Block wird nach Ausführung der Anweisung in 10 Zeiteinheiten gestartet. Anweisungen innerhalb dieses Blocks werden parallel ausgeführt, und die erste Anweisung, die gestartet wird, ist diejenige, bei der den Daten ein Wert von 8:00 zugewiesen wird, da die Verzögerung dafür 10 Zeiteinheiten nach dem Start des Fork-Joins beträgt. Nach 10 weiteren Zeiteinheiten wird die erste Anweisung gestartet und die Daten erhalten den Wert 8'h11.
initial begin
#10 data = 8'hfe;
fork
#10 data = 8'h11;
begin
#20 data = 8'h00;
#30 data = 8'haa;
end
join
end
Es gibt einen begin-end
-Block im obigen Beispiel, und alle Anweisungen innerhalb des begin-end-Blocks werden nacheinander ausgeführt, aber der Block selbst wird parallel zu den anderen Anweisungen gestartet. Die Daten erhalten also 8'h11 bei 20 Zeiteinheiten, 8'h00 bei 30 Zeiteinheiten und 8'haa bei 60 Zeiteinheiten.
Benennung von Blöcken
Sowohl sequentielle als auch parallele Blöcke können durch Hinzufügen von : name_of_block
benannt werden nach den Schlüsselwörtern begin
und fork
. Dadurch kann der Block in einem disable
referenziert werden Erklärung.
begin : name_seq
[statements]
end
fork : name_fork
[statements]
join
Verilog
- Wie die Automatisierung der Datenaufbereitung die Zeit für Erkenntnisse beschleunigt?
- Verilog-Tutorial
- Verilog-Verkettung
- Verilog - In einer Nussschale
- Verilog-Aufgaben
- Verilog-Blockierung und Nicht-Blockierung
- Verilog-Kontrollblöcke
- Verilog-Funktionen
- Verilog Scheduling Semantik
- Es ist an der Zeit, Ihre S&OP-, Daten- und Planungssysteme zu verbessern