仿真验证方法(2)——静态验证

一、静态验证

1.1 概述

        在之前的文章中,我们介绍了动态仿真,但是动态仿真用于百万门以上电路时所需时间极长,而且其功能覆盖率取决于所设计的输入激励向量,很难达到100%,因此静态时序分析和等效性检查这样的静态验证是必须的。静态时序分析比动态仿真快得多,无需输入激励向量,可以穷尽 所有门级电路的时序验证,但无法发现逻辑功能错误,逻辑综合后、布局后和布线后都能做,但后者更为准确而重要。等效性验证用于比较RTL代码与RTL代码之间、RTL代码与网表之间、网表与网表之间的一致性,常用于判断设计递进或修改后(比如加入了扫描链)逻辑是否发生了变化。

1.2 静态时序分析(STA)

        Static Timing Analysis,通过计算电路所有路径上的延迟,判断时序是否满足要求。它的特点是与动态仿真相比,无需激励,可以穷尽所有路径,可识别时序故障类型多,运行速度快,占用内存少,但无法发现逻辑功能上的错误。一般应用于布局布线前(时延参数通过正标得到),布局布线后(时延参数通过反标得到),插入扫描链或时钟树前后等。

        STA可仿真四类时序路径(Timing Path),分别是:(1)引脚到寄存器(从芯片的输入端口到目的寄存器的数据输入端口)(2)寄存器到寄存器(从源寄存器的时钟端口到目的寄存器的数据输入端口)(3)寄存器到引脚(从源寄存器的时钟端口到芯片的输出端口) (4)引脚到引脚(从芯片的输入端口到芯片的输出端口)。

        关于时序路径的详细内容,可以阅读:

FPGA时序分析与约束(5)——时序路径icon-default.png?t=N7T8https://ztzhang.blog.csdn.net/article/details/132641522

1.2.1 最长路径和最短路径

        如果从输入到输出存在多条信号路径,则延迟最长的一条被称为最长路径(Max Path)或者关键路径(Critical Path)或者晚路径,延迟最短的一条被称为最短路径(Min Path)或者早路径。最长路径不一定是途径单元数最多或者互连线最长的路径。

1.2.2 端口检查

        对于静态时序分析来说,最重要的就是检查芯片上所有寄存器的端口,包括输入、输出、置位和复位、其对应检查的内容分别是建立时间、保持时间、恢复时间和移除时间。

  • 建立时间(Setup time):时钟信号变化之前寄存器输入数据保持不变的最短时间。建立时间违例多发生在最慢的PVT条件下,故分析时应使用最坏(WORST)条件下的时序库。因建立时间不够发生的违例,对策是让时钟更晚地到达寄存器(比如增加时钟周期),或者缩短数据路径的延迟
  • 保持时间(Hold time):时钟信号变化之后寄存器输入数据保持不变的最短时间。保持时间违例多发生在最快的PVT条件下,故分析时应使用最好(BEST)条件下的时序库。因保持时间不够而发生的违例,对策是增加数据路径的延迟,或者让时钟更早地到达寄存器(比如缩短时钟周期)
  • 恢复时间(Recovery time)时钟信号变化之前置位或复位信号保持有效的最短时间,应采用最坏情况分析
  • 移除时间(Removal time)时钟信号上升沿与置位或复位信号上升沿之间的时间,应采用最好情况分析
关于这方面的详细内容,可以阅读:
FPGA时序分析与约束(8)——时序引擎icon-default.png?t=N7T8https://ztzhang.blog.csdn.net/article/details/134095643
FPGA时序分析与约束(2)——时序电路时序icon-default.png?t=N7T8https://ztzhang.blog.csdn.net/article/details/132626131

1.2.3 时序违例的可能原因与对策

  • 设计约束不合理 某些设计约束或许根本不能实现,这只能通过更改或修正时序约束文件来解决
  • 线负载模型(WLM)不合理 逻辑综合时使用的WLM产生的网表在物理设计时不可能实现,这需要根据当前的结果去产生新的WLM(CWLM,customized WLM),再次进行逻辑综合(也称物理综合physical synthesis)
  • 布局布线不合理 对于大规模或者复杂的设计,由于初学者经验不足或者有经验者的疏忽而出现时序违例,需要重新对布局布线进行优化

        较小的优化可以不改变网表的逻辑,只是通过改变逻辑单元的尺寸、复制单元或者添加缓冲器来解决,这称为“原地优化(IPO,in-place optimization)”

        反复修改,直至消除全部违例,使时序全部满足要求,称之为时序收敛(Time Closure)。

1.3 形式验证

  • 作用:判断当前设计与参考设计在逻辑功能上是否相同,不能验证时序
  • 常用方法:等效性检查、模型验证和定量证明等,等效性检查最为常用
  • 常用EDA工具:Synopsys的Formality,Cadence的Encounter Conformal Equivalent Checker

1.4 等效性检查 

        常用于比较修改前后的RTL 代码之间, RTL 代码与逻辑综合生成的门级网表之间,加入扫描链前后或者ECO修正前后的门级网表之间,插入时钟树、扫描链、时序优化前后的设计之间在逻辑上的一致性或等效性。 等效性检查 比功能仿真方法的覆盖率高,所需时间短。

二、小结

        考虑到动态仿真用于百万门以上电路时所需时间极长,而且其功能覆盖率取决于所设计的输入激励向量,很难达到100%,因此静态时序分析和等效性检查这样的静态验证是必须的。本文着重介绍了静态时序分析、形式验证和等效性验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/343665.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI之深入解析布局协议

一、什么是布局协议? 采用布局协议类型的任务,是告诉 SwiftUI 如何放置一组视图,需要多少空间。这类型常常被作为视图容器,虽然布局协议是 2022 年新推出的(至少公开来说),但是我们在第一天使用…

1Panel应用推荐:AList开源文件列表工具

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

逆变器2(原理框图)

总流程 输入(低压直流24Vdc)——升压(DC—DC)(高压直流369Vdc) ——逆变(DC—AC)(交流220V) 升压电路:BOOST电路、LLC电路、推挽电路 逆变器过程…

【C++】:C++中的STL序列式容器vector源码剖析

⛅️一 vector概述 vector的使用语法可以参考文章:​ 总的来说:vector是可变大小数组 特点: 支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 元素保存在连续的内存空间中,因此通过下标取值非常快 在容器中间位置添加…

Linux中PyTorch的安装教程

在安装PyTorch之前,我们需要确保已经安装了Python和pip。可以使用以下命令检查是否已经安装: python --version pip --version如果没有安装,可以使用以下命令安装: sudo apt-get update sudo apt-get install python3 sudo apt-…

如何解决NAND系统性能问题?--NAND分类

一、故事引言 想象一下,你正在管理一座神奇的数据仓库,这个仓库没有沉重的门、旋转的磁盘和机械手臂,而是由一群训练有素的“数据小飞侠”组成。这些小飞侠们居住在一个叫做闪存芯片(NAND Flash,本文主人公&#xff0…

【MFC实践】基于MFC向导C++制作计算器(附文件)

一、写在前面1.1 什么是MFC向导?1.2 使用MFC向导制作计算器1.3安装visual studio 2022和MFC插件 二、设计计算器界面1.1 新创建MFC项目1.2 设计计算器界面1.3 添加相关变量1.4 算法的一些问题及解决方式1.5 计算功能的实现1.6 其它功能的实现1.6.1 DEL功能1.6.2 C置…

Spring Cache 的使用

大家好我是苏麟 , 今天聊聊Spring Cache . Spring Cache Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现&#xff0c…

计算机丢失mfc140.dll怎么办?解决mfc140.dll缺失的3种方法分享

计算机丢失mfc140.dll怎么办?在使用微软办公软件的时候,可能会弹出一个错误提示框说“找不到mfc140.dll,无法继续执行代码”。为了不影响工作效率,我们可能需要亲自动手尝试修复这一问题。以下是一些mfc140.dll缺失的3种方法相关介…

写一个简单的Java的Gui文本输入窗口,JFrame的简单使用

JFrame是指一个计算机语言-java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。 Swing的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器…

用单片机设计PLC电路图

自记: 见另一篇文章,MOS驱动差了一个充电电容,栅极电容充电会有问题; 光耦用的直插,但板子用的贴片,此文档仅供参考 基本列出了PCB板情况,基础元器件,部分连接,原理等…

C++——冒泡排序

作用:最常用的排序算法,对数组内元素进行排序 1,比较相邻的元素,如果第一个比第二个大,就交换他们两个。 2,对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。 3&…