modelsim环境下结合uvm方法学进行仿真验证
目的:在windows环境下学习uvm验证方法学。
工具:modesim,quartus,wsl,mingw-64。
语言:verilog,systemverilog,python,makefile, do。
流程:
- 借助UVM验证框架对FPGA工程中的相关模块建立agent,监视并采集输入输出的事务流;
- 对RTL工程中涉及的相关算法建立C函数模型,在uvm的model模型下通过DPI-C接口调用C算法模型对结果进行预测;
- 最后由输出agent采集的仿真事务流与模型预测的事务流在scoreboard进行对比。
modelsim中quartus ip模型的添加:
- quartus 启动ip库编译,选择对应的器件和语言,以及仿真工具。
- 在modelsim安装路径下,存在modelsim初始化文件modelsim.ini, 在[library]下将编译的IP库路径添加。注意,modelsim.ini为只读文件,修改属性后再添加,修改完毕后还要改为只读。
工程中IP的仿真:
以quartus为例,在生成IP时将仿真选项勾选,将会生成对应的仿真模型以及modelsim对应的tcl脚本,通过修改仿真脚本即可使用;
仿真的建立:
- 工程的编译,通过vlog单独编译一个库,方便管理;
- testbench以及UVM部件的编译,单独建立一个库,编译时需要携带modelsim安装文件夹内的各种库../verilog_src/uvm-1.1d/src/;还有要编译相应的C模型,指定dpi_header等等。
- 仿真启动,vsim需要指定-sv_lib ../uvm-1.1d/win64/uvm_dpi;
- .do文件可以利用$n通过shell向文件传递参数,n为参数的序号,这样可以在makefile管理不同case的启动;
模型的编写:
DPI-C接口需要SV和C侧两端的数据类型对应,具体可以参照网上教程。
- 比如浮点到整型转换,c只需要一行代码,而RTL世界往往实现需要调用IP库。
- bit[N:0]传入C程序,将会被当作无符号数处理。
导入C函数的方式:
- import "DPI-C" context function void xxx(x,x);将该接口封装在xx_package内;
- 然后在具体的UVM模块下,
import xx_package::*;(在class外声明)
xx_package::xxx(x,x);(在class内调用)
仿真覆盖率:
- 每次仿真编译加入vlog -bces选项;具体参照modesim user guide;
- 然后启动仿真后coverage save -onexit ../path/filename.ucdb;该UCDB文件包含了该次仿真的覆盖率信息;
- 多个case将会产生多个ucdb文件;通过vcover merge -out ../path/total.ucdb ../path/*.ucdb; 将所有的覆盖率文件 merge为总的.ucdb文件;
- 最后通过vcover report -html total.ucdb;可以生成html文本格式的覆盖率报告;

浙公网安备 33010602011771号