2014-01-13 35 views

回答

0

在可合成的Verilog中,可以在生成塊內使用assign語句。所有的生成塊都是模仿多個時刻。不過要小心,因爲就像一個for循環一樣,這可能是非常大的空間。

1

是的。有可能的。生成語句只是合成器的代碼生成器指令。基本上,它只是循環展開。這是如果循環可以靜態闡述。也就是說,循環執行的次數應該可以在編譯時確定。

genvar i;   
generate   
for (i = 0; i < 2 ; i++) {   
    assign x[i] = i;}   
endgenerate 

unrolls into   
assign x[0] = 0;   
assign x[1] = 1; 
0

您可以使用分配中產生statment,這是很常見的,以幫助參數化的勾起來模塊

原代碼有一些問題:L被定義多次,但僅分配2出3個比特

genvar i; 
generate 
    for (i = 0; i < W; i=i+1) begin:m 
    wire [2:0] L; 
    assign L[1:0] = { a[i], b[i] }; 
    end 
endgenerate 

可改爲:

localparam W = 4; 
reg [W-1:0] a; 
reg [W-1:0] b; 
wire [1:0] L [0:W-1]; 

genvar i; 
generate 
    for (i = 0; i < W; i=i+1) begin:m 
    assign L[i] = { a[i], b[i] }; 
    end 
endgenerate 

這裏L[i]選擇第i個wire [1:0]部分L.而a[i]b[i]是比特選擇。

相關問題