Verilog blok-statements beheersen: Sequentiele & parallelle uitvoering
Er zijn manieren om een set statements te groeperen die syntactisch equivalent zijn aan een enkel statement, bekend als blok-statements. Er zijn twee soorten: sequentieel en parallel.
Sequentieel
Statements worden gewrapt met begin en end en worden sequentieel uitgevoerd in de gegeven volgorde. Vertragingswaarden worden behandeld relatief aan de uitvoeringstijd van het vorige statement. Na alle statements binnen het blok is controle overgedragen elders.
module design0;
bit [31:0] data;
initial begin
#10 data = 8'hfe;
$display ("[Time=%0t] data=0x%0h", $time, data);
#20 data = 8'h11;
$display ("[Time=%0t] data=0x%0h", $time, data);
end
endmoduleIn het bovenstaande voorbeeld wordt het eerste statement in het begin-end blok uitgevoerd op 10 tijdseenheden, het tweede 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 statements concurrent uitvoeren en vertragingscontrole kan tijdsordering van toewijzingen geven. Statements worden parallel gelanceerd door ze te wrappen in fork en join sleutelwoorden.
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end In het bovenstaande voorbeeld wordt het fork-join blok gelanceerd na uitvoering van het statement op 10 tijdseenheden. Statements binnen dit blok worden parallel uitgevoerd en het eerste statement dat gelanceerd wordt is waar data 8'h00 krijgt, omdat de vertraging daarvoor 10 tijdseenheden is na de lancering van fork-join. Na 10 meer tijdseenheden wordt het eerste statement gelanceerd en krijgt data 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 voorbeeld, en alle statements binnen het begin-end blok worden sequentieel uitgevoerd, maar het blok zelf wordt parallel gelanceerd met de andere statements. Dus data krijgt 8'h11 op 20 tijdseenheden, 8'h00 op 30 tijdseenheden en 8'haa op 60 tijdseenheden.
Naamgeving van blokken
Zowel sequentiële als parallelle blokken kunnen een naam krijgen door : naam_van_blok toe te voegen na de sleutelwoorden begin en fork. Hierdoor kan het blok gerefereerd worden in een disable statement.
begin : naam_seq [statements] end
fork : naam_fork [statements] join
Verilog
- Vloetefficiëntie maximaliseren: Expert strategieën voor het gebruik van telematica-data
- Uw S&OP, data en planningsystemen moderniseren voor toekomstig succes
- Inzichtgeneratie versnellen via geautomatiseerde datapreparatie
- Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
- Verilog concatenatie beheersen: Een praktische gids
- Verilog Essentials: Een beknopt overzicht
- Verilog-toewijzingen begrijpen: types, syntax en best practices
- Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
- Verilog controlestroom beheersen: IF-ELSE, Case, en meer
- Verilog-functies beheersen voor efficiënt RTL-ontwerp
- Verilog Scheduling Semantics begrijpen: Timing, Events, en Uitvoeringsvolgorde