SVA(system verilog assertions)基础
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)基础的更多相关文章
- (转)新手学习System Verilog & UVM指南
从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...
- System Verilog基础(一)
学习文本值和基本数据类型的笔记. 1.常量(Literal Value) 1.1.整型常量 例如:8‘b0 32'd0 '0 '1 'x 'z 省略位宽则意味着全位宽都被赋值. 例如: :] sig1 ...
- 【转】uvm 与 system verilog的理解
http://www.cnblogs.com/loves6036/p/5779691.html 数字芯片和FPGA的验证.主要是其中的功能仿真和时序仿真. 验证中通常要搭建一个完整的测试平台和写所需要 ...
- system verilog中的跳转操作
在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...
- system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...
- 一段比较有意思的代码——介绍system verilog中的新增幅值语句
system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...
- Verilog语法基础讲解之参数化设计
Verilog语法基础讲解之参数化设计 在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...
- Verilog HDL基础语法讲解之模块代码基本结构
Verilog HDL基础语法讲解之模块代码基本结构 本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...
- System Verilog随笔(1)
测试文件该怎么写? 首先看一个简单代码案例: `timescale 1ns/10ps //1 module test; //2 intput wire[15:0] a; output reg[15 ...
随机推荐
- uva--562Dividing coins +dp
题意: 给定一堆硬币,然后将他们分成两部分,使得两部分的差值最小;输出这个最小的差值. 思路: 想了好久都没想到一个合适的状态转移方程.后面看了别人的题解后,才知道能够转成背包问题求解. 我们将全部的 ...
- 欧拉计划·第四题
题目4:找出由两个三位数乘积构成的回文. 一个回文数指的是从左向右和从右向左读都一样的数字.最大的由两个两位数乘积构成的回文数是9009 = 91 * 99. 找出最大的有由个三位数乘积构成的回文数. ...
- Embedded Linux Primer----嵌入式Linux基础教程--前言
APractical,Real-WorldApproach ChristopherHallinan 计算机无处不在. 事实上,当然了,对于那些大约在过去25年期间没有生活在洞穴中的人来说没有什么惊奇的 ...
- hibernate 在tomcat7.X 下配置mysql数据源
先说一点题外话,LZ近期学习java web. 今天刚看到hibernate,发如今hibernate配置数据源时网上的资料都太久远了,一般以tomcat 5 版本号下的配置居多.而tomcat 7下 ...
- VSTO之旅系列(三):自定义Excel UI
原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结 引言 在上一个专题中为大家介绍如何创 ...
- SCU 3133(博弈)
传送门:windy和水星 -- 水星游戏 2 题意:在一张由 n*m 的格子组成的棋盘上放着 k 个骑士每个骑士的位置为(xi,yi),表示第xi行,第yi列骑士如果当前位置为(x,y),一步可以走的 ...
- Linux下搭建tomcat集群全记录(转)
本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...
- JDBC数据库连接
JDBC是什么? Java Data Base Connectivity JDBC是: 以统一方式訪问数据库的API,能够訪问不论什么类型表列数据.特别是存储在关系数据中的数据.JDBC代表Java数 ...
- linux--文件夹下批量改动IP
sed -i 's/10.11/10.22/g' `grep ir 10.11 *| grep -E'.xml:|.cfg:|.ini:|.wsdl|.properties:' |awk -F:'{p ...
- struts(三)——struts框架实现登录示例
前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现. 1.新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下 ...