1. Show HN: I built a hardware processor that runs Python (www.runpyxl.com)
RunPyXL 是一个概念验证项目,展示了一种直接在硬件中执行 Python 代码的自定义处理器,无需解释器、JIT 或操作系统。
核心原理与架构
- RunPyXL 将
.py文件通过自定义工具链编译:首先生成 CPython 字节码,然后翻译成一种自定义汇编指令,最终生成在全新设计的流水线处理器上运行的二进制代码。 - 该处理器运行在 Xilinx Zynq-7000 FPGA (Arty-Z7-20 开发板) 上。RunPyXL 核心时钟频率为 100MHz。板上的 ARM CPU 负责初始化和内存管理,但 Python 代码本身完全在 FPGA 硬件中执行。
- GPIO(通用输入输出)引脚直接物理连接到 FPGA,并映射到处理器的核心模块中,使得 Python 代码可以像访问内存一样直接访问硬件引脚,绕过了所有软件中间层。
关键性能与特性
- 极低延迟:在一次 GPIO 引脚写入到另一个引脚读取的循环测试中,RunPyXL 的往返延迟仅为 480 纳秒。
- 显著性能优势:相比在 PyBoard(MicroPython)上运行相同功能(尽管代码略有不同),RunPyXL 的速度快了约 30 倍。如果将两者时钟频率标准化(因 RunPyXL 基于 FPGA 而非专用芯片,时钟较低),其优势可达 50 倍。
- 确定性与实时性:RunPyXL 的执行时间是恒定且可预测的,每次测试都得到精确的 480 纳秒结果。而 MicroPython 的运行时存在抖动(结果在 14-25 微秒之间波动)。这使得 RunPyXL 具备真正的实时系统特性。
演示与对比
- 通过一段视频演示了在 FPGA 上用跳线连接两个 GPIO 引脚的测试。RunPyXL 代码直接调用
pyxl_write_gpio_pin1、pyxl_read_gpio_pin2和pyxl_get_cycle_counter等内部函数来操作硬件和计时。 - 主要性能差距源于架构:传统 Python 虚拟机(如 MicroPython)通过软件解释器访问硬件,引入了开销;而 RunPyXL 让 Python 语义直接在硅片中执行,消除了这一层抽象。
潜在应用与意义
- 这项技术的意义不仅在于速度提升,更在于为 Python 打开了高性能、实时硬件控制的大门。它使得用纯 Python 编写以下应用成为可能:
- 实时控制系统。
- 需要严格时序约束的机器学习推理与传感器响应循环。
- 要求周期级精度的机器人任务(如电机反馈、传感器融合)。
- 对时序和可靠性要求高的工业嵌入式系统。
- 项目仍处于概念验证阶段,旨在展示“Python 在硬件中运行”的可行性与潜力。