0、前言
UVM本身是一个验证方法学和框架,但是它依托于SystemVerilog
和uvm库
,所以也脱离不了理论和实践相结合的学习路线。
相信你在学习UVM的过程中,比如看 《UVM实战》白皮书
的过程中,也会产生要把书上代码自己实现这样的想法,这是很自然的过程。因为在学习UVM的过程中,你已经发现了SystemVerilog
不同于设计RTL,在验证中、在UVM
中使用的SV
有一种类似软件的活力。
所以本篇旨在介绍一下一种环境搭建的方法,即 modelsim+uvm+windows,其好处就是可以快速在自己电脑上完成搭建(相比vcs,verdi框架而言),适合学习。
1、准备工作
软件准备
安装Modelsim或Questasim,并且将其加入环境变量(UVM 1.1d在Modelsim安装时就会自带)
安装 git bash 用于在windows环境下执行简单脚本和shell 命令
对UVM有基础了解
参考如下
代码准备
代码完全参考白皮书第二章第一小节,also refer to my github repository A00 directory
可以直接clone上面我的github repository for study
2、结构概述
书上第二章第一节讲的验证平台代码仅仅适用于环境搭建,因为它非常基础,只有driver驱动dut。当然,简单的验证平台可以将代码的错误概率降低到最小,从而使我们专注于环境的搭建是否正确。
通过tree命令,列出我们项目的文件夹目录。主要是由design和verify构成,分别代表了设计和验证的代码。在verify/sim下有一个flist.f
,它链接了其他的filelist或者直接链接了.sv,相当于罗列出所有需要编译的文件。
flist.f
内容如下
../th/top_tb.sv
-F ../env/env.f
-F ../../design/dut.f
// -F ../tc/tclist.f
这里使用-F用来指定链接的其他子finelist(.f)文件,大写的-F表示链接的这些filelist,其路径的起点就是链接的这些filelist各自所在的位置。而如果使用小写-f,则filelist文件路径起始位置是我们的顶层filelist,或者说调用这个filelist的位置(一般是Makefile的位置)
更多有关-F和-f 内容,refer to this article
简而言之,-F比较好用,符合常规思维习惯。
sim文件夹中,主要用来在此文件夹下进行仿真。由于我们是基于modelsim的,所以sim.do是一切的精髓,我对其添加了注释进行解释,注意需要把里面的路径换成自己的路径。这个过程就是指定modelsim自带的uvm 1.1d并且把它加入到编译中来。
#################create work directory#######
vlib work
#################set env vairable############
set UVM_DPI_HOME D:/Modelsim/uvm-1.1d/win64
set UVM_HOME D:/Modelsim/verilog_src/uvm-1.1d
#################cmp#########################
vlog +incdir+$UVM_HOME/src -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF $UVM_HOME/src/uvm_pkg.sv -F flist.f
vsim -c -novopt -sv_lib $UVM_DPI_HOME/uvm_dpi work.top_tb
log -r /*
run -all
为了方便,又编写了make file,负责删除上次仿真输出的一些tmpt 文件,然后进行本次仿真
run:
rm -rf work transcript vsim.wlf *.log
vsim -c -do "sim.do"
view:
vsim -view vsim.wlf
3、使用
只需要在sim文件夹下输入
make run
仿真结束后输入
make view
就可以查看波形了
注意(和VCS工具的区别):由于工具的原因,modelsim需要在引用class的时候,主动使用include将对应class文件进行添加(当然,这也和书本上是一致的)
除此之外,每个uvm class文件前都需要加入
`include "uvm_macros.svh"
import uvm_pkg::*;
这样就可以保证正常进行仿真
打印信息
波形