這篇文章不需要在modelsim中建庫、映射、建工程等一些繁瑣的步驟,直接使用modelsim中的默認(rèn)work庫。使用quartus+modelsim聯(lián)合仿真。 首先推薦一篇文章 http://www.cnblogs.com/emouse/archive/2012/07/08/2581223.html 首先,根據(jù)上一篇文章,建立一個(gè)testbench模板;
第一次用modelsim+quartus的時(shí)候需要在quartus中設(shè)置modelsim的路徑,quartus->tools->general->EDA tool options ,在右邊選擇modelsim的安裝路徑,如下圖:
然后在Quartus->setting->simulation中設(shè)置仿真工具(選擇modelsim),輸出netlist語言(選擇 VHDL or Verilog),然后在下面添加testbench;如下圖:
到edit test settings這個(gè)步驟的時(shí)候需要說明一下,其中test bench name可以自己定,下面兩個(gè)的內(nèi)容根據(jù)test bench文件中的內(nèi)容而定。 比如說我用verilog寫的test bench如下:
那么我下面兩個(gè)的名字就為分別為 Counter_tb和counter 如下圖:
如果是用VHDL寫的test bench,如下圖
那么我們下面兩個(gè)的內(nèi)容就是ADC_vhd_tst和i1,如同下圖
這樣設(shè)置了之后,就可以從quartus中直接進(jìn)行RTL仿真和門極(時(shí)序)仿真了,(上圖打勾就代表使用時(shí)序仿真);具體為什么要這么設(shè)置請(qǐng)看http://www./studier/emner/matnat/fys/FYS4220/h12/documentation/quartus_modelsim_setup.pdf 如果不這么設(shè)置的話,可以進(jìn)行RTL仿真,但是不能進(jìn)行門級(jí)(時(shí)序)仿真,門級(jí)(時(shí)序)仿真的時(shí)候會(huì)報(bào) Failed to find INSTANCE 錯(cuò)誤。
做到上一部可以編寫程序,然后編譯,接著運(yùn)行RTL simulation,這個(gè)時(shí)候modelsim會(huì)自己啟動(dòng),然后自己編譯,接著在work library中會(huì)有兩個(gè)單元,其中一個(gè)是testbench生成的,我們仿真的話是用這個(gè)。然后添加波形什么的就可以仿真了。 運(yùn)行時(shí)序仿真的話單擊quartus上的gate-level simulation按鈕就可以了。 接著最關(guān)鍵的問題來了,如果我們修改了VHDL程序或者testbench,怎么在modelsim中更新,我在網(wǎng)上找了很多教程,發(fā)現(xiàn)只做到上一步就結(jié)束了,在modelsim中更新的話只有關(guān)掉modelsim,在quartus中重新進(jìn)行RTL simulation,顯然這樣很麻煩,直到我看到這篇文章http://www.cnblogs.com/emouse/archive/2012/07/08/2581223.html,這邊文章最后第7步完全可以不用做,我講一下我的做法。 當(dāng)運(yùn)行RTL simulation的時(shí)候,modelsim會(huì)自己啟動(dòng),且開始編譯,這個(gè)是時(shí)候?qū)嶋H上它有個(gè)命令被輸入了,你可以在transcripe中按向上的箭頭,會(huì)發(fā)現(xiàn)有個(gè)do ****.do 的命令,你可以在simlation文件夾中找到這個(gè)do文件,如果你進(jìn)行RTL仿真的話,會(huì)有****rtl****.do文件,亦然,如果進(jìn)行g(shù)ate-level 仿真的話,就有*******gate****.do 文件,請(qǐng)注意區(qū)分。當(dāng)你修改了程序之后要想在modelsim中更新,直接敲這個(gè)do *****.do命令就OK了,但是每次敲這個(gè)命令會(huì)把庫文件重新編譯,大大浪費(fèi)了時(shí)間,所以你可以找到這個(gè)文件,打開,把上面一部分編譯庫文件的指令注釋掉,如下圖:
這個(gè)時(shí)候執(zhí)行do指令的話,幾秒鐘就執(zhí)行完畢了,modelsim中也更新了。 當(dāng)然modelsim中也可以不用test bench仿真,可以敲force指令生成波形,具體找資料吧。
在test bench中,輸入信號(hào)都要初始化,否則會(huì)顯示‘X’任意狀態(tài),且不能全都放在一個(gè)process中初始化,不然在別的process中對(duì)其操作也會(huì)呈現(xiàn)‘X’,最好要使用之前初始化一下就可以了. 好像RTL仿真修改了VHLD文件后不需要編譯,直接使用do命令就可以更新仿真結(jié)果,門級(jí)仿真則需要編譯一下,再使用do命令才會(huì)更新 |
|