UVM with Modelsim WORK FLOW basic
谫劣求知
编辑于 2023年06月13日 23:57
收录于文集
共4篇

目标:对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文件,可根据书本手动输入,也可复制以下:

代码块
JavaScript
自动换行
复制代码
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

注意以上三行指令是一行,空格隔开

如:

代码块
JavaScript
自动换行
复制代码
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

注意以上三行指令是一行,空格隔开

如:

代码块
JavaScript
自动换行
复制代码
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,删去即可。

代码块
JavaScript
自动换行
复制代码
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();是可以的。

参考连接:

代码块
JavaScript
自动换行
复制代码
https://blog.csdn.net/qq_41034231/article/details/107961983
复制成功