引言

你已经了解RTL代码如何转换成网表

  • 但网表中只包含逻辑信息
  • 要将电路制造出来, 还需要了解标准单元的物理信息

 

本次课内容:

  • PDK和标准单元库中的内容
  • 工艺视角的芯片结构
  • 标准单元的属性和分类

 

这次课包含很多概念和术语

  • 了解后, 你就可以和后端工程师对话了

PDK和标准单元库

可生产的开源PDK

上次课提到的cell.lib只是一个标准单元库的简单示例

接下来以ICsprout55这个开源PDK为示例, 帮助大家了解PDK中的内容

  • yosys-sta默认使用ICsprout55

 

ICsprout55是个开源PDK, 也是可生产的PDK

  • 是国内发布的首个开源PDK, 也是截至发布时业界最先进的开源PDK
    • 对全球的开源芯片生态来说是一项重要的突破

 

一生一芯曾经采用另一款开源PDK nangate45

  • 仅面向学术研究, 其中标准单元的数量和质量也与商业PDK有一定差距
  • 而且不能用于流片, 没有工厂将其用于产线中

ICsprout55的发布, 让我们向基于开源IP+开源SoC+开源EDA+开源PDK完成一颗全开源处理器芯片的流片这个目标迈进了一大步

PDK的内容

ICsprout55 PDK中的部分文件如下

  • 均为文本文件, 可用编辑器打开阅读
.
├── IP
│   ├── IO        # IO库
│   └── STD_cell  # 标准单元库
│       └── ics55_LLSC_H7C_V1p10C100   # 版本号
│           ├── ics55_LLSC_H7CL        # LVT标准单元
│           │   ├── cdl
│           │   │   └── ics55_LLSC_H7CL.cdl        # 标准单元的晶体管级信息
│           │   ├── cell_list
│           │   │   └── ics55_LLSC_H7CL.txt        # 标准单元的名称列表
│           │   ├── doc                            # 标准单元的文档
│           │   ├── lef
│           │   │   └── ics55_LLSC_H7CL.lef        # 标准单元的物理几何信息
│           │   ├── liberty
│           │   │   └── ics55_LLSC_H7CL_typ_tt_1p2_25_nldm.lib   # 标准单元的逻辑功能
│           │   │                                                # 和PPA等信息
│           │   └── verilog
│           │       └── ics55_LLSC_H7CL.v          # 标准单元的verilog行为仿真模型
│           └── ics55_LLSC_H7CR
└── prtech
    └── techLEF
        └── N551P6M.lef    # 工艺相关的设计规范

标准单元库的使用

ICsprout55中, 标准单元库名称为ics55_LLSC_H7C_V1p10C100

  • ics55是ICsprout55的简写, LLSC含义为Low Leakage Standard Cell, H7表示标准单元的高度为7个轨道, C表示大版本号, V1p10C100表示具体的小版本

 

在处理器设计的全流程中, 不同的设计阶段会使用不同的文件

  • 综合的工艺映射阶段会读入.lib文件
    • 将逻辑上功能等价的子电路映射到相应的标准单元
  • 进行网表仿真时会读入.v文件
    • 让RTL仿真器进行标准单元级别的仿真, 从而验证综合后的网表功能符合预期
  • 布局时需要读入.lef文件
    • 根据标准单元的尺寸等信息决定每个标准单元的位置

工艺视角的芯片结构

芯片结构

在半导体制造中, 芯片的物理结构是分层次的

 

某工艺的芯片侧视图:

  • 最底层是硅衬底(silicon substrate), 包含晶体管的源极和漏极
  • 其上是绝缘层(dielectric), 也称栅氧层, 通常使用二氧化硅作为材料
  • 再上方是多晶硅层(poly-silicon), 作为晶体管的栅极
---------------   M7    ------ 电源
  | | | | | |
---------------   M6    ------ 时钟
  | | | | | |
---------------   M5    --+
  | | | | | |             |
---------------   M4      |
  | | | | | |             +--- 标准单元间的连接
---------------   M3      |
  | | | | | |             |
---------------   M2    --+
  | | | | | |
---------------   M1    ------ 晶体管间的连接
  | | | | | | <------- 通孔
===============  多晶硅  --+
+++++++++++++++  绝缘层    +--- 晶体管
ooooooooooooooo  硅衬底  --+

金属层

在多晶硅层上方还有多个金属层(metal)

 

  • 利用导电性质实现信号传输, 连接不同晶体管, 实现不同门电路或标准单元的功能
  • 连接方式有层内连接和跨层连接两种
    • 前者在同一个金属层内进行走线, 后者通过不同金属层之间的通孔(via)连接
---------------   M7    ------ 电源
  | | | | | |
---------------   M6    ------ 时钟
  | | | | | |
---------------   M5    --+
  | | | | | |             |
---------------   M4      |
  | | | | | |             +--- 标准单元间的连接
---------------   M3      |
  | | | | | |             |
---------------   M2    --+
  | | | | | |
---------------   M1    ------ 晶体管间的连接
  | | | | | | <------- 通孔
===============  多晶硅  --+
+++++++++++++++  绝缘层    +--- 晶体管
ooooooooooooooo  硅衬底  --+

 

在RTL逻辑设计中各个元件之间的连接关系, 在物理上最终是通过金属层提供的连接功能实现的

金属层(2)

  • 为了区分不同的金属层, 通常对它们进行编号
    • 编号越大, 层数越高
  • 不同金属层对走线宽度和距离有不同的要求, 充当不同作用
    • 根据中学的物理知识, 走线的电阻与横截面积成反比

 

金属层 线宽 走线间距 走线特性 作用
低层 电阻大, 传输距离短, 布线密度高 连接不同的晶体管, 从而构成门电路和标准单元
中层 电阻中, 传输距离中等, 布线密度中 连接不同的标准单元, 实现芯片的主要逻辑
高层 电阻小, 传输距离长, 布线密度低 电源

金属层(3)

不同的制造工艺, 其金属层数量可能不同

  • 例如, 前文的工艺结构简称为1P7M
    • P表示Poly, 即多晶硅层; M表示Metal, 即金属层
  • 1P7M中, M1为低层金属层, M2-M6为中层金属层, M7为高层金属层
    • 有5层中层金属层专门用于实现标准单元之间的连接

 

时钟信号需要连接大量的触发器, 其传输距离比一般的数据信号要长

  • 通常采用更大的线宽(例如数据信号线宽的2倍)
  • 习惯上会选择高层金属层的下面一层来实现时钟信号(如M6)

 

先进工艺会提供更多的金属层, 如1P9M, 1P11M

  • 提供更丰富的空间用于进行标准单元之间的连接
  • 但在制造过程中需要用到更多的金属层掩膜(mask), 故制造成本更高

工艺LEF文件

金属层的属性记录在PDK的工艺LEF(简称tech lef)文件中

  • .lef为后缀, LEF = Library Exchange Format格式(RTFM)
  • 以文本方式描述了相应工艺的金属层, 通孔, 布局规则等物理层信息
vim yosys-sta/pdk/icsprout55/prtech/techLEF/N551P6M.lef
LAYER MET1
  TYPE ROUTING ;
  DIRECTION HORIZONTAL ;
  PITCH 0.2 0.2 ;
  WIDTH 0.09 ;
  OFFSET 0.1 0.1 ;
  AREA 0.042 ;
  SPACING 0.09 ;
  MAXWIDTH 10 ;
  MINENCLOSEDAREA 0.18 ;
  CAPACITANCE CPERSQDIST 0.0007630 ;
  EDGECAPACITANCE 0.0000339 ;
  RESISTANCE RPERSQ 0.1122 ;
  DCCURRENTDENSITY AVERAGE 1.5 ;
END MET1
 WIDTH
   |
 <-+->
|     |                          |     |
|     |                          |     |
|     |                          |     |
|wire |                          |     |
|     |                          |     |
|     |                          |     |
|     |                          |     |
|     |           PITCH          |     |
|     |             |            |     |
|     |             |            |     |
|     |             |            |     |
   |<---------------+-------------->|
  • TYPE字段为ROUTING, 表示该层用于布线
  • WIDTHPITCH分别以\(um\)为单位给出最小线宽和最小走线间距

工艺LEF文件中的POLY

LAYER POLY
  TYPE MASTERSLICE ;
END POLY

多晶硅层LAYER POLY的定义中只有一个TYPE字段, 没有其他字段

  • 因为多晶硅层连同绝缘层和硅衬底共同用于实现晶体管
  • 而晶体管的参数由工艺决定, 这对后端物理设计过程来说是相对固定的
    • 不像金属层那样可以让EDA工具根据设计需求进行动态布线

 

在LEF文件中只需要声明多晶硅层的存在即可

  • 更多工艺细节记录在其他文件(如GDS)中

 

类似地, 绝缘层和硅衬底从功能上与多晶硅层紧密绑定, 甚至不需要在LEF文件中出现

复杂处理器和多层工艺

对于乱序超标量的高性能处理器, 其拓扑结构复杂

  • 标准单元之间存在较多连线
  • 使得布线阶段的压力较大, 走线需要迂回
    • 不仅增加了芯片的面积
    • 还增加了线延迟, 降低了芯片的频率
    • 布线还可能因为过分拥堵而失败, 从而无法制造出功能正确的芯片

 

因此, 高性能处理器的设计通常选择金属层多的工艺

  • 通过更丰富的布线空间来缓解布线阶段的压力

 

例如, 香山处理器团队在设计过程中尝试将工艺从1P9M切换到1P11M

  • 无需改动RTL代码, 即可降低线延迟, 提升处理器的主频

标准单元的属性

标准单元的命名

PDK提供的标准单元库通常包含很多标准单元

  • 为了方便得知标准单元的属性, 标准单元的命名通常遵循一定规范
  • 在ICsprout55中, 标准单元的命名遵循功能+驱动能力+H+轨道数+阈值电压的命名方式
    • 对于命名为NAND2X1H7L的标准单元
      • 功能为二输入的与非门; 驱动能力为X1, 即1倍标准驱动能力; 其高度(H)为7个轨道; 阈值电压为LVT
    • 对于命名为OR3X0P5H7R的标准单元
      • 功能为三输入的或门; 驱动能力为X0P5, 即0.5倍标准驱动能力(P表示小数点); 其高度(H)为7个轨道, 阈值电压为RVT

 

接下来以NAND2X1H7L为例, 查阅标准单元库中的相关文件, 进一步了解标准单元的各种属性

LIB文件 - 功能, 时序和功耗

LIB文件以.lib为后缀, 采用Liberty Timing File格式

  • 以文本方式描述了标准单元的功能, 以及在某种条件下的时序和功耗等属性
cd yosys-sta/pdk/icsprout55/IP/STD_cell/ics55_LLSC_H7C_V1p10C100/
vim ics55_LLSC_H7CL/liberty/ics55_LLSC_H7CL_typ_tt_1p2_25_nldm.lib

LIB文件由一些头部字段和若干个标准单元(cell)的描述组成

 cell (NAND2X1H7L) {
    area : 1.12;
    // ......
    leakage_power () {
      value : 0.312371;
      when : "(A * B * !Y)";
      related_pg_pin : VDD;
    }
    // ......
    pin (Y) {
      direction : output;
      function : "(!A) + (!B)";
      // ......
      timing () { ......  }
      internal_power () { ...... }
    }

LIB文件 - 功能, 时序和功耗(2)

面积属性的含义:

  • 芯片是一个三维物体, 芯片中的标准单元也存在于三维空间中
  • 假设将芯片水平放置, 并建立一个三维坐标系
    • 标准单元的面积是指标准单元在平面\(xOy\)中投影的面积, 也即俯视图中的面积
    • 考虑芯片的工艺结构, 标准单元的面积也是其在多晶硅层和低层金属层中所占的面积

 

LIB文件主要用于综合, 时序分析和功耗分析

  • yosys在进行工艺映射时会读入LIB文件, 并根据标准单元function字段, 决定将哪些子电路映射为何种标准单元
  • iSTA工具会根据标准单元的timing字段, 计算出各种情况下的每个标准单元的逻辑延迟, 最后报告网表的若干条最长路径

标准单元数据手册: 可读性比LIB文件更好

Verilog文件 - 行为模型

为了验证综合后的网表与综合前的RTL设计等价, 一种方式是网表仿真

  • 即结合标准单元的行为, 对网表进行仿真

RTL仿真器通常无法识别LIB文件及其function字段

  • 因此, 标准单元库通常还提供标准单元的Verilog行为模型
cd yosys-sta/pdk/icsprout55/IP/STD_cell/ics55_LLSC_H7C_V1p10C100/
vim ics55_LLSC_H7CL/verilog/ics55_LLSC_H7CL.v
  • 用Verilog语言的内建原语nand来实现二输入与非门的功能
  • 网表仿真的输入 = 网表文件 + 标准单元的行为模型文件
module NAND2X1H7L (Y, A, B);
output Y;
input A, B;

  nand (Y, A, B);

endmodule //NAND2X1H7L

RTL仿真器将会按照模型文件中的模块定义对网表文件中的标准单元进行实例化, 从而开展网表层次的仿真工作

  • ICsprout55提供的行为模型还包含丰富的时序信息(specify语句)
    • 可以支持用户开展网表层次的时序仿真工作

LEF文件 - 物理几何信息

除了工艺LEF文件, 还有一种和标准单元相关的LEF文件

  • 用于描述标准单元的物理几何信息
cd yosys-sta/pdk/icsprout55/IP/STD_cell/ics55_LLSC_H7C_V1p10C100/
vim ics55_LLSC_H7CL/lef/ics55_LLSC_H7CL.lef
  • SYMMETRY X Y表示标准单元可以沿\(x\)轴或沿\(y\)轴对称放置
    • 可优化布局的效果(如到某端口的线延迟等)
  • PIN字段用于描述指定引脚的一些属性, 包括方向(DIRECTION)和端口的几何形状(PORT)等
    • 其中的PORT又描述了端口需要在MET1层占用一个矩形, 形状通过RECT字段给出
MACRO NAND2X1H7L
  CLASS CORE ;
  ORIGIN 0 0 ;
  FOREIGN NAND2X1H7L 0 0 ;
  SIZE 0.8 BY 1.4 ;
  SYMMETRY X Y ;
  SITE core7 ;
  PIN A
    DIRECTION INPUT ;
    USE SIGNAL ;
    PORT
      LAYER MET1 ;
        RECT 0.055 0.425 0.23 0.59 ;
    END
  END A
  ......
END NAND2X1H7L

LEF文件中的对齐规则

  • SITE给出了标准单元在放置时需要对齐的规则
    • 字段的值core7表示引用了另一处的对齐规则, 位于工艺LEF文件中:
  • SYMMETRY Y表示单元可以沿\(y\)轴对称放置
  • SIZE 0.200 BY 1.400给出了对齐规则为0.2 X 1.4
SITE core7
    SIZE 0.200 BY 1.400 ;
    CLASS CORE ;
    SYMMETRY Y  ;
END core7

上述对齐规则规定, 摆放标准单元时, \(x\)轴坐标必须为0.2的整数倍, \(y\)轴坐标必须为1.4的整数倍

  • NAND2X1H7LSIZE字段给出了标准单元的尺寸
    • 0.8 BY 1.4符合对齐规则

一般地, 可以认为SITE定义了一个网格单元

  • 所有标准单元从尺寸上来看, 都是由一个或多个网格单元组成的矩形

LEF文件详细描述了标准单元的几何外形信息, 帮助EDA工具将标准单元正确地摆放在芯片中

CDL文件 - 晶体管结构描述

.cdl为后缀, 是一种电路描述语言(Circuit Description Language)

  • 以文本方式描述了标准单元的晶体管结构
cd yosys-sta/pdk/icsprout55/IP/STD_cell/ics55_LLSC_H7C_V1p10C100/
vim ics55_LLSC_H7CL/cdl/ics55_LLSC_H7CL.cdl

CDL文件中对晶体管结构的描述格式如下:

.SUBCKT 子电路名称 端口1 端口2 ...
晶体管实例名称 漏极 栅极 源极 衬底 晶体管类型 沟道宽度 沟道长度
...
.ENDS
.SUBCKT NAND2X1H7L A B VDD VSS Y
*.PININFO A:I B:I Y:O VDD:B VSS:B
MMN0 Y B net6 VSS nm1p2_lvt_lp W=210n L=60n m=1
MMN1 net6 A VSS VSS nm1p2_lvt_lp W=210n L=60n m=1
MMP1 Y B VDD VDD pm1p2_lvt_lp W=270n L=60n m=1
MMP0 Y A VDD VDD pm1p2_lvt_lp W=270n L=60n m=1
.ENDS

CDL文件主要用于进行晶体管层次的SPICE仿真, 以及检查GDS版图与网表逻辑的一致性, 后者称为LVS(Layout Versus Schematic)

CDL文件 - 晶体管结构描述(2)

.SUBCKT NAND2X1H7L A B VDD VSS Y
*.PININFO A:I B:I Y:O VDD:B VSS:B
MMN0 Y B net6 VSS nm1p2_lvt_lp W=210n L=60n m=1
MMN1 net6 A VSS VSS nm1p2_lvt_lp W=210n L=60n m=1
MMP1 Y B VDD VDD pm1p2_lvt_lp W=270n L=60n m=1
MMP0 Y A VDD VDD pm1p2_lvt_lp W=270n L=60n m=1
.ENDS
  • 通过.SUBCKT定义名为NAND2X1H7L的子电路(即标准单元)
    • 有5个端口, 依次为A, B, VDD, VSSY
    • *开头的行是注释
  • MMN0 Y B net6 VSS nm1p2_lvt_lp W=210n L=60n m=1
    • 实例化一个名为MMN0的nMOS晶体管
    • 漏极和端口Y相连, 栅极和端口B相连, 源极和线网net6相连, 衬底和端口VSS相连
    • 采用的晶体管类型为nm1p2_lvt_lp, 沟道的宽度和长度分别为\(0.21um\)\(0.06um\)

GDS文件 - 物理版图

.gds为后缀, 包含了制造某标准单元的所需的所有物理和工艺信息

  • 并非文本文件, 需要专门的工具来解析读取

 

ICsprout55的GDS文件暂未开放

 

一生一芯对GDS文件中的具体内容不作要求, 故此处不展开介绍

标准单元的分类

1. 逻辑门单元

包括基本逻辑门(与门, 或门, 非门等)和复杂逻辑门

 

OAI22X1H7L这个标准单元的功能比单一的逻辑门更复杂

  • 根据德摩根定律, 对OAI22X1H7L输出端口的逻辑表达式进行转换:
(!A0 * !A1) + (!B0 * !B1) = !(A0 + A1) + !(B0 + B1) = !((A0 + A1) * (B0 + B1))

这个标准单元的功能包含两个二输入或门, 一个二输入与门和一个非门

 

事实上, OAI22的命名是有其含义的:

  • 其中OAI表示Or-And-Invert, 22表示两组输入信号, 每组各两个
    • 假设输入信号分别为A0, A1, B0, B1
    • 先对每组信号内部进行Or运算, 得到A0 | A1B0 | B1
    • 再对结果进行And运算, 得到(A0 | A1) & (B0 | B1)
    • 最后对结果进行Invert运算, 得到!((A0 | A1) & (B0 | B1))

复杂逻辑门的意义

考虑标准单元的面积:

area(OAI22X1H7L) = 1.96
area(OR2X1H7L)*2 + area(AND2X1H7L) + area(INVX1H7L) = 1.68*2 + 1.68 + 0.84 = 5.88

OAI22X1H7L的面积, 比采用功能等价的多个逻辑门单元所花费的面积要小得多

  • 因为通过晶体管之间的串联和并联来实现的逻辑功能, 比通过与门或门来实现相应的逻辑功能, 代价要低很多
    • 不仅仅体现在面积上, 还体现在延迟和功耗上

 

将复杂逻辑门作为标准单元提供, 能让芯片具备更好的PPA

标准单元的驱动能力

类似X1, X4等后缀, 表示这个标准单元的驱动能力(drive strength)

  • 驱动能力是指标准单元在维持指定电压范围时能驱动或吸收的电流
  • 它会影响下游标准单元翻转所需的时间
  • NAND2X1H7L, NAND2X2H7LNAND2X4H7L在逻辑功能上完全等价
    • 但NAND2X4H7L能提供更大的驱动能力, 能使其下游逻辑翻转得更快
    • 不过这需要更大或更多的晶体管来实现
      • 因此NAND2X4H7L具有更大的面积, 其功耗也更高

 

  • 考虑不同驱动能力在性能, 面积, 功耗等指标上的权衡
    • 通常在影响频率的关键路径上使用驱动能力较高的标准单元
      • 从而降低关键路径的延迟, 提升芯片的频率
    • 在不影响频率的非关键路径上使用驱动能力较低的标准单元
      • 从而在不降低芯片频率的情况下, 降低芯片整体的面积和功耗

2. 时序单元

包含触发器, 锁存器等

  • 其中又包含有/无清零端/置位端等各种类型
  • 如触发器DFFX1H7L

3. I/O单元

芯片需要通过I/O单元(输入输出单元)来与外界进行通信

  • I/O单元用于将芯片内部的I/O信号和金属压焊块(pad)连接起来
    • 芯片生产后, 封装工序会从I/O单元的金属压焊块中引出金属引脚
    • 从而允许芯片外部的信号通过引脚与芯片内部的I/O信号进行交互

 

I/O单元可以参考相关LIB文件:

cd yosys-sta/pdk/icsprout55/IP/IO/ICsprout_55LLULP1233_IO_251013/
vim liberty/ICSIOA_N55_3P3_tt_1p2_3p3_25c.lib

I/O单元可继续分类如下:

  1. 数据I/O单元(也称GPIO), 用于提供数据信号的输入输出, 如P65_1233_PBMUX
  1. 核心电源单元, 用于为芯片内部的晶体管提供电源, 包括源极的电源(VSS)和漏极的电源(VDD), 如P65_1233_VSS1P65_1233_VDD1

3. I/O单元(2)

  1. I/O电源单元, 用于为数据I/O单元(即第1类I/O单元)提供电源, 如P65_1233_VSSIO3P65_1233_VDDIO3
    • 数据I/O单元通常比一般的标准单元要复杂, 因此其供电需求也不同于一般的标准单元
      • 故不能使用核心电源单元(即第2类I/O单元)为数据I/O单元供电

 

虽然I/O单元也是标准单元库中的一部分, 但它们的面积比一般的标准单元要大几个数量级

  • 这是因为, 与芯片外界通信对I/O单元的功能提出了更多需求
    • 需要具备很强的驱动能力来向芯片外部输送信号
    • 需要集成保护电路来防止外部的静电对芯片内部造成损害
    • 需要符合芯片引脚的物理尺寸和焊接要求(如间距, 金属层厚度, 保留空白区域避免短路)
  • 因此, I/O单元的电路层实现要比一般的标准单元复杂得多

4. 驱动单元

用于增强信号的驱动能力, 保证信号完整性, 优化时序和负载

  • 当信号传输距离过长或下游电路过多(高扇出)时, 信号可能会因为驱动能力不足而导致传输延迟过高
    • 甚至使得信号失真从而导致错误
  • 插入驱动单元有助于缓解上述问题

 

具体分为两类:

  1. 逻辑正向驱动单元, 又称缓冲器(buffer), 其输出在逻辑上和输入完全相同
    • 包括BUFX1H7L, BUFX2H7L, BUFX4H7L
      • X后的数字最大, 单元的驱动能力越强
  1. 逻辑反向驱动单元, 又称反相器(inverter), 其功能和非门相同
    • 同样也存在多种驱动能力

5. 物理单元

本身没有逻辑功能, 主要用于解决后端物理设计中与电路逻辑功能无关的特定问题

 

一些常见的物理单元包括:

  1. 上拉/下拉单元
    • 这类单元没有输入, 只有输出, 分别提供逻辑0(低电平)和逻辑1(高电平)的功能
    • 包括TIELOH7LTIEHIH7L
  1. 填充单元(filler)
    • 用于填充芯片中的空白区域, 保证某些层(如电源层)的连续性, 避免制造过程导致的缺陷
    • 包括FILLER1H7L, FILLER2H7L

5. 物理单元(2)

  1. 去耦单元(decap)
    • 用于避免电路中大量单元同时翻转引起的动态电压降对电路的影响
    • 包括FILLCAP4H7L, FILLCAP8H7L
  1. 天线效应修复单元
    • 在芯片制造过程的离子刻蚀步骤中, 在一定条件下会引发电路上的天线效应
      • 这种效应会击穿晶体管, 使其失效
    • 在合适的位置添加这种标准单元可以消除天线效应, 从而保证芯片的正确性
    • 包括ANT2H7LANT4H7L

6. 宏单元

一种具有特定功能的, 被厂商(晶圆厂或IP厂商)预先设计好其物理实现的, 面积较大的标准单元

  • 如SRAM存储器, DDR phy模块等
    • 前者在处理器设计中经常使用

 

ICsprout55目前暂未开放相关的宏单元

7. 复杂功能单元

包括多路选择器, 半加器, 全加器, 比较器等

  • 相比于用逻辑门搭建出功能等价的电路, 以标准单元提供这些功能可以实现更优的PPA
  • MUX2X1H7L, MUXI2X1H7L, ADDHX1H7L, ADDFX1H7L

8. 时钟专用单元

专门用于处理时钟信号的单元, 包括时钟缓冲器, 时钟门控(clock gating)单元, 用于处理时钟信号的逻辑门单元等

  • ICGX1H7L, ICGNX1H7L

 

之所以不能用一般的标准单元(如与门, 缓冲器等)来处理时钟信号, 是因为时钟信号的特殊性:

  1. 时钟信号的细微变化可能会导致触发器无法正确工作
    • 时钟信号因抖动产生的毛刺可能会被触发器误认为时钟边沿的到来
  1. 时钟信号的延迟会影响触发器的时序, 进而影响整个电路的工作频率
  1. 电路中的触发器都需要接入时钟, 因此时钟信号的扇出非常大, 传输距离也很远, 需要很强的驱动能力
    • 根据前文对芯片内部结构的介绍, 时钟信号通常会采用更大的线宽

需要对时钟专用单元进行针对性设计, 使其具备低抖动, 低延迟, 高驱动能力等特性

9. 电源管理单元

用于实现低功耗设计, 包括电源门控(power gating)单元, 隔离单元等

 

ICsprout55目前暂未开放此类单元

10. 测试调试单元

用于支持芯片制造后的测试和调试

  • 包括扫描链(scan chain)单元, 内建自测试(Built-In Self Test, BIST)控制单元等
  • SDFFX1H7L, SDFFSX1H7L, SDFFRX1H7L

 

扫描链单元通常用于可测试性设计(Design for Testability, DFT)

  • 它们在一般触发器的基础上, 添加了扫描使能端SE(scan enable)和扫描输入端SI(scan input)
    • 当SE有效时, 用SI来更新触发器
  • 开发者可以通过外部的控制将特定状态注入到这种触发器中, 从而帮助开发者对制造后的芯片进行调试
  • 和一般的触发器相比, 扫描链单元的面积更大, 功耗也更高

标准单元分类小结

  1. 逻辑门单元
  2. 时序单元
  3. I/O单元
  4. 驱动单元
  5. 物理单元
  1. 宏单元
  2. 复杂功能单元
  3. 时钟专用单元
  4. 电源管理单元
  5. 测试调试单元

 

  • 通常来说, 前5类单元和时钟缓存器是必须的
    • 从而保证能正确实现各种设计的基本功能
  • 通过提供其他类型的单元, 用户可以实现更多需求
    • 针对指定的场景设计出更优的电路
    • 或实现更方便的芯片调试功能

PVT角

PVT角的概念

电路的延迟主要受三个因素的影响, 统称为PVT参数

  • 工艺(Process), 电压(Voltage)和温度(Temperature)

 

后端工程师一般会选取多个PVT参数的组合作为一系列环境

  • 在设计阶段尽可能保证芯片将来能在这些环境下工作
  • 这些环境称为PVT角(PVT corner)

 

在标准单元库中, 不同的PVT角体现为不同的LIB文件

  • 在这些LIB文件中, 标准单元的名称和面积都相同, 但延迟和功耗不同
  • 通过采用不同的LIB文件进行评估, 后端工程师可以了解芯片能否在对应PVT角下按预期工作

PVT角 - 工艺波动

工艺波动是指芯片制造过程中不可控的扰动因素

  • 晶圆中心的芯片所处的环境与晶圆边界的芯片有所不同
  • 晶体管金属层的厚度并非完全均匀
  • 晶体管衬底的掺杂浓度不均匀
  • ……

 

这些因素都会影响晶体管的电阻和电容, 最终影响晶体管的延迟表现

  • 可能会变快, 也可能会变慢

 

为了测试电路在各种晶体管延迟下都能正确工作, 一般会根据晶体管的工作速度定义若干情况

  • 这些情况称为工艺角(process corner)

PVT角 - 工艺角

工艺角通常用两个字母来命名, 分别表示nMOS和pMOS的工作速度

  • 工作速度分3种情况: t(typical), f(fast)和s(slow)
    • 其中, 快速和慢速都是相对与典型情况而言

组合出5种工艺角: ss, tt, ff, sffs

ss, ttff: nMOS和pMOS的工作速度基本保持一致

  • 只影响晶体管的延迟, 不影响晶体管整体的功能

sffs: nMOS和pMOS的工作速度一个变化而另一个变慢

    pMOS
     ^
     |    sf            ff
fast +   o-------------o
     |   |             |
     |   |       tt    |
     |   |      o      |
     |   |             |
     |   |ss           |fs
slow +   o-------------o
     |
     +---+-------------+---> nMOS
        slow          fast
  • 使得CMOS整体从0变成1与从1变成0时的延迟不同
    • 元件延迟参数的确定需要更加谨慎
  • 但出现的概率很低, 通常不考虑

工艺角和Intel处理器型号

由于工艺波动的存在, 同一批次的芯片可能会有不同的性能表现

  • Intel正好利用了这一点, 将同一批次中属于不同工艺角的芯片划分到不同层次的型号中进行销售

 

在Intel Core系列中:

  • 大部分性能表现属于tt工艺角的芯片以i5的型号进行销售
  • 少部分属于ff工艺角的芯片能运行在更高的频率
    • 以价格更高的i7型号进行销售, 以赚取更多利润
  • 剩下属于ss工艺角的芯片只能运行在比tt更低的频率
    • 以价格更低的i3型号进行销售, 避免将其作为废片丢弃

PVT角 - 电压波动

在芯片的工作环境中, 电压也并非恒定不变

  • 电流通过电源网络会根据其电阻形成电压降, 使得不同位置上的标准单元的输入电压并不完全相同
    • 靠近电源I/O单元的标准单元能获得较强的输入电压
      • 晶体管的工作速度较快
    • 远离电源I/O单元的标准单元由于电压降的存在, 相对而言它们获得的输入电压较低
      • 晶体管的工作速度也相对较慢
  • 电源也可能会存在白噪声
    • 对同一个位置的标准单元而言, 晶体管的工作速度也会随时间而波动

 

为了应对电压的波动, 后端工程师一般需要保证电路在标准工作电压\(v\)\(\pm 10\%\)区间(即\([0.9v, 1.1v]\))内能正确工作

PVT角 - 温度波动

温度也会影响晶体管的工作速度

  • 外部环境温度的影响
    • 有的芯片在工厂车间的高温环境中工作
    • 有的芯片在南北极的低温环境中工作
  • 即使外部环境相同, 芯片中不同位置的晶体管也会受到不同温度的影响
    • 在晶体管密度高或者晶体管翻转频率高的区域, 产生的热量也高
    • 相对于常温而言, 温度升高会使晶体管的工作速度变慢
      • 根据热力学效应, 粒子在高温状态下具有更高的能量
      • 因此半导体材料中的原子会在晶格中加剧振动
      • 受这种振动的影响, 晶体管沟道中电子移动的方向会被改变
      • 从而使电流降低, 进一步使得晶体管的工作速度下降

 

为了提升芯片的健壮性, 不同温度下的工作情况都需要考虑

PVT角和LIB文件

LIB文件的命名中通常会包含PVT角的信息

  • ss_1p08_125表示工艺角为ss, 电压为1.08V, 温度为125摄氏度
  • ff_1p32_m40表示工艺角为ff, 电压为1.32V, 温度为-40摄氏度

 

在集成电路领域, 类似1p08这种用p(表示point)替代小数点.的命名方式很常见

  • 一些早期的文件系统或EDA工具不支持文件名中包含小数点
  • 在书写密集的技术文档或字体很小的板卡上, 1p60的视觉区分效果比1.60更好, 尤其是小数点很容易看漏
  • 用字母m(表示minus)替代负号-也是出于相似的考虑
  • 不同厂商采用的命名规范可能有所不同
    • 用单位(如字母v)替代小数点(如用1v08表示1.08V)
    • 用字母n(表示negative)替代负号(如用n40表示-40摄氏度)

PVT角和芯片实测表现

用EDA工具在某个PVT角下评估一款芯片, 其实是回答:

  • 如果芯片将来在这个PVT角所描述的环境中工作, 其表现如何?

而芯片的实测表现与其真实的工作环境相关

  • 如果实际工作环境和设计芯片时采用的PVT角不一致, 则EDA工具报告的信息并不能完全代表芯片实测的表现

 

一些厂商可能会利用两者的差异来进行营销

  • 某厂商在芯片设计阶段采用ff_1p32_m40, EDA工具报告芯片最高可运行在2GHz的频率, 厂商便宣称其芯片频率达到2GHz
  • 但用户购买相关产品后, 发现芯片最高只能运行在1.5GHz
    • 用户是在常温(约25摄氏度)环境下使用芯片产品, 并不是-40摄氏度
    • 在一批芯片中, 工艺波动处于典型情况的芯片占大多数, 大部分用户购买到的都是这部分芯片, 而工艺波动落在ff范围内的芯片则是占少数

如果广告中的频率不是实测数据, 还要关注是在哪个PTV角下评估

阈值电压

阈值电压对晶体管的影响

回顾晶体管的工作原理

  • 栅极电压与源极电压之间的差值必须达到某个阈值, 晶体管才能导通

 

不同阈值电压的标准单元主要用于在延迟和静态功耗之间取得权衡

  • 延迟: 对于阈值电压较高的标准单元, 需要花费更多时间才能让晶体管从截止状态变成导通状态, 因此延迟较高
  • 功耗: 静态功耗主要由漏电电流产生
    • 在目前的CMOS技术中, 漏电电流中占比最多的部分是亚阈值电流(sub-threshold current)
    • 之所以存在亚阈值电流, 是因为晶体管从导通状态转换为截止状态时, 并非瞬间就进入完美的截止状态, 而是进入了亚阈值状态
    • 在这种状态下, 栅极附近仍然存在微弱的电场, 会吸引少量电子
    • 这些电子虽然不足以形成沟道连通源极和漏极, 但它们仍然会产生从漏极到源极的微小电流, 这就是亚阈值电流

阈值电压和静态功耗的关系

如果其他因子不变, 亚阈值电流\(I_{sub}\)和阈值电压\(V_T\)之间存在如下关系:

\[I_{sub} \propto Ae^{-BV_T}\]

其中\(A\)\(B\)是两个与\(V_T\)无关的因子

由于亚阈值电流在漏电电流中占比较大, 因此静态功耗可近似看成:

\[P_{static} = V_{DD}\cdot I_{leakage} \approx V_{DD}\cdot I_{sub} \propto V_{DD}\cdot Ae^{-BV_T}\]

其中, \(V_{DD}\)为电源电压

 

结论:

  • 阈值电压越高, 漏电电流越低, 静态功耗也越低
  • 当阈值电压降低时, 静态功耗却呈指数增长

阈值电压和标准单元

对于逻辑功能相同但阈值电压不同的标准单元, 其面积通常相同

  • 不同阈值电压是通过调整晶体管本身的参数来实现的
    • 如衬底的参杂浓度, 栅极绝缘层的厚度等
  • 这些参数的调整并不影响标准单元中晶体管的尺寸和排布, 因此不会影响标准单元的面积

 

通常将标准单元按阈值电压分如下几类

  • HVT(High Threshold Voltage) - 静态功耗最低, 但延迟最高
  • RVT(Regular Threshold Voltage)
    • 有些厂商称其为SVT(Standard Threshold Voltage)
  • LVT(Low Threshold Voltage)
  • ULVT(Ultra-Low Threshold Voltage) - 延迟最低, 但静态功耗最高
  • 有一些工艺还提供UHVT(Ultra-High Threshold Voltage)的标准单元

阈值电压的选取

后端工程师需要根据芯片的应用场景, 选择合适阈值电压的标准单元

  • 在低功耗应用场景中, 偏向选择HVT
  • 在高性能应用场景中, 偏向选择LVT甚至ULVT
  • 在两个目标都追求的场合, 可以选择混合设计方式
    • 在影响频率的关键路径上使用LVT或ULVT, 从而降低关键路径的延迟, 提升芯片的频率
    • 在不影响频率的非关键路径上使用SVT或HVT, 从而在不降低芯片频率的情况下, 降低芯片整体的静态功耗

 

例: 根据体系结构领域国际顶级会议MICRO上发表的香山论文, 第一代香山处理器芯片中不同电压阈值的标准单元的比例为:

  • ULVT 1.04%, LVT 19.32%, SVT 25.19%, HVT 53.67%

轨道数

轨道数的概念

轨道(track)数是标准单元高度的另一种衡量

  • 高度(height)并不是指标准单元在三维空间中\(z\)轴方向投影的度量, 而是在\(y\)轴方向投影的度量
  • 标准单元在\(x\)轴方向投影的度量称为宽度(width)

 

假设芯片水平放置:

三维空间 几何度量概念 后端尺寸概念
\(x\) 长度 宽度
\(y\) 宽度 高度
\(z\) 高度 厚度

轨道数和金属层

回顾: 金属层的PITCH属性描述了该层的最小走线间距

  • 为了方便EDA工具开展布局布线工作, 通常会让标准单元的高度取PITCH属性的整数倍
    • 这个倍数就是标准单元的轨道数
  • 金属层有很多, 但标准单元一定会使用M1金属层
    • 因此通常用M1金属层的PITCH属性作为轨道数计算的参考

 

在一种标准单元库中, 标准单元的高度通常是相同的

  • 从而进一步方便EDA工具开展布局工作
  • 因此, 也可以从轨道数的角度来描述不同标准单元库的标准单元
    • 例如, 某标准单元库的标准单元轨道数为6, 则称为6T标准单元

轨道数和PPA

  • 对于轨道数较少的标准单元(如6T, 7T)
    • 面积较小, 功耗较低; 但驱动能力较弱, 使得晶体管翻转时间较长, 故性能不高
  • 对于轨道数较多的标准单元(如12T, 13T)
    • 具备较高的性能; 但面积较大, 功耗也较高
  • 对于轨道数处于两者之间的标准单元(如9T, 10T)
    • 在性能,面积和功耗等指标上相对平衡

 

  • 有的PDK会提供不同轨道数的多种标准单元库
    • ICsprout55还提供了9T的标准单元库, 但目前暂未开放.
  • 后端工程师需要根据应用场景, 选择合适的轨道数
  • 但在选定标准单元库后, 电路中无法混合使用不同轨道数的标准单元
    • 和阈值电压不同: 在一个设计中可混合使用多种阈值电压的标准单元

总结

标准单元库和标准单元

  • 工艺视角的芯片结构
    • 硅衬底, 绝缘层, 多晶硅层, 多个金属层(1PxM)
    • 低层金属(连接晶体管), 中层金属(连接标准单元), 高层金属(电源)
    • 金属层的属性记录在工艺LEF文件中

 

  • 标准单元的属性记录在不同类型的文件中
    • LIB文件 - 功能, 时序和功耗
    • Verilog文件 - 行为模型
    • LEF文件 - 物理几何信息
    • CDL文件 - 晶体管结构描述
    • GDS文件 - 物理版图

 

  • 标准单元库的其他属性: PVT角, 阈值电压, 轨道数