Python 带有cocotb的verilog:assign语句

Python 带有cocotb的verilog:assign语句,python,verilog,fpga,asic,cocotb,Python,Verilog,Fpga,Asic,Cocotb,我的verilog代码是一个加法器,它只使用赋值和=a+b。问题是,在使用cocotb运行它时,sum仍然未知,尽管a和b具有有效值。当我将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;

我的verilog代码是一个加法器,它只使用
赋值和=a+b
。问题是,在使用
cocotb
运行它时,
sum
仍然未知,尽管
a
b
具有有效值。当我将
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一窍不通,你可以通过将任务放在进程中来解决问题,正如你所发现的。

我认为波形图像显然显示了一个Gtkwave窗口,让你对Icarus的使用有所了解?@user1155120 Gtkwave是一个赠品,但也有一些人发现了这个问题。不幸的是,大多数流行Linux发行版的存储库仍然提供Icarus v0.9。7@Chiggs你好,克里斯,我创建了这个新标签,因为在SO有越来越多与cocotb相关的问题和答案。也许你想订阅它。@Paebbels对此表示感谢,他将订阅并尝试在我能帮助的地方帮助人们