初次接觸modelsim的一些體驗


 

 

 

 

    在網上查找了一些資料來學習,看來看去覺得一篇講modelsim三種仿真方式的不錯,就按着步驟一步步做了,結果可想而知,問題是一個接一個啊,摸索了兩天還是有點收獲的,且記下。

    第一點:操控modelsim的基本方式

    1.用戶圖形界面接口(GUI),在界面也接受命令行輸入。(適合菜鳥)

    2.DO文件,應該是用TCL腳步語言寫的。(升級學習)

   

    第二點:關於在modelsim添加altera仿真庫的問題

    在網上看到很多關於這方面的資料,但都是比較老的,然后我發現他們想要添加的庫基本已經添加在新版  modelsim里面了,不知道是不是不用自己手動添加仿真庫了,仿真的時候只要指定下就行,我在做流水燈小程序仿真的時候指定原有庫沒有問題,也許其他程序利用到別的庫就需要自己制作添加了。10.30號聽別人說之所以不用添加庫是因為我使用的版本是 modelsim altera edition,里面自帶altera仿真庫。

   

     第三點:關於三種仿真(仿真步驟操作很多資料,不提)

    首先為自己掃盲一下。

  modelsim分SE,PE,LE,XE(xilinx版本),AE(altera版本),集成在設計廠商的都是其OEM版本;仿真分為功能仿真(前仿真,RTL級),門級仿真(綜合之后),時序仿真(布局布線之后),后兩者也叫后仿真。進行功能仿真需要的文件:HDL文件(.v),testbench文件(.v),仿真時候指定預編譯庫,一般選擇220model_ver;進行門級仿真需要的文件:testbench文件(.v),quartus ii產生的網表文件(.vo Verilog Output File),指定預編譯庫,一般就選相關的器件,如cycloneii_ver;進行時序仿真需要的文件:testbench文件(.v),quartus ii產生的網表文件(.vo),需要指定延時.sdo文件的路徑,如初次接觸modelsim的一些體驗其中led_inst是testbench里面例化頂層文件的例化名。 指定預編譯庫,一般就選相關的器件,如cycloneii_ver,這里需要注意的一點就是延時文件需要復制到Modelsim建立的project的根目錄下,原因不詳,不然就molesim仿真裝載發生錯誤。

下面貼上三種仿真后的wave圖。

初次接觸modelsim的一些體驗此為功能仿真圖,可以看出完全沒有延時輸出,時鍾沿也是同步的。
初次接觸modelsim的一些體驗此為門級仿真,可以看出延時輸出,但時鍾沿同步
初次接觸modelsim的一些體驗此為時序仿真,可以看出延時輸出,且時鍾已經不同步了。 第四點:quartus ii的相關設置

首先設置modelsim的路徑,如初次接觸modelsim的一些體驗
接着assignment--settings設置如下

初次接觸modelsim的一些體驗
然后,moresettings

初次接觸modelsim的一些體驗 settings設置為on則只會產生.vo文件,off則除了有.vo文件還有.sdo文件(標准延時輸出文件,標准延時文件SDF格式standard delay file)等,進行不同仿真時最好重新設置然后全編譯下,因為如果在門級仿真文件夾里面有.sdo文件好像會發生問題,modelsim中裝載仿真錯誤。注:比較新的quartue ii版本不再內置simulator工具,意思說不能使用內置仿真器進行仿真(Future versions of the quartus ii software will not support the quartus ii simulator Altera recommends using the modesim software for simulating designs ),當然也就不能從內部產生.sdo文件(以前版本進行全編譯后會產生延時文件供simulator使用)

最好不要勾選run gate_level simulation automatically after compilation的選項,或者使用EDA RTL simmulation/EDA gate level simmulatiao菜單,使用modelsim 進行仿真,相對在Quartus 中直接調用modelsim,至少有三個好處:     1.速度快。仿真必然會不停的修改設計,每次修改設計后在quartus ii中需要重新綜合后才能調用modelsim;時間花費更多,它還要等布局布線完成了才能調用。這樣每次等待是件很痛苦的事。而直接在modelsim里面仿真,修改后只要重新編譯即可仿真,速度要快的多。不過這樣有一個壞處,那就是設計不一定是可綜合的。但只要我們編程時時刻遵循可綜合設計規則,培養良 好的編程風格,這個缺點影響可減到最低。     2.調試方便。在Quartus 中調用modelsim 仿真只能看到輸入輸出信號,而對 於設計的中間信號/變量,特別是ip 核的內部信號/變量無法觀測。而在modelsim中直接仿真可以觀測設計中出現的任何信號/變量無和 ip核內的任何信號/變量,這樣我們設計的數據流向就可以很清楚的表示出來,還可以檢測不同編程方式的處理效果,極大的方便了調試。     3.修改參數方便。在modelsim 中仿真ip 核時需要將該ip 核的行為描述文件加入到工程中去。修改該行為描述文件中ip 核的參數可以方便的更改ip 核特性。

第五點:關於modelsim仿真中出現紅線或者藍線的問題

剛開始出現了一片慘紅的狀況額,在QQ群咨詢完,大概有以下原因會引起這種情況:1.RTL級中存在一些不可綜合的代碼,綜合的時候被綜合掉了,信號顯示不出來;2.時序仿真的時鍾設置不對,即testbench里面設置的時候得跟RTL級描述的相適應,在這里順便說下modelsim里面的run XXX 時間只是單步仿真時候的長短,與這種情況無關;3.testbench中沒有給一些信號賦予初始值;4.所謂的最白痴錯誤,testbench中不小心將信號描述成兩個變量,就像RST_n與RST_N,本人就是這么白痴額。

 

以上只是本人遇到的一些問題與看法,也許與大家的有較大的出入,僅供參考。

 

補: 產生Testbench

從QuartusII中產生Testbench,有兩種方法:

(1)從波形文件導出,方法如下:

打開波形仿真文件即.vwf文件,編輯輸入信息,點擊Flie—>Export,直接導出即可。

(2)也可以利用QuartusII產生Testbench模板,Processing>Start>Start Testbench TemplateWriter,再自行輸入測試信息。

3、Assignment>Settings>EDA Tools Setting>Simulation,配置NativeLink,點擊Test Benches,點擊New,進入Test Bench Setting的頁面,Test bench name 填asyn_fifo,此處可以隨意填寫,Top level module in test bench: asyn_fifo_vlg_tst,Design instance name in test bench這里填入asyn_fifo_tb.v中例化模塊的名字,最后在最下面加入你的asyn_fifo_tb.v文件,點擊OK即可。

注意:QuartusII中testbench文件的后綴是.vt,這個的模板可以通過Start->Start Test Bench Template Writer實現,產生的模板文件只是包含了端口映射,端口聲明等,具體的功能還是需要設計者自己編寫。

4、運行仿真。Tools>Run EDA Simulation Tool

其中,RTL Simulation是寄存器傳輸級仿真,它是理想化的仿真,不包含任何延時信息,通常用作功能檢驗,也稱作前仿真或功能仿真;

Gate-Level Simulation是門級仿真,通常也稱為后仿真或時序仿真,它包含邏輯電路、布局布線等延時信息,是對真實電路情況的仿真。要仿真門級仿真,需要在Fitter之后進行。

 

//////////////////////////////////////////////////////////////////////

  今天在用Modelsim做一個后仿真的時候,發現PLL的沒有輸出,在設定不同的測試時鍾頻率的時候,出現一下三種情況:

(1)當輸入時鍾周期小於在例化PLL時選擇的輸入時鍾周期時,在運行仿真時,會出現以下警告信息:

 

      Warning : Input clock freq. is under VCO range. Cyclone III PLL may lose lock

 

(2)當輸入時鍾周期大於在例化PLL時選擇的輸入時鍾周期時,在運行仿真時,會出現以下警告信息:

 

      Warning : Input clock freq. is over VCO range. Cyclone III PLL may lose lock

 

      這上面這兩種情況下,PLL都不會正常工作。如果出現上面第一種情況,可以將輸入測試時鍾的周期設置大一些。如果出現第二種情況,可以將輸入測試時鍾的周期設置小一些。

 

(3)當輸入時鍾周期等於在例化PLL時選擇的輸入時鍾周期時,在運行仿真時,會出現以下信息:

 

      Note : Cyclone III PLL locked to incoming clock

 

      這有這種情況下PLL才能正常工作

 

      根據以上這三種情況,我判斷應該是在編譯后生成的.vo文件中,包含了PLL的設置信息,如PLL的輸入頻率。但是我也發現比較困惑的一點就是輸入測試時鍾的頻率和例化PLL時設置的輸入時鍾頻率也不一定非要相等,PLL才能工作。不知道這是什么原因。

 

      但是也並不是只要將測試時鍾的頻率設定為與PLL的輸入時鍾完全相同時就一定可以正常工作,例如我例化的PLL的輸入時鍾頻率為400MHz(從器件手冊上看,Cyclone III 的PLL輸入是支持這么高的頻率的),在測試時我把輸入測試時鍾的頻率設置為2.5ns,但是PLL沒有輸出。當我改為5ns的時候就有輸出了。

 

      另外,在進行前仿真是,也發現了同樣的問題,即如果PLL的輸入時鍾頻率不合適那么PLL將不能夠工作,只不過在PLL不能正常工作的時候,Modelsim沒有任何提醒,只有在正常工作時,才出現Note : Cyclone III PLL locked to incoming clock。並且設置測試時鍾的頻率也不一定非要與PLL的輸出時鍾頻率相同才能正常工作。

 

      不知道測試時鍾的頻率應該在一個什么范圍內,PLL才能正常工作。希望更清楚的朋友多多指教!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM