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 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.
x
kann es kein "Steuersignal" sein, das sich nach der Synthese ändert. x
muss ein konstanter Wert sein, was die Tools Ihnen zu sagen versuchen.x
kann nicht von irgendetwas abhängen , das den Tools zur Kompilierzeit nicht als Konstante bekannt ist. Der Wert von x
kann 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.
Tom Tischler
Tom Tischler
x
Null wäre und sich dann zu Eins ändert?Elliot Alderson
x
als Bezeichner scheint eine sehr schlechte Wahl zu sein, da dieses Zeichen auch eine besondere Bedeutung hat.Sandeep I