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
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
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.
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. –
Gibt es einen bestimmten Grund, warum Sie dies versuchen und nicht nur instantiieren? – Morgan