第一章:ASIC设计流程全景——从规格到流片,理解完整的设计周期与各阶段关键交付物

各位同学,大家好。我是你们这门课的老朋友。

今天咱们聊点实在的。很多刚入行的朋友,甚至干了两三年的工程师,对ASIC设计流程的理解往往是「只见树木,不见森林」。你问他RTL怎么写,他头头是道;你问他流片前要交什么文档,他可能就卡壳了。

我个人习惯,在开始任何项目之前,先画一张全景图。就像打仗前要看地图一样。今天,我就带你走一遍ASIC从无到有的完整生命周期。咱们不搞虚的,每个阶段该干什么、该交什么,我都会结合我踩过的坑,给你讲透。

核心观点:ASIC设计不是写代码,而是管理风险。每个阶段的交付物,本质上都是用来降低下一阶段风险的「保险单」。

1.1 需求与规格定义:一切从这里开始

这是整个流程的起点,也是最容易被轻视的阶段。

说白了,就是回答三个问题:做什么?做给谁?做到什么程度?

我记得有一次,客户说「我要一个视频编解码器」。听起来很简单对吧?结果一细问,分辨率是1080p还是4K?帧率30还是60?支持H.264还是H.265?功耗要求多少?接口是PCIe还是USB?

嗯,一问三不知。

这个阶段的关键交付物是产品需求文档(PRD)架构规格书(Arch Spec)。PRD偏市场,Arch Spec偏技术。我建议,Arch Spec里至少要包含以下内容:

  • 功能列表:支持哪些协议、哪些模式
  • 性能指标:吞吐量、延迟、功耗、面积
  • 接口定义:外部接口协议、管脚分配
  • 工作模式:正常模式、低功耗模式、测试模式
  • 合规要求:需要过哪些认证(如USB-IF、HDMI)

我的经验:规格定义阶段,一定要拉上验证团队一起评审。我曾经吃过亏——架构师拍脑袋定了个功能,结果验证工程师说「这个场景根本没法覆盖」,最后只能改规格,白白浪费了两周。

3.2 架构设计与微架构:把「做什么」变成「怎么做」

规格定好了,接下来就是架构设计。这一步,说白了就是画框框。

架构设计关注的是模块划分数据流。比如,一个SoC芯片,CPU核、GPU核、内存控制器、外设接口,这些模块怎么连接?总线用AXI还是NoC?时钟域怎么划分?

微架构则更细,关注的是每个模块内部怎么实现。比如一个FIFO,深度设多少?读写指针怎么处理?空满标志怎么生成?

这个阶段的关键交付物是架构设计文档微架构设计文档。我强烈建议,架构文档里一定要包含一张系统框图时序图

下面这张图,是我自己总结的ASIC设计流程全景图。你把它存下来,以后做项目时对照着看,心里就有底了。

ASIC设计流程全景图 规格定义 PRD / Arch Spec 架构设计 系统框图 / 微架构 RTL编码 Verilog / VHDL 功能验证 仿真 / UVM 逻辑综合 DC / 门级网表 可测试性设计 扫描链 / MBIST 布局布线 ICC / Innovus 静态时序分析 PrimeTime 物理验证 DRC / LVS / Antenna 流片 (Tapeout) GDSII / 掩模 测试与封装 ATE / 封装 每个阶段都有关键交付物,缺一不可 关键交付物:PRD → Arch Spec → RTL代码 → 验证报告 → 门级网表 → GDSII 每个交付物都是下一阶段的输入,也是项目风险的「减震器」

3.3 RTL编码与功能验证:把设计变成代码

架构定好了,接下来就是写代码。这部分大家相对熟悉,我简单提几个关键点。

RTL编码阶段,关键交付物就是RTL代码设计文档。代码风格要统一,命名要有规范。我个人习惯,模块名用大写开头,信号名用小写,时钟和复位信号加后缀 _clk 和 _rst_n。

// 一个简单的FIFO接口示例
module fifo #(
    parameter DATA_WIDTH = 32,
    parameter DEPTH      = 16
) (
    input  wire                clk,
    input  wire                rst_n,
    input  wire                wr_en,
    input  wire [DATA_WIDTH-1:0] wr_data,
    input  wire                rd_en,
    output wire [DATA_WIDTH-1:0] rd_data,
    output wire                full,
    output wire                empty
);
    // 内部实现...
endmodule

功能验证阶段,关键交付物是验证计划验证报告。验证计划要覆盖所有功能点,包括正常场景、异常场景、边界场景。验证报告要说明覆盖率、发现的bug、修复情况。

注意:千万不要在验证没做完的时候就急着做综合。我曾经有个项目,验证只跑了80%就匆匆进入后端,结果流片回来发现一个边界条件没覆盖到,芯片在特定温度下会死机。那次教训,让我多花了三个月做改版。

3.4 逻辑综合与DFT:从RTL到门级

RTL验证通过后,就要做逻辑综合。综合,说白了就是把RTL代码翻译成门级网表,同时要满足时序、面积、功耗的约束。

这个阶段的关键交付物是门级网表综合报告。综合报告里要关注时序违例、面积利用率、功耗估算。

DFT(可测试性设计)是很多人容易忽略的环节。它的目的是让芯片在制造出来后能被测试。关键交付物是DFT设计文档测试向量

阶段 关键交付物 常见问题
规格定义 PRD、Arch Spec 需求不明确、性能指标缺失
架构设计 系统框图、微架构文档 模块划分不合理、接口定义不清晰
RTL编码 RTL代码、设计文档 代码风格混乱、缺少注释
功能验证 验证计划、验证报告 覆盖率不足、边界场景遗漏
逻辑综合 门级网表、综合报告 时序违例、面积超标
DFT DFT文档、测试向量 扫描链插入失败、测试覆盖率低
布局布线 GDSII、物理验证报告 DRC违例、天线效应
流片 GDSII、掩模数据 数据完整性检查遗漏

3.5 布局布线与时序收敛:把设计变成物理

综合完成后,就要做布局布线。这一步,说白了就是把门级网表变成真正的物理版图。

布局布线阶段,关键交付物是GDSII文件物理验证报告。物理验证包括DRC(设计规则检查)、LVS(版图与原理图一致性检查)、天线效应检查。

时序收敛是后端设计中最头疼的问题。静态时序分析(STA)要检查所有路径是否满足时序约束。关键交付物是STA报告,里面要列出所有违例路径和修复建议。

我的经验:时序收敛没有捷径。我曾经试过用工具自动修复,结果修了100条路径,又新产生了50条。后来我学乖了——先分析关键路径的拓扑结构,再手动优化。有时候,改一行RTL代码比调半天后端参数更有效。

3.6 流片与测试:最后的关卡

所有验证都通过后,就到了流片环节。流片,就是把GDSII文件交给晶圆厂,制作掩模,然后生产芯片。

流片前,一定要做数据完整性检查。我记得有一次,团队急着流片,结果发现GDSII文件里少了一层金属层。还好在最后关头发现了,不然几十万的流片费就打水漂了。

芯片回来后,要做ATE测试功能测试。ATE测试用DFT插入的测试向量,检查芯片有没有制造缺陷。功能测试则验证芯片的功能是否正确。

好了,以上就是ASIC设计流程的全景。从规格到流片,每一步都有它的意义,每一步都有它的交付物。你想想看,如果每个阶段都能把交付物做扎实,流片回来的芯片成功率会高很多。

记住一句话:流片不是终点,而是起点。真正的挑战,在芯片回来之后才刚刚开始。


公众号:蓝海资料掘金营,微信deep3321