UVM with Modelsim WORK FLOW basic
目标:对UVM实战一书中2.5.2用例进行基本的命令行流程操作跑通。
代码文件自张强书的example_and_uvm_source_code\puvm\puvm\src\ch2\section2.5\2.5.2
“在用的时候,记得将dut.sv和其他组件代码放在同一个文件夹下,modelsim工程最好也建在这个文件夹下”(modelsim建立工程时的work文件夹与上述代码组件保持一致)

注意,张强书中代码并无dut.sv文件,可根据书本手动输入,也可复制以下:
使用命令行形式在工程中完成UVM库下的仿真:
第一句:将库文件编译到work目录中
vlib work
此指令执行时是在Library区域中创建一个工程目录,一般默认有work,故输入vlib work时可能会有:

若设置自定义名称的工程目录,例如work_test,则会有:

且Library中出现相应:

第二句:设置环境变量
UVM目录,这个目录是modelsim安装的文件目录,比如你的modelsim安装在D:/modeltech64,这个就是:
set UVM_HOME D:/modeltech64/verilog_src/uvm-1.1d
此处我的安装包下是:D:\modeltech64_2019.2\verilog_src\uvm-1.1d
故指令:set UVM_HOME D:/modeltech64_2019.2/verilog_src/uvm-1.1d
注意反斜线改变了!

第三句:设置工作目录,指的是工程文件的目录
就是你的dut.sv和top_tb.sv放在哪里了。
set WORK_HOME E:/KTRTL\/VM_LEARN2

注意,有的modelsim可能有如下截图问题!

此时按上图所示将反斜线去掉,以“:”作为分割即可!

注意可看到在vlib句中,本工程所在目录下同样创建了work_test。
第四句:启动编译
vlog +incdir+$UVM_HOME/src
-L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF
$UVM_HOME/src/uvm_pkg.sv $WORK_HOME/dut.sv top_tb.sv
注意以上三行指令是一行,空格隔开
如:
“如果前面两句都对了,这个肯定也是可以的,如果这里提示file can not ……in read mode
那么一般是文件路径错了,再细心检查一下。”
第四句:启动仿真
vsim -novopt -c -sv_lib
D:/modeltech64_10.4/uvm-1.1d/win64/uvm_dpi
work.top_tb +UVM_TESTNAME=my_case0
注意以上三行指令是一行,空格隔开
如:
其中注意,-novopt是旧版本modelsim选项,在2019.2(笔者)附近及以后新版中会报错:vlog-12110,删去即可。
继续注意:uvm_dpi处是dpi库,在一般安装目录下

将指令的目录地址改成自己的就可以,直到../uvm_dpi.dll,注意把".dll"删去。
摘录注意1:每步指令一行写完,不可换行输入;
摘录注意2:
如果,在你的top_tb.sv中, 写的是
run_test(“my_case0”);
这样的句子,那么最后一句使用
vsim -novopt -c -sv_lib
D:/modeltech64_10.4/uvm-1.1d/win64/uvm_dpi work.top_tb
这样命令行就可以进入仿真。
但是如果是用
run_test();
这样的句子,需要修改进入仿真的语句。
原语句:
vsim -novopt -c -sv_lib
D:/modeltech64_10.4/uvm-1.1d/win64/uvm_dpi work.top_tb
改成:
vsim -novopt -c -sv_lib
D:/modeltech64_10.4/uvm-1.1d/win64/uvm_dpi
work.top_tb +UVM_TESTNAME=my_case0
这里是只有一个case0的情况,如果有另外一个case文件,文件名是my_case1,则将最后的名字改为my_case1即可,张强这里的例子应该是后者。
注:有人说这里run_test();可能是不对的,可以改成run_test(“”);试试,我这里run_test();是可以的。
参考连接: