线或归约数组是错误的

问题描述 投票:0回答:1

我尝试对数组执行或reduce操作。当赋值左边是寄存器数组时就可以了。当赋值左边是一个

wire
数组时,则只有数组的最后一个元素参与归约。为什么?如何正确减少线阵?

这是一段可以帮助你理解这个问题的代码:

module tst_reduction;

parameter DATA_WIDTH = 3;
parameter SIZE = 4;
reg  [DATA_WIDTH-1:0] m  [SIZE-1:0];
wire [DATA_WIDTH-1:0] m1 [SIZE-1:0];
wire [DATA_WIDTH-1:0] out1;
wire [DATA_WIDTH-1:0] out2;

assign m1 = m;
assign out1 = m.or();  // m is a reg, all right
assign out2 = m1.or(); // m1 is a wire, problem

integer i, j;
initial begin
    m = {0, 0, 0, 0};   
    for (i = 0; i < SIZE; i = i + 1) begin
        for (j = 0; j < 2**DATA_WIDTH; j = j + 1) begin
            #10;
            m[i] = j;
        end;
        #10;
        m[i] = 0;
    end
    #10;
end

endmodule

我希望

out1
out2
相等,但事实并非如此。

本例仿真输出波形:

Simulation waveform

verilog system-verilog quartus
1个回答
0
投票

当我在 Cadence 模拟器上运行您的代码时,

out
out2
彼此相等。

当我在 Synopsys 模拟器上运行它时,我收到如下编译错误:

Error-[SV-FNYI] Feature not yet implemented
  SystemVerilog feature not yet implemented. Array manipulation method as the 
  RHS of a continuous assignment. Expression: m.or

也许Quartus没有正确实现这个功能。 将此报告给他们的支持人员。

在 EDA Playground 的不同模拟器上尝试您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.