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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 5640|回复: 32

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

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

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

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

×

有什么方法可以通过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, 2025-7-9 05:19 , Processed in 0.127892 second(s), 11 queries , Gzip On, MemCached On.

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