带cocotb的verilog:赋值语句

verilog with cocotb : assign statement

我的 verilog 代码是一个仅使用 assign sum = a+b 的加法器。问题是,虽然 运行 它使用 cocotb,但 sum 仍然未知,尽管 ab 具有有效值。当我将 sum 设为 reg 类型时,它起作用了。

`timescale 1 ns / 1 ps

module adder(input [7:0] a,
        input [7:0] b,
        output reg  [7:0] sum,
        output [7:0] sum2);

    assign sum2=a+b;        //Trouble is here
    always@(a,b) begin
        sum=a+b;            //This works
    end

`ifdef COCOTB_SIM
    initial begin
        $dumpfile("adder.vcd");
        $dumpvars();
    end
`endif
endmodule

我认为这实际上是由 v0.9.7 中存在的 Icarus 错误引起的。

如果您升级到最新的开发版本,您会发现连续分配工作正常。其他模拟器也可以很好地处理连续赋值。

如果您卡在那个版本的 Icarus 上,您可以通过将分配放在一个进程中来解决它,正如您发现的那样。