基于VHDL语言的VGA程序
- 格式:doc
- 大小:32.00 KB
- 文档页数:3
基于FPGA的VGA显示(后附VHDL代码)整个VGA的时序操作很简单,就是形成一个具有一定占空比的电平周期。
只是整个VGA的操作涉及到一些专有名词,理解上比较困难,一旦明白了这些是什么意思后,操作即将变得很简单。
VGA工作流程:常见的彩色显示器,一般由CRT (阴极射线管)构成,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描或隔行扫描的方式实现图像显示,由VGA控制模块产生的水平同步信号和垂直同步信号控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。
扫描从屏幕的左上方开始,由左至右,由上到下,逐行进行扫描,每扫完一行,电子束回到屏幕下一行的起始位置,在回扫期间,CRT对电子束进行消隐,每行结束是用行同步信号HS进行行同步;扫描完所有行,再由场同步信号VS进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。
行同步信号HS 和场同步信号VS是两个重要的信号。
注意点:什么时候消隐?为什么要消隐?当一行扫描完毕后然后电子枪又转到下一行的这段时间或是扫描完所有的行后电子枪回到第一行的这段时间,这两段时间都要消隐。
在消隐的时间内,数据是无效的。
这样就保证电子枪的回扫的个动作不干扰显示,因为回扫这个动作是很频繁的,若在这个时间段内数据有效,那么就回在显示屏上出现电子枪回扫的轨迹。
消隐的时候我们干什么?消隐这个动作是显示屏(CRT)执行的,我们在编程时只要注意有这么个东西就行。
同步信号(包括HS和VS)是什么?这个就相当于一个数据起始信号,表明数据马上就要开始了。
如果撇开具体的设备,那么这个信号和AD、DA中常用的Sync(同步)、CS(片选)信号相当。
该信号一般为负电平,但对于有的显示器可不关心该信号的极性,因为它内部可自动转换正负逻辑。
对于普通的VGA显示器,需要引出5个信号:R,G,B:三原色;HS:行同步信号;VS:场同步信。
基于FPGA的VGA图形控制器设计引言VGA(视频图形阵列)作为一种标准的显示接口得到广泛的应用。
利用FPGA 芯片和EDA 设计方法,可以因地制宜,根据用户的特定需要,设计出针对性强的VGA 显示控制器,不仅能够大大降低成本,还可以满足生产实践中不断变化的用户需要,产品的升级换代方便迅速。
在本设计中采用了Altera 公司的EDA 软件工具Quartus II ,并以ACEX系列FPGA 的器件为主实现硬件平台的设计。
1 基于FPGA 的VGA 图形控制器系统框图根据自顶向下的程序设计思想,采用模块化设计,我们对VGA 图形控制器进行功能分离并按层次设计。
利用VHDL 硬件描述语言逐一对每个功能模块进行描述,并逐个通过编译仿真,最后下载到硬件平台调试。
本设计的VGA 控制器主要由以下模块组成:VGA 时序控制模块、分频模块、汉字显示模块、图像控制模块、ROM读取模块等,如图1 所示。
图1 基于FPGA 的VGA 图形控制系统框图2 主要功能模块设计2. 1 VGA 时序控制模块VGA 时序控制模块是整个显示控制器的关键部分,最终的输出信号行、场同步信号必须严格按照VGA 时序标准产生相应的脉冲信号。
对于普通的VGA 显示器,其引出线共含5 个信号: G,R ,B (3 基色信号) ,HS (行同步信号) ,VS(场同步信号)。
在5个信号时序驱动时,VGA 显示器要严格遵循“VGA工业标准”,即640 Hz ×480 Hz ×60Hz 模式。
对于VGA 显示器,每个像素点的输出频率为25. 175MHz ,因此采用50MHz 的时钟信号,经过二分频模块,得到25MHz 的输入时钟脉冲。
依据VGA 时序标准,行同步信号HS ,行周期为31. 78μs ,每显示行包括800 点,其中640 点为有效显示区,160 点为行消隐区,每行有一个脉冲,该脉冲的低电平宽度为3. 81μs (即96 个脉冲) ; 场同步信号VS ,场周期为16.683ms ,每场有525 行,其中480 行为有效显示行,45 行为场消隐区,每场有一个脉冲,该脉冲的低电平宽度为63μs (2 行)。
-----------------------------------------------------------------------------------------------------***************************************************************************** ********************-- CreateDate : 2009-03-28-- ModifData : 2009-03-28-- Description : VGA Interface-- Author : Explorer01-- Version : V1.1--***************************************************************************** ********************----------------------------------------------------------------------------------------------------- VHDL library DeclarationsLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The Entity DeclarationsENTITY VGA ISPORT(RESET : IN STD_LOGIC;GCLKP1 : IN STD_LOGIC;GCLKP2 : IN STD_LOGIC;--------------------------------------- VGAR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);G : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);B : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);VS : OUT STD_LOGIC;HS : OUT STD_LOGIC);END VGA;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- The Architecture of Entity DeclarationsARCHITECTURE Behavioral OF VGA IS-- SuperVGA timing from NEC monitor manual-- Horizontal :-- ______________ _____________-- | | |-- _______________| VIDEO |_______________| VIDEO (next line) ---- ___________ _____________________ ______________________-- |_| |_|-- B C <------D-----><-E->-- <----------A---------->------ Vertical :-- ______________ _____________-- | | |-- _______________| VIDEO |_______________| VIDEO (next frame) ---- ___________ _____________________ ______________________-- |_| |_|-- P Q <------R-----><-S->-- <----------O---------->---- For VESA 800*600 @ 60Hz:-- Fh (kHz) :37.88-- A (us) :26.4-- B (us) :3.2-- C (us) :2.2-- D (us) :20.0-- E (us) :1.0---- Fv (Hz) :60.32-- O (ms) :16.579-- P (ms) :0.106-- Q (ms) :0.607-- R (ms) :15.84-- S (ms) :0.026------ Horizonal timing information:---- Mode name Pixel sync back active front whole line -- clock pulse porch time porch period -- (MHz) (us) (pix) (pix) (pix) (pix) (pix)---- VGA 800x600 60Hz 40 3.2 128 85 806 37 1056---- Vertical timing information:-- Mode name Lines line sync back active front whole frame-- Total width pulse porch time porch period-- (us) (us)(lin) (us)(lin) (us) (lin) (us)(lin) (us) (lin)---- VGA 800x600 60Hz 628 26.40 106 4 554 21 15945 604 -1* 16579 628--------------------------------------------------CONSTANT H_PIXELS : INTEGER := 640; -- 806CONSTANT H_FRONTPORCH : INTEGER := 16; -- 37CONSTANT H_SYNCTIME : INTEGER := 96; -- 128CONSTANT H_BACKPORCH : INTEGER := 48; -- 85CONSTANT H_SYNCSTART : INTEGER := H_PIXELS + H_FRONTPORCH;CONSTANT H_SYNCEND : INTEGER := H_SYNCSTART + H_SYNCTIME;CONSTANT H_PERIOD : INTEGER := H_SYNCEND + H_BACKPORCH;CONSTANT V_LINES : INTEGER := 480; -- 604CONSTANT V_FRONTPORCH : INTEGER := 11; -- -1CONSTANT V_SYNCTIME : INTEGER := 2; -- 4CONSTANT V_BACKPORCH : INTEGER := 32; -- 21CONSTANT V_SYNCSTART : INTEGER := V_LINES + V_FRONTPORCH;CONSTANT V_SYNCEND : INTEGER := V_SYNCSTART + V_SYNCTIME;CONSTANT V_PERIOD : INTEGER := V_SYNCEND + V_BACKPORCH;------------------------------------------------------------------------------------------------SIGNAL HsyncB : STD_LOGIC;SIGNAL VsyncB : STD_LOGIC;SIGNAL Hcnt : STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL Vcnt : STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL Enable : STD_LOGIC;SIGNAL TempR : STD_LOGIC;SIGNAL TempG : STD_LOGIC;SIGNAL TempB : STD_LOGIC;SIGNAL ColorR : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL ColorG : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL ColorB : STD_LOGIC_VECTOR(3 DOWNTO 0);--------------------------------------------------Clock:SIGNAL Period1uS, Period1mS: STD_LOGIC;------------------------------------------------SIGNAL Count : STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL CLK, CLKTemp : STD_LOGIC;BEGIN---------------------------------------------------------------------------------------------------- Globle Clock AssignmentGlobleClk:PROCESS( RESET, GCLKP1, GCLKP2, Period1uS, Period1mS ) V ARIABLE Count : STD_LOGIC_VECTOR(5 DOWNTO 0); -- 1MHzV ARIABLE Count1 : STD_LOGIC_VECTOR(9 DOWNTO 0); -- 1KHzV ARIABLE Count2 : STD_LOGIC_VECTOR(9 DOWNTO 0); -- 1Hz BEGIN------------------------------------------------- 25 MHzIF( GCLKP1'EVENT AND GCLKP1='1' ) THEN CLK <= NOT CLK;END IF;-------------------------------------------------GCLKP : 50MHz--Period: 1uS (Period1uS <= GCLKP1; )IF( RESET = '0' ) THENCount := (OTHERS=>'0');ELSIF( GCLKP2'EVENT AND GCLKP2='1' ) THENIF( Count>"110000" ) THEN Count := (OTHERS=>'0'); -- 1uSELSE Count := Count + 1;END IF;END IF;Period1uS <= Count(5);-------------------------------------------------Period: 1mSIF( RESET = '0' ) THENCount1 := (OTHERS=>'0');ELSIF( Period1uS'EVENT AND Period1uS='1' ) THENIF( Count1>"1111100110" ) THEN Count1 := (OTHERS=>'0'); -- 1uSELSE Count1 := Count1 + 1;END IF;END IF;Period1mS <= Count1(9);-------------------------------------------------Period: 1SIF( RESET = '0' ) THENCount2 := (OTHERS=>'0');ELSIF( Period1mS'EVENT AND Period1mS='1' ) THENIF( Count2>"1111100110" ) THEN Count2 := (OTHERS=>'0'); -- 1uSELSE Count2 := Count2 + 1;END IF;END IF;-- 2 HzCLKTemp <= Count2(8);END PROCESS;--================================================================= ===============================-- VGA Clock process---------------------------------------------------------------------------------------------------- Horizontal counterPROCESS( RESET, CLK )BEGINIF( RESET='0' ) THEN Hcnt <= (OTHERS=>'0');ELSIF( CLK'EVENT AND CLK='1' ) THENIF( Hcnt<H_PERIOD ) THEN Hcnt <= Hcnt + 1;ELSE Hcnt <= (OTHERS=>'0');END IF;END IF;END PROCESS;-------------------------------------------------- Vertical counterPROCESS( RESET, HsyncB )BEGINIF( RESET='0' ) THEN Vcnt <= (OTHERS=>'0');ELSIF( HsyncB'EVENT AND HsyncB='1' ) THENIF( Vcnt<V_PERIOD ) THEN Vcnt <= Vcnt + 1;ELSE Vcnt <= (OTHERS=>'0');END IF;END IF;END PROCESS;-------------------------------------------------------------------------------------------------- Horizontal SyncPROCESS( RESET, CLK )BEGINIF( RESET='0' ) THEN HsyncB <= '1';ELSIF( CLK'EVENT AND CLK='1' ) THENIF( Hcnt>=(H_PIXELS + H_FRONTPORCH) AND Hcnt<(H_PIXELS + H_FRONTPORCH + H_SYNCTIME) ) THENHsyncB <= '0';ELSEHsyncB <= '1';END IF;END IF;END PROCESS;-------------------------------------------------- Vertical SyncPROCESS( RESET, HsyncB )BEGINIF( RESET='0' ) THEN VsyncB <= '1';ELSIF( HsyncB'EVENT AND HsyncB='1' ) THENIF( Vcnt>=(V_LINES + V_FRONTPORCH) AND Vcnt<(V_LINES + V_FRONTPORCH + V_SYNCTIME) ) THENVsyncB <= '0';ELSEVsyncB <= '1';END IF;END IF;END PROCESS;HS <= HsyncB;VS <= VsyncB;--==============================================--------------------------------------------------PROCESS( RESET, CLK, Hcnt, Vcnt )BEGINIF( CLK'EVENT AND CLK='1' ) THENIF ( RESET='0' ) THEN Enable <= '0';ELSIF( Hcnt>=H_PIXELS OR Vcnt>=V_LINES ) THEN Enable <= '0';ELSE Enable <= '1';END IF;END IF;END PROCESS;--------------------------------------------------PROCESS( RESET, CLKTemp, Hcnt, Vcnt, Enable, TempR, TempG, TempB, Count ) -- V ARIABLE Count : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF ( RESET='0' ) THEN Count <= "000";ELSIF( CLKTemp'EVENT AND CLKTemp='1' ) THEN Count <= Count + 1;END IF;------------------------------------------------CASE Hcnt(7 DOWNTO 5) ISWHEN "000" => TempR <= '1'; TempG <= '1'; TempB <= '1';WHEN "001" => TempR <= '0'; TempG <= '0'; TempB <= '0';WHEN "010" => TempR <= '1'; TempG <= '0'; TempB <= '0';WHEN "011" => TempR <= '0'; TempG <= '0'; TempB <= '1';WHEN "100" => TempR <= '0'; TempG <= '1'; TempB <= '0';WHEN "101" => TempR <= '1'; TempG <= '0'; TempB <= '1';WHEN "110" => TempR <= '1'; TempG <= '1'; TempB <= '0';WHEN "111" => TempR <= '1'; TempG <= '1'; TempB <= '1';WHEN OTHERS=> TempR <= '0'; TempG <= '0'; TempB <= '0';END CASE;IF( Enable='1' ) THENIF( TempR='1' ) THEN R <= Count & '1';ELSE R <= (OTHERS=>'0');END IF;IF( TempG='1' ) THEN G <= '1' & Count;ELSE G <= (OTHERS=>'0');END IF;IF( TempB='1' ) THEN B <= '1' & Count(0) & Count(1) & Count(2);ELSE B <= (OTHERS=>'0');END IF;ELSER <= (OTHERS=>'0');G <= (OTHERS=>'0');B <= (OTHERS=>'0');END IF;END PROCESS;--------------------------------------------------------------------------------------------------END Behavioral;。
河南城建学院EDA 技术课程设计课题:VGA彩条信号显示控制器的设计系别:电气与信息工程学院河南城建学院20XX年6月28日成绩评定·一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
成绩:(折合等级)指导教师签字年月日本设计是用 FPGA 来实现 VGA 图像控制器,控制显示器显示彩条信号,用VHDL语言,在QuartusII上实现软件仿真。
本文首先介绍了VGA显示的基本原理,然后提出了一种VGA图像控制器的设计方案,并用VHDL硬件描述语言和原理图输入的方法完成了该方案的设计,通过显示横彩条、竖彩条、棋盘格,验证了VGA_SYNC同步信号功能模块时序的正确性,软件实验环境为 Quartus II 6.0 开发软件。
本系统尝试用FPGA实现 VGA图像显示控制器,这一过程通过编程实现,之后通过软件的测试和仿真,当软件验证无误后完成硬件的下载验证,最终在显示器上实现输出,基本原理就是利用FPGA的可编程原理和VGA的时序控制原理,这在产品开发设计中有许多实际应用。
例如显示器,电视等的维修,可以期望采用FPGA设计的VGA接口可以将要显示的数据直接送到显示器,就可以可靠的找到故障的大致原因等。
从而省掉每次都要接信号源的麻烦,同时也节约了成本。
节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。
同时亦可将其作为信号源,应用于电视机或计算机等彩色显示器的电路开发,方便彩色显示器驱动控制电路的调试。
关键字:EDA,VHDL,VGA,Quartus II1 概述本设计采用EDA技术,通过CPLD芯片实现了实现VGA彩条信号的显示的设计,本文采用VHDL 硬件描述语言描述VGA彩条信号的显示电路,完成对电路的功能仿真。
通过按键来实现横彩条、竖彩条、棋盘式方格图案的选择,并能进一步设计出文字、图像的显示。
与传统的设计方式相比,本设计由于采用了CPLD 芯片来实现,它将大量的电路功能集成到一个芯片中,并且可以由用户自行设计逻辑功能,提高了系统的集成度和可靠性。
顶层设计图COLOR模块VHDL语言编码:LIBRARY IEEE; -- 显示器彩条发生器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COLOR ISPORT ( CLK, MD : IN STD_LOGIC; --MD接模式选择按键HS, VS, R, G, B : OUT STD_LOGIC ); -- 行场同步/红,绿,蓝END COLOR;ARCHITECTURE behav OF COLOR ISSIGNAL HS1,VS1,FCLK,CCLK : STD_LOGIC;SIGNAL MMD : STD_LOGIC_VECTOR(1 DOWNTO 0);-- 方式选择SIGNAL FS : STD_LOGIC_VECTOR (3 DOWNTO 0);SIGNAL CC : STD_LOGIC_VECTOR(4 DOWNTO 0); --行同步/横彩条生成SIGNAL LL : STD_LOGIC_VECTOR(8 DOWNTO 0); --场同步/竖彩条生成SIGNAL GRBX : STD_LOGIC_VECTOR(3 DOWNTO 1);-- X横彩条SIGNAL GRBY : STD_LOGIC_VECTOR(3 DOWNTO 1);-- Y竖彩条SIGNAL GRBP : STD_LOGIC_VECTOR(3 DOWNTO 1);SIGNAL GRB : STD_LOGIC_VECTOR(3 DOWNTO 1);BEGINGRB(2) <= (GRBP(2) XOR MD) AND HS1 AND VS1;GRB(3) <= (GRBP(3) XOR MD) AND HS1 AND VS1;GRB(1) <= (GRBP(1) XOR MD) AND HS1 AND VS1;PROCESS( MD )BEGINIF MD'EVENT AND MD = '0' THENIF MMD = "10" THEN MMD <= "00";ELSE MMD <= MMD + 1; --三种模式END IF;END IF;END PROCESS;PROCESS( MMD )BEGINIF MMD = "00" THEN GRBP <= GRBX; -- 选择横彩条ELSIF MMD = "01" THEN GRBP <= GRBY; -- 选择竖彩条ELSIF MMD = "10" THEN GRBP <= GRBX XOR GRBY; --产生棋盘格ELSEGRBP <= "000";END IF;END PROCESS;PROCESS( CLK )BEGINIF CLK'EVENT AND CLK = '1' THEN -- 12MHz 13分频IF FS = 12 THEN FS <= "0000";ELSEFS <= (FS + 1);END IF;END IF;END PROCESS;FCLK <= FS(3);PROCESS( FCLK )BEGINIF FCLK'EVENT AND FCLK = '1' THENIF CC = 29 THEN CC <= "00000";ELSECC <= CC + 1;END IF;END IF;END PROCESS;CCLK <= CC(4);PROCESS( CCLK )BEGINIF CCLK'EVENT AND CCLK = '0' THENIF LL = 481 THEN LL <= "000000000";ELSELL <= LL + 1;END IF;END IF;END PROCESS;PROCESS( CC,LL )BEGINIF CC > 23 THEN HS1 <= '0'; --行同步ELSEHS1 <= '1';END IF;IF LL > 479 THEN VS1 <= '0'; --场同步ELSEVS1 <= '1';END IF;END PROCESS;PROCESS(CC, LL)BEGINIF CC < 3 THEN GRBX <= "111"; -- 横彩条ELSIF CC < 6 THEN GRBX <= "110";ELSIF CC < 9 THEN GRBX <= "101";ELSIF CC < 12 THEN GRBX <= "100";ELSIF CC < 15 THEN GRBX <= "011";ELSIF CC < 18 THEN GRBX <= "010";ELSIF CC < 21 THEN GRBX <= "001";ELSE GRBX <= "000";END IF;IF LL < 60 THEN GRBY <= "111"; -- 竖彩条ELSIF LL < 120 THEN GRBY <= "110";ELSIF LL < 180 THEN GRBY <= "101";ELSIF LL < 240 THEN GRBY <= "100";ELSIF LL < 300 THEN GRBY <= "011";ELSIF LL < 360 THEN GRBY <= "010";ELSIF LL < 420 THEN GRBY <= "001";ELSE GRBY <= "000";END IF;END PROCESS;HS <= HS1 ; VS <= VS1 ;R <= GRB(2) ;G <= GRB(3) ; B <= GRB(1); END behav;附图:竖条显示棋盘格显示。
基于FPGA的VGA图像显示控制器设计第1页一.实验简介本实验介绍了一种利用可编程逻辑器件实现VGA图像显示控制的方法,阐述了VGA 图像显示控制器中VGA显像的基本原理以及功能演示,利用可编程器件FPGA设计VGA 图像显示控制的VHDL设计方案,并在Altera公司的QuartusII软件环境下完成VGA 模块的设计。
而且给出了VGA模块的设计思路和顶层逻辑框图。
最终实现VGA图像显示控制器,VGA图像控制器是一个较大的数字系统,传统的图像显示的方法是在图像数据传输到计算机,并通过显示屏显示出在传输过程中,将图像数据的CPU需要不断的信号控制,所以造成CPU的资源浪费,系统还需要依靠计算机,从而减少了系统的灵活性。
FPGA芯片和EDA设计方法的使用,可根据用户的需求,为设计提供了有针对性的VGA显示控制器,不需要依靠计算机,它可以大大降低成本,并可以满足生产实践中不断改变的需要,产品的升级换代和方便迅速。
二.任务要求2.1课题要求设计一个VGA 图像显示控制器。
1.显示模式为640×480×60Hz 模式;2.用拨码开关控制R、G、B(每个2 位),使显示器可以显示64 种纯色;3.在显示器上显示横向彩条信号(至少6 种颜色);4.在显示器上显示纵向彩条信号(至少8 种颜色);5.在显示器上显示自行设定的图形、图像等。
2.2设计目标根据课题要求,实验中将目标进行了细化,叙述如下:1.设定4种显示模式:横彩模式、纵彩模式、纯色模式、用户模式;第2页2.拨码开关最低两位SW1~SW0控制4种模式的切换;3.拨码开关高6位SW7~SW2每两位分别控制RGB显示64种纯色;4.横向和纵向彩条均设置为8种内置的颜色;5.用户模式中分3种子模式:1)子模式1是沿固定轨迹运动模式,固定图形沿水平方向运动,行运动到边界后折回到下一行继续水平运动;2)子模式2是反弹球模式,固定图形在矩形屏幕做内直线运动,到边界后沿反射角方向反弹,周而复始;3)子模式3是受控运动模式,使用上下左右4个按键控制固定图形在屏幕内的运动方向;4)子模式间的切换由一个单独的按键进行控制,按键按下后顺序切换子模式。
VGA一、设计目的1、利用VHDL语言的描述方法进行设计完成VGA显示的系统设计;2、自行选择VGA显示模式;3、通过FPGA产生VGA Monitor的控制时序;4、通过FPGA产生彩条图形,在VGA显示器上显示;5、扩展要求:可以在拨动开关控制下,通过FPGA+VGA接口的系统在屏幕上显示不同图像。
二、设计原理1、VGA简要介绍显示绘图阵列(video graphic array,VGA)接口是LCD液晶显示设备的标准接口,大多应用在显示器与显卡之间,同时还可以用在等离子电视输入图像的模数转换上。
VGA显示输出RGB三原色信号,RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,目前在图像显示领域中应用非常广泛。
2、VGA的显示特点(1)扫描格式繁多,分辨率从320×200一直延伸到1280×102,行频15.8~70Hz,场频50~100Hz。
常见的行频有31.4Hz,37.8Hz,57.9Hz,62.5Hz 等,常见场频有50Hz,60Hz,70Hz,100Hz,16700K之分。
(2)显示器的显示方式有两种:A/N显示方式和APA显示方式,即文本显示方式和图形显示方式。
A/N方式已淘汰不用,目前微机都采用APA图形方式。
(3)VGA接口为显示器提供两类信号,一类是数据信号,一类是控制信号。
数据信号包括红(Red)、绿(Green)、蓝(Blue)信号,简称RGB信号,控制信号包括水平同步信号和垂直同步信号。
输出不同分辨率时,水平同步信号和垂直同步信号的频率也不相同。
3、VGA显示原理常见的彩色显示器一般由CRT(阴极射线管)构成,彩色是由R(红)、G(绿)、B(蓝)三种基色组成。
显示是采用逐行扫描的方式,阴极射线枪发出的电子束打在涂有荧光粉的荧光屏上,产生RGB三色基,最后合成一个彩色图像。
本科毕业论文(设计)论文题目:基于FPGA的VGA显示设计及仿真实现姓名:XXX学号:XXX班级:XXX年级:XXX专业:通信工程学院:信息工程学院指导教师:XXX完成时间:XXXX 年X月XX 日作者声明本毕业论文(设计)是在导师的指导下由本人独立撰写完成的,没有剽窃、抄袭、造假等违反道德、学术规范和其他侵权行为。
对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
因本毕业论文(设计)引起的法律结果完全由本人承担。
毕业论文(设计)成果归XXX所有。
特此声明。
作者专业:作者学号:作者签名:年月日基于FPGA的VGA显示设计及仿真实现XXXThe Design and Implementation of the VGA display based on FPGAXXXX 年X月XX 日摘要本文简述了VGA显示的特点和工作原理,重点介绍了采用自顶向下层次化、模块化的设计方法,在FPGA上实现VGA的显示设计。
显示绘图阵列(video graphic array,VGA)接口是LCD液晶显示设备的标准接口,VGA具有分辨率高、显示速率快、颜色丰富等优点。
显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备。
在FPGA的设计中可以使用很少的资源,就产生VGA各种信号,再加上VHDL语言灵活的描述方法以及与硬件无关的特点,使得使用VHDL语言基于FPGA芯片实现VGA 显示控制成为研究的方向。
本文对基于VHDL的VGA的显示控制进行了研究,并设计了VGA显示器彩条信号发生器。
所做的主要工作为:(1)在设计中采用了自顶向下的层次化、模块化的设计思想,将整个接口划分为多个模块,利用VHDL语言的描述方法进行了各个功能模块的设计,最终完成了VGA显示的系统设计。
(2)运用ISE软件进行仿真。
关键词:VHDL;VGA;ISE;彩条信号AbstractThis paper briefly describes the characteristics and working principle of VGA display, focus on using the top-down hierarchical and modular design method, realization of VGA display design on FPGA.Display graphics array (video graphic array, VGA) interface is a standard interface LCD liquid crystal display device, VGA with high resolution, fast display rate, color rich, etc. Display output because of its large amount of information, the output forms characteristics has become the most commonly used output device design now.In the design of FPGA can use less resources, and produce VGA signals, flexible coupled with VHDL language description method and has nothing to do with the hardware characteristics, make use of VHDL language based on the FPGA chip to realize VGA display control become the direction of research.In this paper, based on VHDL VGA display control is studied, and VGA display color bar signal generator is designed. The main work done as follows:(1)In the design USES the top-down hierarchical, modular design thought, will the whole interface is divided into several modules, use of VHDL language description method for the design of each functional module, finally completed the VGA display system design.(2) Using ISE software simulation.Keywords: VHDL ;VGA; ISE; Color bar signal目录1 概述............................................................................................................ - 1 -1.1 本选题研究的目的及意义......................................................................................... - 1 -1.2 本选题国内外研究状况综述 (2)1.3 本选题研究的主要内容............................................................................................. - 1 -2 VGA显示的理论研究 (4)2.1 VGA显示特点 (4)2.2 VGA显示原理 (4)3 ISE工具概述 ................................................................................................ - 7 -3.1 硬件描述语言............................................................................................................. - 7 -3.2 ISE使用方法............................................................................................................. - 13 -4 VGA显示的设计与仿真............................................................................ - 17 -4.1 模块结构设计........................................................................................................... - 17 -4.2 VHDL代码设计............................................................................. 错误!未定义书签。
VHDL实现VGA接口设计1、输入信号clk : 时钟(每个象素点的显示时钟)reset : 复位信号2、输出信号vga_hs_control : 行同步vga_vs_control : 场同步 ;vga_read_dispaly : 红vga_green_dispaly : 绿vga_blue_dispaly : 蓝3、技术参数clk : 24M hs : 30KHZ vs : 57.14HZ设计原理VGA( 视频图形阵列 ) 作为一种标准的显示接口得到广泛的应用 , 一般有专用芯片,本实验采用FPGA( 现场可编程门阵列 ) 设计 VGA 接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。
显示适配器有多种形式,它可按照所符合的视频显示标准来分类,业界制定了多种显示标准,从最初的 MDA 经历了 CGA , EGA , VGA , XGA,SVGA 等的发展过程。
与相应的显示适配器标准相配的显示器也称之为 EGA ,VGA , XGA 显示器等。
实际上显示器的标准主要反映在它们的接口,显示功能和行,场工作频率上。
CRT 显示器的扫描方式Array(1)当栅扫描方式从上向下依次顺序扫描完一场称逐行扫描。
一行用行频控制( hs ) ,一场用场频控制( vs )。
扫完一行回来叫行消隐,扫完一场回来叫场消隐(2)随机扫描方式VGA 接口标准时钟频率: 25 . 175 MHz( 像素输出的频率 ) ;行频: 31. 469 Hz设计 VGA设计 VGA 图像显示控制需要注意两个问题 L2] :一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;另一个是 VGA 信号的电平驱动。
显示控制器设计提示:显示器技术规格提供的行频一般在 30 kHz 45 kHz( 保守数据 ) ,场频一般在 50 Hz ~ 75 Hz( 保守数据 ) 。
library ieee;
use ieee.std_logic_1164.all;
entity vgactr is
port( c lk:in std_logic;
rst:in std_logic;
red:out std_logic;
green:out std_logic;
blue:out std_logic;
H_Sync:out std_logic;
V_Sync:out std_logic);
end vgactr;
architecture behavioral of vgactr is
signal cnt_H:integer range 0 to 799;
signal cnt_V:integer range 0 to 520;
signal clk_H:std_logic:='0';
signal clk_V:std_logic:='0';
signal colorbuf:std_logic_vector(0 to 2);
begin
red<=colorbuf(0);
green<=colorbuf(1);
blue<=colorbuf(2);
--50MHz分频为25MHz,作为水平扫描信号的时钟process(clk)
variable n:integer range 0 to 1;
begin
if rising_edge(clk)then
clk_H<=not clk_H;
end if;
end process;
--水平扫描计数,并产生竖直扫描计数的时钟
process(clk_H,Rst)
begin
if rst='1' then
cnt_H<=0;
clk_V<='1';
elsif rising_edge(clk_H)then
if cnt_H=799 then
cnt_H<=cnt_H+1;
end if;
if cnt_H<=399 then
clk_V<='1';
else
clk_V<='0';
end if;
end if;
end process;
--竖直扫描计数
process(clk_V,rst)
begin
if rst='1' then
cnt_V<=0;
elsif rising_edge(clk_V)then
if cnt_V=520 then
cnt_V<=0;
else
cnt_V<=cnt_V+1;
end if;
end if;
end process;
--产生水平扫描信号和竖直扫描信号process(clk,rst)
begin
if rst='1' then
H_Sync<='0';
V_Sync<='0';
elsif rising_edge(clk) then
if cnt_H<=95 then
H_Sync<='0';
else
H_Sync<='1';
end if;
if cnt_V=1 then
V_Sync<='0';
else
V_Sync<='1';
end if;
end if;
end process;
--输出颜色控制
process(clk,rst)
begin
if rst='1' then
colorbuf<="000";
elsif rising_edge(clk) then
case cnt_H is
when 144 to 223 =>colorbuf<="000";
when 224 to 303 =>colorbuf<="001";
when 304 to 383 =>colorbuf<="010";
when 384 to 463 =>colorbuf<="011";
when 464 to 543 =>colorbuf<="100";
when 544 to 623 =>colorbuf<="101";
when 624 to 703 =>colorbuf<="110";
when 704 to 784 =>colorbuf<="111";
when others=>colorbuf<="000";
end case;
end if;
end process;
end;。