横竖屏转换模块设计详细说明

来源:互联网 发布:天勤行情数据怎么样 编辑:程序博客网 时间:2024/05/19 02:24

设计原因:

1、所选的显示屏只支持RGB 480*800的输入,不支持800*480输入;

2、ARM板子的倒车视频信号不能转换成480*800的输出,只能输出800*480;

3、为了能够支持倒车视频信号,故使用FPGA模块进行800*480-->480*800的显示转换。

 

功能要求:

ARM板子输出800*480@60HZ的RGB 565(即16 BIT)信号,经过横竖屏转换模块后,实时输出480*800@60HZ的RGB 565信号到显示屏中正常显示。

本设计采用Altera公司的FPGA芯片EP1C3T144C8N。

 

硬件框图如下所示:

 

 


 

FPGA的软件设计框图如下图所示:

 

 

 各模块介绍:

(1)显示输入采样模块:

 

所谓显示输入采样,就是根据显示的VS, HS, DE, PCLK这几个信号的时序,完整的把RGB56516位数据采样下来。从上图的时序图我们得知,应该在VS, HS, DE这三个信号都为高电平时,在PCLK的下降沿读取DATA

(2)双口RAM采样:

在每一个DE的高电平阶段,LCD数据采样完成后,实际是采得了一场的数据。由于采样的同时LCD需要输出数据显示,所以采用乒乓存储操作,采样的同时读取输出。

把采样Sample_ram分成两部分:RAM0(1024*16bit)和RAM1(1024*16bit)。

在时刻1,采样数据(共有80016bit数据)写入RAM0,同时读出RAM1;

在时刻2,采样数据(共有80016bit数据)写入RAM1,同时读出RAM0;

为了匹配LCDCLKSDRAM的写CLK,写入和读出的CLK分别为i_pclk和160M

……

如此类推。

(3)SDRAM存储转换:

SDRAM同样分成两部分:buf1(800*480*16bit)和buf2(800*480*16bit)。

在时刻1,把从sample_ram读出的800个数据写入buf1,然后再读出buf2;

在时刻2,把从sample_ram读出的800个数据写入buf1,然后再读出buf2;

……

当buf1写满时(即写完了480组,每组80016bit的1LCD数据):

在时刻1,把从sample_ram读出的800个数据写入buf2,然后再读出buf1

在时刻2,把从sample_ram读出的800个数据写入buf2,然后再读出buf1

……

读写SDRAMCLK都为160M

如此类推。

写入时,采用一个一个数据的按列写入方式,每一个DE高电平时刻能写800个数据;

读取时,采用按page读取的方式,此为按行读取,每个DE高电平时刻读480个数据。

一次写入和读出完成时,即把LCD数据由800*480矩阵转换成480*800了。

(4)Handle_ram读写:

为了配合以上的乒乓操作,以及CLK的匹配,Handle_ram也分成两部分:RAM0(512*16bit)和RAM1(512*16bit)。

    在时刻1,把从SDRAM读出的480个数据写入RAM0,同时读出RAM1;

在时刻2,把从SDRAM读出的480个数据写入RAM1,同时读出RAM0

为了匹配LCDCLKSDRAM的写CLK,写入和读出的CLK分别为160Mi_pclk。

……

如此类推。

以上所有操作如下图所示:

    DE信号   

Sample_ram

写(0)

           写(1) 

            写(0) 

               写(1) 

……

CLK取i_pclk

读(1)

读(0) 

读(1) 

读(0) 

……

CLK取160M

SDRAM

写(0)读(1)

写(1)读(0)

写(0)读(1)

写(1)读(0)

……

CLK取160M

Handle_ram

写(0)

写(1) 

写(0) 

写(1) 

……

CLK取160M

读(1)

读(0) 

读(1) 

读(0) 

……

CLK取i_pclk

 

产生的问题:

1、读写SDRAM的时候,只能先写再读,然后会导致写完800*480*16bit数据时,由于SDRAM的矩阵是行数为800,列数为480,理论上要求读800行数据,但其实只读了480行的数据(因为每写一列才能读一行),未读完一帧LCD数据所以会看到拉伸的效果。要彻底解决该问题,应该要使用两片SDRAM才能实现同时读写800*480480*800个数据。

2LCD的显示要独立产生HSDE信号,才能匹配输出显示。

3、由于采样CLK和读写SDRAMCLK不一致,所以使用了双口RAM作为缓存,而且前后都需要,所以选型FPGACPLD芯片时,必须考虑内部RAM足够大。

http://www.zhihu.com/collection/32561360
http://www.zhihu.com/collection/32561437
http://www.zhihu.com/collection/32551354
http://www.zhihu.com/collection/32561237
http://www.zhihu.com/collection/32560258
http://www.zhihu.com/collection/32561306
http://www.zhihu.com/collection/32559688
http://www.zhihu.com/collection/32559626
http://www.zhihu.com/collection/32551401
http://www.zhihu.com/collection/32551139
http://www.zhihu.com/collection/32562145
http://www.zhihu.com/collection/32559809
http://www.zhihu.com/collection/32551240
http://www.zhihu.com/collection/32560096
http://www.zhihu.com/collection/32560038
http://www.zhihu.com/collection/32559906
http://www.zhihu.com/collection/32560038
http://www.zhihu.com/collection/32551283
http://www.zhihu.com/collection/32560320
http://www.zhihu.com/collection/32562054
http://www.zhihu.com/collection/32559582
http://www.zhihu.com/collection/32551073
http://www.zhihu.com/collection/32550576
http://www.zhihu.com/collection/32560365
http://www.zhihu.com/collection/32551929
http://www.zhihu.com/collection/32552008
http://www.zhihu.com/collection/32559864
http://www.zhihu.com/collection/32559734
http://www.zhihu.com/collection/32551181
http://www.zhihu.com/collection/32560407
http://www.zhihu.com/collection/32551969
http://www.zhihu.com/collection/32562013
http://www.zhihu.com/collection/32560473
http://www.zhihu.com/collection/32560186
http://www.zhihu.com/collection/32551833
http://www.zhihu.com/collection/32551779



0 0