参考:CDF cadence
.il, .ile, .cxt都是skill代码,其中.il是源码,可以用文本编辑器查看,.ile是加密过的,.cxt是编译过的,后两者用文本编辑器看不了。
在设置CDF时,经常用到w(Total Width),wf(Finger Width),simW(simulation Width)三项,一般设置w的值为A,wf为B,simW为iPar(“wf”),若nf(Fingers Number)=1,A=B。在调用symbol时,改变nf,w的值就会自动改变为nf*B。
请问各位达人,这是怎么实现的?在哪儿设计的?
我自己做的CDF一直没法实现…
这个是CDF的callback 函数起作用的。CDF 的callback函数如果不是单独装载进来的话,就是跟着库一起装载进来的,比如库子目录下有个文件libInit.il, 很多代工厂的CDF函数就是在那里定义的,不过有可能是加密的方式,打印不出来罢了。
目前可以成功加载libInit.il,但是CDF.cxt也就是CDF 的callback函数加载有问题。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; libInit.il
;;
;; PDK Automation System (PAS)
;; Cadence Design Systems
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
let( ( ddObj (success t) (libName "1830bd15ba") )
printf("Loading %s/libInit.il ...\n" libName)
if( ddGetObj(libName) then
;; load custom library initialization file
when( ddObj = ddGetObj(libName nil nil "libInitCustomEnter.il")
printf("\tLoading %s/%s ... " libName ddObj~>name)
if( errset(load(ddGetObjReadPath(ddObj))) then
printf("done!\n")
else
success = nil
printf("failed!\n")
)
) ; ** when ddObj **
;; load loadCxt.ile
unless( fboundp('PasLoadLibContext)
when( ddObj = ddGetObj(libName nil nil "loadCxt.ile")
printf("\tLoading %s/%s ... " libName ddObj~>name)
if( errset(load(ddGetObjReadPath(ddObj))) then
printf("done!\n")
else
success = nil
printf("failed!\n")
) ; ** if errset **
) ; ** when ddObj **
) ; ** unless fboundp **
;; load library context files
if( fboundp('PasLoadLibContext) then
unless( PasLoadLibContext(libName libName)
success = nil
)
unless( PasLoadLibContext(libName "pdkUtils")
success = nil
)
else
success = nil
) ; ** if fboundp **
;; load library .cdsenv file
when( ddObj = ddGetObj(libName nil nil ".cdsenv")
printf("\tLoading %s/%s ... " libName ddObj~>name)
if( errset(PasEnvLoadFile(ddGetObjReadPath(ddObj))) then
printf("done!\n")
else
success = nil
printf("failed!\n")
)
) ; ** when ddObj **
;; load library display resource file
when( fboundp(`drLoadDrf)
when( ddObj = ddGetObj(libName nil nil "display.drf")
printf("\tLoading %s/%s ... " libName ddObj~>name)
if( errset(drLoadDrf(ddGetObjReadPath(ddObj) nil)) then
printf("done!\n")
else
success = nil
printf("failed!\n")
)
) ; ** when ddObj **
) ; ** when fboundp **
;; set the number of digits to be displayed to 6
when( fboundp('aelPushSignifDigits)
aelPushSignifDigits(6)
)
;; load circuit prospector configuration
when( ddObj = ddGetObj(libName nil nil "libInitCktPro.il")
printf("\tLoading %s/%s ... " libName ddObj~>name)
if( errset(load(ddGetObjReadPath(ddObj))) then
printf("done!\n")
else
success = nil
printf("failed!\n")
)
) ; ** when ddObj **
;; load custom library initialization file (exit)
when( ddObj = ddGetObj(libName nil nil "libInitCustomExit.il")
printf("\tLoading %s/%s ... " libName ddObj~>name)
if( errset(load(ddGetObjReadPath(ddObj))) then
printf("done!\n")
else
success = nil
printf("failed!\n")
)
) ; ** when ddObj **
else
success = nil
) ; ** if ddGetObj **
if( success then
printf("Loaded %s/libInit.il successfully!\n" libName)
else
printf("Failed to load %s/libInit.il successfully!" libName)
)
t
) ; ** let **
cadence license server ip