【问题标题】:How can I OR every element in two dimensional array in one clock cycle? Verilog如何在一个时钟周期内 OR 二维数组中的每个元素? Verilog
【发布时间】:2016-03-06 21:33:16
【问题描述】:

线[a-1:0]数组[b-1:0];

如何对 b 数组元素进行 OR 运算并得到一个 a 位结果为 1 个 clk? 谢谢你

【问题讨论】:

  • 使用 OR 约简运算符:a=|b;。见this
  • 感谢您的建议。这是一个按位或,但是我想做的是二维数组的元素或。

标签: arrays verilog


【解决方案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();,但可能并非所有合成器都支持。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      相关资源
      最近更新 更多