Concurrent assertion中要求必须有clock,从而保证在每个clock edge都进行触发判断。

assertion与design进行同步执行,concurrent assert只能定义在module中。

每次concurrent assertion条件满足时,都会新开一个thread,所以最终的assert的执行时 multi-thread的。

关键字是 assert property()

一般在property中定义clock,以及sequence的触发条件,而在sequence中指定义signal的判断。

assert与verilog的执行区间:

assert在当前time slot的rtl执行前,sample 上一个time slot的rtl的值,在observe region进行assert的计算判断。

在sample和compute之间会不会间隔一个时钟,主要靠操作符"|->"和“|=>”来决定。

下图中有错误,observe之后不会再有reactive,reactive区域在inactive执行结束之后,就被激活,之后进入observe阶段

一般情况下,clock的定义直接放在property中,而保证sequence独立于时钟比较好,

对于比较复杂的assert,可以单独定义一个clocking block,来作为property的clock基准。

对于一个大的design中,可能会有很多的assert在不同的module中,可以在某一个

assert中声明某个clocking block

在assertion中可以传递参数,来保证复用性:

也可以进行default的设置:

在不需要property继续检查的场景,可以通过加disable iff + COND来看,

disable iff只能应用在property中,不能用在sequence,一般放在@posedge clock前边。

sequence和property虽然都可以放clock event,但是推荐在property中实现。

sequence中不能有|->这样的操作符

Concurrent Assertion的更多相关文章

  1. Concurrent.Thread.js

    (function(){ if ( !this.Data || (typeof this.Data != 'object' && typeof this.Data != 'functi ...

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

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

  3. program与module

    program,各方面与module都类似,其中声明的变量在program中都可见, 生命周期也是static类型的, program的结束,也是需要等待其中的所有initial块都执行结束. 与mo ...

  4. Power management in semiconductor memory system

    A method for operating a memory module device. The method can include transferring a chip select, co ...

  5. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  6. Python标准模块--concurrent.futures

    1 模块简介 concurrent.futures模块是在Python3.2中添加的.根据Python的官方文档,concurrent.futures模块提供给开发者一个执行异步调用的高级接口.con ...

  7. java util 下的concurrent包

    ------------------------------------------java util 下的concurrent包--------并发包--------------------.jav ...

  8. 架构师养成记--12.Concurrent工具类CyclicBarrier和CountDownLatch

    java.util.concurrent.CyclicBarrier 一组线程共同等待,直到达到一个公共屏障点. 举个栗子,百米赛跑中,所有运动员都要等其他运动员都准备好后才能一起跑(假如没有发令员) ...

  9. 原子类java.util.concurrent.atomic.*原理分析

    原子类java.util.concurrent.atomic.*原理分析 在并发编程下,原子操作类的应用可以说是无处不在的.为解决线程安全的读写提供了很大的便利. 原子类保证原子的两个关键的点就是:可 ...

随机推荐

  1. c 生成随机不重复的整数序列

    #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <time.h> ...

  2. php--linux环境下的主从复制

    1.编辑数据库配置文件my.cnf,一般在/etc/目录下. #vi /etc/my.cnf 在[mysqld]的下面加入下面代码:[第一步查看本文件夹中代码是否已经存在,存在不需要进行添加] 只是修 ...

  3. Android.mk学习 笔记

    感谢: 原创作品 转载请注明出处:http://www.cnblogs.com/langlang/ 作者email: dayhappyhappy@163.com LOCAL_PATH := $(cal ...

  4. 通过自定义属性存储数据实现输入框获得焦点与失去焦点改变value值

    http://gopro.ee.cagoe.com/index.html     html: <div class="name"><input value=&qu ...

  5. Fatal error: Cannot redeclare tran() (previously declared in

    解决方法如下: 1.你该段源码里面是不是有include 或者require 之类的包含其他文件函数 包含的文件里已经有 函数 nw() 的定义 而这段代码里又有nv()的定义 所以出现redecla ...

  6. 我的第一个WCF程序,很简单适合我等菜鸟

    1.首先我罗列一下网站搜索并经过自己理解的WCF的含义: 1)WCF:(WIndows Communication Foundation)是由微软是由微软发展的一组数据通信的应用开发接口,可以翻译为W ...

  7. 解决在VMware中安装64位系统时“此主机具有虚拟化支持能力的,但虚拟化技术被禁用”的方法

    您已经配置此虚拟机使用64位客户操作系统.然而,64位操作系统不可用.此主机具有虚拟化支持能力的,但虚拟化技术被禁用.这通常是因为虚拟化技术已经在BIOS /固件设置或禁用或主机没有权限改变此设置. ...

  8. iOS企业开发plist安装包实现

    第一步: 在使用MACBOOK导出ipa的时候,我们得到ipa的同时,还得到一份plist文件 看到我们导出的plist,需要注意的地方有两个已经用中文标注. 一个是URL,一个是bundle-ide ...

  9. SET Statements for SQLServer

    SET SHOWPLAN_ALL { ON | OFF } It will not execute the TSQL statements. It cannot be specified inside ...

  10. Spring第12篇—— Spring对Hibernate的SessionFactory的集成功能

    由于Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...