在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 436|回复: 24

[求助] PCell参数更新相关问题-SKILL

[复制链接]
发表于 2024-6-3 16:09:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

有什么方法可以通过skill语句更新器件的CDF参数吗?
用dbCreateParamInst()生成mos管的时候,管子的active 层不会跟着length变化,导致length大于默认值时,管子两边的dummy poly直接超出active区域。选中生成的管子,按Q,在点OK之后,active层的尺寸就正常了。
我判断是改动length时,active的尺寸没有正确地随length改变而更新。有什么方法可以通过skill语句更新器件的CDF参数吗?就是类似按Q,然后点OK的操作。

 楼主| 发表于 2024-6-6 14:36:30 | 显示全部楼层
终于搞懂了,4楼的方法是可行的,但是evalstring之前需要先定义 cdfgData 这个变量:

cdfgData = cdfGetInstCDF( instId )
这样才能定位到目标instance。
11楼给出的答案比较完整,这是通过重新执行 callback 实现的参数更新:
instId = dbCreateParamInstByName( ... )
cdfgData = cdfGetInstCDF( instId )
wParam = cdfFindParamByName( cdfgData "w" )
when( wParam~>callback evalstring(wParam~>callback) )

也可以通过重新执行 formInitProc 实现的参数更新:
instId = dbCreateParamInstByName( ... )
cdfgData = cdfGetInstCDF( instId )
initProc = strcat( cdfgData~>formInitProc "(cdfgData)")
when( cdfgData~>formInitProc
  evalstring(initProc)
)
发表于 2024-6-3 17:57:19 | 显示全部楼层
创建之后,用cdfGetInstCDF(d_inst)~>parameters 重新evalString(callback)
 楼主| 发表于 2024-6-3 20:08:57 来自手机 | 显示全部楼层


YuSHL 发表于 2024-6-3 17:57
创建之后,用cdfGetInstCDF(d_inst)~>parameters 重新evalString(callback)


没太理解。cdfGetInstCDF得到的parameters可以用在什么地方?evalString这个和直接运行语句有什么区别?evalString(callback)要怎么用?
发表于 2024-6-4 08:28:32 | 显示全部楼层


Mingese 发表于 2024-6-3 20:08
没太理解。cdfGetInstCDF得到的parameters可以用在什么地方?evalString这个和直接运行语句有什么区别?e ...



let((CBString)
foreach(param cdfGetInstCDF(d_inst)->parameters
  CBString = param->callback
  evalString(CBString)
)

)
每个参数都有一个callback的属性,存放着这个参数的callback function,evalString(t_callback)就是执行这个callback function
 楼主| 发表于 2024-6-4 12:53:56 | 显示全部楼层


YuSHL 发表于 2024-6-4 08:28
let((CBString)
foreach(param cdfGetInstCDF(d_inst)->parameters
  CBString = param->callback


我在CIW试了下,会报unbound variable 的error。
cdfGetInstCDF(d_inst)->parameters~>callback,得到的是类似这样的list: (nil "mosCB( 'm )" "mosCB( 'l )" ...),那evalstring("mosCB( 'l )"),是不是就和直接执行 mosCB( 'l ) 的效果一样?单纯地执行 mosCB( 'l ) ,这样不能定位到我希望改的那个器件吧,所以我没太理解这个逻辑。

发表于 2024-6-4 18:43:58 | 显示全部楼层
试一下执行PasFlexUpdateLib()
 楼主| 发表于 2024-6-4 19:15:39 | 显示全部楼层


qw357 发表于 2024-6-4 18:43
试一下执行PasFlexUpdateLib()


这个确实能成功更新管子的参数,但是对自己做的PCell里调用的管子没用。这个是virtuoso自带的工具吗?
发表于 2024-6-4 19:27:43 | 显示全部楼层
本帖最后由 qw357 于 2024-6-4 19:33 编辑

在你的cdf参数中添加如下图部分。在PDK中有个pas.cx(pasutils.cxt)文件,load它。

Screenshot 2024-06-04 192327.png
Screenshot 2024-06-04 193014.png
 楼主| 发表于 2024-6-4 20:16:49 来自手机 | 显示全部楼层


qw357 发表于 2024-6-4 19:27
在你的cdf参数中添加如下图部分。在PDK中有个pas.cx(pasutils.cxt)文件,load它。

...


感谢分享,空了之后了解一下这个PAS
 楼主| 发表于 2024-6-5 16:34:42 | 显示全部楼层


qw357 发表于 2024-6-4 19:27
在你的cdf参数中添加如下图部分。在PDK中有个pas.cx(pasutils.cxt)文件,load它。

...



试了下,这样没有产生变化。
查了下 formInitProc ,文档里的描述是:
“Lets you specify an optional SKILL language routine that executes automatically when the component is placed on an instantiation form.”
我可以这样理解吗,加了图中的部分之后就能自动用 PasCdfFormInit 这个API来更新我当前Pcell的parameters?

但是我PCell中的情况是,用了dbCreateParamInstByMasterName() 来调用PDK中的管子,并设定尺寸,所以这个管子其实没有受到PasCdfFormInit的影响?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-20 23:15 , Processed in 0.089654 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表