Design Compiler:自适应重定时(Adaptive Retiming)
相关阅读Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482简介重定时是DC Ultra引入的一种时序优化技术可以将时序单元触发器和锁存器穿越组合逻辑前后移动以优化设计的时序和面积为提升电路时序性能提供了一个重要手段。根据使用场景的不同重定时可分为两类自适应重定时(Adaptive Retiming)和流水线重定时(Pipelined-Logic Retiming)本文关注的重点是简单介绍自适应重定时更多关于重定时的实现细节将在流水线重定时一文中涉及因为流水线重定时在2000版本就已推出而自适应重定时直到2007版本才推出它们的底层原理是类似的。使用方法不管是线负载模式还是拓扑模式只需要在使用compile_ultra命令综合时添加-retime选项不能同时指定-top或-only_design_rule选项否则-retime选项被忽略即可自动在优化过程中执行自适应重定时如下所示。dc_shell compile_ultra -retime需要注意的是如果时序单元的dont_touch、size_only或dont_retime属性被设置了则该时序单元不会被重定时包括自适应重定时与流水线重定时其他时序单元也不能跨越它进行移动。在自适应重定时过程中被移动的时序单元将会被重新命名使用前缀R和编号后缀例如R_123因此这些时序单元无法再与原始名使用信号名前缀和reg后缀对应。这通常不会给等价性检查带来问题因为这些重命名都会被记录在SVF文件中有关SVF文件的更详细介绍参考下面的博客。Design Compilerset_svf命令以及SVF文件简介https://blog.csdn.net/weixin_45791458/article/details/144069207?ops_request_misc%257B%2522request%255Fid%2522%253A%2522836664eccdd944f4e1a9cd4d2f2c8123%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_id836664eccdd944f4e1a9cd4d2f2c8123biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-144069207-null-null.nonecaseutm_termsvfspm1018.2226.3001.4450自适应重定时与流水线重定时的区别自适应重定时一般用于整体通用设计而不是那些显式使用流水线的逻辑通过移动时序单元以优化时序组(Path Group)中的关键路径(Worst Negative Slack, WNS)的延迟对于那些显式使用流水线的数据通路仍建议使用流水线重定时。可以同时使用自适应重定时和流水线重定时它们并不冲突。自适应重定时示例在综合前手动确定最佳的时序单元位置并进行RTL编码通常是一项耗时且困难的工作。自适应重定时可以自动调整设计中时序单元的位置以尽可能平衡时序单元间的延迟。当设计中的某些时序路径超过时序目标而其他时序路径又未充分利用时序裕量时这项技术尤为有用。如果设计中所有时序路径都已满足时序目标自适应重定时也可用于减少时序单元数量如可能以优化面积或功耗。在自适应重定时过程中时序单元会穿越组合逻辑向前或向后移动如图1所示。图1 自适应重定时图1的上半部分展示了向后移动时序单元为了保证端到端功能正确增加了一个时序单元看起来就像是时序单元复制但需要注意的是这与为了分摊负载而进行的复制(Register Replication)是不一样的图1的下半部分展示了向前移动时序单元为了保证功能正确减少了一个时序单元看起来就像是时序单元合并但需要注意的是这与为了减少面积而进行的合并(Register Merging)是不一样的但具有类似的功能。复位/置位的重要性上一小节说明了为了保证功能正确性自适应重定时会增加或减少时序单元的数量但是如果时序单元拥有异步复位/置位端还需要更多操作才能保证功能正确性这被称为初始状态等效化(Reset State Justification)。图2 复位值限制以图2为例假设最初的时序单元是一个带异步复位的触发器在图中用红色的0标注再发生了向后重定时后由于需要保证最后一个门的相关输入在复位时为0除了需要增加一个触发器还需要将带异步复位的触发器变更为带异步置位的触发器在图中用红色的1标注。除了图2所示的简单情况自适应重定时还可以处理可能出现的复位/置位冲突情况如图3所示。图3 出现冲突的自适应重定时假设网表1是最初的设计其中有些触发器使用异步复位也有些触发器使用异步置位在图中用0或1标注它们的复位/置位信号是共用的。假设发生了向后重定时就和图2类似触发器R4依旧保持原来的异步复位而触发器R7则从异步复位变成异步置位。为了保证异或门C5的输出在复位/置位时为1触发器R5和R6则存在两种情况一种如网表2所示一种如网表3所示。区别在于网表3可以合并触发器R4和R5并允许进一步向后自适应重定时而网表2则无法合并自然也无法进一步向后重定时。时序例外下的限制如果存在时序例外Design Compiler仅在所有被移动的时序单元具有相同的时序例外设置时才允许它们一起进行重定时移动还需要将compile_retime_exception_registers变量设置为true默认值为false支持的例外类型包括set_max_delay set_min_delay set_multicycle_path set_false_path group_path例如以下命令中的两个触发器具有相同的时序例外。set_max_delay 10 -to [get_pins r0/D r1/D]写成两条命令也可以但需要保证值的设置一致。set_max_delay 10 -to [get_pins r0/D] set_max_delay 10 -to [get_pins r1/D]真实案例下面将以一个真实案例说明自适应重定时的使用方式。下面的RTL代码描述了一个输入端有反相器的带异步复位的D触发器。module inv_push (input a, clk,rst_n, output z); reg result; assign z result; always (posedge clk, negedge rst_n) begin if(!rst_n) result 0; else result !a; end endmodule如果直接使用compile命令进行综合结果如图4所示。图4 不使用自适应重定时的综合结果如果使用下面的SDC命令进行约束则in2reg路径会出现时序违例此时使用compile_ultra -retime命令进行综合的结果如图5所示。create_clock -period 5 [get_ports clk] set_input_delay 4.99999 [get_ports a] -clock [get_clocks clk]图5 使用自适应重定时的综合结果注意到发生了向后自适应重定时触发器被重命名为R_0且变成了异步置位。综合时会提示Information: Retiming is enabled. SVF file must be used for formal verification. (OPT-1210)SVF文件中存在guide_retiming命令用于指导等价性检查。实际上即使不使用-retime选项直接使用compile_ultra命令综合的结果也是类似的如图6所示。图6 不使用自适应重定时的综合结果这是另一种被称为相位反转(Phase Inversion)的优化方式Design Compiler可以将反相器移动并穿过寄存器边界触发器此时没有重命名但也变成了异步置位。综合时会提示Information: Sequential output inversion is enabled. SVF file must be used for formal verification. (OPT-1208)SVF文件中存在guide_inv_push命令用于指导等价性检查。可以使用compile_seqmap_enable_output_inversion变量对于compile命令或者-no_seq_output_inversion选项对于compile_ultra命令禁止相位反转。

相关新闻

智能座舱电磁屏蔽:导电泡棉在车载大屏与域控制器中的应用

智能座舱电磁屏蔽:导电泡棉在车载大屏与域控制器中的应用

智能座舱集成了大屏显示、5G通信、语音交互等大量电子设备,在狭小空间内电磁兼容设计成为保障体验的关键。本文从座舱域控制器、中控大屏、T-Box、车载音响入手,解析导电泡棉在智能座舱中的关键应用。 当你坐进一辆现代智能汽车,映入眼帘的是…

2026/10/27 7:34:43 阅读更多 →
Kafka里实时消费Oracle变更数据,除了Debezium还有什么选择?

Kafka里实时消费Oracle变更数据,除了Debezium还有什么选择?

聊到把Oracle的变更数据实时推到Kafka,Debezium几乎已经成了一个默认选项。 数据库 → CDC → Kafka → 下游,这条链路清晰、组件开源、社区活跃,看上去确实很完美。 但如果你真的在生产环境用这套组合跑过Oracle的增量采集,尤其是…

2026/10/24 16:25:35 阅读更多 →
做一套能带来订单的地板网站建设方案,别花冤枉钱,这套干货帮你理清思路

做一套能带来订单的地板网站建设方案,别花冤枉钱,这套干货帮你理清思路

本文关键词:地板网站建设方案做地板生意的老板们,大家早上好还是中午好,或者晚上好?不管现在是几点,我相信你点开这篇文章,心里大概率正琢磨着一件事:我的官网到底该怎么做?是找个便宜的模板套一下,还是花大价钱找专业团队定制?或者更现实一点,我是直接搞个抖音号,…

2026/10/25 13:27:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →