2013-04-17 91 views
0

我有以下代碼:的Verilog分配n次迭代

always @ (clk) begin 
    for (1=0,i<150, i++) begin 
    abc[i] = xyz[i]; 
    end 
end 

問:如果我想獲得abc[8](設置與賦值語句8迭代)的值,我該怎麼辦呢?

我不喜歡下面:

reg [31:0] abc; 
wire [31:0] jkl; 

always @ (clk) begin 
    for (1=0,i<150, i++) begin 
    abc[i] = xyz[i]; 
    end 
end 

assign jkl = abc[8]; 

$display ("value is 0x%x\n", jkl); 

我有錯誤,可以請你建議我什麼事?

+2

您至少有兩個語法錯誤或拼寫錯誤:'for(1 = 0' should be'i = 0'?請提供錯誤信息。 – dwikle

+0

對不起,我的錯字:其i = 0不是1 = 0 。錯誤是「期待關鍵字'endmodule'」。但是,我的代碼中有endmodule 。如果我刪除分配語句,則會出錯。所以,我只需要如何將第8組迭代分配給臨時變量,以便我可以檢查臨時值是否被覆蓋。 – user1985039

+1

你應該編輯你的問題來修正錯字。 – dwikle

回答

3

似乎你對Verilog中的循環工作有誤解。在Verilog中,您正在定義在任何時候並行運行的硬件。 for循環僅僅是一種方便的表達方式。你不應該認爲它是迭代的。

你表達的意思是這樣的:

分配abc[i]xyz[i]從0到149,在每個時鐘週期的i所有值

如果你真的想迭代,你需要創建一個計數器,在每個循環中遞增並使用它來代替for循環。


現在,你可能收到錯誤消息,由於您的一些其他錯誤:

  1. 你不能把一個$display之外順序編碼塊。也就是說,它需要位於alwaysforever區塊或類似區域內。

  2. 要分配jklabc[8](32位值),它是一個單比特

  3. 您在for循環分配abc[0]abc[149],但abc只有32位寬