很多朋友已經(jīng)習慣了在工作站跑VCS+UVM驗證;
本文簡單地介紹如何在個人PC(OS:Win10)上利用Questasim/Modelsim運行UVM環(huán)境;并且盡可能的與工作站使用UVM一致。
1. 工具準備
- 安裝Questasim/Modelsim.
- 本文使用的版本為QuestaSim-64 10.4e;
- 這個版本的UVM不需要gcc編譯等一堆操作,直接使用很方便;
- 下載FPGA eda編譯庫
- 本文附帶介紹如何聯(lián)合編譯Altera家的FPGA IP
2. 工作目錄準備

目錄準備
在work_space下建立3個文件夾:
| folder名稱 | 存放內容 |
|---|---|
| IP_LIB | 存放FPGA產(chǎn)生的IP,如RAM,ROM,F(xiàn)IFO,CLKCTRL等; |
| RTL | 存放設計人員開發(fā)的verilog代碼[1]; |
| verification | 存放驗證環(huán)境[2]; |
IP_LIB和RTL內直接存放著verilog文件:
PS F:\work_space\IP_LIB> ls
目錄: F:\work_space\IP_LIB
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2018/12/1 21:23 5284 alt_clkctrl.v
-a---- 2019/1/6 18:16 195 alt_rom.qip
-a---- 2019/1/13 11:08 6520 alt_rom.v
-a---- 2019/1/13 18:10 17421 fontlib.hex
-a---- 2019/1/12 20:02 1429 fontlib.mif
-a---- 2018/12/1 18:29 9591 video_tram.v
PS F:\work_space\RTL> ls
目錄: F:\work_space\RTL
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/3/19 21:03 35514 video_fpga.v
verification內的組織很簡單:
PS F:\work_space\verification> ls
目錄: F:\work_space\verification
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/7/31 19:27 sim
d----- 2019/7/31 19:21 tb
PS F:\work_space\verification\tb> ls
目錄: F:\work_space\verification\tb
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/7/31 19:21 ad_agent
d----- 2019/7/31 19:21 avl_agent
d----- 2019/7/31 19:21 avm_agent
d----- 2019/7/31 19:21 dt_agent
d----- 2019/7/31 19:21 env
d----- 2019/7/31 19:21 hdl
d----- 2019/7/31 19:21 testcase
PS F:\work_space\verification\sim> ls
目錄: F:\work_space\verification\sim
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2018/12/8 10:34 1999 add_signal.do
-a---- 2018/12/5 23:43 135 clear.bat
-a---- 2019/7/31 19:25 222 dut.f
-a---- 2019/7/31 18:55 152 filelist.f
-a---- 2018/12/4 20:57 17 run.bat
-a---- 2019/7/31 18:59 1095 run.do
-a---- 2018/12/5 18:47 19 wave_open.bat
tb路徑存放著驗證環(huán)境和testcase,這些和在工作站操作時建立的路徑一樣:
- 各種agent存放在xxx_agent路徑下;
- env中可以存放scb文件;
- testcase存各個testcase文件;
sim路徑下是我們主要介紹的內容,所有的準備工作都圍繞著run.do這個file展開,請看下一章節(jié)重點介紹:
3. 運行UVM
3.1跑一個case
在sim路徑下新建run.do這個文件,其內容如下:
#testcase name
set TEST "my_case"
#name related to the the dut
set TOP "top_tb"
set DUT_LIST "dut.f"
set FILE_LIST "filelist.f"
set WAVE_TOP "sim:/top_tb/inst_video_fpga/*"
set WORK_AERA "F:/work_space/verification/sim"
#PLI for dump fsdb
set PLI ""
#the uvm
set UVM_DPI_HOME D:/questasim64_10.4e/uvm-1.1d/win64
quit -sim
cd ${WORK_AERA}
if [file exists work] {
vdel -all
}
vlib work
vlog -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF -f ${DUT_LIST} -f ${FILE_LIST}
vsim -c -novopt +notimingchecks -t 1ps ${TOP} +UVM_TESTNAME=${TEST} +UVM_VERBOSITY=UVM_FULL -voptargs=+acc \
-solvefaildebug -uvmcontrol=all -classdebug -l sim.log -pli ${PLI} \
-sv_lib ${UVM_DPI_HOME}/uvm_dpi
add log -r /*
add wave ${WAVE_TOP}
run -all
新建run.bat文件,內容如下:
vsim -do run.do
雙擊"run.bat"文件,將完成vlog、vsim命令,同時生成默認的wave文件:

運行效果圖
3.2 run.do淺析
請回看3.1章代碼:
- "TEST"為testcase名字
- "TOP"為testbench top層名稱(/tb/hdl頂層名稱)
- "dut.f"為RTL路徑和IP_LIB路徑所有RTL代碼(前兩行為調用FPGA庫):
D:/intelFPGA/eda/sim_lib/altera_mf.v
D:/intelFPGA/eda/sim_lib/cycloneive_atoms.v
F:/work_space/IP_LIB/alt_clkctrl.v
F:/work_space/IP_LIB/video_tram.v
F:/work_space/IP_LIB/alt_rom.v
F:/work_space/RTL/video_fpga.v
- "filelist.f"為TB文件列表:
- 這里將top_tb之外的文件封裝在一個package中,如下:
F:/work_space/verification/tb/hdl/file_package.sv
F:/work_space/verification/tb/hdl/top_tb.sv
- "PLI"如要dump fsdb則需要指定對應PLI位置,這里不需要,設置為空;
- "UVM_DPI_HOME"將questasim中對應uvm路徑指定就可以(這里選擇使用UVM-1.1d);
- "WAVE_TOP"可以指定dump的信號范圍;
3.3 其他
當我們quit當前simulation時,波形默認保存為vsim.wlf文件;
我們可以用一個命令文件隨時打開查看波形,新建wave_open.bat,其內容如下:
vsim -view vsim.wlf
雙擊運行wave_open.bat,結果如下:

打開保存波形
如果想要load信號,新建add_signal.do文件,其內容如下:
add wave -position insertpoint \
vsim:/top_tb/inst_video_fpga/clk_27m_i \
vsim:/top_tb/inst_video_fpga/rstn_27m_i \
vsim:/top_tb/inst_video_fpga/ad_vsync_ff1 \
vsim:/top_tb/inst_video_fpga/ad_fid_ff1 \
vsim:/top_tb/inst_video_fpga/ad_hsync_ff1 \
vsim:/top_tb/inst_video_fpga/ad_yout_ff1 \
vsim:/top_tb/inst_video_fpga/eav_tag \
vsim:/top_tb/inst_video_fpga/sav_tag \
vsim:/top_tb/inst_video_fpga/row_cnt
通過"File"-->"Load",選擇"add_signal.do"將被選信號加載到波形中觀察;
新建"clear.bat"文件,雙擊清除一次運行結果:
@echo off
echo 開始清理......
del transcript
del *.log
del *.wlf
del *.xml
rd /s /Q work
echo 清理完成......
@echo on
pause