From e05e7185bab6aed04254ae960382abb8738ce506 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Mon, 24 Jun 2019 08:35:04 -0700 Subject: [PATCH] report_checks transition_time field -> slew --- doc/ChangeLog.txt | 19 +++++++++++++++---- doc/OpenSTA.odt | Bin 75487 -> 75458 bytes network/ConcreteLibrary.hh | 2 +- network/ConcreteNetwork.cc | 13 +++++++++++++ network/ConcreteNetwork.hh | 2 ++ network/Network.cc | 2 +- network/Network.hh | 5 +++-- network/SdcNetwork.cc | 12 ++++++++++++ network/SdcNetwork.hh | 2 ++ tcl/Search.tcl | 6 ++++-- tcl/Sta.tcl | 2 +- 11 files changed, 54 insertions(+), 11 deletions(-) diff --git a/doc/ChangeLog.txt b/doc/ChangeLog.txt index 73dedf7b..42fe61ef 100644 --- a/doc/ChangeLog.txt +++ b/doc/ChangeLog.txt @@ -20,7 +20,7 @@ The command line options have changed to the following: .... Builds using Autotools/configure are no longer supported. -Use CMake as documented in README.mb. +Use CMake as documented in README.md. .... @@ -79,17 +79,24 @@ input and .measure statement for each gate delay and pin slew. .... -The report_checks, find_timing_paths commands now support an +The report_checks and report_check_types commands now support an -unconstrained flag. report_checks -unconstrained - find_timing_paths -unconstrained + report_check_types -unconstrained The sta_report_unconstrained_paths variable will be supported for -for compatibility in this current release. +for compatibility in the current release. .... +The transition_time path reporting field has been renamed to slew. + + report_checks -fields {slew} + report_check_types -fields {slew} + +... + The read_parasitics command has been renamed read_spef and no longer supports the SPF format. @@ -125,6 +132,10 @@ total_negative_slack and worst_negative_slack respectively. report_tns report_wns + report_worst_slack + +The set_clock_sense command was deprecated by SDC 2.1. +Use set_sense -type clock instead. Release 1.11.0 2017/08/18 ------------------------- diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index ada6d8789164ec662731b6b78a226697952f4c78..cb48d45fffd42491e3dea5ab024fb2e4f76a2094 100644 GIT binary patch delta 23730 zcmY(JQ*@ZY7N}z<4I0~a8ry1Y+qVDMw(Z8Yt;RMRH+FJ+?l}+l&YEw&{V-2^&6>3b zJJS#Y(-4RXGT;#3K|o+YKt?@R6A-1r|EXTfLmBvIIgtOSA^eMN3_a~#UFeMsjV(-d zlbB@&1+hXIf6gB!Qe3(s3pqNwmfOWXLc73lQilirDuUr|Yv+s%=jMcw`vk|wlcp?- zEey{Z7RcA=rEov$Cx6NHX1Lz+mEb+9=>Dl+k*h{CmaG)QyH8GihQt6AmvcSG8}YW> zsq^t@c`RALx(7df%{oZoCSr59egBKci-zF~QT4{8jxkXky@@Sr@DTXDXCW+r{#C9Q zGCUKuehfm%T+UKY#HUdyEW^JvBTrl+8Y7+kCH0t9*o88bi-dQmE$SKz|H7iLU3|TE zBn3T!UJmtF80_s&xId+U#znN5WaF~`8hUuPXTcoyV^dQ9CRz{O{UKjxHm$2}<1wd1 zpRwMS9c)q8nV)A}P$@n>8w$?~*aaF?a2`fSn{C~0(jHsTm+>z|=LPY`H!wg!1{wy* zG=-TN6a>Tw90cUQxrc#)`A_cuzhuLMH2zezQwAYu1oU}kCGGA2g;}JEHP}-ezxBKKyhTMV(+%M}XoaRge3`_`2F0dp7pF=DBk1|A z!l509wpS%`iNbfYacPTK!SO5>v8>ssC~V-FMBk{P((Ceb@YikAc8Z49wKQk7JGmOP zDfx)7`pNi?7~(e<+HJpoPN?&kCz|_mX9{dEqXcA;!65A2Rzs;9> zPcqmwXG0}I`*GT~09Ae&3lT@uXR0G+ zi4f7QFPSBUzg*kVj*I@OlO_{x%?#^EPe)wCQ(@eUA@cU{a;9NxKmtqSFiGFt8#pgO zNWa1kwt_~FfTPM{xTL8w>h~&}Z3O!r3_Ia_RG!vML>U3IZbxK8*y>%6&IPcwi3`dX ziI}MVU|qt(c0q)s%djOLqmCp|XKTds_tsrO{i5s&POETES}z=QkghK+9r^S`2)52o~qWh8CZ3R%CJdPA$YzIzkmx<}!AIuq>Ib0NS8v zAItO`%}GFWfCj3j4xngTSMW!kuz>>w{XrQVa1;#+RbWzu41@4B&is^n-X@_Bze2e- zzxY;BG*NI>aBv&ydhDqxS8&j4{$VzEERur3ZO2%8;T)LH)9H4C+y}@Q_@Csl3sSi} z6a5{6m!WkQ0T&zqt(urCO7Uz9%VkfmaCuaKKvXN;o9F-$+ByFF7%#+HVkKzk$R0!i z`-2fI{2BjQY_|TZajV@ufy3ZME36^bY&lq?$$PVh>+LU6?Bo2em!G5dU`A4Ivj z<)k?$W~he*q6o1QAudq0tr&n0y-wLXa5Gl~q&YxXFoU3tCOtVYP8btm8ZpPi?_rIF zXdoO4(*+tk=3zc zwvD#wkFazDaqh*OC_}u;E@wcwgrk%gK1WHFh8_FYsVj%Tz7-&GpFB{NJG>GTo!WX& zaDZ7N^tJt#9>^1HF-djIyp)Mq#AT38Is)ie?;J?s`8M#Z^Qzrlc>v!65Br@@-3Ss( z!V2Xp4n2B!CDr`SA||TVHb*N-tMRsO5B8;(V^eYlZ%tohWnzWWkyW&DmM2U0@Tl`r zZCwp5H87JxT><9f!aNC_7N2zA&VcVVSH?WrmsSO-p_+awT;!}iKa{BX(C$Sglj3gu zDj-ffu@paoWy#-5`#D+78-t?? z&_HN|+2zKaH+Wzy z^f-c{kMoBw2I?N>soy>bPI1KiQs5kj3SwU!&t$)MklqxJaErUaV4W_9wqxBV`|bf6 zr3Q}^yan9nZ>JWOK1vr8m56y0v;l!K5q#Inn8&y0V85>=+pWp`u80TWs(-XaJQOBT zEW_6W+$2$VZ1oIhlH1dlvmG%%hH=8uEyB>E-)fas2Y)u+;=lY(!Y&--pbkH%;HC&6 zm##v|9c!j(`c;`E*&}Qk#F(WE@%NXAiP(=Pgnc=Yu}+=`h+O}wp;w!+MuB^e<0v{A z<=x${B@zO3v8Pnazo-+l9mI(VuS_JHD&trSfD^Vc4TZ66h-q|1`T!UDVCku5FziOh zMqfjRc{l1)P>9Q)&8co?H$y?Z-(KiYMuOvl^(|`Z3JV3BS>mt(ECQ7=^RV8`X?{VF zCs*mP2{UqCyVT8*(qvI`EmD<_MtU<+Cq~&W3{(GA=-yqUgAxtATihOf>%2HA;0>fa zk-8k*RpSKb9!6!ZAY4mS9yhOgYVGBhhgIg%Ar|R}yZu^f<}sl=$QTMY>Gyyz!Ag9^n3p7jEb%gUT6}`50SXNT$5o^zHKt@x+7zmsYmQ~OU-<#d13zT-Gl9xe9 zZbNT#{T7eOWRU>UYje?tEYYO~@Ogzty4Nz{@_wu9h1){=UNaY!(!jPoB%PTkPzmY^wz0ku=Gh!ZT}vE*1l3lyCq`%PxL z^xc2Lh}Vd=F9+na1TNfir*4t#kqR5-I4KD9WA%b^XjNqhIVbG>NHV)G5D>sBJ!z=1 z9Z7Aax5bFj!l%`e#EQ5rWsbNhEjROl9gm2o@3@e^GVTXkb11R5Ps-j0f zz$#BQFVP=@+$IBn#W41fbS14adw^N>VW=A>=Z)InW^DiP_ZY9`OZ>B5cJs-o5fX^# zdrus`BIPh3df%Xb2#!p%rA08og9(3>10QxfGc4?RVpPy|cNct10f+FtiQ_C7Xx&<~ zyaP^t2%+&cM(R}57vCY$tHk}QiPSkn zMEdV^iaFmk=L9ZrLzHkO?W+hCI9~MBCJzw zu5;${-T)Ucq-Rj14@ky^`&txr6gLp^JxLn4Zqj+qiG=M{Hr#WsbWiADLN8jh{LR8l zWfS`C31kgm$v)S?y0VnXd62Hmz1sg_-TS~*IsVF}OsOI|T;2PZ$q}~R!@?zLTsLkRxqQ2~o8@|;be|uK({GIAuE46JbRRx^OP*MXmOUysN>gIT% zXQhig`KICLg$3a~m@@?giab3VfKes7HDl`Ri~8@AE_#vexM?R-XJf8$SMfm0jI*5` zE`P|F(wj|gwx{s79g4V@+I%+5%>%yGhapF06dAFny`P~IW^_!9=*!ORO5%J5l!_2y6fn+@8|!xif+pe zx6C%;t4rl;6@(CGM$EH87_H0mkqJa^&ck2&2HO5n1$@%pZ2ta^DPXL}qRh?2_ri+l z2fsL4113>t5`J#$wMYjHJJ#*s)|^J%*B9OYOsf(o-%e4N9(SblK&^v^y%HZZo5R#7 zPqd9he~ZmrTEFTx4dwFzT^hrt2@#M>GO-*G;Y8&;N1tKcD-z zT(mC`7(tnQ+ECe?GA5qw+}F|96&qbb&e_C7YTE^dx$p`qpRp&@lMCf3P!_(S50)ol z(AiaQYd^gWK)1YUXjnI%FF0I(%1-5XO)Gad#xrV#H%78UUOH)Pw6oQ->sZ5`b?~`X29FDv z;KVpIc+^M;9RrSi!mBXK3=X;Isr8qTLZ|w`$R#Vo!b31R+i13m54HUzUy}la= z-UPo3b!W)?I{u;4I+y0X9Ntqe=AR$#J>v3MDZ|C=Zn)aMy#i580IP`-auKQVz z8eH#UoZAzo4HlF6+e}i!w=avUAK(Lk*w^3DFWrT2VJdeHP2lGS?lW*cL+zAy!9NQX zT~rP0873d-mNB5+G5utP&aby5Bsxhwe)m_P5#qwl_U`HLmFX|8Ubf~%Lw86R`27V^ z8%v%b0;2DWNuZ|XosZ)knqMdthjSApUh=SeE38d&QgAiRjl`ET>JnTj%uI5Ch;i`7 zMr_S`K<&v%=nj#YyUJ2Ogs_7{ZJ@WKRk<(^wCyX@hvl+J9$RzIJM1G#|6FVkaGL5q z;l8S`6PrcHAM_pCZWQ}ni~P8iM}Vdx{aZfvy_&3h_|_d(JSS%CkaNeFE4ToIw_?uH zb~W5zNiOzQA{e2Z+@^Xf*5e)!*{)aI=vd7slRcU%WSzf?4KTwYIg^_ z#N%i3bGFB?Y0jIo#Wy1&{~H&Pu-n64qbotLC>VJXE+%NF+@cDteam~48L;% zU(=ZqWXEKWpB_dqab^bAbMhtyp)B!ZsS75=Ch@y_Z?}rfLsJW!Vx75H`E2%7qwL8A zs^EsLd-CV&y6sp8G^?XF%?oqqk6Y6?A@6rtYF6-Fk!**NKMuD|=${ZUVaxRIqak4d z6z!fW2Y+*f4NcH`TIjXntXTb52g*AYR{y4cRDwrYJ%cZU?O~uwo_Pql%`;|J%1+w0 zZ=Ti91A`&JbE)|jiatP^SB{5;PCO<01xY}>evr#KmH43^jdv&%ud+TAUqjD)L1oq`rx+$W zc${sfO4J^T=^3EpT!GzkZAFL|j=}nlcVl6XtxIkKsuq!;{fe4plFG&z>+cb-G&M;6 zqNivi*A?r=`l;3MPKpZ!HUpC2D=Qq@%YTD+$aGQHQUF+M+Wpar#O_EP2(2keFR-Q_ zQBFN!aT%|YTy;|Z>BRdhMvMfba%k@`Hzo7l+etryG@YcwBr3(hmO?xAB%0gwx56K} zvShfBZP&@%{@Dz>H6%Dygz92RHSzw73KH!dqBH3^UfS?idh1ova12Oo0oweY<9!=N z-!{-}cQl||Sz+K5Rzb5_dFgw9BwPq2w>i{{oK+s+Te--8PNVwEsln(d+VNoQP~Up^Q;gZjd7Aeg4ZnxxkCO=1#nE|9r!ZAO$twD z<(yI6#9_5S2S2vid%7?}MA$I;Tw(6WqB2VhC;;Dp-LNNY583uzs zxLM-oT#mf97j(alfHW@@HfbF_qe`vQEkzBo*zW0HZIIpGU(^B{PLwTuRngiCYM_vj zi`}7WG+rUhF$^&_dY1@+OHDf38IhK>%7(V4G^N$y&6Hse*&^EY`MwNNPtI4NqFQ!; zKG2t}94(jjcJE6N-!)Is5T>D3NpGKMMw1jt85c5|28t1X@fC~AMPdfebm0VrFsj9d zA7+;~H3STnyR`!YZ&@~XH(qFc1d z?^Vz*3|tk%NU~pbgkaLVn&Lmx4_&GolZ0D_XwScfhl$MySpvmr&fJ=Qk zKs8rFkB)zF{W8>C4b(Alr(+^>H(}3B$%-*IGCRnqTk}{J+sjDN*tt{{xExVlHkm;4 z3A|kBY$XR;H|2_y$o5;dUSa7p8;vlVZLMOcHP%X((+lENEi+87VQus##;Rswq7%+d z@nCIwJ8vK&-xjqAK@*{k(o`1PKnInJ?Ifd0MAe_=V?TnMHFN8}G;|P^Gu^iD9NpFU zi{BPvWpogZ>N*!dcm!-}UJG7etLj9!Zm(3@X5s+e#VsiJE3Bfc+>B}Ou$JtMHcb6IRK8_)gHeY%mk3EIo-k*`NWy(wVn;7X@N z)KVc0%a-J8Vx~|kOc&+vqGZ2ST>tmQ>GgC`E7;)AV8C4*s)c7g0Zq%j)1&Dt;PKw) zuT-2MZ8kjkE$IjSLfu;JK-rA?-0^M{5Q@zACTVo|LyYf$^u{OAt&w@+4>YHz@o>f% zNzwof9BwPR1}X!N-f0Txgw)Z`QQ6i$etyQ*xZlGU2hN6X&s}J5&pH<^xp{;9S8byP z#+@VVuvd0=J}++-<@`_>#+&&XM7Bx!>!D!5N0innvof0xlD=@7$;xBG(ZU!5!1o4Z z8D5R>gn>dpDf|r6rtlSVD@jz~Ez+L!rkZW#=aA5*b%12Mg6)Ewx%`T$FmXg(A-q0~ zRFvgkF@eZw?SUGbMjz8QtYv%h=CQVCk`&=~_7PfNqSh$upy1|=t6U|>6uPh(_rEYx zk;Asp)n*PvuT(>Le=?wm!tgHr0U0sv2G&3Nr*qa@gkMH@I$y0E7l1UFkR0otDHobv zB=cSg(|=@G|2SWl+mpe>PPeTvm&R%Kl;h;Rs;IIme8BG+Q=)E3mnAK8DU}?;EMxsP zAA4JkU*aGe$&;*>0E!20I9}Ez_8?vLkGB80Dq`&nfxZ&JuA}NL#nF30%=B7CLC!g_ zL&}v|VgpZ}NezDVk*or-!cWlf)Ne}B_=kgj(~?&7&=3x5)yynN3@9yoq>H@iEeH97 zm5j-vk>vGVL7!2+n@I5ats1g*{Xh2p=lV~ObJnIngZ2$7QCB&@_KCC%FSCl@%?GIZ zc{*Q+VU=?F5whv;r$@WB;~qzl6EvCey|2`FGjV@b(@%NXdu`PYyO52ldj`2`bzhQW zN%_?e+)ITt_t&&EOGZfOiKdG`r&RF*uX%QNg?+yLUl)uwa$H{DGJz+=@S6ENo?wx5 z`>fzm1-Z_m!`}?@StqIAE}AfPTc7|N-%adeqnC(7tqeY}w~=cN1m*Y5yJ%evBz%aW z4&)G3$RBFvPcTFN5QeYZ3tUWW(E4Hb;|m$>uJVRN-*pNH%0UjU-L=+kK{jJ?$vU!! z`pohy-q9{oj-H1GC5aZJd-^bbZ_qnaHRyrwF83WFLX?|!l+q~BYwHtKVc7sU0T{(t zOkU)EaQ(bK`Qq%L==m`8rHYvm>2*=q_=ibH#^xfQJnU{29ab_w(ZKyTN!Z4yK$`eYlJdD zm8KU|?(c(Wub8y%89cwK)h^>ILHZ)H`Q@Ufmsfz8b?5RY*)lRs83VwoaAkAAA9n~T z1LwNx;*kn7Ne{Hj%CMAc#W1T z=QRSMteJFfC={-qS88ST4pDTkZjQjN&FoPO`*-=}BmFgVH^%utu9&-*J0*QJqFfDh z^9mkZS`yu#z{JjvfrSR$0o6eBeFvwVM~#RsP!{U_37h)F=#~8P!!7Je_9w*1E4qza zp}EeJ26GLUf&UDbyUXSlS5dZ;9G}}@GPj{K zBB~qSuzS_Ft!fFA)#v3X_|($q7d3XXp2K7dQ7cS?P%RYp7^@StC4+gy*V)kJ2l`Wf z!I~LesE8$(lsmW93+|pgUCkQ*aQL4!RIeVe*Y`?Jc~-rL9 zElu{oClM3QUUKg!Wpc&n9|QkjWro9~O>f~BiEyHBR$sR(j&u3`<$)>a35wwdExgPwj+c)9APp^+1 z#VpkaF(ucM!(btGq%&I3>Wb$LR}#h~3V9fG_O~OLXjUX%_qU)LQp=A%MG(Y%aa1=g z=|F)Hf?5w0gHgXkGxBR}zl3leG7u77BrJz0k{Tz!F;hEEn4u_cz=5*B(S^>Ee99Y2 zL@R+u0LDlkMa5E$Q@HM~j+3&R{@NM3&mc@!u0y@*G;xu2)LD{4i6^hhM)u=^&# z!~=qnC_Ni?5T5uZpw<`{oxCYeBU$gmV|MC@3P(QuXu1MK7$f_P09>)_ljOnneIBw>-klYT=wS1nWl|KbPi$XwRXC-wdIts+lC^xvwc{`>KSXy7*Ox=YwZ@kz2s8hQbK z^lJam3GnMaBNJ1uV)}SR2stfSql3(tCx=UCWk&AYnH+S%~q(Vd{Rmqnn*4&d(093=F%q4q4~Ec&ng!Ut2cH zgFzFx*GhS&F;-pwS6j~$Bo7Lwg1INLYr$vHLjX1SNsJ06&E?;p47t151fyI3Soae{Dgf%!r!_OFBs;y92_rPGW0Y)m26Q6>7mX(8QD?D^Ss z!7#Lhbo{JqD({Ezov9#FtH7lYNw8;h$<*rRuJTux27~xM&Ng2_>FLvVpP_TEf=2`r zWirP~@Jju$Ab4`e9Lmdnm?^%^)jDY}Z#m@~{AI5QKmhNuk0no*=fSxA{Z@cJ?4u$< zo?;Jl+kzV#Y|B-&_-Q5DSpXR zlE@6P8GD$_jpIbqV@CvL#@sEpOHuLP6cFH7t&>$-_TD^m%!?WmAC7qfgYMKkiuUjXK&|s0q&8MuikF^jTl@h)DQH5 zZ{WBRsY8`Y5e^mtFy%VZL0@s~_#3iPPb- z+m#;hEEy)M=Z2+6BpDef3E0?ASn?_ZhVxPqI>P3X->8`kfrD=tNeX%y=(%$>%ucpy z&%tiM-CSkkeqw0bi;f?(}VKAsi782Y7SB& z*~CoBbg6!QhNpWF58qTin9)+(>m}pqTZVTNr8IrQ_H*XzO(o`uArb5io*es^e~X6T z)(?8K&JmKRK8$5;{dpD1_^oWctvv|OG^!8K)&q0NU&r>-ZQ(z+6AY?9s>3uAdGg>Z zAhmbeLd*6EiB3oOniK8mj7`N-FX#dzd^N-@1|jw2W2v%aLK}RYoW>AnoCj+mC~%FPdJvc`abNYa6?7XUk;bi97+p=Z2E2)d{rA zAFW)H{w+AN7N>Iy{&*PCK`B(P{2XXoYm24Ag;9lMW@A|~@H?udSE96wUAp(1)Ql>o z6)>m^dqJTo@tXg}cY4eqB9qw)J_@ff7Am#}5&R=RUMfc*48mzqs_V0b(0m?5@`k$Y zsyp||QB{GeJ^Jm4xnB;oc3vZ%fiVo~w}ldOI}whLFl*!-jqzS$lgw1?iZ#bfD^flZ z^J(YOF_w@6-Z~twDQ0m3IsOTzakNC?H5WH1N@aOT3G+AreF@u7UU(VR%xC4m z|MgwieKWDZHYr(Tj#Jou3TB~AGK%ml5wdV+zxFk-PA>;FPrs7m?KzO|=@r-68~c5t zGrI6}cKA6uZ)l(dkWfzqhzF;(jW1sA1SA=+YsR|ENPOxIw;)yXeaePJKi^O(N2N$x zulPC_OGWVZ+u3yB zNSHIr9c!mMhe>eYt|(__nfcoQD@Bpw+)Ca3OYhCCKNlLt67S+{Rr$6N>aW)H`!o7u zQK^|&sVW3RB*jH?d;PP$Syza&*0k~wjEScFbsAuNU@u8j4H=z(uVY==WAtC=C;4RC z!`~ud-ev7K+x4^1<1PwE!~NtySsXR2ED1X1 zl)e0;jve;m0=6EXzq-f-rXSJpI$B` z@7-V;@^#b&Q3ivLDO}U@??Sx7DwAV7BS0mH61vg+Z`91o*z>M8iR2(DI2Mkf=7!Zd zaCbuHq?O%_#w0Qd-=!Xj4+-4_ZEp@{Iith0zxzI2N|IS!uUuBhR4+v*YcmgzmZkhd z4&SKT$l2d(nE!-cZRiUY-C0fJd&yYydJ40f{{=dy8{KawLJ>-xK6NN8N1aF4B*rBe zDwZcRM|()5kvH^FHm=D&IIBgfp2lZySN5w8VpP#(oJlUALKpeCF-d<37hsW$x?2~^ zLf_EXf<0G|x=^O7ISj_f8b|8ahIgaUfv)QnO(-VK2R)%16BZW==w)H>-%uNqi-s16 z2XL8pz+XrorUhYK-i%`*&~K5%rOn~=KlmObcJZ3)H&hWSeR2<0dAu=yQ#~fga!Scr z_eYGtxYreXCM3`izyT2+fD2Mmxht5em+!_l)cXLW(AvK2=1%BU(d}0HRZP_^wRpqV z!`i)O%yruyJKfsRRw#p>cbRcUa)I+e8-Y`H5Hc$Sc*_to9@!lWtqUUHwyWv-x?}{$+UZA&)?R@lFzVNfI`6u>D;;mU_hl$Z0t+@Np{*t;J|2;(Z&y zSM8`04j$z@jz!$N>*`}-8|lC5st>fltt)0grhqk)M69`|nnil!MeiSpd-oNW#}J7N zv7-szLqU7*?7;?lX4}{?uKOz0LN==RFn#m$0i!O)dd+63t(dIj zhyIL}TEo0@6tqMUbO-8Nc zD%IWU9S+8>=izb41)KLkt5xi++d#4YPqrnvX0TFK_Zj&IaY(Uh^!vy!d$0JU{bD0n zh^a$yU@B+G=P zFI!e=ay8qNlInd1M}+V3Pp>@ByFiWPl-1rfy!--QX)KP^QTY|&V)+Lmt3Ls>=s7eY zva3`_GZjYWYM^pMJ67r=hUmpqjvL96f!!VUnpziz)kaR_;*8F2t36f(ZV)dx*J?!G zcvm6p>#}RM8%~$iQF|lZ6(V8sCqw;?L@uc<&y?IJjjWL1c;pYy;245sP*Njpf_}Ku zPZluCWif@|be^~&3>!()Ym~IQOA%h-74r~iQa;_TA0?`Icfp46NAehjbRiTGk4k^T zZYvii9F<|X)~S*R*M9)*Vm=zb|F#)yW9BX0@nPp~m`{^zWl8J!91H;2X^}D_FKqIO zMSXk%e%KktIuM+0L*^#&2?lt){G(xKdJNTCidNr)yJt2@DK)H_Dtc32VVGm6)f+A% z&TK`;=M?bNA{MtHbT&1)87#0hIIxRI`nceHE#+dahtR{0o@M}f#-@qaJD!I}ZwPGTi8s8x-*7+~+?)K@Dz%2KDiuT^10^a0b5i{+Vg4F(<8u9u z1VUiW#_o*8%oQW;>IZqkmj3+Oe}u*}H<;Me`1S_yZ_49?c&d_K{}lX@T2lB_tu&2V zF^O9Ha@tJH(9BMt*Oivjg z*v-3T9j?)8-w}LsZHEB4(e`$fLRZNl(JDvx>*wr6sDaHZ+Aq>;pq9EDs8@n~lLw zZ_FwE6dJKRb+R0b&&W#D8%8P|6dbvWdwooWv}p!0e*@dw>4kIGbNvWw;2>`A+{@>w zEe+zo;eqSjKp*?m@wp}q(QtAkR$=J{u6G?Kl{7J)5lidDT*PuiPHrXL9@RAUX zR1uruGhD041`=>;&XEdUnH;=<2;m|qmJTL_`_BKZn1&m8|I`;-x4YA#_3TJ3tDW$Ue;XfYR5-PQ@D@SxC*Xtsg{4=EbZg&B zba{gk1+GFYFy}=URV3oqoALnzwOxz{$>&RQ2=vsfjwm$A$#)onDCth-_fW|S?`XtA ztp_JTtxF)SK+hF8k}{k!wntH>kL~wxVix2X#b5d*y^a0nTC|r?r{X3%?-Y{{x)P69 zamy%_gFkaXm`kdfQJ$=t*izGJ^x1+Y6B0v>*SF9P*46!?V-8haBnh|*qBJAn$A=Jm zv5Glai%!CHoES$7nDlTY0VRY8ag3$RWY4Frqz@BOF4&E<>l#^yv-7SpW$}W0syKF+ zBaiFM*w%16gdVxOTX1Ib$tXLy?=#6R@wGc&JzdqevzCxl+7V48aYhJ>M?_m$c>`StV@VuroNp%dx7)jQGUAlXdbtSKXl3p`IH z+|xI}jLkdJp>KI7ZeO;dHxY+zg#@J;bIJk~CNsi&qeSMEnr>X#@~sIQwT7ybo~)YCiNS z@C=Atmg|^5P4{&?(f={&zyWPt#W+X|d8;L>&F7Vuz9jxNPRL*FT}!b8UL96JCE%v@ zG=1KwghKc86z8kSghXFVOK_Z;v%@8Qo#r;_&M6{ZfHcBA$+ zrxEq3GI^=vMKbjLiY;JSW+K}_ha@6Xi6+PsF^DGETGD#}*Am3vR=)Z@>panLt8(h? zWRvQ`43Z72vfc-s43v189iPu1Ut8}tZ(r9kR&zf?@PSY^Fd7pLYjl+N&IgnP!!(XK zeTDz)DG~A9w;+mjBHc2SGl>#R#16{c9AaunQt2!aU-x z`Dvl`CK+S*P~JN%CZt`d>@T-+Ty1G2cu-~on*`MaUu6W-klQGVN$;eKJx=788r~q^ z`eoc$%e>vms;#mlwtXgGLu{F>aUip4)Ye*7gkmex1hra<;s%cCK|6^c+n-)%M~i+r zwpAmr)(eIEYdZ*13(ch>Clz7@nHm45LmuD4CF%l2Qlv;qvwd3NduD(nXb?)K5Rqoync z_{n);Ai`)_PtuvPv{zfyH`_V$*Z)_j9Jeliyj#lyELRTlp{b-9P`?`Qb4zB-h}JPU z&D34fwZ7PqfF?DlXuP@=(=>NxJB}oAAN5c(0veSG487#yeEYk5GQ!r~T`ll3md!HE znJuoKm@j3Oe}B71{G-GjrnY?`jLS4o;_xBc{o-4t4xL$E@|Y`|7`nPV-tggVms~3q z9h2RVki%Do1A4oUc+N(9D;a+J?gNZtpB8^>MIo>tfe$|#<~t;;VV++KrskrmZsO{u z=1M7IOj_nMw}uuxPVB{@xGZV*@}o}}tpUAT_jNxX{GWORp;e(Kzmj)WRu0 z6qx~DRNG=wG80>qOdbgCCY0$W)$$k@9VtB=IlCodHq=Wth0=t3S@0OG@l{V9W^F8J z?35h`Ks}@rOp$0GInPc|m;2vl({x^C+dYVGrMj$$Ak=}3(HXNYuB)q3K7}co@)B6X zqL19&i#e176liihwh9qi-r($lh()cr`#B0zz^C$mM^XR9A^c}x8-L!U;!Wh^i2b$H zvBqTYR*SI|#JDa~NWFLu)yna^cTaHs6z5Jq@PXHhBt>!k!jsTX_r|cdB{M=UZN`Kp z^S$1wa65QhQAxTXS%e&eEQ7a?g>DW^=Wwtu$X{$DzZWcnwAc*1<_FY-neT}piw0F$ zJ*K8k{iGSUVFs5>oX>NBJVb|@LCl! z@ccGsAOvEmHP!e*U!3iD`ml!tg93v+Q3s*hk~=w2w?{%^4eH|3MX&9UfPFGnJ#NXF zs2SQ~Mcg4AN)b8h0-H%Ch?WticcZx&&{Q2y|9=nnW#90X+-Y@to-qCDRylKP=KWo0 zth>SgUHX(_4feAR60%E`*jlBIx ziY+$^xQz;j{Npc(xd=Z!6NZsx$^FMHQ>~qJ@v5Z7f9A1MIxl}HAQ3v8s0f)4)n{cB zZFpYPj&Xqpk|VRef{dB|+xP7GeTcF{rvB6D;`*PKJv|l227MQ5;b4#X^*pF}n$Wzf4s3 zHpf@hTNO8VYfH@C{D?E^TSbpGm5EUF!J zjXGF)&CSBRXu2vh;~nN_J8&|85-@D=C8PTr);~wZSCXMkf#feH&>EylymrQZQ$+IM z?c{!53c|FXpbV1gF-6u#YmdNI-ia@B$dr#h3$YjfQ<=4v05(PNofC`%6l+v0CyFE; zntTpdMK%s@yeKmAS`x?wTe$nvwH?xu&`{KEjaTpfq`yC5XN_Nx(O&Oa+;zVmt>$Sf z&d|l4Rq0^y+hPgLEHkP;VhilUMn=2Fo!1K=6!kdKEEJ`mA7>2<<~TL92sMTiQ6lDj zeXq?;3RLGbeEze@VMzQqJ4ak)totlg!2mcri7g>~o^i{>vjaNwR_wahUQ(#MsK(mt zHM5k%U;cBGab9~`Y<6*db z0KvH=|NGtly|-@Hbe&UY>%{?mACRPtW5uO#38f*1nc~A~y57vC2QGy#Q72)D!== zosBeQHm$Hkf$`hnjyXZM27OnxIx6^sptk!^p|dSeXO~GXvS=$GQ=dNB#c3NNyYwjw z@2QzE4NMTR{=Lx_iPrSYN8zsrE}ElEhYPgX^ZgdwFDb;WmWPrR)jd=()KA+(u=kM3 z-e0Ep3^4WC8Vpg_zOXqcIOO4g&u6|{5xcL~45zS9&n8`%kJmAkwUqxz&%+2yOq*m^ z9I;yfYWYUb8BfKOBj4?h0}6Sp@?Z!vm={TatXxi9SzQk^Ak$M2YJEH%0Mwa|hMkgO zwU&;!)Un9c%Uj=n!VVv3C~&mVbsAJ;|Gp=h#EbC>Va2q45F`H8Lul^UdNI!+`}sFn zO%{E6*F405*RO@`A?=KeY>)>NGm&>BneI%QvDCW3UJ~C^pDy$3 z;tBgBAT@*ZdU!X<_lB3t({c7K$^AaaXv)HQ@Sp1>S%i5+Ixg7mz2TVG)mGDIuD3Y{ zb{M-ajLWo2z+c~{#V~^HOALu9wV&|3L6vZQt z6Dd&mg#{CYm2{yVeW=clBi?v#Kml%tZ4VtWt6sG-J*xchE9S#xW1Rf$>!nf!fd)oJ zb%)mp#@TIR3I#h}`h#S%#-kn@EKh)Q6|_T#3ft$bTJE!x(j^%mDVNG;jKk)2^LM;z zyB(Q=4G$Z@#HiDO0xo{Di!LtSw3QbhVU||Yfz9~0@9Nfg)&k}WBo zu8MLnKcT)^fRi$9kysuqtC+yrGH$=iH`JU7ozJUHr^TZz4E+e-PvYbZn_nlXOSO`2 z;`P*gHe|(oQtB$P22%|0zX=4gGgqY6>zQ5pl!6fL?Nnq37|hD2XbK&t7<*eKb?ZK^ z-oO=yGKKVBD?dkQQLu8ByP!Va>=VQrYiZiTb+<*6w3q1cJ&=#Tvuj?FuWtLXWT94d zZu*OdsbxDE&zwsJ;62XMk00McW1M5K*^VoOb&) zjp(*KbZ91!lX%%!67zv>D#~teICxgu+1_FQq@|_4Crj7JQtk0CgOb_QwCN%25wtQ+ z`kJOoRXo>g)?EQ=3x^E61$&uavy5kS=*#+E$SV#@o>Q#7%%0Fp=qZ`BxBNogZGdlr zfnge5i~50NIUuItTDwWK2W~Y*6BgL4vU}rQi}Fn&3VAspV>bGXqGdSF(Uxw?aKlN3 zPH3Jc_ZW+=84AMUb)&CCnh1&A&3W8<70+~39ErK~+c(6%_;JT2wh}ePvO1qILnv?o zVzx`_a0rQAL(O+T5ZImF#=sLV__LwUA=BzmiB`ey5hG){m6wO3;p6;9`nTi@7rK2F zrKIRUfb=%kce|2=(#+9`c8#v}$7wu$)-gAvL|@*YWOCAF(3fqqbS})51d-~fCW~sy z%x5zR+Kx_HIFIBKsCXs)(!%ilUFXIxu5|pW6herYC737~cTRKa_F};^1^u!+n=eTr zCs#yv)Mm$R5;12I*}TRTlsjQ26F&TyoPe>hQJR zy0R2AiZ}M+)1v#klV%~*#NrY$EpF-^G0M04h* zq=nkxas}a3b6tEDCmV5JJQ)YP)2UJH7t#5xz4B9PUY7S7Gbs$zc?(3QCbjh|1k>nR zUb21-pepu=dtFUPL5nyq=+@QqAM%2eqIk^GrT>{=lZ?775rnS3{2Tz=| zx>eFBA)+SR5qU2`m_Ii(MY|WrMtBC@2COe}U||n>Ln^pcDjwR31Xh5vxP{?kVKfu@ z8qxSI=Yd$}7#gx)v0@P@y5?)oD7czmafuS=$B~n~N~LdPEe$K_OIU&+%1oPmilYs5 ze|nE3ZL(RZb(L$Cmt!eV%6QmUfod<9lu0?gdB3S$0zr zv^{Sl?L9Wa)yr}Yyn-X)Kbg74FkULfc_(5Mk>5G307bpp+u0{ap7ZBzfF{ z$bV|QcX8)aeVabOQjV<){Z)fBF`V>MH;?}Kn;Cpj)+}EzfjOv0Q72F*GShF;kr}TQ znR}ZNi6CTplkpQ9&XH287Y7;l#^>&WTkQBa>Nc5pCkuA|E#3r_Uw&`LtAyLtCgZ?_ zD0tP~zIItdi9}B6t14vkt=b7;P77jz`q6ir%}JiamrWhOqDZOFub2(f+ZKJJ%*QuE zfoA=(#6zm{R0avey?pHnim2}$LcMFQQP&r;+?p+=OnPjlN?2TN$mwF27(^qTFA(em zJN$({F%suc2XT3eG13MOnZfygQH%xnMw?ib?BK`d>K=NF{+-X zbNbP>>&N%VqxQy0p|O4LhDo844OAFgDys^uTHH%a^hNTg4X8XMO{hl=e#)>ot6^6i zqih1#l>L?kfgCd2w>Tw6zAkeiRAvJk5?y*fXj0<=u+{e7 zgiO0^6{VCu63zwQRr@iuP@?*gBv1P z1)wgY-HHd53k2b}DPdx71UfuFGvV}Ca|-zY8_4>LQ5>0}F1ycU8kzSiwycAis8DWKo5rKE(PSqZqH@__R0E>M-+-B)nG*XcV z2OOU~pw()YKsU37Bdm@ij&g@(&dId=Nk0kBH_L3yQ%Q^0A)kee-ESX{fb_|c`QrnR zd$^LQ=IY+Bp&1zr5&W7WSX`!q7ZjInq+C|@a1K)9tnJ_d1FrA?Pef*IKd*!)Lw%|} zLP;8rtrsR;JH_=?-N$F<*Tpy4Fz8kJFnnX z+afI_;NnneVGPf1z;Z0&C)bnf{o~M6%4>E}irh`kmFVm-_N_*8&G^j8?Y{zlyD@!d z%gbl9g5-TNCb-H^8%H4MEdMc^o8FNYI5wZ?*%~Ek;z+I( z0K@g-14LWAXs?J<`(=@K#Y%O_aj^({hofsB^0{1fgRv$fM|lW_xs$ArNQZ8N2}WOy z1IKj9Xo5%zvuLGsBRp=H&o}(;Kll?q>u1rCyKPRhtyy+|7jp%&OqTdG%bvGqc4b?IV5 zZ$_eqe8-klSL3Zl!NPM{1Jyeo@d7MvpG1bs8hG4=`8%x>V!>lHi{_8MJ|(r9xr4hYK8A>?aL31NXO%DxWylI8sLS*d)r!; zzE{aPrV`8_VCqpyELx*`+pfV73h$u3tm?2&xpPpxODPZlO}pd+!kG`SY`{3Q)A-}M z4dMCE=h=Vw%GT1Xlq>M><2(Dxq@4-21*}o-dh>2=lcQzK($~|itBasIb^pdXb|5R$ zv!X2UB{>0tJSE`~PA*c5B>`JeJv;`-eg%lz@n)Ful{DheG+M* zGpijO4-Rq!7}b8_g`uTTWbZH$uvloF5(u5RsY>kpK4_-wj@lGTjRo^#b*nNnvEnM) zQBBx)@xKUKSw6;Gsp3tc9o9I%i21VGh}9ALAVMb9SHuP7Qb4f0P3<}xzpf6#8gC;m zt$#_8cl{-_3Zv7*Idfqs@Xpdej7S6soNhc+7Y_gvCP`}OU);QB+ z{L~@sI7OCx*GgTyZBib3QsP`EAJ6Q?y}sat)V~(qOs-(iv!9@nsRL;sPih+dKH@CM zOyM617&{3fkix$T%kn(qLc}kgZbs4~OpNFqprD*o9+=H^f!5|BU0Bu=wW!6Cjq+Y$ zXqv3Isc>3H?6zlV_XMd#zM&)Zr5Xq&L*u3I3sU*oqf}>8EV8R>uU=h&P1jEXLX-$u zivG$^k!EMn1aKibBbFX2kYMc*f~U&h$6S*xgxtB=MI!W{_7px;>fwwC=l+eT9R0k{hd zfV6wT#hbIleVk1QZza~Ra17v)xE7j3>hF#^8LOpC_6WsP4Lw4;cQ&^;zE|zYBg-ZG zZWgNmVD2Fq&u#ExuZ<6Lo-N2zWJSFg(71p;AP_ssQXuY@9YDq|ZcdFA2w&34>4soY5n&owBqs~lRJip>e!RKUin9SO|nv4R83~J<^aYYMm zv}a{M6Bo}~^q3Q#BH`^^iH3=!ju+@UF$&KvNeJq z?#mZ&1k?~2kGUxGSry1Pwdiwjk-$hxKWy)xpL>eQ=+JNKCaok= zKv_TPu)+C{j7MlHSid- zK~P4&$WF<&9i$0PHl*G?RjaZp7mPM~wG>;CO*0hI1SmA#o$h%wMS$F|itoz;%gsmo z5u^K+8Rqc&2p2*^%&Rp(+Ld^ULYo`S!`V zKmZ=t7AQ3YiYDqUiwB1MZ0FPLt0W`HzySBn%SG^miDfQH255c^}j@XLpSr5ezDj( z7^*)m$4{G{E)YfG?DFG@M2Z&!cy;&SXXaF&#vC4-c!z@?roqWo`5?2_M=J&?^izT~ zuhKCMDb4eAOD$#0uZ+#c&5C2Mu!~rcXN#w?7Kx z0M>%3k_e3sXD6fjbnJ&xLd0#QTnrRs?&#F=dVOYdS5Szb|MO|fq$uKLaQ*kVhv{eb zPX>Z&oJwr?dx<_kW2{LHAP6LRM1G3kAqylr-I~&0v6>k*=WIAj-f5Djko@hZ!M79U zGYX@e5k%@*q5D_vL=dPzp9{qa70wMg;MmOqR;IZQ%UocD@(`+`IQ?W8*KnYDN6|Ue zg2#RFc+yW~9EE#`IczOrE$?{gyY9*5%raFsAtLFZL8-DM z&t3@YJ!IyYzH7zs3_3KY7Nx7#T>2~P&pakV;7MS-y3^O;KDwXZ*5ar`i}_Nt0hdK% zdn=v{FA{2{IziO!r-Z)M)!CXb`4=bLX!v%p#kpchy@RDmT%uR%?oV&3&s0ZN8R55m zi>&hph!}F$#5)~A!{nn_yBPe@^AyQ4ue2sSoG{Zd%T+XlJ9?4c#U#;lnt8F3OOrjh zZuO>{!aqY$6a>QXKd`=;cKR(_1&jqN9fsRemU>Sj*uSa%Z>1NLEX&iyaRyDrh&eRVm?}f-nyQ@g+kq*wv_#D-=`+uip`Fa1C z-qFx4Zk^<%P!JG&>Houv{7SVeu#)d5ZEmxCT@`qV7 zfMl>A@2UMaD>JN)0mMoB$MkRf!Tc8wHUa`)DkF#l?H_!AjWK~J5f^S@2TY*9CYAWhQkCR`h!z{0qk!SOq&VB{?{Rh2_*j? zsQMF63EO-0egr5CSl%PD{q>=KG$R7{Fj2;Tg8p{gbPrX#Bl!bk1ayBMqwcre6v`vt zbjTy$^dAcE|6fk-VH3Uu zCjAsdsq?3|KXXNbhJf&=K2nPRt7wpe5S(p1EdGGx|8AN|@_7>9;~4Xi5fF&~6@!2f Q3#)z#Vnu!Yp8070FAPvv@&Et; delta 23847 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 } +const LibertyCell * +ConcreteNetwork::libertyCell(const Cell *cell) const +{ + const ConcreteCell *ccell = reinterpret_cast(cell); + return ccell->libertyCell(); +} + Cell * ConcreteNetwork::cell(LibertyCell *cell) const { return reinterpret_cast(cell); } +const Cell * +ConcreteNetwork::cell(const LibertyCell *cell) const +{ + return reinterpret_cast(cell); +} + const char * ConcreteNetwork::filename(const Cell *cell) { diff --git a/network/ConcreteNetwork.hh b/network/ConcreteNetwork.hh index 6fe3e74e..a754e8f6 100644 --- a/network/ConcreteNetwork.hh +++ b/network/ConcreteNetwork.hh @@ -76,7 +76,9 @@ public: virtual const char *name(const Cell *cell) const; virtual Library *library(const Cell *cell) const; virtual LibertyCell *libertyCell(Cell *cell) const; + virtual const LibertyCell *libertyCell(const Cell *cell) const; virtual Cell *cell(LibertyCell *cell) const; + virtual const Cell *cell(const LibertyCell *cell) const; virtual const char *filename(const Cell *cell); virtual Port *findPort(const Cell *cell, const char *name) const; diff --git a/network/Network.cc b/network/Network.cc index 7a9e38f6..f577034f 100644 --- a/network/Network.cc +++ b/network/Network.cc @@ -52,7 +52,7 @@ Network::isLinked() const LibertyLibrary * Network::libertyLibrary(const Cell *cell) const { - return libertyCell(const_cast(cell))->libertyLibrary(); + return libertyCell(cell)->libertyLibrary(); } LibertyLibrary * diff --git a/network/Network.hh b/network/Network.hh index 79c97381..f7ccbade 100644 --- a/network/Network.hh +++ b/network/Network.hh @@ -132,10 +132,11 @@ public: // Cell functions. virtual const char *name(const Cell *cell) const = 0; virtual Library *library(const Cell *cell) const = 0; - virtual LibertyLibrary *libertyLibrary(const Cell *cell) const - __attribute__ ((deprecated)); + virtual LibertyLibrary *libertyLibrary(const Cell *cell) const; // Find the corresponding liberty cell. + virtual const LibertyCell *libertyCell(const Cell *cell) const = 0; virtual LibertyCell *libertyCell(Cell *cell) const = 0; + virtual const Cell *cell(const LibertyCell *cell) const = 0; virtual Cell *cell(LibertyCell *cell) const = 0; // Filename may return null. virtual const char *filename(const Cell *cell) = 0; diff --git a/network/SdcNetwork.cc b/network/SdcNetwork.cc index 4b5ec7b5..94140ccf 100644 --- a/network/SdcNetwork.cc +++ b/network/SdcNetwork.cc @@ -592,12 +592,24 @@ NetworkNameAdapter::libertyCell(Cell *cell) const return network_->libertyCell(cell); } +const LibertyCell * +NetworkNameAdapter::libertyCell(const Cell *cell) const +{ + return network_->libertyCell(cell); +} + Cell * NetworkNameAdapter::cell(LibertyCell *cell) const { return network_->cell(cell); } +const Cell * +NetworkNameAdapter::cell(const LibertyCell *cell) const +{ + return network_->cell(cell); +} + Port * NetworkNameAdapter::findPort(const Cell *cell, const char *name) const diff --git a/network/SdcNetwork.hh b/network/SdcNetwork.hh index 5a12eaaf..5e92d299 100644 --- a/network/SdcNetwork.hh +++ b/network/SdcNetwork.hh @@ -47,7 +47,9 @@ public: virtual const char *name(const Cell *cell) const; virtual Library *library(const Cell *cell) const; virtual LibertyCell *libertyCell(Cell *cell) const; + virtual const LibertyCell *libertyCell(const Cell *cell) const; virtual Cell *cell(LibertyCell *cell) const; + virtual const Cell *cell(const LibertyCell *cell) const; virtual const char *filename(const Cell *cell); virtual Port *findPort(const Cell *cell, const char *name) const; diff --git a/tcl/Search.tcl b/tcl/Search.tcl index 76dcdb2c..0b6b1f19 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -133,7 +133,7 @@ proc delays_are_inf { delays } { define_cmd_args "report_path" \ {[-min|-max]\ [-format full|full_clock|full_clock_expanded|short|end|summary]\ - [-fields [capacitance|transition_time|input_pin|net]\ + [-fields [capacitance|slew|input_pin|net]\ [-digits digits] [-no_line_splits]\ [> filename] [>> filename]\ pin ^|r|rise|v|f|fall} @@ -254,7 +254,9 @@ proc parse_report_path_options { cmd args_var default_format set report_input_pin [expr [lsearch $fields "input*"] != -1] set report_cap [expr [lsearch $fields "cap*"] != -1] set report_net [expr [lsearch $fields "net*"] != -1] - set report_slew [expr [lsearch $fields "trans*"] != -1] + # transition_time - compatibility 06/24/2019 + set report_slew [expr [lsearch $fields "slew*"] != -1 \ + || [lsearch $fields "trans*"] != -1] } else { set report_input_pin 0 set report_cap 0 diff --git a/tcl/Sta.tcl b/tcl/Sta.tcl index f93a30c7..6dae23ad 100644 --- a/tcl/Sta.tcl +++ b/tcl/Sta.tcl @@ -292,7 +292,7 @@ define_sta_cmd_args "report_checks" \ [-sort_by_slack]\ [-path_group group_name]\ [-format full|full_clock|full_clock_expanded|short|end|summary]\ - [-fields [capacitance|transition_time|input_pin|net]]\ + [-fields [capacitance|slew|input_pin|net]]\ [-digits digits]\ [-no_line_splits]\ [> filename] [>> filename]}