開源wujian100-modlesim仿真

1、說明

阿里的平頭哥在github上開源了riscv項目-wujian100_open。本文是使用windows下的modelsim對該項目進行仿真(原開源項目是使用linux下的開源軟件iverilog進行仿真)。

由於wujian100沒有使用xilinx ip(我看ram'是使用觸發器數組寫的),所以可能可以不編譯xilinx的仿真庫。我電腦上xilinx仿真庫是編譯好且放到了modelsim.ini文件的。

把c代碼的編譯結果,hex文件,通過工具轉換爲pat文件。然後通過tb.sv把pat數據初始化到指令RAM裏面,開始執行(即開始仿真)。我使用的git代碼是2019.10.22的,激勵文件是inst.pat,後面代碼把文件名改成test.pat了(把激勵文件名改爲test.pat,放到仿真目錄下即可)。

c編譯結果到pat的轉換,另外一個文檔單獨描述。本文只介紹modelsim的仿真過程。

仿真遇到的問題有:1、sv語法;2、timescale定義;3、tc文件增加模塊調用。

對應提交了仿真的do文件,可以在wujian100並列的目錄,建立目錄sim1,然後執行附件裏的do文件。新版無劍代碼,需要把inst.pat改名爲test.pat。

2、仿真過程

使用modelsim仿真,我習慣先在vivado的項目裏啓動modelsim,目的是自動獲得編譯do文件和vsim的do文件。(好處是文件列表自動生產了)。

  • vivado項目中加入仿真文件,解決語法問題

無論modelsim直接仿真,還是vivado裏啓動modelsim仿真,有2個文件出現語法錯誤:busmnt.v和tb.v都會有語法錯誤。這是因爲兩個文件是sv語法寫的。我採用的方法是可以把.v後綴改爲.sv,就可以解決。其實直接使用modelsim時,也可以把compile的option從缺省的自動,修改爲強制sv。

  • 編譯,解決timescale問題,這是編譯方法導致的

 按照vivado裏啓動modelsim。編譯xilinx庫和加入simulation文件(tb目錄下的文件),vivado的settiing裏設置對應工具與庫(這是基本操作,看vivaod使用吧)。

選擇run simulation,modelsim啓動,會報告:Module 'fsmc' does not have a timeunit/timeprecision specification in effect, but other modules do.。

修改報錯的文件,包括:

wujian100_open/tb/virtual_counter.v,

wujian100_open/soc/usi0.v

wujian100_open/soc/dmac.v

加入:`timescale 1ns/100ps語句。

經過上述修改後,vivado可以啓動modelsim並vsim加載成功了。

  • 建立獨立的仿真目錄,使用modelsim直接運行仿真

完成前面的修改(修改v到sv;增加timescale定義);建立一個仿真目錄,該目錄和wujian100_open目錄並列(我起名sim1);

獲得vivado產生的do文件,將vivado仿真目錄下的complie和simulation的do文件,複製到仿真目錄;同時複製modelsim.ini和glbl.v到該目錄。

  • 修改compile.do:

1、修改相對路徑;2、只建立xil_default庫就可以;3、加上選定的case仿真文件;4、去掉quit、wave的語句.修改可參見我的do文件。

  • 修改case文件。

需要在tc文件裏,增加`define  TB_MODULE             wujian100_open_tb語句;增加對tb的例化:wujian100_open_tb wujian100_open_tb();

我是把case裏的gpio_test.v,增加上面兩句,並修改文件後綴,改爲gpio_test.sv。

  • 執行compile和simulation即可。

   上傳的inst.bat是timer.c產生的指令文件。已上傳。

附註:解決sv和timescale問題,可以使用一個do文件裏統一解決:1、v到sv,可以不修改,使用vlog參數或設置modelsim option;2、timescale和增加define,都是編譯順序,使用file list編譯,應該都可以的。我不花時間去嘗試了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章