跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

Formality 原语(primitive)概念详解

Formality 工具在等价性检查中引入原语概念,将 RTL 代码与门级网表统一映射为内部原语进行比较。参考设计经综合后形成标准单元,实现设计包含工艺库单元。Formality 通过标准单元库映射关系,将不同层级单元还原为内部原语(如 dff.00),确保比较对象一致,从而标准化验证流程。

链路追踪发布于 2026/4/10更新于 2026/9/1268 浏览
Formality 原语(primitive)概念详解

原语(primitive)的概念

原语一般指的是语言内置的基本构件,它们代表了基本的逻辑门和构件,通常用于建模电路的基本功能。例如 Verilog 中的门级建模会使用 and、or 等关键词表示单元门。Formality 也存在原语的概念,这一般出现在对门级网表进行建模时。

假设以例 1 所示的 RTL 代码作为参考设计(可以看出添加了// synopsys sync_set_reset 综合指令让 Design Compiler 将其实现为带同步复位端的 D 触发器),例 2 所示的综合后网表作为实现设计,其中 data_out_reg 原语是一个带同步复位端的 D 触发器 (FDS2)。

// 例 1
module ref( input clk, input reset, input data_in, output reg data_out ); 
// synopsys sync_set_reset "reset"
always @(posedge clk) begin 
    if (reset) begin 
        data_out <= 1'b0; 
    end else begin 
        data_out <= data_in; 
    end 
end
endmodule
// 例 2
///////////////////////////////////////////////////////////
// Created by: Synopsys DC Expert(TM) in wire load mode
// Version : O-2018.06-SP1
// Date : Fri Jun 27 15:52:09 2025
///////////////////////////////////////////////////////////
module ref ( clk, reset, data_in, data_out ); 
input clk, reset, data_in; 
output data_out; 
wire n1; 
FDS2 data_out_reg ( .CR(data_in), .D(n1), .CP(clk), .Q(data_out) ); 
IV U4 ( .A(reset), .Z(n1) ); 
endmodule 

在 Formality 中完成了参考设计、实现设计和库文件的读取后,参考设计的结构如图 1 所示(注意勾选 Primitive),原理图如图 2 所示。

文章配图

图 1 参考设计的结构

文章配图

图 2 参考设计的原理图

可以看出,就像 Design Compiler 读取 RTL 代码后会将其转化为 GTECH 网表那样(其实 GTECH 也可以被认为是一种 primitive),Formality 读取 RTL 代码后直接将其用内部原语实现了,其中 data_out_reg 原语是一个有同步使能 SL,同步数据输入 SD 和时钟 CLK 的 D 触发器。

实现设计的结构如图 3 所示(注意勾选 Primitive 和 Tech Cells),原理图如图 4 所示。

文章配图

图 3 实现设计的结构

文章配图

图 4 实现设计的原理图

从图 3 所示的结构,我们可以看到来自标准单元库的 data_out_reg 单元(注意,这与参考设计中的 data_out_reg 原语不是一个概念)和 U4 单元,但是可以看出它们是可以再分的,U4 单元由 cell0 原语组成,data_out_reg 单元则由包括 dff.00 在内的四个原语组成。

data_out_reg 单元的内部结构如图 5 所示。

文章配图

图 5 data_out_reg 单元的内部结构

dff.00 原语就像参考设计中的 data_out_reg 原语那样是一个有同步使能 SL,同步数据输入 SD 和时钟 CLK 的 D 触发器,但此时搭配 cell2 原语实现了一个带同步复位端的 D 触发器。

总结一下就是,为了让等价性检查更标准化,Formality 将直接用内部原语实现 RTL 代码,而用功能等效的方式用内部原语实现门级网表中的各个标准单元,并最终对内部原语进行比较。在工艺库列表中,可以查看各个标准单元是如何映射到内部原语的,如图 6 所示。

文章配图

图 6 查看标准单元库中每个标准单元原语映射方式

这也解释了为什么在进行比较点验证时,会将参考设计中的 data_out_reg 原语和实现设计中的 data_out_reg/dff.00 原语进行比较了,此时它们才应该是比较是否等价的对象,如图 7 所示。

文章配图

图 7 比较点的验证

更多推荐文章

查看全部
  • C++ 继承中同名成员的隐藏与重载规则解析
  • C++ 类和对象:构造函数细节、静态成员、友元函数及编译器优化
  • Java 读取 XML 文件:基于 JDOM 的简单实现
  • 仿生新势力:Openclaw 开源仿生爪如何革新机器人抓取
  • Java 核心面试知识点汇总
  • AG-UI:构建 AI 前端交互的统一协议
  • Whisper OpenAI 开源语音识别工具安装与使用指南
  • C++ 智能指针:使用场景、实现原理与内存泄漏防治
  • MySQL 基础(3):数据库与表操作
  • Linux 进程 fork 写时拷贝机制与常见退出方式
  • FPGA 在大模型推理中的应用
  • 【论文阅读】Vision-skeleton dual-modality framework for generalizable assessment of Parkinson’s disease ga
  • Java 网络编程与网络通信基础
  • Copilot 四大模式详解:Ask、Edit、Agent 与 Plan 的核心差异
  • SkyWalking - .NET / C++ / Lua 探针现状与社区支持
  • BILIVE 部署与运行常见问题排查指南
  • MySQL 复制表:结构、数据及索引的完整复制
  • Python 基础语法入门(一)
  • Java 泛型深度解析:机制、边界与实战
  • Linux 进程池原理与实现:从 fork 到任务复用

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online