第 5 章 · 现场重建:门级与原语建模 章节摘要:本章离开行为描述,下沉到电路现场:内置门原语让你按接线图画电路,用户定义原语让你造自己的真值表单元,三态门与多驱动总线还原真实的物理连接。门级视角是看懂综合网表、排查物理级问题的基本功。 一条主线 主线是「把电路按物理长相摆出来」。前四章的 RTL 描述回答「电路做什么」,本章的三种设施回答「电路长什么样」:内置门原语是与非或异或这些基本单元的直接实例化,一根根接线肉眼可见;用户定义原语(UDP)允许你用一张真值表定义自己的基本单元,编译进仿真器内核;三态门与多驱动网则处理真实系统里「多个人抢一根线」的场景——总线。 这条主线的价值不在「用它设计」——今天的 RTL 设计极少手写门级,综合器替你做了——而在「用它看懂」。
章节摘要:本章离开行为描述,下沉到电路现场:内置门原语让你按接线图画电路,用户定义原语让你造自己的真值表单元,三态门与多驱动总线还原真实的物理连接。门级视角是看懂综合网表、排查物理级问题的基本功。
主线是「把电路按物理长相摆出来」。前四章的 RTL 描述回答「电路做什么」,本章的三种设施回答「电路长什么样」:内置门原语是与非或异或这些基本单元的直接实例化,一根根接线肉眼可见;用户定义原语(UDP)允许你用一张真值表定义自己的基本单元,编译进仿真器内核;三态门与多驱动网则处理真实系统里「多个人抢一根线」的场景——总线。
这条主线的价值不在「用它设计」——今天的 RTL 设计极少手写门级,综合器替你做了——而在「用它看懂」。综合后的网表是门级的,静态时序报告是门级的,-layout 后的物理验证还是门级的。读不懂门级,就永远隔着一层毛玻璃做设计。
第一站 5.1「内置门原语」:and、or、not、xor 全家福,多输入门的取值规则、实例化语法、延迟挂载。用一个门级全加器对账 RTL 版本,建立「同一电路、两种描述」的双语能力。
第二站 5.2「用户定义原语」:用真值表定义组合 UDP 与时序 UDP,了解它相对模块建模的性能优势与能力边界——单输出、能力有限,但在特定场景是利器。
第三站 5.3「三态门与多驱动总线」:bufif 家族、强度裁决、双向端口的建模方法。这是第 2 章多驱动语义的落地现场,也是与外部芯片接口(存储器总线、双口 RAM)的必备建模技能。
本章的门级设施容易让人产生「回去手画电路」的冲动,这里把边界划清楚。门级建模的正当用途有三种:读懂综合网表(最常见)、搭建精确的单元仿真模型、排查时序与毛刺类的物理问题。它不正当的用途也有一种:当设计手段。RTL 到门级的翻译由综合器完成且做得更好——手写门级既慢又锁死了优化空间,工艺一换全部重写。
与门级视角配套的能力是「读综合报告」。面积报告按单元类型统计数量,时序报告按路径列出延迟构成,两者都是网表的摘要形态。本章建立的门级直觉,正是读懂这些报告的基础:看到报告里出现锁存器单元,你要能立刻想到组合块分支不全;看到某条路径延迟异常长,你要能沿着网表找到对应的逻辑结构。
本章的拐点是「网表阅读能力」。综合器输出的门级网表,本质上就是一大份结构化 Verilog:实例化库单元、接线、挂延迟。能读懂它的工程师,能从网表反推综合器对自己代码的理解——发现意外的锁存器、诡异的寄存器复制、被优化的冗余逻辑,都在网表里现形。
另一个结论关于 UDP 的定位:它是「语言自留地」里的性能工具。真值表在仿真器内核里以查表方式执行,比模块级建模快;但它单输出、无多驱动、表达能力受限,定位是建模特殊单元(特别是工艺库单元与自定义锁存器),不是通用设计设施。知道它在、什么时候找它,就够了。
现场重建完基本单元,下一章回到工程里最常见的「惯犯」:状态机、生成语句与跨时钟域。它们是 RTL 层最考验设计功力的三件事,也是代码评审里被盘问得最狠的段落——第 5 章给你的门级直觉,正好用来预判这些结构综合后长什么样。