芯谱:面向 HarmonyOS PC 的 SPICE 电路仿真工作台

欢迎加入开源鸿蒙PC社区: https://harmonypc.csdn.net

欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper

摘要

芯谱是基于开源电路仿真内核 ngspice 的鸿蒙 PC 适配版,作为开源应用上架。它不把 ngspice 的命令行套一个输入框,而是把仿真内核、网表编辑、四类分析和波形测量放进一个原生 ArkUI 工作台。0.1.0 不申请任何权限,不联网,仿真全部在本机完成。本文说明它的产品边界、核心能力,以及在鸿蒙电脑上的实际用法。

1. 为什么先做鸿蒙电脑

电路仿真对设备形态的要求比多数工具硬:要敲网表,要拖波形,要同时看电路文本和结果曲线,还要在百万采样点上缩放不卡。这些都不是手机横屏能凑合的交互,所以芯谱只做 2in1,不做平板和手机版本。

选 ngspice 而不是自己写求解器:SPICE 的收敛策略、器件模型和数值行为被几十年教材与工程实践校准过,重写既没有收益,也很难保证学生实验的结果和教科书对上。鸿蒙 PC 缺的不是又一个能画原理图的演示程序,而是能跑真实网表、数值可信、结果能导出复核的仿真工具。

芯谱把 0.1.0 的范围压在这几件事上:内核在本机真正跑起来、四类基础分析结果可信、波形能测量、结果能导出。噪声、失真、傅里叶分析和 XSPICE 行为模型不在首版。也不把「鸿蒙第一个 SPICE」当作宣传点,因为这个结论没有完整市场清查支撑。

2. 产品形态

项目0.1.0 选择
平台仅 HarmonyOS PC / 2in1
包名com.von.ngspice
应用市场名称芯谱(based on ngspice)
版本0.1.0(versionCode 100000)
架构arm64-v8a
SDK目标 26.0.0,最低 HarmonyOS 6.0.0(API 20)
上游ngspice 47,源码包 SHA-256 固定校验
内核精简构建为 libngspice.so,含三个本地补丁
桥接C++ Node-API(libngspice_bridge.so)
界面ArkUI 原生工作台,波形自绘
存储本地文件 + 应用沙箱工程 / 草稿
网络不申请 INTERNET
权限不申请任何权限
许可证Modified BSD,含 LGPL-2.1+ 的 numparam 组件

一个窗口里是示例/工程侧栏、网表编辑器、波形区与仿真日志。1200 vp 以上三列,950 至 1199 vp 收起示例侧栏改为下拉,低于 950 vp 切成「网表与日志 / 波形与结果」两个标签,最小窗口 560 × 540 vp。

在这里插入图片描述

上图为 MateBook Pro 模拟器(2in1 / API 26)的真实运行画面,演示电路是内置的 RC 阶跃响应。

它不是原理图编辑器,输入是 SPICE 网表文本。这一点在「已知边界」里还会再说一次,因为最容易被误解。

3. 安装与权限

  • 在鸿蒙 PC 开发者社区应用市场获取,或从仓库自行构建。
  • 确认设备是鸿蒙电脑或二合一,不要按平板安装预期来用。
  • 全程没有权限弹窗,因为应用确实没有申请权限。

仓库当前处于开源适配阶段,没有 AppGallery 发布包。自行构建:复制 build-profile.example.json5 为 build-profile.json5,scripts/build-native.sh 交叉编译内核,scripts/build-hap.sh 产出 HAP,DevEco Studio 勾选自动签名后 hdc install。

不申请存储权限不等于不能读写文件。网表、模型与结果文件通过系统文件选择器访问用户显式选择的位置,工程和草稿存在应用私有沙箱。没有网络、相机、麦克风、位置、通讯录权限,没有后台任务,没有第三方 SDK、广告与统计。

4. 基本使用路径

4.1 用内置示例跑第一次仿真

示例区有四个可直接运行、带理论值对照的电路:直流分压(OP)、RC 瞬态(TRAN)、RC 频率响应(AC)、直流扫描(DC)。

  • 点击「直流分压」,按 F5。
  • 波形区显示 5.000000 V 的直流工作点,理论值 5 V。
  • 切到「RC 瞬态」,按 F5,波形区显示指数充放电曲线。

这也是审核验收路径。示例网表是标准 SPICE,没有私有语法:

Voltage divider
V1 in 0 DC 10
R1 in out 1k
R2 out 0 1k
.op
.end
4.2 打开或编写自己的网表
  • Ctrl+N 新建,Ctrl+O 打开已有 .cir 网表。
  • 编辑器内 Ctrl+F 查找、Ctrl+H 替换全部、Ctrl+Z / Ctrl+Y 撤销重做。
  • Ctrl+S 保存,Ctrl+Shift+S 另存为,Ctrl+Shift+M 导入模型。

系统文件管理器双击 .cir 可直接打开,双击 .ngresult.json 可重新载入结果而不用重跑仿真。切换示例、切换标签或关闭窗口时,未保存内容弹出「保存 / 放弃修改 / 取消」;强杀应用后下次启动提示恢复草稿。

4.3 四类分析

支持工作点(OP)、直流扫描(DC)、瞬态(TRAN)与交流小信号(AC)。

分析类型不是用户在界面选的,也不是靠正则匹配 .op / .ac 语句猜的。工作台把网表交给内核执行 run,再读 ngspice 返回的当前 plot 名称,按 tran / ac / op / dc 前缀判定。判定依据来自求解器本身,网表里写了多条分析语句时,显示的也是实际产出的那一份。

DC 扫描自动识别扫描轴:v-sweep、i-sweep、temp-sweep、res-sweep 都能正确显示横轴,不需要手动指定。

在这里插入图片描述

DC 扫描切到数据表,逐行核对 v-sweep 与 out 的对应关系。做分压、电桥这类电路时,比在曲线上估读准。

5. 功能怎么用

编辑
  • 多标签网表编辑器,每个标签对应一个文档或工程内文件
  • 查找、替换全部、撤销 / 重做
  • 日志区独立滚动,不挤掉波形
  • 网表上限 1 MiB,模型上限 4 MiB
波形

电路仿真真正费时间的部分是「看清结果」,波形区是花时间最多的地方。

  • 滚轮缩放、拖动平移、1:1 复位
  • 点一次设游标 A,再点一次设游标 B,直接读 Δx 与 Δy
  • 最多叠加 12 条信号,不同颜色区分
  • 数据表视图按行查看采样点
  • AC 下可切幅值 / dB / 相位
  • 右键菜单:重置视图、清除游标、导出 PNG
  • 获得键盘焦点后方向键平移,Home / End 跳起点终点

在这里插入图片描述

百万点波形不会一次画完,按可见区分桶绘制,缩放时重算当前窗口,所以大结果不至于让界面失去响应。

结果管理
  • 结果历史:每次仿真留一条记录,可调出历史曲线与当前结果叠加对比(要求两次分析类型相同)
  • .ngresult.json 导入导出,结果存盘后重新导入,不用重跑
  • 导出 CSV、波形 PNG、仿真日志
  • Ctrl+Shift+C 复制当前信号结果摘要到剪贴板
  • 最近一次结果存为应用私有快照,重启后自动恢复

在这里插入图片描述

图里是 RC 低通的幅频曲线,横轴 1 Hz 到 100 kHz 共 201 点,过了截止频率按 -20 dB/dec 滚降,末点幅值 0.00159。

注意截图里「对比」下拉选着一条 TRAN 历史、图上却只有一条曲线——这不是没生效,而是对比只在两次结果分析类型相同时才绘制。频率轴和时间轴不共享量纲,硬叠没有意义,所以 AC 只能和 AC 比。想看不同分析的形态差异,靠切换标签,不靠叠加。

参数扫描

指定任意两端元件的起止值和步长,一次运行生成多条曲线,最多 20 点顺序运行。数值支持 k、meg、m、u、n 等 SPICE 后缀——m 是毫,meg 才是兆,这个坑 SPICE 用户都踩过。

在这里插入图片描述

图里是对分压电路扫 R1:500、1000、1500、2000 四点顺序跑完,每条结果都进历史。当前选 R1=2000,对比 R1=1500——同一条 0~10 V 扫描轴上,R1 变大分压点整体下移,末点值从 4.000 V 变成 3.333 V,和 R2/(R1+R2) 手算一致。不用逐次改网表重跑,也不用手工记四组数。

导出
  • CSV:当前信号采样点,可直接进表格软件复核
  • 波形 PNG:含当前缩放范围与游标标记,不是截屏
  • 仿真日志 .log:提 issue 时附上
  • 结果 JSON:.ngresult.json,可再次导入
运行控制

长仿真可随时停止,也可设超时(默认 30 秒,范围 1 到 600000 毫秒)。

停止不是把界面锁掉。内核侧加了本地补丁,在求解器 IFpauseTest 检查点读取原子停止标志与单调时钟截止时间,退出后按 destroy all / remcirc 清理,不展示未完成波形,清理完成前不接受下一次运行。

边界要说清:这是协作停止,不是线程强制终止。文件解析、OP 收敛或检查点之间的耗时工作可能推迟响应,不保证任意电路的硬时间上限。界面先显示「正在停止」,内核真正退出并清理完才显示「已停止」。

6. 快捷键

命令默认
打开网表Ctrl+O
新建网表Ctrl+N
保存 / 另存为Ctrl+S / Ctrl+Shift+S
导入模型Ctrl+Shift+M
运行当前网表F5
停止当前仿真Esc
查找 / 替换全部Ctrl+F / Ctrl+H
撤销 / 重做Ctrl+Z / Ctrl+Y
导出 CSVCtrl+Shift+E
导出波形 PNGCtrl+Shift+P
导出结果 JSONCtrl+Shift+J
导入结果 JSONCtrl+Shift+R
导出仿真日志Ctrl+Shift+L
复制结果摘要Ctrl+Shift+C

Esc 只在普通仿真运行期间注册;数值验证、文件选择器和未保存对话框期间不允许中断,避免误触。

7. 已知边界

  • 没有原理图绘制。 输入是 SPICE 网表文本。ngspice 本身是仿真内核与命令解释器,不带原理图编辑器。需要画图的用 KiCad、LTspice 画完导出网表再拿进来仿真。
  • 精简构建。 关闭 XSPICE、CIDER、OSDI、KLU 与 OpenMP,求解器是原有 Sparse。依赖这些模型的网表会失败,这是范围不是 bug。
  • 分析类型有限。 只有 OP、DC、TRAN、AC,噪声 / 失真 / 傅里叶暂不支持。
  • 拒绝 .control 命令块。 刻意加的边界,避免加载电路时意外执行长任务或任意命令。
  • 单引擎排队。 ngspice 有进程级全局状态,一个进程只保留一个引擎,多文档和多窗口是排队执行,不是并行仿真。
  • 结果是预算内的。 64 个信号、100 万采样点,超出会被拒绝而不是悄悄截断。
  • 只有 2in1 / arm64-v8a。 手机、平板、x86 都不在首版范围。

8. 结语

做 0.1.0 时反复问自己的是:什么时候该收手。多接一个分析类型、多开一个可选组件都有吸引力,但每一项都在稀释「数值可信」。

所以取舍很清楚:内核只用最稳的构建,只做四类基础分析,力气放在波形测量、结果对比和导出复核上。三个数字可以自行复核:分压 .op 输出 5.000000 V,理论 5 V;RC .tran 在 1 ms 处 0.632120397 V,理论 0.632120559 V,相对误差约 3×10⁻⁷;RC .ac 截止点 0.707127516,理论 0.707106781,相对误差约 3×10⁻⁵——前两个在浮点精度内,AC 那个来自采样频点没正好落在 1/(2πRC) 上,是离散化而非算错。

共同点是都能用纸笔算出来。仿真工具最怕「看起来很专业但没人验得动」,所以首版验收刻意选理论值明确的电路。

已验证环境:签名 HAP 在 HUAWEI MateBook Pro(HarmonyOS 6.1 / API 24)实机运行,六组自动回归全部通过;模拟器(MateBook Pro 2in1 / API 26)验证 PC 布局、快捷键、未保存保护、文件选择器与导出链路。

如果你的场景是电子技术课程实验的数据核对、分压与一阶电路的输入输出关系验证、放大器与滤波器频响观察,或小规模电路的参数灵敏度分析,这就是按那条路径做的工具。

应用市场名称:芯谱(based on ngspice)。包名:com.von.ngspice。

芯谱是开源项目,基于开源软件 ngspice 适配,开源项目地址为:

https://gitcode.com/OpenHarmonyPCDeveloper/ohos_ngspice

有问题,可以在项目中提 issue。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐