一、概述

要实现整个视频图像采集系统,我们分成了六大步骤:

二、VGA接口、时序及驱动电路

1、VGA接口

VGA:Video Graphics

Array视频图像阵列,VGA的主要作用是通过将计算机显卡处理的视频图像实时传输到显示器上进行显示。VGA接口采用十五针的D型接口,分为三排,每排五个,接口分为公头和母头,编号顺序为公头从左到右,母头从右到左。

VGA接口信号定义:

编号

名称

描述

1

RED

红基色信号输入

2

GREEN

绿基色信号输入

3

BLUE

蓝基色信号输入

4

ID bit

地址码(或ID2)

5

Self_Test

自测试信号(可自定义)

6

RGND

红基色信号接地

7

GGND

绿基色信号接地

8

BGND

蓝基色信号接地

9

RESERVED

保留(可自定义)

10

SGND

数字信号地

11

ID0

显示器标志位0

12

ID1

显示器标志位1

13

HSYNC

行同步信号

14

VSYNC

场同步信号

15

ID3

显示器标志位3

在发展初期,显示屏为CRT,彩色信号的输入为模拟信号传输,模拟电压门限为0~0.714V。其中0V代表无色,0.714V代表满色。为了满足VGA接口的模拟传输要求,显卡必须通过DAC转换。

随后生产的LCD显示器为数字显示设备,但为了实现接口的一致性,在显示器内部设计了ADC电路,以集成VGA接口。这样的缺点是经过两次数模转换造成图像的细节损失。

之后产生了DVI(Digital Visual Interface)接口来支持数字信号的传输。以及HDMI接口标准实现高清传输。

2、VGA时序分析

(1)

关闭显示:同步扫描枪坐标。

(2)

打开显示:扫描坐标从显示器的左上角开始,逐个像素向右扫描。(第一个水平向右的箭头)

(3)

关闭显示:扫描到第一行最右边,关闭显示,同时扫描坐标移到第二行首(虚线)。

(4)

打开显示从第二行左上角开始,逐个向右扫描。

(5)

当扫描到显示器右下角时,扫描抢从先转移到显示器左上角。

(1)(5)称为场同步,(3)称为行同步,其他过程正常显示。

一个完整行的扫描周期由a、b、c、d四个部分组成,a(行同步)代表进行行扫描地址的复位,b(行消隐后肩)代表扫描地址转移后的稳定等待期,c(行显示时期)代表行显示期,此时数据正常输出,d(行消隐前肩)代表扫描地址转移的准备。场扫描与行扫描时序是类似的,但场扫描周期是以行扫描周期为单位的。比如以640*480@60Hz为例,640*480为屏幕每行有640个像素点,每列有480个像素点,60Hz为每秒屏幕刷新60次。根据行场刷新频率表:

分辨率

时钟

(MHz)

行时序

场时序

a

b

c

d

e

a

b

c

d

e

640*480@60Hz

25.175

96

48

640

16

800

2

33

480

10

525

800*600@60Hz

50

120

64

800

56

1040

6

23

600

37

666

1024*768@60Hz

65

136

160

1024

24

1344

6

29

768

3

806

1280*1024@60Hz

108

112

248

1280

48

1688

3

38

1024

1

1066

1600*1200@60Hz

162

192

304

1600

64

2160

3

46

1200

1

1250

1920*1200@60Hz

193.16

208

336

1920

128

2592

3

38

1200

1

1242

行时序一共有800个像素周期,场时序一共有525个行周期,那么:

行频率:525*60=31500Hz=31.5KHz

点频率:525*60*800=25.2MHz

3、RGB三原色模型

饱和度均为100%的RGB三原色能组合成8种颜色,每个颜色通道也可以细分为256级别(RGB888),不同级别的颜色可以综合出256*256*256种颜色,在VGA中0~0.714V分别对应0~255级深度,这样,每个像素需要24位的数据来表示。为了节约带宽,可以使用RGB565来表示一个像素,16位刚好更适用于16位宽的存储器。

4、VGA硬件驱动电路设计

FPGA的IO输出为3.3V或0V代表高低电平,而VGA要求0~0.714V模拟信号,故需要设计数模转换功能。HSYNC和VSYNC为3.3V数字信号,直接可以和FPGA相连。主要有两种电平转换方式:

(1)R-2R电阻模拟

(2)DAC芯片ADV7123,其原理图和引脚功能如下:

Pin

No

Name

Function

1-10

G9-G0

RGB十位输入,不需要的可以接地

14-23

B9-B0

39-48

R9-R0

11

BLANK

当输入为低电平时,输入的RGB被忽略

12

SYNC

同步补偿信号

13,29,30

Vaa

模拟电压输入

24

CLOCK

输入时钟,大小通常为点频率

25,26

GND

接地

27,31,33

IOB,IOG,IOR

差分RGB输出信号,不使用的话接地

28,32,34

IOB,IOG,IOR

RGB输出信号

35

COMP

补偿,接0.1uF电容到Vaa

36

Vref

参考电压,接0.1uF电容到Vaa

37

Rset

连接下拉不同阻值下拉电阻来满足一定的输出电流

38

PSAVE

电源节能控制,接高电平开启

三、VGA驱动的FPGA实现

lcd_driver模块的编写:

端口名

位宽

输入/输出

说明

clk

1

input

全局时钟信号(50MHz)

rst_n

1

input

全局复位信号,低电平有效

lcd_data

24

Input

图像数据输入信号

lcd_dclk

1

output

ADC7123像素时钟输入

lcd_blank

1

output

ADV7123显示空白输入

lcd_sync

1

output

ADV7123显示同步引脚(可始终低)

lcd_hs

1

output

VGA行同步信号

lcd_vs

1

output

VGA场同步信号

lcd_en

1

output

ADV7123

lcd_rgb

24

output

ADV7123数字端输入信号

lcd_request

1

output

图像数据请求信号(提前一个时钟)

lcd_xpos

11

output

图像列地址信号(提前一个时钟)

lcd_ypos

11

output

图像行地址输出信号

(1)

设定640*480@60Hz分辨率的宏定义参数

//640*480@60Hz VGA

Timing

//这里定义为10位宽,因为记数到800,转换成16进制为320,即1100100000

`define H_FRONT 10'd16

`define H_SYNC 10'd96

`define H_BACK 10'd48

`define H_DISP 10'640

`define H_TOTAL 10'd800

`define V_FRONT 10'd10

`define V_SYNC 10'd2

`define V_BACK 10'd33

`define V_DISP 10'd480

`define V_TOTAL 10'd525

(2)行、场扫描记数单位:所有的信号包括使能信号、用户接口都以此参考生成的。

//h_sync counter

reg [9:0] h_cnt;

always@(posedge clk or

negedge rst_n)

begin

if(!rst_n)

h_cnt <=10'd0;

else

begin

if(h_cnt ==`H_TOTAL-1'b1)

h_cnt <=10'd0;

else

h_cnt <=h_cnt +1'b1;

end

end

assign lcd_hs=(h_cnt <=`H_SYNC-1'b1)?1'b0:1'b1;//生成行同步信号

//v_sync counter

reg [9:0] v_cnt;

always@(posedge clk or

negedge rst_n)

begin

if(!rst_n)

v_cnt <=10'b0;

else if(h_cnt==`H_TOTAL-1)

begin

if(v_cnt ==`V_TOTAL-1'b1)

v_cnt <=10'b0;

else

v_cnt <=v_cnt+1'b1;

end

else

v_cnt <=v_cnt;

end

assign lcd_vs=(v_cnt <=`V_SYNC-1'b1)?1'b0;1'b1;//生成场同步信号

(3)ADV7123控制信号

//ADV7123

assign lcd_dclk=clk;

assign lcd_blank=lcd_hs&lcd_vs;

assign lcd_sync=1'b0;

lcd_blank作为显示空白信号,低电平有效,此时RGB输入都将被忽略。设定为场同步之外的时刻。lcd_sync不需要,直接接地。

(4)数据的使能信号

//data out

assign lcd_en=(h_cnt>=`H_SYNC+`H_BACK&&

h_cnt

(v_cnt>=`V_SYNC+`V_BACK&&

v_cnt

assign lcd_rgb=lcd_en?lcd_data:24'h000_000;

只有在行、场显示有效时间,数据才能有效的输出,当lcd_en有效时,接收外部输入的RGB数据作为VGA驱动模块的输出,同时作为ADV7123的数据输入。

(5)用户控制信号接口

//user interface

localparam H_AHEAD=1;

assign lcd_request=(h_cnt>=`H_SYNC+`H_BACK-H_AHEAD&&

h_cnt

(v_cnt>=`V_SYNC+`V_BACK&&

v_cnt

assign lcd_xpos=lcd_request?(h_cnt-(`H_SYNC+`H_BACK-H_AHEAD)):10'd0;

assign lcd_ypos=lcd_request?(v_cnt-(`V_SYNC+`V_BACK)):10'd0;

这里要深刻理解一下,lcd_request相当于提前了一个是时钟的lcd_en,在v_cnt中不能减去H_AHEAD,因为如果这样,lcd_request在场有效的前一个时钟内也会有高电平的出现,而这是不允许的。

以lcd_request信号为使能是为了保证lcd_xpos和lcd_ypos信号的正确时序,这样lcd_xpos最早只能在行显示期的前一时刻出现,同时也保证lcd_ypos是在场有效期内出现。lcd_xpos相对于h_cnt的对应坐标永远都提前了一个单位,这样通过非阻塞赋值,数据会在下一个时刻输出,刚好对应相应的lcd_en,也就是在相应的行显示期内。

这里同样lcd_ypos没有减去H_AHEAD,仔细想一想,记住场都是以行周期为单位的。

lcd_display模块的编写:

建立lcd_display模块,作为lcd_driver的图像输入源,通过对lcd_xpos和lcd_ypos坐标的判断,来实现固定区域图像的输入。

端口名

位宽

输入输出

说明

clk

1

input

全局时钟信号(50MHz)

rst_n

1

input

全局复位信号

lcd_xpos

10

input

图像列地址(提前一个时钟)

lcd_ypos

10

input

图像行地址

lcd_data

24

output

图像输出信号

(1)

宏定义8种颜色

//define the

color

`define

RED 24'hFF0000

`define

GREEN 24'h00FF00

`define

BLUE 24'h0000FF

`define WHITE

24'hFFFFFF

`define BLACK

24'h000000

`define

YELLOW 24'hFFFF00

`define

CYAN 24'hFF00FF

`define ROYAL

24'h00FFFF

(2)

根据输入的行、列地址,输出8色彩条

always@(posedge clk or

negedge rst_n)

begin

if(!rst_n)

lcd_data <=24'h0;

else

if(lcd_xpos>=0&&lcd_xpos

lcd_data <=`RED;

else

if(lcd_xpos>(`H_DISP/8)*1&&lcd_xpos

lcd_data <=`GREEN;

else

if(lcd_xpos>(`H_DISP/8)*2&&lcd_xpos

lcd_data <=`BLUE;

else

if(lcd_xpos>(`H_DISP/8)*3&&lcd_xpos

lcd_data <=`WHITE;

else

if(lcd_xpos>(`H_DISP/8)*4&&lcd_xpos

lcd_data <=`BLACK;

else

if(lcd_xpos>(`H_DISP/8)*5&&lcd_xpos

lcd_data <=`YELLOW;

else

if(lcd_xpos>(`H_DISP/8)*6&&lcd_xpos

lcd_data <=`CYAN;

else

lcd_data <=`ROYAL;

end

最后设计顶层文件,得到的仿真结果如下:

fpga驱动rgb液晶屏_[转载]基于FPGA的VGA驱动显示相关推荐

  1. fpga驱动rgb液晶屏_以ARM+FPGA结构驱动高分辨率液晶显示设计与效果测试

    摘 要: 结合ARM操作灵活和FPGA实时处理的优点,提出采用ARM+FPGA结构驱动高分辨率RGB888液晶显示屏.ARM接口丰富.操作灵活可以满足客户操作方便的需求:FPGA模块采用FPGA+DD ...

  2. fpga驱动rgb液晶屏_正点原子开拓者FPGA开发板资料连载第五十四章基于的数字识别实验...

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

  3. fpga驱动rgb液晶屏_用FPGA设计LCD 转 VGA 其实vga和lcd驱动 非常类似

    这个东西其实是在上一个冬天就做完了,而且似乎已经产业化了,当时是为一位朋友做的,这个朋友再卖给产业化的人,就像流于俗套的故事一样,这个朋友拿到了钱,不过不像项目开始时说的那样与我有关.想想多年前一起吃 ...

  4. MCU驱动和RGB驱动的液晶屏的区别

    概况来讲,RGB驱动需要的硬件条件高,比如用STM32F429的LTDC+DMA2D模块,外加SDRAM作为显存.而MCU接口,STM32F407系列的控制器就整合了这个模块,包含6800和8080两 ...

  5. ESP32驱动LCD液晶屏选型、262K什么意思?SPI写LCD的GRAM时序、MCU液晶屏驱动IC的寄存器功能

    最近转战ESP32,ESP32-D0WDQ6 型号的GPIO只有那么20个左右,且还有几个GPIO只能做输入,非常捉襟见肘.所以如果要驱动LCD液晶屏,绝大多数都会选择SPI接口的MCU屏. 为了编写 ...

  6. 单通道驱动LVDS驱动1080P液晶屏

    上周末把单通道LVDS驱动1080P液晶屏调通了.通过FPGA接收单8的LVDS输入,内部一个倍频,数据组合格式如下:

  7. STM32F103软件模拟SPI接口驱动ILI9486液晶屏

    STM32F103软件模拟SPI接口驱动ILI9486液晶屏 ILI9486的工作模式 ILI9486的SPI总线方式简介 ILI9486的3线SPI总线底层驱动配置步骤 ILI9486的工作模式 I ...

  8. arduino下载库出错_arduino的I2C通讯 3:驱动1602液晶屏

    上个推送,我们学习了I2C功能的基础知识.而且知道了使用很多器件都需要安装库.本次,我们一起来做一个实例,用arduino驱动1602液晶屏 1602代表屏幕有16列,2行.传统的驱动方式占用了大量的 ...

  9. 通过 I2C 驱动 LCD1602 液晶屏(51单片机)

    通过 I2C 驱动 LCD1602 液晶屏(51单片机) 硬件实物 原理图 3.程序 #include <reg51.h> #include <intrins.h>#defin ...

  10. stm32 arduino 驱动jlx液晶屏

    stm32 arduino 驱动jlx液晶屏 1.说明 单片机这次用的是STM32F103C8T6,烧成arduino用,库还是我们的老朋友u8g2.液晶屏型号是JLX 240160G-676,SPI ...

最新文章

  1. 文档相似度之doc2vec、文档聚类
  2. 牛客小白月赛25 补题+题解[A-J]
  3. linux和windows双系统引导,windows和linux双系统引导问题
  4. 拿什么留住你,我的程序员
  5. kali linux 安装 Mysql Can‘t read from messagefile 报错解决方案
  6. 禄露禄露碌脛脥炉脛锚,学者批时下宫廷戏“就是一堆文化垃圾”
  7. dz seo插件_河北seo优化网络推广报价单
  8. JAVA_WEB--jsp语法
  9. java批量处理数据库语句_Java项目中调用bat批处理进行多用户数据库备份
  10. oracle中的(+)
  11. 两个企业级产品设计思路:流程效率指标功能生命周期长度
  12. java 自动生成mybatis文件_如何自动生成Mybatis的Mapper文件详解
  13. PHP学习总结(10)——PHP入门篇之自定义网站根目录
  14. 题解报告:hdu 1754 I Hate It(线段树)
  15. 判断目录下的文件是否为图片
  16. 报童问题模型matlab,报童模型matlab
  17. Nodejs 下载安装步骤(Windows环境)
  18. APK大小查看、定义、反编译、如何安装解压
  19. WPS国际版2019 中文
  20. 机房管理制度(试行)

热门文章

  1. 大屯公司办公系统服务器地址,OA系统地址
  2. 微信小程序打卡签到页面(有效果图)
  3. 小工具--浏览器主页被挟持,svchost.exe占用网速,treeSizeFree,桌面日历,WIN自带哈希校验
  4. 逆水寒服务器什么时候能维护好,逆水寒11月22日更新维护公告 逆水寒更新到什么时候...
  5. 如何设置Google浏览器支持跨域
  6. Position Based Dynamics【译】
  7. FusionAccess模板制作并发放
  8. 工作站 服务器 监控系统,电网工作站智能安全监控系统的设计与实现
  9. Word 公式编辑器: 公式居中,编号居右,带章节号自动更新,且可以交叉引用
  10. 听说你也想修改IP归属地?