1. 程式人生 > >Quartus II和Modelsim的聯合模擬

Quartus II和Modelsim的聯合模擬

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

這篇文章不需要在modelsim中建庫、對映、建工程等一些繁瑣的步驟,直接使用modelsim中的預設work庫。使用quartus+modelsim聯合模擬。

首先,根據上一篇文章,建立一個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,如同下圖

做到上一部可以編寫程式,然後編譯,接著執行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命令才會更新