VGA(1)上帝说,要有光
1、名字的由来
Espier开发板推出已经有一段时间了,对于早前的LED和数码管的例子想必已经有些HOLD不住了。上帝创造世界时第一句话就说过:要有光。因此下一个折腾的接口就非VGA莫属了。
相较LED和数码管,VGA接口逻辑较为复杂和系统,因此我们分期分批推出教程,内容涵盖了:VGA接口说明、VGA显示驱动详解、九宫格色块、渐变色、BMP图像显示等,想较软件实现图像处理的能力而言,FPGA处理图形仅次于GPU,在灵活性方面甚至还有胜出;作为简易的图像接口设计应该是绰绰有余了。
2、准备工作
是不是感觉前期准备的2根电缆有一根20芯的没有用上啊?别急,今天它隆重登场了。
按下图进行有关图形显示的准备工作:请原谅低端摄像头夜拍的效果以及FPGA芯片周围的油脂状物体,那是还没清洗的助焊膏。
Ø 开发板的线缆连接状态,如下图:
图1
Ø 引脚对应关系,如下表(基本可视而不见):
图2
Ø 板上供给时钟频率为48Mhz,图像数据16位宽,其中用于红色显示5位,绿色显示6位,蓝色5位;RGB数据权位及排列方式如下:
图3
3、VGA的传说
如同江湖中久远的传说一样,自PC诞生起就有了VGA, VGA全称Video Graphic Array,也叫显示绘图阵列,是逐行扫描的显示制式,其支持的分辨率为640X480,对更高分辨率800X600,称为SVGA (Super VGA)模式;1024X768称为XGA (Extended Graphics Array,扩展图形阵列); Ø VGA时序分行时序和帧(场)时序,两者都包含同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四个部分,图样如下:
图4
Ø 各种分辨率的行场同步时序如表xxxx所示,
图5
还是老样子,更多的知识诸君请百度之。
4、实战VGA之一九宫格色彩
4.1例程烧录
以九宫格形式显示7种色块,开始我们的第一个图形显示测试,本次采用倒叙的手法,先烧录例程中的二进制文件,再解析代码。
该实验通常用来测试图像显示功能是否能实现;该步骤的关键是看是否能产生规定的行场同步时序,即上表所作要求;
Ø 打开例程目录,开启例子工程;将其编译后下载到目标板,操作如下;
图6
Ø 或将编译后生成的.sof文件转换为.jic文件,下载到fpga外挂的flash中;使之可以在再次开电时,自加载代码而不需要电缆下载代码运行;转换方法如下:
图7
Ø 烧录.jic文件方法如下(烧录后,重新开电,fpga即自动加载flash中代码):
图8
Ø 显示效果如图,箭头有点复杂啊,请老手跳过,新手留步;
4.2代码解析
敲字艰难啊,例程就直接图片了啊,下面分段解析vga.v文件代码含义;
² 定义输入输出端口
图9
² 定义几个固定参数
图10
² 调用宏模块(下面会对具体生成作说明)
图11
² 同步信号产生
图12
² 确定哪个区域显示何种数据
图13
Ø 时钟宏模块的生成
因800*600@60hz画面生成所需的点频为40MHz,而输入却是48MHZ,这须要借助fpga内部锁相环,由宏模块管理器完成,具体如下:
² 进入MegaWizard Plug-In Manager宏模块生成窗,如下:
图14
² 选择宏模块类别,并定义模块名称,
图15
² 下一步,进入界面后设置输入时钟
图16
² 下一步,进入界面后清除如图的设置
图17
² 下一步,
图18
² 下一步,
图19
² 下一步,
图20
² 下一步,进入界面后设置输出时钟40mhz
图21
² 连续下一步,跳过c1~c4的时钟输出设置,如下
图22
² 下一步,进入界面
图23
² 是不是下一步烦了,点击finish吧,完成宏模块创建;
图24
Ø 图像显示效果如下图, 宽屏显示器就这效果,谁让咱习惯按4:3做呢,下面的实验中会有改变分辨率的实验,请期待。
图25
5、实战VGA之二渐变色
说实话,有了前面这么详细的讲解,我想,VGA对各位已经不成问题了吧,下面做一个显示器测试常用的实验,对R、G、B进行颜色渐变测试(分单色渐变和混色渐变),在这里该实验的目的,是验证由电阻阵列实现视频Da变换的有效性;而通常这个实验室用了测试显示器的灰度指标。
打开相应例程,下载到目标板上,看到显示器产生效果如下; 代码自己理解,不难的。
图26