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

时间:2016-03-01 22:36:05

标签: arrays verilog

wire [a-1:0] array [b-1:0];

我怎样才能对b数组元素进行OR并在1 clk中得到一个比特结果? 谢谢

2 个答案:

答案 0 :(得分:1)

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方式:

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也支持wire [a-1:0] wire_or_of_array = array.or();,但并非所有合成器都支持。

答案 1 :(得分:0)

您可以直接使用循环到前一个元素的每个元素。

wire [a-1:0] op;

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