VC Formal -- Introduction

本文探讨了formal验证在深度顺序行为验证中的补充作用,强调了在关键任务块和特定应用中的重要性,介绍了模型检查和等价性检查的两种主要应用,以及证明、反证和有界证明的结果类型。文章还讨论了顺序深度的概念及其在验证过程中的影响,以及VCFormal在配置验证任务中的应用和标准。
  • Formal验证
    Simulation对于验证深度顺序行为非常有效,但并不详尽。对于关键任务块和一些非常特定的应用,详尽的分析是必须的。formal验证是对simulation验证的补充

    基于属性的formal分析提供了可观察性和可控制性,并且还提供了详尽的分析以确保signoff质量。选择适合formal验证的模块非常重要,它最适用于控制路径密集的块,其中需要验证许多并发事件

    Formal验证有两个主要的广泛应用。一个是模型检查,另一个是等价性检查。

    形式验证提供三种答案:证明、反证和有界证明。
    ❖ 证明 - 如果设计符合断言描述的行为,那么断言就被证明了。这意味着无论你模拟多少次,断言都不会失败,断言描述的函数保证总是通过。
    ❖ 反证:如果设计不符合断言描述的行为,那么断言就被反证了。一个被反证的波形(也称为反例波形)被提供以帮助进一步调试。
    ❖ 有界证明:如果断言没有被证明或反证,那么断言被认为是有界证明,这意味着断言在形式分析执行的顺序深度1内被证明。

    形式验证的效能和性能取决于需要考虑的状态空间的大小。随着形式分析的顺序深度的增加,状态空间的大小也在不断增加。因此,建议在模块级别部署形式验证。请注意,对于一些特定的应用(如连通性检查应用),可以在 SoC 级别使用形式验证,但是会使用一些内置和用户定义的设计大小缩减技术来管理验证问题

    建议准确估计涉及的大小和复杂性,这有助于通过形式验证过程实现更好的收敛。其中一些可能是静态的,可以在形式验证开始之前识别,其余的可能是动态的,可以在形式引擎正在解决验证问题时看到和审查。如果验证问题大且复杂,拥有大型机器(大量核心和内存)可以加速形式验证过程并缩短周转时间。

  • VC_Formal
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    VC Formal 提供了各种应用。这些应用使你能够为验证任务设置正确的配置。VC Formal 读入设计后,属性(例如:SVA 属性、覆盖属性、AEP 属性等)被加载到设置的应用模式中。默认情况下,所有任务都处于 FPV 应用模式

    Formal signoff标准:
    VC Formal 有连通性覆盖度的概念,用户可以使用它来确定连通性规范中的连接列表是否完整;
    对于形式属性检查(FPV),作为签署过程的一部分,用户需要找出以下问题的答案: ❖ 我有足够的属性吗? ❖ 我如何确保我没有得到任何fake positive? ❖ 如果我无法证明一个属性,那么从验证的角度来看,这意味着什么? ❖ 如果我已经证明了一个属性,那么这个属性验证了设计逻辑的哪一部分? ❖ 属性的质量如何?如果我的设计中有任何错误,那么我有一个属性来捕获那个错误吗?


  1. 顺序深度:在验证过程中所考虑的设计中的状态转换的最大步骤数。换句话说,它是指验证工具在分析设计时所关注的状态转换的深度,举个例子:假设我们有一个简单的计数器电路,它有三个状态:0、1和2,如果顺序深度为2,formal验证工具将会检查计数器从状态0到状态1的转换,以及从状态1到状态2的转换是否正确,它会分析这两个状态转换之间的所有可能路径;如果我们把顺序深度设为1,那么Formal验证工具只会检查计数器从状态0到状态1的转换是否正确,而不会关注状态1到状态2的转换。 ↩︎

在数字电路设计中,复位域(Reset Domain)是定义在设计中具有相同复位信号的逻辑部分。复位域的配置和使用对于确保设计的正确性、可测试性和可综合性能至关重要。VC Formal 是 Synopsys 提供的一种形式验证工具,用于验证设计的功能正确性,特别是在复位域的交叉(Reset Domain Crossing, RDC)验证中发挥重要作用。 在使用 VC Formal 进行复位域分析时,需要明确以下关键点: ### 复位域的定义与配置 复位域通常由一个或多个复位信号定义,这些信号控制设计中特定模块或逻辑区域的复位行为。在 VC Formal 中,复位域可以通过命令或脚本进行定义和配置。例如: ```tcl reset_domain -create -name RST_F2 -reset_signal rst_n -reset_type synchronous ``` 此命令定义了一个名为 `RST_F2` 的同步复位域,复位信号为 `rst_n`。类似地,异步复位域可以使用 `asynchronous` 类型进行配置。通过这种方式,设计中的不同模块可以被分配到不同的复位域中,从而实现更精确的验证和分析。 ### 复位域交叉(Reset Domain Crossing, RDC) 当信号从一个复位域传输到另一个复位域时,可能会出现复位域交叉问题。如果未正确处理这些交叉,可能导致信号在复位释放时处于未知状态,进而引发功能错误。VC Formal 可以自动检测这些交叉路径,并验证是否存在潜在的同步机制(如同步FIFO或两级同步器)来确保信号的稳定性。 例如,在复位释放过程中,如果一个信号从异步复位域传输到同步复位域,VC Formal 可以识别这种跨域传输,并检查是否使用了适当的同步逻辑来避免亚稳态问题。 ### 复位域验证的关键检查点 1. **复位信号的同步**:在异步复位域中,复位信号通常需要同步释放,以避免复位信号与时钟信号之间的竞争条件。VC Formal 可以验证复位信号是否通过同步器正确释放。 2. **跨域信号的处理**:对于跨越不同复位域的信号,VC Formal 可以检查是否采用了适当的同步机制,如两级触发器或FIFO缓冲区,以确保信号在目标域中的稳定性。 3. **复位域的隔离**:在某些设计中,复位域之间可能需要隔离机制,以防止复位信号传播到不需要的区域。VC Formal 可以验证这些隔离逻辑是否正确实现。 4. **复位域的覆盖率**:VC Formal 可以提供复位域的覆盖率报告,确保所有复位域都被正确分析,并且没有遗漏的复位域交叉路径。 ### 复位域的使用场景 复位域的使用场景广泛,尤其在以下几种情况下尤为重要: - **多时钟域设计**:在涉及多个时钟域的设计中,复位域的交叉问题尤为突出。VC Formal 可以帮助识别和验证这些交叉路径。 - **低功耗设计**:在低功耗设计中,某些模块可能在特定条件下被关闭或复位,而其他模块保持运行状态。复位域的正确配置可以确保这些模块在重新启用时能够正确初始化。 - **复杂SoC设计**:在系统级芯片(SoC)设计中,复位域的管理变得尤为重要,因为设计中通常包含多个独立的子系统,每个子系统可能具有不同的复位策略。 ### 示例代码:复位域的定义与交叉检查 ```tcl # 定义复位域 reset_domain -create -name RST_CPU -reset_signal cpu_rst_n -reset_type synchronous reset_domain -create -name RST_GPU -reset_signal gpu_rst_n -reset_type asynchronous # 检查复位域交叉 check_rdc -from_domain RST_CPU -to_domain RST_GPU ``` 在上述示例中,首先定义了两个复位域 `RST_CPU` 和 `RST_GPU`,分别使用同步和异步复位信号。然后,使用 `check_rdc` 命令检查从 `RST_CPU` 到 `RST_GPU` 的复位域交叉路径,确保信号在跨域传输时得到正确处理。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值