
你已经了解RTL代码如何转换成网表
本次课内容:
这次课包含很多概念和术语
上次课提到的cell.lib只是一个标准单元库的简单示例
接下来以ICsprout55这个开源PDK为示例, 帮助大家了解PDK中的内容
yosys-sta默认使用ICsprout55
ICsprout55是个开源PDK, 也是可生产的PDK
一生一芯曾经采用另一款开源PDK nangate45
ICsprout55的发布,
让我们向基于开源IP+开源SoC+开源EDA+开源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文件
.lef文件
在半导体制造中, 芯片的物理结构是分层次的
某工艺的芯片侧视图:
--------------- M7 ------ 电源
| | | | | |
--------------- M6 ------ 时钟
| | | | | |
--------------- M5 --+
| | | | | | |
--------------- M4 |
| | | | | | +--- 标准单元间的连接
--------------- M3 |
| | | | | | |
--------------- M2 --+
| | | | | |
--------------- M1 ------ 晶体管间的连接
| | | | | | <------- 通孔
=============== 多晶硅 --+
+++++++++++++++ 绝缘层 +--- 晶体管
ooooooooooooooo 硅衬底 --+在多晶硅层上方还有多个金属层(metal)
--------------- M7 ------ 电源
| | | | | |
--------------- M6 ------ 时钟
| | | | | |
--------------- M5 --+
| | | | | | |
--------------- M4 |
| | | | | | +--- 标准单元间的连接
--------------- M3 |
| | | | | | |
--------------- M2 --+
| | | | | |
--------------- M1 ------ 晶体管间的连接
| | | | | | <------- 通孔
=============== 多晶硅 --+
+++++++++++++++ 绝缘层 +--- 晶体管
ooooooooooooooo 硅衬底 --+
在RTL逻辑设计中各个元件之间的连接关系, 在物理上最终是通过金属层提供的连接功能实现的
| 金属层 | 线宽 | 走线间距 | 走线特性 | 作用 |
|---|---|---|---|---|
| 低层 | 小 | 小 | 电阻大, 传输距离短, 布线密度高 | 连接不同的晶体管, 从而构成门电路和标准单元 |
| 中层 | 中 | 中 | 电阻中, 传输距离中等, 布线密度中 | 连接不同的标准单元, 实现芯片的主要逻辑 |
| 高层 | 大 | 大 | 电阻小, 传输距离长, 布线密度低 | 电源 |
不同的制造工艺, 其金属层数量可能不同
1P7M
P表示Poly, 即多晶硅层;
M表示Metal, 即金属层1P7M中, M1为低层金属层,
M2-M6为中层金属层, M7为高层金属层
时钟信号需要连接大量的触发器, 其传输距离比一般的数据信号要长
M6)
先进工艺会提供更多的金属层, 如1P9M,
1P11M等
金属层的属性记录在PDK的工艺LEF(简称tech lef)文件中
.lef为后缀, LEF =
Library Exchange Format格式(RTFM)TYPE字段为ROUTING, 表示该层用于布线WIDTH和PITCH分别以\(um\)为单位给出最小线宽和最小走线间距POLY层多晶硅层LAYER POLY的定义中只有一个TYPE字段,
没有其他字段
在LEF文件中只需要声明多晶硅层的存在即可
类似地, 绝缘层和硅衬底从功能上与多晶硅层紧密绑定, 甚至不需要在LEF文件中出现
对于乱序超标量的高性能处理器, 其拓扑结构复杂
因此, 高性能处理器的设计通常选择金属层多的工艺
例如,
香山处理器团队在设计过程中尝试将工艺从1P9M切换到1P11M
PDK提供的标准单元库通常包含很多标准单元
功能+驱动能力+H+轨道数+阈值电压的命名方式
NAND2X1H7L的标准单元
X1, 即1倍标准驱动能力;
其高度(H)为7个轨道;
阈值电压为LVTOR3X0P5H7R的标准单元
X0P5,
即0.5倍标准驱动能力(P表示小数点);
其高度(H)为7个轨道,
阈值电压为RVT
接下来以NAND2X1H7L为例, 查阅标准单元库中的相关文件,
进一步了解标准单元的各种属性
LIB文件以.lib为后缀,
采用Liberty Timing File格式
面积属性的含义:
LIB文件主要用于综合, 时序分析和功耗分析
function字段,
决定将哪些子电路映射为何种标准单元timing字段,
计算出各种情况下的每个标准单元的逻辑延迟,
最后报告网表的若干条最长路径标准单元数据手册: 可读性比LIB文件更好
为了验证综合后的网表与综合前的RTL设计等价, 一种方式是网表仿真
RTL仿真器通常无法识别LIB文件及其function字段
RTL仿真器将会按照模型文件中的模块定义对网表文件中的标准单元进行实例化, 从而开展网表层次的仿真工作
specify语句)
除了工艺LEF文件, 还有一种和标准单元相关的LEF文件
cd yosys-sta/pdk/icsprout55/IP/STD_cell/ics55_LLSC_H7C_V1p10C100/
vim ics55_LLSC_H7CL/lef/ics55_LLSC_H7CL.lefSYMMETRY X Y表示标准单元可以沿\(x\)轴或沿\(y\)轴对称放置
PIN字段用于描述指定引脚的一些属性,
包括方向(DIRECTION)和端口的几何形状(PORT)等
PORT又描述了端口需要在MET1层占用一个矩形,
形状通过RECT字段给出SITE给出了标准单元在放置时需要对齐的规则
core7表示引用了另一处的对齐规则,
位于工艺LEF文件中:SYMMETRY Y表示单元可以沿\(y\)轴对称放置SIZE 0.200 BY 1.400给出了对齐规则为0.2 X 1.4上述对齐规则规定, 摆放标准单元时, \(x\)轴坐标必须为0.2的整数倍,
\(y\)轴坐标必须为1.4的整数倍
NAND2X1H7L的SIZE字段给出了标准单元的尺寸
0.8 BY 1.4符合对齐规则一般地, 可以认为SITE定义了一个网格单元
LEF文件详细描述了标准单元的几何外形信息, 帮助EDA工具将标准单元正确地摆放在芯片中
以.cdl为后缀, 是一种电路描述语言(Circuit Description
Language)
cd yosys-sta/pdk/icsprout55/IP/STD_cell/ics55_LLSC_H7C_V1p10C100/
vim ics55_LLSC_H7CL/cdl/ics55_LLSC_H7CL.cdlCDL文件中对晶体管结构的描述格式如下:
CDL文件主要用于进行晶体管层次的SPICE仿真, 以及检查GDS版图与网表逻辑的一致性, 后者称为LVS(Layout Versus Schematic)
.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的子电路(即标准单元)
A, B, VDD,
VSS和Y*开头的行是注释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为后缀,
包含了制造某标准单元的所需的所有物理和工艺信息
ICsprout55的GDS文件暂未开放
一生一芯对GDS文件中的具体内容不作要求, 故此处不展开介绍
包括基本逻辑门(与门, 或门, 非门等)和复杂逻辑门
OAI22X1H7L这个标准单元的功能比单一的逻辑门更复杂
OAI22X1H7L输出端口的逻辑表达式进行转换:(!A0 * !A1) + (!B0 * !B1) = !(A0 + A1) + !(B0 + B1) = !((A0 + A1) * (B0 + B1))
这个标准单元的功能包含两个二输入或门, 一个二输入与门和一个非门
事实上, OAI22的命名是有其含义的:
OAI表示Or-And-Invert,
22表示两组输入信号, 每组各两个
A0, A1, B0,
B1Or运算,
得到A0 | A1和B0 | B1And运算,
得到(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.88OAI22X1H7L的面积,
比采用功能等价的多个逻辑门单元所花费的面积要小得多
与和或的逻辑功能,
比通过与门和或门来实现相应的逻辑功能,
代价要低很多
将复杂逻辑门作为标准单元提供, 能让芯片具备更好的PPA
类似X1, X4等后缀,
表示这个标准单元的驱动能力(drive strength)
NAND2X1H7L,
NAND2X2H7L和NAND2X4H7L在逻辑功能上完全等价
NAND2X4H7L具有更大的面积, 其功耗也更高
包含触发器, 锁存器等
DFFX1H7L芯片需要通过I/O单元(输入输出单元)来与外界进行通信
I/O单元可以参考相关LIB文件:
I/O单元可继续分类如下:
P65_1233_PBMUXP65_1233_VSS1和P65_1233_VDD1P65_1233_VSSIO3和P65_1233_VDDIO3
虽然I/O单元也是标准单元库中的一部分, 但它们的面积比一般的标准单元要大几个数量级
用于增强信号的驱动能力, 保证信号完整性, 优化时序和负载
具体分为两类:
BUFX1H7L, BUFX2H7L,
BUFX4H7L等
X后的数字最大, 单元的驱动能力越强本身没有逻辑功能, 主要用于解决后端物理设计中与电路逻辑功能无关的特定问题
一些常见的物理单元包括:
TIELOH7L和TIEHIH7LFILLER1H7L, FILLER2H7L等FILLCAP4H7L, FILLCAP8H7L等ANT2H7L和ANT4H7L一种具有特定功能的, 被厂商(晶圆厂或IP厂商)预先设计好其物理实现的, 面积较大的标准单元
ICsprout55目前暂未开放相关的宏单元
包括多路选择器, 半加器, 全加器, 比较器等
MUX2X1H7L, MUXI2X1H7L,
ADDHX1H7L, ADDFX1H7L等专门用于处理时钟信号的单元, 包括时钟缓冲器, 时钟门控(clock gating)单元, 用于处理时钟信号的逻辑门单元等
ICGX1H7L, ICGNX1H7L等
之所以不能用一般的标准单元(如与门, 缓冲器等)来处理时钟信号, 是因为时钟信号的特殊性:
需要对时钟专用单元进行针对性设计, 使其具备低抖动, 低延迟, 高驱动能力等特性
用于实现低功耗设计, 包括电源门控(power gating)单元, 隔离单元等
ICsprout55目前暂未开放此类单元
用于支持芯片制造后的测试和调试
SDFFX1H7L, SDFFSX1H7L,
SDFFRX1H7L等
扫描链单元通常用于可测试性设计(Design for Testability, DFT)
电路的延迟主要受三个因素的影响, 统称为PVT参数
后端工程师一般会选取多个PVT参数的组合作为一系列环境
在标准单元库中, 不同的PVT角体现为不同的LIB文件
工艺波动是指芯片制造过程中不可控的扰动因素
这些因素都会影响晶体管的电阻和电容, 最终影响晶体管的延迟表现
为了测试电路在各种晶体管延迟下都能正确工作, 一般会根据晶体管的工作速度定义若干情况
工艺角通常用两个字母来命名, 分别表示nMOS和pMOS的工作速度
t(typical),
f(fast)和s(slow)
组合出5种工艺角: ss, tt, ff,
sf和fs
ss, tt和ff:
nMOS和pMOS的工作速度基本保持一致
sf和fs:
nMOS和pMOS的工作速度一个变化而另一个变慢
0变成1与从1变成0时的延迟不同
由于工艺波动的存在, 同一批次的芯片可能会有不同的性能表现
在Intel Core系列中:
tt工艺角的芯片以i5的型号进行销售ff工艺角的芯片能运行在更高的频率
ss工艺角的芯片只能运行在比tt更低的频率
在芯片的工作环境中, 电压也并非恒定不变
为了应对电压的波动, 后端工程师一般需要保证电路在标准工作电压\(v\)的\(\pm 10\%\)区间(即\([0.9v, 1.1v]\))内能正确工作
温度也会影响晶体管的工作速度
为了提升芯片的健壮性, 不同温度下的工作情况都需要考虑
LIB文件的命名中通常会包含PVT角的信息
ss_1p08_125表示工艺角为ss,
电压为1.08V, 温度为125摄氏度ff_1p32_m40表示工艺角为ff,
电压为1.32V, 温度为-40摄氏度
在集成电路领域,
类似1p08这种用p(表示point)替代小数点.的命名方式很常见
1p60的视觉区分效果比1.60更好,
尤其是小数点很容易看漏m(表示minus)替代负号-也是出于相似的考虑v)替代小数点(如用1v08表示1.08V)n(表示negative)替代负号(如用n40表示-40摄氏度)用EDA工具在某个PVT角下评估一款芯片, 其实是回答:
而芯片的实测表现与其真实的工作环境相关
一些厂商可能会利用两者的差异来进行营销
ff_1p32_m40,
EDA工具报告芯片最高可运行在2GHz的频率, 厂商便宣称其芯片频率达到2GHz25摄氏度)环境下使用芯片产品,
并不是-40摄氏度ff范围内的芯片则是占少数如果广告中的频率不是实测数据, 还要关注是在哪个PTV角下评估
回顾晶体管的工作原理
不同阈值电压的标准单元主要用于在延迟和静态功耗之间取得权衡
亚阈值状态如果其他因子不变, 亚阈值电流\(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}\)为电源电压
结论:
对于逻辑功能相同但阈值电压不同的标准单元, 其面积通常相同
通常将标准单元按阈值电压分如下几类
后端工程师需要根据芯片的应用场景, 选择合适阈值电压的标准单元
例: 根据体系结构领域国际顶级会议MICRO上发表的香山论文,
第一代香山处理器芯片中不同电压阈值的标准单元的比例为:
轨道(track)数是标准单元高度的另一种衡量
高度(height)并不是指标准单元在三维空间中\(z\)轴方向投影的度量, 而是在\(y\)轴方向投影的度量宽度(width)
假设芯片水平放置:
| 三维空间 | 几何度量概念 | 后端尺寸概念 |
|---|---|---|
| \(x\)轴 | 长度 | 宽度 |
| \(y\)轴 | 宽度 | 高度 |
| \(z\)轴 | 高度 | 厚度 |
回顾: 金属层的PITCH属性描述了该层的最小走线间距
PITCH属性的整数倍
PITCH属性作为轨道数计算的参考
在一种标准单元库中, 标准单元的高度通常是相同的
6T标准单元
1PxM)