Formality:原语(primitive)的概念

Formality:原语(primitive)的概念

相关阅读

Formalityhttps://blog.ZEEKLOG.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482


        原语(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代码后直接将其用内部原语实现了,其中date_out_reg原语是一个有同步使能SL,同步数据输入SD和时钟CLK的D触发器。

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

图3 实现设计的结构

 

图4 实现设计的原理图

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

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

图5 date_out_reg单元的内部结构

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

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

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

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

图7 比较点的验证

Read more

idea中如何使用Trae AI插件,并举例说明

idea中如何使用Trae AI插件,并举例说明

Trae AI 是字节跳动推出的 AI 编程助手,在 IntelliJ IDEA 中通过插件形式提供智能代码补全、代码生成、代码解释、单元测试生成等功能,支持 Java、Python、Go、JavaScript 等多种语言。   一、安装与配置 1. 安装插件 在 IDEA 中打开插件市场(File → Settings → Plugins),搜索 “Trae AI” 或 “Trae Code AI”,点击 Install 安装,重启 IDEA 生效。 2. 配置模型 首次使用需配置 AI 模型: * 打开 File → Settings → Tools

让“小爱音箱PRO”智能起来:接入豆包AI

下面提供从 0 到 1 的完整流程,包含豆包 API 申请、MiGPT 部署、配置与使用,确保你能顺利让小爱音箱 Pro 用上豆包的强大能力。 一、准备工作(必做) 二、申请豆包 API 密钥(关键步骤) 豆包 API 需通过火山引擎方舟平台申请,以下是详细步骤: 1. 注册与实名认证 1. 访问火山引擎官网:https://www.volcengine.com/ 2. 注册账号并完成实名认证(个人 / 企业均可) 3. 登录后进入方舟大模型平台 2. 创建 API 密钥与推理接入点 1. 进入控制台 → API 密钥管理 → 点击 "

本地AI自由!OpenClaw + Ollama 全离线部署实战手册 (Windows版)

厌倦了云端AI的Token计费焦虑和隐私泄露风险?想拥有一位完全听命于你的本地AI助手?本文将手把手教你,无需深厚编程基础,只需跟随步骤执行命令,即可在个人电脑上搭建属于你的全功能AI Agent。 核心优势:零费用:无需API Key,彻底告别按量付费。强隐私:数据全程本地处理,断网也能流畅使用。高自由:随心切换Qwen、GLM等顶尖开源模型。 ️ 第一阶段:环境准备(地基搭建) 在开始之前,请以管理员身份打开 PowerShell (按下 Win + X 选择)。这是我们接下来的操作中心。 1. 安装 Node.js (v18+) Node.js 是 OpenClaw 的运行环境,安装它时 npm 会自动就位。 1. 访问 Node.js 官网,下载 LTS (长期支持)

Trae CN、Lingma IDE、Cursor 三种AI开发IDE深度对比

一、概述 这三款AI原生IDE代表了新一代智能开发工具的发展方向,相较于传统IDE(如VS Code、IDEA),它们在代码生成、上下文理解和协同开发等方面有显著突破。以下从技术架构、使用场景和本土化适配等维度进行对比。 二、发展背景 工具开发团队发布时间核心定位Trae CN字节跳动2024年Q1中文优化最好的AI编程助手Lingma IDE阿里云2025年5月企业级AI原生开发环境Cursor美国Anysphere团队2022年深度代码理解的全球化IDE 三、核心技术对比 1. AI引擎架构 2. 技术栈差异 工具编辑器内核AI集成方式数据流向Trae CNVS Code Mod云端轮询可选国内服务器LingmaOpenVSX定制阿里云PAI直连完全国内闭环CursorRust重写核心本地+云混合默认境外服务器 四、性能实测数据 (基于相同硬件:i7-13700H/32GB RAM) 测试项Trae CNLingmaCursor代码生成响应时间2.3s1.8s1.2s10万行项目加载速度9.2s6.8s4.5s中文注释理解准确率92%88%7