简体   繁体   English

如何在一个时钟周期内对二维数组中的每个元素进行“或”运算? Verilog

[英]How can I OR every element in two dimensional array in one clock cycle? Verilog

wire [a-1:0] array [b-1:0]; 线[a-1:0]阵列[b-1:0];

How can I OR the b array elements and get an a bits result in 1 clk? 如何对b数组元素进行OR运算并得到a位结果,结果为1 clk? Thank you 谢谢

Verilog ways: Verilog方式:

reg [a-1:0] or_of_array;
integer i;
always @* begin
  or_of_array = array[0];
  for(i=1; i<b; i=i+1) begin
    or_of_array = or_of_array | array[i];
  end
end

SystemVerilog way: SystemVerilog方式:

logic [a-1:0] or_of_array;
always_comb begin
  or_of_array = 0;
  foreach(array[i]) begin
    or_of_array |= array[i];
  end
end

SystemVerilog also supports wire [a-1:0] wire_or_of_array = array.or(); SystemVerilog还支持wire [a-1:0] wire_or_of_array = array.or(); but may not be supported by all synthesizer. 但可能并非所有合成器都支持。

You can directly use a loop to or each element with previous element. 您可以直接使用循环,也可以直接使用每个元素与上一个元素。

wire [a-1:0] op;

// Inside an always block
for (int i = 0; i < array.size(); i++)
  op = op | array[i];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM