2017-07-18 35 views

回答

2

查看https://github.com/cliffordwolf/icestorm/tree/master/examples/icestick舉例。該「rs232demo」項目配備了一個試驗檯和Makefile文件中包含之前和之後的綜合模擬規則:

make rs232demo_tb.vcd  # pre-synthesis simulation 
make rs232demo_syntb.vcd # post-synthesis simulation 

使用VCD觀衆喜歡gtkwave來查看這個兩個命令生成的VCD文件。

爲了運行綜合後仿真一個必須首先將網表BLIF(合成輸出)轉換爲網表的Verilog:yosys -p 'read_blif -wideports example.blif; write_verilog example_syn.v'

此網表將實例iCE40設備的基元。 Yosys爲這些基元提供了模擬模型。運行命令yosys-config --datdir/ice40/cells_sim.v以打印該模擬庫的完整路徑名稱。編譯仿真時使用此Verilog文件。

編輯:

(1)時鐘不應該使用時刻0,因爲這樣一個時鐘邊沿會導致時鐘之間的競爭條件寄存器的更新和註冊初始化:兩個關於合成後的模擬其他常見問題解答。即用於生成時鐘下面的測試平臺的代碼是有問題的:

reg clk = 1; 
    always #5 clk = ~clk; 

相反,你應該使用類似下面,離開時鐘信號不確定在最初階段:

reg clk; 
    always #5 clk = (clk === 1'b0); 

(2)一些信號(或矢量的各個位)可以在合成過程中被優化掉。這些位可以設置爲一個常數值(通常爲x)或者由工具保持懸空。在嘗試檢查合成後仿真結果時,這可能會造成混淆。在要保留該工具的網上設置keep屬性:

(* keep *) reg [31:0] foobar;