# verilog-gpu **Repository Path**: luzhihaoTestingLab/verilog-gpu ## Basic Information - **Project Name**: verilog-gpu - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-23 - **Last Updated**: 2026-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 最小GPU FPGA实现 使用 Verilog 在 FPGA 上实现一个**最小可用的 GPU**,用于学习 GPU 核心原理。 ## 特性 - 完整的 3D 渲染管线:顶点变换 → 图元组装 → 光栅化 → 片段着色 - 可配置 MVP 矩阵(Q8.8 定点数) - 2D 纹理映射(最近邻 / 双线性过滤) - 深度测试 - 双缓冲帧缓冲,VGA 640x480@60Hz 输出 - UART 命令接口,PC 主机控制渲染 - 纯 Verilog 实现,兼容 Icarus Verilog / Vivado / Quartus ## 技术规格 | 参数 | 值 | |------|-----| | 渲染分辨率 | 320x240 | | 输出分辨率 | 640x480 (像素加倍) | | 色深 | RGB565 (16-bit) | | 帧缓冲 | 双缓冲 | | 纹理分辨率 | 最大 64x64 | | 顶点格式 | X,Y,Z,W + U,V + R,G,B (9×16bit) | | 矩阵 | 4×4 MVP, Q8.8 定点数 | | 深度缓冲 | 16-bit | | 主机接口 | UART | ## 项目结构 ``` verilog-gpu/ ├── docs/ # 设计文档 │ ├── 00_project_overview.md │ ├── 01_command_processor.md │ ├── ... │ └── 10_implementation_steps.md ├── rtl/ # Verilog 源码 │ ├── common/ │ │ └── fixed_point.vh # Q8.8 定点数运算宏 │ ├── cmd_processor.v # 命令处理器 │ ├── vertex_processor.v # 顶点处理器 │ ├── primitive_assembly.v # 图元组装 │ ├── rasterizer.v # 光栅化器 │ ├── fragment_processor.v # 片段处理器 │ ├── texture_sampler.v # 纹理采样器 │ ├── frame_buffer.v # 帧缓冲 │ ├── vga_controller.v # VGA 控制器 │ ├── memory_arbiter.v # 内存仲裁器 │ └── gpu_top.v # 顶层集成 ├── sim/ # 仿真 │ ├── tb_cmd_processor.v │ └── tb_vertex_processor.v ├── constraints/ │ └── gpu.xdc # FPGA 约束文件 └── scripts/ └── build.tcl # Vivado 构建脚本 ``` ## 快速开始 ### 仿真 (Icarus Verilog) #### Command Processor ```bash # 编译 iverilog -g2012 -I rtl -I rtl/common -o sim/tb_cmd_processor.vvp rtl/cmd_processor.v rtl/uart_tx.v sim/tb_cmd_processor.v # 运行 vvp sim/tb_cmd_processor.vvp # 查看波形 (需要 GTKWave) gtkwave sim/tb_cmd_processor.vcd ``` #### Vertex Processor ```bash # 编译 iverilog -g2012 -I rtl -I rtl/common -o sim/tb_vertex_processor.vvp rtl/vertex_processor.v sim/tb_vertex_processor.v # 运行 vvp sim/tb_vertex_processor.vvp # 查看波形 (需要 GTKWave) gtkwave sim/tb_vertex_processor.vcd ``` ### 仿真 (Vivado) 在 Vivado Tcl Console 中: ```tcl # Vertex Processor 仿真 add_files -sim sim/tb_vertex_processor.v add_files -sim rtl/vertex_processor.v add_files -sim rtl/common/fixed_point.vh launch_simulation ``` ### 综合 (Vivado) ```bash vivado -mode batch -source scripts/build.tcl ``` ## 渲染管线 ``` Host (UART) → Command Processor → Vertex Processor → Primitive Assembly ↓ VGA Display ← Frame Buffer ← Fragment Processor ← Rasterizer ↑ Texture Sampler ``` ## 命令格式 每个命令包 4 字节,通过 UART 发送: ``` [CMD_TYPE:8] [ADDR:8] [DATA_H:8] [DATA_L:8] ``` | 命令 | 编码 | 说明 | |------|------|------| | WRITE_REG | 0x01 | 写寄存器 | | READ_REG | 0x02 | 读寄存器 | | DRAW | 0x03 | 触发绘制 | | CLEAR | 0x04 | 清屏 | | SYNC | 0x05 | 同步等待 | ## 开发路线 按 `docs/10_implementation_steps.md` 逐步实现: 1. **Phase 1**: 定点数运算库 2. **Phase 2**: VGA 显示系统 3. **Phase 3**: 渲染管线(无纹理) 4. **Phase 4**: 纹理系统 5. **Phase 5**: 命令接口 6. **Phase 6**: 系统集成与优化 ## 开发环境 - **仿真**: Icarus Verilog + GTKWave - **综合**: Vivado / Quartus Prime - **开发板**: Basys 3 / Nexys A7 / DE0-Nano(带 VGA 接口) - **主机**: Python 脚本通过串口发送命令 ## 参考资料 - [docs/00_project_overview.md](docs/00_project_overview.md) - 项目总览 - [docs/10_implementation_steps.md](docs/10_implementation_steps.md) - 实现步骤 - 各模块详细文档见 `docs/01~09_*.md` ## License MIT