Formal Experience Record

本文探讨了JasperGold在形式验证中遇到的挑战,包括大量的未证明属性和复杂的DUT结构。提出的解决方案包括直接连接配置、抽象DUT内部计数器、减少接口握手延迟、简化模块、添加覆盖组、增强端到端断言、拆分测试用例、复杂度分析、使用数据检查器以及进行功能和结构分区。此外,还提到了在TB agent中使用assume增加约束来优化验证过程。

Formal

适合大小

  gates 数量:10K到100K

通常project flow

TODO

 

JasperGold

1. 痛点

  有太多的property 不能被prove

  解决方法:

1.Register 一个cycle配置完,直接把config 接到DUT上(block box register config)

2.Abstract DUT internal counter, DUT内部每次加1的counter看看是否可以每次+2或者更大的指

3.Decrease delay of interface handshake(valid and ready)

4.block-box 不必须的module

5.增加cycle counter cover,用于定向分析long cycle的case,从而看看是否有solution

6. 增加end to end assertion to check the for tb unfinished issue, eg: en |=> s_eventually done

7. 减少config,并分成不同的testcase

8. 复杂

### Formal验证的概念与解决方案 Formal验证是一种基于数学的方法,用于证明设计的功能正确性。与传统的EDA验证方法(如仿真)不同,Formal验证具有“证明”的能力,而不是仅仅“证伪”[^1]。这意味着Formal验证工具能够通过遍历所有可能的合法场景来确保设计在任何情况下都不会违反指定的断言或约束。 #### Formal验证的核心概念 - **断言(Assertion)**:在Formal验证中,断言被定义为需要证明的目标。这些断言通常描述了设计的行为规范,例如“某个信号永远不能同时为高和低”。 - **假设(Assume)**:用于Formal验证中的环境建模。它们定义了设计运行时的上下文条件。例如,某些输入信号的组合永远不会出现。 - **证明目标**:Formal验证工具会尝试从数学上证明断言在所有可能的情况下都成立。如果工具无法证明,则会生成反例以帮助调试。 #### Formal验证的工具 以下是一些常用的Formal验证工具: 1. **Cadence JasperGold**:这是一款广泛使用的Formal验证工具,支持多种验证任务,包括属性检查、等价性检查和时序分析。它可以通过遍历所有可能的状态组合来证明设计的功能正确性。 2. **Synopsys HECTOR**:专注于Formal验证的快速收敛,适用于复杂的硬件设计。HECTOR提供高效的引擎来处理大规模设计。 3. **Mentor Graphics Questa Formal Verification**:提供强大的Formal验证功能,支持多种验证场景,包括寄存器传输级(RTL)设计和系统级验证。 #### Formal验证的解决方案 Formal验证的解决方案通常分为以下几类: 1. **属性检查(Property Checking)**:验证设计是否满足特定的断言。这是最常见的Formal验证应用场景。 ```python # 示例代码:SVA断言示例 assert property(@(posedge clk) disable iff(!reset) a |-> b); ``` 2. **等价性检查(Equivalence Checking)**:验证两个设计版本是否功能等价,常用于综合后验证。 3. **时序分析(Timing Analysis)**:确保设计满足时序约束,避免潜在的时序问题。 4. **全功能证明(Full Proof FPV)**:试图完全证明设计的功能性,虽然最费力,但可以确信设计已被彻底验证[^2]。 #### Formal验证的优势 - **全面性**:Formal验证能够覆盖所有可能的状态组合,从而避免传统仿真中可能出现的覆盖率不足问题。 - **高效性**:对于某些场景,Formal验证可以在无需运行大量测试用例的情况下快速发现问题。 - **可靠性**:一旦Formal验证成功完成,可以确信设计在所有合法场景下均符合规范[^2]。 ### 示例代码 以下是一个简单的SystemVerilog断言(SVA)示例,用于Formal验证: ```systemverilog // 定义一个简单的断言 assert property(@(posedge clk) disable iff(!reset) a |-> b); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值