首页›行业资讯›康威生命游戏在配备 SPI LCD 的 Tang Nano 9K FPGA 开发板上运行
← 返回行业资讯
开源项目

康威生命游戏在配备 SPI LCD 的 Tang Nano 9K FPGA 开发板上运行

Hacker News ·
开源示例在 Tang Nano 9K 与 SPI LCD 上实现康威生命游戏。
本文为原文全文的中文翻译(约 1603 字),原文配图已同步至站内;机器翻译仅供快速阅读,细节请以原文为准。

gol-hotstate — 在Hotstate机器上运行康威生命游戏

康威生命游戏(规则B3/S23),完全以编译后的Hotstate微码运行,实时渲染到1.14英寸ST7789 SPI LCD上。已针对标准B3/S23软件基准进行端到端验证,并烧录到真实的Sipeed Tang Nano 9K开发板上。

一个32×32的环形网格单元存放在两个双缓冲可写BRAM中。每一代,对每个单元的8个摩尔邻居求和(边缘环绕),在2×9常量ROM(rule[alive][count])中查找下一状态,仅将实际发生变化的单元以4×4像素块形式blit到LCD——因此一个大部分为空、仅有几个滑翔机的区域每代只需少量SPI写入,而非全屏重绘。

一个物理按钮(S2,板载引脚3)在两种种子图案之间切换——单个滑翔机(永远滑翔,可用作“是否真的在运行”的健全性检查)和四滑翔机图案(经过若干代后稳定为静物和振荡器的混合,这是该种子的真实B3/S23行为,而非缺陷)——每次按下时清屏并重启元胞自动机。

构建与运行

本目录中的 gol_template.v / .mem / .vh / .toml 文件是 hotc 从 gol.c + lcd_driver.c 编译生成的 OUTPUT(gol.c 在 hotc 命令行中排在前面,因为 hotc 以第一个输入文件的基名来命名生成的模块/文件——即 gol,而非 lcd_driver),按原样检入。本仓库不附带 hotc 本身,因此没有生成步骤——下面的命令只是构建并烧录此处已有的内容:

# Verilator RTL 仿真(自由运行波形捕获,非自检) make hw_sim # 为 Tang Nano 9K 综合 + 布局布线 + 打包比特流 make synth pnr pack # 通过 USB 烧录到已连接的 Tang Nano 9K make prog 硬件目标 Sipeed Tang Nano 9K(Gowin GW1NR-LV9QN88PC6/I5),引脚定义在 lcd114.cst 中:

top.v 将两个低电平有效的板级输入反相( rst = ~resetn , mode_btn = ~mode_btn_n )后再接入 gol hotstate 实例;其余信号( sclk 、 mosi 、 cs_n 、 dc 、 lcd_resetn )直接映射到 ST7789 面板。

器件资源使用(GW1NR-LV9QN88PC6/I5)

测量日期 2026-09-22,数据来自 nextpnr-himbaechel 自身的布线后报告,基于板上实际运行的比特流。零使用的资源类别已省略。

BSRAM 是瓶颈资源,占用率达 50%——用于两代网格以及微码和变量表。逻辑资源远未饱和:规模翻倍的设计仍能容纳于 LUT 预算内,但无法容纳于块 RAM 中。

时序:布线后 inst_gol.clk 的 Fmax 为 59.72 MHz,而设计实际运行于板载 27 MHz 振荡器——约有 2.2 倍余量。(nextpnr 报告“PASS at 12.00 MHz”;12 MHz 只是其对未约束时钟的默认目标,并非本设计的要求。)

与本仓库中的 Tang Nano 20K 示例不同,本流程未传入 -noalu——因此有 304 个 ALU 单元。apicula 的 ALU 计算错误(YosysHQ/apicula#514)仅针对 GW2A-18C;GW1N-9C 不受影响。

上述数据所用工具链:yosys 0.69+62、nextpnr-himbaechel 0.11.1-26、gowin_pack。与 20K 上的 KAN_hotstate 不同,gol-hotstate 在 yosys 0.69 上可正确综合并运行——该问题与具体设计和器件相关。

算法(gol.c)

阅读原文 →
来源:Hacker News

本页摘要由 AI 辅助整理,经编辑审核后发布;AI 仅用于提炼与分类,原文均附来源链接。