【发布时间】:2016-03-06 21:33:16
【问题描述】:
线[a-1:0]数组[b-1:0];
如何对 b 数组元素进行 OR 运算并得到一个 a 位结果为 1 个 clk? 谢谢你
【问题讨论】:
-
使用 OR 约简运算符:
a=|b;。见this -
感谢您的建议。这是一个按位或,但是我想做的是二维数组的元素或。
线[a-1:0]数组[b-1:0];
如何对 b 数组元素进行 OR 运算并得到一个 a 位结果为 1 个 clk? 谢谢你
【问题讨论】:
a=|b;。见this
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();,但可能并非所有合成器都支持。
【讨论】:
您可以直接使用循环到或每个元素与前一个元素。
wire [a-1:0] op;
// Inside an always block
for (int i = 0; i < array.size(); i++)
op = op | array[i];
【讨论】: