ASIC的设计和制造

大家好,我是良许。

在嵌入式系统开发中,我们经常会接触到各种各样的芯片,比如 STM32 单片机、FPGA、DSP 等等。

但你有没有想过,这些芯片是怎么设计出来的?

今天我就来聊聊 ASIC(Application Specific Integrated Circuit,专用集成电路)的设计和制造过程。

作为一名嵌入式程序员,虽然我们日常工作主要是在已有的芯片上做软件开发,但了解芯片的诞生过程,对我们理解硬件特性、优化代码性能都有很大帮助。

1. 什么是 ASIC

ASIC 是为特定应用而设计的集成电路,与通用处理器不同,它针对特定功能进行优化。

比如比特币矿机里的挖矿芯片、手机里的基带芯片、汽车电子中的 CAN 总线控制器等,都属于 ASIC 的范畴。

我在汽车电子领域工作的时候,就接触过不少 ASIC 芯片。

比如某些车载网关使用的专用通信芯片,它集成了 CAN、LIN、FlexRay 等多种车载总线接口,这种芯片就是典型的 ASIC。

相比用通用 MCU 外挂各种接口芯片的方案,ASIC 方案在功耗、体积、成本上都有明显优势。

ASIC 与 FPGA 的主要区别在于:FPGA 是可编程的,设计完成后还可以修改逻辑;而 ASIC 一旦流片(制造出来),硬件逻辑就固定了,无法修改。

但 ASIC 在性能、功耗、成本(大批量生产时)方面都优于 FPGA。

2. ASIC 设计流程

2.1 需求分析与规格定义

ASIC 设计的第一步是明确需求。

这个阶段需要回答几个关键问题:这个芯片要实现什么功能?性能指标是什么?功耗要求多少?工作环境如何?

举个例子,假设我们要设计一个用于智能家居的低功耗无线通信芯片。

需求可能包括:支持 2.4GHz 频段、传输速率 1Mbps、待机功耗小于 10μA、工作温度范围-40℃ 到 85℃ 等。

这些指标会直接影响后续的设计决策。

2.2 架构设计

确定需求后,就要进行架构设计。

这个阶段要决定芯片的整体结构,包括需要哪些功能模块、各模块如何连接、数据流向如何等。

以一个简单的 UART 通信 ASIC 为例,架构可能包括:波特率发生器、发送移位寄存器、接收移位寄存器、FIFO 缓冲区、中断控制器等模块。

架构设计通常会画出框图,明确各模块的接口和交互关系。

2.3 RTL 设计

RTL(Register Transfer Level,寄存器传输级)设计是用硬件描述语言(HDL)来实现芯片的逻辑功能。

主流的 HDL 语言有 Verilog 和 VHDL。

这里给一个简单的 Verilog 代码示例,实现一个 8 位计数器:

复制代码
module counter_8bit (
    input wire clk,
    input wire rst_n,
    input wire enable,
    output reg [7:0] count
);
​
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        count <= 8'h00;
    end else if (enable) begin
        count <= count + 1'b1;
    end
end
​
endmodule

在实际 ASIC 设计中,RTL 代码会复杂得多,可能包含成千上万行代码。

设计师需要考虑时序、面积、功耗等多方面因素。

2.4 功能验证

写完 RTL 代码后,必须进行充分的功能验证。

这个阶段要编写测试用例(testbench),用仿真工具(如 ModelSim、VCS 等)来验证设计的正确性。

验证是 ASIC 设计中最耗时的环节,通常占整个设计周期的 60%~70%。

因为 ASIC 一旦流片,硬件逻辑就无法修改,如果有 bug,代价是非常高昂的。

我听说过有些公司因为验证不充分,流片后发现重大 bug,损失上千万甚至上亿元。

2.5 逻辑综合

逻辑综合是将 RTL 代码转换为门级网表的过程。

综合工具(如 Design Compiler)会根据目标工艺库,把 RTL 代码映射到具体的逻辑门(与门、或门、非门等)和触发器上。

综合过程中需要设置约束条件,比如时钟频率、输入输出延迟等。

综合工具会尽量优化设计,在满足时序要求的前提下,减小面积和功耗。

2.6 静态时序分析

综合完成后,需要进行静态时序分析(STA,Static Timing Analysis)。

STA 工具会检查设计中所有路径的时序,确保在最坏情况下也能满足时序要求。

时序问题是 ASIC 设计中的常见问题。

比如建立时间违例(setup violation)意味着数据在时钟沿到来前没有稳定足够长的时间;保持时间违例(hold violation)意味着数据在时钟沿后变化太快。

这些问题都需要通过修改 RTL 代码或调整综合约束来解决。

2.7 物理设计

物理设计包括布局规划(floorplan)、布局(placement)、时钟树综合(CTS)、布线(routing)等步骤。

这个阶段要把逻辑门和连线真正放置到芯片上,确定每个单元的物理位置和连线路径。

物理设计需要考虑很多实际因素,比如:信号完整性、电源完整性、串扰、电迁移等。

这些因素在 RTL 设计阶段是看不到的,但在实际芯片中会真实存在。

2.8 物理验证

物理设计完成后,需要进行物理验证,主要包括:

  • DRC(Design Rule Check,设计规则检查):检查版图是否符合工艺要求,比如最小线宽、最小间距等。
  • LVS(Layout Versus Schematic,版图与原理图对比):检查版图是否与原理图一致。
  • ERC(Electrical Rule Check,电气规则检查):检查电气连接是否正确。

只有通过所有物理验证,才能生成最终的版图文件(GDSII 格式),交给晶圆厂制造。

3. ASIC 制造流程

3.1 晶圆制造

ASIC 的制造是在晶圆厂(fab)进行的。晶圆通常是硅材料,直径有 8 英寸(200mm)、12 英寸(300mm)等规格。制造过程主要包括以下步骤:

3.1.1 氧化

在硅晶圆表面生长一层二氧化硅薄膜,作为绝缘层或掩膜层。

氧化通常在高温(800℃~1200℃)下进行。

3.1.2 光刻

光刻是芯片制造中最关键的步骤。

首先在晶圆上涂覆光刻胶,然后用掩膜版(mask)和光刻机将电路图案转移到光刻胶上。

曝光后的光刻胶经过显影,形成所需的图案。

现代先进工艺(如 7nm、5nm)使用极紫外光(EUV)光刻技术,可以实现更小的特征尺寸。

光刻设备非常昂贵,一台 EUV 光刻机售价超过 1 亿美元。

3.1.3 刻蚀

刻蚀是去除不需要的材料。

根据刻蚀方式,分为湿法刻蚀(用化学溶液)和干法刻蚀(用等离子体)。

刻蚀要求很高的选择性和均匀性。

3.1.4 离子注入

离子注入是在硅中掺杂杂质(如磷、硼),形成 N 型或 P 型半导体。

通过控制掺杂浓度和深度,可以形成晶体管的源极、漏极等区域。

3.1.5 薄膜沉积

薄膜沉积是在晶圆表面沉积各种材料,如金属(铜、铝)、介质(氧化硅、氮化硅)等。

常用的沉积方法有化学气相沉积(CVD)、物理气相沉积(PVD)等。

3.1.6 化学机械抛光

CMP(Chemical Mechanical Polishing)用于平坦化晶圆表面。

在多层金属互连工艺中,CMP 是必不可少的步骤。

以上步骤会重复多次,逐层构建出完整的电路。

一个先进的芯片可能有十几层甚至几十层金属互连层。

整个制造过程可能需要几百道工序,耗时 2~3 个月。

3.2 晶圆测试

晶圆制造完成后,需要进行晶圆级测试(wafer test),也叫 CP 测试(Circuit Probing)。

测试设备用探针接触晶圆上的焊盘,对每个芯片进行功能和参数测试。

测试会标记出不良芯片,这些芯片在后续封装时会被丢弃。

晶圆的良率(yield)是衡量制造质量的重要指标,良率越高,成本越低。

3.3 封装

通过测试的芯片会被切割下来,然后进行封装。

封装的作用是保护芯片、提供电气连接、散热等。

常见的封装形式有 DIP(双列直插)、QFP(四方扁平)、BGA(球栅阵列)等。

封装过程包括:

  • 芯片贴装:将芯片粘贴到封装基板上。
  • 引线键合:用金线或铝线将芯片焊盘与封装引脚连接。
  • 塑封:用塑料材料封装芯片,保护内部结构。
  • 打标:在封装表面印上型号、批次等信息。

3.4 最终测试

封装完成后,还要进行最终测试(final test),也叫 FT 测试。

这次测试是在封装后的成品芯片上进行,测试项目更全面,包括功能测试、参数测试、老化测试等。

只有通过最终测试的芯片才能出货给客户。

测试数据会被记录下来,用于质量追溯和可靠性分析。

4. ASIC 设计中的挑战

4.1 成本问题

ASIC 的开发成本非常高。

一次流片(tape-out)的费用,在 28nm 工艺下可能需要几百万元,在 7nm 工艺下可能超过千万元。

加上人力成本、EDA 工具费用等,一个 ASIC 项目的总投入可能达到数千万甚至上亿元。

因此,ASIC 只适合大批量生产的场景。

如果产品销量不够大,单颗芯片的成本会非常高,不如使用 FPGA 或通用 MCU 方案。

4.2 设计周期长

ASIC 的设计周期通常需要 1~2 年,甚至更长。

从需求分析到最终量产,要经过设计、验证、流片、测试等多个阶段。

如果流片后发现问题,需要重新设计和流片,周期会更长。

相比之下,FPGA 方案的开发周期要短得多,因为 FPGA 可以快速迭代,发现问题可以立即修改。

4.3 验证难度大

前面提到,验证是 ASIC 设计中最耗时的环节。

随着芯片复杂度的增加,验证难度也在急剧上升。

一个包含数亿晶体管的芯片,可能的状态空间是天文数字,无法穷尽测试所有情况。

为了提高验证效率,业界发展出了很多先进的验证方法,如形式验证、断言验证、覆盖率驱动验证等。

但即使如此,也很难保证 100% 的正确性。

4.4 工艺挑战

随着工艺节点的缩小(如 5nm、3nm),物理效应变得越来越显著。

比如量子隧穿效应导致的漏电流增加、工艺偏差导致的性能波动等。

这些问题给设计和制造都带来了巨大挑战。

此外,先进工艺的制造设备和材料成本极高,只有少数几家公司(如台积电、三星、英特尔)有能力投资。

这也导致了芯片制造的高度集中化。

5. ASIC 在嵌入式系统中的应用

作为嵌入式程序员,我们虽然不直接参与 ASIC 设计,但了解 ASIC 的特性对我们的工作很有帮助。

比如,在汽车电子项目中,我曾经使用过一款专用的 CAN 控制器 ASIC。

这个芯片集成了 CAN 收发器、错误检测、自动重传等功能,比用通用 MCU 的 CAN 外设要可靠得多。

在编写驱动程序时,我需要仔细阅读芯片手册,了解它的寄存器定义、时序要求等,才能正确配置和使用。

再比如,在做性能优化时,了解芯片的流水线结构、缓存层次、总线带宽等硬件特性,可以帮助我们写出更高效的代码。

有些看似简单的代码改动,可能因为更好地利用了硬件特性,性能就有明显提升。

下面是一个简单的例子,展示如何在 STM32 上配置 GPIO 来控制一个外部 ASIC 芯片的复位引脚:

复制代码
// 使用HAL库配置GPIO
void ASIC_Reset_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    
    // 使能GPIOA时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    // 配置PA5为输出模式,用于控制ASIC复位
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 初始化时保持复位状态
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
​
// ASIC复位函数
void ASIC_Reset(void)
{
    // 拉低复位引脚至少10ms
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
    HAL_Delay(10);
    
    // 释放复位
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
    
    // 等待ASIC启动完成(根据芯片手册确定时间)
    HAL_Delay(50);
}

这段代码虽然简单,但在实际项目中非常实用。

很多 ASIC 芯片都需要外部 MCU 来控制其复位、使能等信号,正确的初始化时序对系统稳定性至关重要。

6. 总结

ASIC 的设计和制造是一个复杂而精密的过程,涉及电路设计、物理设计、半导体工艺等多个领域。

虽然作为嵌入式软件工程师,我们不需要掌握所有细节,但了解这些知识可以帮助我们更好地理解硬件,写出更高效、更可靠的代码。

在我的职业生涯中,从单片机到嵌入式 Linux,从消费电子到汽车电子,接触过各种各样的芯片。

每一次深入了解芯片的工作原理,都让我对硬件有了更深的认识,也让我在软件开发中能够做出更好的设计决策。

如果你对芯片设计感兴趣,可以从学习 Verilog 或 VHDL 开始,在 FPGA 上实践一些简单的设计。

虽然 FPGA 不等于 ASIC,但很多设计思想是相通的。

对于嵌入式程序员来说,掌握一定的硬件知识,绝对是职业发展的加分项。

希望这篇文章能让你对 ASIC 有一个基本的了解。如果有任何问题,欢迎留言讨论。

更多编程学习资源

相关推荐
威联通安全存储2 小时前
驱动自动化之“脑”:某机器人制造企业基于威联通的存储实践
机器人·自动化·制造
minglie12 小时前
Amaranth HDL
python·fpga开发
无代码专家2 小时前
轻流无代码开发如何让制造企业快速响应市场变化?
人工智能·制造
雨洛lhw2 小时前
DMA技术
嵌入式硬件·dma
chenhouliu2 小时前
国外统计软件垄断高价困局:Minitab 国产替代,让制造企业省一半成本、数据更安全
安全·制造
旭日初扬2 小时前
N32H762IIL时钟树
单片机·嵌入式硬件
良许Linux3 小时前
汽车电子技术和汽车网络
网络·单片机·嵌入式硬件·汽车·嵌入式·制造
forAllforMe3 小时前
STM32 中断分组解析 说明,以及优先级
stm32·单片机·嵌入式硬件
不脱发的程序猿3 小时前
嵌入式Linux:阻塞式I/O与非阻塞式I/O
linux·服务器·单片机·嵌入式硬件·嵌入式