本节摘要:现代电子产品的图纸不是画出来的,是"仿真出来的"。本节走完两条 EDA 生产线:芯片全流程(从硬件描述代码到版图交付)与板级流程(原理图到 PCB 制造文件),并讲仿真验证的三层体系(功能、时序、物理)。配一段可直接运行的 Verilog 仿真会话。
在第四章 4.3 的 FPGA 世界里,改一行逻辑、重综合、重烧录,半小时见结果。在 ASIC 世界里,同样的改动要走完验证、综合、布局布线、时序签核的全套回归,数周到数月,若已流片则要等下一轮掩模,费用以百万计。EDA 工具链存在的全部意义,就是把发现错误的成本从流片后搬到流片前——芯片设计公司花在验证上的工时通常是设计本身的两到三倍,这不是浪费,是买保险。
数字芯片设计的流水线与每步的"验收问题":
| 阶段 | 做什么 | 验收问题 |
|---|---|---|
| 寄存器传输级设计 | 硬件描述语言写行为 | 逻辑功能对不对 |
| 功能仿真 | 跑测试激励比对结果 | 所有场景都覆盖了吗 |
| 综合 | 映射到工艺库标准单元 | 时序面积功耗约束满足吗 |
| 形式验证 | 数学证明综合前后等价 | 综合有没有偷偷改行为 |
| 布局布线 | 安排单元位置与连线 | 线延迟会不会破坏时序 |
| 签核 | 时序、功耗、物理规则终检 | 所有工艺角都过吗 |
| 流片 | 版图交晶圆厂 | —— |
两个容易被外行低估的环节:形式验证不做任何仿真,用数学方法证明两个电路逻辑等价——它抓住了仿真"永远测不完所有输入组合"的死穴;签核要把电路在快慢工艺角、高低电压、冷热温度的组合下全部核查一遍,因为同一张版图流出来的一批芯片,参数天然有统计涨落(第一章 1.3 的掺杂与工艺偏差),设计必须在最坏组合下依然达标。
把 4.3 节同步器的近亲——一个简单计数器——放进仿真环境,看"激励、检查、波形"的标准工作流:
// 设计:带使能与复位的四位计数器 module counter (input clk, rst_n, en, output reg [3:0] cnt); always @(posedge clk or negedge rst_n) if (!rst_n) cnt <= 4'd0; else if (en) cnt <= cnt + 1'b1; endmodule // 验证:产生激励并自动检查(测试平台代码,与设计同语言) module tb; reg clk = 0, rst_n = 0, en = 0; wire [3:0] cnt; counter dut (.clk(clk), .rst_n(rst_n), .en(en), .cnt(cnt)); always #5 clk = ~clk; // 10纳秒周期时钟 initial begin #12 rst_n = 1; en = 1; // 复位释放 开始计数 #40 en = 0; // 中途暂停 #20 $display("暂停时计数值 = %0d(应为 4)", cnt); #10 en = 1; #100 $display("结束计数值 = %0d(应为 15 后回绕)", cnt); $finish; end endmodule // 仿真输出(典型运行结果): // 暂停时计数值 = 4(应为 4) // 结束计数值 = 3(应为 15 后回绕:15-0-12=3,回绕继续计数)
注意测试平台如何"既当裁判又当发令员":产生时钟与复位序列、在关键时刻检查输出并打印对照信息。真实项目的测试平台比设计本身大得多,还要加代码覆盖率统计(哪些分支没被测到)与断言(在波形里埋"若条件违反而立刻报错"的哨兵)——4.2 节"验证投入与返工代价成正比"的原则在芯片界加倍成立。
板级设计的流水线:原理图(电气连接的逻辑表述)→ 网表(元件与连接的清单)→ 布局(元件摆位)→ 布线(铜箔走线)→ 设计规则检查 → 输出制造文件。它与芯片流程结构同构、尺度悬殊(微米对毫米),但多出一个芯片流程没有的大变量:真实世界。板子要接电源、装外壳、过认证,所以布局阶段的功夫一半在电气、一半在"机械与工艺":接插件位置配合外壳开孔、去耦电容贴着芯片脚(2.1 节)、射频走线控阻抗(6.1 节)、散热区对应风道。信号完整性仿真则在布线后核对:高速线的反射、串扰、等长是否超标——本质是把 6.1 的传输线理论对整板走线普查一遍。

数字流程的"对错"可以二值判定,模拟射频则要在连续区间上逼近真实:SPICE 类电路仿真解基尔霍夫方程组(2.2 节的偏置、增益、失真由此预测);电磁仿真(第一章 1.2 的有限元、时域有限差分)预测天线与走线的场行为(6.2 节闭环的基础);系统级仿真把调制、信道、解码链整体跑通算误码率(5.1 与 5.3 的实验代码就是它的袖珍版)。三层的分工口诀:电路仿真问"这条支路",电磁仿真问"这块结构",系统仿真问"整条链路"——三层结果互相校核,单层结果永远存疑。
⚠️ 常见坑:迷信仿真结果的小数点。仿真的精度以模型精度为上限:器件模型没带寄生、温度模型没标定、激励与真实负载不符,仿真就是精确地计算一个错误的世界。老工程师的习惯是先让仿真复现一个已知实测结果,校准过信任度,再让它预测未知。
问:仿真通过、上板却出问题,最常见的三个原因?答:一是模型缺项——电源实际纹波、接插件寄生没进仿真;二是激励不真——测试用理想时钟,实物时钟抖动大;三是环境没模拟——温度、负载电容与线缆差异。三者共同点都是"仿真世界与真实世界的接口失真",所以成熟团队会把首板实测数据回灌进仿真模型,闭环校准。
问:原理图和网表都自动检查了,为什么还要人工评审?答:自动工具只能查"违反规则",查不出"漏掉需求":一个没接的上拉、一个忘配的默认电平、一个面板灯的含义写反——这些逻辑层疏漏机器无能为力。设计评审的真正价值是用第二双眼睛补"规则之外的常识",这也是新手最快的学习途径。
图纸与版图已就绪,但它们还不是商品。下一节走完从设计到货架的后半程:制造、测量、认证与项目管理。