2016-05-17 9 views
0

Ist es erlaubt, ein Modul innerhalb always_comb Block im System Verilog zu instanziieren?Ist es erlaubt, ein Modul innerhalb von always_comb im System Verilog zu instanziieren?

always_comb 
begin 
    OR OR1 (.Y(A), .A(Z), 
end 
+1

Wenn Sie wirklich bedingte Hardware verwenden möchten, konvertieren Sie Ihr Modul in Task oder Funktion und rufen Sie es bedingt auf. Es erhöht Ihre Hardwareressourcen, erfüllt aber Ihre Anforderungen. –

+2

Gibt es einen bestimmten Grund, warum Sie dies versuchen und nicht nur instantiieren? – Morgan

Antwort

5

Zunächst ist Ihr Code unvollständig. Offensichtlich benötigt ein Zwei-EingangODER-Gatter drei Verbindungen.

In Verilog, wenn Sie sind Instanziieren ein Modul, das bedeutet, dass Sie das Hinzufügen zusätzlicher Hardware auf dem Brett.

Diese Hardware hinzugefügt werden müssen, bevor Simulation (das heißt zum Zeitpunkt der Kompilierung) beginnt. Hier können Sie bei jedem Takt keine Hardware hinzufügen/entfernen.

Sobald die Instanz instanziiert ist, wird das Modul für jeden Zeitstempel der Simulation ausgeführt, bis zum Ende.

Um ein Modul auszuführen, müssen Sie es nur instanziieren, indem Sie ihm die erforderlichen Eingaben bereitstellen (und ggf. den Block always in das Submodul selbst einfügen).

// Simply instantiate module 
OR OR1 (.Y(A), .A(Z), .B(M)); 

So oder so, können Sie einen kombinatorischen Block zum aktuellen Modul selbst hinzufügen:

// Directly use ORing 
always_comb begin 
    A = Z | M; 
end 

Mehr Informationen über Instanziierung aus Verilog Module Instantiation, Instantiating Modules and Primitives, Structural Modelling Links erhalten werden.