4、层次化原理图设计:Sheet Symbol 与 Off-Page 连接器、自上而下与自下而上的设计流程

说实话,刚入行那会儿,我总觉得一张图画到底最痛快。几百个元件、上千条网络,全塞在一张图纸里,看着就很有成就感。直到有一次,一个同事离职,我去接手他那个「一页纸」的项目……好家伙,光是理清电源网络就花了我两天。从那以后,我再也不敢小看层次化设计了。

层次化设计,说白了就是把大电路拆成小模块。每个模块独立画一张图,然后用符号把它们串起来。这样做的好处太多了——团队协作方便、复用性高、查错也快。今天我就跟你聊聊,在 Siemens EDA(以前叫 Mentor Graphics)里怎么做层次化设计。

4.1 什么是 Sheet Symbol?

Sheet Symbol 是层次化设计的核心。你可以把它理解成一个「黑盒子」——盒子里是什么电路,外面的人不用管,只要知道它的接口就行。

举个例子。你设计一个电源板,里面有 3.3V、1.8V、1.2V 三路输出。传统做法是把所有 LDO、电容、电阻全画在一张图上。用层次化设计呢?你只需要画一个叫「Power_Module」的 Sheet Symbol,然后在另一张图纸里把三路电源的详细电路画出来。

关键点:Sheet Symbol 的引脚必须和子图纸的 Off-Page 连接器一一对应。名字要对上,方向要对上,数量也要对上。我见过有人把 VCC 写成了 VDD,结果编译时报错,找了半天才发现是名字拼错了。

4.2 Off-Page 连接器:跨页信号的桥梁

Off-Page 连接器,很多人叫它「跨页连接器」。它的作用很简单——告诉工具:这根线虽然在这页断了,但在另一页还有。

嗯,这里要注意。Off-Page 连接器有两种用法:

  • 同层次跨页:比如一张 CPU 的原理图拆成了 3 页,第 1 页的地址线要连到第 2 页。这时候用 Off-Page 连接器,名字相同就表示电气连接。
  • 跨层次连接:子图纸里的信号要连到父图纸的 Sheet Symbol 引脚。这时候 Off-Page 连接器的名字必须和 Sheet Symbol 的引脚名一致。

我的小技巧:给 Off-Page 连接器命名时,我习惯用「模块名_信号名」的格式。比如「PWR_3V3」、「CPU_ADDR0」。这样一看就知道信号从哪来、到哪去。不然项目大了,满屏都是「NET1」「NET2」,你想想看,那得多崩溃。

4.3 自上而下 vs 自下而上:两种设计思路

这两种方法我都用过,各有各的适用场景。我跟你聊聊我的体会。

4.3.1 自上而下(Top-Down)

先画顶层框图,再细化每个模块。适合新项目、新架构。

具体步骤是这样的:

  1. 新建一张顶层图纸,放上 Sheet Symbol,定义好接口引脚。
  2. 右键 Sheet Symbol,选择「Push Into Sheet」或「New Sheet」。
  3. 工具会自动生成一张子图纸,并且把 Sheet Symbol 的引脚自动变成 Off-Page 连接器。
  4. 在子图纸里画具体电路。

我个人习惯用自上而下。为什么呢?因为先定接口,再画内部,思路特别清晰。就像盖房子,先画好户型图,再考虑水电怎么走。

注意:自上而下设计时,一旦 Sheet Symbol 的引脚变了,子图纸的 Off-Page 连接器不会自动更新。你得手动同步。我曾经吃过这个亏——改了一个引脚名字,忘了改子图纸,结果 PCB 回来发现有个电源没接上……嗯,从那以后我每次改完引脚都会跑一遍 ERC(电气规则检查)。

4.3.2 自下而上(Bottom-Up)

先画好各个子模块,再生成 Sheet Symbol 拼成顶层。适合复用已有模块。

步骤是这样的:

  1. 先画好各个子模块的原理图,放好 Off-Page 连接器。
  2. 在顶层图纸里,选择「Create Sheet Symbol from Sheet」。
  3. 工具会自动读取子图纸的 Off-Page 连接器,生成对应的 Sheet Symbol 引脚。
  4. 把 Sheet Symbol 摆好,连上顶层信号。

自下而上最大的好处是——复用。比如你之前做过一个 USB 转串口模块,电路是现成的。直接拿过来,生成 Sheet Symbol,往新项目里一放,完事。省时省力。

对比项 自上而下 自下而上
适用场景 新项目、新架构 复用模块、团队协作
设计顺序 先顶层,后底层 先底层,后顶层
接口定义 顶层定义,底层跟随 底层定义,顶层跟随
修改影响 改顶层需同步底层 改底层需同步顶层
推荐指数 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐(复用场景)

4.4 实战:用 Sheet Symbol 做一个简单的层次化设计

光说不练假把式。我带你走一遍流程。

场景:设计一个单片机最小系统,包含 MCU 核心板、电源模块、USB 转串口模块。

步骤 1:新建项目,创建顶层图纸「Top.Sch」。

步骤 2:放置三个 Sheet Symbol:MCU_Core、Power_Module、USB_UART。

步骤 3:给每个 Sheet Symbol 定义引脚。比如 Power_Module 有 VIN、3V3、GND 三个引脚。

步骤 4:右键 Power_Module,选择「New Sheet」,工具自动生成子图纸「Power_Module.Sch」,里面已经放好了三个 Off-Page 连接器:VIN、3V3、GND。

步骤 5:在 Power_Module.Sch 里画上 LDO、滤波电容、指示灯等电路。

步骤 6:重复步骤 4-5,完成 MCU_Core 和 USB_UART 的子图纸。

步骤 7:在顶层图纸里,用导线把三个 Sheet Symbol 的引脚连起来。比如 Power_Module 的 3V3 连到 MCU_Core 的 VDD。

步骤 8:运行 ERC,检查有没有悬空引脚、命名冲突等问题。

核心原则:层次化设计的关键是「接口清晰、命名规范、及时同步」。接口乱了,层次化就失去了意义。命名不规范,查错时你会想哭。不同步,编译报错能让你怀疑人生。

4.5 避坑指南

做层次化设计这几年,我踩过不少坑。挑几个典型的跟你说说。

  • 引脚方向搞反了:Sheet Symbol 的引脚有 Input、Output、Bidirectional 之分。我曾经把一个输出引脚设成了 Input,结果 ERC 报错说「驱动冲突」。改回来就好了。
  • Off-Page 连接器名字大小写不一致:Siemens EDA 是区分大小写的。「VCC」和「vcc」是两回事。我建议团队统一规范,比如全部大写。
  • 子图纸路径乱了:如果你复制了一个 Sheet Symbol,它的子图纸路径可能还是指向原来的文件。记得检查属性里的「Sheet Path」。
  • 层次嵌套太深:理论上你可以无限嵌套,但实际项目中超过 3 层就很难维护了。我一般控制在 2-3 层。

我的习惯:每次画完层次化设计,我都会打印一份顶层框图贴在工位上。这样跟同事讨论时,指着框图说「这个模块的电源有问题」,比翻来翻去找图纸高效多了。

好了,关于层次化设计就聊到这儿。下一章我们聊聊怎么用 Siemens EDA 做多页原理图的全局网络管理。到时候见。