
Formality
文章平均质量分 94
Formality利用形式验证技术进行设计间的逻辑等价性检查,比如RTL和RTL之间、RTL和网表之间、网表和网表之间。最初由Synopsys公司开发,是其芯片设计验证工具链的重要组成部分。
日晨难再
一个想设计芯片的人,目前研二在读,持续学习中。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Formality:验证困难(Inconclusive)的三种解决方法
对于综合而言,允许(优化)改变的内容越多,结果质量(QoR)就越好,但这同时也会导致逻辑锥被转化得过于复杂,难以判定等价或不等价(这导致整体验证状态为Inconclusive),虽然对于大多数Design Compiler的默认优化方式,使用SVF文件足以辅助Formality验证,但仍有部分潜在的困难验证问题无法直接解决。原创 2025-07-22 03:58:48 · 805 阅读 · 1 评论 -
Formality:原语(primitive)的概念
原语(primitive)一般指的是语言内置的基本构件,它们代表了基本的逻辑门和构件,通常用于建模电路的基本功能,例如Verilog中的门级建模会使用and、or等关键词表示单元门。Formality也存在原语的概念,这一般出现在对门级网表进行建模时,本文将对此进行详细解释。原创 2025-06-27 16:44:58 · 999 阅读 · 0 评论 -
Formality:Bug记录
本文记录博主在使用Synopsys的形式验证工具Formality中遇到的几个Bug。原创 2025-04-15 23:31:43 · 1109 阅读 · 0 评论 -
Formality:探针(Probe Point)的设置与使用
一般情况下,verify命令会对参考设计和实现设计所有匹配的比较点各自进行验证,但有些时候为了调试,可能需要验证参考设计和实现设计的逻辑锥中两个线网的等价性,这时就有两种选择:第一种方法是在使用set_cutpoint命令设置一对线网为cut-point,实际上这创建了一对新的比较点,并改变了原本逻辑锥的顶点和底点,有时候还需要用户使用set_user_match命令显式匹配这对比较点;原创 2025-02-09 23:05:16 · 1476 阅读 · 0 评论 -
Formality:时序变换(五)(触发器复制)
时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、触发器合并(Register Merging)、触发器复制(Register Replication)、常量触发器移除(Constant Register Removal)、不可读触发器移除(Unread register removal)、流水线重定时(Pipeline Retiming)、自适应重定时(Adaptive Retiming)、相位反转(Phase Inversion)、原创 2025-02-08 21:15:32 · 1372 阅读 · 1 评论 -
Formality:黑盒(black box)
在使用Formality时,黑盒(black box)的概念很重要,指的是一个其功能未知的设计。黑盒通常用于设计中不可综合的组件,包括RAM、ROM、模拟电路和硬核IP等。它也是需要匹配的对象之一,必须确保参考设计和实现设计之间存在一一对应的映射,黑盒输入引脚被视为比较点,而黑盒输出引脚被视为普通匹配点,关于这两者的概念,详见下面这篇博客。原创 2025-01-30 23:23:36 · 2050 阅读 · 0 评论 -
Formality:时序变换(四)(触发器合并)
时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、触发器合并(Register Merging)、触发器复制(Register Replication)、常量触发器移除(Constant Register Removal)、不可读触发器移除(Unread register removal)、流水线重定时(Pipeline Retiming)、自适应重定时(Adaptive Retiming)、相位反转(Phase Inversion)、原创 2025-01-25 21:08:48 · 1352 阅读 · 0 评论 -
Formality:时序变换(三)(相位反转)
时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、寄存器合并(Register Merging)、寄存器复制(Register Replication)、常量寄存器移除(Constant Register Removal)、不可读寄存器移除(Unread register removal)、流水线重定时(Pipeline Retiming)、自适应重定时(Adaptive Retiming)、相位反转(Phase Inversion)、原创 2025-01-25 01:20:17 · 1611 阅读 · 0 评论 -
Formality:时序变换(二)(不可读触发器移除)
时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、触发器合并(Register Merging)、触发器复制(Register Replication)、常量触发器移除(Constant Register Removal)、不可读触发器移除(Unread register removal)、流水线重定时(Pipeline Retiming)、自适应重定时(Adaptive Retiming)、相位反转(Phase Inversion)、原创 2025-01-23 23:02:01 · 1254 阅读 · 0 评论 -
Formality:时序变换(一)(常量触发器移除)
时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、触发器合并(Register Merging)、触发器复制(Register Replication)、常量触发器移除(Constant Register Removal)、不可读触发器移除(Unread register removal)、流水线重定时(Pipeline Retiming)、自适应重定时(Adaptive Retiming)、相位反转(Phase Inversion)、原创 2025-01-23 14:53:50 · 1315 阅读 · 0 评论 -
Formality:不可读(unread)的概念
在Formality中有时会遇到不可读(unread)这个概念,本文就将对此进行描述。不可读是一种状态,触发器、锁存器、输入端口等许多对象都可能位于这种状态,简单来说,不可读就是直接或间接没有驱动任何比较点。原创 2025-01-22 16:16:30 · 1527 阅读 · 2 评论 -
Formality:参考设计/实现设计以及顶层设计
FormalityFormality存在两个重要的概念:参考设计/实现设计和顶层设计,本文就将对此进行详细阐述。参考设计/实现设计是中两个重要的全局概念,在使用verify命令时,默认是对它们两者之中的比较点进行验证;而顶层设计则是属于一个容器的局部概念,每个容器只能拥有一个顶层设计,且确定之后就无法更改。原创 2025-01-17 00:34:35 · 1246 阅读 · 0 评论 -
Formality:比较点的验证状态和整体验证状态
Formality:比较点的验证状态和整体验证状态原创 2025-01-16 00:30:29 · 1777 阅读 · 0 评论 -
Formality:子网表的产生
当加载了svf文件后,Formality会创建子目录formality_svf并在其中保留svf.txt,这是已加载的svf文件解密后的内容,但有时候还会出现另一个子目录(名字为d1之类的),其内部保留了.a结尾的文件,这其实是部分二进制形式的网表。为什么会有这样的行为呢?首先得了解DesignWare库是如何使用的。原创 2025-01-14 01:08:45 · 1029 阅读 · 0 评论 -
Formality:两种等价状态consistency和equality
逻辑锥的等价性检查时,存在两种验证模式:一致(consistency)和等同(equality),要理解这两点,首先得明白综合工具(Design Compiler)是如何处理不定态(x)的信号。原创 2025-01-12 14:52:21 · 1253 阅读 · 1 评论 -
Formality:默认配置文件
当启动Formality时,它会自动执行三个设置文件中的命令,这些文件具有相同的文件名.synopsys_fm.setup.,但位于不同的目录中,它们可以包含初始化变量、命令别名等偏好。原创 2025-01-10 23:29:29 · 594 阅读 · 1 评论 -
Formality:工具生成的文件
Formality在启动和运行时会创建一些目录和文件,本文旨在对它们进行说明。原创 2025-01-10 22:18:00 · 1174 阅读 · 0 评论 -
Formality:参数化设计的命名规则
在Formality中使用set_top命令设置一个容器的顶层设计(elaborate)时,一个参数化的设计(或者说模块)可能因为其参数覆盖而出现不同的结构,此时原来的设计名无法进行区分,该设计将会根据其参数名和参数值进行重命名(注意是设计名而不是实例名)。原创 2025-01-06 22:24:50 · 1576 阅读 · 0 评论 -
Formality:官方Tutorial(三)
本文是对Synopsys Formality User Guide Tutorial中第三个实验的翻译(有删改),Lab文件可以从以下链接获取。原创 2025-01-08 00:04:05 · 966 阅读 · 1 评论 -
Formality:设计库(Design Library)和工艺库(Technology Library)
Formality如果在Formality中按照层次结构划分设计对象,从上到下分别是容器(Container)、库(Library)、设计(Design),本文就将介绍库这一层次。原创 2025-01-05 16:33:45 · 936 阅读 · 1 评论 -
Formality:官方Tutorial(二)
本文是对Synopsys Formality User Guide Tutorial中第二个实验的翻译(有删改),Lab文件可以从以下链接获取。原创 2025-01-08 00:04:52 · 2005 阅读 · 0 评论 -
Formality:官方Tutorial(一)
本文是对Synopsys Formality User Guide Tutorial中第一个实验的翻译(有删改),Lab文件可以从以下链接获取。原创 2025-01-04 00:07:16 · 2658 阅读 · 0 评论 -
Formality:匹配(match)是如何进行的?
匹配指的是Formality工具尝试将参考设计中的每个匹配点与实现设计中的相应匹配点进行配对,这里的匹配点包括比较点(ComparePoints)以及普通的匹配点(Points)。在介绍匹配点前首先需要了解逻辑锥(LogicCones)的概念,逻辑锥是指从特定的设计对象出发,并向后延伸至某些设计对象的组合逻辑结构,之所以被称为锥,是因为其就像椎体一样(一般)拥有一个顶点和多个底点,如图1所示。原创 2024-12-29 23:31:39 · 2078 阅读 · 3 评论 -
Formality:set_svf命令
Formalitysvf文件的全称是Setup Verification for Formality,即Design Compiler提供给Formality的设置验证文件,它的作用是为Formality的指导模式(Guidance)和设置模式(Setup)提供信息,以帮助其更好地理解和处理设计流程中因使用Design Compiler而引起的设计变更的一种机制。svf文件的详细介绍和生成命令在下面的博客中已经讨论,本文主要讨论Formality中的set_svf命令。原创 2024-12-11 23:53:01 · 1778 阅读 · 0 评论 -
Formality:等价性检查的流程与模式(Guide、Setup、Preverify、Match与Verify)
Formality:等价性检查的流程与模式(Guide、Setup、Preverify、Match与Verify)原创 2024-12-02 22:10:35 · 2366 阅读 · 4 评论 -
Formality:设置Automated Setup Mode模式
Formality要使用自动设置模式,在加载/执行svf文件之前,需要将synopsys_auto_setup变量(布尔值)设置为true或者在GUI界面中选择Use Auto Setup,如图1所示。当自动设置模式设置后,一组Formality变量会被设置,一些设置命令会执行,以与Synopsys综合工具例如Design Compiler兼容,从而通过使用svf指导文件提高整体工具的设置性能。原创 2024-12-01 16:31:17 · 1887 阅读 · 0 评论