1.一般是单独写一个module 里面放assertion,  然后在验证平台顶层和RTL的实例化bind起来​

2. |->表示直接进行判断,|=>表示下一拍判断,一般一个断言最好只写一个蕴含。​

$rose()表示该信号当前拍为1,上一拍为0,作用与 miso_oe && !past(miso_oe)一样。​

3.  (a [->1])  表示  a为高出现一次,(a [->2])  表示出现  a出现两次​

4.SVA应用指南:​

a. $rose, $fell, $stable​

b. 交叠蕴含:|->,非交叠蕴含:|=>,蕴含的先行算子没有发生时仿真不会报错,因此是空成功。​​

c.禁止属性:not

d. 时间窗口,重叠的时序窗口在先行算子成功的同一个时钟沿开始计算​

e. ended构造:基于序列的结束点来同步序列​​

f. $past构造:默认情况下它提供信号在前一个时钟周期的值​​

(c&&d) |-> ($past((a&&b),2)==1'b1);  该属性检查c&&d为1时其前两个时钟周期a&&b为1。​

g.重复运算符:​

连续重复运算符:   $rose(start) |-> ##2 (a[*3]) ##1 stop ##1 !stop;​

跟随重复运算符:   $rose(start) |-> ##2 (a[->3]) ##1 stop ##1 !stop;​​

非连续重复运算符:   $rose(start) |-> ##2 (a[=3]) ##1 stop ##1 !stop;​​

h. and构造:用来逻辑地组合两个序列,当两个序列都成功时整个属性才成功​。也可以直接在property中使用。

i. intersect构造:作用与and相同,不过要求两个序列的起始点和结束点都相同​

j. or构造:只要一个序列成功,整个属性就成功​​​​

k. 蕴含只在时钟边沿检验前提条件一次,然后就开始检验后续算子部分,因此它不检测先行算子是否一直保持为真。为了保证某些条件在整个序列的验证过程中一直为真,可以使用“throughout”运算符。

property p31;

@(posedge clk)

$fell(start) |->  (!start) throughout  (##1 (!a&&!b) ##1 (c[->3]) ##1 (a&&b));

endproperty

在整个检查过程中start一直为低

l.SVA 提供了几个内建的函数来检查一些最常用的设计条件:

$onehot(检验在任意给定的时钟沿,表达式只有一位为高。

$onehot0 检验在任意给定的时钟沿,表达式只有一位为高或者

没有任何位为高。

$isunknown检验验表达式的任何位是否是 X或者 Z。

$countones计算向量中为高的位的数量。

a33a :  assert  property(@(posedge clk) $onehot(state));

a33b :  assert  property(@(posedge clk) $onehot0(state));

a33c :  assert property(@(posedge clk) $isunknown(bus));

a33d :  assert  property(@(posedge clk) $countones(bus)> 1);

m. 使用“intersect”控制序列的长度 :

这个intersect 的定义检查从序列的有效开始点(信号“a”为高),到序列成功的结束点(信号“c”为高),一共经过 2~5 个时钟周期。

property p35;

(@(posedge clk)

1[*2:5]  intersect  (a ##[1:$] b ##[1:$] c));

endproperty

n.使用局部变量的SVA:  ($rose(enable), Ivar = a) |->  如果enable从0到1翻转了那么就执行赋值,否则不执行。

其他:嵌套的蕴含、disable iff构造。​

培训的笔记:

1.sv出现之前就有assertion,最早是软件上使用

2.硬件的assertion比软件上更复杂

3.他和sv其实挺独立的,所以sv的书不讲SVA

4.systemverilog 应用指南,总共5章,细节可以参考此书。

5.在tb中,激励和检查应该独立,所以assertion是做检查的工具。

6.实际仿真中如果过多的使用$,会拖慢仿真速度。

7.sequence和property可以做成参数化的,然后调用之。

8.一个信号在特定时间内应该出现多少次:[*为严格的次数限制,[->

9.multi clock很少用

10.cover的意思是assertion在其他地方已经做过检查,现在只需要cover一次。

11.直接的assert()就是软件里面的用法,immediate assert,这一行执行完立刻消失。

12. sequence更多的是像子模块,让代码模块化。

13.assertion90%都是用于同步单时钟设计。理解这一点非常重要

14.within运算符指前面的表达式所发生的时间必须是后面表达式的子集。

15.即使某design有多个时钟,但是做assertion还是尽量用单个时钟,因为仿真器可能会对多时钟的延时判断有误,而且很难debug。

16.assert用于检查该property有没有被违反。cover用于检查蕴含前面的触发条件有没有被满足过。

17.initial和module等多数地方都可以放assertion。

18.assertion module的端口最好与design的一样,这样在bind时直接用(.*)就可以。

systemverilog assertion的更多相关文章

  1. SystemVerilog Assertion 设计、调试、测试总结(1)

    暑期实习两个月的其中一个任务是:如何在设计中加入断言?以及断言的基本语法.三种应用场景下的断言(如FIFO.FSM.AXI4-lite总线).参考书籍:<System Verilog Asser ...

  2. SystemVerilog Assertion 设计、调试、测试总结(2)

    上一篇博客主要写了SVA的基本语法(详细),这一篇主要写SVA语法总结,以及如何查看SVA波形等. 断言assertion被放在verilog设计中,方便在仿真时查看异常情况.当异常出现时,断言会报警 ...

  3. SystemVerilog Assertion 设计、调试、测试总结(3)

    上两篇主要是讲述断言的概念,基本语法,总结等等 这一篇主要是以PPT的形式展示各个场景下关于断言的应用. 为了在设计中加入断言的功能,因此需要写一个DUT.如下: `define `define fr ...

  4. NC_Verilog中的工具ICC

    Cadence中的Incisive Comprehensive Coverage(ICC) solusion提供在仿真中的覆盖率分析. ICC中的覆盖率类型有两大类: 1)Code Coverage: ...

  5. SVA描述(一)

    SystemVerilog Assertion(SVA):是一种描述性的语言,可以很容易的描述时序相关的情况,所以主要用在协议检查和协议覆盖.SVA在systemverilog仿真器中的 调度区间在R ...

  6. verdi知识点

    引用:http://blog.csdn.net/naclkcl9/article/details/5425936 1. verdi 加强了active anotation, active trace和 ...

  7. CDC之fast->slow (2)

    1 Open-loop solution One potential solution is to assert CDC signals for a period of time that excee ...

  8. FPGA验证之SystemVerilog+UVM

    [转载]https://blog.csdn.net/lijiuyangzilsc/article/details/50879545     数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. ...

  9. systemverilog FAQ(zz)

    1. What is clocking block? Ans: Clocking block can be declared using the keywords clocking and endcl ...

随机推荐

  1. 兼容性 memo

    一.async 与 defer <script src="js/require.js" defer async="true" ></scrip ...

  2. 第一个Spring 程序

    一 搭建好开发环境 JDK Eclipse 等 二 下载jar包 https://commons.apache.org/logging/ https://repo.spring.io/release/ ...

  3. linux 服务发布脚本升级,远程发布,指定拉取远程dev,test等分支代码

    1.本地发布脚本 publish.sh #!/bin/sh currentDay=`date +%Y%m%d` currentTime=`date +%Y%m%d%H%M%S` tomcat1=/da ...

  4. git不添加.idea等IDE配置文件夹

    git不添加.idea等IDE配置文件夹由于.idea(intellJ,pycharm)的IDE文件夹很常出现,建议将gitignore设置为全局. git config --global core. ...

  5. 2019-04-11-day030-网络编程并发

    内容回顾 黏包 tcp协议为了保证数据的可靠传输和传输效率 合包机制 : 连续多条短数据会合并成一条 拆包机制 : 一个过大的数据会在发出之前被拆成几个小包 tcp的黏包发生在两端: 发送端 : 合包 ...

  6. Matlab_xcorr_互相关函数的讨论

    假设两个平稳信号 $\textbf{x}$ 和 $\textbf{y}$ ,如果 $x\left(t+\tau\right)= y\left(t\right)$ ,则可通过互相关求 $\tau$ .由 ...

  7. BCP导出数据到EXCEL

    SET @FilePath='D:\TEST.xls' SET @sql='bcp "SELECT * FROM XXX.dbo.XXX WITH(NOLOCK) WHERE XXX=''X ...

  8. 5.Fiddler模拟弱网限速方法

    原理:Fiddler的模拟限速是在客户端请求前来自定义限速的逻辑,此逻辑是通过延迟发送数据或接收的数据的时间来限制网络的下载速度和上传速度,从而达到限速的效果. 算法:那么我们的算法就是 1000/下 ...

  9. 关于使用JPA中@Query注解传递表名/视图名参数的问题

    因碰到需要动态查询不同视图的结果,自己尝试使用@Query注解中传递视图名称参数: @Query("select * from ?1") List<Object> ge ...

  10. AWS Redshift typical error and potential root cause:

    Full join issue: When use full join, the below join condition should not occur: 1, OR statement2, an ...