Arrays Verilog、logic或ing整个阵列

Arrays Verilog、logic或ing整个阵列,arrays,input,verilog,Arrays,Input,Verilog,假设我有这样一个数组: parameter n=100; reg array[0:n-1]; 如何获得数组中每一位的逻辑或值? 结果电路必须是组合电路 这是我的后续问题 (请参阅下面的讨论答案)我不知道这是否符合您的设计要求,但使用100位总线reg[n-1:0]阵列可能会更容易而不是使用1位导线阵列。Verilog没有支持数组的最佳语法。如果你有一个总线,你可以只分配result=|数组 如果您必须使用数组,那么我可能首先考虑将它转换成具有生成循环的总线,然后做同样的操作: paramete

假设我有这样一个数组:

parameter n=100;
reg array[0:n-1];
如何获得数组中每一位的逻辑或值? 结果电路必须是组合电路

这是我的后续问题
(请参阅下面的讨论答案)

我不知道这是否符合您的设计要求,但使用100位总线
reg[n-1:0]阵列可能会更容易而不是使用1位导线阵列。Verilog没有支持数组的最佳语法。如果你有一个总线,你可以只分配
result=|数组

如果您必须使用数组,那么我可能首先考虑将它转换成具有生成循环的总线,然后做同样的操作:

parameter n=100;
reg array[0:n-1];
wire [n-1:0] dummywire;

genvar i; 
generate 
  for (i = 0; i < n; i = i+1)  begin
    assign dummywire[i] = array[i];
  end  
endgenerate  

assign result = |dummywire;
参数n=100;
reg数组[0:n-1];
金属丝[n-1:0]达姆金属丝;
genvar i;
生成
对于(i=0;i

我不知道有什么更优雅的方法可以在阵列上实现这一点。

我不知道这是否符合您的设计要求,但使用100位总线
reg[n-1:0]阵列可能会容易得多而不是使用1位导线阵列。Verilog没有支持数组的最佳语法。如果你有一个总线,你可以只分配
result=|数组

如果您必须使用数组,那么我可能首先考虑将它转换成具有生成循环的总线,然后做同样的操作:

parameter n=100;
reg array[0:n-1];
wire [n-1:0] dummywire;

genvar i; 
generate 
  for (i = 0; i < n; i = i+1)  begin
    assign dummywire[i] = array[i];
  end  
endgenerate  

assign result = |dummywire;
参数n=100;
reg数组[0:n-1];
金属丝[n-1:0]达姆金属丝;
genvar i;
生成
对于(i=0;i

我不知道有什么更优雅的方法可以在数组上执行此操作。

Tim的回答显示了一个压缩数组声明。了解这个数组与未打包数组之间的区别非常有帮助
和未打包的数组是
reg unpacket[0:9]。我明白了,但两者有什么区别呢?简言之,
reg[9:0]打包将作为单个值访问,而
reg unpacket[9:0]
不能。So
packed=6有效,但
解包=6不可用。我应该注意到,打包/解包是SystemVerilog术语,但在Verilog中的概念是相同的。了解这个数组与未打包数组之间的区别非常有帮助
和未打包的数组是
reg unpacket[0:9]。我明白了,但两者有什么区别呢?简言之,
reg[9:0]打包将作为单个值访问,而
reg unpacket[9:0]
不能。So
packed=6有效,但
解包=6不可用。我应该注意到,打包/解包是SystemVerilog术语,但在Verilog中的概念是相同的。