本帖最后由 LuckyEDAZ 于 2025-8-13 09:33 编辑
在做 .lib characterization 时经常遇到,特别是: - setup/hold time 的精确提取需要找到边界点(timing threshold)
- 传统方式是采用 二分法 或 牛顿法 在一个大的 timing window 内迭代收敛
- 如果 timing window 太大,则迭代次数多,仿真次数多,时间开销大
所以: 缩小 timing window 是一种加速 characterization 的优化策略。 但缩小 window 的前提是: - 你有一个好的初始估计(或基于历史数据、近似模型)
- 你确保缩小的 window 不会错过真实边界点
- 工艺角(PVT)变化会影响 delay,也会影响边界点所在位置,因此 window 的选择要适配 corner
也就是在ALPS/或者HSPICE中进行K库的时候,在给k库激励和约束的时候,会有类似如下几行
vd<0> d<0> gnd pwl 0 0 '2*per2+0.456n' 0 '2*per2+0.456n+tr' up12
.alter
vd<0> d<0> gnd pwl 0 0 '2*per2-0.456n' 0 '2*per2-0.456n+tr' up12
那这个一个周期±0.456 不就是为了让k库的时候进行迭代时有一个较大的timing Window。但是这个timing winding太大 要迭代太多次了 想要缩减这个Window 这样在k库的时候就不用迭代那么多次 所以也就是找出离value最近几次的迭代timing Window 那就是要找value相关的一些公式来确定了 我是这么想的
想问问有没有人知道这个timing value与 index1_ index_2 process Voltage Temperature bit的关系(公式) 我不是为了一下子就确定这个value,是为了获得这个一个周期±0.456的缩小timing window就行了,这样就能减小迭代了。不知道有没有公式或者论文,希望各位佬们,踊跃发言,贴公式,文献的等等都可以
timing() {
related_pin : "CE1" ;
timing_type : setup_rising ;
rise_constraint ("vio_7_7_1") {
index_1("0.0160000, 0.0320000, 0.0640000, 0.1280000, 0.2560000, 0.5120000, 1.0240000");
index_2("0.0160000, 0.0320000, 0.0640000, 0.1280000, 0.2560000, 0.5120000, 1.0240000");
values("0.1523124, 0.1591857, 0.1723041, 0.1926944, 0.2320195, 0.2771421, 0.3581681", \
"0.1456958, 0.1523452, 0.1656435, 0.1889421, 0.2186312, 0.2705039, 0.3513816", \
"0.1353255, 0.1419676, 0.1523664, 0.1761031, 0.2092931, 0.2570624, 0.3261782", \
"0.1149019, 0.1186013, 0.1317995, 0.1549839, 0.1874342, 0.2338366, 0.2965227", \
"0.0726363, 0.0795195, 0.0896960, 0.1129487, 0.1488811, 0.1975457, 0.2692998", \
"0.0092027, 0.0161283, 0.0297047, 0.0530452, 0.0881711, 0.1369864, 0.2187026", \
"-0.0789853, -0.0724280, -0.0618339, -0.0380476, -0.0048726, 0.0497489, 0.1349296");
}
fall_constraint ("vio_7_7_1") {
index_1("0.0160000, 0.0320000, 0.0640000, 0.1280000, 0.2560000, 0.5120000, 1.0240000");
index_2("0.0160000, 0.0320000, 0.0640000, 0.1280000, 0.2560000, 0.5120000, 1.0240000");
values("0.1463564, 0.1530233, 0.1636598, 0.1811970, 0.2050524, 0.2325811, 0.2632885", \
"0.1397033, 0.1463417, 0.1569642, 0.1744621, 0.1985770, 0.2256513, 0.2566596", \
"0.1293490, 0.1361175, 0.1467161, 0.1641788, 0.1880545, 0.2121059, 0.2439752", \
"0.1116621, 0.1181655, 0.1286433, 0.1460434, 0.1694906, 0.1936915, 0.2215749", \
"0.0877125, 0.0909384, 0.1010458, 0.1192701, 0.1461109, 0.1695922, 0.1962259", \
"0.0502251, 0.0541281, 0.0643484, 0.0826875, 0.1088142, 0.1395129, 0.1667794", \
"-0.0057829, 0.0009160, 0.0114357, 0.0267426, 0.0543635, 0.0846828, 0.1112065");
}
}
|