先看一段代码
请根据这段代码写一个assertion检查 count 每次加5。
下面是一种写法
看起来不算太复杂。
但是如果让你写一个关于fifo 不能overflow 和 underflow的assertion呢?
是不是发现很头大?
笔者发现我们验证中很多assertion 具有一些共性,比如
某个条件永远不能发生;
某个条件一直为真;
req ack的检查;
在一段时间内,某条件一直为真;
fifo的检查;
等等
这些共性的东西,能不能整理成一个assertion的lib呢?带着疑问我们搜索了网上的资料,开始并没有什么收获。
几乎所有的资料都偏向基础的assertion语法解释。
直到我们看到这份文档,笔者大概猜到这就是我们要找的东西。
这完全符合我们最初的设想,有一系列的assertion checker Library 可以供我们调用,实现一些通用的assertion检查。
回到上面第一个问题,我们要用assertion检查count按cycle每次加5怎么做?assert_increment 很好的解决了这个问题。
调用方法:
assert_increment #(0, 7, 5, 0, "ERROR: count has increased beyond allowable limit", 0, 0, 0, 1) invalid_count_increase (clk, reset_n, count);
第二个问题,fifo的underflow ,overflow的检查。可以用assert_fifo 检查。
说了这么多,很多人肯定想知道这个assertion checker library是放在哪里的。
答案是
$VCS_HOME/packages/sva/
没错,他就是VCS的 SVA checker library!
我们点开一个assert_never 看下
各个参数和说明都有,完美!
大家喜欢今天的文章吗?喜欢的话给点个赞哈!
作者:处芯积律
文章来源:处芯积律
推荐阅读
更多IC设计干货请关注IC设计专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。