2013-01-17 102 views
0

我有一個關於多個陣列操作的問題。下面的代碼可以很好地用於固定數量的陣列verilog:如何操作參數化大小的陣列

wire [size-1:0] data [0:3]; 
wire [size-1:0] result; 

assign result = data[0]&data[1]&data[2]&data[3]; 

但我怎麼能對付它的參數個數陣列狀

wire [size-1:0] data [0:num-1]; 
wire [size-1:0] result; 

assign result = ???? 

任何意見或建議,希望你們有一些簡單的答案。

回答

0

我能想到的最好的是類似以下內容:

always @* begin 
    result = 0; 
    for (i=0; i<num; i=i+1) begin 
    result = result & data[i]; 
    end  
end 

然而,這有兩個潛在的問題:

  1. 這不是技術上是合法的,在一個敏感列表使用數組Verilog的。我讀過大多數模擬器/綜合工具將按照您期望的靈敏度列表來做,但其中一些可能不會。

  2. 根據數組的大小,這可能是也可能不是可綜合的。大型數組通常會以RAM的形式實現,而且通常只能在每個時鐘週期讀取一個數組的值,所以您不能簡單地將它們全部組合在一起。

0
wire [size-1:0] data[0:num-1]; 
wire [size-1:0] data_tmp[0:num-1]; 
wire [size-1:0] result; 

generate 
    genvar i; 
    for (i=0; i < num; i=i+1) begin 
     if (i == 0) 
      assign data_tmp[i] = data[i]; 
     else if (i == num-1) 
      assign result = data_tmp[i-1] & data[i]; 
     else 
      assign data_tmp[i] = data_tmp[i-1] & data[i]; 
    end 
endgenerate