Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

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
endmodule

In 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.

Simulation Log
 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

  1. Vloetefficiëntie maximaliseren: Expert strategieën voor het gebruik van telematica-data
  2. Uw S&OP, data en planningsystemen moderniseren voor toekomstig succes
  3. Inzichtgeneratie versnellen via geautomatiseerde datapreparatie
  4. Verilog beheersen: Complete tutorial voor digitale schakelingontwerp
  5. Verilog concatenatie beheersen: Een praktische gids
  6. Verilog Essentials: Een beknopt overzicht
  7. Verilog-toewijzingen begrijpen: types, syntax en best practices
  8. Verilog Blocking vs. Non-Blocking: belangrijkste verschillen uitgelegd
  9. Verilog controlestroom beheersen: IF-ELSE, Case, en meer
  10. Verilog-functies beheersen voor efficiënt RTL-ontwerp
  11. Verilog Scheduling Semantics begrijpen: Timing, Events, en Uitvoeringsvolgorde