Wenn-für-Anweisung generieren

Können wir Generate if-for-Anweisung deklarieren?

module prac#(parameter m=3)
(input x, input[2:0]a,b,output[2:0]c);
wire [2:0]f[0:3];
genvar i;
generate
if(!x) begin : d2
    for(i=0;i<=m;i=i+1) begin:dd
    assign f[i]=(a & b);  end
end
endgenerate
endmodule

Es bedeutet, dass 'x' keine Konstante ist. Ich möchte ein Modul basierend auf einem Steuersignal mehrmals instanziieren. Hier ist x mein Steuersignal. Ist es möglich?

Vielen Dank im Voraus.

Was denken Sie, sollte Ihr Code in Hardware ableiten?
Was müsste passieren, wenn die Eingabe xNull wäre und sich dann zu Eins ändert?
Die Verwendung xals Bezeichner scheint eine sehr schlechte Wahl zu sein, da dieses Zeichen auch eine besondere Bedeutung hat.
@TomCarpenter. Sir, tut mir leid, dass ich mich zu diesem Zeitpunkt nicht für Hardware entschieden habe. Ich habe alle Daten zur Verfügung und in diesem Takt selbst möchte ich Berechnungen an allen Datenpunkten parallel durchführen. x- gibt an, dass die Daten zur Durchführung des Vorgangs verfügbar sind. Ich lerne Verilog HDL und habe die Generate If- und Generate For-Anweisungen gesehen, die Blöcke ohne explizite Instanziierung jedes einzelnen instanziieren und erstellen. Bitte lassen Sie mich wissen, wenn ich falsch liege und ob es noch andere Dinge gibt, die ich bei der Verwendung von Instanziierungen beachten muss

Antworten (3)

Was du geschrieben hast ist:

"Wenn das Signal X wahr ist, brauche ich keine Hardware.
Wenn das Signal X falsch ist, möchte ich eine Hardware haben, die es tut ..."

Hardware ist entweder vorhanden oder nicht vorhanden. Es kann nicht einfach im Nichts verschwinden oder aus dem Nichts erscheinen.

Alles, was Sie tun können, ist, die Hardware (immer) vorhanden zu haben, und dann können Sie sie verwenden oder nicht.

Nein, Sie können die Instanziierung von Modulen nicht zur Laufzeit steuern. Verwechseln Sie eine Hardwarebeschreibungssprache nicht mit einer herkömmlichen Programmiersprache. Sie müssen ein für alle Mal jedes Modul instanziieren, das Sie jemals benötigen werden. Ihr HDL-Code gibt dann Möglichkeiten zur Steuerung des Datenflusses und des bedingten Zugriffs auf die Module an.

Ich habe gelesen, dass wir mit Generate construct das Modul mehrmals instanziieren können, wodurch Hardwareblöcke erstellt werden.
Ja, aber das kann nur zur Kompilierzeit (oder besser zur Synthesezeit) passieren.
Dann xkann es kein "Steuersignal" sein, das sich nach der Synthese ändert. xmuss ein konstanter Wert sein, was die Tools Ihnen zu sagen versuchen.
Ja. x ist konstant, hängt aber von den vorherigen Operationen ab. Da es eine Datenabhängigkeit gibt, habe ich ein Steuersignal verwendet, das nur anzeigt, dass die Operation abgeschlossen wurde, und ansonsten eine Null ergibt.
NEIN! Der Wert von x kann nicht von irgendetwas abhängen , das den Tools zur Kompilierzeit nicht als Konstante bekannt ist. Der Wert von xkann sich nie, nie, nie ändern.

Machen Sie X zu einem Parameter anstelle einer Eingabe. Eingaben können sich im Laufe der Zeit ändern, Parameter werden pro Instanziierung festgelegt.

Außerdem müssen Sie F in einem „else“-Zweig etwas zuweisen.