1、 1 VGA 显示器控制电路 论文 2 前言 VGA(视频图形阵列 )作为一种标准的显示接口得到广泛的应用。利用 FPGA芯片和 EDA 设计方法,可以因地制宜,根据用户的特定需要,设计出针对性强的 VGA 显示控制器,不仅能够大大的降低成本,还可以满足生产实践 中不断变化的用户需要,产品升级换代方便迅速。 在本设计中采用 Altera 公司的 EDA软件工具 Quartus II,并以 Cyclone II 系列的 FPGA 的器件作为主实现硬件平台的设计。 3 一、 FPGA 的原理 FPGA 是 Filed Progranmmable Gate Array 的缩写,即现场可编程逻辑阵列。
2、 FPGA 是在 CPLD 的基础上发展起来的新型高性能可编程逻辑器件它一般采用SRAM 工艺,也有一些专用器件采用 Flash 工艺或反熔丝( Anti_Fuse)工艺等。FPGA 的集成度很高,其器件密度从数万系统门到数千万系统门不等,可以完成极其复杂的时序与组合逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。 FPGA 的基本组成部分有可编程输 入 /输出单元,基本可编程逻辑单元、嵌入式块 RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核等。 FPGA的主要器件供应商有 Xilinx、 Altera、 Lattice、 Actel 和 Atmel 等。 二、 VGA 转
3、换接口的简单描述 本设计另外自制 VGA 接口电路。 VGA 时序控制模块是整个显示控制器的关键部分,最终的输出信号行、场同步信号必须严格按照 VGA 时序标准产生相应的脉冲信号。对于普通的 VGA显示器,其引出线的共含 5 个信号: G,R,B(三基色信号), HS(行同步信号),VS(场同步信号)。在五 个信号时序驱动时, VGA 显示器要严格遵循“ VGA 工业标准”,即 640Hz 480 Hz 60Hz 模式。 下图( 1)为 VGA 显示控制器控制 CRT 显示器 VGA( Video Graphic Array)接口,即视频图形阵列,也叫做 D-Sub 接口,是 15 针的梯形插
4、头,分 3 排,每排 5 个,传输模拟信号。 VGA 接口采用非对称分布的 15 针连接方式,其工作原理:是将显存内以数字格式存储的图像(帧)信号在 RAMEAC 里经过模拟调制成模拟高频信号,然后再输出到显示设备成像。目前大多数计算机与外部显示设备之间都是通过模拟 VGA 接口连接,计算机内部以数字方式生成的显示图像信息,被显卡中的数字 /模拟转换器转变为 R、 G、B 三原色信号和行、场同步信号,信号通过电缆传输到显示设备中。对于模拟显示设备,如模拟 CRT 显示器,信号被直接送到相应的处理电路,驱动控制显像生成图像。而对于 LCD、 DLP 扥数字显示设备,显示设备中需配置相应的 A/D
5、(模拟 /数字)转换器,将模拟信号转变为数字信号。在经过 D/A 和 A/D2 次转换后,不可避免地造成了一些图像细节的损失。 VGA 接口应用于 CRT 显示器无可厚非,但用于连接液晶之类的显示设备,则转换过程的图像损失会使 显示效果略微下降。 VGA 接口的引脚分配如下图 ( 1) 所示 4 图( 1) 三 、 主要功能模块设计 注:主要模块为三块,一个二分频模块,一个 VGA 时序和行点位置模块,一个图形生成模块,本来想利用老师提供的方案进行制作,但在按键去抖模块以及按键累计模块没有能完成,故更改方案,换用读取拨动开关的模式来选择 模式显示。 1.1 VGA 时序控制模块 ( vgaxm
6、.v) 功能: 根据 VGA 显示器的工作原理,提供同步信号( H_SYNC 和 V_SYNC)及像素位置信息。 设计思路: 根据 VGA 显示器的工作原理,以垂直同步信号的出现时刻作为时间的起点(原点),根据时序图算出每一个关键时间点所需的计数器最大值,据此输出H_SYNC 和 V_SYNC,在此基础上对扫描的行数及像素点数进行计数,从而输出像素位置信息。 1.1.1VGA 的时序详细讲解 对于 VGA 显示器,每个像素点的输出频率为 25.175MHZ,本实验采用50MHz 的时钟信号,经过模块 divider(二分频模块)的分频得到 25MHz 的时钟输入信号。 依据 VGA 时序标准,
7、行同步信号 HS,行周期为 32.2us,也就是 H_sync(行)的周期;场同步信号 VS,场周期为 16.89ms,也就是 V_sync(一帧)的周期。 刷新 1 个像素所需时间 Tpixel = 1/ fclk =40ns; 5 从( b)水平刷新循环中,可以知道 刷新一行所需时间 公式: Trow = B+C+D+E=Tpixel 640 guard bands = 25.6s + B + C +E = 32.2s; 引入 h_count9.0:用于 Trow( 25MHz) 的定时计数 ,计数清零时由时序可得下面计算式子: h_countend: 同时可以 从该时序图确定 p_beg
8、in_time 和 p_end_time 的像素点 pixel开始计数以及清 零计数的时间,计算式子如下: p_begin_time : p_end_time : 还能得出行 扫描 h_sync 在 h_count 从 0805 计数期间,从第几计数开始为电平变化。图中, B=3.77us 就是说在 h_count 计数起到 3.77us 到来之间行信号 h_sync保持低电平,在 3.77us 到 32.2us 之间为高电平,刚好为一个行信号周期。以下是计算式子( hsync_end 代表 h_sync 的低电平截止时间范围): hsync_end: 程序简单描述如下: h_count 计数
9、: always ( posedge clk) /25MHZ / 在垂直刷新循环内,当 h_count 计到规定的最大值 805 时,则清零;否则加 1 计数 6 h_sync 的电平变化 : assign h_sync_pulse_w = (h_count 9d0 /超出有效区域,则为黑色 end 2.1.1 VGA 竖彩条发生和横彩条发 生 竖彩条发横模块根据像素点计数器的 h_count 的计数值来 产生 彩条,其流程图如( a)所示。 它对行点数(像素点)计数器的数值进行判断,每 80 条竖线生成一种竖彩条,共八种竖彩条。横彩条发生模块与竖彩条发生模块类似。它根据场扫计数器(行)的计数
10、值来残生横彩条,流程图如( b)所示。每 60 条扫描线为一个彩条宽度,共 8 色 横彩条模式。 10 横彩条 ( b) 竖彩条 (a) 2.1.2 对模式 6 和模式 2 的简单描述 如下: 根据 vgacore2.v输出的格线计数器 line_cnt、 pixel_cnt 和 strip_cnt 的大小,用 if-else 语句简单地实现。 line_cnt 对行数进行计数,为 32 进制计数 模式 6: /*( 6)模式 6:横彩条 2-从上至下,每 6 行显示一种颜色, 分别为白、黄、粉、红、浅蓝、绿、黑、蓝,并重复此规律。*/ 5:begin if(strip_cnt=6d6) rg
11、b=3b111; / 白 else if(strip_cnt=6d12) rgb=3b110;/ 黄 end 模式 2: Y N N Y Y N N Y Y Y Y Y Y Y Y N N N N Y Y Y N N N N N N N N Pixel80 Pixel160 Pixel240 Pixel320 Pixel4000 Pixel480 Pixel560 Line59 开 始 Line119 Line179 Line23999 Line2999 Line3599 Line419 H_dat=111 H_dat=110 H_dat=101 H_dat=100 H_dat=011 H_dat=001 H_dat=000 H_dat=010 开 始 v_dat=000 v_dat=001 v_dat=010 v_dat=011 v_dat=100 v_dat=101 v_dat=110 v_dat=111