UVM实战——assertion介绍

本文介绍了断言在验证中的应用,包括基于断言的验证方法学、断言覆盖率及其重要性,以及立即断言和并行断言的执行阶段。通过详细阐述断言的类型、property和sequence的使用,帮助读者掌握如何有效利用断言进行设计验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

断言(assertion)

断言(assertion)是用来与设计功能和时序作比较的属性描述,可以完成:
- 检查设计的内容。
- 提高设计的可视度和调试能力。
- 检查设计特性在验证中是否被覆盖。
对于断言,它的可读性好,可以用来服务于设计文档;用来检查算法模型的断言在形式验证(formal verification)中可以穷尽计算,找出可能的违例(violation);可以自由地打开或者关闭;—小部分子集甚至可以用来综合或者移植到emulation中,用来完成跨平台的移植。

基于断言的验证方法学(ABV)

Assertion Based Verification (ABV)方法学会定义断言如何被使用:
- 谁写断言?
- 哪种语言可以用来写断言?
- 断言可以写在哪里?
- 可以使用哪些断言库(library) ?
- 断言如何调试?
- 如何使用形式验证工具?
- 如何使用断言覆盖率?

断言覆盖率

仿真工具可以报告断言覆盖率,来指示哪些断言没有被触发?
帮助检查是否验证计划捕捉到了所有需要的覆盖率。
断言覆盖率和功能覆盖率可以共同量化验证进度。

断言语言的发展与进步

在Verilog中不支持断言,因此需要写过程语句来做替代。一些语言支持断言:
- Sugar (IBM)进化为PSL (Property Specification Language)
- OVA-Vera
- Specman/e
- ForSpec (Intel)
上述语言的优点功能进化为SVA,因此SVA作为SV相对独立的语言分支,值得我们花足够的精力来学习掌握它。

类型划分

可以将断言分为两种常见的类型:
- 立即断言(immediate assertion):非时序的;执行时如同过程语句;可以在initial/always过程块或者task/function中使用。
- 并行断言(concurrent assertion):时序性的;关键词property用来区分立即断言和并行断言;之所以称之为并行,是因为它们与设计模块一同并行执行。

立即断言

[name:] assert (expression) [pass_statement] [else fail_statement]time t ;
//如果状态为REQ,但是req1或者req2均不为1时,断言将失败。
always @(posedge clk)
	if ( state == REQ)
		assert (req1 || reg2)
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值