做FPGA開(kāi)發(fā)的朋友,想必都踩過(guò)仿真環(huán)境的坑:要么軟件版本不兼容,要么仿真庫(kù)編譯報(bào)錯(cuò),要么Vivado調(diào)用第三方仿真器直接卡死,明明是很基礎(chǔ)的環(huán)境搭建,卻能耗掉大半天的開(kāi)發(fā)時(shí)間。
今天這篇文章,就給大家把Vivado+ModelSim/QuestaSim仿真環(huán)境的全流程講透,從軟件下載、版本選擇,到庫(kù)編譯、環(huán)境配置,再到 Windows系統(tǒng)卡死的專屬解決方案,一站式解決你的仿真環(huán)境搭建難題,新手照著做也能一次成功。
一、前期準(zhǔn)備:軟件安裝包下載與版本選擇
工欲善其事,必先利其器。仿真環(huán)境搭建的第一步,就是選對(duì)軟件版本、拿到靠譜的安裝包,避免后續(xù)出現(xiàn)兼容性問(wèn)題。
1. Vivado 設(shè)計(jì)套件
Vivado 是 AMD Xilinx FPGA 開(kāi)發(fā)的核心工具,我們先給大家整理了官方渠道和穩(wěn)定的網(wǎng)盤(pán)下載渠道,大家可根據(jù)需求選擇對(duì)應(yīng)版本。
官方版本介紹:
https://www.amd.com/en/products/software/adaptive-socs-and-fpgas/vivado/vivado-whats-new.html
官方下載地址:
https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/vivado-design-tools.html
安裝步驟參考:官方權(quán)威安裝指南《Vivado Design Suite 用戶指南:版本說(shuō)明、安裝和許可 (UG973)》,跟著官方步驟走,能規(guī)避 90% 的安裝報(bào)錯(cuò)。
2. ModelSim/QuestaSim 仿真器
很多新手會(huì)分不清ModelSim 各個(gè)版本的區(qū)別,也搞不懂 QuestaSim 和 ModelSim 的關(guān)系,這里先給大家講透,再給下載和選型建議。
首先,QuestaSim是Siemens EDA(原 Mentor Graphics)的企業(yè)級(jí)高級(jí)驗(yàn)證平臺(tái),屬于ModelSim-SE 的全功能增強(qiáng)版,完全兼容 ModelSim-SE 的所有功能和項(xiàng)目文件,ModelSim 仿真可以無(wú)縫遷移到 QuestaSim 中,也是目前行業(yè)內(nèi)主流使用的版本。而 ModelSim 本身分為 SE(標(biāo)準(zhǔn)版)、DE(開(kāi)發(fā)者版)、PE(個(gè)人版)三個(gè)核心版本,功能差異巨大,核心對(duì)比如下:
功能維度 | ModelSim SE | ModelSim DE | ModelSim PE |
浮動(dòng)許可支持 | 是 | 是 | 可選 |
ASIC 簽核支持 | 是 | 是 | 不支持 |
32/64 位跨平臺(tái)兼容 | 是 | 不支持 | 不支持 |
Verilog/VHDL 混合仿真 | 可選 | 可選 | 可選 |
代碼覆蓋率分析 | 是 | 不支持 | 不支持 |
波形編輯與對(duì)比 | 是 | 不支持 | 不支持 |
64 位系統(tǒng)支持 | X86-64 Linux、Itanium-2 Linux | 不支持 | 不支持 |
簡(jiǎn)單總結(jié):SE 版本是 ModelSim 原生版本里功能最完善、性能最強(qiáng)的版本,而集成在 Altera、Xilinx、Lattice 等FPGA廠商工具里的,均為OEM版(比如給Xilinx 的 XE 版、給 Altera 的 AE 版)。
OEM 版本雖然自帶對(duì)應(yīng)廠商的庫(kù)文件,無(wú)需手動(dòng)編譯,但仿真速度、功能支持都遠(yuǎn)不如SE 版本,且不支持checkpoint功能,無(wú)法收集覆蓋率等限制。比如 ModelSim XE 就不支持 SystemVerilog,且從 13.1 版本開(kāi)始就不再更新維護(hù),長(zhǎng)期開(kāi)發(fā)優(yōu)先選擇 ModelSim SE 或 QuestaSim。
Feature | ModelSim SE | ModelSim DE | ModelSim PE |
Licensing-Floating License | yes | yes | option |
Language Neutral License | option | option | option |
ASIC Sign-Off | yes | yes | — |
32/64-Bit Cross-Compatibility | yes | — | — |
VHDL | option | option | option |
Mixed Language | option | option | option |
Analog/Mixed Signal (Advance MS Product) | option | — | — |
VHDL FLI | yes | — | — |
Waveform Editor | yes | — | — |
Dataflow Window | yes | — | — |
Source Annotation | yes | — | — |
C Debugger | yes | yes | — |
Multiple Waveform Windows | yes | yes | — |
Waveform Compare | yes | — | — |
JobSpy | yes | yes | — |
User-Customizable GUI (via Tk) | yes | — | — |
Code Coverage (with Toggle Coverage) | yes | — | — |
Coverage Viewer | yes | — | — |
Verilog RTL & Gate | yes | — | — |
Performance Optimizations | yes | — | — |
VHDL RTL & VITAL | yes | — | — |
Performance Optimizations | yes | — | — |
Performance and Memory Profiler | yes | yes | option |
Separate Elaboration | yes | — | — |
Integrated Sim Farm Support (via JobSpy) | yes | — | — |
Checkpoint & Restore | yes | — | — |
SWIFT Interface / SmartModels | yes | — | — |
Synopsys Hardware Modeler Support | yes | — | — |
32-Bit OS Support | HP-UX, Linux, Solaris, Windows platform | Linux | Windows platform |
64-Bit OS Support | X86-64 and Itanium-2 Linux | — | — |
注:“yes” 表示該版本支持此功能;“option” 表示該功能為可選組件;“—” 表示該版本不支持此功能。
二、核心配置:Vivado中 ModelSim-SE/QuestaSim 仿真環(huán)境搭建
使用 Vivado 開(kāi)發(fā)的工程,會(huì)大量調(diào)用軟件自帶的 IP 核,如果想要用 ModelSim/QuestaSim 正常仿真,核心就是提前編譯好 Xilinx 的仿真庫(kù),完成軟件之間的配置聯(lián)動(dòng),下面分4步,給大家講清每一個(gè)操作細(xì)節(jié)。
步驟 1:Vivado 預(yù)編譯仿真庫(kù)
這是整個(gè)配置流程的基礎(chǔ),只有編譯好對(duì)應(yīng)仿真器的庫(kù)文件,后續(xù)仿真才能正常識(shí)別 Vivado 的 IP 核。
1.雙擊打開(kāi)Vivado 軟件,無(wú)需新建 / 打開(kāi)工程,直接點(diǎn)擊頂部菜單欄Tools → Compile Simulation Libraries,打開(kāi)庫(kù)編譯配置窗口。

2.在配置窗口中,按以下規(guī)則填寫(xiě)參數(shù),也可以直接使用下方的 Tcl 命令執(zhí)行:
Simulator:選擇你安裝的仿真器(Questa/ModelSim)
Language:選擇 all,覆蓋Verilog 和 VHDL 雙語(yǔ)言
Library:選擇 all,包含unsim(功能仿真)、simprim(時(shí)序仿真)全庫(kù)
Family:勾選 all,兼容全系列FPGA 器件
編譯庫(kù)存放位置:自定義一個(gè)無(wú)中文、無(wú)空格的路徑,比如dir_path/vivado_lib_dir
Simulator executable path:選擇仿真器安裝路徑下的win64 文件夾,比如C:/questasim64_2020.1/win64
完整 Tcl 命令參考:
compile_simlib -simulator questa -simulator_exec_path {C:/questasim64_2020.1/win64} -family all -language all -library all -dir {dir_path/vivado_lib_dir} |

3.配置完成后點(diǎn)擊 Compile,等待編譯完成。最終結(jié)果 0個(gè)Error即為編譯成功,Warning不影響后續(xù)使用,同時(shí)可以去自定義的庫(kù)路徑下,查看是否生成了對(duì)應(yīng)的庫(kù)文件夾,確認(rèn)編譯生效。

步驟 2:配置 modelsim.ini 文件
modelsim.ini 是仿真器的核心配置文件,作用是定義仿真過(guò)程中調(diào)用的庫(kù)文件路徑,是聯(lián)動(dòng)Vivado 和仿真器的關(guān)鍵。
1.打開(kāi)步驟 1 中編譯好的庫(kù)文件夾,找到“dir_path/vivado_lib_dir”/modelsim.ini,用記事本 / 代碼編輯器打開(kāi)。
secureip = dir_path/vivado_lib_dir/secureip unisim = dir_path/vivado_lib_dir/unisim unimacro = dir_path/vivado_lib_dir/unimacro unifast = dir_path/vivado_lib_dir/unifast unisms_ver = dir_path/vivado_lib_dir/unisms_ver unimacro_ver = dir_path/vivado_lib_dir/unimacro_ver unifast_ver = dir_path/vivado_lib_dir/unifast_ver simprims_ver = dir_path/vivado_lib_dir/simprims_ver xpm = dir_path/vivado_lib_dir/xpm xilinx_vip = dir_path/vivado_lib_dir/xilinx_vip ahblite_axi_bridge_v3_0_13 = dir_path/vivado_lib_dir/ahblite_axi_bridge_v3_0_13 audio_clock_recovery_v1_0 = dir_path/vivado_lib_dir/audio_clock_recovery_v1_0 audio_tpg_v1_0_0 = dir_path/vivado_lib_dir/audio_tpg_v1_0_0 av_pat_gen_v1_0_0 = dir_path/vivado_lib_dir/av_pat_gen_v1_0_0 axis_infrastructure_v1_1_0 = dir_path/vivado_lib_dir/axis_infrastructure_v1_1_0 axis_protocol_checker_v2_0_2 = dir_path/vivado_lib_dir/axis_protocol_checker_v2_0_2 axi_ahblite_bridge_v3_0_15 = dir_path/vivado_lib_dir/axi_ahblite_bridge_v3_0_15 axi_amm_bridge_v1_0_8 = dir_path/vivado_lib_dir/axi_amm_bridge_v1_0_8 axi_chip2chip_v5_0_4 = dir_path/vivado_lib_dir/axi_chip2chip_v5_0_4 axi_infrastructure_v1_1_0 = dir_path/vivado_lib_dir/axi_infrastructure_v1_1_0 axi_jtag_v1_0_0 = dir_path/vivado_lib_dir/axi_jtag_v1_0_0 axi_lite_ipif_v3_0_4 = dir_path/vivado_lib_dir/axi_lite_ipif_v3_0_4 axi_pcie3_v3_0_8 = dir_path/vivado_lib_dir/axi_pcie3_v3_0_8 axi_perf_mon_v5_0_20 = dir_path/vivado_lib_dir/axi_perf_mon_v5_0_20 blk_mem_gen_v8_3_6 = dir_path/vivado_lib_dir/blk_mem_gen_v8_3_6 blk_mem_gen_v8_4_2 = dir_path/vivado_lib_dir/blk_mem_gen_v8_4_2 bsip_v1_1_0 = dir_path/vivado_lib_dir/bsip_v1_1_0 bs_mux_v1_0_0 = dir_path/vivado_lib_dir/bs_mux_v1_0_0 clk_piv_v1_0_2 = dir_path/vivado_lib_dir/clk_piv_v1_0_2 cmac_usplus_v2_4_4 = dir_path/vivado_lib_dir/cmac_usplus_v2_4_4 cmac_usplus_v2_5_0 = dir_path/vivado_lib_dir/cmac_usplus_v2_5_0 cmac_v2_3_4 = dir_path/vivado_lib_dir/cmac_v2_3_4 cmac_v2_4_0 = dir_path/vivado_lib_dir/cmac_v2_4_0 compact_gt_v1_0_4 = dir_path/vivado_lib_dir/compact_gt_v1_0_4 dist_mem_gen_v8_0_12 = dir_path/vivado_lib_dir/dist_mem_gen_v8_0_12 ecc_v2_0_12 = dir_path/vivado_lib_dir/ecc_v2_0_12 emc_common_v3_0_5 = dir_path/vivado_lib_dir/emc_common_v3_0_5 ethernet_10g_25g_v2_0_2 = dir_path/vivado_lib_dir/ethernet_10g_25g_v2_0_2 |
2.復(fù)制文件中所有庫(kù)路徑的映射內(nèi)容(比如 secureip、unisim、unimacro等全系列庫(kù)的路徑配置)。
3.打開(kāi)QuestaSim/ModelSim 安裝根目錄下的modelsim.ini文件,將復(fù)制的內(nèi)容粘貼進(jìn)去,保存并退出。核心庫(kù)路徑參考格式:
ini
secureip = dir_path /vivado_lib_dir/secureip
unisim = dir_path /vivado_lib_dir/unisim
unimacro = dir_path /vivado_lib_dir/unimacro
unifast = dir_path /vivado_lib_dir/unifast
simprims_ver = dir_path /vivado_lib_dir/simprims_ver
xpm = dir_path /vivado_lib_dir/xpm
xilinx_vip = dir_path /vivado_lib_dir/xilinx_vip
步驟 3:Vivado 中配置仿真器路徑
完成庫(kù)文件配置后,需要在Vivado 中指定第三方仿真器的安裝路徑,讓兩個(gè)軟件實(shí)現(xiàn)聯(lián)動(dòng)。
1.打開(kāi) Vivado,點(diǎn)擊頂部菜單欄Tools → Settings,打開(kāi)設(shè)置窗口。
2.在左側(cè)菜單欄找到 Simulation,切換到第三方仿真器配置界面。
3.在 Install Paths 欄目下,找到對(duì)應(yīng)的 QuestaSim/ModelSim 選項(xiàng),填寫(xiě)軟件安裝根路徑,比如C:/questasim64_2020.1。
4.在 Default Compiled Library Paths 欄目下,填寫(xiě)步驟 1 中預(yù)編譯的庫(kù)文件夾路徑,比如dir_path /vivado_lib_dir。


5. 點(diǎn)擊 Apply → OK,保存配置并退出。
步驟 4:?jiǎn)?dòng)仿真驗(yàn)證配置
到這里,基礎(chǔ)配置就全部完成了,我們可以直接在 Vivado 中啟動(dòng)仿真,驗(yàn)證配置是否生效。
1.打開(kāi)你的 FPGA 工程,確保已經(jīng)編寫(xiě)好 Testbench 仿真文件,并添加到工程的 Simulation Sources 中。
2.點(diǎn)擊左側(cè) Flow Navigator 中的 Run Simulation,根據(jù)需求選擇仿真類型:
Run Behavioral Simulation:行為級(jí)仿真(最常用)
Run Post-Synthesis Functional Simulation:綜合后功能仿真
Run Post-Implementation Timing Simulation:實(shí)現(xiàn)后時(shí)序仿真

3.點(diǎn)擊對(duì)應(yīng)選項(xiàng)后,軟件會(huì)自動(dòng)調(diào)用 QuestaSim/ModelSim 仿真器,啟動(dòng)仿真界面,正常加載工程、IP 核和 Testbench,即代表配置全部成功。
三、避坑指南:Windows系統(tǒng) Vivado 調(diào)用仿真器卡死解決方案
很多 Windows 用戶會(huì)遇到一個(gè)經(jīng)典問(wèn)題:Vivado 點(diǎn)擊啟動(dòng)仿真后,軟件直接卡死,無(wú)法彈出仿真器界面,而 Linux 系統(tǒng)卻能正常使用。這里給大家提供一個(gè)穩(wěn)定可用的解決辦法,通過(guò)自定義 do 腳本實(shí)現(xiàn)仿真啟動(dòng)。
核心原理:
Vivado 自動(dòng)生成的仿真腳本,在 Windows 系統(tǒng)下存在調(diào)用兼容性問(wèn)題,我們將自動(dòng)生成的編譯、 elaboration 腳本合并重構(gòu),編寫(xiě)自定義的 run.do 腳本,直接在仿真器中執(zhí)行,規(guī)避軟件聯(lián)動(dòng)的卡死問(wèn)題。
具體操作步驟
1.先在 Vivado 中點(diǎn)擊一次 Run Simulation,等待工程生成仿真文件,無(wú)需等待軟件響應(yīng),直接關(guān)閉卡死的Vivado。
2.打開(kāi)工程目錄,找到仿真生成的文件夾:工程目錄/工程名.sim/sim_1/behav/questa,在這個(gè)文件夾中,能看到 Vivado 自動(dòng)生成的top_sim_compile.do和top_sim_elaborate.do兩個(gè)核心腳本。(工程仿真所需要的coe、mif及glbl.v文件會(huì)自動(dòng)拷貝到當(dāng)前文件夾)

3.新建一個(gè)文本文檔,重命名為run.do,作為我們的自定義仿真腳本,按以下規(guī)則編輯內(nèi)容:
腳本首行添加vlib questasim_lib,創(chuàng)建仿真工作庫(kù);
復(fù)制top_sim_compile.do中所有的文件編譯命令(vlog/vcom 相關(guān)指令),粘貼到 run.do 中;
復(fù)制top_sim_elaborate.do中的核心內(nèi)容,做兩處關(guān)鍵修改:
(1)刪除-o top_sim_opt參數(shù),將開(kāi)頭的c:\\questasim64_2020.1\\win64\\vopt -64 +acc=npr替換為vsim -voptargs="+acc",適配 QuestaSim 環(huán)境;
(2)刪除腳本末尾的quit -force命令,避免仿真完成后自動(dòng)關(guān)閉仿真器,無(wú)法查看波形。
4.保存修改好的run.do文件,將其放在questa文件夾根目錄下。
5.雙擊打開(kāi)QuestaSim/ModelSim 軟件,將路徑切換到questa文件夾,在 Transcript 控制臺(tái)輸入tcl命令:do run.do;

6.回車執(zhí)行后,腳本會(huì)自動(dòng)完成工程編譯、仿真啟動(dòng),全程無(wú)卡死,后續(xù)波形查看、仿真調(diào)試操作,和 QuestaSim 原生操作完全一致,后續(xù)更新IP增加仿真激勵(lì)只需維護(hù)run.do腳本,無(wú)需再打開(kāi)vivado即可仿真。
寫(xiě)在最后:
FPGA 仿真環(huán)境的搭建,看似是基礎(chǔ)操作,實(shí)則藏著很多版本兼容、路徑配置、系統(tǒng)適配的細(xì)節(jié)坑點(diǎn)。很多時(shí)候開(kāi)發(fā)進(jìn)度被耽誤,不是因?yàn)榇a寫(xiě)不出來(lái),而是好用的環(huán)境搭不起來(lái)。
如果您在仿真環(huán)境搭建方面有問(wèn)題,歡迎聯(lián)系:
simonyang@comtech.cn
charlesxu@comtech.cn

