modelsim环境下结合uvm方法学进行仿真验证

  目的:在windows环境下学习uvm验证方法学。

  工具:modesim,quartus,wsl,mingw-64。

  语言:verilog,systemverilog,python,makefile, do。

  流程:

  1. 借助UVM验证框架对FPGA工程中的相关模块建立agent,监视并采集输入输出的事务流;
  2. 对RTL工程中涉及的相关算法建立C函数模型,在uvm的model模型下通过DPI-C接口调用C算法模型对结果进行预测;
  3. 最后由输出agent采集的仿真事务流与模型预测的事务流在scoreboard进行对比。

  modelsim中quartus ip模型的添加:

  • quartus 启动ip库编译,选择对应的器件和语言,以及仿真工具。
  • 在modelsim安装路径下,存在modelsim初始化文件modelsim.ini, 在[library]下将编译的IP库路径添加。注意,modelsim.ini为只读文件,修改属性后再添加,修改完毕后还要改为只读。

  工程中IP的仿真:

    以quartus为例,在生成IP时将仿真选项勾选,将会生成对应的仿真模型以及modelsim对应的tcl脚本,通过修改仿真脚本即可使用;

  仿真的建立:

  1. 工程的编译,通过vlog单独编译一个库,方便管理;
  2. testbench以及UVM部件的编译,单独建立一个库,编译时需要携带modelsim安装文件夹内的各种库../verilog_src/uvm-1.1d/src/;还有要编译相应的C模型,指定dpi_header等等。
  3. 仿真启动,vsim需要指定-sv_lib ../uvm-1.1d/win64/uvm_dpi; 
  4. .do文件可以利用$n通过shell向文件传递参数,n为参数的序号,这样可以在makefile管理不同case的启动; 

  模型的编写:

    DPI-C接口需要SV和C侧两端的数据类型对应,具体可以参照网上教程。

  1. 比如浮点到整型转换,c只需要一行代码,而RTL世界往往实现需要调用IP库。
  2. bit[N:0]传入C程序,将会被当作无符号数处理。

  导入C函数的方式:

  1. import "DPI-C" context function void xxx(x,x);将该接口封装在xx_package内;
  2. 然后在具体的UVM模块下,

    import xx_package::*;(在class外声明)

    xx_package::xxx(x,x);(在class内调用)

  仿真覆盖率:

  1. 每次仿真编译加入vlog -bces选项;具体参照modesim user guide;
  2. 然后启动仿真后coverage save -onexit  ../path/filename.ucdb;该UCDB文件包含了该次仿真的覆盖率信息;
  3. 多个case将会产生多个ucdb文件;通过vcover merge -out ../path/total.ucdb ../path/*.ucdb; 将所有的覆盖率文件 merge为总的.ucdb文件;
  4. 最后通过vcover report -html total.ucdb;可以生成html文本格式的覆盖率报告;

    

 

posted @ 2024-04-29 11:04  Heyeger  阅读(253)  评论(0)    收藏  举报