FPGA驱动VGA显示VHDL程序(彩条,可用)

合集下载

VGA接口课程

VGA接口课程

四川师范大学成都学院电路与电子技术课程设计VGA显示接口设计学生姓名秦谌磊学号2012101315所在学院通信工程学院专业名称通信工程班级2012级移动通信2班指导教师胡迎刚成绩四川师范大学成都学院二○一四年十二月课程设计任务书VGA显示接口设计内容摘要:本文利用现场可编程逻辑器件FPGA产生VGA时序信号和彩条图像信号,并将其作为信号源,应用于彩色等离子显示器的电路开发,方便彩色等离子显示器驱动控制电路的调试。

FPGA芯片具有可靠性高、编程灵活、体积小等优点,实验经过软硬件调试,最终在显示器上显示彩条正确图像。

利用此原理,可以设计更多的彩色图像,且可将采集的图像进行实时显示,将此作为信号源,应用于显示器电路的开发或某些嵌入式系统中,进行视频设备的调试与性能分析或系统中信号处理模块的调试与性能分析等。

关键词:FPGA VGA 显示接口VGA Interface of display of design Abstract:VGA-timing signals and color strip image were obtained by using FPGA. The signals were used as sources when developing the circuits of color plasma display panel, and it took great convenience to the debugging of the driving and controlling circuit of color plasma display panel. The FPGA chip has the advantages of high reliability, small volume, flexible programming, just because of this, the test could achieve the desired results, display screen displays color bar signals. According to this principle, we can design color image more, and make the image real-time display, such as the signal source, used in display circuit development or some embedded systems, video equipment debugging and performance analysis of the system signal processing module debugging and performance analysis.Keywords:FPGA VGA Interface of display目录前言 (1)1 VGA接口概述 (1)1.1 VGA接口 (1)1.2 VGA显示 (2)1.3 VGA信号时序 (3)1.4 VGA图形编码 (4)2 EDA概述 (5)2.1 EDA技术及其发展 (5)2.2 EDA技术开发流程 (6)2.3 Quartus II软件简介 (6)2.4硬件描述语言VHDL (7)2.5 现场可编程逻辑门阵列FPGA (7)3 设计方案 (8)3.1 总体设计框架图 (8)3.2 主模块设计 (9)3.2.1 分频模块 (9)3.2.2 VGA彩条信号产生模块 (9)4 设计实现 (10)4.1 新建工程项目 (10)4.2 选择芯片 (10)4.3 使用硬件描述语言编程 (11)4.4 锁定引脚 (11)4.5 下载 (11)5 仿真结果 (12)5.1 仿真波形 (12)5.2 下载调试 (12)6 总结 (13)附录 (14)参考文献 (17)VGA显示接口设计前言VGA(Video Graphics Array)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。

VGA显示器彩色信号发生器电路

VGA显示器彩色信号发生器电路

EDA课程设计报告—VGA显示器彩色信号发生器电路班级:08通信A班姓名:崔儒学号: 0815231013指导老师:凌朝东摘要:VGA(Video Graphic Array)接口是与显示器进行通信的唯一接口。

通过FPGA器件控制RGB信号、行同步信号、场同步信号等信号,并参照有关标准,最后可以实现对VGA显示器的控制。

本设计与传统的图像显示方法不同,为节省储存空间在设计中采用R、G、B三种基色利用FPGA芯片和EDA设计方法,可以显示8种颜色,设计出针对性强的VGA显示控制器,而且不需要依靠计算机,既能够大大降低成本,又可以满足生产实践中不断变化的需要,同时产品的升级换代也方便迅速。

本设计采用Altera公司的EDA软件0uartus II,并以Cylone 系列FPGA器件为硬件平台进行系统设计。

关键词:VGA;FPGA:VHDL;Ouartus II目录1、系统设计 (4)2、单元电路设计 (6)3、软件设计 (8)4、系统测试 (11)5、小结 (12)6、参考文献 (12)7、附录 (13)一、系统设计1、设计要求:VGA显示器彩色信号发生器电路,能在VGA显示器上显示8种颜色的图形(条型、方块型)。

2、系统设计方案:方案一:采用传统的图像显示方法,将图像数据传回电脑在传输过程中通过CPU对图像数据信号进行控制,通过显示器显示出来。

方案二:采用FPGA和EDA的设计方法,通过FPGA器件控制RGB信号、行同步信号、场同步信号等信号,并参照有关标准,最终可以实现对VGA 的控制。

方案一为传统的图像显示方法,在传输过程中需要CPU不断对图像数据信号进行控制,这样就造成了CPU的浪费,同时系统还需要依赖电脑,降低了系统的灵活性。

方案二是利用可编程器件FPGA和EDA的设计方法,可以根据设计的需要设计出针对性比较强的VGA显示器,而且不需要依靠计算机,大大降低了成本提高了系统的灵活性。

综合上诉分析本设计中采用方案二。

vga显示verilog代码

vga显示verilog代码
end
else if(ij==2'b10)
begin
xpos<=xpos-1;
ypos<=ypos+1;
if(ypos+WIDTH==480)
ij<=2'b11;
else if(xpos==1)
ij<=2''b11)
parameter LENGTH=128,WIDTH=128;
parameter V_TA=2;
parameter V_TB=25;
parameter V_TC=8;
parameter V_TD=480;
parameter V_TE=8;
parameter V_TF=2;
parameter V_BLANK=V_TA+V_TB+V_TC;
wire[4:0] iblue=q[4:0];
always @(posedge iclk_50)
begin iclk<=~iclk;end
assign ovga_blank=~((h_cont<H_BLANK)||(v_cont<V_BLANK));
assign ovga_clock=~iclk;
(* chip_pin="H21,D22,E22,E23,D23" *)output [4:0] ovga_r0;
(* chip_pin="C18,B17,A17,C16,B16" *)output [4:0] ovga_b0;
(* chip_pin="C12,A11,B11,A10" *)output [3:0] ovga_g0;

浅谈用SPATAN 3E系列开发板实现彩条信号显示

浅谈用SPATAN 3E系列开发板实现彩条信号显示

浅谈用SPATAN 3E系列开发板实现彩条信号显示作者:李琳来源:《科技创业月刊》 2013年第9期李琳(武汉职业技术学院计算机系湖北武汉 430074)摘要:以研究项目“应用FPGA实现时序彩条信号显示”为依托,描述用Xilinx公司的SPATAN3E系列的FPGA开发板进行设计,再用Xilinx公司的ISE软件编程,程序验证和综合,最后将程序下载到FPGA的开发板上,实现在LCD屏的时序横条,竖条和棋盘格信号的过程。

关键词:VGA;VHDL;分频电路中图分类号:TP311文献标识码:Adoi:10.3969/j.issn.1665-2272.2013.09.0811选题背景现如今,越来越多的数字产品开始使用液晶作为显示终端。

但基于VGA标准的显示器仍是目前普及率最高的显示器。

若驱动此类显示器,需要很高的扫描频率及较短的处理时间。

所以需要用FPGA来实现对VGA显示器的驱动。

VGA是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。

采用FPGA对显示器的VGA接口进行设计,数据流只需要在整个系统的内部流动,而不需要依靠计算机,增强了系统的可靠性和设计的灵活性。

2VHDL硬件描述语言美国国防部在20世纪80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。

1981年提出了一种新的HDL,称之为VHSICHardwareDescriptionLanguage,简称为VHDL。

在逻辑描述上,VHDL是一种高级描述语言,适合于行为级和RTL级的描述,最适于描述电路的行为。

在设计要求上,VHDL进行电子系统设计时可以不了解电路的结构细节,而把模块的逻辑关系描述出来就可以了,设计起来比较简单。

基于FPGA的VGA图像显示

基于FPGA的VGA图像显示

基于FPGA的VGA图像显示1、VGA显示原理VGA标准是一种计算机显示标准,最初是由IBM公司在1987 年提出的,分辨率是640*480。

VGA 接口也叫做D_Sub 接口,是显卡上输出模拟信号的接口。

目前大多数计算机与外部显示设备之间都是通过模拟VGA接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的D/A 转换器转变为R、G、B三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。

常见的彩色显示器一般由阴极射线管(CRT) 构成,彩色由GRB(Green Red Blue) 基色组成。

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

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

要实现VGA显示就要解决数据来源、数据存储、时序实现等问题,其中关键还是如何实现VGA时序。

VGA的标准参考显示时序如图1所示。

行时序和帧时序都需要产生同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分。

2、方案设计由VGA的显示原理可知,该任务的关键是VGA时序控制部分和汉字图形显示部分:(1)VGA时序控制部分,采用FPGA本地50MHz时钟,根据所需时序要求,经Verilog语言编写的计数模块分频而得到,该部分十分重要,如果产生的时序有偏差,那么就会使汉字图形无法显示或显示结果混乱;(2)汉字图形显示部分,有2种方法可以实现:第1 种是在对像素进行行计数、场计数的时候,就把字库信息直接赋值给颜色信号R、G、B,这种方法虽然简单,但是控制很不灵活,需要对汉字的显示像素一一判定对应的位置,容易出现错误,不易修改,所以本次采用的是第2 种方法,第2 种方法是使用FPGA内部的一种资源来存储汉字的字库信息,然后由程序将其提取出来作为显示信号发送到VGA 接口,以实现汉字图形的显示,这样就克服了第一种方法易出错又不易修改的缺点。

VGA彩条信号显示控制器设计解析

VGA彩条信号显示控制器设计解析

编号:EDA技术实训实训(论文)说明书题目:VGA彩条信号显示控制器设计院(系):信息与通信学院专业:电子信息工程学生姓名:***学号: ********** 指导教师:付强、陈小毛、归发第2013 年1 月4 日本设计采用EDA技术,通过FPGA芯片实现了实现VGA彩条信号的显示的设计,本文采用VHDL 硬件描述语言描述VGA彩条信号的显示电路,完成对电路的功能仿真。

通过按键来实现横彩条、竖彩条、棋盘式方格图案的选择。

显示图像分辨率为640×480,刷新率为60Hz。

与传统的设计方式相比,本设计由于采用了FPGA芯片来实现,它将大量的电路功能集成到一个芯片中,并且可以由用户自行设计逻辑功能,提高了系统的集成度和可靠性。

关键词:电子设计自动化、可编程门阵列、硬件描述语言、状态机This design used the EDA technology, through the FPGA chip realized the realization of the signal that striped VGA is adopted in this paper, the design of the VHDL hardware description language describe VGA striped signal display circuit and the completion of the function of the circuit simulation. By pressing buttons horizontal striped, perpendicular striped, chessboard type pane design choice. Display image resolution for 640 x 480, refresh rate of 60 Hz ac. Compared with the traditional design methods, the design with FPGA chip to achieve, it will be a lot of circuit function integration to a chip, and can be by the user to design logical function, improve the system integrity and reliability.Keywords:Electronic Design Automatic technology,Flied Programmable,Gate Array, Hardware Description Language, State Machine1. 绪论 (1)1.1 EDA技术的发展 (1)1.2 课程设计的任务 (1)2. 系统设计 (2)2.1 系统的工作原理 (2)2.2 VGA显示原理 (2)2.3 键盘驱动 (4)3 系统设计 (4)3.1图像信号产生模块的设计 (4)3.2 视频输出接口电路部分设计 (5)3.3 模式控制与显示部分设计 (6)3.4 VGA显示模块 (6)4 课程设计心得 (9)5 致谢 (10)参考文献 (11)附录 (12)附录A 总原理图 (12)附录B 实验现象 (12)附录C 引脚分布图 (14)附录D 实验程序 (14)1.绪论1.1 EDA技术的发展我们已经进入数字化和信息化的时代,其特点就是各种数字产品的广泛应用。

基于FPGA的VGA图像控制器设计与实现

基于FPGA的VGA图像控制器设计与实现
二 、设 计方 案
VA 图像 控制 器 是一 个较 大 的数字 系 统 。采用 模块 化 设计 原 G 则和 自顶 向 下的设 计思想 ,进 行功 能分 离并按 层 次设 计 。将 V D HL 硬件 描述 语言 设计 与 原理 图设 计相 结合 ,逐 一对 每个 功 能模 块进 行仿 真 ,使顶 层 V A图像 控制 器 的模块 实 体仿真 综合 得 以顺利 通 G 过 。V A 控制 器主 要 由 以下模 块组成 :消 隐模块 ,显 示模 块 ,分 G 频模 块 ,网格 生成 模块 ,汉字 显示模 块 , 图像控 制模 块 ,动 画生 成模 块 ,LMR M 用模 块 ,EP O P— O 调 E RM调用 模块 等 。 三 、模块 设计 ( )消 隐模块 一 消 隐模 块 是整个 显示 控制 器 的关 键部 分 ,显示 模 块 、汉字 模 块 、彩 条模 块 、 网格 模块 、动画控 制 模块 、L MR M 调用 模块 等 P- O 都 由消 隐模 块控 制 ,并且 行 同步信 号 (s 和场 同步 信 号 (s都 由 H) v)
Hu Yi ana nQa
( h n d stt f i u nN r l n esyCh n d 6 5 ,hn ) C e g uI tueo Sc a oma U i ri, e g u 1 4C ia ni h v t 1 7
Ab ta t DA c n lg sr c: E t h oo yn1i tec r fmo e eeto i eintc n lg , l so o ru o ue lt r i e s h oeo d m lc ncd s eh oo yir i np wef1c mp trpaf m r g te e o n
计 算机 光盘 软件 与应 用

PAL_D电视信号VHDL及VERILOG HDL程序代码

PAL_D电视信号VHDL及VERILOG HDL程序代码

PAL_D电视信号VHDL以及verilog源程序!FPGA设计PAL_D电视信号!VHDL源程序!两个程序都是黑白的video信号,输出可以直接在视频显示器上显示。

--############################################################## ###############-- File Name :TV_SIGNAL05.VHD-- Version: 1.0 Data :-- Time : 11:52-- Author : Email: htank@-- Commany:-- LOGIC CORE: TV SIGNLA module-- MODULE NAME: TV_SIGNAL04-- FUNCTIONAL DESCRIPTION :-- This module is the TV SIGNAL.---- Copyright (C)1997-2003 *****Corporation--############################################################## ###############LIBRARY ieee;USE ieee.std_logic_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TV_SIGNAL05 ISPORT(VCLK_39 : IN STD_LOGIC; --3.9mhzVCLK_165 : IN STD_LOGIC; ---16.5mhzVIDEO : OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END TV_SIGNAL05 ;ARCHITECTURE a OF TV_SIGNAL05 ISSIGNAL HRST_D : STD_LOGIC;SIGNAL HRST_B_D : STD_LOGIC;SIGNAL VRST_B_D : STD_LOGIC;SIGNAL HSYNC_L,VSYNC_L : STD_LOGIC;SIGNAL COM_VH_D,COM_VH_DD : STD_LOGIC;SIGNAL VRST_B_DD : STD_LOGIC;SIGNAL VLINE : INTEGER RANGE 0 TO 625;SIGNAL RESET : STD_LOGIC;SIGNAL COM_VH_B_D : STD_LOGIC;BEGINPROCESS (VCLK_39)VARIABLE temp : INTEGER RANGE 0 TO 31;BEGINIF (Vclk_39'EVENT AND Vclk_39= '1') THENIF TEMP>=20 THENRESET <='1';ELSERESET <='0';TEMP:= TEMP +1;END IF;END IF;END PROCESS;PROCESS (VCLK_39,reset) ----TV,VGA_TV_STVARIABLE temp_tv : INTEGER RANGE 0 TO 255;VARIABLE VLINE : INTEGER RANGE 0 TO 628; ---2003.10.20修改BEGINIF reset ='0' THEN --VGA_TV_ST='1' ORtemp_tv := 0;VLINE:= 1;ELSIF (VCLK_39'EVENT AND VCLK_39= '1') THENtemp_tv :=temp_tv + 1;IF temp_tv=252 THEN ---------0---237---238 POINT-238252temp_tv :=0;VLINE :=VLINE+ 1;END IF;IF VLINE=626 THEN-----1--617 =617VLINE:=1;END IF;IF temp_tv>=5 AND temp_tv <=22 THEN---5--22--18---------FOR HRST HRST_D<='1';-------5--22---18ELSEHRST_D <='0';END IF;IF temp_tv>=1 AND temp_tv <=52 THEN ---1--38--38------FOR HRST BANK HRST_B_D<='1';----0--51--52ELSEHRST_B_D<='0';END IF;IF VLINE>=1 AND VLINE<=23 THEN -----FOR VRST BANK--18VRST_B_D<='1';ELSIF VLINE >=311 AND VLINE <=335 THEN----21VRST_B_D<='1';ELSIF VLINE >=622 AND VLINE <=625 THEN---3 ---18+21+3=42 VRST_B_D<='1';ELSEVRST_B_D<='0';END IF;IF VLINE>=1 AND VLINE <=2 THEN --------FOR COM_VH IF temp_tv>=5 AND temp_tv<=113 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=239 THENCOM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE =3 THENIF temp_tv>=5 AND temp_tv<=113 THEN-----105---111COM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=139 THENCOM_VH_D <='1';--old-124-132---- new-131--237ELSECOM_VH_D <='0';END IF;ELSIF VLINE>=4 AND VLINE<=5 THENIF temp_tv>=5 AND temp_tv<=13 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=139 THENCOM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE>=6 AND VLINE<=310 THENIF temp_tv>=5 AND temp_tv<=22 THENCOM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE>=311 AND VLINE<=312 THENIF temp_tv>=5 AND temp_tv<=13 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=139 THENCOM_VH_D <='1';ELSEEND IF;ELSIF VLINE =313 THENIF temp_tv>=5 AND temp_tv<=13 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=239 THEN COM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE>=314 AND VLINE<=315 THENIF temp_tv>=5 AND temp_tv<=113 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=239 THEN COM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE>=316 AND VLINE<=317 THENIF temp_tv>=5 AND temp_tv<=13 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=139 THEN COM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE =318 THENIF temp_tv>=5 AND temp_tv<=13 THENCOM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE>=319 AND VLINE<=622 THENIF temp_tv>=5 AND temp_tv<=22 THENCOM_VH_D <='1';ELSECOM_VH_D <='0';END IF;ELSIF VLINE =623 THENIF temp_tv>=5 AND temp_tv<=22 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=139 THEN COM_VH_D <='1';ELSEEND IF;ELSIF VLINE>=624 AND VLINE<=625 THENIF temp_tv>=5 AND temp_tv<=13 THENCOM_VH_D <='1';ELSIF temp_tv>=131 AND temp_tv<=139 THENCOM_VH_D <='1';ELSECOM_VH_D <='0';END IF;END IF;END IF;END PROCESS;PROCESS( VCLK_39)BEGINIF VCLK_39'EVENT AND VCLK_39='1' THENCOM_VH_DD <= COM_VH_D;--COM_VH_B <=VRST_B_D OR HRST_B_D;COM_VH_B_D <=VRST_B_D OR HRST_B_D;--VRST_B <=VRST_B_D;--HRST <=HRST_D;--HRST_B <=HRST_B_D;END IF;END PROCESS;PROCESS( CLK_165)-- VARIABLE DATA_O : STD_LOGIC_VECTOR (7 DOWNTO 0);VARIABLE TTT : STD_LOGIC_VECTOR (9 DOWNTO 0);VARIABLE IMAGE : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF ( CLK_165'EVENT AND CLK_165='1') THENIF COM_VH_B_D ='1' THENIMAGE := (OTHERS=>'0');TTT := (OTHERS=>'0');VIDEO <= (NOT COM_VH_DD) & '0'&"00000000";ELSIF COM_VH_B_D ='0' THENTTT := TTT + 1;IF ( (VLINE >=24 AND VLINE <=124) or ( VLINE >=335 AND VLINE <=436 ) )THEN---2 IF TTT>=0 AND TTT <=75 THEN ---------FOR VIDEO OUTIMAGE:="00001111";-- TV_TT:=TV_TT+1;ELSIF TTT>=76 AND TTT <=150 THEN ---------FOR VIDEO OUTIMAGE:="00100000";-- TV_TT:=TV_TT+1;ELSIF TTT>=151 AND TTT <=225 THEN ---------FOR VIDEO OUT IMAGE:="00101111";-- TV_TT:=TV_TT+1;ELSIF TTT>=226 AND TTT <=300 THEN ---------FOR VIDEO OUT IMAGE:="01000000";-- TV_TT:=TV_TT+1;ELSIF TTT>=301 AND TTT <=375 THEN ---------FOR VIDEO OUT IMAGE:="01001111";-- TV_TT:=TV_TT+1;ELSIF TTT>=376 AND TTT <=450 THEN ---------FOR VIDEO OUT IMAGE:="01100000";-- TV_TT:=TV_TT+1;ELSIF TTT>=451 AND TTT <=525 THEN ---------FOR VIDEO OUT IMAGE:="01101111";-- TV_TT:=TV_TT+1;ELSIF TTT>=526 AND TTT <=600 THEN ---------FOR VIDEO OUT IMAGE:="11111111";-- TV_TT:=TV_TT+1;ELSEIMAGE:="00000000";END IF;ELSEIMAGE:=(OTHERS=>'0');END IF;VIDEO <= (NOT COM_VH_DD)&'1'&IMAGE;END IF;END IF;END PROCESS;END a;FPGA设计PAL_D电视信号!verilog源程序!verilog 版本:/*信号定义与说明:clk_66MHz:input clock with a frequency of 66MHz;clk_33MHz:division twice from clk_66MHz;clk_4MHz: division from clk_33MHz,as a matter of fact,its frequency is 4.125MHz; H_HIDE: 行消隐信号;V_HIDE: 场消隐信号;COM_HIDE:复合消隐信号;H_SYNC: 行同步信号;V_SYNC: 场同步信号;COM_SYNC:复合同步信号;Gray:扫描灰阶图像信号;front_balance,back_balance:前后均衡脉冲;Slot_ON_V_SYNC:场同步期中的槽脉冲;*/moduletv_sig_gen(clk_66MHz,clk_33MHz,clk_4MHz,H_HIDE,V_HIDE,H_SYNC,Gray,COM_HIDE,front_balance,ba ck_balance,Slot_ON_V_SYNC,V_SYNC,COM_SYNC);parameter size=4; //定义一个寄存器的大小,产生4MHz时钟用;input clk_66MHz;outputclk_33MHz,clk_4MHz,H_HIDE,V_HIDE,H_SYNC,Gray,COM_HIDE,front_balance,back_balance,Slot_ON_V _SYNC,V_SYNC,COM_SYNC;reg[size-1:0] reg_for_4MHz;reg[8:0] Counter_For_H_SYNC;reg[9:0] Hcounter;reg[7:0] Gray;reg[3:0] counter_for_Gray;regclk_33MHz,clk_4MHz,temp,H_HIDE,V_HIDE,H_SYNC,front_balance,back_balance,Slot_ON_V_SYNC,V_S YNC,Htongbu_mask;wire COM_HIDE,COM_SYNC;assign COM_SYNC=(front_balance|back_balance|Slot_ON_V_SYNC)|((!Htongbu_mask)&H_SYNC); assign COM_HIDE=H_HIDE||V_HIDE;always @(posedge clk_66MHz) //产生33MHz频率时钟;clk_33MHz=~clk_33MHz;always @(posedge clk_33MHz)beginif(reg_for_4MHz==0) reg_for_4MHz=1; //对寄存器进行初始化;elsebeginif(reg_for_4MHz[size-1]) clk_4MHz=~clk_4MHz; //每size个时钟脉冲clk_4MHz跳变;temp=reg_for_4MHz[size-1]; //暂存;reg_for_4MHz[size-1:1]=reg_for_4MHz[size-2:0];reg_for_4MHz[0]=temp;endendalways @(posedge clk_4MHz) //产生行消隐信号,行同步信号;begincase(Counter_For_H_SYNC)213: beginCounter_For_H_SYNC=Counter_For_H_SYNC+1;H_HIDE=~H_HIDE;end219: beginCounter_For_H_SYNC=Counter_For_H_SYNC+1;H_SYNC=~H_SYNC;end238: beginCounter_For_H_SYNC=Counter_For_H_SYNC+1;H_SYNC=~H_SYNC;end263: beginCounter_For_H_SYNC=0;H_HIDE=~H_HIDE;enddefault:Counter_For_H_SYNC=Counter_For_H_SYNC+1;endcaseendalways @(posedge clk_4MHz) //在行正程产生灰阶信号; begincase(H_HIDE)0: begincase(counter_for_Gray)12: begin //每13个4MHz时钟周期灰阶加一;counter_for_Gray=0;Gray[7:4]=Gray[7:4]+1;enddefault:counter_for_Gray=counter_for_Gray+1;endcaseend1: begincounter_for_Gray=0;Gray=0;endendcaseendalways @(posedge clk_4MHz) //产生场消隐信号;begincase(Counter_For_H_SYNC)82: case(Hcounter)286: V_HIDE=~V_HIDE;311: V_HIDE=~V_HIDE;endcase263: case(Hcounter)599:V_HIDE=~V_HIDE;624:V_HIDE=~V_HIDE;endcaseendcaseendalways @(posedge H_HIDE) //行计数;begincase(Hcounter)624: Hcounter=0;default:Hcounter=Hcounter+1;endcaseendalways @(posedge clk_4MHz)begincase(Counter_For_H_SYNC)82: case(Hcounter)286: begin front_balance=~front_balance; Htongbu_mask=~Htongbu_mask; end 287: front_balance=~front_balance;288: front_balance=~front_balance;291: back_balance=~back_balance;292: back_balance=~back_balance;293: back_balance=~back_balance;endcase92: case(Hcounter)286: front_balance=~front_balance;287: front_balance=~front_balance;288: front_balance=~front_balance;291: back_balance=~back_balance;292: back_balance=~back_balance;293: begin back_balance=~back_balance; Htongbu_mask=~Htongbu_mask; end endcase213: case(Hcounter)286: front_balance=~front_balance;287: front_balance=~front_balance;291: back_balance=~back_balance;292: back_balance=~back_balance;endcase222: case(Hcounter)287: front_balance=~front_balance;288: front_balance=~front_balance;292: back_balance=~back_balance;293: back_balance=~back_balance;endcase263: case(Hcounter)599: begin front_balance=~front_balance; Htongbu_mask=~Htongbu_mask; end 600: front_balance=~front_balance;601: front_balance=~front_balance;604: back_balance=~back_balance;605: back_balance=~back_balance;606: back_balance=~back_balance;endcase9: case(Hcounter)599: front_balance=~front_balance;600: front_balance=~front_balance;601: front_balance=~front_balance;604: back_balance=~back_balance;605: back_balance=~back_balance;606: begin back_balance=~back_balance; Htongbu_mask=~Htongbu_mask; end endcase130: case(Hcounter)599: front_balance=~front_balance;600: front_balance=~front_balance;604: back_balance=~back_balance;605: back_balance=~back_balance;endcase140: case(Hcounter)599: front_balance=~front_balance;600: front_balance=~front_balance;604: back_balance=~back_balance;605: back_balance=~back_balance;endcaseendcaseendalways @(posedge clk_4MHz)begincase(Counter_For_H_SYNC)79: case(Hcounter)291: V_SYNC=~V_SYNC;endcase131: case(Hcounter)601: V_SYNC=~V_SYNC;213: case(Hcounter)288: V_SYNC=~V_SYNC;endcase263: case(Hcounter)604: V_SYNC=~V_SYNC;endcaseendcaseendalways @(posedge clk_4MHz)begincase(Counter_For_H_SYNC)213: case(Hcounter)288: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase62: case(Hcounter)289: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;291: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase81: case(Hcounter)289: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;endcase131: case(Hcounter)601: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase200: case(Hcounter)289: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;601: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;603: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase219: case(Hcounter)290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;291: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;603: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase68: case(Hcounter)602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;603: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;87: case(Hcounter)602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;603: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;endcaseendcaseend/*always @(posedge H_HIDE)begincase(Hcounter)286: beginif(Counter_For_H_SYNC==130) V_HIDE=~V_HIDE; //第287行的第32us时刻场消隐开始; Hcounter=Hcounter+1;end311: beginif(Counter_For_H_SYNC==130) V_HIDE=~V_HIDE;Hcounter=Hcounter+1;end599: beginif(Counter_For_H_SYNC==263) V_HIDE=~V_HIDE;Hcounter=Hcounter+1;end624: beginif(Counter_For_H_SYNC==263) V_HIDE=~V_HIDE;Hcounter=0;enddefault:Hcounter=Hcountr+1;endcaseend*//*always @(posedge clk_4MHz)begincase(Counter_For_H_SYNC)82: case(Hcounter)286: front_balance=~front_balance;287: front_balance=~front_balance;288: front_balance=~front_balance;291: back_balance=~back_balance;292: back_balance=~back_balance;293: back_balance=~back_balance;endcase92: case(Hcounter)286: front_balance=~front_balance; 287: front_balance=~front_balance; 288: front_balance=~front_balance; 291: back_balance=~back_balance; 292: back_balance=~back_balance; 293: back_balance=~back_balance;endcase213: case(Hcounter)286: front_balance=~front_balance; 287: front_balance=~front_balance; 291: back_balance=~back_balance; 292: back_balance=~back_balance;endcase222: case(Hcounter)287: front_balance=~front_balance; 288: front_balance=~front_balance; 292: back_balance=~back_balance; 293: back_balance=~back_balance; endcase263: case(Hcounter)599: front_balance=~front_balance; 600: front_balance=~front_balance; 601: front_balance=~front_balance; 604: back_balance=~back_balance; 605: back_balance=~back_balance; 606: back_balance=~back_balance;endcase9: case(Hcounter)599: front_balance=~front_balance; 600: front_balance=~front_balance; 601: front_balance=~front_balance; 604: back_balance=~back_balance; 605: back_balance=~back_balance; 606: back_balance=~back_balance;endcase130: case(Hcounter)599: front_balance=~front_balance; 600: front_balance=~front_balance; 604: back_balance=~back_balance; 605: back_balance=~back_balance;endcase140: case(Hcounter)599: front_balance=~front_balance;600: front_balance=~front_balance;604: back_balance=~back_balance;605: back_balance=~back_balance;endcaseendcaseendalways @(posedge clk_4MHz)begincase(Counter_For_H_SYNC)82: case(Hcounter)291: V_SYNC=~V_SYNC;endcase263: case(Hcounter)288: V_SYNC=~V_SYNC;603: V_SYNC=~V_SYNC;endcase131: case(Hcounter)601: V_SYNC=~V_SYNC;endcaseendcaseendalways @(posedge clk_4MHz)begincase(Counter_For_H_SYNC)263: case(Hcounter)288: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase117: case(Hcounter)289: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase136: case(Hcounter)289: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase253: case(Hcounter)289: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase6: case(Hcounter)290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;291: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;603: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;604: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase118: case(Hcounter)290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;291: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;603: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase137: case(Hcounter)290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;endcase249: case(Hcounter)290: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;602: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;603: Slot_ON_V_SYNC=~Slot_ON_V_SYNC;604: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcase131: case(Hcounter)601: Slot_ON_V_SYNC=~Slot_ON_V_SYNC; endcaseendcase*/endmodule。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

-----------------------------------------------------------------------------------------------------***************************************************************************** ********************-- 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;。

相关文档
最新文档