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

Google AI Studio 全指南:从入门到精通 Gemini 开发

在生成式 AI 的浪潮中,Google 凭借 Gemini 模型系列强势反击。而对于开发者来说,想要体验、调试并集成 Gemini 模型,最佳的入口并不是 Google Cloud Vertex AI(那是企业级的),而是 Google AI Studio。 Google AI Studio 是一个基于 Web 的快速原型设计环境,它允许开发者极速测试 Gemini 模型,并将测试好的 Prompt(提示词)一键转换为代码。本文将带你从零开始,掌握这款强大的工具。 一、 什么是 Google AI Studio? Google AI Studio 是 Google 为开发者提供的免费(或低成本)AI

By Ne0inhk
开发效率翻倍!JetBrains IDE 必备 AI 插件 Continue 安装配置指南

开发效率翻倍!JetBrains IDE 必备 AI 插件 Continue 安装配置指南

作为程序员,谁不想在写代码时少敲几行键盘、多省点时间?今天给大家推荐一款 JetBrains 系列 IDE(PyCharm、IntelliJ IDEA 等)的宝藏插件 ——Continue,它能靠 AI 帮你补代码、改逻辑、写文档,看完这篇就能上手用! 一、先搞懂:Continue 到底能帮你做什么? Continue 是专门为 JetBrains IDE 设计的 AI 辅助插件,核心是通过调用本地或云端的 AI 模型,帮开发者解决写代码时的各种 “麻烦事”,具体能实现这 5 个实用功能: * 代码快补 & 续写:比如你写了函数名,按下快捷键,AI 会根据文件上下文自动补全函数体,重复代码不用再手敲; * IDE 内直接问 AI:遇到代码报错、

By Ne0inhk
【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

【保姆级教程】小白也能搞定!手把手教你部署AI小说生成器

目录 一、 磨刀不误砍柴工:环境准备 二、 第一次安装:给代码安个家 第一步:把项目“搬”回家 第二步:造一个专属“房间” 第三步:安装依赖 第四步:点火启动 三、 关机重启后:如何再次开启? 四、 关键一步:配置“大脑”(API接口) 五、开始你的创作 六、写在最后:为什么推荐用蓝耘做“大脑”? 在这个AI辅助创作爆发的时代,拥有一款属于自己的本地AI写作工具,无疑是许多文字工作者的梦想。最近拿到一份AI小说生成器的部署文档,虽然功能强大,但对于非技术出身的朋友来说,那些代码和命令行多少有些“劝退”。 别担心,今天我们就把这份“天书”翻译成“人话”,手把手带你从零开始,搭建属于你的AI创作助手。无论你是第一次安装,还是关机后不知道怎么重启,这篇教程都能帮你搞定。

By Ne0inhk
人工智能:自然语言处理在教育领域的应用与实战

人工智能:自然语言处理在教育领域的应用与实战

人工智能:自然语言处理在教育领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在教育领域的应用场景和重要性 💡 掌握教育领域NLP应用的核心技术(如智能问答、作业批改、个性化学习) 💡 学会使用前沿模型(如BERT、GPT-3)进行教育文本分析 💡 理解教育领域的特殊挑战(如多学科知识、学生认知差异、数据隐私) 💡 通过实战项目,开发一个智能问答系统应用 重点内容 * 教育领域NLP应用的主要场景 * 核心技术(智能问答、作业批改、个性化学习) * 前沿模型(BERT、GPT-3)在教育领域的使用 * 教育领域的特殊挑战 * 实战项目:智能问答系统应用开发 一、教育领域NLP应用的主要场景 1.1 智能问答 1.1.1 智能问答的基本概念 智能问答是通过自然语言与用户进行交互,回答用户问题的程序。在教育领域,智能问答的主要应用场景包括: * 课程问答:回答课程相关的问题(如“什么是机器学习”

By Ne0inhk