《集成电路课程设计报告-基于FPGA实现VGA彩条信号发生器设计》由会员分享,可在线阅读,更多相关《集成电路课程设计报告-基于FPGA实现VGA彩条信号发生器设计(10页珍藏版)》请在金锄头文库上搜索。
1、集成电路课程设计报告VGA 彩条图像发生器设计 姓名:XXX专业班级:XXXX学号:XXXXX指导老师:XXXXXX1、课程设计要求通过一周的时间,小组成员进行学习和讨论,来设计一个 VHDL/Verilog 程序来实现以下功能:1. 利用 FPGA 实现 VGA 彩条信号发生器.2. 可以产生彩色横条, 彩色竖条信号, 彩色棋盘格信号.3. 由一个按键按照顺序选择不同模式的信号输出.4. 选用 GW48-PK2 系统, 编写程序在 FPGA 上实现并加以验证.二、课程设计目的1、熟悉 VGA 显示器的实现原理2、加深对 VHDL 语言的设计编程和设计语言规则的应用3、熟悉集成电路设计的流程,
2、学习使用 EDA 集成电路设计软件 QuartusII 进行模拟综合,然后在 FPGA 上实现。3、实验环境开发过程中采用集成工具 QuartuaII 实现设计,选用 GW48-PK2 实验箱,以及一个显示器。4、课程设计原理1、VGA 显示原理VGA(Video Graphics Array) 作为一种标准的显示接口得到了广泛的应用。文中基于标准VGA模式来实现。工业标准的VGA 显示模式为:640 480 16 60。常见的彩色显示器一般由阴极射线管(CRT) 构成,彩色由GRB(Green Red Blue) 基色组成。显示采用逐行扫描的方式解决,阴极射线枪发出电子束打在涂有荧光粉的荧光
3、屏上,产生GRB 基色,合成一个彩色像素。扫描从屏幕的左上方开始,从左到右,从上到下,逐行扫描,每扫完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行行同步;扫描完所有行,用场同步信号进行场同步 ,并使扫描回到屏幕的左上方,同时进行场消隐,并预备进行下一次的扫描。2、VGA 信号时序一帧屏幕的显示是由600行从上至下扫描,800列从左至右填充(这也是为什么每当电脑几乎要当机的时候,视屏显示从上之下的延迟扫描)然而微观上,一行的行扫描是由超过800个列填充完成,一帧图像超过600行扫描。实际上是VGA的时序在作怪。上图是有关 HSYNC
4、 和 VSYCNC 的时序图,以 800 x 600 x 60Hz 为例,信息如下:HSYNC Signal 是用来控制“列填充” , 而一个HSYNC Signal 可以分为 4个段,也就是 a (同步段 ) , b(后肩段) ,c(激活段) ,d(前肩段) 。HSYNC Signal 的a 是拉低的128 个列像素 ,b是拉高的88个列像素,至于c 是拉高的 800 个列像素,而最后的 d 是拉高的40 个列像素。 一列总共有1056 个列像素。VSYNC Signal 是用来控制“行扫描” 。而一个 VSYNC Signal 同样可以分为 4 个段, 也是 o (同步段 ) , p(后肩
5、段) ,q(激活段) ,r(前肩段) 。VSYNC Signal 的o 是拉低的4个行像素 ,p是拉高的23 个行像素,至于q 是拉高的 600 个行像素,而最后的 r 是拉高的 1 个行像素。 一行总共有628 个行像素。800X600X50HZ a 段 b 段 c 段 d 段 e 段总共n 个列像素HSYNC Signal列像素128 88 800 40 1056800X600X50HZ o 段 p 段 q 段 r 段 s 段总共 n个行像素VSYNC Signal行像素4 23 600 1 628“一个行像素”是以“列像素为单位”来定义(以 800 x 600 x 60Hz 为例)如下所
6、示 :1个行像素 = 1056个列像素。而“一个列像素”是以“时间位单位”来定义(以 800 x 600 x 60Hz 为例) ,如下所示:1个列像素 = 25 ns。1个行像素 = 1056个列像素 = 1056 x 25ns = 2.64us。(以 800 x 600 x 60Hz 为例)上述内容读者可以发现一个事实,要完成一行的扫描,需要 1056 个列像素,也就是说需要 1056 x25ns的时间。如果要完成所有行的扫描的话,需要628 x 1056 x 25ns 的时间。很遗憾的是,不是所有时间都用来显示图片,有一部分的时间是用来同步操作。而 HSYNC Signal 只有在的 C
7、段 和 VSYNC Signal 的 q 段的激活段,数据的输入才有效。3、V GA 彩条信号产生彩条信号产生模块包括了彩条模式控制、竖彩条发生、横彩条发生和棋盘格发生三个模块。彩条模式控制可以用一个控制端口来实现。竖彩条发生模块根据行点数器h_cnt 的计数值来产生彩条,横彩条发生模块根据列点数器v_ cnt 的计数值来产生彩条,棋盘格的彩条就可以用横彩条和竖彩条异或来得到。5、课程设计源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COLOR ISPORT(CLK,MD:I
8、N STD_LOGIC;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_VECTO
9、R(3 DOWNTO 1); SIGNAL GRBY:STD_LOGIC_VECTOR(3 DOWNTO 1);SIGNAL GRBP:STD_LOGIC_VECTOR(3 DOWNTO 1);SIGNAL GRB:STD_LOGIC_VECTOR(3 DOWNTO 1);BEGINGRB(2)23 THEN HS1 479 THEN VS1=0;ELSE VS1=1;END IF;END PROCESS;PROCESS(CC,LL)BEGIN IF CC3 THEN GRBX =111;ELSIF CC6 THEN GRBX =110;ELSIF CC9 THEN GRBX =101;ELS
10、IF CC13 THEN GRBX =100;ELSIF CC15 THEN GRBX =011;ELSIF CC18 THEN GRBX =010;ELSIF CC21 THEN GRBX =001;ELSE GRBX=000;END IF;IF LL60 THEN GRBY =111;ELSIF LL130 THEN GRBY =110;ELSIF LL180 THEN GRBY =101;ELSIF LL240 THEN GRBY =100;ELSIF LL300 THEN GRBY =011;ELSIF LL360 THEN GRBY =010;ELSIF LL420 THEN GRB
11、Y =001;ELSE GRBY=000;END IF;END PROCESS;HS=HS1;VS=VS1;R=GRB(2);G=GRB(3);B=GRB(1);END behav;6、课程设计步骤 1.1、创建一个文件夹为vga。设置好保存路径。1.2、打开 quartusII,在 New 窗口中的 Device Design Files 中选择编译文件的语言类型,这里选择 VHDL File。输入本设计的程序源代码。然后 FileSave As,保存的名字应与实体名保持一致。1.3、选择菜单 Filenew Project Wizard,创建一个新的工程,工程名要和顶层文件的实体名一致,为
12、 colour。1.4、点击 Next 把文件加入工程中,选择目标芯片,本设计用到的芯片为Cyclone 系列的 EP1C3TC144。1.5、一直 Next 后 Finish。2.1、选择 Processing 菜单的 Start Compilation ,开始编译。编译过程中,如果有错误,在编译报告窗口中就会出现详细错误内容。双击此条文,就会弹出相应的 vhdl 文件,进行修改后再进行编译,直至编译成功没有错误。窗口如下图:3.1、在编译通过后,对设计进行时序仿真,添加波形。打开波形编辑器。选择FileNewVector Waveform FileOK3.2、设置仿真时间区域,选择 Edi
13、tEnd Time,在 Time 栏输入 10 本设计设置为 10ms。3.3、将波形文件存盘。选择 FileSave as ,文件名为 colour.vwf3.4、选择 ViewUtility WindowsNode Finder,在 Filter 框中选 Pins:all,然后单击 List 按钮,在下方的 Nodes Found 窗口中就出现工程中的所有端口引脚名,用鼠标把输入输出端口引脚拖到波形编辑器。3.5、给 CLK 时钟信号设置周期为 83us,占空比为 50,然后设置 MD 的周期,周期为 5ms。3.6、选择 Start Simulation ,直达出现波形图。如下图:4.1
14、、引脚设置选择 Assignment Assignment Editor 进入编辑窗口,在 Category 栏中选择 Pin,双击 To 栏,双击 Location,在下拉菜单中选择对应端口信号名的器件引脚号。引脚号需要查看相关的工具书。引脚如下图:4.2、在存储锁定的引脚后,还要再编译一次,才能将引脚锁定信息编译进下载文件中。5.1、下载到 FPGA 上实现将显示器连接电源,通过 VGA 接口接在试验箱上。5.2、打开显示器。选择 Programmer,编程器选择 Byte Blater,选择工程文件,点击 Start。这样在显示器上就会出现彩色条文。如下: 7、实验总结本实验在课编程技术
15、的基础上,根据 VGA 原理,运用 VHDL 描述语言实现了 VGA 控制设计的方案。1.再设计的过程中,遇到了很多问题,在设计之初通过查找大量资料,对VGA 的原理有了初步的认识,但是在进行行列时序信号的计算时还是有一定的不理解。在指导老师的帮助下,了解了信号的产生。2.通过老师的指点和自学,我也分析出了本设计存在的不足。并对书上原有代码提出了质疑。3.实验中我进一步熟悉了数字系统 VHDL 设计和仿真的流程,加深了对QuartusII 软件的使用的理解。4.通过设计时序控制电路,和彩条产生电路,我更深入地理解了 FPGA 技术,即同过软件编程的方法来实现硬件时序和组合电路,加快了产品开发的速度,以满足不断变化的市场需求。