本节摘要:逻辑综合把 RTL、工艺库与 SDC 变成门级网表。它不是逐行翻译,而是技术映射、逻辑优化与重定时的协同重构。约束写错等于考卷题目错了。本节按能跑通的约束顺序写:时钟、IO 延迟、例外、面积功耗,并说明物理感知综合为何要提前看线长。
阅读完本节,你应当能够:
原文把 RTL 比作诗,综合比作译成施工图。输入是源码、库、SDC、面积功耗目标。输出是满足硬约束、逼近软目标的网表。硬约束是时序必须过、不要推断锁存、不要组合环;软目标是再小一点、再省一点。
三阶段不必记成口号,但要知道各自在改什么。技术映射:布尔操作覆盖成真实单元,可能是 AND+OR,也可能是 AOI21。逻辑优化:公共子式消除、无关项、扇出插缓冲、识别不该存在的锁存。重定时:不改功能,只把寄存器隔着组合逻辑挪位置,把关键路径上的云切开。Leiserson 与 Saxe 的重定时理论把这事写成图上的整数位移:每条边的寄存器数合法,最大组合权重尽量小。工业工具用最长最短路径迭代近似,不是手算 ILP。
物理感知综合出现,是因为互连已经经常比门还慢。工具用粗略 floorplan 估计线长,对长线更狠地拆逻辑、插缓冲。你若在综合阶段还没有任何面积与引脚位置,它只能按理想线长做梦,梦在布局后破裂。
最小集合:
假路径不是“这条我看不懂就关掉”。它是声明:这条路径的功能不依赖建立保持意义上的同步采样。CDC 同步器输入常这样标,但同步器内部两级不标。多周期是:数据允许 N 个周期到达,使能每 N 拍才开。最大延迟有时用于 datapath_only,避开时钟路径干扰。例外每多一条,签核信任就少一分,要有主人。
时钟不确定性、抖动、源延迟,是把晶振、PLL、板级走线的预算提前扣掉。扣少了,硅上沿会从你 STA 的甜区溜走;扣多了,前端会为并不存在的周期拼命切流水。和封装、板级同事要对一次数。
| 约束 | 回答的问题 | 写错的后果 |
|---|---|---|
| 时钟周期 | 每拍有多少时间 | 虚高则硅上建立失败 |
| 输入延迟 | 外部吃掉多少窗口 | 芯片口时序与板级对不上 |
| 输出延迟 | 外部还要多少窗口 | 驱动不足或过度设计 |
| 假路径 | 谁不该被同步审判 | 漏标则假违例,错标则漏风险 |
| 多周期 | 谁被允许走多拍 | 使能没对齐会功能错 |
| 时钟组 | 哪些时钟异步 | 跨域被当成同步乱优化 |
⚠️ 常见坑:用
set_ideal_network把整棵时钟树当理想,综合当然轻松,CTS 之后延迟全回来,前后端数字对不上。
💡 关键直觉:SDC 是考卷。综合器很勤奋,你把周期写成一半,它会用面积和功耗换那一半。

看最差负裕量和工作频率,也看违例路径是不是同一条算术云。一串都是同一个乘法器,回第1章切拍。若路径在模块边界乱跳,检查层次和 don't_touch。面积暴涨常来自:循环展开、未约束的生成语句、综合为了时序复制了巨大逻辑。
功耗方面,综合要能识别时钟门控使能。if (en) q <= d; 是友好的;把使能写进复杂组合再去与时钟,不友好。多阈值插入通常在综合或物理阶段自动做,你要给的是漏电预算,而不是手工指定每一门的阈值。
形式等价是网表的身份证:RTL 与网表功能一致,才允许把扫描和物理优化继续做下去。重定时、时钟门控、扫描替换都会改结构,等价检查的约束要同步声明那些改动是预期的。省掉等价,等于允许综合器“优化”出另一种芯片。
近阈值或极低电压设计会让综合约束从单一最大延迟变成多电压分析模式与时序降额的组合。这不是默认开关,要与库的电压视图匹配。电压视图对不上,延迟表是错的,后面全错。
至少先在一个典型或慢角把结构收敛,再在签核集合上复查。综合阶段用全套 MCMM 会极慢,但完全单角又会在布局后发现另一角保持炸裂。折中是:建立看慢角低压高温,保持看快角高压低温,综合就带着这两个。
ECO 可以改,但要有脚本和等价。手在网表里加一根线,扫描链和形式检查都会迷路。优先改 RTL 或约束,网表级只处理金属已冻后的小修补。
时钟定义 → IO延迟 → 例外清单 → 综合 → 读WNS/面积 → 回RTL或收紧例外
第一,时钟定义和 RTL 端口名漂移。重命名时钟后脚本仍 create_clock 旧名,工具造一个虚时钟,所有路径变成未约束或双重约束。综合日志里搜 created clock 列表,必须和接口表逐字相同。
第二,输入输出延迟的参考沿。用上升沿当参考却把板级延迟按下降沿理解,窗口会错半拍。和板级同事对的是“相对哪一个沿、数据在沿前多少时间稳定”,不是一个孤立的纳秒数。
第三,don't_touch 范围过大。为了保护同步器把整模块钉死,优化器无法重定时,面积和时序一起差。只钉同步器对和异步口,其余放开。扫描插入后的 don't_touch 另写一份,避免功能优化把扫描连线优化断。
物理感知需要粗 floorplan:至少给宏占位和 IO 边。完全没有面积数字时,综合按零线长做梦,布局后 WNS 断崖很常见。哪怕是矩形加两块 SRAM 的草图,也比没有强。草图来自第1章存储器意向和第3章湖泊比喻,前后要同一份。
未约束的 generate 循环、为时序复制的巨大逻辑、被当成组合的巨大复位树,都会让面积跳变。先在报告里找复制了谁。复制若来自高扇出复位,应做复位树专用缓冲,而不是让综合把复位当数据复制。复制若来自未共享的互斥乘法器,回到第1章用属性证明互斥再共享。
综合日志里的“未约束路径”列表必须清零或解释。未约束路径在 STA 里可能被当无限,也可能被当零,两种都会害人。IO 未约束等于把芯片口时序交给运气。
物理感知的草图要与第3章湖泊位置一致。综合按东边放宏、布局按西边放宏,线长估计全废。前后端共用一份占位图,哪怕只是矩形加名字。
日志里的 unconstrained 必须解释或补约束。IO 未约束等于把封装时序交给运气。复位树高扇出应走专用缓冲,而不是数据路径式复制。前后端共用宏占位草图,物理感知才不是做梦。面积跳变先查复制了谁,再决定回 RTL 还是改约束。
约束顺序写进脚本注释:时钟、IO、组、例外,不许颠倒着“先把违例清掉再补时钟”。理想网络把整棵时钟当零延迟,是自我欺骗。物理感知要有宏草图。未约束路径清零。形式等价声明门控、重定时、扫描为预期结构差。综合角至少带建立慢角和保持快角。网表级手改必须脚本化并可等价。把综合当成考试:考卷是 SDC,答案是网表,阅卷是等价与时序。改答案不改考卷,下一轮还会同一道题不及格。面积暴涨先查复制,复位树走专用缓冲。
脚本 create_clock 仍写旧端口名,工具造虚时钟;同时有人为了“先看看结构”把时钟 set_ideal_network。综合 WNS 漂亮,CTS 后全面变脸,前后端互相指责。清掉虚时钟并对齐接口表,去掉理想网并预留偏斜,数字才开始可对话。同一项目面积暴涨来自复位树被当数据复制。专用复位缓冲后面积回落。考卷错了,答案再工整也是错题满分。把日志里 unconstrained 清零,IO 才进入封装谈判,而不是进入运气。
虚时钟列表非空不许。unconstrained 非空不许。推断锁存非空不许。等价未声明门控扫描不许。库哈希与矩阵不一致不许。五不许保证考卷与身份证同时在。ideal 网未删除不许。物理草图与湖泊图不是同一份不许。面积跳变未查复制不许。手改无脚本不许。综合角缺保持快角不许。把网表当答案之前,先确认考卷发给了正确的学生。
综合肌肉是清零:虚时钟清零,未约束清零,锁存清零,等价声明齐全,哈希一致。五清零才许交网表。ideal 网删除。草图与湖泊同一份。跳变面积先查复位复制。手改必须脚本。角带快保持。考卷发给错误学生,答案再工整也是错题。重定时挪逗号,周期差一截仍回切拍。把综合当考试,阅卷是等价加时序,不是看日志最后一行有没有完成。
把五清零当作交网表门票。虚时钟、未约束、锁存、等价声明、哈希,五票齐了才许进坐标。ideal 网和分叉草图会让前后端数字无法对话。考试先发对考卷。
多周期路径必须写清从哪一级寄存到哪一级、允许几拍、使能是否同步。它和假路径不是近义词:多周期仍检查建立保持,只是周期倍数变了;假路径等于从地图上撕掉那条河。使能稀疏的计数器进位适合多周期;异步口的同步器输入才考虑假路径。写错一类,网表优化会朝错误的河挖。
下一节给网表长出测试神经:故障模型、扫描链、ATPG 与 BIST,否则硅上坏了一个触发器你看不见。