图像增强 VGA HDMI 显示控制 Verilog Quartus
名称图像增强 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 配置和外设信号连接。 vgaHdmiVGA/HDMI 视频时序与 RGB 测试输出模块产生 hsync、vsync、dataEnable、vgaClock 和 RGBchannel。 I2C_Controller、I2C_WRITE_WDATA、I2C_HDMI_ConfigHDMI 相关 I2C 配置模块用于完成 HDMI 芯片初始化写入控制。 pll_25、pll_25_0002PLL 时钟模块为显示链路提供所需像素时钟。 image_brightness、image_contrast、image_gray、image_pro、data_choose图像增强与数据选择模块用于亮度、对比度、灰度及图像处理结果切换。 vga_ctrl、vga_pic、vga_disp、tb_vga_picVGA 显示控制、图像显示和测试相关模块。 hdmi_ctrl、encode、par_to_ser、ddio_outHDMI 编码、控制、并串转换和输出相关模块。开发板验证工程支持 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(pixelH0 pixelV!524) begin pixelHpixelH1b1; pixelVpixelV1b1; end else if(pixelH0 pixelV524) begin pixelH pixelH 1b1; pixelV 0; // pixel 525 end else if(pixelH640) pixelH pixelH 1b1; // Front Porch else if(pixelH656) pixelH pixelH 1b1; // Sync Pulse else if(pixelH752) begin pixelH pixelH 1b1; hsync 0; end // Back Porch else if(pixelH799) begin pixelH pixelH1b1; hsync 1; end else pixelH0; // 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)? 8d255 : 8d0; assign RGBchannel [15:8] (switchG)? 8d255 : 8d0; assign RGBchannel [7:0] (switchB)? 8d255 : 8d0; endmodule代码获取点击下方公众号卡片