Lecture 3: Logic Synthesis Part 1

什么是逻辑综合

综合是将 RTL 转换为特定技术的门级网表的过程,并根据预定义的约束进行优化。

  • 你将从以下内容开始

    • 行为级 RTL 设计
    • 标准单元库
    • 一组设计约束
  • 你结束时得到:

    • 映射到标准单元库的门级网表
    • (对于 FPGA:查找表、触发器和 RAM 块)
    • (有希望)在速度、面积、功耗等方面也很高效。

形式化地,给你一个有限状态自动机 F(X,Y,Z,λ,δ)F(X,Y,Z,\lambda,\delta) ,目标是得到一个电路 C(G,W)C(G,W) ,其中:

  • GG :电路组件的集合,如布尔门,触发器邓
  • WW :连接 GG 的导线集合

在某些情况下,逻辑综合可以得到比手动设计更优的设计(例如:逻辑优化)。不过,也存在例外情况。

pE6gwnA.md.png

以上是一个例外情况,!s0 && s1 || s0 可以被优化为 s1 || s0 ,正如右边电路图所绘。

进行逻辑综合时候,尤其需要在以下方面注意:

  • 最小化面积
  • 最小化功耗
  • 最大化性能
  • 根据不同权重作为约束问题公式化
  • 更全局的目标,如布局的反馈,实际物理尺寸等

How does it work?

实例化

保持一个包含基本模块(如 AND、OR 等)和用户定义模块的库。

宏扩展/替代

使用大量语言操作符(例如 +- 、布尔操作符等)和语法构造(如 if-elsecase ),将其扩展为特殊电路

推断

在语言描述中检测特定模式并进行特殊处理(例如:从变量声明和读写语句中推断存储块;从 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等)
    • 扇入数 4\leq 4
    • 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反之)
    • 所有阈值版本的单元具有相同的尺寸,因此可以在不改变布局或布线的情况下自由替换

接下来我们将学习其中的一些单元。

时钟单元

一般的标准单元设计是为了优化速度,但是不能保证延迟方面是平衡的。

mintpd=mintp,LH+tp,HL2tp,LH=tp,HL\min{t_{pd}} = \min{\frac{t_{p,LH}+t_{p,HL}}{2}} \nRightarrow t_{p,LH} = t_{p,HL}

但是这对于时钟网络是不好的,它会导致时钟偏斜(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)

  • 作用:用于在不同电压域之间传递信号

  • HL转换器

    • 高电压到低电压,只需要一个电压,单层高度
  • LH转换器

    • 低电压转换到高电压,需要两个电压,通常是双层高度
  • HL
    pE6bVbT.png

  • LH
    pE6beVU.png

填充单元(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电源。
    pE6blx1.png

优化芯片性能和漏电问题:

  • 偏置电压(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)等。

可以使用特殊的标准单元来区分备用单元和实际功能单元,例如在这张图中,绿色表示备用单元分布,这些单元在设计时被预先放置在芯片中,等待在需要时被激活。

pE6brsP.png

抽象设计

详细的布局足以了解(或推测)标准单元的所有信息,但我们真的需要知道所有信息吗?

  • 例如,逻辑仿真是否需要知道你的反相器是 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 提取(寄生参数提取)

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 文件中。

这是一个示例

pE6bWGj.md.png

Technology LEF

Technology LEF 文件包含用于布置和布线器的技术相关(简化的)信息

  • 层信息
    • 名称:例如 M1, M2 等。
    • 层类型:例如布线层(routing),切割层(cut via)
    • 电气属性:如电阻 RR ,电容 CC
    • 设计规则
    • 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)。

pE6b7ZT.md.png

  • 最小的高度和宽度称为 SITE
  • 必须是最小 X 网格单位(X-grid unit)和行高度(row height)的倍数
  • 单元可以是双倍高度,例如双高单元(double-height cells)。
  • 引脚(Pins)应与布线轨道(Routing Tracks)对齐这样可以方便更高层金属与单元的连接。

Liberty Timing Models (.lib)

  • 我们如何知道逻辑路径中通过门的延迟?
    • 运行SPICE太复杂
    • 因此,我们用一个简化的时序模型进行计算
  • 基于输入网络转换 (trise,tfall)(t_{rise}, t_{fall}) 输出负载电容 (Cload)(C_{load}) 对每个时序弧计算传播延迟 (tpd)(t_{pd}) 和输出转换 (trise,tfall)(t_{rise}, t_{fall})

注意,每个.lib文件将为单一角度提供时序/功耗/噪声信息,例如:工艺、电压、温度、RCX等。

  • 标准单元的时序数据以Liberty格式提供
      • 所有库中单元的通用信息
      • 例如,操作条件、线负载模型、查找表
    • 单元
      • 每个标准单元的具体信息
      • 例如,功能、面积
    • 引脚
      • 每个单元中每个引脚的时序、功率、电容、漏电、功能等特性

时序模型

Non-Linear Delay Model(NLDM)

  • 非线性时序模型(NLDM)
    • 驱动模型
      • 斜坡电压源
      • 固定驱动电阻
    • 接收模型
      • 输入电容的最小/最大上升/下降
    • 非常快
    • 不模拟过渡期间的电容变化
    • 在小于 130nm 的工艺节点中失去精度(精度下降)

公式 tpd=f(tinput,Cload)t_{pd}=f(t_{input},C_{load})

代码如下

1
2
3
4
5
6
7
8
9
10
cell (INVX1) {
pin(Y) {
timing() {
cell_rise(delay_template_5x5) {
values ( \
"0.147955, 0.218038, 0.359898, 0.922746, 1.76604", \
"0.224384, 0.292903, 0.430394, 0.991288, 1.83116", \
"0.365378, 0.448722, 0.584275, 1.13597, 1.97017", \
"0.462096, 0.551586, 0.70164, 1.24437, 2.08131", \
"0.756459, 0.874246, 1.05713, 1.62898, 2.44989"); }

假设我们有这样一个电路

pE6qCdO.png

我们可以根据 C=1.0pF,tpd=0.1nsC=1.0pF,t_{pd}=0.1ns(输入过渡时间),查表即可。

pE6qFFe.png

电流源模型 Current Source Models (CCS, ECSM)

将单元的非线性输出行为建模为电流源

  • 驱动器模型:非线性电流源
  • 接收器模型:变化的电容
  • 需要更多的数值和计算
  • 在130nm以下工艺中必不可少(130\leq 130
  • 精度在SPICE的2%以内

如何在布局和布线之前估算网络的寄生参数RC

Wire Load Models estimate the parasitics based on the fanout of a net.

pE6qlFg.md.png

物理感知综合

由于精度不足,线负载模型在纳米技术中导致综合与布局后之间的相关性很差。

因此,在综合过程中使用物理信息:

  • Synopsys称之为“地形模式”
  • Cadence称之为“物理综合”

物理感知综合基本上是在综合器内运行布局,以获得更准确的寄生参数估计

  • 在没有布局规划的情况下,仅使用.lef文件
  • 在第一次迭代后,将布局规划.def导入综合器。

标准单元库的其他内容

作为标准单元库的一部分,还可能提供许多其他文件和格式:

  • GDS
  • Verilog
  • ATPG
  • 电源网模型
  • OA数据库
  • Spice模型
  • 等等。

同时要查阅文档和数据库。

所有IP都会以库的形式提供,包括标准单元库所拥有的大多数视图。

  • 这些视图是集成硬核宏到标准设计流程中所必需的,设计流程包括:
    • 仿真 (simulation)
    • 综合 (synthesis)
    • 布局布线 (P&R)
    • 验证 (verification)
    • 等等

存储器 (SRAMs) 是一个特殊的情况,它们通常配备一个存储器编译器 (memory compiler),用于生成设计者所需的特定存储器切片。

(完)