做IC验证时,除了采用SVA,DPI等验证手段,还可以采用svunit来实现module级别的验证。
SVUnit is a unit test framework for developers writing code in systemverilog. Verify systemverilog modules, classes and interfaces in isolation with SVUnit to eliminate bugs before they infest your design!
2.1,下载最新svunit支持代码:v2.11
http://sourceforge.net/projects/svunit/
2.2,解压:生成svunit-code目录
Tar -xvf svunit-v2.11.tar.gz
2.3,按照README.txt操作,熟悉一下基本的构建过程
3.1,编写DUT:add.sv
/* * Rill for svunit test 2015-04-20 */ module add ( input clk, input rst_n, input enable, input [3:0] a, input [3:0] b, output [7:0] sum ); logic [7:0] sum_r; always_ff @(posedge clk) if(~rst_n | ~enable) sum_r <= 8'b0; else if(enable) sum_r <= a + b; assign sum = sum_r; endmodule:add
3.3,测试结果
注:svunit的脚本主要是用Perl写的,所以需要主机上有perl语言库,如果出现类似“/perl command not found”的提示,说明你的主机上没有安装perl支持库,或者perl版本太旧,或者安装perl后环境变量没有指定正确。
1> 解压:tar -xvf svunit-v2.11.tar.gz
2> mkdir my_svunit_test; cdmy_svunit_test
3> touch add.sv并编辑
4>复制Setup.bsh到my_svnuit_test,并修改SVUNIT_INSTALL路径,最后执行:source Setup.bsh
5>生成封装文件:create_unit_test.pl add.sv
6>编辑封装文件:add_unit_test.sv
7>生成Makefile:create_svuit.pl
8>指定使用的仿真工具:修改Makefile
9>运行:make
svunit的好处在于提供了几个脚本,可以自动将待测module进行自动封装,省去了一些编码工作。个人感觉目前svunit的功能还比较弱。每个SVTEST块实际是一个fork/join_any块,所有SVTEST块顺序执行。
在实际的项目中可以通过三种方式使用svunit:
1>构建子模块测试流程,按照svunit提供的脚本,将主要子模块进行测试。模块的激励以及assert内容都需要自己加。
2>参考svunit的思想,针对主要模块的某部分代码(比如从某个文件的第100行到第200行),利用force/deposit作为激励,利用assertion作为检测手段,构建block测试流程。
3>将UVM和svunit结合使用。