2016-03-24 8 views
-3

Ich schreibe Verilog Programmspeicher Transfer zum Temp zu simulieren, aber ich habe eine Menge Fehler, bitte helfen Sie.Speichercodefehler in Verilog

wire [64:0] temp,mem [0:256]; 
wire [15:0]  w0, w1, w2, w3; 
wire [7:0]  block_nr; 
integer i ; 



for (i=0; i <3; i = i + 1) begin 
    temp = mem [i]; 
    data_mem [i] = {block_nr, w0,w1, w2, w3 }; 
    block_nr = block_nr +1; 


end 
+1

Welche Fehler? Ihre for-Schleife sollte entweder in einem initialen oder einem immer-Block sein. – toolic

+0

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, –

+0

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

Antwort

0

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.