2

我的 verilog 代码是一个只使用assign sum = a+b. 问题是,虽然使用cocotb,运行它时sum仍然未知a并且b具有有效值。当我制作sumreg 类型时,它可以工作。

`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

gtkwave 输出

4

1 回答 1

4

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

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

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

于 2015-11-08T17:28:59.667 回答