建议以IC为主,以FPGA,电子等其他为辅.
人多才好.:)
关于set_drive的问题(转)
上一篇 / 下一篇 2007-02-13 09:53:52 / 个人分类:技术追求
http://www.edacn.net/bbs/viewthread.php?tid=55693
| 关于set_drive的问题 *T0n9Eh1hD8\;o U#]0DICDER -- 博客专栏 lV"~:Qc},m 请各位大哥指教小弟:DC中set_drive这条命令后面的电阻值时怎莫得到的?例如 V%`Lx:m0set_drive 1.5 {I1 I2 }中的1.5是根据什末得来的啊?类似的还有set_input_transition 后面的时间值,比如:set_input_transition 0.5 all_inputs() 中的0.5是怎莫知道的阿?谢谢! |
`.FeJlw&?:T0
| ||
| 是根据这个模块同其他模块的连接估算出来的 |
| ||
| 能否请大哥给小弟说详细点,具体怎末个估算法?要是在top level 怎末算呢?谢了:) |
| ||
| 不是架子大,现在实在是忙,过一两天,我给你详细说。 ej)yl%W}0D)c&J0其实做过的都知道,不是什么难事,哪位兄弟给个例子?谢了! |
F:uE-Ncv&{ ]0
| ||
| 那好吧:),谢谢您!期待着~~~ |
| ||
| set_input_transition是由以下几个与INPUT PORT有关的因素决定的:DICDER -- 博客专栏9[cR$R5Q\#U` 1)外面的驱动CELL的驱动能力DICDER -- 博客专栏.W4EQr@w} 2)相连的WIRE LOADDICDER -- 博客专栏 aUy0j:j a$\ 3)所有连接的输入PIN的负载DICDER -- 博客专栏J c3j nH.N DICDER -- 博客专栏)qfFq0y[$ZBYl6E9p 一般要求 1) > 2) + 3)DICDER -- 博客专栏!t%J^D0|$s"{$\ 根据 1) 和 2) + 3) 的差值,在.lib文件中从那个驱动CELL的输出管脚的transition表中选一个。DICDER -- 博客专栏2__ @&Vf@i^ 差值越大,选的input_transition越小。 2U_9l4_K!L0DICDER -- 博客专栏"_r.\j%V$x u 这样作很麻烦,选过一次以后,记下这个值,以后类似的情形估算一下就行了。 A4V"g^#t;j"N?n0 j(j9GD$oRw-r0}0在常用的CMOS的芯片中set_drive一般用set_driving_cell来代替,即方便又容易。 |
.E5~h5x5{;Uz0
| ||
| 真的十分感谢您:)set_input_transition小弟好像有点明白了,但对于set_drive 和 set_driving_cell手册上好像说:set_drive :Use the set_drive or set_input_transition command to set the drive resistance on the top-level ports of the design when the input port drive capability cannot be characterized with a cell in the technology library.而set_driving_cell:Use the set_driving_cell command to specify drive characteristics on ports that are driven by cells in the technology library. V^Yau fu?#]0这样说来是不是对于top_level的port只能用set_drive,而对于内部的module用set_driving_cell?是这样吗?:) |
,nyJKVJnASJb0
| ||
| 你那段set_drive的引用中有一个条件“when the input port drive capability cannot be characterized with a cell in the technology library”DICDER -- 博客专栏Cr
I8U6{ MO n DICDER -- 博客专栏.H%w3Rkka-E$z 如果你的库中已经有了drive cell,就是TOP_level也可以用set_driving_cell |
wE(D#o:b,G'N\6q0
| ||
| 谢谢,又长见识了:)大哥把qq给小弟吧,以后关于DC还要多多请教您! |
| ||
| 送到你的短信箱了 |
2K+H{y[ji+Mv0
| ||
| 回头看了看manual还是没有怎末搞懂,唉!反道问题越来越多,DICDER -- 博客专栏QP$_Y_ e&J 比如:set_clock_uncertainty 0.5 clk set_clock_latency -source 4 clk等中的数据具体是怎末算出的,还是比较糊涂:(大哥能否给小弟一个比较好理解的例子,让小弟彻底把这关给过了!谢谢 |
| ||
| clock_uncertainty主要由 时钟自身的不稳定时间 加上 时钟树的skew 决定DICDER -- 博客专栏[yY e B!vDRi:} clock_latency -source 指时钟进来之前就已经存在的延迟,-network 是时钟树的延迟。 )O0d?-?)tV m%\0 T/n5[^/\B0在做place&route之前,时钟树的skew和delay都是估计的,比如一个buffer带8个寄存器,那1024个寄存器就要4级buffer,那么4级buffer的延迟就是时钟树的延迟;时钟树的skew与设计的大小,floorplan,工艺等有关,一般用经验数据,比如,0.18um有400ps |
l`ow"K4F*Y.C6E#J0
| ||
| 补充陈涛 一点DICDER -- 博客专栏 k6SA xM3x2l zn\5t,Mv!^(@_0这里所存在的延时由WLM影响,在脚本中设置clock_uncertainty、clock_latency 都是为了模拟时钟的延时,为后端layout做好铺垫,但这延时是不够准确地,且工艺不同,延时也会不同。具体的时钟树是放在layout做时钟树综合时解决它的延时等问题的。 |
R!O6Fbz\qP5U0
| ||
| rickyice的补充对概念的理解很重要 3DZI^9H-IR0DICDER -- 博客专栏TNU!Bx ]3^ gDo 。。。。。。 |
Q4r+w$H w:N BeRt4]0
| ||
| reDICDER -- 博客专栏8q}(JwpoHp 7S9X[A5{_l2|0就要这样,越讨论越深入! |
4y5RPS;_ s0
| ||
| 不错,有点收获,继续加深讨论,支持楼上的. |
6\V:vrp{.nJ*{]0
| ||
| 你可以看一下你所用的 LIBRARY 的 lib file , 如果你有对应的 drive_cell 的话,那么你看一下它的驱动能力就是了,具体的我忘了,但是我的经验告诉我,对于 。 ..lib file 里的参数认识很重要 |
| ||
| 稍微明白一点,不过那个driving cell 是如何选定的,我看他们都是经常用一个类似 inv的 cell,DICDER -- 博客专栏@M1Ec'}hlF 怎样去确定这个cell呢? |
| ||
| 通常来说,我们会选用驱动为2的invter,也就是4个管子的反相器,因为如果选择过小的反相器的话,在后面综合的话就有可能工具会选择较大的门,这样综合出来的芯片面积会比较大,如果选择较大的反相器作为driving_cell的话,那么就有可能导致实际的驱动能力要比你说假设的要小,,那么驱动你的芯片的外围芯片就必须要有很大的驱动能力. |
G9BxDn p(|:N!a0
| ||
| 牛人呀..... |
| ||
| cell (AND2X1) { H4dT+ZK"\8n(L0 cell_footprint : and2; r~Sp6s(`5Z0 area : 13.3056;DICDER -- 博客专栏\,B`z Kj!e5x%wB pin(A) {DICDER -- 博客专栏+D4i/ju5b#Ywt V direction : input;DICDER -- 博客专栏;~ e0{@+I%] capacitance : 0.00193;DICDER -- 博客专栏G5T8v8[1Fj&A }DICDER -- 博客专栏[p"DD*HZc,d%x pin(B) { q)d#yPJ]0 direction : input;DICDER -- 博客专栏/@F}x9T#HA'Jkf capacitance : 0.00197;DICDER -- 博客专栏h?@,@~L:l } |+X3z9b3x0 pin(Y) { G2h'vt w-d u0 direction : output; !L1Fs.js4p0 capacitance : 0.0;DICDER -- 博客专栏s:J M;g/Fg1DK function : "(A B)"; 'xYXSz"\`0 internal_power() { 6a,I+O(pX^0 related_pin : "A"; zG6o*aH k0 rise_power(energy_template_7x7) { tAIOqw@*O*m0 index_1 ("0.0300, 0.1000, 0.4000, 0.9000, 1.5000, 2.2000, 3.0000"); *GL~|TnN0 index_2 ("0.00035, 0.02100, 0.03850, 0.08400, 0.14700, 0.23100, 0.31150"); [%~_*_z)iJS0 values ( \ 1sG2Tb@0 "0.0124, 0.0108, 0.0105, 0.0094, 0.0075, 0.0050, 0.0027", \DICDER -- 博客专栏ws&MD K'IO "0.0130, 0.0127, 0.0123, 0.0109, 0.0090, 0.0065, 0.0037", \ $qGS9Q!\|xI{0 "0.0159, 0.0144, 0.0134, 0.0118, 0.0098, 0.0072, 0.0047", \ #{ hX)I]:Q5QP0 "0.0229, 0.0208, 0.0194, 0.0166, 0.0143, 0.0116, 0.0087", \ *TM&Y2F~{0 "0.0312, 0.0286, 0.0277, 0.0249, 0.0227, 0.0200, 0.0177", \DICDER -- 博客专栏A0F(~8V3n e9J0d "0.0400, 0.0376, 0.0368, 0.0331, 0.0308, 0.0279, 0.0247", \DICDER -- 博客专栏VX+[5t:G#yP "0.0518, 0.0481, 0.0470, 0.0451, 0.0404, 0.0374, 0.0347"); !K IJr G{0 } m$M1w2ea:X/DxZX0 fall_power(energy_template_7x7) { @'p[U|K8}0 index_1 ("0.0300, 0.1000, 0.4000, 0.9000, 1.5000, 2.2000, 3.0000"); 'BRnx*K M0 index_2 ("0.00035, 0.02100, 0.03850, 0.08400, 0.14700, 0.23100, 0.31150"); _xH"A}q0 values ( \ ;?iiM#I e j0 "0.0193, 0.0208, 0.0204, 0.0205, 0.0206, 0.0206, 0.0206", \DICDER -- 博客专栏%st\?{/}+wI(L i;} "0.0192, 0.0209, 0.0212, 0.0213, 0.0213, 0.0213, 0.0213", \DICDER -- 博客专栏%Ze.]g+RA2p8Q&} "0.0240, 0.0242, 0.0244, 0.0245, 0.0245, 0.0245, 0.0245", \DICDER -- 博客专栏w/^2lJoT~o "0.0324, 0.0298, 0.0297, 0.0295, 0.0294, 0.0294, 0.0294", \ (GY3T4OyR2BY&Y@0 "0.0420, 0.0374, 0.0368, 0.0363, 0.0362, 0.0361, 0.0360", \ "}(e;{0rP#A0 "0.0500, 0.0461, 0.0453, 0.0446, 0.0443, 0.0441, 0.0440", \DICDER -- 博客专栏8J$]n"oz?~ "0.0614, 0.0563, 0.0553, 0.0543, 0.0538, 0.0535, 0.0534");DICDER -- 博客专栏6D/MdF yNw?ls } 4f4E7b:VA i;~0 } %^*?"R+i}%?&o0 timing() { R#k3AV"~ x0 related_pin : "A"; d+rwK9xh[ a!mO;V0 cell_rise(delay_template_7x7) { M;R'_`5K3R AWzL0 index_1 ("0.0300, 0.1000, 0.4000, 0.9000, 1.5000, 2.2000, 3.0000"); 8N'Ya'HB,^0 index_2 ("0.00035, 0.02100, 0.03850, 0.08400, 0.14700, 0.23100, 0.31150"); uI$\b W M&y0 values ( \ D1E8[xI`0 "0.0810, 0.1807, 0.2601, 0.4657, 0.7499, 1.1290, 1.4920", \DICDER -- 博客专栏kIK(W6`#J kW "0.0926, 0.1919, 0.2712, 0.4768, 0.7611, 1.1400, 1.5030", \DICDER -- 博客专栏+{@%F"L-z "0.1138, 0.2146, 0.2936, 0.4988, 0.7830, 1.1620, 1.5250", \ 3TjvQ"um+Y,lo0 "0.1098, 0.2146, 0.2930, 0.4977, 0.7817, 1.1600, 1.5230", \DICDER -- 博客专栏D5vp%b;GM "0.0854, 0.1956, 0.2745, 0.4792, 0.7628, 1.1410, 1.5040", \ rE'R+N!pys$B8O0 "0.0445, 0.1605, 0.2406, 0.4469, 0.7308, 1.1090, 1.4720", \ :jX#N)k(v/p_~#B5f-Y0 "-0.0108, 0.1110, 0.1924, 0.4010, 0.6869, 1.0650, 1.4280");DICDER -- 博客专栏@zvPh }DICDER -- 博客专栏%L:z tN9e6B]5Sd rise_transition(delay_template_7x7) {DICDER -- 博客专栏I-w/zmaD index_1 ("0.0300, 0.1000, 0.4000, 0.9000, 1.5000, 2.2000, 3.0000");DICDER -- 博客专栏Yh X;pB'^f:K h index_2 ("0.00035, 0.02100, 0.03850, 0.08400, 0.14700, 0.23100, 0.31150");DICDER -- 博客专栏 U:a'i:w:gBbt%P values ( \ 6D-Sj |m%@q!H%g7@8c0 "0.0530, 0.2401, 0.4055, 0.8410, 1.4460, 2.2520, 3.0250", \ #AF RZ){@H6d0 "0.0531, 0.2401, 0.4054, 0.8410, 1.4460, 2.2520, 3.0250", \DICDER -- 博客专栏O1t}s\ujH "0.0621, 0.2450, 0.4080, 0.8418, 1.4460, 2.2520, 3.0250", \ &KMd(_m}0 "0.0754, 0.2534, 0.4136, 0.8439, 1.4470, 2.2530, 3.0260", \ ti2A8dU2H d)P$G|`[0 "0.0870, 0.2655, 0.4233, 0.8490, 1.4500, 2.2550, 3.0270", \DICDER -- 博客专栏N K)V)CNly-k T%V "0.0967, 0.2778, 0.4355, 0.8575, 1.4560, 2.2590, 3.0300", \DICDER -- 博客专栏"S$gIfq1I-WA "0.1107, 0.2923, 0.4494, 0.8696, 1.4650, 2.2660, 3.0360"); |!|(i*p9sPN,e:_W0 }DICDER -- 博客专栏*B^ OWZ!{ cell_fall(delay_template_7x7) {DICDER -- 博客专栏!WMl"m Q1t\3p-\/B index_1 ("0.0300, 0.1000, 0.4000, 0.9000, 1.5000, 2.2000, 3.0000");DICDER -- 博客专栏 u-t3z~n2S index_2 ("0.00035, 0.02100, 0.03850, 0.08400, 0.14700, 0.23100, 0.31150");DICDER -- 博客专栏kM(yo mM yAtV values ( \DICDER -- 博客专栏k t-I4k$I#g "0.0973, 0.1676, 0.2128, 0.3236, 0.4751, 0.6771, 0.8705", \ |