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

vs code 中内置的聊天是 GitHub Copilot Chat 吗

vs code 中内置的聊天是 GitHub Copilot Chat 吗

vs code 中内置的聊天是 GitHub Copilot Chat 吗 vs code 中内置的聊天要分情况讨论: 1. VS Code 内置的聊天(“Ask Cody”):不是 GitHub Copilot Chat VS Code 在 2023 年底(1.85 版本)引入了一个内置的聊天侧边栏,它的默认提供者是 VS Code 自己的 AI 助手 “Cody”。 * 这个功能是 VS Code 编辑器的一部分,图标通常是一个对话框气泡 💬。 * 它的目标是提供与编辑器深度集成的通用编程帮助,例如解释代码、生成代码、问答等。 * 它不一定与你的 GitHub Copilot 订阅绑定,即使你没有订阅

Llama.cpp 全实战指南:跨平台部署本地大模型的零门槛方案

【个人主页:玄同765】 大语言模型(LLM)开发工程师|中国传媒大学·数字媒体技术(智能交互与游戏设计) 深耕领域:大语言模型开发 / RAG知识库 / AI Agent落地 / 模型微调 技术栈:Python / LangChain/RAG(Dify+Redis+Milvus)| SQL/NumPy | FastAPI+Docker ️ 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案        「让AI交互更智能,让技术落地更高效」 欢迎技术探讨/项目合作! 关注我,解锁大模型与智能交互的无限可能! 摘要 本文全面解析轻量级大模型推理框架 Llama.cpp,详细讲解其在 Windows(Winget)、Linux、macOS 三大平台的安装步骤,针对新手优化了模型获取、文件整理、可视化部署的全流程,涵盖命令行交互、OpenAI

Matlab Copilot_AI代码生成工具:基于DeepSeek-V3.1的Matlab AI编程实战(附多版本代码,不限于Matlab 2025a)

Matlab Copilot_AI代码生成工具:基于DeepSeek-V3.1的Matlab AI编程实战(附多版本代码,不限于Matlab 2025a)

🔥 为什么需要这款工具? * Matlab 2025a虽支持Copilot,但由于地区和许可证的限制,无法使用; * 在MATLAB和ChatGPT、DeepSeek等AI工具之间来回切换,无法所见即所得。 这款Matlab Copilot_AI工具基于 DeepSeek,直接在Matlab平台运行,无须切换其他软件,支持一键生成、运行、调试、修复、导出全流程,且使用成本低,让编程效率提升,并保持持续更新。 这款工具不限于Matlab 2025a运行Copilot,集成了: 1️⃣ AI生成代码: * 输入需求:在界面输入区输入自然语言指令; * 一键生成:点击“生成”按钮,调用DeepSeek大模型,即可输出含注释说明的完整代码; * 即用即得:生成的代码自动填充到代码区,无需手动调整格式,直接运行! 2️⃣ 报错自动修复: * 错误捕获:运行代码时,工具自动记录报错信息(含文件名、行号、具体错误描述); * 智能修复:点击“修复”

VS Code Copilot 完整使用教程(含图解)

VS Code Copilot 完整使用教程(含图解)

一、GitHub Copilot 概述 GitHub Copilot 是一款集成在 Visual Studio Code 中的 AI 驱动编码助手,它基于公共代码仓库训练而成,能够支持大多数编程语言和框架。通过自然语言提示和现有代码上下文,Copilot 可提供实时代码建议、解释说明和自动化实现,显著提升开发效率。 核心功能亮点 * 智能代码补全:输入时提供单行到整函数级别的实时建议,支持多种编程语言 * 自主编码模式(Agent Mode):根据自然语言指令,自动规划并执行复杂开发任务,跨文件协调修改 * 自然语言交互:通过聊天界面与代码库对话,提问、解释代码或指定修改需求 * 多文件批量修改:单个指令即可应用更改到项目中多个文件,AI 会分析项目结构并进行协调修改 * 模型灵活切换:可根据速度、推理能力或特定任务需求切换不同 AI 模型,支持接入外部模型 二、安装与设置步骤 获取访问权限 不同用户类型需通过以下方式获取 Copilot 访问权限: