2015-11-08 83 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