//module : VGA_controller.v
module VGA_controller(
// Host Side
iRed,
iGreen,
iBlue,
oAddress,
busy,
// VGA Side
oVGA_R,
oVGA_G,
oVGA_B,
oVGA_H_SYNC,
oVGA_V_SYNC,
oVGA_SYNC,
oVGA_BLANK,
oVGA_CLOCK,
// Control Signal
iCLK,
iRST_N );
// Horizontal Parameter ( Pixel )
parameter H_SYNC_CYC = 120;
parameter H_SYNC_BACK = 61+3;
parameter H_SYNC_ACT = 800; // 806
parameter H_SYNC_FRONT= 53+3;
parameter H_SYNC_TOTAL= 1040;
// Virtical Parameter ( Line )
parameter V_SYNC_CYC = 6;
parameter V_SYNC_BACK = 21+2;
parameter V_SYNC_ACT = 600; // 604
parameter V_SYNC_FRONT= 35+2;
parameter V_SYNC_TOTAL= 666;
// Start Offset
parameter X_START = H_SYNC_CYC+H_SYNC_BACK;
parameter Y_START = V_SYNC_CYC+V_SYNC_BACK;
// Host Side
output reg [13:0] oAddress;
input [7:0] iRed;
input [7:0] iGreen;
input [7:0] iBlue;
input busy; //modify 2011.1.18
// VGA Side
output [9:0] oVGA_R;
output [9:0] oVGA_G;
output [9:0] oVGA_B;
output reg oVGA_H_SYNC;
output reg oVGA_V_SYNC;
output oVGA_SYNC;
output oVGA_BLANK;
output oVGA_CLOCK;
// Control Signal
input iCLK;
input iRST_N;
// Internal Registers and Wires
reg [9:0] H_Cont;
reg [9:0] V_Cont;
reg [7:0] Cur_Color_R;
reg [7:0] Cur_Color_G;
reg [7:0] Cur_Color_B;
assign oVGA_BLANK = oVGA_H_SYNC & oVGA_V_SYNC;
assign oVGA_SYNC = 1'b0;
assign oVGA_CLOCK = iCLK;
//output RGB
assign oVGA_R = (H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
?{2'b00,Cur_Color_R}:0;
assign oVGA_G = (H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
?{2'b00,Cur_Color_G}:0;
assign oVGA_B = (H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
?{2'b00,Cur_Color_B}:0;
// Pixel Address Generator
wire [9:0] posx;
wire [9:0] posy;
assign posx=H_Cont-X_START;
assign posy=V_Cont-Y_START;
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
oAddress <= 0;
end
else
begin
if( H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT && !busy) begin
oAddress <=posy*H_SYNC_ACT+posx;
end
else oAddress <= oAddress;
end
end
// Cursor Generator
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
Cur_Color_R <= 0;
Cur_Color_G <= 0;
Cur_Color_B <= 0;
end
else
begin
if( H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT&&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
begin
Cur_Color_R <= iRed;
Cur_Color_G <= iGreen;
Cur_Color_B <= iBlue;
end
else
begin
Cur_Color_R <= Cur_Color_R;
Cur_Color_G <= Cur_Color_G;
Cur_Color_B <= Cur_Color_B;
end
end
end
// H_Sync Generator, Ref. 50 MHz Clock
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
H_Cont <= 0;
oVGA_H_SYNC <= 0;
end
else
begin
// H_Sync Counter
if( H_Cont < H_SYNC_TOTAL )
H_Cont <= H_Cont+1;
else
H_Cont <= 0;
// H_Sync Generator
if( H_Cont < H_SYNC_CYC )
oVGA_H_SYNC <= 0;
else
oVGA_H_SYNC <= 1;
end
end
// V_Sync Generator, Ref. H_Sync
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
V_Cont <= 0;
oVGA_V_SYNC <= 0;
end
else
begin
// When H_Sync Re-start
if(H_Cont==0)
begin
// V_Sync Counter
if( V_Cont < V_SYNC_TOTAL )
V_Cont <= V_Cont+1;
else
V_Cont <= 0;
// V_Sync Generator
if( V_Cont < V_SYNC_CYC )
oVGA_V_SYNC <= 0;
else
oVGA_V_SYNC <= 1;
end
end
end
endmodule
温馨提示:内容为网友见解,仅供参考
基于FPGA 的 VGA 接口驱动
VGA接口驱动基于FPGA实现,核心是通过FPGA控制VGA信号,实现对显示器的高分辨率、高速度、丰富颜色显示的支持。VGA接口的特性包括不支持热插拔和不支持音频传输,其结构由15针组成,分为三排,每排五个孔,与CRT显示器兼容。色彩原理基于三基色原理,即红、绿、蓝三种基本颜色,它们相互独立,无法由其他颜...
高清VGA采集卡工作原理
VGA高清采集卡的工作原理是基于RGB模拟信号的A\/D采样,将模拟信号转换为数字信号。这个过程由FPGA负责,它将采集到的信号存储在SDRAM中作为缓存。接着,FPGA从SDRAM中读取压缩的数据,通过PCI总线将这些数据传输到上位机进行进一步处理。例如,T200AE卡支持实时同步声音录制,可以调整显示画面的拉伸或全屏模式...
基于fpga实现lvds转vga
可以。新一版FPGA实现视频转接板步骤:1、可以实现LVDS信号输入,LVDS,VGA,HNMI同时输出。2、LVDS可以是单通道或双通道,单通道最高支持1920*1080@Hz,双通道可以支持1920*1200的分辨率。
VGA视频采集卡采集原理
VGA视频采集卡的工作原理是基于RGB模拟信号的A\/D采样,将模拟信号转化为数字信号。这个过程由FPGA负责,它首先将信号写入SDRAM作为缓存。接着,FPGA从SDRAM中读取压缩的数据,通过PCI总线将这些数据传输到上位计算机。在上位机,数据会进一步处理和传输。T200AE特别支持VGA信号的实时采集,并能同步声音,画面可...
FPGA高端项目:Xilinx Zynq7020系列FPGA 多路视频缩放拼接 工程解决方案...
一、创新技术应用 基于Zynq7020的Xilinx FPGA,我们的解决方案实现了多路视频的高精度缩放(双线性插值),并以智能FDMA技术进行无缝拼接,完美兼容OV5640摄像头,支持动态彩条作为输入源。处理后的视频经精心优化,通过VGA和HDMI输出不同分辨率的实时显示。二、全面工程源码 13路视频:2路960x1080缩放拼...
VGA的显示系统
而不是指图像的屏幕刷新率,它对刷新率没有影响。嵌入式基于以上方案设计的嵌入式VGA显示系统在只有系统控制板和CRT显示器的情况下实现了嵌入式高分辨率VGA显示。通过对嵌入式VGA显示系统的设计分析和实际使用,得到如下结论:(1) 由于VGA显示是一个高速过程,所以选择器件时要选择高速器件。(2)...
...最近FPGA刚入门,因为听说硬件工程师除了掌握FPGA和DSP。
1.用PFGA控制VGA显示器,大多数开发板上自带的例子都是显示16色VGA显示器的,你可以做一个32位真彩色的制作,这个用来体现FPGA速度快再合适不过了。2.涉及信号处理的,中等级别的FPGA开发应该算视频采集了吧,买个摄像头,不要那种USB借口的,纯信号线控制的那种,随便采集个图像,拍照显示到屏幕上,存...
FPGA解码MIPI视频 OV5647 2line CSI2 720P分辨率采集 提供工程源码和技 ...
设计采用OV5647摄像头输入,通过MIPI 2线接口,输出720P分辨率视频。纯VHDL编写的CSI-2解码器支持2线或4线输入,输出AXIS数据流,转换为VGA格式的RGB888视频。使用经典的FDMA图像缓存架构,经过VGA时序发生器VTC和HDMI发送驱动,最终在显示器上输出720P分辨率的视频。vivado工程介绍 本工程基于Xilinx Kintex7...
基于FPGA的“2048”游戏综合设计
【嵌牛导读】2048游戏在网页端与移动端均可以使用,本设计将该游戏移植到了硬件平台FPGA上,使用Digilent Nexys 4 DDR 开发板,使用Xilinx Vivado 用于搭建基于MicroBlaze 软核处理器的硬件运行环境,“2048”游戏主程序和VGA 显示控制等程序的编写在Xilinx SDK 上进行。游戏必需的上、下、左、右方向控制,...
求一个fpga高速信号采集设计方案
其实基于FPGA的高速信号采集几乎都是相同的设计原理。就是先ADC采样信号,将模拟信号转换为数字信号,然后交由FPGA。而此时的FPGA需要写3个IP模块:IP核1、控制ADC自动高速转换的状态机。其作用是实现高速100M的信号采样,就是一个循环的时序控制,让ADC转换一次完成之后由FPGA读出数据并将数据交由第二个...