Digital VLSI Design-lecture 3
Lecture 3: Logic Synthesis Part 1
什么是逻辑综合
综合是将 RTL 转换为特定技术的门级网表的过程,并根据预定义的约束进行优化。
-
你将从以下内容开始
- 行为级 RTL 设计
- 标准单元库
- 一组设计约束
-
你结束时得到:
- 映射到标准单元库的门级网表
- (对于 FPGA:查找表、触发器和 RAM 块)
- (有希望)在速度、面积、功耗等方面也很高效。
形式化地,给你一个有限状态自动机 ,目标是得到一个电路 ,其中:
- :电路组件的集合,如布尔门,触发器邓
- :连接 的导线集合
在某些情况下,逻辑综合可以得到比手动设计更优的设计(例如:逻辑优化)。不过,也存在例外情况。
以上是一个例外情况,!s0 && s1 || s0
可以被优化为 s1 || s0
,正如右边电路图所绘。
进行逻辑综合时候,尤其需要在以下方面注意:
- 最小化面积
- 最小化功耗
- 最大化性能
- 根据不同权重作为约束问题公式化
- 更全局的目标,如布局的反馈,实际物理尺寸等
How does it work?
实例化
保持一个包含基本模块(如 AND、OR 等)和用户定义模块的库。
宏扩展/替代
使用大量语言操作符(例如 +
、 -
、布尔操作符等)和语法构造(如 if-else
、 case
),将其扩展为特殊电路
推断
在语言描述中检测特定模式并进行特殊处理(例如:从变量声明和读写语句中推断存储块;从 always@(posedge clk) 块中检测并生成有限状态机)。
例如以下情况:
- 通过变量声明和访问模式推断存储块(如 RAM 或寄存器文件)。
- 通过 always@(posedge clk) 块检测并生成有限状态机(FSM)。
更具体地,假如你在设计代码中写了一个变量类型的数组,并且结合读写操作,设计工具可能会推断出这一数组需要实现为内存模块(例如 RAM)。或者如果你有一个块中描述了基于时钟信号的状态跳转行为,工具能够自动识别这是一个 FSM(有限状态机),并推导出状态转换逻辑、电路结构等。
逻辑优化
对布尔操作进行分组,并通过逻辑最小化技术进行优化,如上文图中情况。
结构重组
使用高级技术,包括操作符共享、寄存器的重新定时(移动触发器位置)等优化方法。
基本流程
- 语法分析(Syntax Analysis)
- 库定义(Library Definition)
- 展开与绑定(Elaboration and Binding)
- 约束定义(Constraint Definition)
- 预映射优化(Pre-mapping Optimization)
- 技术映射(Technology Mapping)
- 后映射优化(Post-mapping Optimization)
- 报告和导出(Report and Export)
语法分析
在综合流程之前,我们需要检查语法的正确性。
- 例如,使用此命令编译源码
ncverilog <filename.v>
课程内容只介绍了工具的使用,这里不学习。
库定义
库定义阶段告诉综合工具在哪里查找用于绑定的叶单元(leaf cells)以及进行技术映射的目标库(target library)。
- 提供用于搜索库的路径列表
set_db init_lib_search_path “/design/data/my_fab/digital/lib/”
- 也可以提供一个特定库的名称,这通常发生在单一工作环境下
read_libs “TT1V25C.lib”
- 我们还需要为 IP 提供 .lib 文件,例如内存宏、I/O 单元等其他部件。
什么是库
- 标准单元库是由定义明确且经过适当特性化的逻辑门组成的集合,这些逻辑门可用于实现数字设计。
- 类似于乐高积木,标准单元必须满足预定义的规范,以便能够在综合、布局和布线算法中被完美处理。
- 因此,标准单元库以一组文件交付,这些文件提供了各种EDA工具所需的所有信息。
一个标准单元库中有哪些单元?
- 组合逻辑单元(如NAND, NOR, INV等)
- Variety of drive strengths for all cells.
- 复杂单元(如AOI, OAI等)
- 扇入数
- ECO单元
- 缓冲器/反相器
- Larger variety of drive strengths.
- 具有平衡上升和下降延迟的“时钟单元”
- 延迟单元
- 电平转换器
- 时序单元
- 多种类型的触发器:正/负沿,设置/复位,Q/QB,使能
- 锁存器
- 集成时钟门控单元
- 支持ATPG的扫描单元
- 物理单元
- 填充单元、接触单元、天线、去耦电容、端帽、连接单元
单元的设计特性
- 多种驱动强度
- 每个单元会有不同尺寸的输出级(Output Stage)
- 较大的输出级更擅长驱动多扇出(Fanouts)或负载。
- 较小的占用更少的面积,泄漏更低,输入电容更小。
- 通常命名为
X2,X3,D2,D3
等
- 多种阈值电压 (MT-CMOS):
- 通过在晶体管通道中增加或减少掺杂量(通过额外的掩模),可以改变阈值电压(VT)
- 大多数单元库提供相当于不同阈值电压的单元:
- SVT (Standard VT) – 标准阈值电压
- HVT (High VT) – 高阈值电压
- LVT (Low VT) – 低阈值电压
- 这允许在速度与泄漏之间进行权衡(LVT更快,泄露功耗更高,HVT反之)
- 所有阈值版本的单元具有相同的尺寸,因此可以在不改变布局或布线的情况下自由替换
接下来我们将学习其中的一些单元。
时钟单元
一般的标准单元设计是为了优化速度,但是不能保证延迟方面是平衡的。
但是这对于时钟网络是不好的,它会导致时钟偏斜(skew)。
专用的时钟单元(clock cells)经过设计,能够提供平衡的上升/下降延迟,从而最小化偏斜
通常情况下,仅应在时钟网络中使用缓冲单元(buffers)或反相器(inverters)。
- 但有时需要加入门控逻辑。
- 可使用专用单元,例如集成时钟门(integrated clock gates),来为时钟网络提供逻辑功能。
时序逻辑电路
这类电路的输出不仅依赖于当前输入,还依赖于电路的状态(通常由触发器和锁存器等存储单元决定)。它们在数字系统中用于实现记忆功能、数据同步以及状态机等复杂功能。
设计时序电路的触发器和锁存器,需要注意以下内容:
- 正/负边沿触发(Positive/Negative Edge Triggered)
- 同步/异步复位/置位(Synchronous/Asynchronous Reset/Set)
- Q/QB 输出(Q/QB Outputs)
- 使能(Enable)
- 扫描(Scan)
- 等等
电平转换器(Level Shifters)
填充单元(Filler Cells)与接触单元(Tap Cells)
-
为什么需要填充单元
- 填充空白区域,确保版图的连续性
- 确保掩膜的连续性:填充单元可以填补空白,保证源极/漏极扩散区域的连续性。
- 确保密度规则:底层技术对晶体管和材料的密度有要求,填充单元可以满足这些规定。
- 提供虚拟多晶硅(dummy poly):适用于更先进的工艺节点,减少其损耗影响。
- 有时需要使用特殊的填充单元,例如:
- End Cap(端帽单元):位于行的边界处,保证行布局的完整性。
- DeCAP Cells(去耦单元):用于增加电容,在电源轨(VDD和VSS)之间提供电压稳定。
-
为什么需要接触单元
- Tap Cells的作用是连接体结电压(即局部管体电压),确保可靠性:
- 防止闩锁效应(Latch-up):消除寄生双极晶体管可能造成的电流路径导致的芯片故障。
- 不需要为每一个标准单元单独连接Tap Cells,可以共享。
-
图中显示了Tap Cells如何通过标准 FILL_TIE单元将井(N-well 或 P-well)连接到VDD/VSS电源。
优化芯片性能和漏电问题:
- 偏置电压(Biasing)
- 这些偏置电压可作为信号引脚或专用电源网络进行路由。
- N-Well电压与VDD不同:可以在芯片设计中用于优化性能或降低漏电。
- P-Well或基板电压与VSS不同:对于三重井(Triple Well)工艺,可以应用特殊电压。
工程变更指令
Engineering Change Order (ECO) 通常是一个非常晚期的更改,通常在通常在布局布线(Place and Route)之后进行。然而,芯片的重新设计通常不会重新制作所有掩膜(masks),这被称为“金属修复(Metal-Fix)”。
ECO 通常只需要对逻辑进行小范围的更改,但如果这发生在布局完成之后,甚至是流片之后呢?
- 解决方案——备用(Bonus)单元!
- 没有功能的单元
- 这些单元在设计阶段被添加(作为填充单元)。
- 如果出现问题(在制造完成后),通过新的金属层和过孔掩膜(via mask),这些单元可以被赋予所需的功能。
- 通过组合这些单元,可以实现更复杂的功能。例如:与门(AND)、与非门(NAND)、或非门(NOR)、异或门(XOR)、触发器(FF)、多路复用器(MUX)、反相器(INV)等。
可以使用特殊的标准单元来区分备用单元和实际功能单元,例如在这张图中,绿色表示备用单元分布,这些单元在设计时被预先放置在芯片中,等待在需要时被激活。
抽象设计
详细的布局足以了解(或推测)标准单元的所有信息,但我们真的需要知道所有信息吗?
- 例如,逻辑仿真是否需要知道你的反相器是 CMOS 还是伪 NMOS(Pseudo-NMOS)?
- 逻辑综合工具是否需要知道你使用了什么类型的晶体管?
显然,以上是不需要的,我们可将复杂的底层细节隐藏起来,只提供工具真正需要的信息。
标准单元库里面有什么?
1. Behavioral Views(行为视图)
-
文件类型:
Verilog (.v)
- 或
Vital
-
用途:
- 为单元提供逻辑行为描述。
- 用于:
- 逻辑仿真(Simulation)
- 逻辑等价检查(Logic Equivalence Check,LEC)。
- 此类文件仅描述功能层面,抽象掉了单元内部实现细节。
2. Physical Views(物理视图)
-
文件类型:
Layout (.gds)
:GDSII 格式的布局文件。Abstract (.lef)
:LEF 格式的抽象文件。
-
用途:
- GDSII 文件:
- 包含单元完整的物理布局信息。
- 用途:
- DRC(设计规则检查)
- LVS(版图与网表匹配检查)
- Custom Layout(自定义版图设计)
- LEF 文件:
- 提供单元抽象化的物理布局信息,仅包含边界及引脚信息。
- 用途:
- P&R(布局与布线)
- RC 提取(寄生参数提取)
- GDSII 文件:
3. Transistor Level(晶体管级)
-
文件类型:
Spice (.spi, .cdl)
:SPICE 网表文件。- 或 Spectre 格式的网表文件。
-
用途:
- 包含单元晶体管级描述,用于:
- LVS(版图与网表匹配检查)
- 晶体管级仿真(Transistor-Level Simulation)
- 网表通常提供两种版本:
- 包含寄生参数(Post-Layout):反映布局后的真实电路特性。
- 不包含寄生参数:用于简单电路分析。
- 包含单元晶体管级描述,用于:
4. Timing/Power(时序/功耗)
-
文件类型:
Liberty (.lib)
-
用途:
- 定义单元的时序与功耗特性。
- 广泛应用于:
- STA(静态时序分析,Static Timing Analysis)
- 帮助设计者分析时序路径,并进行功耗的估算与优化。
5. Power Grid Views(电源网格视图)
- 用途:
- 提供用于 IR Drop 分析 的视图。
- IR Drop:电源网络电压因电阻和电流导致的电压降,对芯片性能可能产生影响。
6. Others(其他文件)
-
文件类型:
- Symbols:用于显示单元符号的文件。
- Open Access (.oa):支持与设计工具(如 Cadence Virtuoso)集成的文件。
-
用途:
- 符号文件:在设计工具中,显示单元的简单结构(例如电路符号)。
- OA 库:便于单元在各种工具之间的兼容与集成。
LEF
什么是LEF?
- LEF 提供的是单元的 抽象布局信息,主要用于 布局与布线 (Place and Route, P&R) 阶段。
- 它采用 ASCII 格式,便于工具解析和处理。
LEF 文件仅包括抽象视图中的以下信息:
- 单元边界
- 引脚位置及层信息
- 详细的 Pin 信息,用于连接布局中的外部信号。
- 单元边界和金属层信息。通常在 M1(金属第一层) 上定义引脚位置。
- 金属阻挡区
- 定义某些区域内禁止路由金属线的区域。
- 这些区域虽然使用了特定金属层,但不是引脚,用途是避免冲突。
- LEF 文件中 不包含 前端(Front-End)的具体设计数据,如:
- 多晶硅(Poly)。
- 扩散层(Diffusion)。
- 这些属于更低层次的制造数据,通常包含在 GDSII 文件中。
这是一个示例
Technology LEF
Technology LEF 文件包含用于布置和布线器的技术相关(简化的)信息
- 层信息
- 名称:例如 M1, M2 等。
- 层类型:例如布线层(routing),切割层(cut via)
- 电气属性:如电阻 ,电容
- 设计规则
- Antenna data
- 首选布线方向(Preferred routing direction)
- 库的 x 和 y 网格(SITE)
- CORE 站点为最小标准单元大小
- 可以定义双高度单元的站点
- IO 单元具有特殊的 SITE 定义
- Via definitions
- Units
- 用于布局和布线的Grids
Additional files provide parasitic extraction rules. These can be basic (“cap tables”) or more detailed (“QRC techfile ). These may be provided as part of the PDK.
- 单元高度(Cell height)以轨道(Tracks)为单位进行测量
- 一条轨道(Track)等于一个 M1 的间距(pitch)。
- 例如,一个 8轨道单元(8-Track Cell) 可以容纳 8 条水平的 M1 金属线。
- 轨道越多,晶体管越宽,单元速度越快。
- 7-8轨道 的库(low-track libraries)适用于面积效率(area efficiency)。
- 11-12轨道 的库(tall-track libraries)适用于性能(performance),但漏电流较高(high leakage)。
- 9-10轨道 的库(standard-track libraries)在面积和性能之间提供合理的折中(area-performance tradeoff)。
- 最小的高度和宽度称为 SITE
- 必须是最小 X 网格单位(X-grid unit)和行高度(row height)的倍数
- 单元可以是双倍高度,例如双高单元(double-height cells)。
- 引脚(Pins)应与布线轨道(Routing Tracks)对齐这样可以方便更高层金属与单元的连接。
Liberty Timing Models (.lib)
- 我们如何知道逻辑路径中通过门的延迟?
- 运行SPICE太复杂
- 因此,我们用一个简化的时序模型进行计算
- 基于输入网络转换 输出负载电容 对每个时序弧计算传播延迟 和输出转换
注意,每个.lib文件将为单一角度提供时序/功耗/噪声信息,例如:工艺、电压、温度、RCX等。
- 标准单元的时序数据以Liberty格式提供
- 库
- 所有库中单元的通用信息
- 例如,操作条件、线负载模型、查找表
- 单元
- 每个标准单元的具体信息
- 例如,功能、面积
- 引脚
- 每个单元中每个引脚的时序、功率、电容、漏电、功能等特性
- 库
时序模型
Non-Linear Delay Model(NLDM)
- 非线性时序模型(NLDM)
- 驱动模型
- 斜坡电压源
- 固定驱动电阻
- 接收模型
- 输入电容的最小/最大上升/下降
- 非常快
- 不模拟过渡期间的电容变化
- 在小于 130nm 的工艺节点中失去精度(精度下降)
- 驱动模型
公式
代码如下
1 | cell (INVX1) { |
假设我们有这样一个电路
我们可以根据 (输入过渡时间),查表即可。
电流源模型 Current Source Models (CCS, ECSM)
将单元的非线性输出行为建模为电流源
- 驱动器模型:非线性电流源
- 接收器模型:变化的电容
- 需要更多的数值和计算
- 在130nm以下工艺中必不可少()
- 精度在SPICE的2%以内
如何在布局和布线之前估算网络的寄生参数RC
Wire Load Models estimate the parasitics based on the fanout of a net.
物理感知综合
由于精度不足,线负载模型在纳米技术中导致综合与布局后之间的相关性很差。
因此,在综合过程中使用物理信息:
- Synopsys称之为“地形模式”
- Cadence称之为“物理综合”
物理感知综合基本上是在综合器内运行布局,以获得更准确的寄生参数估计
- 在没有布局规划的情况下,仅使用.lef文件
- 在第一次迭代后,将布局规划.def导入综合器。
标准单元库的其他内容
作为标准单元库的一部分,还可能提供许多其他文件和格式:
- GDS
- Verilog
- ATPG
- 电源网模型
- OA数据库
- Spice模型
- 等等。
同时要查阅文档和数据库。
所有IP都会以库的形式提供,包括标准单元库所拥有的大多数视图。
- 这些视图是集成硬核宏到标准设计流程中所必需的,设计流程包括:
- 仿真 (simulation)
- 综合 (synthesis)
- 布局布线 (P&R)
- 验证 (verification)
- 等等
存储器 (SRAMs) 是一个特殊的情况,它们通常配备一个存储器编译器 (memory compiler),用于生成设计者所需的特定存储器切片。
(完)