从需求 spec 到架构:怎么把「做个 U 盘控制器」拆成模块
更新时间:2026-09-05。本文是「集成电路大类 · 芯片设计」入门层(beginner)第三十篇新正文。前面讲了 RTL、综合、流片,但写代码其实是很靠后的事。芯片设计真正的第一步,是把一句模糊的需求(「做个 U 盘控制器」)变成清晰的规格(spec)和架构(architecture)。这一篇用这个例子走一遍「从需求到模块划分」。单个模块内部怎么实现见 微架构入门。
本文要回答的问题
- 拿到「做个 U 盘芯片」这种需求,第一步干什么?
- spec 和架构分别是什么、差在哪?
- 怎么把一个系统拆成一个个可实现的模块?
- 为什么说架构决定了项目 80% 的成败?
一、四个层次:spec → 架构 → 微架构 → RTL
越靠上层的决策影响越大、改起来越便宜;越往下越具体、错了越贵(见 bug 成本随阶段暴涨)。架构没划好,后面 RTL 写得再漂亮也救不回来。
二、第一步:把需求写成 spec
「做个 U 盘」太模糊,要先量化成规格,例如:
- 功能/协议:符合 USB 2.0 High-Speed(480 Mbps)、实现大容量存储类(MSC/Bulk-Only Transport)、支持 FAT 文件系统由主机管理;
- 存储介质:驱动 NAND Flash(或 eMMC),容量档位、读写速度目标(如顺序读 ≥ 30 MB/s);
- 性能/延迟:突发传输带宽、主机不超时;
- 功耗/成本:USB 总线供电、待机电流上限、目标 die 面积/封装引脚数;
- 可靠性:掉电保护、坏块管理、纠错 ECC 等。
spec 要可验证——每条最好能量到「过/不过」,否则 验证 没法写检查项。
三、第二步:架构——拆成模块
接着把系统拆成职责单一、边界清晰的模块,并定义它们怎么连。一个 USB 存储控制器大致这样划分:
| 模块 | 职责 |
|---|---|
| USB PHY | 高速串行物理层(模拟/混合信号,通常买 IP),见 IP 核 |
| USB 协议/控制器 | 处理枚举、端点(endpoint)、Bulk 批量传输、协议包 |
| 端点缓冲 / FIFO | 缓存收发数据,跨时钟域,见 FIFO/握手 |
| DMA 引擎 | 在 USB 缓冲与存储之间搬数据,少占 CPU,见 中断与 DMA |
| 存储控制器 | 驱动 NAND/eMMC、做 ECC、坏块/磨损管理 |
| CPU/MCU 核(可选) | 跑固件处理协议状态、异常管理 |
| 总线互连 | AXI/AHB/APB 把各模块连起来,见 片上总线 AMBA |
| 寄存器/配置 | 一组内存映射寄存器供软件控制状态,见 寄存器表 |
| 时钟/复位/电源 | 各模块时钟域、复位、低功耗策略,见 时钟复位、低功耗 |
四、第三步:定义接口、数据流和预算
模块划好后,架构师还要定清楚:
- 接口与协议:模块间用 AXI 还是 valid/ready 流、数据位宽多少;
- 数据流:主机→USB PHY→协议层→FIFO→DMA→存储控制器→NAND,画清数据和控制路径;
- 地址映射:各模块寄存器、缓冲在地址空间的位置(软件要靠它编程,见 怎么读手册);
- 时钟域:USB 480 MHz 域和存储控制器域不同,跨域要同步/异步 FIFO(见 时钟树与复位网络);
- 预算:带宽够不够、缓冲多深不丢数据、面积/功耗/引脚目标,决定买哪些 IP、用什么工艺。
这些定了,才把每个模块交给工程师做微架构和 RTL(见 微架构入门)。
五、为什么架构决定 80% 成败
模块拆错、接口没定清、带宽/时钟域算漏,到了 RTL 甚至流片后才发现,往往要推倒重来或 respin,代价极大。架构阶段用文档和框图就能快速迭代、发现矛盾,是整个项目里「改起来最便宜却影响最大」的一环。
六、这一篇在知识体系里的位置
- 想进单个模块内部看怎么实现 → 微架构入门、FIFO/仲裁器/握手;
- 想把模块连起来 → 片上总线 AMBA、寄存器表、中断与 DMA;
- 想看架构里哪些模块直接买 → IP 核是什么;
- 想验证架构对不对 → 芯片功能验证、仿真是什么。
总结
一句话总结:芯片设计真正的第一步不是写 Verilog,而是把模糊需求层层细化——先用「做个 U 盘控制器」的例子把需求量化成可验证的规格 spec(USB 2.0 高速、大容量存储类协议、NAND 容量与读写带宽、总线供电功耗与面积成本目标、掉电保护/ECC 等),再做架构划分,把系统拆成职责单一的模块(USB PHY、协议控制器、端点 FIFO、DMA、存储控制器、可选 MCU 核、AXI/AHB/APB 总线互连、配置寄存器、时钟复位电源),并明确模块间接口协议、端到端数据流(主机→PHY→协议层→FIFO→DMA→存储控制器→NAND)、地址映射、跨时钟域处理和带宽/面积/功耗预算;这对应 spec→架构→微架构→RTL 四个层次,越上层的决策影响越大、改动越便宜,模块拆错或接口、带宽、时钟域在架构期漏算,到 RTL 甚至流片后才暴露就要付出 respin 的巨大代价,所以架构阶段用框图和文档快速迭代、提前暴露矛盾,是「改起来最便宜却决定约 80% 成败」的关键一环,架构定案后才进入各模块的微架构(流水线/状态机/缓冲)与 RTL 编码。