VGA成像原理与时序详解

VGA、RGBTFT、HDMI 显示,VGA是最基础的

在基于FPGA的数字系统设计中,VGA显示实验是一个大家绕不开的话题,毕竟使用FPGA就能驱动平常只有电脑才能驱动的大型显示器,相较于普通的MCU一般只能点亮普通的低分辨率小尺寸LCD液晶屏,驱动VGA显示器显得更加令人感兴趣。

然而事实上,使用FPGA驱动VGA显示器在指定位置显示某一指定颜色并不难,一个具有基本的FPGA逻辑设计能力的人在了解了VGA驱动时序后,大概半个小时就能写出一个易用的VGA控制器,相较于使用小尺寸MCU接口的LCD液晶屏需要查阅一大堆的寄存器来配置其工作模式。显然VGA控制器的开发难度要小的很多。

其次从功能应用来说,使用FPGA驱动VGA显示器显示复杂多变的图案就显得异常的麻烦了。不仅开发周期长,而且灵活性很低。不适合用来显示人机交互类的图案(所谓人机交互类图案就是指各种多变的文字信息,以及按钮信息等)。

使用FPGA驱动VGA虽然不适合用来显示复杂多变的图像内容,但是却常用于显示实时图像内容,例如显示图像传感器实时采集到的图像。此种方式数据流由图像传感器实时提供,FPGA只需要控制好图像数据流的存储和传输即可,无需主动生成需要绘制的图像数据,所以实现相对简单。

鉴于当前基于FPGA的图像处理是一个非常热门的应用方向,而在图像处理中,通过显示器实时查看显示内容属于必备功能,因此本节将详细介绍VGA时序及在FPGA中实现VGA控制器的方法。

VGA显示器成像原理

行消隐
行同步
场同步
场消隐


VGA控制器设计思路

了解了整个VGA扫描时序的详细参数之后

只需要输出 HS、VS、BLK、DATA (RGB三种颜色的分量)。
需要找到各个信号或者数据的时间节点。
行同步脉冲开始位置,HS_Begin = 0 (640*480 分辨率)
行同步脉冲的结束位置 HS_End = 96 (pclk)
行数据开始输出的位置 Hdata_begin = 96 + 40 + 8
行数据停止输出的位置 Hdata_end = 96 + 40 + 8 + 640
行同步信号的结束位置 Hsyns_End = 96 + 40 + 8 + 640 + 8 + 8

场同步脉冲的开始位置 VS_Begin = 0
场同步脉冲的结束位置 VS_End = 2(line )
场数据开始输出的位置 Vdata_begin = 2 + 25 + 8
场数据停止输出的位置 Vdata_end = 2 + 25 + 8 + 480
场同步信号的结束位置 Vsyns_End = 2 + 25 + 8 + 480 + 2 + 8

VGA_CTRL.v

module VGA_CTRL(Clk,Reset,VGA_HS,VGA_VS,VGA_BLK,VGA_RGB,Data);input Clk;input Reset;output reg VGA_HS;output reg VGA_VS;output VGA_BLK;output [23:0]VGA_RGB; // R[7:0] G[7:0] B[7:0]localparam Hsync_End = 800;localparam HS_End = 96;localparam Vsync_End = 525;localparam VS_End = 2;localparam Hdat_Begin = 144;localparam Hdat_End = 784;localparam Vdat_Begin = 35;localparam Vdat_End = 515;reg [9:0]hcnt;always@(posedge Clk or negedge Reset)if(!Reset)hcnt <= 0;else if(hcnt == Hsync_End - 1)hcnt <= 0;elsehcnt <= hcnt + 1'b1;// 对于我们的HS信号// assign VGA_HS = (hcnt < HS_End - 1'd1)?0:1;//  可以改成时序逻辑,更合理   VGA_VS 同理always@(posedge Clk)VGA_HS <= (hcnt < ES_End - 1'd1)?0:1;reg [9:0]vcnt;always@(posedge Clk or negedge Reset)if(!Reset)vcnt <= 0;else if(hcnt == Hsync_End - 1) beginif(vcnt >= Vsyns_End - 1)vcnt <= 0;elsevcnt <= vcnt + 1'd1;endassign VGA_VS = (vcnt < VS_End - 1'd1) ?0:1;// Blk 信号,表示数据输出的时间段,也可以改成时序逻辑assign VGA_BLK = (hcnt >= Hdat_begin - 1) && (hcnt < Hdat_End - 1) && (vcnt >= Vdat_Begin - 1 && (vcnt < Vdat_End))?1:0;// 可以assign VGA_RGB = VGA_BLK?Data:0;endmodule  

测试 testbench

module VGA_CRTL_tb;reg Clk;reg Reset;reg [23:0] Data;wire VGA_HS;wire_VGA_VS;wire [23:0]VGA_RGB;VGA_CTRL VGA_CTRL(Clk,Reset,Data,VGA_HS,VGA_VS,VGA_BLK,VGA_RGB);initial Clk = 1;always #20 Clk = ~Clk;// HS 的变化位置// VS 的变化位置// 待显示数据和HS、VS的位置关系initial begin Reset = 0;// Data = 0;#201;Reset = 1;#20000000;$stopendalways@(posedge Clk or negedge Reset)if(!Reset)Data <= 0;else if(!VGA_BLK)Data <= Data;else Data <= Data + 1'd1;endmodule

然后调试:需要不断的找bug,修改源代码

多分辨率适配的VGA控制器

改一下得到一个新的文件,学习条件语法来进行编译

条件编译和条件控制语句有本质的区别,条件编译:根据不同的条件来选择对应的HDL文件进行编译以得到对应的逻辑电路。

if a

cntmax = 256
elseif b

cntmax = 618
else

endif

修改如下:
决定分辨率的是这几个参数:

vga_parameter.v

然后控制器的内容要进行改写:
·include “vga_parameter.v”

位宽最好都设计成12位的

通过条件编译来适配,多分辨率编译器

重温FPGA开发32相关推荐

  1. 重温FPGA开发29

    DDS的FPGA实现 补充一下相位控制字,下面的相位就是-90°,改变相位就是给ROM的地址取一个偏移量即可. 首先创建工程: DDS_Module.v module DDS_Module(Clk,R ...

  2. html抽奖源码_开源FPGA开发板OpenICE 介绍及抽奖

    首先呢,先强调一遍,我做板子不是为了挣钱,因为国内目前的形式比较严峻,只是为了体验一下开源的工具和环境,也为了后人能对FPGA有个新的认识,所以不会触碰到任何人的蛋糕. 本来今天不准备发文了,还是熬夜 ...

  3. 【正点原子FPGA连载】第三十九章OV7725摄像头RGB-LCD显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  4. 【正点原子FPGA连载】第一章 ZYNQ简介 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  5. 芯片设计:FPGA开发学习

    文章目录 1.课程准备 1.1 FPGA概论 2.2 了解FPGA的开发流程 2.3 下载并安装Quartus/modelsiam和GVIM软件 2.Verilog语言学习 2.1 [第四课]:硬件描 ...

  6. 频谱仪的更改ip_【正点原子FPGA连载】第五十一章 基于FFT IP核的音频频谱仪-摘自【正点原子】开拓者 FPGA 开发指南 (amobbs.com 阿莫电子论坛)...

    本帖最后由 正点原子 于 2020-10-24 15:19 编辑 203429z6c3os33t8albi33.png (66.36 KB) 2019-7-28 15:14 上传 第五十一章 基于FF ...

  7. 【正点原子FPGA连载】 第七章 Verilog HDL语法 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  8. 开源FPGA开发板-OpenICE 介绍及抽奖

    首先呢,先强调一遍,我做板子不是为了挣钱,因为国内目前的形式比较严峻,只是为了体验一下开源的工具和环境,也为了后人能对FPGA有个新的认识,所以不会触碰到任何人的蛋糕. 本来今天不准备发文了,还是熬夜 ...

  9. 异步fifo_正点原子开拓者FPGA开发板资料连载第十五章 IP核之FIFO实验

    1)实验平台:正点原子开拓者FPGA 开发板 2)摘自<开拓者FPGA开发指南>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载地址:http://www.o ...

最新文章

  1. 解析SharedPreferences
  2. python怎么导入txt文件夹-python读取一个目录下所有txt里面的内容方法
  3. 安卓手机如何解压缩文件
  4. [ACTF新生赛2020]fungame
  5. 【直播回放】60分钟剖析GAN如何用于人脸的各种算法
  6. python手机端编程环境_移动端自动化测试解决方案(Appium + Python) - (1) 环境搭建...
  7. (转载)Unity真机调试
  8. Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)
  9. LINQ - 對付 SQL Injection 的 免費補洞策略 (转)
  10. IOS 修改UIAlertController的按钮标题的字体颜色,字号,内容
  11. jQuery Mobile动态刷新页面样式
  12. dojo.declare
  13. 现代质量管理方法的应用思考和实践
  14. 【转载】Jquery中的$命名冲突的解决方案
  15. 300多分学计算机去哪个学校,300分能上什么大学 2021年300分左右的学校
  16. Win10注册.bat或.exe成为系统服务(NSSM)
  17. 谁更胜一筹?技德Remix VS 凤凰OS
  18. 【Windows】打印机0x0000011b解决办法
  19. 【R语言】GARCH模型的应用
  20. MySql安装 Staring the server出错

热门文章

  1. windows11,java最详细安装jdk,手把手教你安装jdk,配置环境变量
  2. VUE酒店日期选择,时间段选择插件vue-mobile-calendar使用
  3. 【学习番外篇】Firefly ROC-RK3328-CC刷Ubuntu18.04+VNC
  4. epub文件是什么文件?如何用安卓手机打开?
  5. 5 分钟,使用内网穿透快速实现远程手机桌面!
  6. resultFul请求案例
  7. 比如像我这种人,就不适合恋爱
  8. 不要一个人吃饭---人脉就是钱脉
  9. javascript玩转ElasticSearch(一)
  10. beautifulsoup菜鸟教程