当前位置:文档之家› vga图像显示控制

vga图像显示控制

VGA图像显示控制器一、摘要和关键词摘要:VGA显示屏显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。

扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。

通过控制扫描计数器不同值时对RGB三原色信号的控制,来完成显示设计。

关键词:行列扫描行列同步RGB三原色控制二、设计任务要求实验目的1. 熟练掌握VHDL 语言和QuartusII 软件的使用;2. 理解状态机的工作原理和设计方法;3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法;4. 熟悉VGA 接口协议规范。

实验要求:设计一个VGA 图像显示控制器,达到如下功能:显示模式为640×480×60HZ 模式;用拨码开关控制R、G、B(每个2 位),使显示器可以显示64种纯色;在显示器上显示横向彩条信号(至少6 种颜色);在显示器上显示纵向彩条信号(至少8 种颜色);在显示器上显示自行设定的图形、图像等。

选做:自拟其它功能。

三、实验原理1、显示控制原理常见的彩色显示器一般由阴极射线管(CRT)构成,彩色由GRB(Green Red Blue)基色组成。

显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光屏上,产生GRB基色,合成一个彩色像素。

扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT、对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。

VGA显示控制器控制CRT显示图象的过程如图1所示2、VGA时序信号计算机内部以数字方式生成的显示图像信息,被显卡中的数字/模拟转换器转变为R、G、B 三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。

对于模拟显示设备,如模拟CRT 显示器,信号被直接送到相应的处理电路,驱动控制显像管生成图像。

设计VGA 控制器的关键是产生符合VGA 接口协议规定的行同步和场同步信号,它们的时序关系如下图所示:h_sync:水平同步信号(负脉冲),每个水平扫描周期显示器刷新一行;v_sync:垂直同步信号(负脉冲),每个垂直扫描周期显示器刷新一帧;行同步信号(HS ) 场同步信号(VS ) 时序名称 时钟数(像素数)时序名称 行数 前沿 16 前沿 10 行同步 96 场同步 2 数据 640 数据 480 后沿 48 后沿 33 总像素数800总行数525按照每秒60帧的刷新速度来计算,所需要的时钟频率为: 频率=60H z(帧数)×525(行)×800(每一行像素数)=25.2MHz 所以我们通过开发系统的50MHz 时钟资源,通过时钟分频产生25MHz 的频率即可。

虽然没有达到精确的25.2MHz 的时钟频率(刷新率可能会是59Hz),但是并不会造成影响。

3、VGA 显示器的工作过程以屏幕左上角的那个像素作为原点(1,1)。

当显示器接收到控制器输出的v_sync 信号,则开始一个新的垂直刷新循环,同时控制器输出h_sync 信号。

当经过P+Q=1.084ms 的时间后,准备开始水平刷新循环,当h_sync 信号的下降沿到来时,即开始刷新第一行(行数加1)。

再经过B+C = 5.66s 的时间后,开始刷新第一行的第一个像素(列数加1),并按照所需的时钟频率,刷新此行中其余像素。

直到显示器接收到下一个h_sync 信号,又开始刷新第二行。

重复此过程,直到刷新到屏幕的底部。

当刷新了最下面一行的最后一个像素后,显示器即完成了一帧的刷新,控制器又输出v_sync 信号,显示器又开始一个新的垂直刷新循环。

四、系统设计(包括设计思路、总体框图、分块设计)总体设计思路:VGA 显示器的控制器可划分为3个子模块: I .时钟分频子模块;II .时序控制子模块 ,提供同步信号(h_sync 和v_sync )及像素位置信息; III .生成图形子模块,接收像素位置信息,并输出颜色信息;由于系统时钟为50MHZ ,实验所需频率为25MHZ,故时钟分频模块只需在程序中通过分频语句完成;生成图形子模块由系统提供;所以重点设计的模块就是时序控制模块。

总体系统框图如下:HS系统时VS 钟 R GB分频模块 时 序 控 制 模 块 生 成 图 形 模 块 VGA 显示器拨码输入时序控制模块设计Hcnt=639 Hcnt=799Hcnt=655 Hcnt=751行同步状态机状态转移图Vcnt=479 Vcnt=524Vcnt=489Vcnt=491列同步状态机状态转移图时序控制模块流程图:显示前沿 后沿 同步 显示后沿 同步 前沿时钟触发时钟二分频当前坐标是否在显示范围内?否根据拨码开关选择像素输出模式/颜色是行坐标加1是否超过行边界?列坐标加1,行坐标归0是是否超过列边界?列坐标归0是否否五、源程序(含注释)library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity vgacode is port( sw0 : in std_logic; --拨码开关输入 sw1 : in std_logic; sw2 : in std_logic; sw3 : in std_logic; sw4 : in std_logic; sw5 : in std_logic;sw6 : in std_logic;sw7 : in std_logic;clk : in std_logic; --系统时钟输入hsync : out std_logic;--输出行同步、列同步以及R.G.B信号vsync : out std_logic;rdata : out std_logic;gdata : out std_logic;bdata : out std_logic;lrdata : out std_logic;lgdata : out std_logic;lbdata : out std_logic);end vgacode;architecture behave of vgacode is-- horizontal timing signalsconstant h_data: integer:=640; --VGA时序中几个关键数据constant h_front: integer:=16;constant h_back: integer:=48;constant h_sync: integer:=96;constant h_period: integer:= h_sync + h_data + h_front + h_back; --800-- vertical timing signalsconstant v_data: integer:=480;constant v_front: integer:=10;constant v_back: integer:=33;constant v_sync: integer:=2;constant v_period: integer:= v_sync + v_data + v_front + v_back; --525signal henable, venable : std_logic;signal clk25M : std_logic;signal hcnt: std_logic_vector(9 downto 0); -- horizontal pixel counter signal vcnt: std_logic_vector(9 downto 0); -- vertical line counter beginprocess(clk)beginif clk'event and clk = '1' then --由系统时钟分频得到25MHZ的频率信号clk25M <= not clk25M;end if;end process;process(clk25M) ---行扫描beginif (clk25M'event and clk25M = '1') thenif hcnt < h_period thenhcnt <= hcnt + 1;elsehcnt <= (others => '0');end if;end if;end process;process(clk25M) --行同步beginif (clk25M'event and clk25M = '1') thenif (hcnt >= (h_data + h_front)and hcnt < (h_data + h_sync + h_front)) thenhsync <= '0';elsehsync <= '1';end if;end if;end process;process(clk25M) --列扫描beginif (clk25M'event and clk25M = '1') thenif hcnt = (h_data + h_sync + h_front) thenif vcnt < v_period thenvcnt <= vcnt + 1;elsevcnt <= (others => '0');end if;end if;end if;end process;process(clk25M) --列同步beginif (clk25M'event and clk25M = '1') thenif (vcnt >= (v_data + v_front)and vcnt < (v_data + v_sync + v_front)) thenvsync <= '0';elsevsync <= '1';end if;end if;end process;process(clk25M) --行显示beginif (clk25M'event and clk25M = '1') thenif hcnt < h_data thenhenable <= '1';elsehenable <= '0';end if;end if;end process;process(clk25M) --列显示beginif (clk25M'event and clk25M = '1') thenif vcnt < v_data thenvenable <= '1';elsevenable <= '0';end if;end if;end process;process(clk25M,henable,venable) --几种显示模式beginif (clk25M'event and clk25M = '1') thenif(henable='1' and venable='1') thenif sw0 = '0' and sw1 = '0' then --64 color rdata <= sw7 ;gdata <= sw5 ;bdata <= sw3 ;lrdata <= sw6;lgdata <= sw4 ;lbdata <= sw2 ;else if sw1 = '0' and sw0 = '1' then --竖条纹rdata <= hcnt(9);gdata <= hcnt(8);bdata <= hcnt(7);lrdata <= hcnt(6);lgdata <= hcnt(5);lbdata <= hcnt(4);else if sw1 = '1' and sw0 = '0' then --横条纹rdata <= vcnt(9);gdata <= vcnt(8);bdata <= vcnt(7);lrdata <= vcnt(6);lgdata <= vcnt(5);lbdata <= vcnt(4);else if sw1 = '1' and sw0 = '1' then --棋盘显示if ( henable = '1' and venable = '1' ) thenif ( hcnt(4) = '0' and hcnt(3) = '0' and hcnt(2) ='0'and hcnt(1) = '0' and hcnt(0) = '0' )or (vcnt(4) = '0' and vcnt(3) ='0' and vcnt(2) ='0'and vcnt(1) = '0' and vcnt(0) = '0' ) thenlrdata <= '0';lgdata <= '0';lbdata <= '0';rdata <= '0';gdata <= '0';bdata <= '0';else lrdata <= '1';lgdata <= '1' ;lbdata <= '0' ;rdata <= '1' ;gdata <= '0' ;bdata <= '0' ;end if;end if;end if;end if;end if;end if;end if;end process;end behave;六、实验器材1.计算机;2. VGA显示器;3.直流稳压电源;4.EDA 开发板及相应元器件七、功能说明本实验实现的功能时通过拨码开关控制显示器的图像显示。

相关主题