下面是基于在Altera Quartus II 下如何調用ModelSim 進行仿真的一個實例。 不能否認,Quartus II(我用的7.0)無法像ISE 那樣方便的直接調用ModelSim,而是需要額外的做一些工作。這確實給我們的仿真調試帶來了一些不便。特權同學也是在摸索了好久以后才徹底搞定這個問題,下面分享下,力求明白易懂,讓大家少走一些彎路。 1、 打開Quartus II,新建一個工程,工程代碼如下(只是做一個簡單的二分頻電路): module modelsim_test( clk,rst_n,div ); input clk; //系統時鐘 input rst_n; //復位信號,低有效 output div; //2 分頻信號 reg div; always @ (posedge clk or negedge rst_n) if(!rst_n) div <= 1'b0; else div <= ~div; endmodule 2、 進入菜單欄的Assignments EDA Tool Settings,進入如下界面: 雙擊“EDA tools”下的“Simulation”選項,彈出如下界面: 點擊Tool name 最右側的下拉條,選擇“ModelSim”,在彈出的界面做如下設置: 3、 以上設置完成,重新編譯工程。 打開工程目錄,看到多了一個“simulation”文件夾,再打開該文件夾下的“modelsim”文件夾。看到有三個文件,其中.vo 文件就是我們的代碼布局布線信息。仿真還需要幾個文件,我們把它們都拷貝到該目錄下。 4、 打開“C:altera70quartusedasim_lib”(具體quartus 軟件安裝文件的根目錄視您的實際情況而定,大體路徑都一樣),因為我們用的是MAX II器件,所以把“maxii_atoms.v”拷貝到3 中提到的目錄下,這個文件是仿真元件庫。 5、 編寫一個工程RTL 源碼的Testbench 文件,用于作為仿真激勵(具體如何編寫清參考相關數據文檔資料)。這個實例的testbench 如下: module vtf_test; // Inputs reg clk; reg rst_n; // Output wire div; modelsim_test u1( .clk(clk), .rst_n(rst_n), .div(div) ); initial begin clk = 0; forever #10 clk = ~clk; //產生50MHz 的時鐘 end initial begin rst_n = 0; #1000 rst_n = 1; //上電后1us 復位信號 #1000; $stop; end endmodule 將該文件命名為tb_test.v,保存到3 提到的文件夾下。 6、 在wokspace 的library 面板的空白處單擊右鍵,選擇“new”→“library” 在新彈出界面中做如下設置,然后點擊“OK”。 7、 啟動ModelSim 軟件,點擊菜單欄的Compilecompile 命令,彈出如下界面: Library 選擇剛才新建的“work_test”,查找范圍定位到我們3 提到的文件夾下。全選在該目錄下可以看到的文件,點擊Compile(注意該文件夾必須在全英文/數字路徑下,否則會出錯無法編譯)。 8、 我們回到wokspace 的library 面板,work_test 多處了下拉框,點擊后如下: 我們右鍵單擊vtf_test 文件,在彈出的菜單中選擇Simulation 9、 執行上面的操作后,軟件自動彈出wokspace 的sim 面板如下: 在vtf_test 欄單擊右鍵,在彈出菜單中選擇AddAdd to Wave。然后軟件將彈出波形窗口。 10、 波形窗口如下: 這時我們點擊全速編譯(一次不行,多點一次,工具欄倒數第三個按鈕), 然后點擊觀看全部波形(放大縮小按鈕后面一個藍色按鈕)。 11、 仿真結果如下: 可以看到div 信號確實是clk 的二分頻。呵呵,基本的操作就到此結束了。 |