发布时间:2026/9/1 14:42:32
Design Compiler:常量触发器的移除 相关阅读Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482简介其实在下面这篇关于Formality的文章中笔者已经介绍了常量触发器的移除但仅提了一句“当Design Compiler识别到常量触发器后它会将其从设计中移除并直接传播常量逻辑”本文旨在详细讨论Design Compiler对常量触发器的优化方式。Formality时序变换一常量触发器移除https://chenzhang.blog.csdn.net/article/details/145312557首先回顾一下常量触发器的概念设计中的某些触发器可能永远不会改变其状态因为它们的一个或多个输入引脚上有常量值。这些常量值可能是直接出现在输入端也可以是通过优化扇入的逻辑锥而最终导致触发器的常量输入移除这些触发器可以显著改善面积。下面以图1为例介绍常量触发器的概念其中t1_reg是不带复位/置位端的触发器而t2_reg是带异步复位的触发器。图1 综合前设计为了固定输入端口的值为常量可以使用set_logic_one命令注意不可以使用set_case_analysis命令如下所示。dcnxt_shell set_logic_one [get_ports d]默认情况下Design Compiler在综合过程中会将所有常量触发器移除如图2所示因为移除它们对设计的功能没有影响并提示以下信息。Information: The register t1_reg is a constant and will be removed. (OPT-1206)图2 综合后设计对应图1需要注意的是常量传播到触发器t2_reg的数据输入端就停止了这是因为触发器t2_reg拥有异步复位功能其状态可以通过异步复位改变因此没有被认定为是常量触发器。表1列出了所有可以被移除的常量触发器类型假设表中的复位/置位都是高电平有效。表1 常量触发器类型触发器类型数据输入置位复位简单触发器常量1或0无无带置位的触发器常量1无要求无带置位的触发器无要求常量1无带复位的触发器常量0无无要求带复位的触发器无要求无常量1带复位/置位的触发器常量1无要求常量0带复位/置位的触发器常量0常量0无要求优化控制如果用户出于一些设计原因想要保留常量触发器可以通过一些控制变量和命令完成下面将依次介绍首先介绍的是compile_seqmap_propagate_constants变量、compile_seqmap_propagate_high_effort变量和set_compile_directives命令它们很早就存在于Design Compiler中了而set_constant_register_removal命令较新因此最后介绍。compile_seqmap_propagate_constants变量如果把compile_seqmap_propagate_constants变量默认值为true设置为false则综合工具会保留常量触发器并将其认定为是非常量状态图3展示了将compile_seqmap_propagate_constants变量设置为false后的综合结果。从图中可以看出常量触发器t1_reg得以保留。图3 综合后设计对应图1compile_seqmap_propagate_high_effort变量默认情况下Design Compiler会尝试寻找那些无法逃脱其复位状态的触发器并将这些触发器视为常量触发器后移除图4展示了一个例子其中带异步复位的触发器t2_reg一旦进入复位状态即输出0就会因为反馈路径导致数据输入端为0。图4 综合前设计需要注意的是只有开启了常量触发器的识别后通过compile_seqmap_propagate_constants变量或set_constant_register_removal命令compile_seqmap_propagate_high_effort变量默认值为true才能控制是否进行这种优化。set_compile_directives命令set_compile_directives命令提供了-constant_propagation选项如果-constant_propagation选项指定为false则可以阻止常量传播及常量触发器的识别并将其认定为是非常量状态下面展示了该命令的用法。dcnxt_shell set_app_var compile_seqmap_propagate_constants true dcnxt_shell set_compile_directives -constant_propagation false [get_cells t1_reg] dcnxt_shell set_logic_one [get_ports d]图5展示了这种情况下的综合结果。图5 综合后设计对应图1dcnxt_shell set_app_var compile_seqmap_propagate_constants true dcnxt_shell set_app_var compile_seqmap_propagate_high_effort true dcnxt_shell set_compile_directives -constant_propagation false [get_cells t2_reg]图6展示了这种情况下的综合结果。图6 综合后设计对应图4该命令可能会影响触发器扇入的逻辑锥优化图7给出了一个例子。图7 综合前设计dcnxt_shell set_app_var compile_seqmap_propagate_constants true dcnxt_shell set_compile_directives -constant_propagation false [get_cells x1] dcnxt_shell set_logic_zero [get_ports d]图8展示了这种情况下的综合结果。图8 综合后设计对应图7需要注意的是该命令只能用于阻止移除常量触发器而不能用于指定移除常量触发器当compile_seqmap_propagate_constants变量设置为false时即使-constant_propagation选项指定为true也无法移除常量触发器如下所示。dcnxt_shell set_app_var compile_seqmap_propagate_constants false dcnxt_shell set_compile_directives -constant_propagation true [get_cells t1_reg] dcnxt_shell set_logic_one [get_ports d]图9展示了这种情况下的综合结果。图9 综合后设计对应图1set_constant_register_removal命令Design Compiler在2019版本推出了set_constant_register_removal命令该命令可以在指定触发器上设置set_constant_register_removal属性用于控制是否移除常量触发器下面展示了该命令的用法。dcnxt_shell set_constant_register_removal [get_cells t1_reg] true当set_constant_register_removal属性设置为false时其优先级大于compile_seqmap_propagate_constants变量和set_compile_directives命令当set_constant_register_removal属性设置为true时其优先级大于compile_seqmap_propagate_constants变量但小于set_compile_directives命令。下面展示了一些例子。dcnxt_shell set_app_var compile_seqmap_propagate_constants true dcnxt_shell set_compile_directives -constant_propagation true [get_cells t1_reg] dcnxt_shell set_constant_register_removal [get_cells t1_reg] false dcnxt_shell set_logic_one [get_ports d]图10展示了这种情况下的综合结果。图10 综合后设计对应图1dcnxt_shell set_app_var compile_seqmap_propagate_constants false dcnxt_shell set_compile_directives -constant_propagation true [get_cells t1_reg] dcnxt_shell set_constant_register_removal [get_cells t1_reg] true dcnxt_shell set_logic_one [get_ports d]图11展示了这种情况下的综合结果。图11 综合后设计对应图1dcnxt_shell set_app_var compile_seqmap_propagate_constants false dcnxt_shell set_compile_directives -constant_propagation false [get_cells t1_reg] dcnxt_shell set_constant_register_removal [get_cells t1_reg] true dcnxt_shell set_logic_one [get_ports d]图12展示了这种情况下的综合结果。图12 综合后设计对应图1需要注意的是以上所说的常量触发器移除的前提是该单元没有被设置dont_touch、size_only属性。这些属性会影响常量触发器移除但不会影响常量传播。常量时钟默认情况下如果触发器的时钟输入端为常量该触发器不会被认定为是常量触发器但如果将compile_seqmap_propagate_constant_clocks变量默认值为false设置为true则会被认定为是常量触发器前提是通过compile_seqmap_propagate_constants变量或set_constant_register_removal命令开启了常量触发器的识别常量值由Design Compiler决定下面给出了一个例子。图13 综合前设计dcnxt_shell set_app_var compile_seqmap_propagate_constants true dcnxt_shell set_app_var compile_seqmap_propagate_constant_clocks true dcnxt_shell set_logic_one [get_ports clk1]图14 综合后设计对应图13特殊属性compile_seqmap_propagate_constants_size_only变量一般情况下被设置dont_touch、size_only属性的触发器不会被认定为是常量触发器常量也无法穿过这些触发器但如果compile_seqmap_propagate_constants_size_only变量默认值为false设置为true则常量会穿过拥有size_only属性的触发器即使该触发器不会被移除前提是通过compile_seqmap_propagate_constants变量或set_constant_register_removal命令开启了常量触发器的识别下面给出了一个例子。dcnxt_shell set_app_var compile_seqmap_propagate_constants true dcnxt_shell set_app_var compile_seqmap_propagate_constants_size_only true dcnxt_shell set_logic_zero [get_ports d] dcnxt_shell set_size_only [get_cells t1_reg]图15展示了这种情况下的综合结果。图15 综合后设计对应图7边界优化常量是否能跨越层次结构传播与边界优化有关关于更详细信息请参考下面博客中的“对于禁止“跨层次结构常量和等价与反向等价信息传播”的特殊处理”一节。Design Compiler边界优化(Boundary Optimization)https://chenzhang.blog.csdn.net/article/details/145666047写在最后Design Compiler NXT在2022版本推出了report_transformed_registers命令该命令可以报告工具在优化过程中对寄存器包括触发器和锁存器进行的所有变换详细内容可以参考下面的博客。SDC命令详解使用report_transformed_registers命令进行报告https://blog.csdn.net/weixin_45791458/article/details/158101563?sharetypeblogdetailsharerId158101563sharereferPCsharesourceweixin_45791458spm1011.2480.3001.8118

相关新闻

2026/9/1 14:42:32

加载项与桌面端的协同诊断 一份联调日志

chayuan-wps 加载项跟 察元AI智能体 联调诊断。这一篇讲一份完整联调日志。 联调场景 某员工反馈:在 WPS 里问 KB 偶尔报错 检索失败。 排查需要 chayuan-wps(前端) 察元AI智能体(后端)的联合日志。 启用调试模式 chay…

2026/9/1 14:42:32

加载项与 WPS 的稳定性 进程崩溃的相互保护

chayuan-wps 加载项跟 WPS 进程的稳定性相互保护。这一篇讲。 稳定性的几个层次 层一:加载项不让 WPS 崩。即使 chayuan-wps 出 bug 不能让 WPS 主程序挂掉。 层二:WPS 崩了 chayuan-wps 重启时能恢复状态。 层三:察元AI智能体 后端崩了 chay…

2026/9/1 14:52:34

3 步跑通人声分离:RVC WebUI 中 UVR5 的完整实操

3 步跑通人声分离&#xff1a;RVC WebUI 中 UVR5 的完整实操 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-W…

2026/9/1 14:52:34

携程春招技术通用岗笔试复盘:题型解析与备考策略

2023年携程春招技术通用岗第一批笔试&#xff0c;我是在开考前一周才拿到通知的&#xff0c;当时整个人是有点懵的。网上关于携程春招的信息一直比较零散&#xff0c;尤其是"技术通用岗"这个分类&#xff0c;既不像后端开发那样有明确的题库方向&#xff0c;又不像算…

2026/9/1 14:52:34

基于Python Django与Vue的酒店管理系统毕业设计开发指南

简介&#xff1a;本资源是一套完整的本科毕业设计项目&#xff0c;面向计算机相关专业学生及Web开发初学者&#xff0c;聚焦酒店业务数字化管理需求&#xff0c;提供从前端交互到后端逻辑、数据库设计与文档交付的全栈实践方案。压缩包为ZIP格式&#xff0c;共包含源码工程、开…

2026/9/1 14:52:34

Loop Engineering:大模型Agent循环控制的核心方法论

很多人刚开始接触 Agent 开发时&#xff0c;都以为最难的是让大模型“听懂人话”。等真正动手做一个能跑多轮任务的应用&#xff0c;才发现卡住自己的根本不是 Prompt&#xff0c;而是那个看起来非常不起眼的“循环”。同样的一个语义理解任务&#xff0c;单次调用大模型就能完…

2026/9/1 14:52:34

星环科技秋招笔试算法题复盘:高频题型与Python解题思路

星环科技在2024年秋招里的笔试算法题&#xff0c;我在牛客网刷经验帖的时候就已经盯上了。作为一个主攻大数据方向、投了不少基础软件公司的应届生&#xff0c;星环的算法笔试算是秋招路上很有代表性的一场。它的题目难度不低&#xff0c;而且风格很“实用”——和纯互联网大厂…

2026/9/1 14:47:33

AI开发Skill实战:用自然语言一键生成微信小程序完整指南

1. 背景与核心概念 1.1 什么是 Skill&#xff1f;一个全新的 AI 开发范式 在传统的软件开发流程中&#xff0c;从需求分析、原型设计、UI 开发、后端联调、测试到最终部署上线&#xff0c;往往需要多个角色、多轮迭代、多套工具配合才能完成一个最小可用产品。对于微信小程序这…

2026/8/31 1:05:20

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出&#xff0c;第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器&#xff0c;出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台&#xff0c;直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/1 8:27:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流&#xff1a;为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历&#xff1a;明明传感器本身性能很好&#xff0c;信号输出却一塌糊涂——噪声大、漂移明显、重复性差&#xff0c;怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/1 7:04:43

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起&#xff0c;其实就是嵌入式开发里最常遇到的一类需求&#xff1a;用一块不算贵的 MCU&#xff0c;同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控&#xff0c;主频…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…