1什么是断言:

断言就是在模拟过程中依据我们事先安排好的逻辑是不是发生了,假设发生断言成功。否则断言失败。

2断言的运行分为:预备(preponed)观察(observed)响应(reactive).

3断言的分类:并发断言(基于时钟)和即时断言(基于语义)。

4SVA(system Verilogassertions):块的建立:

序列:

Sequencename_of_sequence;

<test expression>

Endsequence

Property name _of_ property

<test expression>

Or

<sequence>

Endproperty

Assertions _name: assert property (property_name) ortest_expression;

运行块:

Assertion_name:

Assertproperty(property_name)

<success message>

Else

<fail message>

注:保持序列独立于时钟,属性中定义时钟是好的编码风格。

5 SVA检測器的步骤:

建立布尔表达式->建立序列表达式->建立属性->断言属性;

6经常使用语句及函数:

$rose():检測信号上升沿

$fell(): 检測信号下降沿

$stable(); 检測信号是否稳定。

##n:表示延迟N个时钟周期。

##[n1:n2]:延时在n1到n2个时钟周期之内。

##[n1:$]:延时在n1到无穷个时钟周期之内。

not:检測属性不为真的情况(禁止属性)

|->:假设先行算子匹配在同一个时钟周期检測兴许算子

|=>:假设先行算子匹配在下一个时钟周期检測兴许算子

ended: 以序列的结尾作为多个序列的连接点

xx?xx:xx:问号表达式与c同样。

`define true 1:利用true表达式可实现序列延时n个周期。

$past(signal_name, number of clock cycles,[gating signal]):用来检測n个时钟周期之前逻辑表达式的值。

Signalor sequence [*n] 连续反复

Signal[->n]:尾随反复(在其后必须有一个信号使得最后一次反复有效发生在其后逻辑发生之前的时钟周期)。

Signal[=n]:非连续反复,反复次数为n

and: 两个序列必须有同样的起始点。

intersect:两个序列必须在同样时刻開始而且结束于同一时刻。

or:当中一个序列成功就可以。

first_match:and or的序列中指定了时间窗,就可能同一检验具有多个匹配的情况。

first_match确保仅仅是用第一次序列匹配。

throughout:(expression) throughout (sequence definition)保证某些条件在检測过程中一直为真。

within:seq1 within seq2。seq1序列的检測必须包括在seq2的起始点和结束点。

内建系统函数:

$onehot(expression):在随意给定的时钟沿,表达式仅仅有一位为高。

$onehot0(expression):有一位或者没有位为高。

$isunknown(expression):检查表达式的不论什么位是否为x或者z。

$countones(expression):计算向量中为高的位的数量。

disable iff (expression)  <property definition>: 当某些条件为真时则不进行检測。

matched: 能够用来检測第一个子序列的结束点。

expect:属性成功的检验

<cover_name>: cover property (property_name):cover会检測序列的:被尝试检測次数。属性成功次数;属性失败次数;属性空成功次数。

7一个样例:

sequences32a;

@(posedgeclk)

((!a&&!b) ##1 (c[->3]) ##1 (a&&b)); //信号a和信号b均为低电平。经过一个时钟的延时后检測信号c是否连续出现三次高电平。且c最后一次为高电平时,经过一个时钟延时信号a和信号b均为高电平。

endsequence

sequences32b;

@(posedgeclk)

$fell(start) ##[5:10] $rose(start); //从start的下降沿開始。经过5-10个时钟周期start出现上升沿。即start保持低电平5-10个时钟周期。

endsequence

sequence s32;

@(posedgeclk)

s32a within s32b; //序列s32a 包括在 s32b中。即序列s32b的起始点和结束点包括s32a的起始点和结束点

endsequence

property p32;

@(posedgeclk)

$fell(start) |-> s32;//在start的下降沿马上检測s32.

endproperty

a32: assert property(p32);

SVA(system verilog assertions)基础的更多相关文章

  1. (转)新手学习System Verilog & UVM指南

    从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...

  2. System Verilog基础(一)

    学习文本值和基本数据类型的笔记. 1.常量(Literal Value) 1.1.整型常量 例如:8‘b0 32'd0 '0 '1 'x 'z 省略位宽则意味着全位宽都被赋值. 例如: :] sig1 ...

  3. 【转】uvm 与 system verilog的理解

    http://www.cnblogs.com/loves6036/p/5779691.html 数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. 验证中通常要搭建一个完整的测试平台和写所需要 ...

  4. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  5. system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)

    类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...

  6. 一段比较有意思的代码——介绍system verilog中的新增幅值语句

    system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...

  7. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  8. Verilog HDL基础语法讲解之模块代码基本结构

    Verilog HDL基础语法讲解之模块代码基本结构   本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...

  9. System Verilog随笔(1)

    测试文件该怎么写? 首先看一个简单代码案例: `timescale 1ns/10ps //1 module test;   //2 intput wire[15:0] a; output reg[15 ...

随机推荐

  1. Codeforces 474 F. Ant colony

    线段树求某一段的GCD..... F. Ant colony time limit per test 1 second memory limit per test 256 megabytes inpu ...

  2. 它们的定义iOS双击Home截图按键开关

    <pre name="code" class="objc"><p>双击假设Home,我会去iOS App的switcher页面,这里列出 ...

  3. 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET

    基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...

  4. 总结文件操作函数-文件夹(三)-C语言

    获取.改变当前文件夹: 原型为: #include <unistd.h>   //头文件 char *getcwd(char *buf, size_t size); //获取当前文件夹.相 ...

  5. uva315(求割点数目)

    传送门:Network 题意:给出一张无向图,求割点的个数. 分析:模板裸题,直接上模板. #include <cstdio> #include <cstring> #incl ...

  6. mysql 服务启动报1607 error

    [问题说明] mysql曾经还是好好的,突然就不行了...不知道是否使用了腾讯C盘搬家工具引起的... watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h ...

  7. WPF案例 (三) 模拟QQ“快速换装"界面

    原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...

  8. SE 2014年4月22日(一)

    实验 练习: 如图配置: 两自治系统 AS 100  和 AS 200 AS 100 是由两私有自治系统 (AS 65001 和 AS 65002)构成 要求配置BGP联盟 使得 R3 R4 R5 下 ...

  9. HDU 4454 - Stealing a Cake(三分)

    我比较快速的想到了三分,但是我是从0到2*pi区间进行三分,并且漏了一种点到边距离的情况,一直WA了好几次 后来画了下图才发现,0到2*pi区间内是有两个极值的,每个半圆存在一个极值 以下是代码 #i ...

  10. ubuntu14.04中 gedit 凝视能显示中文,而source insight中显示为乱码的解决的方法

    1.乱码显示情况: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcjc3NjgzOTYy/font/5a6L5L2T/fontsize/400/fill/ ...