芯谱:面向 HarmonyOS PC 的 SPICE 电路仿真工作台
芯谱:面向 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 |
| 导出 CSV | Ctrl+Shift+E |
| 导出波形 PNG | Ctrl+Shift+P |
| 导出结果 JSON | Ctrl+Shift+J |
| 导入结果 JSON | Ctrl+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。
更多推荐



所有评论(0)