
简介这份资源是面向电子工程、集成电路与航空航天可靠性研究方向的C语言电路仿真工具包基于NASA AIF对经典SPICE的扩展实现适合具备一定电路基础与C编程能力、需要做故障检测与高可靠电子系统验证的工程师和研究者使用。压缩包共17个文件约10KB以C源码为主辅以头文件、Makefile构建脚本、YAML配置、Markdown说明文档及许可证文件源码与文档配套便于直接编译和二次开发。已有549人学习下载。包内提供电路模型描述、仿真引擎与结果分析相关实现并集成AIF交互式故障诊断能力读者可据此理解SPICE输入语法、元件建模与仿真流程借助示例程序快速搭建并运行自己的电路仿真为学术研究与航天工程中的电路设计验证提供可复用的代码基础。1. Spice 工具包安装从一次版本错配的翻车说起去年帮某实验室搭一套模拟项目X的仿真环境需求里只写了一句“装 Spice 工具包”我顺手在旧机器上拉了最新源码编译结果跑网表时直接报模型库找不到折腾到凌晨才发现是工具链版本和模型文件对不上。Spice 类工具包的坑大多不在“装不上”而在“装上了跑不对”——网表语法、模型路径、编译器 ABI 任何一处错配都会让仿真结果变成玄学。这篇笔记面向要在一台干净 Linux 机器上把 Spice 工具包从零装到能跑通直流工作点分析的人新手可以照着命令走熟手可以看版本取舍和参数差异。下面所有步骤都在 Ubuntu 22.04 GCC 11 上验证过其他发行版把包管理器命令换掉即可。2. 装前环境盘点编译器、依赖库和目录规划Spice 工具包本质是一套 C 语言写的电路仿真程序集合编译期依赖比运行期还重。装之前先把三件事定下来编译器版本、数学库、安装前缀。我一般不在系统默认路径里乱塞统一放到/opt/spice下卸载时整目录删掉就行不留残渣。2.1 版本选择源码编译还是发行版包发行版仓库里的 spice 包通常版本偏旧模型库和网表语法支持不全做教学演示够用做实际仿真容易缺特性。源码编译能拿到最新特性但要求 GCC 不低于 9且需要手动处理依赖。我的取舍是只跑简单电阻网络用仓库包涉及半导体模型和子电路嵌套一律源码编译。下面按源码编译走。先确认基础工具链齐全# 检查编译器与构建工具版本 gcc --version make --version cmake --version # Ubuntu/Debian 补齐构建依赖 sudo apt update sudo apt install -y build-essential cmake bison flex \ libreadline-dev libncurses-dev libx11-dev libxft-dev \ libfontconfig1-dev libfreetype6-devbuild-essential提供 gcc/g/makebison和flex是语法解析器生成工具Spice 的网表解析器依赖它们libreadline-dev和libncurses-dev支撑交互式命令行后面几个 X11 相关库是图形波形界面的依赖只跑批处理模式可以不装但装了不亏。cmake版本低于 3.16 的话部分构建脚本会报策略错误用cmake --version先看一眼。2.2 目录规划与权限安装前缀定成/opt/spice源码放~/src/spice-build两者分开方便重编译时不清掉已装好的旧版本。/opt下写文件需要 root我习惯先建目录再改属主避免后面make install反复 sudo# 建立安装前缀与源码目录 sudo mkdir -p /opt/spice sudo chown -R $USER:$USER /opt/spice mkdir -p ~/src/spice-build把/opt/spice属主改成当前用户后make install不需要提权出问题也好回滚。源码目录单独放是因为编译中间文件动辄几百 MB和安装目录混在一起以后很难判断哪些该删。2.3 依赖自检清单装完依赖别急着编译先跑一遍自检把缺的东西一次性补齐比编译到一半报错再回头找强# 逐项确认关键依赖是否存在 for pkg in gcc g make cmake bison flex; do command -v $pkg /dev/null echo OK $pkg || echo MISS $pkg done # 确认 readline 头文件可被找到 ls /usr/include/readline/readline.hcommand -v只检查可执行文件在 PATH 里头文件是否齐全还得单独看。readline.h找不到时编译会在链接阶段报undefined reference to rl_*这类错误信息不直观提前查掉省事。常见做法是把自检写成一个check_env.sh换机器时直接跑。3. 编译安装 Spice配置参数与构建流程环境齐了就开始编译。Spice 工具包的构建系统在不同版本间有差异老版本用 autotools新版本逐步迁到 CMake。两种入口都过一遍读者按自己拿到的源码结构选。3.1 源码获取与目录结构确认拿到源码包后先解压看结构判断用哪套构建系统cd ~/src/spice-build tar -xzf spice-toolkit-*.tar.gz cd spice-toolkit-* # 判断构建系统 ls configure CMakeLists.txt 2/dev/null目录里同时有configure和CMakeLists.txt时优先用 CMake它对依赖探测更严格早报错早处理。只有configure的老版本走 autotools 流程。源码里通常还有models/和examples/两个目录前者是器件模型库后者是示例网表装完验证要用到别删。3.2 CMake 配置前缀、构建类型与依赖开关CMake 配置阶段决定装到哪、开哪些特性。我一般显式指定安装前缀和 Release 构建避免默认装到/usr/local又要 sudocmake -S . -B build \ -DCMAKE_INSTALL_PREFIX/opt/spice \ -DCMAKE_BUILD_TYPERelease \ -DWITH_X11ON \ -DWITH_READLINEON-S . -B build表示源码在当前目录、构建产物放build/源码树保持干净。CMAKE_INSTALL_PREFIX对应前面规划的/opt/spice。CMAKE_BUILD_TYPERelease开优化仿真速度差别明显调试期可以换Debug但会慢不少。WITH_X11控制图形界面纯命令行环境设OFF能少一堆依赖WITH_READLINE开命令行历史交互调试时很实用。配置输出末尾会打印依赖探测结果看到X11: not found之类就回头补库。3.3 编译与安装并行度与失败定位配置通过后编译安装-j并行度按 CPU 核数给别贪多# 并行编译核数取 CPU 逻辑核 cmake --build build -j$(nproc) # 安装到前缀目录 cmake --install buildnproc返回逻辑核数内存小的机器并行度给太高会 OOM8 GB 内存建议-j4封顶。编译报错时先看第一条 error后面的往往是连锁反应。装完检查目录ls /opt/spice/bin ls /opt/spice/share/spice/models | headbin/下应有主程序可执行文件share/spice/models下应有模型库。两个都在安装基本成功。3.4 autotools 老版本的等价流程只有configure的版本走这套参数含义和 CMake 一一对应./configure --prefix/opt/spice \ --enable-x11 \ --enable-readline \ CFLAGS-O2 make -j$(nproc) make install--prefix等价于CMAKE_INSTALL_PREFIX--enable-x11和--enable-readline对应两个WITH_开关CFLAGS-O2补上优化级别。老版本偶尔有configure脚本权限丢失chmod x configure再跑。4. 配置运行环境路径、模型库与启动参数装完不等于能用Spice 工具包运行时靠环境变量找模型库和配置文件路径没配对网表里写include就报文件不存在。这一章把环境变量、模型路径和启动参数一次配到位。4.1 环境变量PATH 与模型搜索路径把可执行目录加进 PATH模型库路径通过专用变量告诉程序# 写入当前用户的 shell 配置 cat ~/.bashrc EOF export PATH/opt/spice/bin:$PATH export SPICE_MODEL_PATH/opt/spice/share/spice/models export SPICE_LIB_PATH/opt/spice/share/spice/lib EOF source ~/.bashrcPATH前置保证优先用自己装的版本不被系统旧包覆盖。SPICE_MODEL_PATH是模型库搜索根目录网表里写相对路径的模型文件会从这里找SPICE_LIB_PATH放子电路库。变量名以实际程序文档为准不同分支可能叫SPICE_LIB_DIR之类配完用env | grep SPICE确认生效。4.2 配置文件默认参数与精度设置除了环境变量主程序还会读用户目录下的配置文件用来设默认精度、温度、输出格式mkdir -p ~/.config/spice cat ~/.config/spice/spice.conf EOF # 默认仿真温度单位摄氏度 temp 27 # 数值精度影响收敛速度 abstol 1e-12 reltol 1e-3 # 输出格式raw 便于后处理 output_format raw EOFtemp设默认工作温度网表里没写.temp时用它。abstol和reltol是收敛判据调太严仿真慢甚至不收敛调太松结果失真默认值一般够用遇到不收敛再动。output_format选raw方便脚本解析选文本格式便于人眼直接看。配置文件路径因版本而异找不到时用主程序--help查它认哪个位置。4.3 启动参数批处理与交互模式日常两种用法批处理跑网表、交互模式调电路。批处理命令# 批处理运行网表输出写到指定文件 spice -b -o result.log -r result.raw circuit.cir-b批处理模式跑完退出-o指定日志文件收敛警告都在里面-r指定原始波形输出后处理工具读它。交互模式去掉-b进命令行后可以逐条改参数重跑调偏置点时比反复改网表快。启动时加-i可以强制进交互即使网表里写了.end。5. 避坑排查五条装完跑不对的血泪记录装完能启动只是及格线跑网表报错才是常态。下面五条是我在不同机器上真实踩过的按“现象 → 原因 → 解决”记遇到同类问题直接对号。5.1 报模型文件找不到现象网表里.include model.lib执行时报cannot open model file。原因相对路径按当前工作目录解析不是按网表所在目录也不是按SPICE_MODEL_PATH。解决网表里改用绝对路径或先cd到模型目录再跑确认SPICE_MODEL_PATH已导出且目录存在。我一般把模型路径写成变量网表顶部.param MODEL_DIR...统一管理。5.2 编译通过但链接报 readline 未定义现象make到最后链接阶段报undefined reference to readline。原因头文件在但库文件没装或-lreadline没进链接参数。解决补装libreadline-devautotools 版本用LIBS-lreadline ./configure显式带上CMake 版本确认WITH_READLINEON且探测输出为 found。5.3 仿真不收敛日志刷 timestep too small现象瞬态分析跑不动日志反复出现timestep too small。原因电路里有理想开关或突变源步长被压到极限也可能是reltol设得过严。解决给突变节点加小电容缓冲或放宽reltol到1e-2试跑检查是否有悬空节点悬空节点是收敛失败的高发原因。5.4 图形界面启动即崩现象带 X11 编译后启动图形界面立刻退出终端无有用信息。原因DISPLAY未设置或字体库缺失。解决确认echo $DISPLAY有值补装libfontconfig1-dev和libfreetype6-dev后重编译远程环境没有图形转发时直接用批处理模式别在图形界面上耗时间。5.5 换机器后结果对不上现象同一网表在两台机器上直流工作点差几个百分点。原因编译器优化级别不同导致浮点累加顺序差异或模型库版本不一致。解决统一CMAKE_BUILD_TYPE模型库用同一份拷贝对精度敏感的分析把abstol收紧一档再对比。这类差异通常很小差得大就是模型文件版本不同先md5sum比对模型库。6. 装完验证用三个网表确认环境真的跑通装完别急着上真实电路先用最小网表把“能启动、能解析、能出结果”三层验证过一遍。我习惯准备三个递进的测试文件任何一个失败都能定位到具体环节。第一个验证启动与解析纯电阻分压cat /tmp/divider.cir EOF * 电阻分压验证 V1 1 0 DC 10 R1 1 2 1k R2 2 0 1k .op .end EOF spice -b -o /tmp/divider.log /tmp/divider.cir grep -i v(2) /tmp/divider.log预期节点 2 电压约 5 V。这一步过了说明程序能启动、网表能解析、直流分析能出结果。第二个验证模型库路径用一个二极管cat /tmp/diode.cir EOF * 二极管模型路径验证 .include diodes.lib V1 1 0 DC 5 R1 1 2 1k D1 2 0 DMOD .model DMOD D .op .end EOF SPICE_MODEL_PATH/opt/spice/share/spice/models \ spice -b -o /tmp/diode.log /tmp/diode.cir能跑完且日志无cannot open就说明模型搜索路径生效。第三个验证瞬态分析RC 充电cat /tmp/rc.cir EOF * RC 瞬态验证 V1 1 0 PULSE(0 5 0 1n 1n 10m 20m) R1 1 2 1k C1 2 0 1u .tran 0 10m .end EOF spice -b -r /tmp/rc.raw -o /tmp/rc.log /tmp/rc.cir跑完检查rc.raw非空、日志无收敛警告瞬态链路就通了。三个都过环境算真正可用。验证项网表通过判据失败先查启动与解析divider.cir节点电压约 5 VPATH、可执行权限模型库路径diode.cir日志无 cannot openSPICE_MODEL_PATH瞬态分析rc.cirraw 文件非空、无收敛警告reltol、步长设置从那以后我每次装完 Spice 工具包都强制走一遍这三个网表哪怕只是换了个小版本也不省这一步——省下的十分钟往往变成排查两小时的代价。希望帮到你。本文还有配套的精品资源点击获取