系统 verilog 中我的层模块出现问题

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

我是 System Verilog 的新手,想编写一个模块来执行具有相应权重的输入的加权和。这是我的模块代码

module Layer #(parameter num_inps=2)(out, inps, ws, clk, rst);
    output reg out;
    input real inps[num_inps];
    input logic clk, rst;
    input real ws[num_inps];
    real temp[num_inps];
    genvar i;
    generate
        for(i=0; i<num_inps; i++) begin
            assign temp[i] = inps[i] * ws[i];
        end
    endgenerate
    always @( posedge clk, posedge rst) begin : res
        if (rst==1) begin
            out = 0;
        end
        else begin
            out = 0;
            begin
                for(int j=0; j<num_inps; j++) begin
                    out = out + temp[j];
                end
            end
        end
    end
endmodule

这是我的测试平台代码

module main_tb();
real out;
real inps[2], ws[2];
logic clk, rst;
Layer l1(out, inps, ws, clk, rst);
initial begin
    $dumpfile("target/ow.vcd");
    $dumpvars(0, l1);
    inps[0] = 1.0;
    inps[1] = 2.0;
    ws[0] = 5.0;
    ws[1] = 3.0;
    rst = 0;
    clk = 0;
    #10
    clk = 1;
    #10
    clk = 0;
    $display(out);
    #10
    $finish;
end
endmodule

我面临问题,因为当我实例化我的层模块并传递适当的输入时,

out
结果是1.0000而不是11.0000。我是否错误地使用了always块?如果是这样,请帮我纠正这个问题。非常感谢!

我目前正在使用 Icarus verilog 进行模拟,这是我传递给编译的标志

iverilog -g2012 -o output layer.sv main.sv
vvp output

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

改变:

output reg out;

至:

output real out;
© www.soinside.com 2019 - 2024. All rights reserved.