Chip123 科技應用創新平台

標題: 自动调用2个via/contact的问题 [打印本頁]

作者: lnxmj    時間: 2009-7-23 04:33 PM
標題: 自动调用2个via/contact的问题
因为tf或其他的设置使得我用o键调用在tf中建立好的symbolic的cont or via时。默认都是1行一列。而我希望能自动一次调用1行2列或2行1列的cont/via 。我用skill写了一个简单的程序,如下所示:但是由于leHiCreateContact是一个交互命令,会弹出一个窗口。所以目前从第二行开始的语句没有作用。但是我从icfb窗口中逐条输入skill程序中的命令时就可以正确实现我要的功能(即一步操作就可以调用2个cont,而以前要在弹出窗口操作,需要3步)。我也尝试了在.leBindKeys.il 和.cdsenv中相应设置。但没有成功。可能用leCreateContact代替leHICreateContact就可以实现。但这样就不能调用tf中定义的标准symbolic cont/via ,改tf可以实现,但自动填充时就会有问题。并且tf也没权限改。大家帮忙看下如何解决?/ p& j& N- }( y4 s' m- H
程序主体如下:
' O: d5 v: v# m; X& j+ P    leHiCreateContact()
4 {/ S! E; P$ O+ E4 b       cv=hiGetCurrentForm()% |- F: a7 F- i  ]; Q4 E3 v
      cv->contactType->value="via", O' @* n; M* J6 a, f* Y
      cv->rows->value=2
4 T+ [/ e  y+ t( p0 S! C  r+ Y     hiiToggleEnterForm()
作者: veteran    時間: 2009-7-23 04:33 PM
Hi lnxmj,
: ^+ r, z$ ^$ m" k
9 G8 _3 P4 B5 `) y. ?1 w既然你懂SKILL,那就請自己參考以下的SKILL code,應該就會找到你要的答案。當然,你該看的懂要改哪裡。有進一步問題,我們再討論看看。* }: J7 t. ^6 D
# ^/ d; j. {# h- h! s% P
Hope this help,2 O- i/ E9 U4 }- X# {
Veteran3 i0 u3 B9 Y" @* `# `3 E5 d0 m
7 I! b8 x& d4 y0 g5 A- A0 O, x
======================================================================================
5 Z9 t1 V5 d& b( T! z0 w. f/* This is code to help user quickly set a bindkey for their specific Via by setting row to 2. It combines three actions.
, X' [8 j$ N- Q" L1. Invoke "Create->Contact" function.4 R  p% n& E& O$ K7 v3 Z; C
2. Pick one specific via type.
1 H, X0 a" x: n9 s4 C0 ^# k3. Set row to 2.6 h7 G6 X* q9 O; k4 Q
Of course, you can modify the code to fit your environment, ex which via, ex row value, ex which bindkey. And you can also follow the same syntax to add more via you want to use. The following example is to set for 2 kind of Vias, M2_M1 and M3_M2. And the bindey is "1" for M2_M1, "2" for M3_M2.) X, Z5 W+ K0 [. F, c

$ h1 x3 ~3 k$ E3 s7 dHow to use it?
4 A) |- [. J/ k2 F1) Load this code." y0 ?* q6 H+ r$ w- U( a
2) Press your bindkey to invoke such function., U9 }0 u5 z2 A1 K
*/. y- a# c9 y2 A2 N; B
3 b* n: l, g! N6 l
procedure(CCSRegProc(args)
+ w( v  v6 K! I1 R, A/ I             args
5 s4 o& Z- C  j' C* O/ ?/ k* P: n+ w* e. c# d# K
/* Check if the callback for contactType field is present7 e) j( ~% I1 w9 D$ A
By default there is no callback */5 ^( B8 x9 g6 y, Z, M: G8 O
" q! z! ^$ H$ q+ _! t/ o
   unless(boundp('le0ContactForm)- D4 Y* [0 T6 F" ?$ l
     hiRegTimer("CCScancel()" 1)( E* i% N3 h7 o) S3 P9 m1 ~+ Y+ L( t
     leHiCreateContact()
. {3 f9 d7 H" U8 ], x( S9 w) b3 L    ) ;unless
1 T  V2 j8 e8 C) N  V1 d/ }$ N1 i% Z, G) ;proc
" f$ |9 a8 K3 E  ^: x: q- z5 ?$ \0 q1 y: @
procedure(CCScancel()
; }' d( G: O" r7 _5 S: d7 s8 A) ?    hiFormCancel(le0ContactForm)" y8 Z3 {  @' F2 Y/ d
    cancelEnterFun(le0ContactForm)5 [) K( Z2 E- p
) ;proc
0 p. x9 X, ?8 W5 O1 w
; \0 ^/ _' A+ E& G( H0 G$ Z' Z" i' }% U
procedure(creatCont_via21_2x1()
* l7 ~/ h* d" ?    hiRegTimer("le0ContactForm->contactType->value =\"M2_M1\"" 2)+ B5 D0 x& U1 y& j8 q5 o( k* `( n
    hiRegTimer("le0ContactForm->rows->value = 2" 5)3 `9 g. ]+ X1 s( A+ a
    unless(hiIsFormDisplayed(le0ContactForm) leHiCreateContact())
$ U4 e# J" p' }' p8 p3 E: P);end procedure$ {+ g+ l# \0 h3 Z  Q- O6 ~% ]# r
hiSetBindKey("Layout" "<Key>1" "creatCont_via21_2x1()" )
* Y& H3 P& k* `$ ~: `0 V! @1 H- b 2 y) c4 r" C' g

* r1 B" w* G) v, Bprocedure(creatCont_via32_2x1()
# [& V2 g4 I5 p; r2 I    hiRegTimer("le0ContactForm->contactType->value =\"M3_M2\"" 2). b! @9 l( o! a1 Z
    hiRegTimer("le0ContactForm->rows->value = 2" 5)8 s/ k& `4 g! q& @# e6 p
    unless(hiIsFormDisplayed(le0ContactForm) leHiCreateContact())
0 Z" C9 g9 k$ g; g' q);end procedure3 S" i$ w' O+ g
hiSetBindKey("Layout" "<Key>2" "creatCont_via32_2x1()" )& D( @5 L3 R. H# I1 @# o$ s
0 X! w. i  H: U
;;you can add more Via like above from here.
作者: minzyyl    時間: 2009-7-23 10:23 PM
幫頂,我也想知道實現方法。
: r8 P; L, d" f$ t* c) ^
, n$ O; i. O  T# P
$ i3 D: u$ Q9 l$ V; _8 ^+ e. w9 z: S另外向樓主請教一個問題,你寫的這個程序保存成什麽格式?放在哪�然後在virtuoso�面就可以調用了?
作者: lnxmj    時間: 2009-7-24 09:11 AM
標題: 就是一般的skill程序
就是一般的skill程序,上述的程序主体做在一个procedure中。在icfb输入行中load就可以了。
作者: minzyyl    時間: 2009-7-25 10:59 PM
原帖由 lnxmj 於 2009-7-24 09:11 AM 發表
" V& N8 y! f! q. c: |/ @8 q就是一般的skill程序,上述的程序主体做在一个procedure中。在icfb输入行中load就可以了。

* w$ r/ f0 _! n$ Y
+ G" o% Y2 i: Z1 s5 V
; M6 {* q( h, m3 J/ j+ ?/ B做在一個procedure中具體怎麽做? touch一個文件,然後保存為.cal文件嗎?
作者: wujie828    時間: 2009-7-25 11:00 PM
记录下所谓手动三步的操作(可以再log文件查看),写成skill文件,做成快捷键就可以了。
作者: lnxmj    時間: 2009-7-27 09:14 AM
標題: procedure是skill语言中的类似子程序。
procedure是skill语言中的类似子程序。具体可以看下skill的帮助。/ x" @" p1 k0 ?2 J' t6 o% ?
四楼说的太笼统了。还是没明白我的意思,不知你自己有没有实际run过。
. o" G: O9 E& M/ w; K) V3 J查看手工三步的操作,可以设置完log filter后,更方便的查看。我就是查看完后写的上述语句。也设置了快捷键。
作者: lnxmj    時間: 2009-7-28 03:40 PM
標題: 非常感谢Veteran帮我解答了这个问题。。。。
非常感谢Veteran在百忙之中抽出时间,帮我解答了这个问题。8 [) ^2 X9 K2 [2 h
(1)按Veteran您的程序,我修改了相应处,运行成功了。真的非常感谢您。我也明白了:以前我试程序时,为什么不能在leHicreateContact 命令使用前对rows and contactType  赋值。+ A7 Q7 Z+ `1 y6 C2 f0 ]% r
(2)对您的CCSRegProc procedure,我还是有点不太理解。后面的creatCont_via21_2x1() 主程序并没有调用它。而且他带的输入参数args是指什么?这个procedure是检查是否存在le0ContactFrom 吗?
9 ~: P) Q( R0 b  V(3)我想实现不出现leHicreateContact 的交互窗口,而直接调用2个via/cont,即在leHicreateContact 后,自动进行类似hiFormCancel(le0ContactForm)的操作。这有办法实现吗?我试了一下不行。感觉是因为只有彻底执行完leHicreateContact,  即关闭le0ContactForm后,才进行后面的语句。是不是要实现这种功能就不能用leHicreateContact,而需要用类似leCreateContact 这样的命令了。
2 {% Z; Y& z0 _0 E& ?(4)呵呵,问个菜菜的问题。如何将悬赏变成已解决,并给您悬赏的RDB啊。
作者: veteran    時間: 2009-7-28 08:37 PM
回答你相關問題..: v, |, _: h5 n% z4 S

9 K; u3 |4 z, b8 x0 {, W. W4 f8 cAns2: creatCont_via21_2x1() 就是主程式之一。就是用來打開Create Contact form,然後將symbolic contact選成"M2_M1"那個contact,把row欄位改成2,最後自動在5秒後close create contact form,以便下次又要重新啟動來用。而le0ContactFrom應該就是create contact form的from name。這個不是我寫的,但根據我的理解是如此。但這招用來改變Cadence form的值很好用。
0 U( O. T# s1 T% B0 W
, H2 Z, M2 B! g& WAns3: 我不知道你那種方式該如何實現。但其實我連這種使用SKILL去將Create contact變成1x2的方式也不是很喜歡。我寧願設環境變數,讓我可以keep上次的值就好。也就是說,一旦這個Via我上次用成1x2,下次我再挑到這個via時,它就自動記得我上次用的是1x2的。這樣我當然也不用再去改它。! h3 F  q5 [# @) ?7 j3 K
; s( W( ^0 c! T2 s" \5 F' P- ~. I  S
Ans4:我也不知道你要如何給我RDB,哈哈..因為我也不曾給過人家。有幫上忙就好..) U9 J( t) s+ d7 z8 i9 p3 ~

2 c) d1 K! g0 i, LVeteran
作者: lnxmj    時間: 2009-7-29 09:52 AM
標題: 呵呵,多谢veteran帮忙。。。。。。。。。。。
verteran:2 L( L( @: C6 V, o3 H. [2 o
  谢谢您再次详细的帮我解答问题:) $ B! [5 O# R& E" I% H( V- @
  (1)le0ContactFrom就是create contact form的from name,好像是系统默认的。就比如建立path的From,叫le0PathFrom
1 P/ \: b" |: c. f: A, x, ~   (2)您Ans3中的提到的想法很好,肯定也很方便。并且实现这个可能只改.cdsenv就行了。呵呵,我回去试试。; [0 t2 \) A& f, A, }9 N
  呵呵再次谢谢您的帮助。有机会再向您请教问题。
作者: easttse    時間: 2012-5-4 03:06 PM
不明白 不明白  。。。。。




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2