assume,用于EDA验证为断言,用于Formal验证为约束

“橘生淮南则为橘,生于淮北则为枳,叶徒相似,其实味不同。所以然者何?水土异也”

《晏子春秋·内篇杂下》

用这句话来概括assume这个SVA语法在EDA验证Formal验证中的区别再好不过了。为什么assume在EDA验证中是断言,而在Formal验证中是约束呢?同样是因为“水土异也”罢了。

Assertion-based design verification is an absolute necessity in today’s large,complex designs . . . 

Every design engineer should be adding assertion checks to his design!

SystemVerilog Assertions Handbook

下面本文来一一介绍assert/assume/ cover?

什么是assert?

 

简单来说,assert是关于设计属性的描述性语言,也是验证人员或设计人员对于设计的预期行为。

check_grant: assert property (!(
### 形式化验证中 `assume` 的作用 在形式化验证方法或工具中,`assume` 是一种重要的关键字,其主要用途是在 Formal 验证过程中定义约束条件。这些约束条件限定了设计的行为范围或者假设环境行为的合法性。通过引入 `assume`,可以减少状态空间的复杂度并提高验证效率。 #### 使用背景 在 Formal 方法中,`assume` 和 `assert` 起到互补的作用。具体来说,`assume` 定义的是 **允许发生的情况** 或者说是系统的输入约束;而 `assert` 则是用来描述期望的设计行为[^2]。这意味着,如果某个场景违反了 `assume` 中设定的前提,则该场景会被视为非法而不被考虑。 #### 工具支持 不同的 Formal 验证工具对 `assume` 提供的支持可能略有不同。例如,在 Cadence JasperGold 这样的工具中,可以通过 SystemVerilog Assertions (SVA) 来实现 `assume` 功能。而在 Synopsys VC Formal 平台下,也可以利用类似的机制来指定假设条件[^1]。 以下是具体的语法示例: ```systemverilog // Example of 'assume' usage in SVA for a design input constraint. property valid_input; @(posedge clk) assume(input_signal == 1'b0 || input_signal == 1'b1); endproperty : valid_input // Assertion to ensure the output behaves correctly under assumed conditions. property correct_output; @(posedge clk) assume(valid_input); // Ensure only legal inputs are considered assert(output_signal === ~input_signal); endproperty : correct_output ``` 在此代码片段中: - `valid_input` 属性指定了一个关于输入信号的有效性假设。 - 在 `correct_output` 属性中,先调用了 `assume` 确保只评估满足前提条件的状态组合,随后再执行实际的功能验证逻辑。 这种做法有助于排除不合理的测试向量,从而专注于有意义的形式分析路径。 #### 数学意义 从理论上讲,`assume` 可以看作是对状态转移图施加额外边界的操作。它帮助缩小探索的空间至那些符合特定业务规则或协议规定的子集之内。因此,即使某些极端情况确实可能导致错误,但如果它们违背了预先声明的假设,则不会影响最终结论的真实性。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值