본문으로 건너뛰기Skip to content 1:1 문의 — [email protected]로 이메일 작성 Contact us — email [email protected]

PD工程师为什么必须读懂RTL:后端的痛,大多从RTL开始

30秒摘要 * 物理设计的痛苦,大多从RTL开始。布线做得再好,也救不了坏掉的微架构。 * 逻辑综合与P&R工具是优化器,不是魔法师。巨大的多路选择器、过深的组合逻辑链、错误的时钟门控,是工具修不好的结构性问题。 * PD工程师不需要会「设计」RTL,但必须读得懂、闻得出味道、能跟前端工程师据理力争。 * 最低要求:读懂always_ff/always_comb、blocking vs non-blocking、case/generate、辨识推断出的锁存器、对扇出与多路选择器深度的直觉。 * 晚期RTL变更的成本,随着阶段往后呈指数级飙升。在掩模组动辄数百万到数千万美元的时代,「因为不懂RTL」造成的ECO,全是罪过。 * Chase的结论:从前端到后端都要摸过。从RTL开始,经过验证、综合/PD、STA/签核。只钻PD,天花板很低。 前言:不懂RTL的后端工程师会遇到什么事 物理设计(PD)工程师之间有个老笑话:「RTL是前端那些人的问题,我们只要拿到网表就好。」相信这句话、只看网表过活的工程师,最后面对的会是:熬夜的拥塞调试、解释不清的时序违例,

PD工程师为什么必须读懂RTL:后端的痛,大多从RTL开始

30秒摘要

  • 物理设计的痛苦,大多从RTL开始。布线做得再好,也救不了坏掉的微架构。
  • 逻辑综合与P&R工具是优化器,不是魔法师。巨大的多路选择器、过深的组合逻辑链、错误的时钟门控,是工具修不好的结构性问题。
  • PD工程师不需要会「设计」RTL,但必须读得懂、闻得出味道、能跟前端工程师据理力争。
  • 最低要求:读懂always_ff/always_comb、blocking vs non-blocking、case/generate、辨识推断出的锁存器、对扇出与多路选择器深度的直觉。
  • 晚期RTL变更的成本,随着阶段往后呈指数级飙升。在掩模组动辄数百万到数千万美元的时代,「因为不懂RTL」造成的ECO,全是罪过。
  • Chase的结论:从前端到后端都要摸过。从RTL开始,经过验证、综合/PD、STA/签核。只钻PD,天花板很低。
「READ THE RTL」— 纠缠的布线(糟糕的RTL)与整齐有序的布线(易读的RTL)对比

前言:不懂RTL的后端工程师会遇到什么事

物理设计(PD)工程师之间有个老笑话:「RTL是前端那些人的问题,我们只要拿到网表就好。」相信这句话、只看网表过活的工程师,最后面对的会是:熬夜的拥塞调试、解释不清的时序违例,以及流片前一周飞来的RTL ECO。

我现在在Synopsys担任PrimeTime(STA/签核工具)的Product Engineer,坐在流程的最末端——也就是芯片成形前一刻的时序。而在SiFive Korea(现SEMIFIVE),我以RTL-to-GDS全权负责的方式,做过Samsung 5nm到14nm共5次以上的流片。以走过流程两端的立场,我可以断言:读不懂RTL的PD工程师,就像没带地图开车。目的地(网表)看得见,但不知道路为什么塞、该从哪里绕。

这篇文章不是说教。先给你看4个真实发生过的战争故事,再整理PD工程师真正需要的最低限度RTL知识。不是叫你当设计师。读得懂、认得出危险模式、能用同一种语言跟前端工程师对话,就够了。


Episode 1. 巨大多路选择器造成的拥塞地狱

有个项目里,一个crossbar吃掉了整个模块的布线。打开RTL一看,是这样的代码。

// Combinational, unregistered crossbar — no pipeline register
assign data_out = (sel == 3'd0) ? data_in0 :
                  (sel == 3'd1) ? data_in1 :
                  (sel == 3'd2) ? data_in2 :
                  (sel == 3'd3) ? data_in3 :
                  (sel == 3'd4) ? data_in4 :
                  (sel == 3'd5) ? data_in5 :
                  (sel == 3'd6) ? data_in6 :
                  (sel == 3'd7) ? data_in7 : 32'd0;

完全合法的RTL,仿真也过了。但逻辑综合把它展开成数千个门,洒满整颗芯片。8组32位元输入全部汇聚到一点——从布局的角度,所有输入汇流排都得拉到同一个点,结果就是布线拥塞热点。业界确实有记载:一个4,000-to-1的多路选择器制造了「routing and timing nightmare」。合法的RTL,制造合法的灾难。

读得懂RTL的PD工程师,不会等到网表阶段,而是在RTL交接审查阶段就抓到它。「这个crossbar为什么是unregistered?加一级流水线,拥塞就能少一半」——这一句话,把三周的P&R叠代缩成三天。

RTL中的巨大多路选择器导致拥塞热点:Verilog里的unregistered crossbar多路选择器,在芯片布局图上制造出红色拥塞热点

Episode 2. 综合修不好的时序——问题在微架构

拿到STA报告的PD工程师日常:slack -320ps的setup违例数百条。塞buffer、放大门、跑retiming都没用。因为问题在结构里。

典型模式是这样:一个时钟周期里塞了128级的组合逻辑。宽多路选择器后面接进位链,再加上高扇出网络。综合优化卡在局部极小值里。Buffer insertion、gate resizing、retiming都没用——数学上,那个时钟里根本塞不下这么多逻辑。

这时候需要的不是工具设定,而是微架构变更:多加一级流水线,或把多路选择器拆开,或把资料路径重画。但PD工程师如果读不懂RTL,连这个判断都做不出来。得跟前端团队说「这是结构问题,请改RTL」,却因为读不懂RTL而拿不出证据。结果就是花几周只调工具选项,最后看着RTL团队加一级流水线、一小时解决。

以做PrimeTime的人补充一句:签核阶段看到最棘手的违例,大多不是「工具再努力一点就解得掉」的问题,而是「RTL阶段就该挡掉」的问题。STA工具只会说出真相,不会改变真相。

时序分析报告:综合救不了的128级深组合逻辑失效时序路径——这是微架构问题,不是工具问题

Episode 3. 晚期RTL变更与ECO地狱的经济学

芯片开发里,修bug的成本越到后面越呈指数级飙升。在RTL阶段改一行、跟P&R做完再用ECO改、跟重做掩模,是不同次元的成本。

看看公开的估计就有概念:90nm时代的掩模组约100万美元,65nm约150万美元,到了5nm以下,一组掩模轻松超过1,000万美元。流片前一周RTL变更进来,选择只有两个:靠金属层ECO硬撑,或吞下全重新流片。两个都贵,两个都让时程爆炸。

这里,PD工程师的RTL阅读能力直接等于钱。做ECO时,必须判断变更后的RTL是不是真的需要那么大的改动。有时前端下来的ECO RTL,功能一样,只是写法变了。读不懂RTL,就会变成「有改就全部重跑」;读得懂,就能判断「功能等效,用spare cell就能吸收」。这一行的判断,决定数百万美元和订单的去留。

Episode 4. 时钟门控动错一根线,生出电源网格恶梦

RTL层级的时钟门控失误,是PD阶段最难找的bug之一。例如手刻的门控时钟:

// DANGEROUS: hand-rolled 时钟门控 — glitch risk
assign gclk = clk & en;

一旦产生毛刺,拿来当时钟的网络上会出现非预期的边缘,下游的触发器跟着误动作。原本指望综合换成集成时钟门控单元,但写法不同,工具可能认不出来。于是PD阶段时钟树综合得乱七八糟,CTS做到崩溃,动态功耗乱跳,IR压降分析冒出莫名其妙的热点。

读得懂RTL的PD工程师,看到时钟结构立刻会问:「这个使能信号是glitch-free的吗?综合有认成ICG吗?时钟门控检查在STA有覆盖到吗?」差别就在于,这个问题是在P&R之前问,还是留到在硅片上调试。


PD工程师真正需要的最低限度RTL

再强调一次:不是叫你会设计。读得懂、感觉得出风险、能对话,就够了。范围如下。

1. 要读得懂的语法(Verilog/SystemVerilog)

  • always_ff/always_comb/assign——循序与组合的区分,就是时序结构的区分。
  • Blocking(=)vs non-blocking(<=)——仿真与综合不一致的经典原因。审查别人RTL时第一个看的东西。
  • if-else/case——优先编码器 vs 平行多路选择器。case里没有default就会推断出锁存器。
  • generate/parameter——参数化的模组实际会展开成几个instance,凭直觉要知道,否则估不出面积/拥塞。
  • interface/modport(SystemVerilog)——现在的RTL动不动就是几百个port的模组用interface包起来。读不懂就追不了阶层。
  • 复位风格——同步 vs 非同步复位、有几个复位域。复位是PD里高扇出网络的元凶。

2. 要认得出的综合不友善模式

  • 巨大的unregistered多路选择器/crossbar(Episode 1)
  • 过深的组合逻辑链——一个周期里逻辑级数几十级以上,就是微架构问题(Episode 2)
  • 手刻时钟门控(clk & en)——ICG认不出来、有毛刺风险(Episode 4)
  • 推断出的锁存器——if没有else、或case没有default就会有锁存器。时序分析的黑暗地带。
  • 高扇出复位/使能——挂在数万个触发器上的全域网络。直接打击CTS和电源。
  • 被推断成触发器的大阵列——该进SRAM的存储器被展开成数千个触发器,面积/拥塞爆炸。要读得懂RTL里的存储器推断。
  • 时钟域跨越——没有同步器就跨过去的信号。STA里被误切成伪路径,硅片上就死给你看。

3. 跟前端对话的方法

读得懂RTL之后,对话就变了。从「时序跑不出来啦」变成「这条路径的多路选择器深度有6级,1GHz塞不下。请加一级流水线或把多路选择器拆开」。前者是抱怨,后者是工程。前端工程师也会对后者有反应——因为讲的是同一种语言。

PD工程师必须读懂的最低限度RTL:always_ff/always_comb、generate模块、时钟门控单元、多路选择器深度、复位扇出检查清单

下一步:在edu.vlsi.kr跟着从前端到后端的路线图走

读RTL不是一个人埋头苦练就能学会的,顺序很重要。VLSI Edu的RTL2GDS路线图是把RTL到GDS整个流程整理成职业生涯路径的起点。特别是想走PD的人,建议照RTL → 验证 → 综合 → PD → STA/签核的顺序走一遍。

完整的职业生涯路径地图可以在44条半导体职业生涯路径总览查看。分为Architecture & RTL、Verification、Implementation & Signoff三大类,每个角色都有阶段性技能与学习资源。(注:目前该页面以越南语呈现,韩文(/ko/roadmaps)与英文(/en/roadmaps)页面截至2026-10-11为404/渲染错误状态。网站上应该补上繁中版RTL→PD职业生涯路径详细页与STA/签核进阶教学页。)


Chase's Take

老实说,我也不是一开始就读得懂RTL。在SiFive Korea负责RTL-to-GDS全流程时,前几个月我也只看网表跑P&R。后来在Samsung 5nm项目因为拥塞赔掉三周,原因跟Episode 1一模一样——unregistered crossbar。当时RTL团队的lead走到我座位旁,摊开代码说:「这个加一级流水线就好。」一句话,三周蒸发了。从那天起,我先读RTL。

现在我在Synopsys做PrimeTime,每天看的都是时序违例报告。有趣的是,签核阶段最难修的违例,根因越是在RTL。工具很诚实,只给你数字。改变数字的是人的设计判断,而判断的材料是RTL。

所以我总是跟后辈说同一句话:「整体都要摸过。」从RTL开始,接着验证,再来综合与PD,然后STA与签核。只钻PD,眼前是轻松——会按工具就好。但天花板很低。真正的问题永远在边界上,要跨越边界,就得懂两边的语言。

在PrimeTime最末端工作的我说「从RTL开始学」,听起来可能有点讽刺。但在流程末端待得越久,看开始看得越清楚。所有痛苦的根都在RTL,那就从那里学起。


FAQ

Q1. PD工程师需要会亲手「设计」RTL吗?

不需要。目标是可读性(readability)。读得懂别人写的RTL、从时序/拥塞/功耗角度找出危险结构、能具体地跟前端工程师说明,就够了。亲手设计模组的能力是加分。

Q2. 学RTL要多久?

到「读得懂」的程度,2~3个月就够。Verilog/SystemVerilog基本语法1个月、综合怎么解读RTL(锁存器推断、多路选择器结构、资源共享)1个月、实际项目RTL审查旁听1个月。拿着这篇文章的检查清单进审查会议,进步最快。

Q3. 综合工具变强了,RTL知识不就不需要了吗?

恰恰相反。工具越强,剩下来的就越是工具修不好的结构性问题。AI工具接走例行优化之后,微架构判断这种人类的工作反而更重要。RTL理解是不会折旧的资产。

Q4. STA/签核工程师也需要RTL知识吗?

更需要。STA是「判定」时序的阶段,必须分辨违例的根因在RTL结构还是工具/约束。能读PrimeTime报告并说出「这不是SDC问题,是流水线问题」的STA工程师最值钱。


本文是基于作者实务经验的职业生涯观点文章。特定项目的数值为说明方便已简化。

Discussion

VLSI KOREA BRIEFING

반도체를 읽는 안목, 메일함으로.

엔지니어의 시각과 산업의 흐름을 함께. 무료로 구독하세요.

이미 구독 중인가요? 로그인