1 / 17
文档名称:

基于FPGA进行VGA控制器设置实现显示器条纹显示.doc

格式:doc   大小:4,801KB   页数:17页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于FPGA进行VGA控制器设置实现显示器条纹显示.doc

上传人:tanfengdao 2019/1/31 文件大小:4.69 MB

下载得到文件列表

基于FPGA进行VGA控制器设置实现显示器条纹显示.doc

文档介绍

文档介绍:实验目的与要求:VGA控制器设计实现显示器条纹显示要求:通过FPGA板的VGA接口在显示器上显示一幅640*480由六条不同颜色的条纹组成的图像。实验内容:VGA简介VGA彩色显示器,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描方式实现图像显示,由VGA控制模块产生的水平同步信号(HS)和垂直同步信号(VS)控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。扫描从屏幕的左上方开始,由左至右,由上到下,逐行进行扫描,每扫完一行,电子束回到屏幕下一行的起始位置,在回扫期间,CRT对电子束进行消隐,每行结束是用行同步信号HS进行行同步;扫描完所有行,再由场同步信号VS进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。显示需要R,G,B,Hsync(行同步),Vsync(帧同步)五个信号输出到显示器,本设计按照VGA工业标准输出640*******@:图1VGA接口信号基本时序图图2FPGA板上的VGA接口图3VGA(640*******@60Hz)时序图VGA显示的设计模块为:说明:设计中FPGA板的VGA接口将R,G,B分别设为定义为2位,3位,3位,例如显示红色RGB可以输出为11000000,绿色输出为00111000,*******@60Hz模式下VGA的时序规格说明像素时钟配置为25Mhz。编写代码时,需要用到的常数参考表一。输出到显示器上的条纹为从上到下依次为RGBRGB(640*80)。本实验使用FPGA板:Sparant3EXC3S500E(建project时,需要选择板的型号)。实验方法、步骤:1、基本设计思想如下图所示:分为这四个模块,产生Hsync(行同步),Vsync(帧同步)以及RGB色彩的输出。2、具体设计VHDL代码libraryIEEE;;;;entitymainisport(clk,rst:instd_logic; Vsync,Hsync:outstd_logic; data:outstd_logic_vector(7downto0) );endmain;is---------DCM分频模块,输出25M时钟port(CLKIN_IN:instd_logic;RST_IN:instd_logic;CLKFX_OUT:outstd_logic;----输出时钟CLKIN_IBUFG_OUT:outstd_logic;LOCKED_OUT:outstd_logic);ponent;signaldiv_25m,Nrst:std_logic;signalVsys_20b:std_logic_vector(19downto0);signalHsys_10b:std_logic_vector(9downto0);signaldata_Vsend,data_Hsend:std_logic;signalScan_16b:std_logic_vector(15downto0);signalScan_clc:std_logic;signaldata_sel:std_logic_vector(1downto0);begindiv:dcnportmap(clk,Nrst,div_25m,open,open);---分频模块 Nrst<=notrst; process(div_25m,rst) begin ifrst='0'then Vsys_20b<="00000000000000000000"; elsifdiv_25m'eventanddiv_25m='1'then Vsys_20b<=Vsys_20b+1; ifVsys_20b=416799then Vsys_20b<="00000000000000000000"; endif; endif; endprocess; process(div_25m,rst,Vsys_20b) begin ifrst='0'then Vsync<='1';data_Vsend<='0'; elsifdiv_25m'eventanddiv_25m='1'then ifVsys_20b<8000then Vsync<='1';data_Vsend<='0'; elsifVsys_20b>=8000andVsys_20b<9600then Vsync<='0';data_Vsend<='0'; elsifVsys_20b>=9600andVsys_20b<32800then--128*255+1