导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思清华紫光联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。

文章目录

    • 一、SoC架构图:核心功能和设计目标
      • 1.1、SoC – 核 CORE
      • 1.2、SoC – 存储 MEM
      • 1.3、SoC – 外设 IO
        • 1.3.1、 DMA
        • 1.3.2、 Ext_SRAM Controller、SD_Memory 与 SD_Host
        • 1.3.3、典型低速外设
        • 1.3.4、内部组件
        • 1.3.5、剩余组件
      • 1.4、SoC – 总线 BUS
      • 1.5、其他模块
        • 1.5.1、MemBist
        • 1.5.1、Spare Cells
        • 1.5.1、IO MUX
      • 1.6、SoC IP
    • 二、SoC架构图:简述SoC的功能及应用场景
      • 2.1、数据存储 数据流
      • 2.2、无线传输 数据流
      • 2.3、关于Master和Slave
    • 三、SoC架构图:IP总线地址映射
    • 四、SoC架构图:Pin-MUX & PAD
    • 五、SoC架构图:版图布局 Floorplan
    • 六、SoC架构图:版图 layout – GDSII
    • 六、SoC架构图:Pin & 电源电压
    • 七、数字系统设计节点(SoC Design Node)
    • 参考

一、SoC架构图:核心功能和设计目标

SoC是基于通用处理器这样的思路进行设计的,与PC设计思路一样。即通用处理器是由 CORE + MEM 两部分组成,修改软件来实现不同的功能,电脑还是同一个电脑,硬件组成还都是一样的。

SoC架构图四大组成部分:

  • 1、核 CORE
  • 2、存储 MEM
  • 3、外设 IO
  • 4、总线 BUS

SoC总的架构图如下:

1.1、SoC – 核 CORE

对于核来讲,现在主流的核有三类:

  • CISC(Complex Instruction Set Computer – 复杂指令集计算机)
    • x86为代表,公司有AMD和INTEL,PC和Server用这类核比较多。
  • RISC(Reduced Instruction Set Computing – 精简指令集计算机)
    • ARM为代表,手机芯片、嵌入式系统等用这类核比较多。
      • ARM-M系列:低端,常用在微控制场景,如MCU
      • ARM-R系列:中端,常用在实时场景,如医疗器械,路由交换机
      • ARM-A系列:高端,常用在高端应用场景,如手机芯片
  • RISC-V(开源
    • 基于ARM和x86之间,可以进行灵活的切换和组装
    • 暂没有成熟的商用体系,没有生态支撑

架构图,左上角为SoC系统的核,此处使用的是ARM 公司的Cortex-M3/M4内核。

同时,I-Code表示指令代码,D-Code表示数据代码。JTAG用来调试芯片,下载调试程序使用。

注:I-CodeD-CodeI-CacheD-Cache,这个可选的,并不是每个SoC都会用到,需要根据实际芯片的规模和需求!

1.2、SoC – 存储 MEM

架构图,中间部分为SoC系统的存储,此处包含PFlash和SRAM两种。

  • PFlash(硬盘)中的数据掉电不丢失
    • 如果PFlash不够用,可以外扩Flash,如NFC(Nand Flash Controller)
  • SRAM(内存)中的数据掉电丢
    • SRAM是静态随机存储器(Static Random Acess Memory),与之相对的还有一种是动态随机存储器(Dynamic Random Acess Memory)。DRAM需要不断的刷新才能保持住数据,SRAM是不需要刷新的!
    • DRAM的密度很高,所以当存储数据容量很大的时候组出来的Memory面积就会小一些!SRAM通常用在小的SoC中!
    • 如果SRAM不够用,可以外扩SRAM,比如上图中的Ext_SRAM
  • core上电后,会到PFlash中取它的指令,来读取系统要运行的“软件”(代码),在PFlash启动之后,把所需的软件下载至SRAM中,最终在SRAM里运行“软件”。
    • 即BootLoader放在PFlash中,一上电便会将其load至SRAM中,CPU来SRAM取指来执行我们的程序!
  • SRAM存储速率较PFlash速率,故上电跑的程序是放在SRAM中,启动程序以及不需要的数据会存在PFlash中。

1.3、SoC – 外设 IO

外设 IO分为两部分:

  • 一个是高速外设 IO(AHB 100MHz):DMA、Ext_SRAM Controller、SD_Memory、SD_Host
  • 一个是低速外设 IO(APB 50MHz):SPI、UART、GPIO、I2C

1.3.1、 DMA

DMA(Direct Memory Access,直接存储器访问),使用场景如下:当CPU需要搬移SRAM中的大量数据时,此时如果使用CPU搬移,则会先将SRAM中的数据搬移至CPU的寄存器中,然后再取指令写操作等方式搬移至目的地。该方法效率较低,且占用了CPU的宝贵处理时间。此时就有了DMA的登场,CPU只需告诉DMA引擎,你需要从哪个地址搬移多少个数据到哪个地址,这样DMA就自己听话地去工作了,不再需要CPU的参与,减轻CPU的负荷。

DMA对外没有接口,这个也可以从架构图中看出。

1.3.2、 Ext_SRAM Controller、SD_Memory 与 SD_Host

Ext_SRAM Controller:通常是SRAM大小不够时,用作扩展使用。

通常SD_Memory连接一个诸如Camera的设备,将拍到的照片数据通过SD_Memory接口存储到SRAM中,然后SD_Host接口将SRAM中的数据保存至SD Card中,取出SD卡插入PC,就可以看到读取的照片了!

1.3.3、典型低速外设

典型的3个低速外设接口:I2C、UART、SPI,差异如下:

  • UART常用于长距离传输,但是速率较低。
  • I2C比UART速率快,但是速率不会太长;且I2C在短距离传输时,可以接多个Slave。UART是点点通信,1个UART接口只能接1个UART Slave。1个I2C Master接口,可以接多个I2C Slave;
  • SPI相较于UART和I2C速度会更高;1个SPI Master接口,可以接多个SPI Slave;SPI 占用的IO数也较I2C多!

外设与CPU进行通信,有两种方式:

  • CPU来查询我们的状态
  • 直接给CPU发送中断,CPU收到中断后会去处理中断程序

BootLoader程序和中断程序是事先写好的程序,放到FLASH中,一旦启动后便会将其LOAD至SRAM中! 一旦发生某个中断,便会根据中断向量号去查询中断程序去执行它。(了解即可)

注:主动发起数据我们称之为master;被动接受数据我们称之为slave。

1.3.4、内部组件

WDT:看门狗。我们的内核每隔一段时间喂一次狗,如果内核挂掉,看门狗溢出会产生一个中断,告诉外界,芯片已经挂死,需要处理。

Timerx:硬件计数器。CPU计数精读低,通常是us级,很难达到ns级。而我们的硬件计数器精度可以达到ns级别;另外,硬件计数,可以减小CPU的开销。

ICT:指令的计数,统计用的!

1.3.5、剩余组件

左下角是系统控制器和一些模拟组件:

  • System Controller:系统控制器
  • POR:Power On Reset,上电复位(模拟IP)
  • OSC:Oscillator,晶振
  • PLL:Phase Locked Loop,锁相环
  • VBG:电源管理
  • VR:Voltage Regulater,电压调节器

上述讲的IO小模块,以及本节介绍的模拟组件,我们一般都称之为IP

1.4、SoC – 总线 BUS

将上述介绍的IP进行互联的线,我们将其称之为总线。这里使用的是AMBA 2.0总线,包括AHB、APB两部分。

1.5、其他模块

1.5.1、MemBist

MemBist主要针对Memory,如SRAM。在制造过程中,可能会存在缺陷,当芯片回来之后,我们要进行一些制造型测试!MemBist是进行内建自测试!

这种内建自测试与其他IP外设测试不一样,其他IP外设测试通常是通过GPIO灌激励,然后将经过这些逻辑之后的激励通过另外一些GPIO引出,然后去对比Partner。而内建自测试是我这个测试,对SRAM的测试不需要通过外部的管脚,在SRAM外部会包一层Bist逻辑,然后相当于在内部触发一个使能信号,然后它就可以往SRAM中灌各种激励,然后把经过逻辑之后的激励输出,就可以完成这样一个内建自测试。这就是MemBist的功能。

1.5.1、Spare Cells

Spare Cells 主要是放在顶层,用于芯片后期,在投片时忽然发现有BUG,这时候要做一个叫ECO(Engineering Change Order,手动修改集成电路的过程)的东西,这个时候就可能会涉及到一些cell的替换,如果之前已经放了Spare Cells的话,就可以直接用Spare Cells,不需要再重新增加cell。如果增加cells,可能会导致整个Die的面积放不下!所以相当于是提前预留放了一些为我们做ECO准备的Spare Cells,把面积在那占着,这样的话,整个FloorPlan就不用了动了!Cell在那放着,尽可能最小的去影响我们最终的FloorPlan。

1.5.1、IO MUX

管脚复用,类比STM32。

1.6、SoC IP

二、SoC架构图:简述SoC的功能及应用场景

  • 该芯片是一个SoC芯片,主要功能是无线通信数据存储功能,主要的应用场景是数据相机的存储卡。
    • 无线通信功能是通过APB总线上的SPI接口外接一个WIFI芯片,实现无线通信和数据传输功能。
    • 数据存储功能主要是NandFlash控制器,实现存储功能。但是该芯片采用了替换方案,使用了SD-Host接口,外接SD Card的方式进行存储数据。
    • 典型的应用场景是:数码相机拍照时,将照片通过SD-Memory控制器接口,放入SRAM暂存,最后通过SD Host接口,将照片存储到外接的SD memory卡中,然后手机/PC端用户,可以连接到WiFi上,通过手机/PC下载SD Card中存放的视频到手机/PC。
      • 这种应用在记者、摄影爱好者,数码相机爱好者等有应用需求。当把数码相机中的图片下载到手机上后,可以通过移动网络,上传至社交媒体;现场记者,则可以通过将照片及时发送给电视台、媒体等提供及时的照片素材。
  • 随着智能手机的发展,尤其是高清摄像头的发展,这种无线存储芯片方案的应用场景在萎缩。

2.1、数据存储 数据流

数据存储功能的数据流向示意图(以DMA搬移SRAM数据为例):数据流按照箭头,依次是:红 -> 绿 -> 蓝。(下图标号所在位置是该颜色起始位置)

问:为什么不直接从Camera -> SD Card?如下图:

答:数据通路是可以通的,但是Camera发送数据的速率与SD Card存储数据的速率,这两个并不一定是完全一样的,这样就可能导致数据错误。将数据存入SRAM,相当于起一个缓冲的作用!这样我数据存进来之后,是存至SD Card还是通过WiFi进行无线传输,都可以通过CPU进行灵活控制!

2.2、无线传输 数据流

无线传输功能的数据流向示意图(以DMA搬移SRAM数据为例):数据流按照箭头,依次是:红 -> 蓝 -> 棕。(下图标号所在位置是该颜色起始位置)

2.3、关于Master和Slave

  • CPU通常是一个Master,数据的发起者;
  • 存储系统(PFlash、SRAM)是一个Slave,被动的接收别人发过来的命令,要来读哪个地址的数据了;
  • 两个AHB高速外设:SD_Memeory和SD_Host。既有Master口,又有Slave口。SD_Memory模块工作时,数据是通过Master口进行传输,Slave口更多指的是CPU对其进行一些配置(IP可以工作在多种模式,控制信号可以通过Slave口对其进行配置);SD_Host模块同理。
  • 慢速外设:SPI/UART/GPIO/I2C/Timer/WDT/ICT等,都是Slave口,是CPU来告诉他们要传什么数据出去(CPU对其进行配置)。

三、SoC架构图:IP总线地址映射

基地址:Base Address
偏移地址:Offset Address

注:基地址 + 偏移地址 可类比 区号 + 号码。低16位是偏移地址,高16位是基地址。

每一次的访问都是基于地址空间进行访问的,所以会把每一个系统进行划分,划分成为一个地址空间。

各个外设地址如下表:

Block NameSpace SIzeStart AddrEnd Addr
PFlash256K0x0000 00000x0003 FFFF
PFlash reg8K0x0006 00000x0006 1FFF
ext SRAM(nor) reg8K0x0007 00000x0007 1FFF
DMA8K0x0008 00000x0008 1FFF
SD Memory8K0x000A 00000x000A 1FFF
SD Host8K0x000C 00000x000C 1FFF
Timer0, Timer18K0x0020 00000x0020 1FFF
SPI-m8K0x0021 00000x0021 1FFF
ext SRAM(nor)128M0x8000 00000x87FF FFFF
SPI-s8K0x0022 00000x0022 1FFF
UART8K0x0023 00000x0023 1FFF
GPIO8K0x0024 00000x0024 1FFF
I2C8K0x0026 00000x0026 1FFF
ICT8K0x0028 00000x0028 1FFF
WDT8K0x0029 00000x0029 1FFF
system controller8K0x002A 00000x002A 1FFF
SRAM64K0x0040 00000x0040 FFFF

软件工程师写模块时,通常只关注偏移地址!

  • 一般一个地址空间可以存储8bit数据,故上述单位是KB

四、SoC架构图:Pin-MUX & PAD

  • PAD:芯片与外部通信的一个接口
  • PIN-MUX:主要用来减少PAD数目,为什么要减少PAD?
    • ①、PAD本身就挺大的,PAD过多,很占边长,造成规划的Die放不下。【芯片外围边长留足够的余量】
    • ②、PAD本身是模拟器件,PAD过多,会增加功耗!【总体功耗也会有收益】
  • 上图展示的三种数字PAD,从上到下分别是:Input Only、Output Only、Bidirection 三种。工程上通常上都是 Bidirection ,使用的时候直接控制EN信号,来使其输入或输出!
  • 模拟PAD:如LVDS;
  • VR(电压调节器) PAD

五、SoC架构图:版图布局 Floorplan

:版图布局 Floorplan 布局可类比 PCB 的布局

Floorplan 中可以看到的是各个Cell(数字电路)和各个IP(模拟电路)。

  • 模拟 IP (MEM/FLASH)放到靠近DIE的边角上,提高空间利用率
  • DIE的内部会放数字逻辑

这样的放置原则是为了提高整个空间的利用率!MEM这个模拟IP,可以认为是一个硬核,如果它放中间,那么周围的绕线就会很麻烦。如果是数字的话,那就是各个离散的Cell,走线容易,空间利用率高!

六、SoC架构图:版图 layout – GDSII

:版图 layout 可类比 PCB 的布线

下面的版图 layout 中,中间紫色部分的就是对应 Floorplan 中标注的数字逻辑部分,周围靠近Die的就是模拟IP!

  • 工艺水平:110nm e-flash
  • DIE大小:3mm x 4mm = 12 mm^2
  • 晶圆wafer大小:8英寸,可以生成3600片DIE(3mm x 4mm),1个wafer的制造成本在1000美金。
  • 良率(yield)【wafer中有多少个DIE是可用的】:>95%(通过ATE去筛选不能用的DIE)

六、SoC架构图:Pin & 电源电压

下图为外围的原理图,从中可以看到管脚分布和电压域划分。

  • 电压域的划分工作通常由架构师完成,前端人员是接触不到这个东西的!
  • 电压域通常可划分为:数字电压域(CORE、IO)、模拟电压域(不同模拟IP,不同的电压)

七、数字系统设计节点(SoC Design Node)

芯片的诞生,从前期到后期的整个流程:

  • ①、进行市场调研,有没有市场需求,具不具备很好的商业价值,做芯片很烧钱,1个wafer1w美金,还要买一些IP等都要花钱!做出来之后能否赚钱,有没有人买单,这个很重要!
  • ②、根据市场需求,算法团队根据要实现的功能,做一个算法模型,算法可以实现(仿真成功),可以达到市场需求,则进行下一步。
  • ③、进行芯片的实现架构设计,包括:软硬件划分(哪些部分用软件实现,哪些部分用硬件实现)、硬件上划分多少个模块等,编写架构文档(AS,Architecture Specification),架构也分为好多层次,比如系统级,电路级等。接下来还有编写一个设计文档(DS,Design Specification)
  • ④、编写RTL代码,进行功能验证(EDA仿真验证、FPGA原型验证)和代码复查
  • ⑤、通过综合工具,将其转化为Netlist,即将RTL代码映射(MAP)成门级网表(STD CELL),同时进行形式验证(RTL逻辑功能和Netlist的逻辑功能对比,看看综合工具是否把RTL某些功能给优化掉),时序验证(实现Netlist后,timing setup 能否满足)
  • ⑥、接下来进行物理实现,GDSII也是一个网表,只不过是包含了器件位置信息的网表。Netlist仅仅只是逻辑信息。然后进行一些后仿真和签收复查。
  • ⑦、投片,在wafer上生成我们的芯片。生产过程有没有问题,通过ATE测试,ATE测试的partner是在前面做RTL时的DFx做的,Membist,Scan扫描,都是在前期做好的设计,芯片回来之后,会把这些电路启动,进行ATE测试!测芯片本身,有没有制造功能的问题!
  • ⑧、最后进行应用测试,即功能测试。投放市场。

从上图看出

  • ①、芯片的实现是需要很多的团队,很多个环节,一步步实现的。
  • ②、每一个环节的交付件(交付标准)是变化的,每一步都是需要有不同的方法验证。做IC验证,主要进行RTL的功能验证,要明确从事的工作在整个设计流程中的位置!

基本技能、专业技能

参考

  • 芯片测试术语 ,片内测试(BIST),ATE测试
  • IC科普文:ECO的那些事