芯片研发全流程及固件部门职责详解

从市场需求到量产交付,全面解析芯片研发的完整生命周期,以及固件(Firmware)部门在其中扮演的关键角色


目录

  1. 芯片研发全流程概览
  2. 芯片研发各阶段详解
  3. 固件部门概述
  4. 固件部门在芯片研发全流程中的参与
  5. 固件与其他部门的协作关系
  6. 固件部门的交付物与里程碑
  7. 固件开发在芯片研发中的核心价值
  8. 附录:芯片研发常用术语表

1. 芯片研发全流程概览

一颗芯片从概念到量产,通常需要 18~36 个月,经历以下十大阶段:

市场调研/产品定义
    │
    ▼
芯片架构设计 ◄─────────────────────────┐
    │                                     │
    ▼                                     │
RTL设计(数字前端)                        │
    │                                     │
    ▼                                     │
功能验证(DV)                             │
    │                                     │
    ▼                                     │
逻辑综合 / DFT                           │
    │                                     │
    ▼                                     │
物理设计(后端/版图)                      │
    │                                     │
    ▼                                     │
流片前签核(Sign-off) ─── 发现问题 ──────┘
    │
    ▼
流片(Tape-out)→ 晶圆制造(约3~4个月)
    │
    ▼
晶圆测试(CP Test)
    │
    ▼
封装 + 成品测试(FT Test)
    │
    ▼
样片验证 / Bring-up ◄──── 固件核心参与
    │
    ▼
量产(Mass Production)
    │
    ▼
客户支持与维护

关键数字:一颗 28nm 工艺的 SoC 芯片,研发成本约 500 万~5000 万美元;7nm 以下先进工艺则可达 1~5 亿美元。


2. 芯片研发各阶段详解

2.1 市场需求分析与产品定义(Market Requirement & Product Definition)

时间跨度:2~4 个月

目标:回答"我们要做什么芯片,为什么做,卖给谁"

工作内容 说明
市场调研 分析目标市场的规模、增长率、竞争格局
客户需求收集 走访大客户,收集应用场景和性能需求
竞品分析 对标竞争对手芯片的性能、功耗、成本、功能特性
产品规格书(Product Brief) 初步定义芯片的关键参数(主频、功耗、接口类型、封装形式等)
商业论证(Business Case) 评估研发投入、预期出货量、毛利率、回收期
立项评审 项目正式立项(Kick-off),组建核心团队

输出文档:MRD(市场需求文档)、PRD(产品需求文档)、立项报告

参与部门:产品管理(PM)、市场部、销售部、系统架构师

2.2 芯片架构设计(Architecture Design)

时间跨度:3~6 个月

目标:将市场需求转化为可实现的芯片架构方案

工作内容 说明
系统架构设计 整体方案设计,包括 CPU 选型、总线架构(如 AXI/AHB/APB)、内存子系统、外设接口等
软硬件划分(HW/SW Partition) 决定哪些功能用硬件实现(性能好、功耗低),哪些用软件实现(灵活性高)
性能建模 使用 SystemC 或其他 ESL 工具建立性能模型,评估吞吐量和瓶颈
功耗估算 早期功耗预算,确定各模块功耗分配
IP 选型 确定使用自研 IP 还是第三方授权 IP(如 ARM CPU、DDR 控制器、USB PHY 等)
存储子系统设计 Cache 大小、SRAM 分布、DDR 接口规格、NAND Flash 控制器等

输出文档:架构设计文档、子系统框图、IP 选型列表、功耗预算表

参与部门:架构师团队、系统设计、硬件设计、软件/固件部门(开始介入)

2.3 RTL 设计与逻辑综合(RTL Design & Synthesis)

时间跨度:4~8 个月(SoC 中最耗时、人力最密集的阶段)

目标:用硬件描述语言(HDL)将架构设计转化为可综合的寄存器级电路逻辑

工作内容 说明
模块级 RTL 编码 使用 Verilog / SystemVerilog / VHDL 编写各功能模块的代码
自底向上集成 将各模块逐层集成到顶层,处理跨时钟域(CDC)、复位、电源域等系统问题
代码规范检查 Lint 检查(语法、风格、可综合性)
逻辑综合(Synthesis) 将 RTL 代码映射到目标工艺库的标准单元库,得到门级网表
DFT(可测试性设计) 插入扫描链(Scan Chain)、BIST(内建自测试)、MBIST(Memory BIST)等
形式化验证 使用等价性检查工具确保综合前后逻辑一致

输出文档:RTL 代码、综合后网表、DFT 脚本、时序约束文件(SDC)

参与部门:数字前端设计团队、DFT 团队、验证团队(并行工作)

2.4 功能验证(Functional Verification / DV)

时间跨度:与 RTL 设计并行,4~10 个月

目标:确保 RTL 实现的功能与设计规格完全一致,验证工程师通常与设计工程师的比例达到 2:1 甚至 3:1

工作内容 说明
验证计划制定 根据设计规格制定测试点分解、验证策略
测试平台搭建 使用 UVM(Universal Verification Methodology)搭建 SystemVerilog 验证环境
定向测试 针对特定功能编写定向测试用例
随机约束测试 使用约束随机激励覆盖更广泛的操作空间
覆盖率分析 代码覆盖率(行/分支/条件/翻转)+ 功能覆盖率
门级仿真 综合后门级网表的仿真,考虑时序延迟
固件在环验证(FW-in-the-loop) 将真实固件二进制加载到仿真环境中运行(后文重点讨论)

输出文档:验证计划、测试用例库、功能覆盖率报告、Bug 报告

参与部门:验证团队(主要)、设计团队、固件团队(辅助验证)

2.5 物理设计(Physical Design / Backend)

时间跨度:3~6 个月

目标:将门级网表转化为可制造的版图(GDSII 文件)

工作内容 说明
布局规划(Floorplan) 确定各模块在芯片上摆放的位置、I/O Pad 布局、电源网络规划
单元放置(Placement) 将标准单元、宏单元(SRAM/Analog IP)摆放到规划的位置
时钟树综合(CTS) 构建低 skew 的时钟网络,确保时钟信号同时到达所有时序单元
布线(Routing) 完成所有单元之间的物理连线
时序收敛(Timing Closure) 反复迭代,确保所有路径满足建立时间和保持时间要求
物理验证 DRC(设计规则检查)、LVS(版图与电路一致性检查)、ANT(天线效应检查)
IR Drop / EM 分析 电源网络压降和电迁移分析
最终签核 所有检查通过后,生成 GDSII 交付给晶圆厂

输出文档:GDSII 版图文件、最终时序报告、物理验证报告

参与部门:后端设计团队、CAD 团队

2.6 流片前签核(Pre-Tapeout Sign-off)

时间跨度:1~2 个月

目标:在最终流片前进行全面的最终审查,确保不出现致命的设计错误

工作内容 说明
设计审查轮次 多轮全团队设计审查(Design Review)
功能覆盖率达标确认 确保功能覆盖率满足公司标准(通常 > 95%)
后端签核检查 时序收敛、DRC/LVS 均 clean
功耗分析确认 确保在指定工作模式下功耗低于规格
固件签核检查 固件团队确认仿真环境中的固件功能验证通过
ESD / Latch-up 审查 静电防护和闩锁效应审查
Tape-out 评审会议 各部门负责人签字确认,管理层批准流片

2.7 流片与晶圆制造(Tape-out & Fabrication)

时间跨度:2~4 个月(取决于工艺节点)

工作内容 说明
GDSII 交付 将最终版图数据交付给晶圆代工厂(如 TSMC、SMIC)
光罩制作(Mask Making) 制造掩模版,先进工艺可能需要 60~80 层光罩
晶圆制造 在硅片上通过光刻、刻蚀、沉积等工艺制造晶体管和金属互连
晶圆测试(CP / Probe) 晶圆完成后,用探针卡对每颗 Die 进行基本电性测试,标记良/坏 Die
晶圆减薄与切割 将晶圆减薄到合适厚度,然后切割为单个 Die

2.8 封装与成品测试(Assembly & Final Test)

时间跨度:1~2 个月

工作内容 说明
封装(Assembly) 将良品 Die 封装到芯片外壳中(BGA / QFP / QFN 等)
成品测试(FT) 对封装后的芯片进行全面功能测试、AC/DC 参数测试
SLT(系统级测试) 将芯片装在实际系统板上进行系统级功能测试
可靠性测试 HTOL(高温工作寿命)、TC(温度循环)、HAST(高温高湿加速)等
特性分析(Characterization) 在全温度/电压范围内标定芯片的关键参数

2.9 样片验证与 Bring-up(Sample Validation & Bring-up)

时间跨度:3~12 个月(这是固件部门的核心战场

目标:拿到第一颗封装好的芯片,让它真正"跑起来",验证其在真实系统中的行为

工作内容 说明
硬件验证板准备 设计并生产 EVB(Evaluation Board)或参考设计板
Power-on 初始化 首次上电,检查各电源轨是否正常、时钟是否起振
Boot ROM 验证 运行 Boot ROM 代码,验证 CPU 启动流程
各 IP 模块验证 逐个验证芯片内部各 IP 模块的功能(USB、I2C、SPI、UART、DDR、NAND 等)
性能测试 验证芯片的主频能力、功耗水平是否达到设计目标
兼容性测试 与外接设备(如 DDR 颗粒、NAND Flash、PMIC 等)的兼容性验证
问题定位与 Debug 当芯片不按预期工作时,配合设计团队定位问题是 RTL Bug 还是 Fabrication 问题

2.10 量产与客户支持(Mass Production & Customer Support)

时间跨度:持续(芯片生命周期通常 5~10 年)

工作内容 说明
良率爬坡 与新订单和 Fab 协作,持续提升晶圆良率和封装良率
量产测试优化 优化 FT/SLT 程序,降低测试成本,提高测试覆盖率
客户导入支持 帮助客户完成基于该芯片的产品设计、驱动移植
版本迭代 根据市场反馈和问题,推出芯片升级版本(ECO / 新版本 mask)
EOL 管理 芯片生命周期结束时的停产规划

3. 固件部门概述

3.1 什么是固件(Firmware)

固件(Firmware) 是介于硬件和操作系统/应用程序之间的一层软件,直接运行在芯片内部的 CPU/MCU 上,负责初始化硬件、管理硬件状态、提供硬件抽象接口,以及执行实时的控制逻辑。

┌─────────────────────────────────┐
│    应用层 (Application)          │  ︎ 用户态软件
├─────────────────────────────────┤
│    操作系统 (OS / RTOS)          │  系统软件
├─────────────────────────────────┤
│    固件层 (Firmware) ◄────────── │  芯片内的软件
│  ├─ Boot ROM (不可修改)          │
│  ├─ HAL / Driver                 │
│  ├─ 电源管理 (PMU Firmware)      │
│  └─ 协议栈 (如 UFS/NVMe 协议)    │
├─────────────────────────────────┤
│    硬件层 (Hardware)             │  芯片电路
└─────────────────────────────────┘

3.2 固件部门的职责范围

固件部门(Firmware Team)在芯片公司中的核心职责包括:

职责领域 具体内容
Boot ROM 开发 芯片上电执行的第一段代码,固化在 ROM 中,不可修改
HAL 开发 硬件抽象层(Hardware Abstraction Layer),屏蔽底层寄存器差异
设备驱动开发 各外设 IP 的底层驱动程序(Driver)
固件协议栈 如 UFS 协议栈、NVMe 协议栈、PCIe 协议栈等
电源管理固件 动态电压频率调整(DVFS)、休眠/唤醒状态机
安全固件 Secure Boot、TrustZone、加密引擎驱动
工具链支持 下载工具、调试工具、量产烧录工具
芯片验证支持 在仿真环境、FPGA 原型、样片上运行固件

3.3 固件工程师的典型技能树

┌─────────────────────────────────────┐
│           固件工程师技能树              │
├─────────────────────────────────────┤
│  ① 编程语言:C(核心)、汇编、Python    │
│  ② 体系架构:ARM / RISC-V / x86      │
│  ③ 硬件知识:寄存器、中断、DMA、MMU    │
│  ④ 协议协议:UFS / NVMe / SPI / I2C / │
│              UART / USB / PCIe       │
│  ⑤ 调试工具:JTAG(OpenOCD/J-Link)、  │
│              Trace(ETM)、逻辑分析仪    │
│  ⑥ RTOS:FreeRTOS / ThreadX / μC/OS  │
│  ⑦ 开发流程:Git、CI/CD、自动化测试     │
│  ⑧ 行业规范:JEDEC / PCI-SIG / MIPI   │
└─────────────────────────────────────┘

4. 固件部门在芯片研发全流程中的参与

这是本文的核心部分。固件部门并非只在芯片回来后(Bring-up)才开始工作,而是从架构设计阶段就深度参与,贯穿整个芯片研发周期。

4.1 产品定义阶段(固件的参与)

参与活动 具体工作
可编程性评估 评估哪些功能需要用固件实现,哪些用硬件状态机实现
Boot 方案讨论 确定芯片的启动方式:从哪种介质启动(NAND / SPI NOR / eMMC),是否需要 Secure Boot
调试接口需求 提出固件调试所需的硬件接口需求(JTAG / SWD / UART debug console)
固件存储方案 Firmware 存在什么地方:Boot ROM + SRAM / Mask ROM / OTP / Flash 映射
SRAM 容量需求 评估 Boot ROM 和早期启动阶段的 SRAM 大小需求
产品规格评审 从固件实现角度评审产品规格的可行性和合理性

这个阶段固件团队的产出:FW Requirement Document(固件需求文档)

4.2 架构设计阶段(固件的核心参与)

这是固件团队最有影响力的阶段——此时修改芯片硬件还有余地和成本空间。

参与活动 具体工作
寄存器规划 参与定义各 IP 模块的控制/状态寄存器(CSR) 布局,确保固件能高效访问
中断系统设计 定义中断号分配、中断优先级、中断向量表布局
DMA 方案设计 针对数据密集型操作(如 NAND 数据传输)设计 DMA 通道和描述符格式
存储映射设计 参与决定芯片的地址空间划分:哪些地址映射给 SRAM、哪些给 MMIO 外设、哪些给 DDR
电源状态机设计 参与设计芯片的电源域划分和电源状态转换(Active ↔ Sleep ↔ DeepSleep)
Clock / Reset 架构 定义各模块的时钟门控、复位策略、模块级复位和系统级复位的关系
Boot 流程设计 设计完整的 Boot Flow:Reset Vector → Boot ROM → 加载第二阶段 Bootloader → 跳转到主固件
安全架构设计 Secure Boot 链、OTP fuse 分配、加密引擎的固件接口
软硬件接口文档 编写 HLD(High-Level Design)中的固件部分,详细定义 HW/FW 接口协议

关键原则:固件团队在架构阶段提出的每一个"这里加一个状态寄存器"或"这里加一个中断",都比芯片流片后再改硬件要便宜 100 倍。

案例:以某款嵌入式 SoC 中的 NAND Flash 控制器设计为例——

固件团队在架构评审中发现:
  • 硬件团队最初设计的 ECC 校验结果寄存器只返回"成功/失败"
  • 固件团队提出:需要"错误位置 + 错误比特数"让固件可以执行软纠错
  • 硬件团队修改:在 ECC 模块增加错误位置寄存器
  → 结果:流片后,NAND Flash 的高 bit 错误率场景下,固件可执行软纠错,良率提升 3%

4.3 RTL 设计阶段(固件的参与)

参与活动 具体工作
寄存器视图验证 检查各 IP 模块的寄存器定义是否符合固件预期——地址是否正确、位域是否合理
固件驱动开发 针对各 IP 模块开始编写底层的 HAL(硬件抽象层)代码
Boot ROM 实现 编写 Boot ROM 代码——这是流片后芯片上电执行的第一段代码
Linker Script 规划 定义固件代码在芯片存储空间中的加载布局

4.4 验证阶段(固件的深度参与)

这是固件团队在流片前最重要的贡献领域——用固件验证硬件

4.4.1 固件在环验证(FW-in-the-Loop / FW-Driven Verification)

传统的硬件验证是用 SystemVerilog / UVM 写测试激励。但 UVM 测试向量和真实固件之间存在差距:

  • UVM 测试可能遗漏固件特有的操作序列和时序
  • 真实固件的代码路径和 UVM 测试覆盖的路径可能不一致
  • UVM 测试不验证 Boot ROM、中断响应等固件关键功能

固件在环验证的流程:

硬件仿真环境 (Simulation / Emulation)
    │
    ▼
加载真实固件二进制 (Boot ROM + F/W binary)
    │
    ▼
CPU 模型执行固件指令
    │
    ▼
固件操作硬件寄存器 → 硬件行为被验证
    │
    ▼
固件输出结果 → 与预期对比
验证活动 说明
Boot 流程验证 在仿真环境中运行 Boot ROM + SPL,验证上电初始化流程
Driver 验证 将固件中各 IP 的 driver 代码在仿真环境中运行,验证寄存器读写行为
中断响应验证 通过仿真模拟外设产生中断,验证固件的中断处理流程
错误处理验证 验证固件在异常情况下的处理——如 NAND 读错误时的重试/纠错逻辑
电源切换验证 在仿真中执行电源状态切换,验证电源管理固件的状态机
协议一致性 固件实现的 UFS/NVMe 协议栈在仿真环境中与参考模型对比
4.4.2 FPGA 原型验证

在流片前,会将 RTL 代码综合到 FPGA 上构建原型系统:

工作 说明
FPGA 移植 协助将芯片 RTL 移植到 FPGA 平台,处理时钟/复位差异
FPGA 固件调试 在 FPGA 上运行固件,定位功能问题
性能摸底 在 FPGA 上大致摸底芯片的性能(但 FPGA 无法准确反映最终时序性能)
系统集成测试 在 FPGA 上运行完整的固件 + 驱动栈,验证系统级功能

经验原则:一个 bug 在仿真中发现修复的成本是 1 倍,在 FPGA 验证中发现是 10 倍,在流片后才发现是 100 倍。

4.5 流片前(固件的签核检查)

在 Tape-out 之前,固件团队需要完成以下签核检查:

检查项 说明
寄存器一致性确认 固件中使用的所有寄存器地址、位域与 RTL 完全一致
Boot ROM 代码冻结 Boot ROM 代码必须最终确定,因为 ROM 无法修改
固件功能覆盖率确认 在仿真环境中的固件测试覆盖率达到公司要求
启动流程确认 Boot 流程已通过仿真验证
基本外设驱动确认 关键外设(UART、Timer、GPIO 等)的 Driver 已在仿真中验证通过
紧急问题清单关闭 所有 P0/P1 级别的优先级问题必须解决

4.6 样片 Bring-up 阶段(固件的核心战场)

这是固件团队在整个芯片研发过程中最高光、最紧张、最有技术含金量的阶段。

芯片流片回来后,硬件设计团队无法直接验证芯片是否正常工作——只有固件能让芯片真正"跑起来"

4.6.1 Bring-up 的典型流程
拿到样片 → 焊接到 EVB → 上电检查 → Boot ROM 启动 → 串口输出打印 →
逐个使能外设 → DDR 初始化 → 加载主固件 → 模块级功能测试 → 系统级测试
4.6.2 固件在各子阶段的具体工作

① Power-on 阶段(0~1 天):

工作 说明
电源轨检查 配合硬件工程师,用示波器检查芯片各电源域的电平是否正确
时钟检查 检查主时钟 / PLL / RTC 时钟是否正常起振
复位时序 检查芯片的复位释放时序是否符合预期
最小系统启动 让 Boot ROM 成功运行,在调试串口输出第一个字符

② 最小系统 Bring-up(1 天 ~ 1 周):

工作 说明
JTAG/SWD 调试 确认调试接口正常工作,可以通过 JTAG 下载和单步调试固件
SRAM 读写测试 验证片上 SRAM 可以正确读写(March 测试算法)
DDR 初始化 配置 DDR PHY 和控制器参数,完成 DDR 训练,验证 DDR 读写正确性
中断控制器验证 触发软中断,验证中断控制器和中断向量表工作正常
Clock Gating 验证 验证各模块时钟门控是否正常工作

③ 外设 Bring-up(1 周 ~ 1 个月):

按优先级逐个使能和验证各外设 IP:

外设 验证内容
UART 基础通信(往往是第一个验证的外设,用于输出调试信息)
GPIO 输入输出功能验证
SPI / I2C 与外部器件的通信验证
Timer / Watchdog 定时器精度、看门狗复位功能
DMA 数据传输正确性、带宽测试
USB 设备枚举、数据传输、速度模式切换
SD / eMMC 数据读写、速度模式
NAND Flash 控制器 Read/Write/Erase 验证、ECC 功能验证
DDR 接口 全地址范围的数据一致性测试
Ethernet MAC/PHY 初始化、网络数据收发

④ 协议栈 Bring-up(2 周 ~ 3 个月):

对于存储类芯片(如 UFS、SSD 主控),这是最耗时也最关键的部分:

工作 说明
UFS 协议栈验证 UniPro 初始化、链路训练、SCSI 命令处理、RPMB 安全功能
NVMe 协议栈验证 队列管理、命令提交/完成处理
PCIe 链路训练 PHY 初始化、链路训练状态机(LTSSM)验证
热插拔处理 设备热插拔时的链路重训练

⑤ 性能调优(1 周 ~ 1 个月):

工作 说明
吞吐量优化 调节 DMA burst size、缓存策略、命令流水线深度以最大化带宽
延迟优化 分析关键路径延迟,优化固件的中断响应和命令处理时间
功耗调优 调整时钟门控策略、电源状态切换阈值
稳定性测试 长时间(> 48 小时)压力测试,确保系统不会死锁或崩溃

⑥ 问题定位与 Debug:

Bring-up 中的 Bug 可能来自多个层面,固件团队负责协助定位问题的根本原因:

问题现象:芯片写入 NAND Flash 后读取校验失败

固件排查步骤:
  1. 确认固件发出的 NAND 命令序列正确 ──── 通过 JTAG 读取命令 FIFO
  2. 确认 NAND 控制器状态寄存器状态 ────── 检查是否有错误标志置位
  3. 确认 ECC 编码/解码结果 ───────────── 比对输入数据和 ECC 校验值
  4. 确认时序参数配置 ────────────────── 检查 tR/tPROG 等时序参数是否匹配
  5. 如果以上都正确 → 可能是硬件问题 ──── 通知硬件团队检查 RTL

结果:最终定位到 NAND 控制器的数据路径中有一个 RACE condition
      → 固件临时规避(增加延迟读取时序)
      → 硬件修复在下一版本 RTL 中
4.6.3 Bring-up 中的经典 Debug 方法
方法 说明
GPIO Toggle 在固件关键位置设置 GPIO 翻转,用逻辑分析仪测量时间点
UART 日志 从调试串口输出关键状态信息(最常用)
寄存器 Dump 异常时将所有关键寄存器的值打印出来
JTAG 断点 在关键代码位置设置硬件断点,查看 CPU 状态
Trace 使用 ETM(嵌入式跟踪宏单元)捕获全指令流
二分法 不断缩小问题代码范围,找到首次出现异常的代码位置

4.7 量产阶段(固件的参与)

参与活动 具体工作
量产固件开发 与 Bring-up 固件不同,量产固件需要更稳定、更优化,去除调试信息
FW OTA 方案 设计固件的在线升级方案(如双备份 + 回滚机制)
量产测试固件 支持 ATE(自动测试设备)的测试固件,用于 FT/SLT 环节
校准固件 针对芯片个体差异的 calibration 流程
测试覆盖率优化 优化量产测试程序,在保持高覆盖率的同时缩短测试时间
良率分析固件 固件级别的数据分析,协助良率提升(如记录 ECC 错误频次、时序裕量等)

4.8 客户支持阶段(固件的参与)

参与活动 具体工作
SDK 发布 提供完整的固件开发套件、文档和示例代码给客户
客户问题分析 客户在产品集成中遇到问题时,配合分析是客户软件问题、协议兼容性问题还是芯片问题
补丁/热修复 针对严重问题的紧急固件补丁
定制化固件 针对大客户的特殊需求提供定制化固件版本
平台移植支持 支持客户将芯片移植到不同平台(Linux / Android / RTOS)

5. 固件与其他部门的协作关系

5.1 协作关系图

                ┌──────────────┐
                │   产品管理    │
                │   (PM)       │
                └──────┬───────┘
                       │ 需求输入
                       ▼
    ┌──────────┐  ┌──────────────┐  ┌──────────┐
    │ 架构团队  │◄─┤   固件团队    ├─►│  设计团队 │
    │(Arch)    │  │  (Firmware)  │  │(RTL/HW)  │
    └──────────┘  └───────┬──────┘  └──────────┘
                          │
              ┌───────────┼───────────┐
              ▼           ▼           ▼
        ┌─────────┐ ┌─────────┐ ┌─────────┐
        │ 验证团队 │ │ 测试团队 │ │ 软件团队 │
        │  (DV)   │ │  (ATE)  │ │ (SDK)   │
        └─────────┘ └─────────┘ └─────────┘

5.2 各部门协作要点

协作对象 协作内容 常见冲突点/解决方式
与架构团队 定义软硬件接口、寄存器规划、Boot 流程 架构团队倾向于简化硬件(让固件多做),固件倾向于硬件开放更多控制权→需要 trade-off 讨论
与 RTL 设计团队 寄存器映射验证、RTL Bug 定位、ECO 建议 发现 RTL Bug 时,固件先写 workaround,硬件在下一版本修复
与验证团队 固件在环验证、FPGA 验证支持 验证团队需要了解固件运行的特性和时序,固件需要理解仿真环境的局限
与测试团队 量产测试固件、ATE 支持 测试团队关注测试覆盖率和测试时间(成本),固件需要在两者间平衡
与软件团队 系统级驱动接口定义、SDK 交付 固件层和 OS 驱动层的接口定义需要对齐,常见问题是 OOP vs 过程式开发风格差异
与产品管理 固件功能优先级、交付时间 PM 倾向于"功能全开",固件需要理性评估开发工时和风险

6. 固件部门的交付物与里程碑

6.1 芯片研发各阶段的固件交付物

研发阶段 固件交付物
架构阶段 FW Architecture Document、HW/FW Interface Spec
RTL 阶段 寄存器定义文档(.h 头文件)、HAL 层 Driver 代码
验证阶段 Boot ROM 仿真代码、FW-in-the-loop 测试用例、仿真报告
流片前 Boot ROM 最终二进制(冻结)、FW Sign-off 报告
Bring-up Bring-up Plan、Bring-up Report、各 IP Driver 验证代码
量产阶段 Production FW 二进制、量产测试固件、烧录工具
客户支持 SDK 包、固件参考代码、文档、FAQ

6.2 固件开发的里程碑节点

M0: 架构设计完成      ─── FW Architecture Review
M1: RTL Freeze       ─── 寄存器头文件发布
M2: Tape-out         ─── Boot ROM 代码冻结
M3: 样片到手         ─── Bring-up 开始
M4: 最小系统跑通      ─── 串口有输出
M5: DDR 初始化完成   ─── 可以通过 DDR 加载固件
M6: 关键外设验证完成  ─── UART/SPI/GPIO/Timer 等
M7: 全部外设验证完成  ─── 所有 IP 模块验证通过
M8: 协议栈验证完成   ─── 主协议(UFS/NVMe 等)通过一致性测试
M9: 性能达标         ─── 读/写吞吐量达到规格目标
M10: 量产固件发布    ─── Production FW Release

7. 固件开发在芯片研发中的核心价值

7.1 为什么固件如此重要

维度 说明
芯片的"灵魂" 硬件是芯片的"躯体",固件是芯片的"灵魂"——没有固件,芯片只是一块硅片
硬件缺陷的救火队 芯片流片后发现的硬件 Bug,有很多可以通过固件 Workaround 来规避,避免芯片直接报废
性能的放大器 同样的硬件设计,优秀的固件可以让性能提升 20~50%
灵活性的保障 固件可以在芯片量产后不断升级修复问题、增加功能,延长芯片的寿命
协议标准的实现者 UFS / NVMe / PCIe 等复杂协议的实现主要在固件中

7.2 固件在芯片研发中的独特地位

硬件设计团队:                    "我们负责把芯片造出来"
验证团队:                        "我们负责检查芯片没做错"
固件团队:                        "我们负责让芯片真正干活的"

一个真实的例子:
  • 流片回来后发现 DDR 接口在某些 PVT 条件下不稳定
  • 改 RTL?——不可能,已经流片了
  • 改封装?——成本太高
  • 固件方案:在固件中的 DDR 训练流程里增加 adaptive calibration 算法
  → 解决问题,无需硬件改动

7.3 固件团队的职业路径

初级固件工程师
    │  └ 掌握单一模块驱动开发、调试基础技能
    ▼
中级固件工程师
    │  └ 独立负责子系统固件开发、Bring-up、Debug
    ▼
高级固件工程师
    │  └ 主导芯片级固件架构设计、复杂问题排障、团队技术指导
    ▼
固件架构师 / 技术专家
    │  └ 负责多代芯片的固件整体架构、前沿技术预研、行业标准贡献
    ▼
技术总监 / Fellow

8. 附录:芯片研发常用术语表

8.1 研发流程术语

术语 英文 说明
流片 Tape-out 将芯片版图数据提交给晶圆厂进行制造的阶段
签核 Sign-off 各部门负责人签字确认,同意进入下一阶段
ECO Engineering Change Order 流片后的工程变更,通过修改光罩来修复 Bug
RTL Register Transfer Level 用硬件描述语言描述的数字电路逻辑
综合 Synthesis 将 RTL 代码映射到工艺库标准单元的过程
物理设计 Physical Design 将门级网表转化为物理版图的过程
DRC Design Rule Check 设计规则检查,确保版图符合晶圆厂的制造规则
LVS Layout vs. Schematic 版图与电路一致性检查
DFT Design for Test 可测试性设计,插入扫描链、BIST 等
GDSII Graphic Design System II 芯片版图的标准文件格式

8.2 固件相关术语

术语 英文 说明
Boot ROM Boot Read-Only Memory 芯片上电执行的第一段固化代码
HAL Hardware Abstraction Layer 硬件抽象层,屏蔽寄存器细节的最高层接口
Bring-up Bring-up 芯片样片首次上电使其正常工作的过程
Workaround Workaround 针对硬件 Bug 的固件层面规避方案
Linker Script Linker Script 链接脚本,定义代码和数据的存储分布
CSR Control/Status Register 控制/状态寄存器,固件与硬件交互的接口
MMIO Memory-Mapped I/O 内存映射输入输出,通过内存地址访问外设寄存器
ISR Interrupt Service Routine 中断服务程序
RTOS Real-Time Operating System 实时操作系统
JTAG Joint Test Action Group 标准的芯片调试接口
SWD Serial Wire Debug 串行线调试(ARM 的 JTAG 替代方案)

8.3 测试与验证术语

术语 英文 说明
CP Chip Probing 晶圆级探针测试
FT Final Test 封装后的成品测试
SLT System Level Test 系统级测试
ATE Automatic Test Equipment 自动测试设备
DV Design Verification 芯片设计功能验证
UVM Universal Verification Methodology 通用的 SystemVerilog 验证方法学
FPGA 原型 FPGA Prototype 在 FPGA 上实现 RTL 原型系统

本文适用范围:主要适用于 SoC / ASIC 类芯片的研发流程,尤其针对包含嵌入式 CPU 核的复杂芯片(如手机 SoC、存储主控芯片、IoT MCU、汽车电子芯片等)。不同公司、不同芯片类型的研发流程会有所调整,但核心逻辑和固件部门的参与模式具有共性。

参考资料来源:本文基于半导体行业通用的芯片研发最佳实践、JEDEC 标准开发流程以及多个芯片公司的实际项目经验总结而成。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐