Hotdry.
systems-engineering

浏览器中周期精确的1961继电器计算机仿真:WebAssembly实现门级逻辑与时序

利用WebAssembly在浏览器中实现1961年继电器计算机的周期精确仿真,模拟门级逻辑、时序和I/O,支持互动历史计算演示,提升教育与历史保存。

在计算机历史的长河中,1961 年的继电器计算机代表了早期计算技术的巅峰之作。这些机器使用机械继电器作为逻辑门,运行速度缓慢但可靠性高,是从真空管向晶体管过渡的重要桥梁。今天,通过 WebAssembly 技术,我们可以在现代浏览器中实现这些古董计算机的周期精确仿真(cycle-accurate emulation),不仅重现其门级逻辑、时序和输入 / 输出(I/O)行为,还能提供互动演示,让用户亲身体验历史计算的魅力。这种仿真方式的核心优势在于其高效性和可访问性:无需安装插件或专用软件,用户只需打开浏览器即可探索这些经典机器。

为什么选择 WebAssembly 来实现这种仿真?传统浏览器环境下的仿真往往受限于 JavaScript 的解释执行速度,尤其是在模拟低级硬件逻辑时,性能瓶颈明显。WebAssembly 作为一种二进制指令格式,允许将 C/C++、Rust 等语言编译成接近原生速度的代码,直接在浏览器沙箱中运行。这使得门级逻辑的模拟成为可能:每个继电器的开合状态、信号传播延迟和时钟周期都可以精确建模,而不会因浏览器开销而失真。根据 WebAssembly 规范,其栈式虚拟机模型支持高效的整数运算和内存访问,正适合模拟继电器电路的布尔逻辑和时序控制。例如,在一个典型的继电器计算机中,逻辑门(如 AND、OR、NOT)由多个继电器串并联实现,每个门的传播延迟约为 10-50 毫秒;WebAssembly 可以以微秒级精度模拟这些延迟,确保仿真的周期准确性。

实现这种仿真的关键在于门级逻辑的建模。继电器计算机的核心是 combinatorial 和 sequential 逻辑电路。Combinatorial 部分处理即时输入输出,如加法器使用半加器和全加器,由继电器实现 XOR 和 AND 操作。Sequential 部分则涉及时钟同步的触发器和寄存器,用于存储状态。使用 WebAssembly,我们可以将这些电路抽象为函数:例如,一个 AND 门的模拟函数接受两个布尔输入,返回输出并更新状态表。证据显示,这种方法已在类似项目中证明有效,例如浏览器中的 6502 处理器仿真,使用 WebAssembly 实现了数百万周期 / 秒的执行速度。对于 1961 继电器机,我们可以定义一个核心循环函数,每周期更新所有门的输入 / 输出,模拟继电器弹跳(bounce)和噪声干扰,以增加真实感。时序控制是另一个挑战:继电器机的时钟频率通常在 1-10Hz,远低于现代 CPU;仿真需精确控制每个周期的持续时间,使用 WebAssembly 的性能计时器(Performance.now () 集成)来同步浏览器渲染,避免掉帧。

I/O 模拟是互动演示的核心。历史计算机的输入往往通过开关面板或纸带,输出为灯泡或打印机。在浏览器中,我们可以用 HTML 元素模拟这些:键盘事件映射为开关输入,Canvas 或 LED-like DIV 模拟灯泡输出。WebAssembly 模块通过 JavaScript 桥接处理 I/O,例如导出函数 updateIO (),接收输入位并返回输出位。证据来自现有 WebAssembly I/O 库,如 wasm-bindgen(Rust),它允许无缝传递数组数据,实现实时反馈。例如,用户输入一个简单的算术指令,仿真执行后立即点亮对应灯泡,展示二进制加法过程。这种互动性不仅教育用户计算机原理,还可用于演示早期编程,如汇编指令的步进执行。

要落地这种仿真,以下是关键参数和清单:

  1. 硬件参数

    • 时钟周期:10ms / 周期(模拟 1Hz 时钟)。
    • 门延迟:AND/OR 门 5ms,NOT 门 2ms;总传播延迟不超过周期的 50%。
    • 内存:模拟磁芯存储,容量 64 字(每个字 16 位),访问延迟 1 周期。
    • I/O 端口:8 位输入开关,8 位输出灯;纸带输入以 1KB/s 速度模拟。
  2. WebAssembly 实现清单

    • 语言选择:Rust 或 C++,使用 Emscripten 编译。
    • 模块结构:核心模块(logic.wasm)处理门模拟;I/O 模块(io.wasm)桥接 JS。
    • 优化:使用 SIMD 指令加速并行门计算;内存布局为线性数组,避免碎片。
    • 调试:集成 Source Maps,允许浏览器 DevTools 步进 WASM 代码。
  3. 浏览器集成参数

    • 兼容性:Chrome 57+、Firefox 52+、Safari 11+。
    • 性能阈值:目标 60FPS 渲染,确保仿真不超过浏览器主线程 50% CPU。
    • 回滚策略:若 WASM 失败,回退到 JS 实现(速度降低 10 倍)。
    • 监控点:周期计数器、延迟直方图、I/O 吞吐量。
  4. 部署清单

    • 打包:WASM 文件 < 1MB,使用 Brotli 压缩传输。
    • 安全:沙箱隔离,防止用户输入导致无限循环(添加周期上限 10000)。
    • 测试:单元测试门逻辑(覆盖率 > 95%);端到端测试完整指令执行。

这种仿真不仅重现历史,还为教育提供可扩展平台:教师可自定义指令集,学生互动调试电路故障。通过 WebAssembly,我们桥接了过去与现在,让 1961 年的计算遗产在数字时代重生。

资料来源:https://greg.technology(主要来源,提供项目灵感);WebAssembly.org(技术规范与示例)。(字数:1025)

查看归档