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);

时间: 2024-11-09 20:57:39

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

System Verilog Assertion for debug

System Verilog Assertion是非常好的验证方法,通过SVA可以显式描述需要验证的电路逻辑,并且仿真工具可以在仿真的过程中自动输出波形出错信息,从而替代传统的看波形调试方法,提高前端设计验证效率. RTL代码结构 `ifdef SVA module m_sva(input wire signal); property p1; expression; endproperty a: assert property(p1); endmdule bind m m_sva m_sva_i

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

Verilog HDL基础语法讲解之模块代码基本结构 ? 本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的基本结构. 以下为本章中例子中的代码: 01????/*======================================= 02????*????file neme : mux2.v 03????*????author????:????小梅哥 04????*????Verison????:????

System Verilog学习笔记(一)

1.var/reg与bit/logic 异: reg——>在verilog hdl中用来声明寄存器: var——>在SV中所有暂存的资源视为变量,即variable:同: reg和var都会消耗FPGA资源.注: a.SV中保留了reg关键字,reg与var有等价左右. b.SV在声明RAM的时候,也会使用var关键字.例子:reg [3:0] rLED; //verilogvar [3:0] rLED; //sysverilog 2.物理特性寄存器一般有4态,即0,1,x,z verilog

[原创]利用system verilog快速构建单元仿真

在一些单元模块仿真时,往往需要构建一定格式的数据激励,如某个处理TCP报文的单元模块,需要构建符合TCP报文格式的激励.基于verilog的激励生成,大致有两种方法: txt文件法.将符合需求的数据记录于txt,仿真时调用. 直接合成法.利用verilog在tb中直接合成激励. 这两种方法的优点是直观,但不够灵活.其一,当激励的数据结构复杂时,构建起来比较麻烦:其二,当被测对象的输入协议改动时,往往牵一发而动全身,需要对tb做整体的检查. 利用system verilog构建单元测试可以克服上述

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

system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. 1 package definitions; 2 typedef enum logic [2:0] {ADD,SUB,MULT,DIV,SL,SR} opcode_t; 3 typedef enum logic {UNSIGNED, SIGNED} operand_type_t; 4 typedef union packed { 5 logic [23:

System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 ---&gt; System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效。

今天写程序的时候调用到一个第三方提供的https地址,访问此地址去获取加密的json格式数据,出现BUG c#报错 :  System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系. ---> System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效. 引用: private string callbackRefund(string url, string d

FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比

转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型.结构.压缩和非压缩数组. 接口.断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力.SystemVerilog由Acceller

system verilog学习笔记2

进程: 在定义fork...join块的时候,将整个分叉封装在一个begin..end块中会引起整个块作为单个进程执行,其中每条语句顺序地执行: sv为下列进程产生一个执行线程:每一个initial块,每一个always块,fork...join(join_any,join_none)语句的每一个并行语句,每一个动态进程:每一个连续赋值也可以认为是它自己的线程: 在一个fork...join语句的关联文中使用return语句是非法的,会导致错误,原因是与return语句匹配的进程与fork_jo

System Verilog OOP 学习笔记

1.OOP术语 a.类(class):包含变量和子程序(函数或者任务)的基本构建块.b.对象(object):类的一个实例.c.句柄(handle):指向对象的指针.d.属性(property):存储数据变量.e.方法(method):任务或者函数中操作变量的程序性代码.f.原型(prototype):程序的头,包括程序名.返回类型和参数列表.程序体则包含了执行代码. 类是对象的一个模板,其内部定义了数据和方法.对象是类的一个例化和实现. 注:<SystemVerilog验证 测试平台编写指南>