SVA
XtremeDV
行走在码农和硅农之间
展开
-
SystemVerilog Assertion支持动态delay或者repeat
package sva_delay_repeat_range_pkg; // int d1, d2; // bit a, b, c=1'b1; // sequence q_s; a ##1 c; endsequence // sequence my_sequence; e ##1 d[->1]; endsequence //--------...转载 2020-01-17 14:27:30 · 1902 阅读 · 0 评论 -
控制SystemVerilog Assertion的关闭打开
module my_control (); initial begin : disable_assertions_during_reset $display ("%0t %m Disabling assertions during init..", $time); $assertoff (0, top_tb.cpu_rtl_1); @ (top_tb.reset_n ...转载 2020-01-17 14:22:50 · 5391 阅读 · 0 评论 -
第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 · 3048 阅读 · 3 评论 -
第10章 递归属性
图10.1递归属性-基础 递归属性只是表明一个条件成立。该属性使用正确的非重叠蕴涵运算符调用它自己,并纠正左侧表达式和右侧表达式关系。如图10.1(顶部属性rc1)所示,如果ra为真,并且在下一个时钟rc1(ra)为真,则rc1应该在其自身上重现。请注意,rc1中的先行词(|=>左边表达式)是1'b...翻译 2018-05-03 16:14:20 · 677 阅读 · 0 评论 -
第9章 局部变量
图9.1 局部变量-基础 局部变量是您可能经常使用的功能。它们可以用于序列和属性中。它们被称为本地的,因为它们确实是一个序列本地的,并且不可见或不可用于其他序列或属性。当然,这个限制是有解决办法的,我们将在这一章节进一步研究。图9.1指出了局部变种的关键元素。局部变量的最重要和有用的方面是它允许多线程应用程序,...翻译 2018-05-03 14:24:18 · 744 阅读 · 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 · 9113 阅读 · 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 · 1167 阅读 · 1 评论 -
第12章 ‘expect’和‘assume’
12.1 ‘expect’ 图12.1'expect'-基础 'expect'在程序块中与'assert'具有相同的语法(而不是语义)。请注意,'expect'只能在程序块中使用。它不能像assert / property / sequence那样在程序块之外使用,但要记住,'assert'...翻译 2018-05-07 15:30:38 · 1242 阅读 · 0 评论 -
第13章 其他重要主题
13.1异步FIFO断言谈到写断言,异步FIFO(与同步FIFO相比)是一个困难的命题。 Read和Write时钟是异步的,这意味着要检查的最重要属性是从写入到读取时钟的数据传输。其他断言是检查fifo_full,fifo_empty等条件。首先我们介绍一下异步FIFO的设计。 有点复杂,但你不需要了解细节。 接下来我们看到一个我设计了一些断言的测试平台。是的,您可以在设计(RTL)(但不推荐),...翻译 2018-05-08 10:02:16 · 1302 阅读 · 0 评论 -
第14章 异步断言!!!
图14.1异步断言-问题陈述 到目前为止,在本书中,我们总是使用同步时钟边作为断言的采样边沿。这是有原因的。这里介绍的例子使用异步边缘(完全合法)作为采样边缘。问题陈述就会变成''每当(即异步)L2TxData == L2ErrorData, L2Abort被断言'。现在看起来非常合乎逻辑...翻译 2018-05-08 17:32:02 · 1367 阅读 · 0 评论 -
UVM糖果爱好者教程 - 33.定义do_record
这是关于“do”钩子函数系列的最后一篇文章。 do_record函数是由记录对象属性的uvm_object记录函数调用的用户可定义的钩子。定义do_record定义do_record不是很困难。我们来定义jelly_bean_transaction的do_record。我记录了与我在do_print中打印的属性相同的属性。我使用了UVM定义的记录宏(第14至19行)。class jelly_bea...翻译 2018-06-28 14:59:13 · 1884 阅读 · 1 评论 -
第8章 多时钟
8.1 多时钟的序列和属性几乎没有任何设计只能在单个时钟域上工作。到目前为止,我们已经看到属于单一时钟的属性。但是,如果您需要检查跨越时钟边界的时域条件,该怎么办?所谓的CDC(时钟域交叉)问题可以通过多个时钟断言来解决。我们将彻底检查属性/序列如何跨越时钟边界。这两个时钟之间的关系是什么?一旦跨越时钟域,采样边如何评估?请注意,在单时钟系统中,采样沿始终为一个,即时钟的上升沿或下降沿。由于在多...翻译 2018-05-02 18:26:27 · 1022 阅读 · 0 评论 -
SVA(systemverilog assertion)序列循环算子[*] [->] [=]
[*n : $], [*] [+]连续循环,是针对sequence的连续循环[* n:$]结构类似于[* n:m],除了m被$符取代,$符代表无限的意思,并且n意味着重复最少n个周期。 [*]是[* 0:$]的缩写,表示重复至少0次,最多无限次。 [+]是[* 1:$]的缩写,表示重复至少1次,最多无限次。[=n], [=n:m] 非连续循环算子能够对不连续的循环进行评价,循环评价结束时,不连续的...原创 2018-03-23 15:44:03 · 2781 阅读 · 0 评论 -
SVA 中$rose的理解
上图中第一个时序图中的属性'checkiack'将会通过,因为 'inter'和'iack'信号都符合$ rose的要求(两个连续的时钟值不同,'0'后跟'1')。 但是,第二个时序图失败,因为虽然$rose(intr)符合$rose的要求,'iack'没有。 'iack'在两个时钟沿之间不会从'0'变为'1'。$rose并不意味着posedge,$fell并不意味着negedge。 换句话说,一...原创 2018-03-14 13:56:30 · 6864 阅读 · 3 评论 -
SVA中的局部变量
局部变量是SVA语言中最强大的特性之一,它使得检查设计中复杂的流水线行为成为可能。SVA中的局部变量是动态变量,也就是说它会在每一个sequence实例化的时候动态创建,在sequence结束的时候自动销毁。以下图为例:局部变量可能是您经常使用的功能。它们可以用于序列(sequence)或者属性(property)。之所以称之为局部是因为它们对声明它的sequence是局部的,对其他sequenc...原创 2018-03-27 15:11:29 · 2007 阅读 · 0 评论 -
第3章 立即断言
立即断言是简单的非时域断言,它们像程序块中的语句那样执行。将它们解释为类似“if”条件语句下表达式。只有在指定程序语句的情况下才可以使用立即断言。 图3.1描述了立即断言的基础知识。这是所谓的,因为它在程序执行到这个程序块时立即执行。它不会等待'下一个时钟边缘'自行启动。断言之前可以使用电平敏感或边沿敏感的语句。正如我们将看到的那样,断言只能在'采样/时钟边沿'敏感逻辑而不是电平敏感逻辑上工作。 ...翻译 2018-04-23 11:00:29 · 4904 阅读 · 0 评论 -
第4章 并发断言:基础(序列,属性,断言)
这些是时域断言,允许使用基于时钟(采样)边缘的语义创建复杂序列。这与完全组合逻辑的立即断言相反,并且不允许时域序列。 并发断言是SVA语言的要旨。它们被称为并发,因为它们与其余的设计逻辑并行执行。让我们从基础开始,继续讨论并发断言的复杂概念。 让我们先学习并发断言的基本语法,然后研究它的语义。 图4...翻译 2018-04-23 14:32:03 · 8474 阅读 · 10 评论 -
第1章 介绍
介绍 正如业界众所周知的那样,28纳米及以下节点的设计复杂性正在爆炸式增长。小尺寸要求和高性能,低功耗和小面积的相互矛盾的要求导致了如此复杂的设计架构。多核,多线程和功耗,性能和面积(PPA)需求加剧了设计复杂性和功能验证。 负担在于功能和时间域验证,以确保设计符合规范。 RTL(和虚拟平台级别)功能验证不仅重要,而且硅验证也很重要。工程团队需要几个月才能验证实验室中的硅片的日子已经结束。在硅前...翻译 2018-04-19 15:57:48 · 3330 阅读 · 2 评论 -
第2章 SystemVerilog断言
2.1什么是断言?一个断言是一个检查你设计的规范,你要确保永不违反。如果规范被违反,您希望看到失败。下面给出一个简单的例子。每当FRAME_无效(即变为高)时,最后数据相位(LDP_)必须被置位(即变为低)。这种检查对于纠正给定接口的功能是必不可少的。 SVA语言被精确设计来处理这种时域情况。正如我们将在Sect中看到的那样。 SVA建模比Verilog容易得多。还要注意,断言在时间域...翻译 2018-04-19 17:42:06 · 11490 阅读 · 4 评论 -
第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 · 14248 阅读 · 4 评论 -
第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 · 6866 阅读 · 0 评论 -
bug和debug的定义
写了九年的博客,我猜测至少有一半的内容是围绕代码质量或调试进行的。 虽然我写关于这些主题的文章,花费了很多时间,但是无论出于何种原因,直到昨天,我才意识到我没有一个可靠的关于debug定义,或者甚至是针对debug问题的bug定义。在debug的时候,我们到底在debug什么。 我想我是还是有对什么是bug以及debug代码意味着什么的通常的理解的。 意识到这可能并非如此,我想出了一个定义来解释b...翻译 2018-03-15 10:11:01 · 3982 阅读 · 0 评论