Quartus Prime 與 Modelsim 調試 及do文件使用


Quartus Prime 與 Modelsim 調試 及do文件使用

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/qq_24828193/article/details/93875548

 

 

前言

最新從Xilinx轉到Intel,摸索quartus調試做的一些總結
推薦使用quartus加modelsim-intel edition,原因后面講。但是本博客的目的是總結出quartus prime pro的modelsim使用(這個是最麻煩,自動化最差的),所以選擇modelsim的獨立版本。本文通過學習standard版本中自動生成的do文件,學習並總結modelsim仿真庫的配置(基於quartus)和do文件的詳細使用。

調試1,調試2 作為學習仿真操作和do文件編寫的一個探索,調試3是pro版真正實操的流程
困難:目前只能對a10及以下芯片仿真,Stratix 10(pro edition才能用)找不到對應的仿真庫(器件庫已經裝了,但是找不到仿真庫),目前沒法仿真,若有大佬知道怎么解決,望告知,感激不盡。

Quartus本身的一些信息

  1. 2017開始quartus prime 分standard和pro版本,standard版本支持器件到a10,pro能s10.
  2. standard版本支持直接調用modelsim(通過run simulation tool),pro版本沒有這個選項
  3. 安裝quartus時可以直接不勾選modelsim(starter版也可以,但是不推薦,有些仿真限制(1w行代碼))
  4. 可以勾選modelsim-intel edition(需單獨和諧),這樣仿真的時候do文件就不用編譯和鏈接(vmap)基礎庫了,但是ip核相關的文件還是要加
  5. 接下來的演示以modelsim獨立版本為例,目的是探索pro版本的全部操作

調試 1(基於無IP核模式and簡單Verilog代碼)

安裝完quartus(standard edition)后:
安裝modelsim10.5se 並和諧:
下面基於是modelsim獨立版本

  1. 在quartus中鏈接modelsim(每個新工程都需要這樣做一次):
  2. 並且編譯一次器件庫到modelsim中,在quartus中也定位一下編譯好的庫(這樣就不用每次仿真前都編譯一下,但是每個工程都需要設 置一次
  3. 定位好了以后就可以順利仿真了,通過run simulation tool。

這里是編譯基礎庫和quartus中鏈接user compiled library location 的方法
這里是quartus設置仿真軟件及testbench的方法

調試2 (基於有ip核)

使用簡單的 IOPLL IP核進行測試,基於quartus prime 2017 standard:調試仿真

  1. 按照調試1中的步驟進行設置,發現會報錯誤,類似於找不到編譯庫(PLL相關)
    do文件(通過run simulation tool 生成的do)編譯ip核的包的時候可能會出現錯誤(找不到ip核的相關包)
  2. 這種情況就不能如1中一樣設置 user compiled library location為quartus預先編譯的modelsim庫(會缺ip核的包)
  3. 把這個選項reset成none,也就是不設置
  4. 同時,IP核的仿真文件需要在設置IP核generate HDL的時候勾選simulation
    在這里插入圖片描述

若不設置user compiled labrary,則每次的do文件都會編譯一次基礎庫(從quartus安裝目錄下面)和ip核相關文件(這個ip核的仿真文件需要在設置IP核generate HDL的時候勾選simulation ),.do文件實例如下(quartus standard 生成的),可以看出除了基礎庫,還會編譯pll.vo,這個是生成ip核時同時生成的,這個就是最完整的.do文件,作為pro版自己編寫時的參考

可以看到,modelsim仿真需要 的所有操作, 鏈接編譯 基本庫、ip核vo,v(包含ip核頂層文件v,還有主體文件vo)、 編譯用戶文件.v、 編譯testbench , 並仿真testbench
這部分代碼一定不能跳過,要仔細研究


transcript on
if ![file isdirectory test_iputf_libs] { file mkdir test_iputf_libs } if ![file isdirectory verilog_libs] { file mkdir verilog_libs } vlib verilog_libs/altera_ver vmap altera_ver ./verilog_libs/altera_ver vlog -vlog01compat -work altera_ver {e:/quartus2017standard/quartus/eda/sim_lib/altera_primitives.v} vlib verilog_libs/lpm_ver vmap lpm_ver ./verilog_libs/lpm_ver vlog -vlog01compat -work lpm_ver {e:/quartus2017standard/quartus/eda/sim_lib/220model.v} vlib verilog_libs/sgate_ver vmap sgate_ver ./verilog_libs/sgate_ver vlog -vlog01compat -work sgate_ver {e:/quartus2017standard/quartus/eda/sim_lib/sgate.v} vlib verilog_libs/altera_mf_ver vmap altera_mf_ver ./verilog_libs/altera_mf_ver vlog -vlog01compat -work altera_mf_ver {e:/quartus2017standard/quartus/eda/sim_lib/altera_mf.v} vlib verilog_libs/altera_lnsim_ver vmap altera_lnsim_ver ./verilog_libs/altera_lnsim_ver vlog -sv -work altera_lnsim_ver {e:/quartus2017standard/quartus/eda/sim_lib/altera_lnsim.sv} vlib verilog_libs/twentynm_ver vmap twentynm_ver ./verilog_libs/twentynm_ver vlog -vlog01compat -work twentynm_ver {e:/quartus2017standard/quartus/eda/sim_lib/twentynm_atoms.v} vlog -vlog01compat -work twentynm_ver {e:/quartus2017standard/quartus/eda/sim_lib/mentor/twentynm_atoms_ncrypt.v} vlib verilog_libs/twentynm_hssi_ver vmap twentynm_hssi_ver ./verilog_libs/twentynm_hssi_ver vlog -vlog01compat -work twentynm_hssi_ver {e:/quartus2017standard/quartus/eda/sim_lib/mentor/twentynm_hssi_atoms_ncrypt.v} vlog -vlog01compat -work twentynm_hssi_ver {e:/quartus2017standard/quartus/eda/sim_lib/twentynm_hssi_atoms.v} vlib verilog_libs/twentynm_hip_ver vmap twentynm_hip_ver ./verilog_libs/twentynm_hip_ver vlog -vlog01compat -work twentynm_hip_ver {e:/quartus2017standard/quartus/eda/sim_lib/mentor/twentynm_hip_atoms_ncrypt.v} vlog -vlog01compat -work twentynm_hip_ver {e:/quartus2017standard/quartus/eda/sim_lib/twentynm_hip_atoms.v} if {[file exists rtl_work]} { vdel -lib rtl_work -all } vlib rtl_work vmap work rtl_work ###### Libraries for IPUTF cores vlib test_iputf_libs/PLL_altera_iopll_171 vmap PLL_altera_iopll_171 ./test_iputf_libs/PLL_altera_iopll_171 ###### End libraries for IPUTF cores ###### MIF file copy and HDL compilation commands for IPUTF cores vlog "E:/qua_standard_proj/PLL/altera_iopll_171/sim/PLL_altera_iopll_171_qwujbna.vo" -work PLL_altera_iopll_171 vlog "E:/qua_standard_proj/PLL/sim/PLL.v" vlog -vlog01compat -work work +incdir+E:/qua_standard_proj {E:/qua_standard_proj/test.v} vlog -vlog01compat -work work +incdir+E:/qua_standard_proj/simulation/modelsim {E:/qua_standard_proj/simulation/modelsim/test.vt} vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -L PLL_altera_iopll_171 -voptargs="+acc" top_vlg_tst add wave * view structure view signals run 1 us 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71

到此就可以正常的仿真了,但是這樣每次都要編譯一次基礎庫,很麻煩,所以編譯一次以后,就可以進行這樣的設置:、

  1. 在user compiled library location設置本工程simulation/modelsim的路徑(之前的那個do文件,會把所有的編譯結果存儲在同文件夾下,這個是可以直接調用的)

設置示例:
設置示例
目錄結構,紅框標記的就是編譯生成的庫和modelsim的project文件夾(work)
在這里插入圖片描述
這樣每次仿真需要的庫這邊都有了
如果再次使用run simulation tool ,查看產生的新的.do文件,這次沒有編譯基礎庫,只是鏈接(vmap)了一下已有的編譯結果。

transcript on
if ![file isdirectory test_iputf_libs] { file mkdir test_iputf_libs } #vmap altera_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/altera_ver #vmap lpm_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/lpm_ver #vmap sgate_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/sgate_ver #vmap altera_mf_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/altera_mf_ver #vmap altera_lnsim_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/altera_lnsim_ver #vmap twentynm_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/twentynm_ver #vmap twentynm_hssi_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/twentynm_hssi_ver #vmap twentynm_hip_ver E:/qua_standard_proj/simulation/modelsim/verilog_libs/twentynm_hip_ver if {[file exists rtl_work]} { vdel -lib rtl_work -all } vlib rtl_work vmap work rtl_work ###### Libraries for IPUTF cores vlib test_iputf_libs/PLL_altera_iopll_171 vmap PLL_altera_iopll_171 E:/qua_standard_proj/simulation/modelsim/test_iputf_libs/PLL_altera_iopll_171 ###### End libraries for IPUTF cores ###### MIF file copy and HDL compilation commands for IPUTF cores vlog "E:/qua_standard_proj/PLL/altera_iopll_171/sim/PLL_altera_iopll_171_qwujbna.vo" -work PLL_altera_iopll_171 vlog "E:/qua_standard_proj/PLL/sim/PLL.v" vlog -vlog01compat -work work +incdir+E:/qua_standard_proj {E:/qua_standard_proj/test.v} vlog -vlog01compat -work work +incdir+E:/qua_standard_proj/simulation/modelsim {E:/qua_standard_proj/simulation/modelsim/test.vt} #-L 后面接着要鏈接的庫,類似於 #include xxx.h vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -L PLL_altera_iopll_171 -voptargs="+acc" top_vlg_tst add wave * view structure view signals run 1 us 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

用這樣的do文件進行仿真,不用重復編譯

參考這個設計:

  1. 就可以在pro edition里面先設置仿真軟件為modelsim后

  2. 參考完整的do文件(第一個),編寫對應其設計和路徑的do文件

  3. 在modelsim 中File-Change Directory 到do所在的文件夾后

  4. 運行do xxx.do 編譯全部需要庫並開始第一次仿真。

  5. 第二次仿真可以參考本文第二個do文件編寫do文件,(主要操作是Vmap)

即可脫離quartus直接使用modelsim仿真,使用編輯器編譯工程Verilog代碼和testbench后運行do文件就可以重新編譯和仿真了(庫沒變所以不用重新編譯)。

調試3 PRO edition+Modelsim-Intel edition

前期工作,安裝Modelsim-Intel edition 這個軟件已經把需要的庫全部編譯鏈接好了
如圖
在這里插入圖片描述
軟件安裝和quartus建立工程部分略去
quartus pro 中 assignment-setting-EDA Tool Setting 中選擇modelsim-intel FPGA
IP核還是選擇如下
在這里插入圖片描述
top.v文件如下

module top
(
	input wire a,
	input wire b,
	output reg c,
	input wire clk,
	input wire reset	
	);
	reg aa,bb;
	wire locked;
	wire sysclk;
	pll_custom u0 (
		.rst      (reset),      //   reset.reset
		.refclk   (clk),   //  refclk.clk
		.locked   (locked),   //  locked.export
		.outclk_0 (sysclk)  // outclk0.clk
	);
	always@(posedge sysclk)
	begin 
	    aa<=a;
	    bb<=b;
	    c<=aa&bb;
	end 

endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

test.vt 或者test.v 如下:其模塊名字為 top_vlg_tst

`timescale 1 ns/ 1 ps
module top_vlg_tst();
    // constants
    // general purpose registers
    parameter period = 10;
    // test vector input registers
    reg a;
    reg b;
    // wires
    wire c;
    reg clk;
    reg reset;
    // assign statements (if any)
    top t1 (
    // port map - connection between master ports and signals/registers
    .a(a),
    .b(b),
    .c(c),
    .clk(clk),
    .reset(reset)
    );
    initial
    begin      
        clk = 0;        
        a     = 0;
        b     = 0;
        reset = 0;
        #(5*period)
        reset = 1;
        #(5*period)
        reset = 0;
        #(200*period)
              
        #(5*period)
        a = 1;
        b = 1;
        #(5*period)
        a = 0;
        b = 1;
        // --> end
        //$display("Running testbench");
    end
    
    always #(period/2) clk = ~clk;
    
    
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

編寫rtl_verilog.do 文件

transcript on
#由於是這個modelsim Intel edtion已經把庫編譯鏈接了,可以直接訪問相關庫,所有這里不需要用vmap鏈接庫
if {[file exists rtl_work]} {
	vdel -lib rtl_work -all
}
vlib rtl_work
vmap work rtl_work
#編譯需要的工程文件
vlog -vlog01compat -work work +incdir+E:\project_2017_pro\simulation\modelsim {E:\project_2017_pro\simulation\modelsim\top.v}

vlog -vlog01compat -work work +incdir+E:\project_2017_pro\simulation\modelsim {E:\project_2017_pro\simulation\modelsim\test.v}
#編譯生成的IP核文件
vlog -vlog01compat -work work +incdir+E:\project_2017_pro\pll_custom\sim {E:\project_2017_pro\pll_custom\sim\pll_custom.v}

vlog -vlog01compat -work work +incdir+E:\project_2017_pro\pll_custom\altera_iopll_171\sim {E:\project_2017_pro\pll_custom\altera_iopll_171\sim\pll_custom_altera_iopll_171_vidhshy.vo}

#開始仿真,  vsim -L library ,這里類似於include,由於軟件中已經預先鏈接了這些庫,這里可以直接include,而不需要根據路徑去找,再用vmap鏈接
vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -voptargs="+acc"  top_vlg_tst

#top_vlg_tst 這個就是testbench里面的測試model名字

add wave *
view structure
view signals
run 10 us
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

單獨打開Moselsim-Intel-FPGA-edition
File-change derectory…
選擇.do文件所在文件夾
運行命令 do rtl_verilog.do 開始仿真

TIPS
仿真時 這些-L的參數也有些煩,容易漏

vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L twentynm_ver -L twentynm_hssi_ver -L twentynm_hip_ver -L rtl_work -L work -voptargs="+acc"  top_vlg_tst
  • 1

參考這個鏈接中的Modelsim庫編譯過程()
https://blog.csdn.net/pianzhiwdy1996/article/details/80099780
但是不全照搬,為了方便,只生成和compile一個 Altera_all 的library,但是這個library要編譯 E:\quartus2017pro\quartus\eda\sim_lib 這個路徑下所有的 .v 和 .sv文件,包括二級目錄下(for Verilog,compile過程有報錯,目前無視)
在這里插入圖片描述
根據鏈接中的步驟,最終添加好altera_all library的時候,do文件中就可以這樣啟動仿真

vsim -t 1ps -L altera_all -voptargs="+acc"  top_vlg_tstvs
  • 1

最終開始仿真

調試4:Quartus 2017 standard timequst Timing Analyer and sdc

添加Pll的時鍾約束,然后端口參考PLL時鍾,參考sdc,添加約束,這樣就不會報uncontrain約束warning。PLL時鍾是在時鍾報告中找到的具體名字
在這里插入圖片描述

目前還有的問題:
1.gate level simulation中沒有看到波形延遲,存疑

 


免責聲明!

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



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