总体抽象
- 系统层 -> 系统层定义整体架构目标 (性能/功耗/带宽)。从系统需求中提取关键功能块。
在算法层把功能用数学模型和高层代码实现、验证。再往下映射到 RTL/电路实现。
- 算法层 -> 高层次综合(HLS)—AutoPilot的工作流程框图如下图所示。
在前端,它使用了基于LLVM的编译器架构,能够处理可综合的ANSI C、C++,以及OSCI SystemC等语言编写的模型。这个名为llvm-gcc的前端编译器会将高层语言模型转换为中间表达式(IR),并进行一系列针对代码复杂度、冗余、并行性等方面的代码优化。然后再根据具体的硬件平台,综合生成RTL代码、验证与仿真环境,以及必须的时序和布局约束等。涉及一些优化方法
- RTL层 -> 逻辑综合(LS)—逻辑综合的过程,就是要把RTL文件描述的电路进一步展开,转换成用逻辑门和触发器搭成的电路,而用来描述这些逻辑门和触发器的连接关系的文件就是门级网表文件。
- 逻辑层 -> 版图综合即布局布线Place & Route
- 电路层
逻辑综合对应仿真则是:
- 行文仿真
- 功能仿真
- 时序仿真
HDL描述电路,有三种方式:
- 数据流
- 行为结构
- 门级连接
RTL作为一种HDL代码编写风格是指代码主要采用数据流和行为结构相结合的方式编写
RTL代码实际对应的结构描述是众多算术运算单元(ALU)、多路选择器(MUX)、寄存器等等,而这些模块实际上都是由各种逻辑门(与非门,或非门等等)和基本触发器(D触发器、JK触发器等等)搭成的,逻辑综合的过程,就是要把RTL文件描述的电路进一步展开,转换成用逻辑门和触发器搭成的电路,而用来描述这些逻辑门和触发器的连接关系的文件就是门级网表文件。
因此,逻辑综合包含两个主要步骤[1]:
- 选择工艺库(标准单元库)
- 设计约束(时序约束、面积约束和功耗约束)
选择的工艺库中就包含了基本的逻辑门和触发器。
不同的综合工具生成的网表文件的文件格式也不太一样,如*.v(Design Compiler, Synopsys)、*.vh(PKS, Cadence)和*.edf(Synplify, Synplicity)。
共同点
- 输入:RTL (VHDL/Verilog)
- 中间过程:功能仿真 → 综合 (RTL→门级网表) → 布局布线 (P&R) → 时序分析 (STA) → 形式验证
- 目标:把 RTL 转换为硬件可执行的最终形式
分歧点:FPGA vs ASIC
| 阶段 | FPGA 流程 | ASIC 流程 |
| 综合 (Synthesis) | 将 RTL 映射到 FPGA 厂商提供的 LUT、寄存器、Block RAM、DSP 等硬件资源 | 将 RTL 映射到 标准单元库 (Standard Cell Library),库由工艺厂商(TSMC、台积电、中芯)提供 |
| 布局布线 (P&R) | 将逻辑放到 FPGA 芯片上的固定资源位置(LUT、FF、DSP slice),走 FPGA 内部的可编程互连 | 将标准单元摆放在硅片上,自由布线,生成晶体管级别的物理版图 |
| 时序分析 (STA) | 用 FPGA 厂商的时序模型(器件已固定),目标是验证能否跑到约束的时钟频率 | 用工艺库的时序模型(包含工艺角、温度、电压),需要覆盖 多 PVT 角,更复杂 |
| 结果文件 | Bitstream (.bit / .sof):FPGA 专用配置文件,可直接烧录到 FPGA 中 | GDSII 文件:标准 ASIC 流片格式,交付给晶圆厂 (Foundry) 做掩膜,开始流片 |
| 验证方式 | 下载到 FPGA 板子直接验证 | Tape-out 前必须经过严格形式验证、功耗/时序收敛,因为流片后几百万美元一片,无法修改 |
| 成本与周期 | 编译一次几十分钟,烧录即可反复调试;迭代快,成本低 | 工艺验证复杂,流片费用高(百万级美金),流片周期长(数月到一年),一旦出错代价巨大 |
芯片前端设计
前端设计也就是从输入需求到输出网表的过程:主要分为以下几个步骤:
时序分析和验证时出现的错误可能需要反复重做前面几步才能解决,是一个多次迭代优化的过程。
RTL设计
在设计之前我们先要确定芯片的工艺,比如是选择TSMC还是SMIC,是7nm,还是5nm,而工艺的选择也是受很多因素的制约(如下图),而芯片工艺的选择,就是对这些因素的权衡。
IC设计的第一步就是制定Spec,这个步骤就像是在设计建筑前,要先画好图纸一样,在确定好所有的功能之后在进行设计,这样才不用再花额外的时间进行后续修改。IC 设计也需要经过类似的步骤,才能确保设计出来的芯片不会有任何差错。
由文档来写RTL,而用RTL实现的各种功能模块,来组成一个实现具体功能的IP,SOC芯片最终由SOC integration工程师把各个IP集成到一起。
IP又分为模拟IP和数字IP,大概可以做如下的分类:
在芯片功能设计完备后,我们还要做可测性设计DFT(Design For Test)。
关于DFT的具体介绍,请直达以下两个传送门:
RTL设计最后要做的就是代码的设计规则检查。
通过lint, Spyglass等工具,针对电路进行设计规则检查,包括代码编写风格,DFT,命名规则和电路综合相关规则等。
验证
验证是保证芯片功能正确性和完整性最重要的一环。验证的工作量也是占整个芯片开发周期的50%-70%,相应的,验证工程师与设计工程师的数量大概在2-3:1。
从验证的层次可以分位:模块级验证,子系统级验证和系统级验证。
从验证的途径可以分为:模拟(simulation),仿真和形式验证(formality check)。
| 阶段 | 名称 | 特点 | 用途 |
|---|---|---|---|
| RTL 仿真 | 前仿(Pre-Layout / Functional Simulation) | 只用逻辑网表,不考虑布线/时序 | 验证功能逻辑是否正确 |
| Gate 仿真 | 后逻辑综合仿真(Post-Synthesis / Gate-Level Simulation) | 使用综合后的门级网表 | 验证逻辑与 RTL 功能一致 |
| 后仿 | Post-Layout / Post-Route Simulation | 使用布局网表 + RC 延迟 | 验证功能和时序,发现寄生效应导致的问题 |
静态时序分析(STA)
静态时序分析是套用特定的时序模型(timing model),针对特定电路,分析其是否违反designer给定的时序限制(timing constraint)。
目前主流的STA工具是synopsys的Prime Time。
- 时序分析流程图
静态时序分析的作用:确定芯片最高工作频率
通过时序分析可以控制工程的综合、映射、布局布线等环节,减少延迟,从而尽可能提高工作频率。
- 检查时序约束是否满足
可以通过时序分析来查看目标模块是否满足约束,如不满足,可以定位到不满足约束的部分,并给出具体原因,进一步修改程序直至满足要求。
- 分析时钟质量
时钟存在抖动、偏移、占空比失真等不可避免的缺陷。通过时序分析可以验证其对目标模块的影响。
覆盖率
覆盖率作为一种判断验证充分性的手段,已成为验证工作的主导。
从目标上,可以把覆盖率分为两类:
- 代码覆盖率
作用:检查代码是否冗余,设计要点是否遍历完全。
检查对象:RTL代码
- 功能覆盖率
作用:检查功能是否遍历
检查对象:自定义的container
在设计完成时,要进行代码覆盖率充分性的sign-off, 对于覆盖率未达到100%的情况,要给出合理的解释,保证不影响芯片的工能。
ASIC综合
逻辑综合的结果就是把设计实现的RTL代码翻译成门级网表(netlist)的过程。
在做综合时要设定约束条件,如电路面积、时序要求等目标参数。
工具:synopsys的Design compiler, 综合后把网表交给后端。
芯片后端设计
后端设计也就是从输入网表到输出GDSII文件的过程:主要分为以下几个步骤:
逻辑综合
在前端最后一步已经讲过了,在此不做赘述。
形式验证
- 验证芯片功能的一致性
- 不验证电路本身的正确性
- 每次电路改变后都需验证
形式验证的意义在于保障芯片设计的一致性,一般在逻辑综合,布局布线完成后必须做。
工具:synopsys Formality
物理实现
物理实现可以分为三个部分:
- 布局规划 floor plan
- 布局 place
- 布线 route
1、布图规划floor plan
布图规划是整个后端流程中作重要的一步,但也是弹性最大的一步。因为没有标准的最佳方案,但又有很多细节需要考量。
布局布线的目标:优化芯片的面积,时序收敛,稳定,方便走线。
工具:IC compiler,Encounter
布图规划完成效果图:
2、布局
布局即摆放标准单元,I/O pad,宏单元来实现个电路逻辑。
布局目标:利用率越高越好,总线长越短越好,时序越快越好。
但利用率越高,布线就越困难;总线长越长,时序就越慢。因此要做到以上三个参数的最佳平衡。
布局完成效果图:
3、布线
布线是指在满足工艺规则和布线层数限制、线宽、线间距限制和各线网可靠绝缘的电性能约束条件下,根据电路的连接关系,将各单元和I/O pad用互连线连接起来。
时钟树综合——CTS
Clock Tree Synthesis,时钟树综合,简单点说就是时钟的布线。
由于时钟信号在数字芯片的全局指挥作用,它的分布应该是对称式的连到各个寄存器单元,从而使时钟从同一个时钟源到达各个寄存器时,时钟延迟差异最小。这也是为什么时钟信号需要单独布线的原因。
寄生参数提取
由于导线本身存在的电阻,相邻导线之间的互感,耦合电容在芯片内部会产生信号噪声,串扰和反射。这些效应会产生信号完整性问题,导致信号电压波动和变化,如果严重就会导致信号失真错误。提取寄生参数进行再次的分析验证,分析信号完整性问题是非常重要的。
工具Synopsys的Star-RCXT
版图物理验证
这一环节是对完成布线的物理版图进行功能和时序上的验证,大概包含以下方面:
- LVS(Layout Vs Schematic)验证:简单说,就是版图与逻辑综合后的门级电路图的对比验证;
- DRC(Design Rule Checking):设计规则检查,检查连线间距,连线宽度等是否满足工艺要求;
- ERC(Electrical Rule Checking):电气规则检查,检查短路和开路等电气规则违例;
实际的后端流程还包括电路功耗分析,以及随着制造工艺不断进步产生的DFM(可制造性设计)问题等。
物理版图以GDSII的文件格式交给芯片代工厂(称为Foundry)在晶圆硅片上做出实际的电路。
GDSII效果版图
最后进行封装和测试,就得到了我们实际看见的芯片。
ECO(Engineering Change Order):
- 一种正式的工程变更流程,用于记录、批准和实施对设计的修改。
- 修改可以涉及:
- 逻辑设计(RTL 代码、门级网表)
- 版图设计(Layout、布线、寄存器分配)
- 功能验证(测试向量、仿真环境)
- 封装或制造流程
2️⃣ 出现的典型阶段
- 后端设计 / Tape-out 前
- 功能或时序问题发现后,需要在提交光刻前修正
- 常见内容:
- Gate-level ECO:修改少量逻辑门
- Timing ECO:调整寄存器或布线以满足时序
- 制造 / 测试阶段
- 测试芯片发现缺陷,需要在下一批芯片生产中修改
- 内容:
- 逻辑修改
- Mask 层修改(mask ECO)
- 产品迭代
- 小的功能修改或优化不需要重新全面设计
- 通过 ECO 快速实现
3️⃣ ECO 类型
| 类型 | 说明 |
|---|---|
| Logical ECO | 修改 RTL 或门级逻辑 |
| Timing ECO | 修改寄存器插入 / buffer / mux,解决时序违规 |
| Mask ECO | 修改光刻掩模,通常成本高 |
| Functional ECO | 修改功能或增加/删除逻辑特性 |
| Verification ECO | 测试或验证环境的变更 |
4️⃣ ECO 的流程
- 发现问题:功能或时序不满足要求
- 提交 ECO 请求:填写 ECO 表单
- 分析变更:评估影响范围(逻辑、版图、时序、功耗)
- 实施修改:修改 RTL、网表或版图
- 回归验证:确保修改没有引入新问题
- 批准 & 签发:ECO 生效并进入 Tape-out 或下一批生产
对应岗位
架构师: 架构师是产品设计的灵魂人物。
产品经理通过市场调研与分析用户需求,提出一个产品定义之后,架构师会根据实际的产品需求与技术能力做一个整体的解决方案,通过详细的论证与测试确认方案的有效性与可执行性,然后将对应实现方案下发给设计人员进行设计实现。
架构师属于一个全能型人才,既需要懂市场需求与产品应用场景,又需要对产品的具体实现做到心中有数。需要掌握各种IP的功能,性能以及目前的市场应用情况,熟练的掌握系统的整体定义与实现方法。
根据不同的产品需求,对架构师的要求也不太一样,以最基本的SoC为例:
- 架构师需要掌握不同CPU的性能指标与应用场景,
- 掌握系统内存以及高速IP的应用场景,
- 掌握电源与低功耗设计方法,
- 掌握芯片启动流程以及安全性设计
架构师必须是一个具有多年经验的老司机,参与过多款芯片的设计开发测试工作,能够全面的衡量PPA(功耗power,性能performance,面积area)的影响。
- IP设计
IP设计主要侧重于IP功能的实现,是根据任务需求完成相关IP的功能开发与测试支持,比如目前比较流程的图像处理,神经网络算法实现,压缩算法实现,或者是各种不同接口IP的功能开发。
IP设计的一个硬性指标是coding能力一定要强。因为他需要将对应的算法或功能实现,另外需要清楚设计的一些基本方法与原则,设计的时候也要考虑本模块的PPA,为了提高设计IP的性能与可靠性,需要有良好的代码编写习惯以及采取合理的功能实现方法。
根据不同IP的需求,对设计人员也有不同的技能需求:
- 基本的开发设计思想,对不同功能实现的处理能力
- 对于算法类实现,需要具备良好的算法理解与转换的能力
- 对于处理模块实现,需要对流水线操作,缓存能力有良好的理解
- 对于接口类模块实现,需要精通负责模块的接口协议,比如PCIE,USB,Ethernet,SATA等
- 对低速接口模块,需要掌握基本的低速总线协议与各种使用模式,I2C,I2S,UART,SPI等
- 需要了解时序约束,能够熟悉接口的一些常规约束需求
IP设计人员是具体功能的实现者,具体产品的功能需求能否满足,还是靠设计开发者进行实现。
- 系统设计
系统设计目前最主要的是SoC设计,主要侧重于芯片顶层的设计实现,属于IP的上一级。SoC设计是一个系统实现的过程,跟架构师的设计方案是对应的,从系统级的角度实现架构师的规划。当IP级开发完成之后会交付到芯片系统级做集成开发设计。
系统级的设计包括全芯片的时钟复位设计,芯片管脚的复用设计,电源分区的划分,低功耗设计,不同子系统的划分实现,地址分配与系统互联,综合规划,dft测试方案设计,系统启动方案等等。
系统设计会从全芯片的角度考虑每一部分功能以及子系统的具体实现方案,会更多的从产品的具体应用场景以及应用方法上面考虑设计。也就是我们经常说的会站在用户的角度考虑问题。
根据不同的任务需求,SoC设计需要掌握不同的技能需求:
- 处理器CPU,GPU,DSP,RISCV等
- 存储单元DDR,RAM,Flash等
- 内部总线协议,主要是ARM AMBA总线
- 互联设计方法,包括一致性以及非一致性设计方法
- 低速协议,如UART,I2C,SPI,I2S,WDT
- 高速接口的基本特性,以及使用方法,如PCIE,USB,Ethernet等
- 电源设计与低功耗方法
系统设计是产品整体功能的具体实现,产品能够得到市场的认,跟系统设计者有很大的关系
仿真验证
验证工程师主要负责产品设计功能以及性能的验证,保证最终产品功能的正确性。仿真验证是IC设计过程中不可或缺的一环,只有经过充分的验证与测试公司才会有信心将芯片流片生产。
仿真验证分为仿真与验证两个环节。
仿真主要是通过EDA工具与仿真模型进行功能的仿真,分为前仿真和后仿真。前仿真主要是针对RTL代码进行仿真,后仿真则是针对布局布线之后的门级网表进行仿真。
验证则主要是指FPGA原型验证,通过将对应的设计烧录在FPGA上进行功能的验证。
所有的仿真验证都会针对IP级以及系统级进行,这与设计是对应的。
根据不同的需求,验证工程师需要具备以下技能:
- 验证语言SV
- 验证方法UVM
- 掌握不同的IP功能以及验证流程
- 验证流程:前仿真后仿真,原型验证
- 系统级验证方法
仿真验证是IC设计流程中的重要一环,目前也是市场最终欢迎的一个岗位,充当IC产品检察官的角色。
综合
综合工程师主要负责将前端开发设计的代码转化成门级网表,也就是将代码设计的逻辑转换成真正的电路结构。综合之后会看到所有的逻辑都变成了与非门等元器件搭建的电路。
综合是工具将描述语言翻译成电路的过程,这时最重要的是保证实现的电路功能与原始设计一致,并且电路的时序满足电路要求。因此综合工程师需要对代码与电路做一致性检查(formal检查),并对所有的时序逻辑进行约束,尤其是要做好接口时序约束与异步路径的处理。
综合工程师应该具备的技能:
- 电路结构的分析能力
- 掌握时序约束与分析方法
- 同步异步时序约束与分析
- 相关工具如formality,DC,PT等工具的使用方法
DFT
DFT(Design for test)是可测试性设计。DFT工程师的职责就是在ASIC设计中插入可测试性的逻辑,等芯片制造出来之后可以通过这些可测试性的逻辑测试芯片制造过程中引入的错误。
注意DFT测试的是由于芯片制造过程中引入的错误,并不包括逻辑设计错误,因为逻辑设计是由验证工程师测试保证的。DFT的最终目的是将生产中的坏片找到,提升最终的芯片良率。
DFT设计不同的公司有不同的流程,很多公司是将DFT放在综合之后,也就是在网表插入测试逻辑,现在越来越多的公司会将DFT放到前端来实现,这样可以更好地保证设计流程,缩短工程的开发周期。
DFT工程师需要具备的能力:
- 理解Scan,Mbist和Boundary Scan的测试技术
- 设计测试向量对DFT逻辑进行测试
- 能够支持机台测试(ATE)
- 掌握时序约束的设计方法
DFT工程师像安全卫士一样,保证最终的客户拿到的芯片是完好可用的,防止坏片流入市场。
后端
IC后端是一个大类,内部包含了很多的内容,不过从流程上来讲主要是对综合的网表进行物理的实现。
虽然我们拿到了与非门搭建的网表,但是要把具体的电路在版图上实现,还是需要考虑很多因素。最基本的就是布局与布线,设计的逻辑块如何摆放,他们之间的连接关系如何走线,如何设计才能满足性能与面积的最优化,如何设计电源才能保证电压供给以及满足功耗的设计需求。
后端设计流程是一个比较复杂的过程,也是最耗时的过程。后端工程师需要通过各种工具分析与优化进行相关设计。
后端设计也是最贴近物理实现的岗位。随着工艺的提升,对后端工程师的技术要求也在提升,因此这是一个经验越多越吃香的岗位。好的后端工程师是市场的紧俏货。
后端工程师需要具备的能力:
- 对工艺库有一定的了解
- 掌握电子电路的电气特性
- 掌握布局布线的方法
- 掌握寄生参数的提取方法以及版图优化
- 掌握电源设计方法与功耗计算分析流程
后端工程师是IC设计流程的最后一环,后端设计的好坏直接影响到最终产品的能否之前的设计需求。