选择正确 FPGA 编码:基于康威生命游戏的实战研究
跟随三个实验,阐释如何为 FPGA 设计选择最合适的编码
设计 FPGA 逻辑时,综合工具通常自动选择编码;一般建议信任其决策。但理解二进制、格雷码和独热码的细微差别,有助于预判编译器何时倾向于某种编码。
本文通过实战实验,以康威生命游戏为测试平台,凸显将各种编码应用于大规模有限状态机阵列时出现的权衡。
本系列已涵盖 Verilog FSM 构建、初始状态与存储对编码的影响,以及二进制、独热、格雷码的高层对比。
测试系统
为放大硬件差异,我在 23×23 网格中实例化数十个状态机,直接对比二进制、格雷码和独热编码。
康威生命游戏是经典细胞自动aton,在二维矩形格子上模拟细胞出生、存活和死亡。每个细胞每周期遵循三条简单规则:
- 拥有两或三个存活邻居的活细胞存活。
- 拥有三个活邻居的死细胞复活。
- 所有其他细胞死亡或保持死亡。
这些规则产生丰富涌现模式,为评估编码策略提供清晰、易理解的工作负载。
下图是 Bill Gosper 发射机的 GIF,一种流行的生命游戏模式。

康威生命游戏变体:Bill Gosper 发射机。Gif 由 Lucas Vieira 创作 [CC BY-SA 3.0]
Verilog 代码
单元逻辑建模为 8 状态 FSM。虽然生命游戏单周期即可完成单细胞计算,但 8 状态设计在不同编码下产生显著差异。下面 Verilog 模块演示原始二进制编码。
`define STATE_0 3'b000
`define STATE_1 3'b001
`define STATE_2 3'b010
`define STATE_3 3'b011
`define STATE_4 3'b100
`define STATE_5 3'b101
`define STATE_6 3'b110
`define STATE_7 3'b111
module LifeCell( input clk, input nrst, input seed, input [7:0] neighbors, output reg alive); reg [2:0] state; always @ (posedge clk) if (nrst == 0) state <= `STATE_0; else case(state) `STATE_0: begin // ... state <= `STATE_1; end `STATE_1: begin // ... state <= `STATE_2; end // ... `STATE_7: begin // ... state <= `STATE_1; end endcase endmodule
若想深入代码,完整项目托管于 GitHub。
FPGA 编码实现
设计在 23×23 单元网格上综合,产生 27 个不同实现:三种 FSM 变体,各自用二进制、格雷码、独热编码综合,针对三款目标 FPGA。
FSM #1:原始模型
此 FSM 运行一次初始状态,随后循环遍历其余七状态——此序列暗示格雷码可能有优势。

FSM #2:序列模型
作为简单 3 位计数器,此 FSM 进一步强化了格雷码将占优的预期。

FSM #3:任意纠缠模型
此变体共享 FSM #1 关键路径,但邻居数超三时走非线性路径。独热编码似乎更适合这种不规则跳转。

目标架构
实现使用以下器件的厂商工具链构建:
- Xilinx Vivado Suite 面向 Artix-7 FPGA
- Intel Quartus Prime 面向 Cyclone-V FPGA
- Lattice Diamond 面向 LatticeXP2 FPGA
结果对比
FPGA 设计基准测试本质上由指标驱动。我选取四个关键指标——逻辑资源使用、寄存器数量、估算最高频率、片上功耗——并赋予加权分值。每项指标最优得 +1(加权指标 +2),最差得 -1(加权指标 -2),中间得 0。
- 逻辑单元: LUT(Xilinx/Lattice)或 ALM(Intel)。权重 1。
- 寄存器: 权重 1。
- 最高频率: 权重 2。
- 片上功耗: 权重 2。
所有 27 个实现的累计得分如下。

全部 27 实现结果表。绿色高亮最佳编码,红色最差,黄色中位数(无并列)。
总体来看,独热编码多位于底部两行,仅两次与其他方案持平。反之,格雷码持续成为顶级表现者,尤其是在频率和功耗权重更高时。
为突出胜者,下表隔离出每个变体的领先编码。

结论
虽然数据倾向于此特定生命游戏工作负载下的格雷码,但结果取决于您优先考量的指标。若看重资源使用而非性能,排名可能不同。我的目的非规定一刀切规则,而是展示实证证据如何指导编码选择。
欢迎探索项目 GitHub 仓库中的源代码、27 个综合实现或在线生命游戏仿真。
嵌入式
- 控制器选型指南:PLC、PAC、DCS还是IPC?
- 何时使用裸板测试实现可靠PCB开发
- 守护电机:交流电抗器的核心防护作用与选型指南
- 工业 4.0 中借助远程专家方案最大化效率
- 钛 vs 铝:如何选择兼具强度与轻量化的最佳有色金属
- 锤头塔吊部署实战指南:何时使用、核心优势与选型建议
- 凯夫拉材料跨界应用全景:从航空航天到个体防护的材料革命
- 水泵效率对决:离心泵 vs 正排量泵,谁才是真·高效之王?
- 为何基于标准的开发实践至关重要——即使非强制
- Swissbit 推出 U-50n Nano USB 3.1 闪存盘:工业级 IoT 的坚固高性能存储
- AAEON COM-CFHB6:紧凑高性能 Type-6 模块,Intel CPU、48GB DDR4 ECC、24 条 PCIe 通道,面向边缘、AIoT 与工业应用
- 为您的项目选择合适的铝合金