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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 450|回复: 5

[求助] 关于 CDF 参数的嵌套,无法生成正确的 spectre 网表

[复制链接]
发表于 2025-7-26 20:03:20 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 yiyaowen 于 2025-7-26 20:05 编辑

关于如何使用 CDF 参数,网上有很多介绍的教程,这里不再赘述了;
但是最近遇到一个关于嵌套定义 CDF 参数的问题,会导致无法生成正确的 spectre 网表:

首先做一个带参数的 INV 如下:

INV schematic

INV schematic


然后去 CDF-Edit 里把 parent parameter 定义好:

INV CDF

INV CDF


生成的 symbol 里也把参数可视化一下:

INV symbol

INV symbol


到这一步,参数化地使用这个 INV 进行仿真没有任何问题,也能够根据填入的参数生成正确的网表;
但是如果接下来再创建一个 BUF,内部使用上面创建的这个 INV,并且再次定义 parent parameter 如下:

BUF schematic:

BUF schematic

BUF schematic


BUF symbol:

BUF symbol

BUF symbol


BUF CDF:

BUF CDF

BUF CDF


此时如果在电路中使用这个 BUF 就会导致仿真出错:

ERROR (SFE-1997): "input.scs" 75: I0.I0: parameter `nl': Cannot run the simulation because an unknown parameter `length' has been specified in expression `pPar("length")'. Correct the expression and rerun the simulation.
        
    ERROR (SFE-1997): "input.scs" 75: I0.I0: parameter `nw': Cannot run the simulation because an unknown parameter `width' has been specified in expression `pPar("width")'. Correct the expression and rerun the simulation.

提示网表有未定义的参数,跳转到提示的行数看一下:

// Library name: Workspace
// Cell name: INV
// View name: schematic
subckt INV AVDD AVSS VIN VOUT
parameters pl=180n pw=2u nl=180n nw=2u
    M0 (VOUT VIN AVDD AVDD) pch l=pl w=pw*1 m=1 nf=1 sd=540.0n \
        // 这里省略参数定义
    M1 (VOUT VIN AVSS AVSS) nch l=nl w=nw*1 m=1 nf=1 sd=540.0n \
        // 这里省略参数定义
ends INV
// End of subcircuit definition.

// Library name: Workspace
// Cell name: BUF
// View name: schematic
subckt BUF AVDD AVSS VIN VOUT
    I1 (AVDD AVSS VM VOUT) INV pl=180n pw=2u nl=180n nw=2u
    I0 (AVDD AVSS VIN VM) INV pl=180n pw=2u nl=pPar("length") \
        nw=pPar("width")
ends BUF
// End of subcircuit definition

生成的网表中,BUF 的 subckt 声明缺失了在 CDF 中指定的参数。

我先 google 了一番,然后又去查看了 Component Description Format User Guide.pdf,但是也没找到有用的信息(可能是我错过了
请教大家,这种嵌套的参数传递是否可行?如果是可行的,是否需要做什么额外的设置来确保自定义的 CDF 参数能够正常传递吗?




发表于 2025-7-27 10:43:11 | 显示全部楼层
应该是可以的,而且第二层没必要带 M了,cdf里单位选择不使用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-27 16:38:39 | 显示全部楼层


   
迷路大脸猫 发表于 2025-7-27 10:43
应该是可以的,而且第二层没必要带 M了,cdf里单位选择不使用


试了下第二层的单位选择 don't use,仍然无法正确生成 为了排除是我这个 PDK 的问题,我还换了另外一个 PDK 重复同样的操作,结果仍然不对。


此外我还发现一个奇怪的地方:在建立第一层 INV 的 symbol 后,CDF-Edit 里会自动填充相关的参数信息,这说明此时已经提取到参数了;但是在建立第二层 BUF 的 symbol 后,CDF-Edit 并没有自动添加的参数信息,这是不是说明到这一步已经不对了?自定义 pPar 嵌套参数的话,是不是需要啥特别的设置呀
回复 支持 反对

使用道具 举报

发表于 2025-7-27 19:04:49 | 显示全部楼层


   
yiyaowen 发表于 2025-7-27 16:38
试了下第二层的单位选择 don't use,仍然无法正确生成  为了排除是我这个 PDK 的问题,我还换了另外一 ...


可以试试把Parse as CEL改成yes
以及试试不用工艺库里的,而是用vdc这种理想器件去做嵌套传递,看看是不是工艺库的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-28 16:49:01 | 显示全部楼层
本帖最后由 yiyaowen 于 2025-7-28 17:14 编辑


   
迷路大脸猫 发表于 2025-7-27 19:04
可以试试把Parse as CEL改成yes
以及试试不用工艺库里的,而是用vdc这种理想器件去做嵌套传递,看看是不 ...


经过几番尝试,需要按照如下设置:调用的非顶层实例,如果需要传递 pPar,那么必须把 units 改为 don't use,把 Parse as CEL 改为 yes(顶层可以为 no)例如:

subckt CAP
parameters xCapacitance=1p
    C0 (net1 net1) capacitor c=xCapacitance
ends CAP

subckt CAP2
parameters xCapacitance=1p
    I1 CAP xCapacitance=xCapacitance
    I0 CAP xCapacitance=xCapacitance
ends CAP2

subckt CAP3
parameters xCapacitance=1p
    I1 CAP2 xCapacitance=xCapacitance
    I0 CAP2 xCapacitance=xCapacitance
ends CAP3

如果要确保能够正确生成上述网表,那么 CAP, CAP2 的 Parse as CEL 都必须为 yes,CAP3 的没有要求。不过这样也有些问题,因为在 CEL 格式下显示的值会被解析为科学表达式,比如 1pF 会自动变为 1e-12,这在可读性上不太好;我暂时的解决办法是对于需要嵌套的对象创建两份拷贝,一份私有的仅作为内部调用(CEL=yes),另一份设置(CEL=no)供正常使用,就是麻烦了些,不知道有没有更好的办法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-28 16:56:03 | 显示全部楼层
本帖最后由 yiyaowen 于 2025-7-28 17:09 编辑

总之还是挺不方便的...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-8-23 09:55 , Processed in 0.015344 second(s), 4 queries , Gzip On, Redis On.

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