使用 Cadence IC617 的蒙特卡洛仿真器仿真单端运放的失调电压
本文最后更新于 537 天前,其中的信息可能已经有所发展或是发生改变。

前言

最近由于仿真需要,本人学习了一下Cadence IC617进行蒙特卡洛仿真的方法,同时成功的使用蒙特卡洛仿真来仿真了一个运放的等效输入失调电压。由于当时学习时还是耗费了一定的工夫的,因此在这里写一篇文章记录一下。

1. 什么是运放失调

运放的输入失调电压,通俗的来说,就是当运放的两个输入端的电压相同时,对于一个理想运放来说输出因该是 0。而对于一个实际的运放来说,此时输出并不会是 0,而是会有一定的偏差。如果想抵消掉这个偏差,就必须在运放的一个输入端加上一定的电压,从而让输出变成 0。这个加上去的电压就是输入失调电压。[1]

如果大家想详细的了解关于运放失调的一些知识,可以去看 ADI 公司的关于运放失调电压的文档

2. 为什么要用到蒙特卡洛仿真

实际的集成电路工艺中,器件会由于各种各样的工艺因素,从而产生一些失配,进而会使运放产生一定的失调电压。然而在 Cadence IC 中,通常的 dc 或者 ac 等等仿真是不会考虑器件的失配情况的,因此进行这些仿真时,会默认认为所有的器件是不存在失配特性的。这样进行的仿真,是无法仿真出运放的真实的失调电压的。

而蒙特卡洛仿真,是一种使用随机抽样估计来估算数学函数的计算方法。在进行蒙特卡洛仿真时,仿真器会对实际工艺中产生的各种偏差的值来进行多次的随机抽样,从而可以模拟出某个电路参数在实际工艺中所产生的工艺偏差的整体分布情况。相较于使用 5 个工艺角(TT\FF\SS\FS\SF)进行仿真的情况,蒙特卡洛仿真不仅能完备的全覆盖实际的工艺变化范围,从而分析到所有的工艺偏差;同时还能获得某个电路参数在工艺偏差影响下的概率分布曲线,进而可以分析电路的良率。[2]

3. Cadence IC617 进行蒙特卡洛仿真的流程

1. 确定工艺库是否支持蒙特卡洛仿真

在进行蒙特卡洛仿真时,首先要确认工艺库是否支持蒙特卡洛仿真。部分工艺库中是不带有蒙特卡洛仿真的仿真模型文件的。大家可以通过阅读该工艺提供的与仿真相关的说明文档,来确定工艺是否支持蒙特卡洛仿真。

2. 搭建仿真电路

将运放置于单位反馈的状态,同时给运放一个满足其输入共模电压范围的合适的输入电压,并在输出接上一个负载电容,就搭建好了一个可以用来进行运放失调电压仿真的仿真电路了,如下图。此时运放输出电压与输入电压的差值就是运放的等效输入失调电压值。(如果运放的增益足够大的话)

单机运放失调电压的仿真电路

3. 添加蒙特卡洛仿真的模型文件

确认工艺支持之后,就可以按照工艺库文档中所说的方法将蒙特卡洛仿真的相关文件添加进 ADE L 的 Model Labraries 中去了,如下图。(大部分工艺库的添加方法为将原来所选的工艺角改为mc,有些也需要将一个新文件添加进去)

蒙特卡洛仿真模型文件的添加方法。

对于某些需要添加模型文件的工艺库,添加方法如下。

首先找到该工艺的蒙特卡洛仿真模型文件:

ADE L添加蒙特卡洛仿真模型文件第一步

随后将该文件导入进去,并且将工艺角设置为 mc,同时取消勾选对应的 model 文件:

ADE L添加蒙特卡洛仿真模型文件第二步

4. 设置好仿真环境

首先添加好大家在原理图中设置的仿真变量(按照自己仿真的原理图中实际添加变量的来进行设置,不要照抄),并设好值。随后在 Analyses 中选择 DC 仿真,并选择 Save DC Operating Port:

在Analyses中选择DC仿真,并选择Save DC Operating Port。

5. 设置好输出

设置输出是进行蒙特卡洛仿真的非常重要的一环,只有设置好一个正确的输出才能得到我们想要的概率分布曲线。对于这个仿真电路,输出的设置为:(VDC(“/Vout”) – VDC(“/Vinp”))(需要按照自己原理图中的线网命名进行更改),如下图:

添加输出:(VDC("/Vout") - VDC("/Vinp"))

将以上这些都设置好后,就可以先跑一个普通的仿真试一下了。如果没有报错,并且能正常的输出结果,就说明上面的设置没什么问题了,可以使用 Session – Save State 选项将这个仿真状态保存起来了。

如果大家发现你设置的输出无法 Plot 出来,可以去看看这篇文章

6. 启动ADE XL,并进行蒙卡相关设置

选择 Launch – ADE XL,并选择 Create New View,创建一个 AED XL 的 view,并打开它:

选择 Run,并选择 Monte Carlo Sampling,打开蒙特卡洛仿真的设置界面,并按照下图进行设置。(红色箭头处为运行蒙特卡洛仿真的点数,即不同失配条件下的仿真的运行次数。点数越多,最终的仿真结果越精确,但是速度也越慢)

蒙特卡洛仿真点数设置

7. 运行蒙特卡洛仿真,并输出结果

点击 Run Simulation 的绿色箭头,并等待仿真完成即可:

运行蒙特卡洛仿真

运行完毕后的显示如下,从结果中可以看出失调电压的最大值,均值和标准差等参数:

点击上图中 Repalse 旁边的图像选项,就可以输出一个概率分布图像,通过这个图像就可以得出由于工艺偏差导致的失调电压的分布情况:

蒙特卡洛仿真输出的概率分布曲线

4. 其他的一些问题

有些人在例如自己学校的服务器等等VNC服务器中进行蒙特卡洛仿真时,可能会报一些错误如:「Failed to start new job after 8 attempts.」等等,如下图:

运行蒙特卡洛仿真报错。

出现这种情况是因为:在进行蒙特卡洛仿真时,这时的仿真模式与单纯的 ADE L 仿真不同,用的是virtuoso -nograph 模式,在使用 vnc 连接服务器的时候,Cadence 不知道显示的端口是什么。所以,需要定义 2 个变量来指定 vnc 端口。

具体的定义方式为:在命令行中使用 vim 命令或者使用文件管理器打开自己的 home 目录下的 .cshrc 文件,并在文件的末尾加上如下两行(其中的数字需要大家自己根据自己用的 vnc 端口号来进行修改):

setenv CDS_XVNC_TENBASE 8 # 自己用的 vnc 端口号的十位数
setenv CDS_XVNC_OFFSET 4 # 自己用的 vnc 端口号的个位数
这里需要注意的是,CDS_XVNC_TENBASE 变量合法的取值范围为 1-9,如果大家使用的是 0x 系列或者 10x 系列的 vnc 端口,需要重新修改 vnc 的端口在合理的取值范围内。[3]

修改完成后,重启命令行以及 Cadence 软件,此时因该就可以正常的进行蒙特卡洛仿真了。同时,大家也可以在命令行中使用 virtuoso -nograph 该命令对上述修改结果进行验证,如果该命令能正常运行就没有问题。(这里感谢张老师提供的解决方法。)

本文采用知识共享 署名 - 非商业性使用 4.0 许可,转载请注明出处;如果有某些问题想和本人讨论,可以发送邮件至:absolutezero@stu.xjtu.edu.cn

评论

  1. 小狼
    Windows Chrome
    2年前
    2022-5-24 9:14:37

    兄弟,我照着你这个设置,咋还是不行呀,孩子要哭了,搞了好久,总是报错说:没有数据产生。我刚刚也给你发邮件了,麻烦有空瞅一眼。不胜感激。

    • 博主
      小狼
      Windows Firefox
      2年前
      2022-5-24 9:50:06

      兄弟,我已经看到你的邮件了并且已经回复你了,你记得查收一下。

  2. 朱朱
    Windows Chrome
    1年前
    2022-12-16 20:11:11

    对于蒙塔卡洛,我有一个问题想问你,仿真结果是什么样子才可以接受呢?
    作为一片指导性文档,你的文章可读性好

    • 博主
      朱朱
      Windows Firefox
      1年前
      2022-12-23 13:33:26

      感谢认可。抱歉,最近本人阳了,所以一直没有时间回复。关于仿真结果怎样才算可以接受,这个并没有一个通用的判据。通常需要根据你所做的电路或者系统对误差的要求,算出来一个能够接受的失调范围,然后再看这个运放电路的 3 σ 失调是不是在这个范围内。

  3. 朱朱
    Android Chrome
    1年前
    2022-12-23 14:08:50

    谢谢你的回复,我已在IEEE查到相关行为级仿真研究,具体问题具体分析。好好休息,祝你早日康复!

  4. 摸鱼人士
    Windows Chrome
    1年前
    2023-1-02 23:13:22

    这个失调电压的表达式是不是还得取绝对值啊?看有些文档说是abs(vout-vp)

    • 博主
      摸鱼人士
      Windows Firefox
      1年前
      2023-1-02 23:18:53

      这个看个人理解吧,如果把失调电压理解为「如果想抵消掉这个偏差,就必须在运放的一个输入端加上一定的电压,从而让输出变成 0」这种方式,那么这个抵消的电压值可能是正也可能是负,因为实际中运放的工艺偏差是朝两个方向都有可能的。但是如果你只是想看一下失调的大小来做一个简单评估的话(比如带隙基准之类的电路需要对失调进行一个评估),那就用绝对值也可以。所以我个人觉得这个就是个理解上的问题,取不取绝对值都可以。

      • 摸鱼人士
        干饭睡觉真君
        Windows Chrome
        1年前
        2023-1-02 23:20:34

        嗯嗯,谢谢真君

  5. QJQ
    Windows Edge
    1年前
    2023-1-28 20:31:45

    您好 ,请问我在使用smic.13的工艺跑蒙特卡洛失调仿真时候,他所有的点都落在tt仿真的值上,这是因为设置mc工艺的时候出现的问题嘛

    • QJQ
      QJQ
      Windows Edge
      1年前
      2023-1-28 22:36:52

      已经解决了 ,我在设置MC工艺角时候没有设置mos_mc的库
      81

  6. Jiejie
    Windows Edge
    10月前
    2023-4-13 16:19:44

    您好,感谢分享!
    想问问如果工艺库不支持蒙特卡洛的话,我该如何自己做蒙特卡洛仿真呢?
    我们导师让我们自己写模型….
    (最后祝大佬小保底不歪~

    • 博主
      Jiejie
      Windows Firefox
      10月前
      2023-4-15 21:46:13

      非常抱歉,我没有自己写过蒙卡模型,这几天问了一下我周围也没有会干这个的人,这个上面没办法帮到你。

      • Jiejie
        干饭睡觉真君
        Windows Edge
        10月前
        2023-4-17 10:07:34

        好的,还是十分感谢。

  7. Ash
    iPhone AppleWebKit
    10月前
    2023-4-25 20:03:59

    你好博主 我有个疑问就是我做了一个灵敏放大器 是输入电流比较出电压 然后跑蒙卡 会存在两千个错两个的类似情况 然后leader要求我找到原因 我不是很理解蒙卡跑失配如何去寻找原因 只能在失配贡献那里找到相关管子的失配贡献 或者在文档里注重到sigma_mis_a b c d类似的参数 但是不知道如何去改正 想询问是否存在什么方法 从这些数据知道如何去修改并找到原因

    • 博主
      Ash
      Windows Firefox
      10月前
      2023-5-01 19:41:52

      这个我个人感觉你可以试一下把有错误的那几个点存成一个静态工作点,然后在这个工作点下进行普通的仿真来寻找原因,这样一次只关注一个点的一种情况可能会更好排查一些(具体方法可以看这个:Cadence 将蒙特卡洛仿真中的某一个点创建成一个静态的工艺角)。或者建议你去查一下这几个点的 Simulation Log 文件,看一下 Log 里面有没有什么端倪。

  8. 一只快乐蛙
    Windows Chrome
    8月前
    2023-6-21 13:24:11

    你好,我想问下为什么我在.cshrc 文件中加了对应端口的两句,还是会报这个错5555,不胜感激!

    • 博主
      一只快乐蛙
      Windows Firefox
      8月前
      2023-6-25 23:00:22

      你好,我这里给出的这种方式只是这个问题的一种可能的解决方法,如果不行的话建议你 google 一下这个问题,可能就能找到解决方案了。

  9. 摸鱼人士
    Windows Chrome
    6月前
    2023-8-21 16:08:15

    回看这篇文章,仿真运放的失调电压,MC应该设置成“only mismatch”而非“All”?

    • 博主
      摸鱼人士
      Windows Firefox
      6月前
      2023-8-22 10:45:37

      这个我个人认为因该是 ALL。因为 only mismatch 是只考虑失配,不考虑工艺的变化,而 ALL 会即考虑工艺的变化,有考虑失配。实际上流片出来的运放的失调电压与工艺变化和失配情况都有关系的,所以我觉得用 ALL 仿真因该会更准。

  10. xk
    Windows Chrome
    6月前
    2023-8-22 2:48:12

    您好博主,麻烦问一下差分运放在连接成单位反馈后,蒙卡的输出表达式应该怎么设置呢

    • 博主
      xk
      Windows Firefox
      6月前
      2023-8-22 10:47:28

      如果是单位增益的话,因该就直接把表达式设置成两个差分输出相减就可以了,不需要除以增益了(因为增益为1)。

  11. kkk
    Android Chrome
    6月前
    2023-8-22 14:44:15

    up,仿真蒙卡的时候是不是还需要改变管子的类型啊,仿蒙卡总是报错显示没有找到器件啥的好痛苦

    • 博主
      kkk
      Windows Firefox
      6月前
      2023-8-22 21:43:00

      是的,有些工艺可能会有两种管子,一种是普通的,不带失配模型的管子,另一种是带失配模型的管子。就拿TSMC28nm举例,这个工艺库里面,带失配模型的管子后缀都有一个「_mac」,要想跑蒙卡必须使用这种后缀的管子。

  12. 摸鱼人士
    Windows Chrome
    6月前
    2023-8-22 17:40:54

    请问你设sigma=3,是看了仿真文件后设的吗?方便截个关于仿真文件的图看看吗,就是关于MC仿真为啥要设sigma=3,想看看仿真文件里怎么定义的

    • 博主
      摸鱼人士
      Windows Firefox
      6月前
      2023-8-22 21:52:15

      这个不是看仿真文件才设置的,而是由于我当时跑蒙卡无知被一个教程忽悠的设置的。我当时设置这个的原因是因为我看了一些其他的教程的引导,他们在蒙卡仿真中设置了这个变量,所以我当时就设置了。现在看来这样设置是无效的的,我用的这个工艺是不需要设置sigma这个变量的,所以这个是个无效变量。但是不同的工艺可能会有不同的要求,有些工艺可能会在变量或者corner里面设置,这个你可能需要去阅读一下工艺给的手册或者问一下周围的人。

  13. kk
    Android Chrome
    6月前
    2023-8-22 21:46:12

    学长有用过smic180mmrf工艺吗,我在模型文件里没有找到n18和p18的mc类型管子,但是n33有mc类型的管子,不知道是不是这个工艺的n18是自带失配的不需要换呢

    • 博主
      kk
      Windows Firefox
      6月前
      2023-8-22 21:49:33

      这个工艺我只用过非常古老的版本,当时我用的这个工艺是完全不支持蒙卡的,所以我一直对这个工艺的印象就是不能跑蒙卡。你可以试着用正常的蒙卡库和n18管子跑一下,如果自带失配的话蒙卡就能跑得动,如果跑不动估计就是不带失配模型的。

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇