2015-11-08 112 views
2

我的verilog代码是一个加法器,只是使用assign sum = a+b。问题是,虽然使用cocotb运行它,但sum仍然未知,但ab具有有效值。当我使sum成为reg类型时,它可以工作。verilog with cocotb:assign语句

`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 
    [email protected](a,b) begin 
     sum=a+b;   //This works 
    end 

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

gtkwave output

回答

4

我相信这实际上是由在伊卡洛斯目前在v0.9.7的错误引起的。

如果你升级到最新的开发版本,你会发现连续分配工作正常。其他模拟器也处理连续分配罚款。

如果您被困在该版本的Icarus上,您可以通过将任务放入进程中来解决该问题,正如您发现的那样。

+0

你是对的。这是一个错误。 –

+2

我把波形图像显示为一个Gtkwave窗口,提示您使用伊卡洛斯? – user1155120

+1

@ user1155120 GTKWave是一个赠品,但也有一些人也遇到了这个问题。不幸的是,流行Linux发行版的大多数版本库仍然提供了Icarus v0.9.7 – Chiggs