[^1]C. Lin, J. Lin, Y. Chiu, C. Huang and S. Chang, “Common-centroid capacitor placement considering systematic and random mismatches in analog integrated circuits,” 2011 48th ACM/EDAC/IEEE Design Automation Conference (DAC), 2011, pp. 528-533.
摘要
模拟布局阶段最重要的问题之一是实现准确的电容比。 然而,系统性和随机性失配会影响电容比的准确性。 共质心放置有助于减少系统失配,但仍需要高色散特性来减少随机失配[10]。 为了解决这个问题,我们提出了一种基于模拟退火 [15] 的方法来构建一个具有最高可能分散度的公共质心放置。 为了促进这个框架,我们首先提出了对序列表示来表示一个公共质心放置。 然后,我们提出了三个扰动表示的操作,这可以增加分散程度,而不会破坏结果放置中的公共质心约束。 最后,为了提高我们基于模拟退火的方法的效率,我们提出了三种技术来加速我们的程序。 实验结果表明,在所有测试用例中,我们的布局可以同时实现比 [10] 更小的氧化物梯度引起的失配和更大的整体相关系数(即更高的分散度)。 此外,我们的程序在更大的基准测试中可以比 [10] 运行得快得多。
(摘要基本完成了本文的目标)
调研
许多模拟集成电路 (IC) 的关键性能与电容比的准确性有关 [3, 4, 10],例如模数转换器和开关电容器电路 [2]。 在这些电路中,逐次逼近寄存器 (SAR) 模数转换器 (ADC) 由于其低功耗(见图 1)最近引起了更多的关注,它广泛应用于生物医学芯片或便携式/ 电池供电的仪器。 SAR ADC 中最重要的组件之一是电容器阵列,其中包含一组电容器 C1、…、Cn+1,这些电容器必须满足预定义的电容比(即 C1 = C2、Ci+1 = 2Ci , i = 2, …, n)。 如果电容器阵列的电容比恰好满足预定义值,则认为电容器阵列匹配。 SAR ADC 的线性度与电容器阵列的匹配度密切相关。 一个匹配良好的电容器阵列在 IC 制造后可能会变得不匹配。 IC制造过程中失配的原因可分为两类:系统失配和随机失配[3, 4]。 我们在系统失配类别中,机制对每个设备具有相同的影响。 因此,如果两个设备具有相同的布局尺寸,它们会遭受相同百分比的机制差异,这意味着两个设备仍然保持匹配。 因此,给定一组具有不同布局尺寸的器件,设计人员更愿意将每个器件分成几个相同布局尺寸的子器件来实现匹配。 然而,工艺过程梯度的存在也会导致系统失配[5]。 如果两个器件具有相同的版图尺寸,但它们在版图中彼此相距较远,则它们会因工艺梯度而受到不同程度的影响,从而表现出不匹配。 因此,对于需要匹配的一组设备,在布局中应该彼此靠近放置。 此外,这些器件应在布局中表现出对称性,以平均由工艺梯度引起的影响。 为了减少系统失配,设计人员通常采用共同质心布局结构 [1] 来实现这些考虑。
另一方面,随机失配是由加工条件或材料特性的统计波动引起的。 由于这些波动是随机机制,因此每个器件的子器件应尽可能均匀地分布在整个布局中,以减少随机失配,这意味着子器件应在布局中表现出尽可能高的分散度[10] 。
系统失配和随机失配有一定的约束作用。
在本文中,我们希望提出一种寻找具有高色散特性的共质心电容器布局的算法,以同时减少系统和随机失配。
为了实现更好的匹配,电容阵列的放置通常采用共质心结构。 一些作品** [6, 11-14]** 研究了公共质心放置。 Sayed 和 Dessouky [6] 引入了氧化物梯度模型来估计氧化物梯度引起的失配。 基于这个模型,他们提出了一个确定性的过程来构建一个共同的质心放置。 后来,三部作品使用拓扑表示来解决具有公共质心约束的放置问题,例如 C-CBL [11]、B*-trees [12] 和序列对 [13]。 最近,林等人。 [14] 提出了一种热驱动的共质心放置算法。 然而,所有这些作品都没有考虑随机失配,因此它们的公共质心位置缺乏高分散性。 为了考虑随机不匹配,Luo 等人。 [8, 9] 引入了用于产量评估的空间相关模型。 他们表明,具有较高相关系数的展示位置将具有更好的匹配性。 此外,他们提出了一种启发式算法,以获得具有最高或接近最高相关系数的布局,以提高产量** [10](本文比较基本算法 部分穷举搜索算法)**。 尽管它们的放置结果表现出较高的分散度,但它们的放置不是共同质心结构。 因此,现有的工作都没有提出一种构建具有高分散特性的共质心放置的方法。
目标
数据集
SCF_1、SCF_2 和 SCF_3,来自 [6] 和 [10]。
基于我们设计的实际 SAR ADC 中使用的电容器阵列。 由于它们的分辨率分别为 8 位、9 位和 10 位,我们分别将它们命名为 SAR_8bit、SAR_9bit 和 SAR_10bit。
为了公平比较,实验设置与 [6] 和 [10] 中的设置相同。 氧化物厚度为 40 nm,氧化物梯度为 10 ppm,单位电容器的相关系数为 0.9,单位电容器的几何形状如图 7(a) 所示。
实验指标
为了将我们的方法与相关工作进行比较,我们实现了启发式算法 [10],结果如表 1 所示。表 1 中的第 2、3 和 4 列显示了电容器组的信息,其中包括 电容、电容比和单位电容总数。 第 5 列显示了用于放置的矩阵的尺寸。 对于每种方法,我们分别显示了氧化物梯度引起的失配的值(用 M 表示)、总体相关系数的值(用 L 表示)和运行时间。 实验结果表明,我们的放置结果在所有情况下都可以同时实现比[10]更小的氧化物梯度引起的失配和更大的整体相关系数。 注 [10] 无法在最大基准 SAR_10bit 中获得结果。 尽管我们的方法在较小的基准测试中比 [10] 慢,但在较大的基准测试中我们可以比 [10] 运行得快得多。 由于 [10] 部分详尽地搜索可能的组合并计算每个组合的相关系数以获得最佳组合,因此它们的计算时间显着增加,而可用条目的数量增加。 相反,我们使用 SA 来增强我们的结果,并提出了几种加速 SA 的技术。 这就是为什么我们可以获得更好的结果并且比 [10] 运行得更快。
氧化物梯度[6]
对于一组任意比例的电容,对每对电容计算比例失配,并保留最大值。 对于电容比为
R
1
:
R
2
:
…
:
R
N
c
a
p
R_1:R_2:…:R_{N_{cap}}
R1:R2:…:RNcap的 Ncap 电容器,在并联单元电容器布局 变为
R
1
∗
:
R
2
∗
:
…
:
R
N
c
a
p
∗
R_1^*:R_2^*:…:R_{N_{cap}}^*
R1∗:R2∗:…:RNcap∗后,我们将电容比失配 M 定义为:
例如,图 1 显示了四个电容器 C1、C2、C3 和 C4,在角度 θ 指定的方向上具有线性氧化物梯度 α。 如果我们考虑将它们分组形成两个电容器 Ca=C1+C4 Cb=C2+C3 使得 Ca:Cb=1:1,根据 (1)
其中厚度计算
t
i
=
t
0
+
α
(
X
i
−
X
c
e
n
t
e
r
)
c
o
s
θ
+
α
(
Y
i
−
Y
c
e
n
t
e
r
)
s
i
n
θ
t_i=t_0+\alpha(X_i-X_{center})cos\theta+\alpha(Y_i-Y_{center})sin\theta
ti=t0+α(Xi−Xcenter)cosθ+α(Yi−Ycenter)sinθ
电容 C = σ S d C=\sigma\frac{S}{d} C=σdS其中 S S S是面积, d d d是厚度。
整体相关系数[8,9]
具体实现方法
输入:
- C 1 , C 2 , . . . , C m C_1, C_2, ...,C_m C1,C2,...,Cm
- q 1 , q 2 , . . . , q m q_1,q_2,...,q_m q1,q2,...,qm, q i q_i qi代表 C i C_i Ci包括多少个单位电容
- r ∗ s 矩 阵 A r s r*s矩阵 A_{rs} r∗s矩阵Ars
在本小节中,我们首先提出对序列 Pr×s 表示来表示 n 个元素在 r×s 矩阵 Ar×s 中的放置。 对序列 Pr×s = [p1, p2, …, pm] 是一个 m 个元素的数组,Pr×s 中的每个元素 pi 表示 Ar×s 中除了第一个元素 p1 之外的一对对称条目,其中 m = ⎣(n+1)/2⎦ 和 n = r×s。 如果 n 是偶数,第一个元素 p1 仍然表示矩阵中的一对元素; 但是,如果 n 为奇数,则它仅表示矩阵中的一个条目。 表示的下标 r×s 表示该表示映射的矩阵的维数。 因为元素的放置可能有多种风格,所以有必要区分那些元素数量相同但映射到不同维度矩阵的对序列。 例如,虽然矩阵 A2×6、A6×2、A3×4 和 A4×3 的尺寸相同,但四个矩阵的尺寸不同。 为了揭示正确的信息,我们在每个对序列中附加一个下标 r×s 来表示相应矩阵的维数。
d
=
(
x
i
−
x
c
)
2
+
(
y
i
−
y
c
)
2
,
(
x
c
,
y
c
)
d=\sqrt{(x_i-x_c)^2+(y_i-y_c)^2},(x_c,y_c)
d=(xi−xc)2+(yi−yc)2,(xc,yc)表示矩阵A中心位置
具有相同距离
d
d
d 的那些条目形成一个圆圈,用
R
d
R_d
Rd表示。 如果任何两个条目在同一个循环中并且它们的位置相对于
A
r
×
s
A_{r×s}
Ar×s的中心是相反的,则我们将它们视为一对,这意味着这两个条目彼此对称。 将矩阵的所有条目分类到不同的圆圈后,从十二点钟方向逆时针依次挑出圆圈中的条目对。 然后,我们可以通过从内圈到外圈收集这些对来构造一个对序列。 请注意,如果矩阵包含奇数个条目,则矩阵的最内圈仅包含一个条目。 因此,对应的pair序列中的第一对只有一个元素。对序列如下表示,即将中心对称对放在一起,然后填充矩阵。
P
3
×
3
=
[
a
22
,
(
a
12
,
a
32
)
,
(
a
21
,
a
23
)
,
(
a
11
,
a
33
)
,
(
a
31
,
a
13
)
]
。
P_{3×3} = [a_{22}, (a_{12}, a_{32}), (a_{21}, a_{23}), (a_{11}, a_{33}), (a_{31}, a_{13})]。
P3×3=[a22,(a12,a32),(a21,a23),(a11,a33),(a31,a13)]。
P
3
×
3
=
[
a
,
(
b
,
c
)
,
(
d
,
e
)
,
(
f
,
g
)
,
(
h
,
i
)
]
P_{3×3}=[a,(b,c),(d,e),(f,g),(h,i)]
P3×3=[a,(b,c),(d,e),(f,g),(h,i)]
任何两个属于同一电容器的单元电容器首先配对。 然而,如果一个电容器包括奇数个单元电容器,则将留下一个单元电容器。 因此,对于每个包含奇数个单元电容的电容,我们首先挑选出一个单元电容,其余的单元电容可以配对。
毕竟单位电容电容器组是成对的,我们可以安排这些对获得一对序列,然后得到一个初始矩阵位置。矩阵来获得一个更好的位置,我们必须确定一个序列将这些双成一对序列。我们给我们的过程之前,我们首先分析不同类型的电容器的特性。如果一个电容器属于Cunit,最好是放在一个矩阵的中心,这样它的重心可以接近矩阵的中心。如果一个电容器属于科德,它的一个单元电容器将会形成一个单元几个unit-capacitor对电容器和其他形式。由于每一对unit-capacitor可以自动放置在矩阵的对称位置,电容器的重心可以靠近中心的矩阵如果单一单元电容器也放在矩阵的中心。最后,如果电容器包含偶数个单元电容器,其单元电容器可以完全配对。因此,它的重心必须完全的中心矩阵。通过上面的分析,一些单元电容器应该比别人更接近矩阵中心common-centroid放置。如果一对可以安排附近的一条序列,相关单位电容的位置将会接近矩阵的中心;否则,它的位置是远从矩阵的中心。因此,我们给不同的两类型的优先级如下:
S
(
u
n
i
q
u
e
,
)
>
S
(
u
n
i
t
,
u
n
i
t
)
>
S
(
u
n
i
t
,
o
d
d
)
>
S
(
o
d
d
,
o
d
d
)
>
S
′
S_{(unique,)}>S_{(unit,unit)}>S_{(unit,odd)}>S_{(odd,odd)}>S'
S(unique,)>S(unit,unit)>S(unit,odd)>S(odd,odd)>S′
流程:
- 初始化对序列,
- 初始化矩阵,按照上述,先将单位电容分组,然后按照优先级填充矩阵,得到初始化布局,
- 利用SA进行进一步优化,代价函数是氧化物梯度和整体相关系数,
3.1 对序列的扰动
Op1 选择一个对序列中的两个单位电容,交换他们的位置;
Op2 选择两对 来自除了 S ′ S' S′的对序列,然后交换其中一个单位电容的位置;
Op3 选择两对 来自除了 S ( u n i q u e , ) S_{(unique,)} S(unique,)的对序列,然后交换两个对序列的位置
3.2 代价函数
ϕ = α × M a v g − M M a v g + ( 1 − α ) × L − L a v g L a v g \phi=\alpha×\cfrac{M_{avg}-M}{M_{avg}}+(1-\alpha)×\cfrac{L-L_{avg}}{L_{avg}} ϕ=α×MavgMavg−M+(1−α)×LavgL−Lavg
具体实现流程
以 A 3 × 3 A_{3×3} A3×3为例,
- 初始化对序列,按照距离中心的位置保存对序列 P 3 × 3 = [ a 22 , ( a 12 , a 32 ) , ( a 21 , a 23 ) , ( a 11 , a 33 ) , ( a 31 , a 13 ) ] P_{3×3} = [a_{22}, (a_{12}, a_{32}), (a_{21}, a_{23}), (a_{11}, a_{33}), (a_{31}, a_{13})] P3×3=[a22,(a12,a32),(a21,a23),(a11,a33),(a31,a13)]。
- 按照电容比分类为 S ( u n i q u e , ) > S ( u n i t , u n i t ) > S ( u n i t , o d d ) > S ( o d d , o d d ) > S ′ S_{(unique,)}>S_{(unit,unit)}>S_{(unit,odd)}>S_{(odd,odd)}>S' S(unique,)>S(unit,unit)>S(unit,odd)>S(odd,odd)>S′几个集合,并按照优先级为其赋值 P 3 × 3 = [ a , ( b , c ) , ( d , e ) , ( f , g ) , ( h , i ) ] P_{3×3}=[a,(b,c),(d,e),(f,g),(h,i)] P3×3=[a,(b,c),(d,e),(f,g),(h,i)]得到初始布局。
- 利用模拟退火和评价函数进行迭代。
加速技术
- 桶数据结构
- 冗余消除:相同布局被认为是同一个,比如属于 e u n i t e_unit eunit的两个电容交换位置 被认为是冗余布局
- 操作组合:我们可以通过应用可能导致大变化的操作来增强 SA 的收敛性。
优缺点
八边形法则,也就是各个性能之间的折中,八个分别是增益、速度、功耗、电源电压、线性度、噪声、摆幅、输入输出阻抗
优点:
缺点:
只考虑了氧化物梯度和整体相关系数,没有考虑互连线,没有和性能相关的代价函数。
可能改进点:代价函数修改:矩阵维度相差大可以尽量让其成为正方形(设计函数衡量,也可以跑实际电路看大概是什么样的函数)、互连线、任意电容比(包含小数)
代码复现
# TODO