Browser does not support (or has disabled) JavaScript, some features of this page may not work properly

FPGA 纯硬件俄罗斯方块:Verilog 模块化设计与综合验证

FPGA资源占用报告
Vivado 综合后资源利用率:LUT、FF、BRAM 等 FPGA 硬件资源的实际占用情况

用 Verilog 在 FPGA 上从零实现一个完整的俄罗斯方块游戏——包括七种标准方块(I/O/T/S/Z/J/L)的旋转、左右移动、加速下落、行消除计分和数码管实时显示,全部硬件逻辑无需 CPU 参与


一、模块化硬件架构

游戏逻辑被拆分为五个独立模块,各司其职、通过 Wrapper 统一协调:

  • Keydebounce(按键消抖):用计数器过滤机械按键抖动,输出稳定按键状态
  • Bitmap(网格管理):维护 32×16 位网格,处理方块下落、触底固定、行消除检测和满行计分
  • BlockController(方块控制):生成随机方块、响应上下左右操作、执行旋转(4×4 位矩阵重排)
  • Segwrapper(数码管驱动):状态机轮询 4 位数码管,动态刷新分数显示
  • Wrapper(顶层调度):管理游戏状态(暂停/速度)、分发按键事件、生成下落节拍信号
顶层设计图

二、关键设计细节

方块旋转:纯位操作

俄罗斯方块的旋转本质是 4×4 矩阵的顺时针转置。没有用查找表,直接用位重排实现:

// 4×4 方块顺时针旋转 90°
cur_blk_data <= {cur_blk_data[12], cur_blk_data[8],  cur_blk_data[4],  cur_blk_data[0],
                 cur_blk_data[13], cur_blk_data[9],  cur_blk_data[5],  cur_blk_data[1],
                 cur_blk_data[14], cur_blk_data[10], cur_blk_data[6],  cur_blk_data[2],
                 cur_blk_data[15], cur_blk_data[11], cur_blk_data[7],  cur_blk_data[3]};

双层网格:动态方块 + 静态底图

Bitmap 模块维护两层网格:bitmap_l(当前下落方块的动态层)和 bitmap_h(已固定的静态层)。显示时两层做 OR 合并,触底时 bitmap_l 并入 bitmap_h:

reg [15:0] bitmap_h [31:0];  // 静态层:已固定的方块
reg [15:0] bitmap_l [31:0];  // 动态层:当前正在下落的方块

// 触底检测:bitmap_l 与 bitmap_h 的每一行按位与
assign cur_blk_act = (bitmap_l[31] == 16'b0) &&
    ((bitmap_h[1]&bitmap_l[0])==0) &&
    ((bitmap_h[2]&bitmap_l[1])==0) && ... ;

计分系统:满行检测

用 32 路并行比较器检测满行数,一次性消行计分——消 1 行 1 分,消 4 行(Tetris)8 分:

assign full_row_num = (bitmap_h[0]==16'hffff) + (bitmap_h[1]==16'hffff) + ... (bitmap_h[31]==16'hffff);

case(full_row_num)
    3'd1: game_score_r <= game_score_r + 1;
    3'd2: game_score_r <= game_score_r + 2;
    3'd3: game_score_r <= game_score_r + 4;
    3'd4: game_score_r <= game_score_r + 8;   // Tetris!
endcase
BlockController仿真波形
BlockController 仿真:方块下落、旋转和左右移动的时序验证——cur_blk_row/col 变化、cur_blk_data 旋转正确
Bitmap网格仿真波形
Bitmap 模块仿真:网格状态实时更新、满行检测和消行逻辑的波形验证

三、从仿真到综合

所有五个模块均通过了 ModelSim 功能仿真——按键消抖、方块移动旋转、触底固定、行消除计分、数码管扫描显示,全部验证无误。随后在 Vivado 中完成综合与布局布线,成功生成比特流文件。

这个项目的特别之处在于:没有 CPU、没有操作系统——游戏的所有逻辑(状态机、碰撞检测、计分)都由纯粹的组合逻辑和时序逻辑电路实现。这是从软件思维到硬件思维的一次完整转变。

Author: Alan
Date:2026年06月12日

Comments