我对多个阵列的操作有疑问。下面的代码适用于固定数量的数组
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 :(得分:0)
我能想到的最好的事情如下:
always @* begin
result = 0;
for (i=0; i<num; i=i+1) begin
result = result & data[i];
end
end
然而,这有两个潜在的问题:
在verilog的敏感列表中使用数组在技术上是不合法的。我已经读过大多数模拟器/综合工具会按照您的敏感度列表执行您所期望的操作,但其中一些可能没有。
根据数组的大小,这可能是也可能不是可合成的。大型阵列通常被实现为RAM,并且通常每个时钟周期只能读出一个数组的值,因此您无法将它们全部归为and
。
答案 1 :(得分: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