2016-03-24 43 views
-3

我寫Verilog程序來模擬內存傳輸到Temp,但是我得到了很多錯誤,請幫忙。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

什麼錯誤?您的for循環應該在初始塊或總是塊中。 – toolic

+0

這個Temp = mem [i}的錯誤不允許程序分配給非註冊表temp,左邊應該是reg/integer/time/genva, –

+0

爲了存儲/保存一些數據,reg必須使用。任何分配都必須在程序塊中完成。請參閱(http://stackoverflow.com/questions/5360508/using-wire-or-reg-with-input-or-output-in-verilog)瞭解有關reg和電線使用情況的信息。 – sharvil111

回答

0

5代碼中有很多錯誤。這裏有一些:

一)取而代之的是:

wire [64:0] temp,mem [0:256]; 

也許你的意思呢?

wire [64:0] mem [0:256]; // this might be a reg, too, one cannot tell from your code snippet 
reg  [64:0] temp; 

我),我不認爲你的意思temp是一個65x257陣列以及mem?你的意思是「64」嗎?或「63」?或(見下文)「71」?你的意思是「256」嗎?或「255」?

ii)您不能從程序塊內分配到wire

b)這也需要是reg,因爲(再次)你不能從程序塊內分配給wire

reg [7:0]  block_nr; 

c)本代碼需要去一個程序塊內,無論是initialalways。這取決於你的設計意圖 - 我無法從你的代碼片斷中看出來。假設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 

如果打算進行合成時,您不能使用initial。如果你打算綜合這一點,你離工作解決方案還有很長的路要走。

但是我必須強調,這些僅僅是建議。完全糾正其設計意圖未知的代碼中的錯誤是不可能的。