目标:对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文件,可根据书本手动输入,也可复制以下:
module dut(clk,
rst_n,
rxd,
rx_dv,
txd,
tx_en);
input clk;
input rst_n;
input[7:0] rxd;
input rx_dv;
output [7:0] txd;
output tx_en;
reg[7:0] txd;
reg tx_en;
always @(posedge clk) begin
if(!rst_n) begin
txd <= 8'b0;
tx_en <= 1'b0;
end
else begin
txd <= rxd;
tx_en <= rx_dv;
end
end
endmodule
使用命令行形式在工程中完成UVM库下的仿真:
第一句:将库文件编译到work目录中
vlib work
此指令执行时是在Library区域中创建一个工程目录,一般默认有work,故输入vlib work时可能会有:

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

1
且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
注意以上三行指令是一行,空格隔开
如:
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
注意以上三行指令是一行,空格隔开
如:
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,删去即可。
vsim -c -sv_lib D:/modeltech64_10.4/uvm-1.1d/win64/uvm_dpi work.top_tb +UVM_TESTNAME=my_case0 继续注意:uvm_dpi处是dpi库,在一般安装目录下

此dll文件即是
将指令的目录地址改成自己的就可以,直到../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();是可以的。
参考连接:
https://blog.csdn.net/qq_41034231/article/details/107961983