名称:图像增强 VGA HDMI 显示控制 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:DE10-Nano
功能介绍
本工程实现 FPGA 图像增强与 VGA/HDMI 显示控制,使用 Verilog 语言开发,开发环境为 Quartus。工程面向视频显示实验和图像处理入门应用,可完成基础视频时序产生、RGB 输出控制、图像处理模块调用以及 HDMI 显示链路配置。 设计中包含图像亮度处理、对比度处理、灰度处理和数据选择等功能模块,可用于观察不同图像处理逻辑对输出画面的影响。显示部分采用 640x480 有效显示区域时序,生成 hsync、vsync、dataEnable 和 RGBchannel 等关键信号,便于理解 FPGA 视频扫描、消隐区控制和像素有效区输出的关系。 工程还提供 DE10-Nano 相关 Quartus 工程、管脚约束、编译输出文件和演示资料,适合用于课程设计、FPGA 图像处理实验、VGA/HDMI 显示接口学习以及二次开发参考。
运行环境
开发语言:Verilog 开发软件:Quartus 适配开发板:DE10-Nano 工程类型:FPGA 图像增强、VGA/HDMI 显示控制工程 主要工程文件:vgaHdmi.qpf、vgaHdmi.qsf、vgaHdmi.sdc 主要源码路径:quartus/src/TopModule.v、quartus/src/vgaHdmi.v、quartus/src/i2c、quartus/src/pll
设计思路
设计以 FPGA 视频输出链路为核心,先由时钟与复位信号驱动 VGA/HDMI 显示时序,再通过水平计数、垂直计数产生行同步 hsync、场同步 vsync 和 dataEnable 有效显示区域信号。vgaHdmi 模块按照 640x480 显示区域组织像素扫描,并在消隐区、同步脉冲区和回扫区之间切换输出状态,从而形成标准的视频扫描节奏。 图像处理部分围绕亮度、对比度、灰度和数据选择等模块展开,适合学习 FPGA 中像素流处理的基本结构。整体思路是将图像数据或测试图案按像素节拍送入处理链路,再根据不同处理模块输出对应的 RGB 数据,最后通过 VGA/HDMI 控制模块完成显示输出。 HDMI 相关部分包含编码、并串转换和输出控制逻辑,I2C 配置模块用于 HDMI 芯片初始化配置。PLL 模块提供显示链路所需时钟,顶层模块负责把时钟、复位、按键/拨码开关、视频同步信号和 RGB 通道连接起来,形成可综合、可下载运行的完整 Quartus 工程。
模块结构
主要模块包括: TopModule:工程顶层模块,完成时钟、复位、视频输出、I2C 配置和外设信号连接。 vgaHdmi:VGA/HDMI 视频时序与 RGB 测试输出模块,产生 hsync、vsync、dataEnable、vgaClock 和 RGBchannel。 I2C_Controller、I2C_WRITE_WDATA、I2C_HDMI_Config:HDMI 相关 I2C 配置模块,用于完成 HDMI 芯片初始化写入控制。 pll_25、pll_25_0002:PLL 时钟模块,为显示链路提供所需像素时钟。 image_brightness、image_contrast、image_gray、image_pro、data_choose:图像增强与数据选择模块,用于亮度、对比度、灰度及图像处理结果切换。 vga_ctrl、vga_pic、vga_disp、tb_vga_pic:VGA 显示控制、图像显示和测试相关模块。 hdmi_ctrl、encode、par_to_ser、ddio_out:HDMI 编码、控制、并串转换和输出相关模块。
开发板验证
工程支持 DE10-Nano 开发板验证,已配置 Quartus 管脚约束与时钟约束,包含 vgaHdmi.qsf、vgaHdmi.sdc 以及 VGA/HDMI 相关引脚分配内容,可用于在 DE10-Nano 平台上进行编译、下载和显示测试。 验证内容围绕 FPGA 输出视频时序与 HDMI/VGA 显示链路展开,开关输入用于控制 RGB 三个颜色通道,便于在开发板上快速观察红、绿、蓝通道输出是否正常。工程中同时包含开发板实物运行图片,可作为下载前确认板级适配情况的参考。
演示视频
提供工程演示视频,可查看 DE10-Nano 平台上视频输出和颜色通道显示效果,适合下载前了解实际运行状态。
演示视频请关注公众号后获取对应资料查看。
仿真图/仿真说明/设计文档图片
设计文档内容包含工程文件、程序文件、程序编译、RTL 图和管脚分配说明,可辅助了解工程结构、编译流程与硬件引脚连接。工程中还包含 vgaHdmi_TB.v、仿真脚本和波形配置文件,可用于对 vgaHdmi 显示时序模块进行仿真参考。
部分代码
以下展示顶层模块vgaHdmi的部分代码,完整代码可关注下方公众号卡片获取。
module vgaHdmi( // **input** input clock, clock50, reset, input switchR, switchG, switchB, // **output** output reg hsync, vsync, output reg dataEnable, output reg vgaClock, output [23:0] RGBchannel ); reg [9:0]pixelH, pixelV; // estado interno de pixeles del modulo initial begin hsync = 1; vsync = 1; pixelH = 0; pixelV = 0; dataEnable = 0; vgaClock = 0; end // Manejo de Pixeles y Sincronizacion always @(posedge clock or posedge reset) begin if(reset) begin hsync <= 1; vsync <= 1; pixelH <= 0; pixelV <= 0; end else begin // Display Horizontal if(pixelH==0 && pixelV!=524) begin pixelH<=pixelH+1'b1; pixelV<=pixelV+1'b1; end else if(pixelH==0 && pixelV==524) begin pixelH <= pixelH + 1'b1; pixelV <= 0; // pixel 525 end else if(pixelH<=640) pixelH <= pixelH + 1'b1; // Front Porch else if(pixelH<=656) pixelH <= pixelH + 1'b1; // Sync Pulse else if(pixelH<=752) begin pixelH <= pixelH + 1'b1; hsync <= 0; end // Back Porch else if(pixelH<799) begin pixelH <= pixelH+1'b1; hsync <= 1; end else pixelH<=0; // pixel 800 // Manejo Senal Vertical // Sync Pulse if(pixelV == 491 || pixelV == 492) vsync <= 0; else vsync <= 1; end end // dataEnable signal always @(posedge clock or posedge reset) begin if(reset) dataEnable<= 0; else begin if(pixelH >= 0 && pixelH <640 && pixelV >= 0 && pixelV < 480) dataEnable <= 1; else dataEnable <= 0; end end // VGA pixeClock signal // Los clocks no deben manejar salidas directas, se debe usar un truco initial vgaClock = 0; always @(posedge clock50 or posedge reset) begin if(reset) vgaClock <= 0; else vgaClock <= ~vgaClock; end // ************************************************************** // Screen colors using de10nano switches for test assign RGBchannel[23:16] = (switchR)? 8'd255 : 8'd0; assign RGBchannel [15:8] = (switchG)? 8'd255 : 8'd0; assign RGBchannel [7:0] = (switchB)? 8'd255 : 8'd0; endmodule
代码获取:点击下方公众号卡片