5Es gibt viele Fehler in Ihrem Code. Hier sind einige:
a) Statt dessen:
wire [64:0] temp,mem [0:256];
vielleicht das Sie?
wire [64:0] mem [0:256]; // this might be a reg, too, one cannot tell from your code snippet
reg [64:0] temp;
i) Ich glaube nicht, Sie temp
eine 65x257 Array sowie mem
sein soll? Und meinst du "64"? Oder "63"? Oder (siehe unten) "71"? Und meinst du "256"? Oder "255"?
ii) Sie können wire
nicht innerhalb eines prozeduralen Blocks zuweisen.
b) Dies muss auch ein reg
sein, denn (wieder) können Sie nicht aus einem prozeduralen Block einem wire
zuweisen.
reg [7:0] block_nr;
c) Dieser Code muss in einem Verfahrensblock gehen, entweder initial
oder always
. Das hängt von Ihrer Designabsicht ab - ich kann das nicht aus Ihrem Code-Schnipsel ablesen. Nehmen wir an, initial
:
initial begin
for (i=0; i <3; i = i + 1) begin
temp = mem [i];
data_mem [i] = {block_nr, w0,w1, w2, w3 }; // what is "data_mem"? Did you mean "mem"?
// if you did mean "mem", did you notice that "{block_nr, w0,w1, w2, w3 }" is 72 bits wide?
block_nr = block_nr +1;
end
end
Wenn diese synthetisiert werden soll, die Sie nicht initial
verwenden können. Wenn Sie beabsichtigen, dies zu synthetisieren, sind Sie weit von einer funktionierenden Lösung entfernt.
Ich muss jedoch betonen, dass diese lediglich Vorschläge sind. Es ist nicht möglich, Fehler in Code, deren Entwurfsabsicht nicht bekannt ist, vollständig zu korrigieren.
Welche Fehler? Ihre for-Schleife sollte entweder in einem initialen oder einem immer-Block sein. – toolic
Dieser Fehler für Temp = mem [i} Prozedurale Zuweisung zu einem nicht-register temp ist nicht erlaubt, linke Seite sollte reg/integer/time/genva sein, –
Um einige Daten zu speichern/halten, muss "reg" verwendet werden. Alle Zuordnungen müssen in prozeduralen Blöcken erfolgen. Siehe (http://stackoverflow.com/questions/5360508/using-wire-or-reg-with-input-or-output-in-verilog) für Informationen über reg und Draht-Nutzung. – sharvil111