Quartus Prime 與 Modelsim 調試 及do文件使用
前言
最新從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本身的一些信息
- 2017開始quartus prime 分standard和pro版本,standard版本支持器件到a10,pro能s10.
- standard版本支持直接調用modelsim(通過run simulation tool),pro版本沒有這個選項
- 安裝quartus時可以直接不勾選modelsim(starter版也可以,但是不推薦,有些仿真限制(1w行代碼))
- 可以勾選modelsim-intel edition(需單獨和諧),這樣仿真的時候do文件就不用編譯和鏈接(vmap)基礎庫了,但是ip核相關的文件還是要加
- 接下來的演示以modelsim獨立版本為例,目的是探索pro版本的全部操作
調試 1(基於無IP核模式and簡單Verilog代碼)
安裝完quartus(standard edition)后:
安裝modelsim10.5se 並和諧:
下面基於是modelsim獨立版本
- 在quartus中鏈接modelsim(每個新工程都需要這樣做一次):
- 並且編譯一次器件庫到modelsim中,在quartus中也定位一下編譯好的庫(這樣就不用每次仿真前都編譯一下,但是每個工程都需要設 置一次
- 定位好了以后就可以順利仿真了,通過run simulation tool。
這里是編譯基礎庫和quartus中鏈接user compiled library location 的方法
這里是quartus設置仿真軟件及testbench的方法
調試2 (基於有ip核)
使用簡單的 IOPLL IP核進行測試,基於quartus prime 2017 standard:調試仿真
- 按照調試1中的步驟進行設置,發現會報錯誤,類似於找不到編譯庫(PLL相關)
do文件(通過run simulation tool 生成的do)編譯ip核的包的時候可能會出現錯誤(找不到ip核的相關包) - 這種情況就不能如1中一樣設置 user compiled library location為quartus預先編譯的modelsim庫(會缺ip核的包)
- 把這個選項reset成none,也就是不設置
- 同時,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