写assertion很痛苦?了解一下SVA Checker Library

电子说

1.3w人已加入

描述

现看一段代码

CLK

请根据这段代码写一个assertion检查 count 每次加5。

下面是一种写法

CLK

看起来不算太复杂。

但是如果让你写一个关于fifo 不能overflow 和 underflow的assertion呢?

是不是发现很头大?

笔者发现我们验证中很多assertion 具有一些共性,比如

某个条件永远不能发生;

某个条件一直为真;

req ack的检查;

在一段时间内,某条件一直为真;

fifo的检查;

等等

这些共性的东西,能不能整理成一个assertion的lib呢?带着疑问我们收集了网上的资料,开始并没有什么收获。

CLK

大部分资料都偏向基础的assertion语法解释。

直到我们看到这份文档,笔者大概猜到这就是我们要找的东西。

CLK

CLK

这完全符合我们最初的设想,有一系列的assertion checker Library 可以供我们调用,实现一些通用的assertion检查。

回到上面第一个问题,我们要用assertion检查count按cycle每次加5怎么做?assert_increment 很好的解决了这个问题。

CLK

调用方法:

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 检查。

CLK

说了这么多,很多人肯定想知道这个assertion checker library是放在哪里的。

答案是

$VCS_HOME/packages/sva/

没错,他就是VCS的 SVA checker library!

CLK

我们点开一个assert_never 看下

CLK

各个参数和说明都有,完美!






审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分