2011-04-19 81 views
0

我需要在生成語句中聲明一個寄存器來存儲一些臨時值,生成語句:verilog

要在實例化中使用。

我有

generate 

for(i=0; i< N; i=i+1) 
begin: i_loop 
    Inst_file u(S1(i),P1(i),S(i),P(i)); 
    /* S1 and P1 have N bits and 
     S = S1^P1; 
     P = S1 & P1 
    */ 
end //i_loop 

S1和P1是簡單combinationl邏輯和我已經使用它們作爲導線用於第一

迭代。但是在i的每次迭代之後,我需要分配輸出S和P作爲輸入

(即用S和P代替S1和P1)。

我明白我應該用寄存器,而不是線做(是嗎?)

在我需要S1和P1爲REG這種情況。我試着用

, , ,

裏面總是聲明的方式生成。它給出了錯誤。

u能請建議出路..

+1

請格式化您的代碼,請參閱http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks。你可能希望先不用'generate'編寫代碼,直到你對verilog中的事物看起來應該有更多的直覺。 'generate'使速記成爲可能,但不是該語言的基本特徵。 – Andy 2011-04-19 04:56:31

+0

@安迪:好的安迪,以後我會照顧格式:)感謝您的鏈接。 – Nandhini 2011-04-19 05:40:12

回答

2

您應該使用N + 1位寬總線,並拉動生成塊之外的所有初始化。 我相信這樣的事情會做:

wire [N:0]Sarray; 
wire [N:0]Parray; 

// initialize Sarray[0] and Parray[0] here using continuous assignment 

generate 
for(i=0; i< N; i=i+1) 
begin: i_loop 

    Inst_file u(Sarray[i],Parray[i],Sarray[i+1],Parray[i+1]); 

end //i_loop 

Sarray [0]和粒子陣列[0]應該在第一次迭代使用初始化; Sarray [N]和Parray [N]將是模塊鏈的最終輸出值。

+0

那你虛擬:)我會試試這個。 – Nandhini 2011-04-19 05:24:42