gaojun927的个人空间 https://blog.eetop.cn/757190 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

自己做个蒙特卡洛仿真模型

热度 15已有 9843 次阅读| 2012-9-14 14:14 |个人分类:模拟电路设计

关于spectre下蒙特卡洛(MC)仿真的资料有一些,但大都侧重讲如何在ade里设置,前提是foundry提供MC的相关模型。据我所知,t是有的,下面的一些信息还是从t的模型中分析知道的。但是也有些foundry没有,或者即使有,也没有具体讲自己的模型如何使用。所以这里准备从模型的角度讲解这个问题。理解了模型,也就可以自己编写或者看懂foundry的模型文件了。
我们自己先猜测一下MC仿真的过程。从文档上看,MC分为process和mismatch两种,spectreuser的文档具体给了一个示意流程图。在每次MC分析时,(如果选择process)先根据process相关信息,将每个器件的参数统一改变,(如果选择mismatch)再将每个器件的参数单独改变。所以在模型中,就需要提供相关的内容:器件的哪些参数要变,如何变。
正常的仿真,器件参数也会变,只不过那时是调用不同的corner。因此哪些参数要变,完全可以仿照corner仿真时各个section的写法。具体的说,就是在每个模型里都有一些参数,parameter,这其实是变量。在每个corner里都给这些parameter赋值。MC时也是这样,需要在模型里有参数,在最前面有参数赋值。只是这里的参数赋值有专门的语句:statistics。具体语法可以参考手册。在statistics里分了process和mismatch两种情况,然后在每种情况下可以用专门语句描述变量的分布情况。这就回答了前面所说的器件哪些参数要变和如何变的两个问题。当运行MC时,spectre会自动根据statistics里的描述,产生相应的模型变化。而当正常的仿真时,spectre会去别的parameter赋值部分寻找变量值,所以互相可以不冲突。
但是上面描述的只是基本用法。在许多mismatch模型中,变化量的参数是和器件的w,l相关的。如何把这两者关系描述出来,上面的方法就不适合了,因为w和l并不能传递到statistics中去。spectre对此的解决方法是引入了inline subckt。可以参考spectreusr中对这个的描述,基本就是为了解决上述问题而提出的。在inline subckt中,w和l可以作为参数传到下一层中,在此同时,模型参数也被向下传递,因此可以在中间定义模型参数与w,l的关系,这时各个参数是可以相互看到的。这也就是为什么MC分析时,管子的模型一般都要换掉。
因此在最后,出现的情况就比较多了,电路中的模型可以用普通模型,也可以用MC模型,分析可以用普通仿真,也可以用MC分析。有人的blog里就总结了tsmc中几种排列组合能实现的结果。我想只要了解了底层机制,记忆这些就容易多了,而且即使工艺厂下次改变了模型写法,也能很快知道如何使用模型。
最后,说一个问题。当器件存在m参数时,按照m参数的传统意义,等于是完全相同的器件并联,因此MC分析似乎也是这个思路。但实际中理论上各个器件应该是有差别的。所以如果m大,理论上应该是失配减小,但仿真结果却是不变。我不知道是哪里还可以继续改进对m的处理,使其更加合理。目前从foundry的做法来看,是直接用子电路形式代替了model来处理m,这种做法目前我还学不来,只能是写个perl程序把m都替换掉。
15

点赞

刚表态过的朋友 (15 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 303

    粉丝
  • 0

    好友
  • 275

    获赞
  • 157

    评论
  • 7290

    访问数
关闭

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

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

GMT+8, 2024-5-1 21:08 , Processed in 0.024553 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部