Quartus II和Modelsim的聯合仿真

原文:http://www.cnblogs.com/Jezze/archive/2012/09/14/2684333.html

這篇文章不需要在modelsim中建庫、映射、建工程等一些繁瑣的步驟,直接使用modelsim中的默認work庫。使用quartus+modelsim聯合仿真。

首先推薦一篇文章 http://www.cnblogs.com/emouse/archive/2012/07/08/2581223.html

首先,根據上一篇文章,建立一個testbench模板;

 

第一次用modelsim+quartus的時候需要在quartus中設置modelsim的路徑,quartus->tools->general->EDA tool options ,在右邊選擇modelsim的安裝路徑,如下圖:

 

然後在Quartus->setting->simulation中設置仿真工具(選擇modelsim),輸出netlist語言(選擇 VHDL or Verilog),然後在下面添加testbench;如下圖:


 

到edit test settings這個步驟的時候需要說明一下,其中test bench name可以自己定,下面兩個的內容根據test bench文件中的內容而定。

比如說我用verilog寫的test bench如下:

那麼我下面兩個的名字就爲分別爲 Counter_tb和counter 如下圖:

 

如果是用VHDL寫的test bench,如下圖

 

那麼我們下面兩個的內容就是ADC_vhd_tst和i1,如同下圖

 

這樣設置了之後,就可以從quartus中直接進行RTL仿真和門極(時序)仿真了,(上圖打勾就代表使用時序仿真);具體爲什麼要這麼設置請看http://www.uio.no/studier/emner/matnat/fys/FYS4220/h12/documentation/quartus_modelsim_setup.pdf  如果不這麼設置的話,可以進行RTL仿真,但是不能進行門級(時序)仿真,門級(時序)仿真的時候會報 Failed to find INSTANCE 錯誤。

 

做到上一部可以編寫程序,然後編譯,接着運行RTL simulation,這個時候modelsim會自己啓動,然後自己編譯,接着在work library中會有兩個單元,其中一個是testbench生成的,我們仿真的話是用這個。然後添加波形什麼的就可以仿真了。

運行時序仿真的話單擊quartus上的gate-level simulation按鈕就可以了。

接着最關鍵的問題來了如果我們修改了VHDL程序或者testbench,怎麼在modelsim中更新,我在網上找了很多教程,發現只做到上一步就結束了,在modelsim中更新的話只有關掉modelsim,在quartus中重新進行RTL simulation,顯然這樣很麻煩,直到我看到這篇文章http://www.cnblogs.com/emouse/archive/2012/07/08/2581223.html,這邊文章最後第7步完全可以不用做,我講一下我的做法。

當運行RTL simulation的時候,modelsim會自己啓動,且開始編譯,這個是時候實際上它有個命令被輸入了,你可以在transcripe中按向上的箭頭,會發現有個do ****.do 的命令,你可以在simlation文件夾中找到這個do文件,如果你進行RTL仿真的話,會有****rtl****.do文件,亦然,如果進行gate-level 仿真的話,就有*******gate****.do  文件,請注意區分。當你修改了程序之後要想在modelsim中更新,直接敲這個do *****.do命令就OK了,但是每次敲這個命令會把庫文件重新編譯,大大浪費了時間,所以你可以找到這個文件,打開,把上面一部分編譯庫文件的指令註釋掉,如下圖:

這個時候執行do指令的話,幾秒鐘就執行完畢了,modelsim中也更新了。

當然modelsim中也可以不用test bench仿真,可以敲force指令生成波形,具體找資料吧。

 

在test bench中,輸入信號都要初始化,否則會顯示‘X’任意狀態,且不能全都放在一個process中初始化,不然在別的process中對其操作也會呈現‘X’,最好要使用之前初始化一下就可以了.

好像RTL仿真修改了VHLD文件後不需要編譯,直接使用do命令就可以更新仿真結果,門級仿真則需要編譯一下,再使用do命令纔會更新


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