Verilog Block-instructies
Er zijn manieren om een set instructies te groeperen die syntactisch equivalent zijn aan een enkele instructie en die bekend staan als blokinstructies . Er zijn twee soorten blokinstructies:sequentieel en parallel.
Opeenvolgend
Verklaringen worden verpakt met begin
en end
trefwoorden en worden opeenvolgend uitgevoerd in de opgegeven volgorde, de een na de ander. Vertragingswaarden worden behandeld ten opzichte van het tijdstip van uitvoering van de vorige instructie. Nadat alle instructies in het blok zijn uitgevoerd, kan de besturing ergens anders worden doorgegeven.
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
In het bovenstaande voorbeeld, eerste instructie in de begin-end
blok wordt uitgevoerd op 10 tijdseenheden, en de tweede instructie op 30 tijdseenheden vanwege de relatieve aard. Het is 20 tijdseenheden na uitvoering van het vorige statement.
ncsim> run [Time=10] data=0xfe [Time=30] data=0x11 ncsim: *W,RNQUIE: Simulation is complete.
Parallel
Een parallel blok kan gelijktijdig instructies uitvoeren en vertragingsbesturing kan worden gebruikt om de opdrachten in de tijd te ordenen. Verklaringen worden parallel gestart door ze in de fork
. te plaatsen en join
trefwoorden.
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end
In het bovenstaande voorbeeld fork-join
blok wordt gestart na het uitvoeren van de instructie met 10 tijdseenheden. Verklaringen binnen dit blok worden parallel uitgevoerd en de eerste instructie die wordt gestart, is die waarbij de gegevens een waarde van 8'h00 krijgen, aangezien de vertraging daarvoor 10 tijdseenheden is na de lancering van de fork-join. Na nog 10 tijdseenheden wordt de eerste instructie gelanceerd en krijgen de gegevens de waarde 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
Er is een begin-end
blok in het bovenstaande voorbeeld, en alle instructies binnen het begin-eindblok worden opeenvolgend uitgevoerd, maar het blok zelf wordt parallel met de andere instructies gestart. De gegevens krijgen dus 8'h11 op 20 tijdseenheden, 8'h00 op 30 tijdseenheden en 8'haa op 60 tijdseenheden.
Benoeming van blokken
Zowel sequentiële als parallelle blokken kunnen een naam krijgen door : name_of_block
. toe te voegen na de trefwoorden begin
en fork
. Door dit te doen, kan naar het blok worden verwezen in een disable
verklaring.
begin : name_seq
[statements]
end
fork : name_fork
[statements]
join
Verilog
- Hoe automatisering van gegevensvoorbereiding de tijd tot inzichten versnelt?
- Verilog-zelfstudie
- Verilog-aaneenschakeling
- Verilog - In een notendop
- Verilog-opdrachten
- Verilog blokkeren en niet-blokkeren
- Verilog-besturingsblokken
- Verilog-functies
- Verilog Scheduling Semantiek
- Het is tijd om uw S&OP-, data- en planningssystemen te verbeteren
- De beste manier om telematicagegevens te gebruiken