河南城建学院EDA 技术课程设计
课题:VGA彩条信号显示控制器的设计
系别:电气与信息工程学院
河南城建学院2013年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 II
目录
1概述 (1)
1.1 课程设计要求 (1)
1.2 课程设计目的 (1)
1.3 实验环境 (1)
2 系统总体方案 (2)
2.1系统的工作原理和组成框图 (2)
2.2 VGA显示原理 (2)
3 VHDL设计与仿真 (6)
3.1波形仿真 (6)
3.2硬件描述语言生成电路 (7)
4 EDA硬件调试与实现 (8)
4.1硬件调试 (8)
4.2硬件实现 (8)
5课程设计体会 (13)
参考文献 (14)
附1:源程序代码 (15)
附2:系统原理图 (17)
1 概述
本设计采用EDA技术,通过CPLD芯片实现了实现VGA彩条信号的显示的设计,本文采用VHDL 硬件描述语言描述VGA彩条信号的显示电路,完成对电路的功能仿真。通过按键来实现横彩条、竖彩条、棋盘式方格图案的选择,并能进一步设计出文字、图像的显示。与传统的设计方式相比,本设计由于采用了CPLD芯片来实现,它将大量的电路功能集成到一个芯片中,并且可以由用户自行设计逻辑功能,提高了系统的集成度和可靠性。
1.1 课程设计要求
1、熟悉掌握常用仿真开发软件,比如: Quartus II或Xilinx ISE 的使用方法。
2、能熟练运用上述开发软件设计并仿真电路并下载到FPGA中进行调试;
3、学会用EDA技术实现数字电子器件组成复杂系统的方法;学习电子系统电路的安装调试技术。
4、掌握VGA时序工作要求及特点
5、利用 FPGA 实现 VGA 彩条信号发生器,可以产生彩色横条, 彩色竖条信号, 彩色棋盘格信号,由一个按键按照顺序选择不同模式的信号输出.
1.2 课程设计目的
1、熟悉VGA显示器的实现原理
2、加深对VHDL语言的设计编程和设计语言规则的应用
3、熟悉集成电路设计的流程,学习使用EDA集成电路设计软件QuartusII 进行模拟综合,然后在FPGA上实现。
1.3 实验环境
开发过程中采用集成工具QuartuaII实现设计,选用 GW48系列
SOPCEDA实验箱,以及一个显示器。
2 系统总体方案
2.1系统的工作原理和组成框图
FPGA 是整个系统的核心,通过对其编程可输出 RGB 三基色信号和HS 、VS 行场扫描同步信号。当 FPGA 接受单片机输出的控制信号后,内部的数据选择器模块根据控制信号选通相应的图像生成模块,输出图像信号,与行场扫描时序信号一起通过 15 针 D 型接口电路送入 VGA 显示器,在 VGA 显示器上便可以看到对应的彩色图像。FPGA 所需的工作时钟由外部高精度有源晶振提供;单片机控制器分析键盘扫描结果,控制液晶显示模块显示相应的功能,由 LCD 显示输出图像和按键控制模式,并送出相应控制信号给 FPGA,系统原理框图如图 1
图1 原理框图
2.2 VGA显示原理
工业标准的VGA显示模式为:640×468×16色×60Hz。常见的彩色显示器,一般由CRT (阴极射线管)构成,彩色是由R、G、B(红、绿、蓝)三基色组成,CRT用逐行扫描或隔行扫描的方式实现图像显示,由VGA控制模块产生的水平同步信号和垂直同步信号控制阴极射线枪产生的电子束,打在涂有荧光粉的荧光屏上,产生R、G、B三基色,合成一个彩色像素。扫描从屏幕的左上方开始,由左至右,由上到下,逐行进行扫描,每扫完一行,电子束回到屏幕下一行的起始位置,在回扫期间,CRT对电子束进行消隐,每行结束是用行同步信号HS进行行同步;扫描完所有行,再由场同步信号VS进行场同步,并使扫描回到屏幕的左上方,同时进行场消隐,预备下一场的扫描。行同步信号HS 和场同步信号VS是两个重要的信号。显示过程中,HS 和VS的极性可正可负,显示器内可自动转换为
正极性逻辑。
VGA行同步信号HS和场同步信号VS的时序图如图2和图3所示,T1为行同步消隐(约为6μs);T2为行显示时间(约为26μs);T3为场同步消隐(两个行周期);T4为场显示时间(480个行周期)。显示器每扫描完一行,再扫描一下行时会花一定时间来准备,因此要满足时序要求,见图2
图2 VGA行扫描时序图
同样每扫描完一帧,再扫描下一帧行时也会花一定时间来准备,因此也要满足其时序要求,见图3
图3 VGA场扫描时序图
对于VGA 显示器的时序驱动要严格遵循“VGA工业标准”,即640×480×60HZ模式,否则无法显示正确地图像。
VGA工业标准要求的频率:
时钟频率:25.175MHz(像素输出的频率) 行频:31469Hz 场频:59.94Hz(每秒图像刷新频率)
行扫描时序要求如表1
表1行扫描时序图
场扫描时序要求如表2
表2场扫描时序图
从以上图可以看出,显示一行数据需要处理两件事情。第一:产生行同步HS。不难看出,HS是一个脉冲信号,此信号的周期为:Te=Ta+Tb+Tc+Td,低电平时间为Ta。其中 Ta、Tb、Tc、Td均为时间信号,这些信号根据需要显示的分辨率不同而不同。第二:产生显示的数据(DATA)信号,此信号为模拟信号,当在显示有效数据(Active video)内,DATA信号为0~0.714Vpp的模拟电压(R、G、B),根据分辨率的不同,DATA的采样率、点数也皆不相同。帧数据时序与行时序类似,也就是显示一屏数据的时序。只是这里的基本单位为每行数据,而行数据里面的最基本单位为每个点不同的分辨率,时序上的时间是不一样的。
在水平时序中,包括以下几个时序参数:水平同步脉冲宽度;水平同步脉冲结束到水平门的开始之间的宽度;一个视频行可视区域的宽度;一个完整的视频行的宽度,从水平同步脉冲的开始到下一个水平同步脉冲的开始。
表3常见分辨率行时序
表4常见分辨率帧时序
图像信号显示的颜色种类与表示R、G、B三基色的二进制数位数有关,表5列出了8种颜色的编码方式
表5颜色编码
3 VHDL设计与仿真
3.1波形仿真
通过QuartusII软件,我们进行了仿真,其仿真波形如下图:
图4编译成功图
图5波形仿真图
3.2硬件描述语言生成电路
在QuartusII软件中利用硬件描述语言描述电路后,用RTL Viewers 生成的对应的电路图如下:
图6 RTL Viewers电路图
在QuartusII软件中利用硬件描述语言描述电路后,用technology map viewer
生成的对应的电路图如下
图7 电路图technology map viewer电路图
4 EDA硬件调试与实现
4.1硬件调试
⑴打开QuartusⅡ9.0软件,建立进程,进程的名字和程序的名字相同;
⑵打开新建选择VHDL File,然后把程序输入进去;
⑶保存文件点击软件页面上方的编译按键进行编译;
⑷编译成功后,进行软件仿真,点击File选择Vector Waveform File,然后点击鼠标右键选inset node or bus键,把脚码输入进去,再进行脚码设定;
⑸然后保存,点击Assigment中的settings选择时序仿真,进行程序的时序仿真;
⑹时序仿真成功后,点击上方Assigment Editor键进行脚码锁定;
脚码锁定中选用模式5。
图8 引脚锁定图
4.2硬件实现
硬件实现选用实验箱模式5方式下完成,在实验过程中clk的引脚选择clock0即外接频率源PIN_L1,频率选择为10MHZ。复位信号clr引脚用按键1进行控制锁定为PIN_G20,其余数码管的使能端引脚分配见上图。选择编译按钮,重新编译,编程下载。
在quartusⅡ软件中,选择toolsprogrammer,选择Hardware Settings,然后添加USB_Blaster。点击”add file”按钮添加需要配置的caideng.sof文件,点击start按钮下载代码到芯片,即可观察到硬件实验结果。
图9 GW48系列SOPCEDA开发板仿真图
图10显示器横彩条显示
图11显示器竖彩条显示
图12 显示器方格显示
图13 显示器横彩条显示
图14显示器竖彩条显示
图15显示器横彩条显示
5 课程设计体会
1、在程序的编写过程中,我们应该首先分析各个端口的优先级顺序,这一点就可以利用if语句首先进行判断。这一点是用VHDL语言进行设计数字逻辑电路的共同点,是我们学习过程中必须掌握的内容。
2、而在编写vhdl源文件的过程中,我加深了对信号和变量的延时区别的理解和对process“内部串行外部并行”的理解。
3、实验中我进一步熟悉了数字系统VHDL设计和仿真的流程,加深了对QuartusII软件使用的理解。
4、在实验中,打开QuartusII软件,建立一个新的工程时在写顶层实体名时,实体名、文件名必须和建立工程时所设定的顶层实体名相同,这样才不会出错,这一点是我们使用QuartusII软件时经常犯的错误之一。
5、实验中,需要对每一个端口指定器件的引脚,在引脚指定过程中需要参照开发系统所给的IO端口映射表,通过开发平台上每个IO器件附近的IO编号,在映射表中找到相应的引脚名,填入相应的对话框。这一应该特别小心,也是实验最后成败的最为关键的一步。
6、通过这次实验,通过VGA显示实验,我加深了对EDA技术的理解,初步掌握了QuartusII软件图形编辑的使用。我接触了使用VHDL编程的一些基本技术和方法,初步掌握QuartusII软件的使用方法以及硬件编程下载的基本技能,对以后EDA的继续学习奠定了基础。
参考文献
[1] 阎石.数字电子技术基础[ M ].高等教育出版社,2007
[2] 潘松,黄继业.EDA技术实用教程[ M ].北京:科学出版社, 2002.
[3] 康华光.电子技术基础(模拟部分)第四版[ M ].北京:高等教育出版社,2001
[4] 乔庐峰,王志功.VHDL数字电路设计教程[ M ].电子工业出版社,2005
附1 源程序代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COLOR IS
PORT( CLK,MD :IN STD_LOGIC;
HS,VS,R,G,B :OUT STD_LOGIC );
END COLOR;
ARCHITECTURE behav OF COLOR IS
SIGNAL 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);
SIGNAL GRBY :STD_LOGIC_VECTOR(3 DOWNTO 1);
SIGNAL GRBP :STD_LOGIC_VECTOR(3 DOWNTO 1);
SIGNAL GRB :STD_LOGIC_VECTOR(3 DOWNTO 1); BEGIN
GRB(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 ) BEGIN
IF MD'EVENT AND MD = '0'THEN
IF MMD = "10" THEN MMD<= "00";
ELSE MMD <=MMD + 1;END IF; END IF;
END PROCESS;
PROCESS( MMD ) BEGIN
IF MMD= "00" THEN GRBP <=GRBX;
ELSIF MMD ="01" THEN GRBP <=GRBY;
ELSIF MMD = "10" THEN GRBP <=GRBX XOR GRBY;
ELSE GRBP <= "000"; END IF;
END PROCESS;
PROCESS( CLK ) BEGIN
IF CLK'EVENT AND CLK ='1'THEN
IF FS = 10 THEN FS <= "0000";
ELSE FS <=(FS+1); END IF; END IF;
END PROCESS;
FCLK <=FS(3); CCLK <=CC(4);
PROCESS( CCLK ) BEGIN
IF CCLK'EVENT AND CCLK = '0' THEN
ELSE LL <= LL + 1;END IF; END IF;
END PROCESS;
PROCESS( FCLK )
BEGIN
IF FCLK'EVENT AND FCLK = '1' THEN
IF CC= 26 THEN CC <= "00000";
ELSE CC <= CC + 1; END IF; END IF;
END PROCESS;
PROCESS( CC,LL ) BEGIN
IF LL >479 THEN VS1 <= '0'; --场同步
ELSE VS1 <= '1'; END IF;
IF CC> 20 THEN HS1 <= '0'; --行同步
ELSE HS1 <= '1'; END IF;
END PROCESS;
PROCESS(CC,LL) BEGIN
IF CC < 2 THEN GRBX <= "111"; --像素点ELSIF CC < 6 THEN GRBX <= "110";
ELSIF CC < 9 THEN GRBX <= "101";
ELSIF CC < 13 THEN GRBX <= "100";
ELSIF CC < 16 THEN GRBX <= "011";
ELSIF CC < 19 THEN GRBX <= "010";
ELSIF CC < 21 THEN GRBX <= "001";
ELSE GRBX <= "000"; END IF;
IF LL < 60 THEN GRBY <= "111"; --行间隔
ELSIF LL < 130 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;
附2 系统原理图
图16 系统原理图
附图1