SystemVerilog Assertions
本系列教程翻译自Ashok B. Mehta的SystemVerilog Assertions and Functional Coverage。
本系列教程将仅仅关注SystemVerilog Assertion部分。
希望对广大读者理解SVA有所帮助。
XtremeDV
行走在码农和硅农之间
展开
-
第1章 介绍
介绍 正如业界众所周知的那样,28纳米及以下节点的设计复杂性正在爆炸式增长。小尺寸要求和高性能,低功耗和小面积的相互矛盾的要求导致了如此复杂的设计架构。多核,多线程和功耗,性能和面积(PPA)需求加剧了设计复杂性和功能验证。 负担在于功能和时间域验证,以确保设计符合规范。 RTL(和虚拟平台级别)功能验证不仅重要,而且硅验证也很重要。工程团队需要几个月才能验证实验室中的硅片的日子已经结束。在硅前...翻译 2018-04-19 15:57:48 · 3571 阅读 · 2 评论 -
第2章 SystemVerilog断言
2.1什么是断言?一个断言是一个检查你设计的规范,你要确保永不违反。如果规范被违反,您希望看到失败。下面给出一个简单的例子。每当FRAME_无效(即变为高)时,最后数据相位(LDP_)必须被置位(即变为低)。这种检查对于纠正给定接口的功能是必不可少的。 SVA语言被精确设计来处理这种时域情况。正如我们将在Sect中看到的那样。 SVA建模比Verilog容易得多。还要注意,断言在时间域...翻译 2018-04-19 17:42:06 · 11650 阅读 · 4 评论 -
第3章 立即断言
立即断言是简单的非时域断言,它们像程序块中的语句那样执行。将它们解释为类似“if”条件语句下表达式。只有在指定程序语句的情况下才可以使用立即断言。 图3.1描述了立即断言的基础知识。这是所谓的,因为它在程序执行到这个程序块时立即执行。它不会等待'下一个时钟边缘'自行启动。断言之前可以使用电平敏感或边沿敏感的语句。正如我们将看到的那样,断言只能在'采样/时钟边沿'敏感逻辑而不是电平敏感逻辑上工作。 ...翻译 2018-04-23 11:00:29 · 5017 阅读 · 0 评论 -
第4章 并发断言:基础(序列,属性,断言)
这些是时域断言,允许使用基于时钟(采样)边缘的语义创建复杂序列。这与完全组合逻辑的立即断言相反,并且不允许时域序列。 并发断言是SVA语言的要旨。它们被称为并发,因为它们与其余的设计逻辑并行执行。让我们从基础开始,继续讨论并发断言的复杂概念。 让我们先学习并发断言的基本语法,然后研究它的语义。 图4...翻译 2018-04-23 14:32:03 · 8790 阅读 · 10 评论 -
第5章 采样值函数$rose,$fell,$past
图5.1采样值函数$rose,$fell-基础 这些采样值函数允许先行和/或随后被边缘触发。 $rose表示在前一个clk边缘(之前表示当前clk的前一个clk)的表达式(以$ rose(expr))被采样为'0'(或'x'或'z'),并且它在这个时钟边沿被采样为'1'。$fell,只是相反...翻译 2018-04-24 18:40:28 · 15190 阅读 · 4 评论 -
第6章 运算符
下表列出了SV断言提供的所有运算符(IEEE-1800,2005)。我们将在单独章节中讨论1800-2009 LRM的功能。我们将在本章详细介绍每个运算符,因为这些运算符每一个都有独特的功能(表6.1和6.2)。 运算符描述##m, ##[m:n]时钟延迟[*m],[*m:n]重复连续[=m],[=m:n]重复 - 不连续[->m],[->m:n]goto重复 - 不连续sig1 t...翻译 2018-04-26 20:05:25 · 3249 阅读 · 3 评论 -
第7章 系统函数和任务
7.1 $ onehot,$ onehot0 图7.1 $ onehot和$ onehot0 $ onehot和$ onehot0相当自我解释,在图7.1中进行了解释。请注意,如果表达式为'Z'或'X',$ onehot或$ onehot0将失败。图7.1描述了一个简单的应用。对于任何一个总线grant的确认,只...翻译 2018-05-02 17:06:47 · 7177 阅读 · 0 评论 -
第8章 多时钟
8.1 多时钟的序列和属性几乎没有任何设计只能在单个时钟域上工作。到目前为止,我们已经看到属于单一时钟的属性。但是,如果您需要检查跨越时钟边界的时域条件,该怎么办?所谓的CDC(时钟域交叉)问题可以通过多个时钟断言来解决。我们将彻底检查属性/序列如何跨越时钟边界。这两个时钟之间的关系是什么?一旦跨越时钟域,采样边如何评估?请注意,在单时钟系统中,采样沿始终为一个,即时钟的上升沿或下降沿。由于在多...翻译 2018-05-02 18:26:27 · 1062 阅读 · 0 评论 -
第9章 局部变量
图9.1 局部变量-基础 局部变量是您可能经常使用的功能。它们可以用于序列和属性中。它们被称为本地的,因为它们确实是一个序列本地的,并且不可见或不可用于其他序列或属性。当然,这个限制是有解决办法的,我们将在这一章节进一步研究。图9.1指出了局部变种的关键元素。局部变量的最重要和有用的方面是它允许多线程应用程序,...翻译 2018-05-03 14:24:18 · 782 阅读 · 0 评论 -
第10章 递归属性
图10.1递归属性-基础 递归属性只是表明一个条件成立。该属性使用正确的非重叠蕴涵运算符调用它自己,并纠正左侧表达式和右侧表达式关系。如图10.1(顶部属性rc1)所示,如果ra为真,并且在下一个时钟rc1(ra)为真,则rc1应该在其自身上重现。请注意,rc1中的先行词(|=>左边表达式)是1'b...翻译 2018-05-03 16:14:20 · 713 阅读 · 0 评论 -
第11章 检测和使用序列的端点(.ended, .matched)
11.1 .ended 图11.1 .ended-序列的端点在我们学习.ended如何进行工作之前,我们先看看IEEE 1800-2009标准有哪些变化。 2009标准舍弃了了.ended,并用.triggered取而代之。换句话说,.triggered与.ended具有相同的含义,只有.trigger...翻译 2018-05-07 14:53:31 · 1275 阅读 · 1 评论 -
第12章 ‘expect’和‘assume’
12.1 ‘expect’ 图12.1'expect'-基础 'expect'在程序块中与'assert'具有相同的语法(而不是语义)。请注意,'expect'只能在程序块中使用。它不能像assert / property / sequence那样在程序块之外使用,但要记住,'assert'...翻译 2018-05-07 15:30:38 · 1281 阅读 · 0 评论 -
第13章 其他重要主题
13.1异步FIFO断言谈到写断言,异步FIFO(与同步FIFO相比)是一个困难的命题。 Read和Write时钟是异步的,这意味着要检查的最重要属性是从写入到读取时钟的数据传输。其他断言是检查fifo_full,fifo_empty等条件。首先我们介绍一下异步FIFO的设计。 有点复杂,但你不需要了解细节。 接下来我们看到一个我设计了一些断言的测试平台。是的,您可以在设计(RTL)(但不推荐),...翻译 2018-05-08 10:02:16 · 1418 阅读 · 0 评论 -
第14章 异步断言!!!
图14.1异步断言-问题陈述 到目前为止,在本书中,我们总是使用同步时钟边作为断言的采样边沿。这是有原因的。这里介绍的例子使用异步边缘(完全合法)作为采样边缘。问题陈述就会变成''每当(即异步)L2TxData == L2ErrorData, L2Abort被断言'。现在看起来非常合乎逻辑...翻译 2018-05-08 17:32:02 · 1414 阅读 · 0 评论 -
第15章 SystemVerilog 断言示例
例1. assert_nextstart_event是一个trigger,只有start_event成立,才会触发后面的sequence进行评估,等num_cks(常数)个clk后,test_expr得成立。例2.assert_no_underflowtest_expr等于最小值后一个时钟,test_expr>=min(最小值),且小于某个极大值。例3.assert_bits判断bit[x...翻译 2018-05-11 14:16:36 · 9329 阅读 · 0 评论