您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术基于FPGA的VGA可移植模块终极设计 正文
基于FPGA的VGA可移植模块终极设计

基于FPGA的VGA可移植模块终极设计

点击数:7525 次   录入时间:03-04 11:40:29   整理:http://www.55dianzi.com   DSP/FPGA技术

  一、VGA的诱惑首先,VGA的驱动,这事,一般的单片机是办不到的;由于FPGA的速度,以及并行的优势,加上可现场配置的优势,VGA的配置,只有俺们FPGA可以胜任,也只有FPGA可以随心所欲地配置(当然ARM也可以,应用比较高吧)。

  初学者就是喜欢看炫的效果,往往会忍不住想玩。尤其玩FPGA的,没玩VGA就感到跟单片机没啥提升,因此VGA的驱动也不得不讲。Bingo当年也是如此。挡不住VGA的诱惑,初学者问Bingo VGA问题的人也是灰常的多,也许一般教科书理论太强,实际应用不是很身后,在此Bingo用浅显易懂的语言来讲述VGA的驱动原理,以及通过设计一个可移植模块的应用来讲述。

  二、VGA驱动原理此处Bingo不参考任何资料,用当年已学的知识,用浅显易懂的语言讲述。

14.jpg

2、VGA时序

VGA其实就是相当于一块芯片,跟单片机驱动IC一样,满足一定的时序,便能驱动起来。

(1)扫描轨迹

VGA的扫描其实很简单,大致轨迹如下所示:

15.jpg

没扫描完一行,从新开始下一行;每扫完一场,重新开始下一场。相信你应该看的懂。

(2)行场扫描

以下是行扫描,场扫描HS,VS时序图

16.jpg

如上如所示:VGA一直在扫描,没一场的扫描包括了若干行扫描,如此循环。

(3)VS时序深入分析

VS时序如下所示:

17.jpg

可见时序的循环,可被划分为a,b,c,d4个时期。这四个时期定义如下:

18.jpg

A~B:场消隐期 即同步,相当于还原扫描坐标吧

B~C:场消隐后肩 相当于准备开始扫描吧

C~D:场显示期 扫描中,数据有效区域

D~E:场消隐前肩 完成扫描,相当于准备同步

(4)HS时序深入分析

可见时序的循环,可被划分为a,b,c,d4个时期。这四个时期定义如下:

A~B:行消隐期 即同步,相当于还原扫描坐标吧

B~C:行消隐后肩 相当于准备开始扫描吧

C~D:行显示期 扫描中,数据有效区域

D~E:行消隐前肩 完成扫描,相当于准备同步

综上描述,我们只要知道每个时期的时间,便可以表示出VGA的时序。而FPGA的工作是由固定频率的时钟触发的,因此某固定时间可以用n次触发来表示。因此我们很容易就想到了FPGA常用的计数方法:比如说行扫描,我们计数0~H_total-1。用另一个进程将其划分为4个时期,安标注分配。其实这相当于状态机。

以下是固定分辨率1024*768 60fps下HS,VS的标准:

19.jpg



www.55dianzi.com

用代码表示4个时期,如下:

// VGA_1024_768_60FPs_65MHz

// Horizontal Parameter( Pixel )

parameter H_DISP  = 11'd1024,

parameter H_FRONT = 11'd24,

parameter H_SYNC  = 11'd136,

parameter H_BACK  = 11'd160,

parameter H_TOTAL = 11'd1344,

// VirtICal Parameter( Line )

parameter V_DISP  = 10'd768,

parameter V_FRONT = 10'd3,

parameter V_SYNC  = 10'd6,

parameter V_BACK  = 10'd29,

parameter V_TOTAL = 10'd806

3、VGA电路

(1)三原色

VGA接口:R,G,B三通道,直接赋给数字信号,RGB,最多产生8种色彩。这是最基本的。电路如下所示:

20.jpg

(2)真彩显示

a) 电阻网络

考虑到成本意识实现的简易方案,用R-2R电阻网络分流模拟DAC替换ADV7123视频转换芯片。见以下几个方案:

21.jpg

DE1 VGA模拟电路

22.jpg



www.55dianzi.com

b) 专用视频转换芯片

利用专用视频转换芯片,ADV7120等,将数字信号转换为VGA RGB的模拟信号。ADV7120为高速D/A芯片,将数字信号转换为模拟信号输给VGA,电路如下:

24.jpg

三、可移植VGA模块设计

Bingo玩VGA也算是比较早了,当年也是视觉的诱惑,以及唯FPGA独尊的优势。于是之后一发而不可收拾。本章Bingo将自己这些年最终优化的VGA驱动模块,发布至此。本模块所有代码均Bingo独家创造,请尊重版权哈。

本设计已经封装成模块,只要修改时序参数、扫描时钟参数以及在vga_display.v中添加显示电路,即可。方便移植,希望对大家有用。

25.jpg

    1、模块划分

    (1)vga_design.v

    工程顶层文件,例化各个模块。

    (2)sys_CTRl.v

    PLL时钟分配电路。

    (3)vga_display.v

    显示电路,根据时序,用于描述VGA的显示电路。

    (4)vga_driver.v

    VGA驱动电路,对时序,状态的约束。

    RTL图如下所示:

26.jpg

    2、代码设计

    Bingo例程以16bit RGB VGA驱动为例,不同位数的显示只要改一下vga_data即可。

    前文以及代码讲述了那么多,此处不再贴完整代码,而是对代码中部分结构进行解析。

    代码下载地址:http://blog.chinaaet.com/detail/21606.html

    (1)vga_driver.v代码分析

    a) 参数例化列表

    #(

    // VGA_1024_768_60FPs_65MHz

    // Horizontal Parameter ( Pixel )

    parameter H_DISP  = 11'd1024,

    parameter H_FRONT = 11'd24,

    parameter H_SYNC  = 11'd136,

    parameter H_BACK  = 11'd160,

    parameter H_TOTAL = 11'd1344,

    // VirtICal Parameter ( Line )

    parameter V_DISP  = 10'd768,

    parameter V_FRONT = 10'd3,

    parameter V_SYNC  = 10'd6,

    parameter V_BACK  = 10'd29,

    parameter V_TOTAL = 10'd806

    )

    这样写的目的是为了软件封装性,能够在例化的时候修改法分辨率,同时电路结构保持不变。

    DISP,FRONT ,SYNC,BACK,TOTAL分别为显示期,消隐前肩,消音期,消隐后肩,总时间,各自对应各自的行场信号。

    b) 行同步信号设计

    //------------------------------------------

    // 行同步信号发生器

    reg [10:0] hcnt;

    always @ (posedge clk_vga or negedge rst_n)

    begin

    if (!rst_n)

    hcnt <= 0;

    else

[1] [2] [3]  下一页


本文关键字:暂无联系方式DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术