systemverilog之断言

本文深入探讨SystemVerilog中的断言(SVA),包括断言的类型、语法及其在设计验证中的应用。涵盖即时断言、并发断言、属性定义、时钟关系、禁止属性等核心概念。
--------------------感谢移知的SV课程---------------

断言概述

SystemVerilog Assertion(SVA)–断言
断言概述
一言以蔽之:断言是设计属性的描述。
如果一个在模拟中被检查的属性(property)不像我们期望的那样表现,那么这个断言失败。
如果一个被禁止在设计中出现的属性在模拟过程中发生,那么这个断言失败。
一系列的属性可以从设计的功能描述中推知,并且被转换成断言。这些断言能在功能的模拟中不断地被监视,从而可以得知设计的功能是否正确。
断言是一个“观测员”,它可以观测程序的状态,但它不会改变代码本身。
SystemVerilog集成了断言并且能够将它们与设计余下的部分或验证代码紧密地结合起。SystemVerilog断言的一一个主要特点就是它们是语言本身的组成部分。这也就意味着我们可以将它们与其它语言结构内联使用,而不需要产生特殊的程序及其它类似的限制。另外,SystemVerilog中的断言还可以用来提供功能覆盖。

assert property;
@posedge clk \*你要的条件*\

SystemVerilog具有两种类型的断言并发断言和即时断言。

即时断言

即时断言就像过程块中的一条语句一 样执行。
基于模拟事件的语义。测试表达式的求值就像在过程块中的其他Verilog的表达式一样。它们本质不是时序相关的,而且立即被求值。必须放在过程块的定义中。
只能用于动态模拟。

并发断言

并发断言:
基于时钟周期
在时钟边缘根据调用的变量的采样值计算测试表达式
变量的采样在预备阶段完成,而表达式的计算在调度器的观察阶段完成
可以被放到过程块(procedural block)、模块(module)、 接口(interface), 或者一个程序(program)的定义中

语法

语法之序列

序列由sequence… endsequence声明
功能特性经常由有序的行为构建,sequence功能提供了一种能力来构建和处理有序的行为。
在一系列的布尔逻辑表达式中,如果每个布尔表达式的计算都为真,那么关于这个序列的断言为真,否则为假。

sequence s1;//无参数
	@(posedge clk) a ##1 b ##1 c;//##1指的是延时一个周期	
endsequence//上面的意思是先a是1,一个周期后b是1,一个周期c是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值