jaspergold sec验证基于srt的除法模块

文章讲述了如何通过sec技术验证一个除法模块的正确性,通过对比与之类似的spec模块的中间变量,分析cycledelay条件并添加assertion来确保模块行为的一致性。
摘要由CSDN通过智能技术生成

上回说到:

c2rtl验证delay cycle不固定的除法模块基本上验不出来。

这回使用sec(sequential equivalence check)来验。(前提你要有一个与你除法模块相似的spec模块,算法最好是差不多,流程结构最好是差不多,这样方便对比中间变量,如果不添加中间变量对比,也几乎验不出来)

假设除法模块参数如下:

module div(clk,rst,a,b,c,ivld,irdy,ovld,ordy)

bit [31:0] inner_value1;
bit [31:0] inner_value2;
bit [31:0] inner_value3;
bit [31:0] inner_value4;

endmodule

//假设除法模块中有几个关键的中间变量

恰好又有一个类似的golden rtl作为spec:

module div2(clk,rst,a,b,c,ivld,irdy,ovld,ordy)

bit [31:0] inner_v1;
bit [31:0] inner_v2;
bit [31:0] inner_v3;
bit [31:0] inner_v4;

endmodule

//假设除法模块中也有几个关键的中间变量

这就比c2rtl简单多了。

编写脚本文件如下:

check_sec -analyze -spec +incdir+ libdir  -v2k {div2.v} -v2k {other.v}

check_sec -analyze -imp -v2k {div.v} ;

check_sec -elaborate -spec -top div2 ;
check_sec -elaborate -imp -top div ;



//clock reset

//IO映射
check_sec -map -spec {...}  -imp {...}

//添加assumptions

//某个恒成立的 assertion
assert -helper {div.reg1 ==1 |->div.inner_value1 == div2.inner_v1}// 假设reg1==1时相等,在任何情况下都相等


task -create div -copy_assumes 
//添加 task div 的三种断言


task -create div_pp -copy_assumes -source_task div
//假设正数除以正数时,div和div2的中间变量2相差两个cycle
assert -task div_pp {div.reg1 ==2 |->div.inner_value2 == $past(div2.inner_v1,2)}// 假设reg1==2时相差两个cycle时相等

task -create div_np -copy_assumes -source_task div
//假设负数除以正数时,div和div2的中间变量3正好对齐
assert -task div_np {div.reg1 ==3 |->div.inner_value3 == div2.inner_v3,2)}// 假设reg1==3时相差两个cycle时相等

//添加其他分组task

从脚本中可以看出,主要过程为

通过分析rtl波形,找出比较关键的中间变量,

分析rtl和spec中中间变量对比的cycle delay成立条件,

添加assertion,约束验证空间。

这种方法能够验全跑通。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值