《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的VGA图形控制器设计
基于FPGA的VGA图形控制器设计
来源:微型机与应用2013年第15期
池清萍
(北京工业大学 软件学院,北京 100124)
摘要: 利用FPGA设计并实现了一种VGA图形控制器。根据VGA显示原理,利用VHDL作为逻辑描述语言,在Xilinx的开发板Nexys2上完成了设计的功能。通过按动开发板上的按键可切换显示屏显示的图形,可实现横条纹、竖条纹、方格棋盘等8 bit彩色图形的显示。
Abstract:
Key words :

摘  要: 利用FPGA设计并实现了一种VGA图形控制器。根据VGA显示原理,利用VHDL作为逻辑描述语言,在Xilinx的开发板Nexys2上完成了设计的功能。通过按动开发板上的按键可切换显示屏显示的图形,可实现横条纹、竖条纹、方格棋盘等8 bit彩色图形的显示。
关键词: VGA;FPGA;图形控制器;8 bit彩色图形

    随着电子技术的进步和数字图像处理应用领域的不断扩大,FPGA对VGA信号的采集起到了不可忽视的作用[1]。基于FPGA设计的VGA图形控制器有不少便利之处:首先,FPGA以其设计灵活、结构简单、集成度高等优点,近年来被广泛运用到各种功能的电路设计当中。以硬件描述语言(Verilog或VHDL)完成的电路设计可以经过简单的综合与布局快速烧至到FPGA上进行测试,成为现代IC设计验证的主流技术。其次,VGA作为一种通用的显示接口,已经广泛应用于工作和生活当中。传统的VGA显示控制主要以专门的芯片电路和通用处理器来实现,体积大且不灵活,但基于FPGA的VGA显示控制显著提高了产品的灵活性。最后,基于FPGA设计的产品开发过程简单,投资小,系统成本较低,使得本VGA图形控制器在同类商品中将更具有价格上的竞争优势。本文着重介绍一种利用Nexys2 FPGA开发板实现VGA显示控制的方法,能够实现不同图案的显示,该方法也可以方便地应用于各种嵌入式便携系统中。
1 Nexys2概述
     现场可编程门阵列FPGA(Field Programmable Gate Array)在嵌入式系统中被广泛运用。其配置和编程是通过软件进行的,通用性和灵活性极强。在产品升级时,不需要额外改变原有的硬件电路,只需修改程序,大大宿短了系统设计周期。Nexys2作为一款比较经典的FPGA开发板,能够完全兼容嵌入式处理器。特别在VGA系统设计中,因其板上集成了16 MB高速SDRAM和16 MB Flash ROM,不需接外部ROM便可存储图像数据或字符数据,使其得到更加广泛的运用。
2 VGA概述及工作原理
2.1 VGA技术

    计算机显示器的显示有许多标准,常见的有VGA(视频图形阵列)、SVGA(高级视频图形阵列)等。在图像处理系统中,若是采用传统办法将图像数据传回电脑并通过显示器显示出来,则整个传输过程中都需要嵌入式系统的CPU不断对传输的图像数据信号进行控制,不仅浪费CPU资源并且依赖计算机,显著降低了系统运行的灵活性。但如果基于FPGA对VGA接口进行设计,数据流就只在系统的内部流动而不依赖电脑,实现了系统的最小化,并且增强了系统的可靠性和设计的灵活性[1]。FPGA开发板上集成了很多功能模块,使得基于FPGA的设计还可以根据用户的特定需要设计出针对性强的VGA图形控制器,不仅满足了多样化的用户需要,而且降低了开发成本,使产品的升级换代更加快捷、方便。
2.2 VGA显示原理
    VGA显示系统如图1所示,主要由VGA控制器、存储器(若显示更大的图像,可采用外部ROM取代FPGA内部的ROM)和显示器3部分组成。VGA控制器调用存储器里储存的数据并对此数据进行相应的处理,转换成相应的时序信号传送给显示器,显示器按照接收到的信号进行显示[2]。

    对应640×480×60 Hz的模式,工业标准所要求的时钟频率为25.175 MHz,行周期Tg为800个时钟,场周期Tg为525个行周期。由于无法得到25.175 MHz的时钟频率,因此在设计中采用将全局时钟50 MHz二分频得到的25 MHz的频率来驱动行计数器。
    当VS=0、HS=0时,CRT显示的内容为亮的过程。当一行扫描完毕,行同步HS=1。期间,CRT扫描产生消隐,电子束回到CRT左边下一行的起始位置(X=0,Y=1);当扫描完480行后,CRT的场同步VS=1,产生场同步使扫描线回到CRT的第一行第一列(X=0,Y=0)处(约为两个行周期)。此程也称光栅扫描[3],如图3所示。

3 系统设计方案
    整个系统以Nexys2 FPGA开发板为核心,通过对其编程可输出红、绿、蓝三基色信号和HS、VS行、场扫描同步时序信号。当FPGA接收到输出控制信号后,内部的数据选择器模块根据控制信号选择相应的图形生成模块,输出图形信号与行、场扫描时序信号一起通过VGA接口电路传送至显示器,在VGA显示器上便可看到相应的彩色图像[4]。系统采用Nexys2开发板上提供的50 MHz时钟作为全局参考时钟,由一片晶振提供时钟源。通过硬件描述语言VHDL对时钟进行分频,产生各模块所需时钟频率。通过硬件描述语言VHDL对Nexys2开发板上的按键进行规定,使得开发板工作时可以通过按键切换VGA显示的图形。系统模块如图4所示。

4 系统实现

 


    本设计采用了8 bit数字信号线,可产生256种不同的颜色。本彩色条纹模式显示控制器可通过按键实现横彩条、竖彩条、棋盘格等图案的显示。横彩条可根据场计数器产生,在480个有效数据区内,每60个产生一个彩条,即对其进行8等分;竖彩条则根据行计数器产生,在640个有效数据区内,每80个产生一个彩条,也是8等分;棋盘格可由横彩条数据和竖彩条数据“异或”或“同或”而得到。同时,可通过按键来控制VGA不同图案的输出。
4.1 坐标定位
    设定要全屏显示图形,如图2所示,行、场时序的Td部分是屏幕所显示部分,即屏幕从坐标第45行、第152个像素(左上角)开始显示。若显示横彩条,则从第45行开始,每过60行给输出rgbout赋一个颜色值,直到第525行;竖彩条即从第152个像素开始,每过80个像素给输出rgbout赋予一个颜色值,直到第792个像素。
4.2 VGA控制程序设计
4.2.1 VGA控制器程序信号定义

    entity vga is
    Port(clk:in std_logic;//全局时钟
     keya:in STD_LOGIC;//控制按键
      syncV:inout std_logic;//场同步信号
     syncH:inout std_logic;//行同步型号
      rgbout:out std_logic_vector(7 downto 0));
//8 bit输出颜色信号
end vga;
4.2.2 产生彩条图形的部分VHDL描述
process(clkdiv)//clkdiv为分频后的时钟信号
 begin    
      if(clkdiv=′1′ and clkdiv′Event)then
        if(HS>=152)and(HS<232)and(VS>=45)and(VS<525)then//横彩条
          rgbx<="01010101";
        elsif(HS>=232)and(HS<312)and(VS>=45)and(VS<525)then
          rgbx<="01110101";
        ……
        elsif(HS>=712)and(HS<792)and(VS>=45)and(VS<525)then
           rgbx<="00010111";
        else
           rgbx<="00000000";
        end if;
  end if;
end process;
4.2.3 控制按键的VHDL描述
    process(keya)
      begin
        if(keya=′1′and keya′Event)then
      mmd<=mmd+1;//定义的2位逻辑信号
    end if;
  end process;
process(mmd)
    begin
          case mmd is
       when"00"=>rgbout<=rgbx;
//当无按键操作时,VGA显示屏显示横彩条
       when"01"=>rgbout<=rgby;
//第一次按键时,VGA显示屏显示竖彩条
       when"10"=>rgbout<=rgbx xor rgby;
//第二次按键时,VGA显示第一种棋盘图形
       when"11"=>rgbout<=rgbx xnor rgby;
//第二次按键时,VGA显示第二种棋盘图形
          when others=>null;
      end case;
end process;
4.3 系统测试结果与结论
    在Xilinx ISE 13.3中创建项目后,输入系统的VHDL程序代码进行管脚约束,然后进行逻辑综合、布局布线、时序分析后生成.bit编程文件,再将编程文件下载到Nexys2 FPGA中,并通过VGA接口与显示器相连。系统中的keya可约束为Nexys2开发板中任一按键,作为显示图形的切换按键。通过按keya键,系统的显示效果如图5所示。

    本文设计的VGA图形显示控制器是基于FPGA实现的,采用VHDL语言在Xilinx 13.3软件环境下完成软件设计,并对整个系统进行了调试,最终在硬件平台Nexys2上实现了图形的显示。与传统的VGA控制器相比,本设计具有以下有点:(1)采用硬件描述语言VHDL进行开发,软件程序简单且执行效率高,使得系统设计变得更加快捷方便;(2)脱离了PC控制,减少了控制器的体积,从而扩展了其应用范围,对于各种嵌入式便携系统具有更重要的现实意义及工程实用价值。
    本设计只做了彩条及棋盘格图形的显示,如果要做字符显示或真彩图像显示,则需将像素点数据保存到FPGA内部的EAB RAM、外部ROM或RAM中。在接下来的设计中,将会在此方向上进行相应的改进和完善。
参考文献
[1] 吕康.基于FPGA的VGA图形控制器设计[J].科技风,2011(14):32.
[2] 朱奕丹,方怡冰.基于FPGA的图像采集与VGA显示系统[J].计算机应用,2011,3(5):1258-1261,1264.
[3] 潘松,黄继业.EDA技术与VHDL[M].北京:清华大学出版社,2009.
[4] 杨杰,穆伟斌.基于FPGA的VGA控制器设计与实现[J].齐齐哈尔大学学报,2008,24(6):50-52.

此内容为AET网站原创,未经授权禁止转载。