0

我对多个数组的操作有疑问。下面的代码适用于固定数量的数组

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 = ????

任何想法或建议,希望你们有一些简单的答案。

4

2 回答 2

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
于 2013-01-19T05:02:20.137 回答
0

我能想到的最好的方法如下:

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

然而,这有两个潜在的问题:

  1. 在 verilog 的敏感度列表中使用数组在技术上是不合法的。我读过大多数模拟器/综合工具会按照您对敏感度列表的期望进行操作,但其中一些可能不会。

  2. 根据阵列的大小,这可能是可合成的,也可能是不可合成的。大型数组通常被实现为 RAM,并且您通常每个时钟周期只能读取数组的一个值,因此您无法将and它们全部放在一起。

于 2013-01-18T07:41:37.027 回答