数字09 modelsim中怎么仿真《UVM实战》中的例程

第一种方法:

此方法用于UVM环境代码编译。

想要modelsim文件或者uvm代码的可以联系我。

软件环境:win10/win7   modelsim SE-64 10.4

实测编译成功并运行。测试代码是张强大大写的《UVM实战》,第二章的代码

example_and_uvm_source_code\puvm\puvm\src\ch2\section2.5\2.5.2

在用的时候,记得将dut.sv和其他组件代码放在同一个文件夹下,modelsim工程最好也建在这个文件夹下,如果不建在这里,我暂时还没有试过会出现什么错误。

 

 

 

 

命令行的写法

 

第一句

将库文件编译到work中:

vlib work

 

第二句

设置环境变量

UVM目录,这个目录是modelsim安装的文件目录,比如你的modelsim安装在D:/modeltech64,这个就是:

set UVM_HOME D:/modeltech64/verilog_src/uvm-1.1d

这句话,set uvm环境库在uvm-1.1d里面,这个是在modelsim软件安装的时候就放在这里的,照着写就好了。我的modelsim目录比较不一样,我安装的时候写的目录是在D:\modeltech64_10.4,所以我的是:

set UVM_HOME D:/modeltech64_10.4/verilog_src/uvm-1.1d

注意这里比较坑的点是如果你直接将windows的目录字符串复制过来,”\”这个字符是不对的,它要改成”/”

 

第三句

设置工作目录,指的是工程文件的目录,就是你的dut.sv和top_tb.sv放在哪里了。

set WORK_HOME C:/Users/Administrator/Desktop/2.5.2

 

第四句

启动编译:

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是不优化dut.sv的意思。

然后,D:/modeltech64_10.4/uvm-1.1d/win64/uvm_dpi这个是uvm_dpi的库路径。

一般人的modelsim目录是D:/modeltech64,所以可以改成

vsim -novopt  -c -sv_lib

D:/modeltech64/uvm-1.1d/win64/uvm_dpi

work.top_tb +UVM_TESTNAME=my_case0

work.top_tb是工程工作文件名。

work.top_tb +UVM_TESTNAME=my_case0就是把我的my_case0加入到仿真。

 

所以我的所有命令行就是

vlib work

set UVM_HOME D:/modeltech64_10.4/verilog_src/uvm-1.1d

set WORK_HOME C:/Users/Administrator/Desktop/2.5.2

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

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_case1

注意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();是可以的。

 

 

接下来的操作是在modelsim里面建立工程:

 

 

注意,下面这个操作不用管。

接下来在命令行复制粘贴命令就可以了

可以直接复制粘贴5个句子进去,然后按下回车。

进入仿真界面,按下

跑完了。

 

第一种方法到此结束,后面是第二种方法。第二种方法虽然操作简单,但是有一定的局限性,

所以我推荐使用第一种方法。

第二种方法的局限性是:

这种方法在编译的时候,如果将uvm代码分开写在不同文件里面,就会出现编译错误。

比如我在top_tb.sv里面有包含了一些库文件

`include "uvm_macros.svh"

import uvm_pkg::*;

然后在top_tb.sv里面写

`include “1.sv”

这样写完之后,如果我想在1.sv文件里面,用uvm_macros.svh这些库文件的内容。

会发现用不了。

如果想要解决这个问题,我需要把包含库文件的语句也加入到1.sv里面,这样重复性的包含文件很麻烦。

 

第二种方法:

1 新建工程

2 加文件

 

3 hello world

 

module Hello_World;

 

initial

       begin

              $display("Hello World! SystemVerilog");

       end

endmodule

4 编译

编译成功下方transcript会有提示,如果错误按照提示修改

work里面出现对应的编译后文件,如果没有出现该文件,尝试改一下程序里面的模块名,我改动了一下module名后就能编译出来了。

5 仿真及运行

 

 

 

 

 

然后有几种方法可以运行程序

第一种

第二种 在命令行输入run或者run -all

第三种

 

运行的结果

 

注意:如果要重新运行,我是这么操作的。

 

结束仿真

 

 

注:

如果想在modelsim中查看覆盖率,需要添加下面红色字体的语句

vlib work

set UVM_HOME D:/modeltech64_10.4/verilog_src/uvm-1.1d

set WORK_HOME C:/Users/Shadow/Desktop/section7.2_spi_dut

vlog +incdir+$UVM_HOME/src  -cover sbce3 -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF $UVM_HOME/src/uvm_pkg.sv  $WORK_HOME/dut.sv top_tb.sv

vsim -coverage -novopt  -c -sv_lib D:/modeltech64_10.4/uvm-1.1d/win64/uvm_dpi work.top_tb +UVM_TESTNAME=my_case0

 

 

猜你喜欢

转载自blog.csdn.net/qq_41034231/article/details/107961983
09