参考网文:

系统地介绍类SPICE集成电路仿真器的实现原理, 包括:

MNA(改进节点分析)、非线性器件建模、DC/AC分析、时域/(复)频域仿真以及涉及的数值方法。

基于本文原理,实现了SPICE-like仿真器:

https://github.com/cassuto/CSIM

https://www.cnblogs.com/the-wind/p/14399415.html

#重点

  • 注意 NetList(网表)文件的 “Schematic NetList(原理图网表)”段正好其“原理图上”所有Component(元器件) 和 network node(网络节点)精确对应
  • 将“PCB原理图”导出成 “NetList(网表)”文件并使用Spice, 使用 Python 或EDA软件实现全自动化

    体验过 Google Android IDE ? 与 Simulator(模拟器)?

电路设计与仿真系统

  1. 用户可以通过 "仿真系统" 轻松的观察“电路行为”的“即时状态”。

    是因为“电子电路设计与仿真系统”集成了原理图编辑器,仿真引擎,波形显示等功能,

  2. "仿真系统" 通常也会涵盖“扩展模型”以及电子“元器件库”:

  • "扩展模型"主要包括IC(集成电路)专用的"晶体管模型", 如BSIM.
  • "元器件库"提供很多"通用元器件". 如电阻, 电容, 电感, 变压器 和 用户定义模型(如受控电流源,电压源).
  1. "仿真系统" 此外还提供了 Verilog-A 或 VHDL-AMS 的一些模型,

    "PCB设计"还要求"专用模型",如"线路走线的"传输线模型"和 "IBIS模型"。

  2. 本章通过AD软件对“电子电路设计与仿真”进行介绍。

    • AD 软件提供"混合信号电路"的仿真工具, 可在"原理图"中提供完善的"混合信号电路"仿真功能.
    • 在“电路原理图设计阶段”实现对混合(数字/模拟)信号电路的功能设计与仿真.

      配合简单易用的“参数配置”窗口,完成基于"时序、离散度、信噪比 等多种数据的分析.
    • AD软件的"电路仿真"是"混合模式仿真器",可用于对 模拟器件和数字器件的电路分析.

      "仿真器""采用由GTRI开发的增强版事件驱动型XSpice仿真模型,

      该模型是基于 Berkeley Spice3代码, 与 Spice3f5 完全兼容。

      • Spice3f5 的:

        • “模拟器件模型”包括: 传输线, 开关, 电阻, 电容, 电感, 电压源, 电流源;
        • “5种通用半导体器件模型”包括: Diodes, BJTs, JFET, MESFETs, MOSFETs.
      • XSpice 的
        • 模拟器件模型”是针对一些可能会影响到仿真效率的、冗长的,

          无需开发局部电路而设计的 "非线性器件"特性模型代码。

          包括特殊功能函数, 如"gain", "磁滞效应", "限电压及限电流", S域传输函数精确度等函数。
        • 数字器件模型”是用数字 SimCode语言 编写的.
          • SimCode语言是由"事件驱动型XSpice模型"扩展而来, 源于标准的XSpice代码模型。

            专用于"仿真数字器件"的特殊描述语言。是一种类C语言, 实现对数字器件的行为及特征的描述.
          • SimCode语言的"仿真文件"采用ASCII字符, 并保存成 .txt 文件, 编译后生成 *.scb 模型文件,

            可以将多个"数字器件模型"写在同一个SimCode文件.
        • 局部电路模型”是指"更复杂的器件", 如用“局部电路语法”描述的操作运放、时钟、晶体等,

          每个"局部电路"都保存在 *.ckt 文件,并在"模型名称"的前面加上大写的X。

电路系统的 Spice 描述

  1. Spice软件主要用于电子电路系统的设计、分析和仿真,

    例 IC(集成电路)、模拟电路、数字电路、混合(数字和模拟)电路、电源电路等.

    Spice于1957年推出正式实用化版本,并在1988年被定为美国国家工业标准。

    Spice采用完全开放的政策, 用户可以按自己的需要进行修改,实用性好,

    所以迅速得到推广,已被移植到多个操作系统平台。

  2. Spice的“netlist(网表)格式”成“模拟电路和晶体管集电路”事实上的描述标准

    Spice 软件创建“半导体器件模型”时,用户只需选定“模型级别”并给出“合适参数”即可。

    Spice的输入一般有两种形式:

    一种是netlist(网表,文本),另一种是“电路原理图”形式。

    “电路原理图”形式更简单、直观。既可生成新的“电路原理图”文件,

    又可以打开已有的“电路原理图”文件.

  3. Spice Model(模型)由两部分组成: Model Equations(模型方程式) 和 Model Parameters(模型参数).

    Model Equations的提供, 可以把Spice Model(模型)与 仿真器的算法 非常紧密的连接起来,

    能够获得更好的分析效率和分析结果。

  4. Spice模型已广泛应用于电子电路设计, 可对电路进行:

    • 非线性直流分析,
    • 非线性瞬态分析,
    • 和线性交流分析.

    被分析电路的元器件, 可包括:

    传输线, 电阻, 电容, 电感, 互感, 独立电压源, 独立电流源,

    各种线性受控源, 以及有源半导体器件.

  5. Spice软件为模拟“电路系统”,必须先建立"元器件"的"数学模拟模型".

    • 为其所支持的各种“元器件”先增加对应的“数学模型”来描述他们.

      也就是用 "计算机运算(模拟)" 的 "计算公式" 来表示 "元器件的静态与动态"
    • 理想"元器件模型"应既能正确反映"其电学特性", 又适合"在计算机上数值求解"。

      一般, 器件模型精度越高, 模型本身越复杂, 要求的模型参数个数越多,

      这时,计算所占内存量也越大, 计算时间也会增加.
    • 因此“元器件模型”的“复杂程度”要根据实际需要决定.

      是因为,集成电路往往包含数量巨大的元器件,

      元器件模型“复杂度”的少许增加就会使计算时间成倍增长。

      反之,模型过于粗糙,会导致分析结果不可靠。
    • 如果需要对元器件进行物理模型研究或进行单管设计,

      一般采用精度和复杂度较高的模型,

      甚至采用以求解半导体器件基本方程为手段的器件模拟方法.

      “二维准静态数值模拟”是这种方法的代表,

      通过求解"泊松方程"、"电流连续性方程"等基本方程,结合精确的边界条件和几何、工艺参数,

      可以非常准确的给出元器件的“电学特性”。
    • 一般的电路分析,应尽可能采用能满足一定精度要求的简单模型。
    • 电路模拟的精度, 除取决于元器件模型外, 还直接依赖于所给定的“模型参数数值的精度”.

      因此希望“元器件模型”的“各种参数”有明确的物理意义,与其“工艺设计参数”有直接联系,

      或用某种测试手段能测试出来。

Spice 的设计流程

Spice 描述一个完整的电路结构

下图是示例的“单个晶体管放大电路”的“完整结构”(用AD软件绘制)。



观察上图的“单个晶体管放大电路”原理图可以看出:

  1. 一个电路的完整结构, 应该包含“电子元器件” 和 “电路结构(用于连接电子元器件)”
  2. Vin、Vout、Vdc、Vb、Vc 和 Ve, 这些标号在“电子设计的角度”被称为 network(网络), network(网络)用来标识电子线路“原理级”的“每个元器件的位置”

    这种 “network(网络)表示方法”是 EDA(电子设计自动化)软件 标识"原理"电路结构的常用方法.
  3. 综上, 只要给定"电子元器件"、"电源"、激励源", 并且标记了每个电子元器件的"原理位置"

    就能“实现(或还原)”一个“完整”的“电路结构”

    在AD软件打开 “Simulate -> Generate NetList”菜单,为上图“单个晶体管放大电路”原理图生成如下图所示的Spice NetList(网表)文件:



注意 NetList(网表)文件的 “Schematic NetList(原理图网表)”段正好与其“原理图上”所有的 Component(元器件) 和 network node(网络节点)一一精确对应

CCb Vb Vin 100μF

CCc Vc Vout 100μF

QQ1 Vc Vb Ve 2N3904

RRb1 Vb Vdc 100KΩ

RRb2 0 Vb 47KΩ

RRc Vc Vdc 3KΩ

RRe 0 Ve 1KΩ

RRL 0 Vout 100KΩ

RRs Vin NetRs_2 1KΩ

VV1 Vdc 0 +9V AC 1 0

VV2 NetRs_2 0 DC 0 SIN(0 10mV 1KHz 0 0 0) AC 10mV 0

下面对上图的NetList(网表)文件进行分析:

  1. 标题行、注释行和结束行

    • 标题行

      该行必须是输入文件的第一行( 而且开头不能有空格与注释符号) ,如

      Spice_exp1

    • 注释行

      注释行以 "" 号开始,可以有多行,每行都必须以 "" 号开始 例如:

      • SPICE NetList generated by Advanced Sim server on 2023/1/11 11:17:18
      • Schematic NetList:
    • 结束行

      .END

      用于标识输入文件的结束,它必须是输入文件的最后一行(其后最好没有"空白字符")

  2. 元器件模型描述

    器件模型的通用格式为:

    .MODEL MNAME TYPE(PNAME1 = PVAL1 PNAME2 = PVAL2 ... ) ,例如下行:

    .MODEL 2N3904 NPN(IS=1.4E-14 BF=300 VAF=100 IKF=0.025 ISE=3E-13

    BR=7.5 RC=2.4 CJE=4.5E-12 TF=4E-10 CJC=3.5E-12 TR=2.1E-8 XTB=1.5 KF=9E-16 )

    • 对一些参数较多的电子元器件, 分配唯一的模型名称, 使用唯一的 *.MODEL 注释行进行说明.
    • MNAME 表示“元器件模型”的“名称”
    • TYPE 表示“元器件模型”的“类型”,Spice包括15种(元器件模型的类型), 如下图所示:

  3. 分电路描述

    • “分电路描述”可以定义由 Spice元器件 构成的“分电路”, 通过类似于“调用”器件模型的方法进行“引用”。

    • 由输入文件“独立的行”定义由“一组元器件”构成的“分电路”, 然后Spice程序自动在“引用”分电路的地方插入该“组元器件”。

    • 对“分电路”的“大小和复杂度”没有限制,并且“分电路”还可以“层层嵌套”包含其他的“分电路”。

    • .SUBCKT 行

      .SUBCKT 行用于说明一个“分电路”定义的开始,格式如下:

      .SUBCKT SUBNAM N1 < N2 N3 ... > ,例如下行

      .SUBCKT OPAMP 1 2 3 4

      注意:

      • SUBNAM 表示分电路的名称
      • N1, N2, ... 表示外部的节点
      • 在分电路定义时, 不显示控制行。

        然而 “分电路的定义”可以包含其他"分电路的定义"、"元器件模型"和"分电路的调用".
    • .ENDS 行

      .ENDS 行用于说明“分电路定义的结束”,格式如下:

      .ENDS ,例如下行

      .ENDS OPAMP

    • 调用分电路

      格式如下:

      .XYYYYYYY N1 < N2 N3 ... > SUNAM ,例如下行:

      .X1 2 4 17 3 1 MULTI

      通过指定带有“字母X”开头的“伪元素(后面是分电路节点)”, 调用Spice程序所使用的“分电路”。

    • 合并文件

      合并文件的格式是:

      .INCLUDE filename ,例如下行:

      .INCLUDE /user/spice/common/wattmeter.cir

      有多个输入文件时,可复用“电路描述”的“一部分”, 特别是那些通用的“模型”和“分电路”。

      在任一 Spice 输入文件, 都可用“ .INCLUDE filename ”复制“filename”文件的内容。

SciTech-EECS-电路设计-电路设计与仿真系统 + SPICE NetList(网表文件) +仿真描述 + 元器件模型的更多相关文章

  1. 用Modelsim仿真QuartusII综合后网表时库的添加方法(转)

    这两天做综合后仿真,发现FPGA器件库又不会加了,无奈上网找方法.说起来不好意思,很早就接触Modelsim这个仿真软件了,可是没有好好琢磨.把这两天找的方法贴出来,再加上自己的理解,以后忘了可以上博 ...

  2. 如何用ModelSim对Xilinx ISE产生的网表进行仿真

    图: 在对设计的芯片进行测试时,经常要用到FPGA,可是里面的仿真工具却不如Modelsim那么好用,且在规模比较大时,ISE在仿真时,软件经常会报告内存限制的问题,此时一般会切换到Modelsim软 ...

  3. 基于HTML5的燃气3D培训仿真系统

    最近上线了的基于HTML5的燃气3D培训仿真系统,以前的老系统是采用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但因为这次新产品需求要求 ...

  4. DVB-C系统中QAM调制与解调仿真

    本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...

  5. 基于DRL和TORCS的自动驾驶仿真系统——之环境配置

    基于DRL和TORCS的自动驾驶仿真系统 --之环境配置 玩TORCS和DRL差不多有一整年了,开始的摸爬滚打都是不断碰壁过来的,近来在参与CMU的DRL10703课程学习和翻译志愿者工作,也将自己以 ...

  6. 基于VR技术的输电线路巡检仿真系统

    基于VR技术,搭建电力输电仿真系统用于培训,提供用户沉浸式学习体验.交互式操作体验,VR设备能够提供沉浸式真实感的模拟场景,使得输电线路巡检内容视觉化,跨越了空间和时间的限制,有针对性的解决传统输电运 ...

  7. 触觉仿真系统:Force Dimension+CHAI 3D

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链 Force Dimension 成立于2001年,总部在瑞士,比sensable 晚了8年,开发的理念也不一样,他们开发是连杆式力反馈触觉系统,仿 ...

  8. 服务 在初始化安装时发生异常:System.IO.FileNotFoundException: "file:///D:\testService"未能加载文件或程序集。系统找不到指定文件。

    @echo.@if exist "%windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" goto INSTALL ...

  9. 使用.NET 4.0+ 操作64位系统中的注册表

    一.64位系统中的注册表 以 LocalMachine 中的启动项为例: 64位应用的注册表位置还是在: SOFTWARE\Microsoft\Windows\CurrentVersion\Run 而 ...

  10. linux系统下怎么安装.deb文件

    linux系统下怎么安装.deb文件? deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式. 他们不通用(虽然可以转换一下). deb是de ...

随机推荐

  1. 解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"

    解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问" 现在net core运用的多了,一系列的问题接踵而来,更新项目发布到iis时就有一个坑 ...

  2. JS函数调用的5种模式

    函数是经常会用的工具, 这里总结一下关于在 js 中的 5种函数调用的模式如下: <!DOCTYPE html> <html lang="en"> < ...

  3. 【语义分割专栏】先导篇:评价指标(PA,CPA,IoU,mIoU,FWIoU,F1)

    目录 前言 混淆矩阵 计算混淆矩阵 评价指标 像素准确率(Pixel Accuracy,PA) 类别像素准确率(Class Pixel Accuracy,CPA) 类别平均像素准确率(Mean Pix ...

  4. .NET 8 开发的跨平台多商户第三方支付SDK

    前言 快速发展的互联网应用开发中,支付功能已成为各类平台不可或缺的一环.为了帮助大家更高效地接入主流支付渠道,推荐一套基于 .NET 开发的第三方支付 SDK.该 SDK 支持跨平台运行,适用于多种操 ...

  5. MySQL8.0安装与环境配置win10

    本次安装笔者借鉴了n篇前辈的文章,如有冒犯,请指正 https://blog.csdn.net/qq_20788055/article/details/80372577 https://blog.cs ...

  6. null 空 || 长度为0

    基础差的报应 集合为空null 未分配内存,只是说有这么一个变量 就像是赐你封号大将军,但是手上却半个兵符都没有.想打仗的话还是要先让"系统"这个君主给你兵符才OK 集合长度为0 ...

  7. 保姆教程系列:生成 SSH Key 并配置连接远程仓库

    @ 目录 前言 第 1 步:检查是否已有 SSH Key 第 2 步:生成新的 SSH Key 第 3 步:启动 SSH Agent 并添加密钥 第 4 步:复制 SSH 公钥 第 5 步:添加 SS ...

  8. curl ifconfig.me 查看Linux服务器公网IP地址

    命令作用:curl ifconfig.me 用于查看Linux服务器公网IP地址. 使用场景:配置Linux服务器IP白名单的时候,需要知道服务器的IP地址,这就到此命令大显身手的时候了.

  9. Redis异常 Invalid argument during startup: unknown conf file parameter

    问题提出 设置 redis 过期事件监听时,需将 notify-keyspace-events的值设置为Ex,故去掉了 notify-keyspace-events Ex'之前的注释符.然而,启动re ...

  10. 手摸手教你从生成CRD到编写自定义控制器

    介绍 我们可以使用code-generator 以及controller-tools来进行代码自动生成,通过代码自动生成可以帮我们自动生成 CRD 资源对象,以及客户端访问的 ClientSet.In ...