PicSimLab(PICSimLab)是一款开源的实时开发板仿真器, 全称为 Programmable IC Simulator Laboratory, 由巴西学者 Luis Claudio Gambôa Lopes 开发。它在一台个人计算机上虚拟出单片机开发板及其外围器件, 并能与 MPLAB X、Arduino IDE 等开发环境配合完成程序烧录与调试, 使嵌入式开发与教学可以不依赖实物电路板进行。
定义
PicSimLab 是一款实时的开发板仿真器, 其名称是 Programmable IC Simulator Laboratory 的缩写, 也被写作 PIC Simulator Laboratory[1]。它把单片机芯片与整块开发板一并做成软件模型, 在计算机屏幕上呈现虚拟电路板, 使用者可以直接用鼠标点击板上的按键、电位器和显示屏等部件完成交互[2]。
需要区分的是, PicSimLab 本身并不负责编辑和编译源代码。它的目标是模拟真实硬件, 因此代码编辑与调试仍要依靠开发实物板时所用的 MPLAB X、Arduino IDE 或配合 PlatformIO 的 VSCode 等工具[2]。源码以 .hex 等可执行文件的形式载入虚拟单片机运行[3]。
原理
PicSimLab 的仿真可以拆成三层: 单片机内运行的用户程序、单片机本身的指令级仿真, 以及开发板与外围器件的仿真[2]。当仿真出现异常时, 需要先判断问题属于哪一层, 再分别到程序、仿真内核或 PicSimLab 本体中排查[2]。
指令级仿真并非全部自行实现, PicSimLab 调动多个既有的开源仿真内核作为后端: picsim 与 gpsim 负责 PIC 系列, simavr 负责 AVR 系列, uCsim 覆盖 8051、STM8 与 Z80, qemu-stm32 与 qemu-esp32 分别承担 STM32 和 ESP32 的仿真[4]。在图形界面方面, 它使用了 wxWidgets、lxrad 等库绘制虚拟板卡与器件[2]。
仿真内核通过调试接口与外部工具衔接: 对 PIC 与 AVR 目标, 上位机可以用 MPLAB X 的调试器或 avr-gdb 连入虚拟机运行, 从而实现单步执行、断点和变量观察[2]。远程控制接口让其他程序经 TCP/IP 以文本命令操作仿真, 便于自动化测试[1]。
发展历程
PICSimLab 的开发始于其作者对教学工具的需求。PIC 仿真内核 picsim 于 2008 年出现, 定位是比 gpsim 更便于用 C 语言编写程序的替代方案。2010 年 PicSimLab 发布了第一个版本, 当时只支持一块搭载 PIC16F628A 的开发板, 形态上相当于 picsim 仿真内核的图形前端。
此后项目按版本号持续迭代, 0.6 至 0.8 系列陆续加入 Windows 与 Linux 安装包[5]。2021 年前后, 实验版本开始借助 picsim、simavr、qemu-stm32、uCsim 和 gpsim 等后端, 把支持范围从 PIC 扩展到其他系列的单片机与更多板型[5]。2024 年 10 月 5 日发布的 0.9.2 版新增了可直接烧录固件的命令行工具 photosimlab_tool, 并对振荡器、I2C 扩展等外围器件做了补充与修正[6]。
项目以 GPL 授权发布, 早期版权声明标注 2015 年起, 稳定版二进制文件在 GitHub 与 SourceForge 上分发[2]。作者同时维护着一个在线版本, 供不便安装本地程序的场合使用[4]。
应用
PicSimLab 最主要的使用场景是嵌入式教学。因为虚拟板卡可以离线使用, 学生在没有实物开发板的情况下也能完成实验, 一些高校把它纳入嵌入式系统与单片机课程的工具链[7]。仿真支持与 MPLAB X、Arduino IDE 的配合, 因此也常被用来验证课程作业中的程序逻辑[8]。
在功能验证方面, 该工具可挂接的虚拟外围器件涵盖发光二极管、按键等简单元件, 也包括 W5500 以太网扩展板、带触摸屏的 ILI9340 彩色显示屏以及 MCP23017 一类的 I2C 扩展器件, 使用者据此搭建接近实际应用的电路进行测试[2][6]。配合虚拟示波器与逻辑分析功能, 还可以观察引脚时序与总线波形[1]。
教学之外的用途包括工程前期的方案验证。开发者可以在焊接实物电路之前先在仿真中运行程序, 排除代码层面的问题, 降低反复改板与器件损耗的成本[2]。项目自带的工程向导可从模板生成代码工程, 并把程序连同仿真工作区一并保存为 .pzw 文件, 便于提交和分发[1]。
局限
PicSimLab 不提供源码编辑功能, 必须与外部 IDE 和编译器组合使用, 未安装相应开发环境的机器无法完成从写代码到仿真的完整流程[2]。工程向导也对环境有前置要求: 面向 ESP32、STM32、AVR、STM8 与 C51 的板卡需要 PlatformIO, PIC16F 与 PIC18F 板卡则需要 MPLAB X 与 XC8 编译器[1]。
仿真与实物之间存在偏差。教学实践中出现过振荡器测量结果约为实际值时序两倍的情况, 板上发光二极管的点亮也存在延迟乃至在某些条件下不亮的现象, 端口寄存器的配置顺序会影响观察结果[9]。MPLAB X 与 PicSimLab 之间的调试插件在部分版本中仍被列为不稳定[9]。
平台支持也不完全对等。稳定版可执行文件面向 Linux 与 Windows 分发, macOS 用户需要借助 Wine 等兼容层运行, 而从源码在 macOS 上原生编译始终没有得到确认[2]。此外, 由于仿真的正确性取决于后端内核, 芯片时序或外设行为与预期不符时, 问题往往需要交由对应的仿真内核项目处理, 而非 PicSimLab 本身[2]。
参见
-
微控制器 —— PicSimLab 所仿真的对象, 集成处理器与外围功能于单一芯片。
-
MPLAB X —— 与 PicSimLab 配合完成 PIC 程序编写、编译和调试的开发环境。
-
Arduino IDE —— 面向 AVR 等目标的开发环境, 可向 PicSimLab 的虚拟板卡烧录程序。
-
simavr —— PicSimLab 用于 AVR 系列指令级仿真的开源内核。
-
硬件在环 —— 与纯软件仿真相对的开发验证方式, 可用于理解后者的适用边界。
参考资料
- picsimlab(PDF) [引用日期2026-10-14]
- picsimlab [引用日期2026-10-14]
- SIMULATEUR PICSIMLAB [引用日期2026-10-14]
- [ [引用日期2026-10-14]
- Releases · lcgamboa/picsimlab - Skip to content [引用日期2026-10-14]
- Release Version 0.9.2 · lcgamboa/picsimlab - Skip to content [引用日期2026-10-14]
- Systèmes Embarqués [引用日期2026-10-14]
- Washing-Machine-Simulator [引用日期2026-10-14]
- SYSTÈMES EMBARQUÉS [引用日期2026-10-14]