芯片研发的基础流程

基础知识

Sand to Silicon

经典Intel视频-Sand_to_Silicon

芯片研发过程汇总

制定芯片spec
==>前端(编写+验证)—RTL FREEZE
==>后端(floor plan,电源综合,时钟综合,布局布线)—TapeOut
==>流片
==>成砖头,公司解散
==>endl;
==>ATE测试+Corner分析+SLT测试
==>吹牛逼,销售,捞钱,资本运作,卷钱走人。

关键术语(持续更新中)

  • margin 余量 , 通常测试理想情况是好的,但现实是残酷的,所以我们为了提高芯片的鲁棒性,对每个模块是要有一部分可变的余地,这就是margin
  • ATE(AutomaticTest Equipment):广义上的IC测试设备我们都称为ATE(AutomaticTest Equipment),一般由大量的测试机能集合在一起,由电脑控制来测试半导体芯片的功能性,这里面包含了软件和硬件的结合。

前端设计的部分(了解)

  • 规格制定
    芯片规格,也就像功能列表一样,是客户向芯片设计公司(称为Fabless,无晶圆设计公司)提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。
  • 详细设计
    Fabless根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。
  • HDL编码
    使用硬件描述语言(VHDL,Verilog HDL,业界公司一般都是使用后者)将模块功能以代码来描述实现,也就是将实际的硬件电路功能通过HDL语言描述出来,形成RTL(寄存器传输级)代码。
  • 仿真验证
    仿真验证就是检验编码设计的正确性,检验的标准就是第一步制定的规格。看设计是否精确地满足了规格中的所有要求 。规格是设计正确与否的黄金标准,一切违反,不符合规格要求的,就需要重新修改设计和编码。 设计和仿真验证是反复迭代的过程,直到验证结果显示完全符合规格标准。
    仿真验证工具Synopsys的VCS,还有Cadence的NC-Verilog。
  • 逻辑综合――Design Compiler
    仿真验证通过,进行逻辑综合。逻辑综合的结果就是把设计实现的HDL代码翻译成门级网表netlist。综合需要设定约束条件,就是你希望综合出来的电路在面积,时序等目标参数上达到的标准。 逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。一般来说,综合完成后需要再次做仿真验证(这个也称为后仿真,之前的称为前仿真)。 逻辑综合工具Synopsys的Design Compiler。
  • STA
    Static Timing Analysis(STA),静态时序分析,这也属于验证范畴,它主要是 在时序上对电路进行验证,检查电路是否存在建立时间(setup time)和保持时间(hold time)的违例(violation)。这个是数字电路基础知识,一个寄存器出现这两个时序违例时,是没有办法正确采样数据和输出数据的,所以以寄存器为基础的数字芯片功能肯定会出现问题。
    STA工具有Synopsys的Prime Time。
  • 形式验证
    这也是验证范畴,它是从功能上(STA是时序上)对综合后的网表进行验证。 常用的就是等价性检查方法,以功能验证后的HDL设计为参考,对比综合后的网表功能,他们是否在功能上存在等价性。这样做是为了保证在逻辑综合过程中没有改变原先HDL描述的电路功能。
    形式验证工具有Synopsys的Formality。

    1. 前端设计的流程暂时写到这里。从设计程度上来讲,前端设计的结果就是得到了芯片的门级网表电路。

后端设计部分(了解)

  • DFT
    Design For Test,可测性设计。芯片内部往往都自带测试电路,DFT的目的就是在设计的时候就考虑将来的测试。 DFT的常见方法就是,在设计中插入扫描链,将非扫描单元(如寄存器)变为扫描单元。关于DFT,有些书上有详细介绍,对照图片就好理解一点。
    DFT工具Synopsys的DFT Compiler
  • 布局规划(FloorPlan)
    布局规划就是 放置芯片的宏单元模块,在总体上确定各种功能电路的摆放位置,如IP模块,RAM,I/O引脚等等。布局规划能直接影响芯片最终的面积。
    工具为Synopsys的Astro
  • CTS
    Clock Tree Synthesis, 时钟树综合,简单点说就是时钟的布线。 由于时钟信号在数字芯片的全局指挥作用,它的分布应该是对称式的连到各个寄存器单元,从而使时钟从同一个时钟源到达各个寄存器时,时钟延迟差异最小。这也是为什么时钟信号需要单独布线的原因。
    CTS工具,Synopsys的Physical Compiler
  • 布线(Place & Route)
    这里的布线就是 普通信号布线了,包括各种标准单元(基本逻辑门电路)之间的走线。比如我们平常听到的0.13um工艺,或者说90nm工艺,实际上就是这里金属布线可以达到的最小宽度,从微观上看就是MOS管的沟道长度。
    工具Synopsys的Astro
  • 寄生参数提取
    由于导线本身存在的电阻,相邻导线之间的互感,耦合电容在芯片内部会产生信号噪声,串扰和反射。这些效应会产生信号完整性问题,导致信号电压波动和变化,如果严重就会导致信号失真错误。 提取寄生参数进行再次的分析验证,分析信号完整性问题是非常重要的。
    工具Synopsys的Star-RCXT
  • 版图物理验证
    对完成布线的物理版图进行功能和时序上的验证,验证项目很多,如LVS(Layout Vs Schematic)验证,简单说,就是版图与逻辑综合后的门级电路图的对比验证;DRC(Design Rule Checking):设计规则检查,检查连线间距,连线宽度等是否满足工艺要求, ERC(Electrical Rule Checking):电气规则检查,检查短路和开路等电气 规则违例;等等。
    工具为Synopsys的Hercules
  • 实际的后端流程还包括电路功耗分析,以及随着制造工艺不断进步产生的DFM(可制造性设计)问题,在此不说了。

物理版图验证完成也就是整个芯片设计阶段完成,下面的就是芯片制造了。物理版图以GDS II的文件格式交给芯片代工厂(称为Foundry)在晶圆硅片上做出实际的电路,再进行封装和测试,就得到了我们实际看见的芯片。

芯片研发过程:

可以参考: 芯片全流程开发

image.png
芯片公司主要负责的就是电路设计

作为芯片公司的软件开发,我们要知道的流程是:

制定芯片spec

  1. ==>前端(编写+验证)--RTL FREEZE

==>在前端FREEZE之后,理论上芯片功能是正常的,但如果不正常了怎么办? IC科普文:ECO的那些事

  1. ==>后端(floor plan,电源综合,时钟综合,布局布线)--TapeOut
  2. ==>流片
  3. ==>点亮
  4. ==>ATE测试+Corner分析+SLT测试 [ATE测试 ](https://zhuanlan.zhihu.com/p/35007552)

芯片研发的构成

我们先了解几个构成:
芯片公司研发组成:

  • 硬件,没啥说的,芯片最终是要落到板子上测试的,不可缺少。
  • ASIC(数字前端),也称Designer,完成每一个模块的电路设计。
  • DV:(软件仿真-IC验证工程师),利用仿真工具,基于ASIC的逻辑 写出信号激励 来测试 ASIC逻辑正确性。
  • 原型验证(系统软件): 利用FPGA硬件,基于ASIC设计的二进制文件,在FPGA上运行应用场景的软件代码,进行实际功能的模拟测试。
  • 模拟和版图:这部分了解不多,根据ASIC的最终设计,落实为最终的物理硬件电路

芯片研发软件的任务

在FREEZE之前,软件做什么?

原型验证部分(IC验证的重要组成)

前期准备:

  • 学习所负责的模块,熟悉应用场景
  • 根据应用场景,市场需求,模块功能,写出模块的CheckList(覆盖率一定要全面,从功能,性能,异常,实际应用等多方面考虑)
  • 然后和ASIC, DV,产品经理一起开会评审修改CheckList,得到确认的功能。
  • 根据芯片项目规划,给CheckList写出时间节点。
  • 完成每一个CheckList的自动化测试,尽可能少出现 手动测试。

验证过程

  • 等待ASIC的初版逻辑发布,并需要他们的设计文档,寄存器地址,功能等,针对每一个Case写出软件代码,在FPGA验证平台上验证自己CheckList列出的所有功能。
  • 如验证失败,则需要和 DV 去 核对配置是否正确。 如正确,则判断DV是否仿真可以验证通过,流程是否一致,如也有异常,则写出验证情况,反馈给ASIC。
  • 如验证成功,详细记录过程,并尽可能完成自动化测试脚本。 在多个版本间进行自动化测试。

在FREEZE和芯片流片中,软件做什么?

原型验证部分(IC验证的重要组成)

  • 完善自己的自动化测试脚本,使得测试覆盖率尽可能高,自动化集成尽可能完善,输出结果尽可能统一,异常调试尽可能方便定位。
  • 完成Corner自动化代码,便于后期的Corner分析
  • 完成SLT系统集成代码,便于后期的SLT自动筛片

系统软件部分

  • 根据内核标准,完成支持对应模块所有功能的驱动代码。
  • 根据应用场景,给上层应用提供比较完善的中间件代码。
  • 输出相关文档。

在流片后,软件做什么?

原型验证部分

  • 主要是芯片的点亮和验证,并根据验证情况写出文档
  • 完成SLT自动化测试。
  • 和DV一起完成Corner分析。

系统软件部分

  • 根据应用的需求,提供尽可能完善和标准的接口。

Corner分析

https://blog.csdn.net/jerryer121/article/details/86487946

ss、tt、ff分别指的是左下角的corner,中心、右上角的corner。

https://wenku.baidu.com/view/a967801d2b160b4e767fcf8d.html
image.png