用FPGA在DE2-115开发板上驱动VGA显示器:从时序理解到彩色条纹生成(Quartus II 工程)

用FPGA在DE2-115开发板上驱动VGA显示器:从时序理解到彩色条纹生成(Quartus II 工程) DE2-115开发板VGA驱动实战从硬件连接到彩色条纹生成第一次在FPGA开发板上点亮VGA显示器时那种成就感至今难忘。记得当时盯着屏幕上跳动的彩色条纹反复确认这确实是自己写的代码产生的效果。本文将带你完整复现这个过程使用DE2-115开发板和Quartus II软件从硬件连接到Verilog编码一步步实现VGA显示功能。不同于理论讲解这里每个步骤都经过实际硬件验证特别针对DE2-115的ADV7123视频DAC芯片做了适配确保你能在自己的开发板上看到预期效果。1. 硬件准备与开发环境搭建DE2-115开发板的VGA接口通过ADV7123视频DAC芯片实现数字信号到模拟VGA的转换。这个三通道8位DAC芯片将FPGA输出的24位RGB数字信号转换为模拟信号同时处理行场同步信号。所需硬件清单DE2-115开发板搭载Cyclone IV EP4CE115F29C7 FPGAVGA显示器支持640x48060Hz模式VGA连接线5V电源适配器软件环境配置步骤安装Quartus II 13.0sp1Web Edition即可下载并导入DE2-115的系统CD中的示例项目在Device中选择正确的芯片型号EP4CE115F29C7确保安装USB-Blaster驱动以便后续程序下载注意不同版本的Quartus II可能存在界面差异建议使用13.0sp1版本以获得最佳兼容性开发板上的时钟电路提供50MHz主时钟我们需要通过PLL分频得到VGA所需的25MHz像素时钟。DE2-115的VGA接口引脚分配如下表所示FPGA引脚信号名称VGA接口引脚说明PIN_A12VGA_R[7]1红色分量高位PIN_B12VGA_R[6]1.........省略中间引脚PIN_C9VGA_HS13行同步信号PIN_D9VGA_VS14场同步信号2. VGA时序生成与硬件适配VGA显示的核心在于精确的时序控制。640x48060Hz模式需要25MHz的像素时钟每个帧由525行组成其中480行可见每行800个像素周期640个可见像素。时序参数详解// 行时序参数单位像素周期 parameter H_SYNC 10d96; // 行同步脉冲宽度 parameter H_BACK 10d48; // 行后沿 parameter H_VALID 10d640; // 行有效数据 parameter H_FRONT 10d16; // 行前沿 parameter H_TOTAL 10d800; // 行总周期 // 场时序参数单位行数 parameter V_SYNC 10d2; // 场同步脉冲宽度 parameter V_BACK 10d33; // 场后沿 parameter V_VALID 10d480; // 场有效数据 parameter V_FRONT 10d10; // 场前沿 parameter V_TOTAL 10d525; // 场总周期实现时序生成的Verilog模块需要两个计数器一个用于行计数0-799一个用于场计数0-524。当时序处于有效区域时输出RGB数据否则输出黑色。关键代码片段always (posedge vga_clk or negedge sys_rst_n) begin if (!sys_rst_n) begin h_cnt 0; v_cnt 0; end else begin if (h_cnt H_TOTAL - 1) begin h_cnt 0; if (v_cnt V_TOTAL - 1) v_cnt 0; else v_cnt v_cnt 1; end else begin h_cnt h_cnt 1; end end end assign h_sync (h_cnt H_SYNC) ? 1b0 : 1b1; assign v_sync (v_cnt V_SYNC) ? 1b0 : 1b1; assign valid (h_cnt (H_SYNC H_BACK)) (h_cnt (H_SYNC H_BACK H_VALID)) (v_cnt (V_SYNC V_BACK)) (v_cnt (V_SYNC V_BACK V_VALID));3. 彩色条纹生成与显示在验证了时序正确后我们可以开始生成测试图案。最简单的就是彩色条纹通过将屏幕水平分成若干区域每个区域显示不同颜色。颜色定义与区域划分// 24位RGB颜色定义 parameter WHITE 24hFFFFFF; parameter RED 24hFF0000; parameter GREEN 24h00FF00; parameter BLUE 24h0000FF; parameter YELLOW 24hFFFF00; parameter CYAN 24h00FFFF; parameter PURPLE 24hFF00FF; parameter BLACK 24h000000; // 将640像素宽分成8个80像素的区域 always (posedge vga_clk) begin if (valid) begin case (h_pos[9:7]) // 取高3位决定颜色区域 3b000: rgb WHITE; 3b001: rgb RED; 3b010: rgb GREEN; 3b011: rgb BLUE; 3b100: rgb YELLOW; 3b101: rgb CYAN; 3b110: rgb PURPLE; default: rgb BLACK; endcase end else begin rgb BLACK; // 非显示区域输出黑色 end end常见问题排查屏幕无显示检查开发板电源和VGA线连接确认ADV7123芯片供电正常测量3.3V电压检查PLL是否锁定locked信号图像偏移或滚动重新核对时序参数确保像素时钟精确为25MHz颜色异常检查RGB引脚分配确认ADV7123的参考电压设置4. Quartus II工程完整实现现在我们将所有模块整合到一个完整的Quartus II工程中。以下是详细的创建步骤新建项目启动Quartus II选择File New Project Wizard指定项目目录和名称如DE2_115_VGA选择正确的FPGA型号Cyclone IV EP4CE115F29C7添加源文件创建三个Verilog文件vga_top.v顶层模块、vga_timing.v时序生成、vga_pattern.v图案生成编写代码后使用Analysis Elaboration检查语法引脚分配打开Assignment Editor根据开发板原理图分配引脚例如set_location_assignment PIN_A12 -to VGA_R[7] set_location_assignment PIN_C9 -to VGA_HS # ...其他引脚分配或者直接导入DE2-115提供的引脚约束文件时钟配置打开PLL配置工具Tools MegaWizard Plug-In Manager创建一个25MHz的时钟输出输入时钟50MHz分频比1/2编译与下载执行全编译CtrlL连接USB-Blaster打开Programmer选择生成的.sof文件点击Start下载到FPGA工程结构示意图vga_top (顶层模块) ├── pll_25m (时钟生成) ├── vga_timing (时序生成) │ ├── 行计数器 │ └── 场计数器 └── vga_pattern (图案生成) ├── 颜色选择逻辑 └── 区域划分逻辑完成这些步骤后你的DE2-115开发板应该能在连接的VGA显示器上显示清晰的彩色条纹。这个基础框架可以进一步扩展比如添加图像数据输入、实现动态图案或文本显示等功能。