横竖屏转换模块设计详细说明
来源:互联网 发布:天勤行情数据怎么样 编辑:程序博客网 时间: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这几个信号的时序,完整的把RGB565的16位数据采样下来。从上图的时序图我们得知,应该在VS, HS, DE这三个信号都为高电平时,在PCLK的下降沿读取DATA。
(2)双口RAM采样:
在每一个DE的高电平阶段,LCD数据采样完成后,实际是采得了一场的数据。由于采样的同时LCD需要输出数据显示,所以采用乒乓存储操作,采样的同时读取输出。
把采样Sample_ram分成两部分:RAM0(1024*16bit)和RAM1(1024*16bit)。
在时刻1,采样数据(共有800个16bit数据)写入RAM0,同时读出RAM1;
在时刻2,采样数据(共有800个16bit数据)写入RAM1,同时读出RAM0;
为了匹配LCD的CLK和SDRAM的写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组,每组800个16bit的1帧LCD数据):
在时刻1,把从sample_ram读出的800个数据写入buf2,然后再读出buf1;
在时刻2,把从sample_ram读出的800个数据写入buf2,然后再读出buf1;
……
读写SDRAM的CLK都为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;
为了匹配LCD的CLK和SDRAM的写CLK,写入和读出的CLK分别为160M和i_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*480和480*800个数据。
2、LCD的显示要独立产生HS和DE信号,才能匹配输出显示。
3、由于采样CLK和读写SDRAM的CLK不一致,所以使用了双口RAM作为缓存,而且前后都需要,所以选型FPGA或CPLD芯片时,必须考虑内部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
- 横竖屏转换模块设计详细说明
- 横竖屏转换模块设计详细说明
- iPhone横竖屏转换
- android 横竖屏转换
- 日程表详细设计说明
- qt的横竖屏转换
- ios 6 横竖屏转换
- iOS6横竖屏转换显示
- 横竖屏转换(onConfigurationChanged)
- ios 6 横竖屏转换
- iOS横竖屏转换问题
- 交互设计详细说明文档
- 变频模块的详细设计
- wifi模块详细说明及linux驱动
- ATK-HC05蓝牙模块的详细说明
- SAE导入第三方模块详细说明
- 横竖屏转换的异常处理 ClassCastException
- android 禁止横竖屏转换的问题
- xcode 常见编译参数
- java socket
- csrf的基本介绍
- 【MFC】CMSComm 控件串口编程
- [屌丝PM]长跑与小步快走的魔力
- 横竖屏转换模块设计详细说明
- 勿忘你
- 快速排序(QuickSort)
- 获取经纬度api使用心得【对比百度,谷歌地图API】
- 分享8年开发经验,浅谈个人发展经历,明确自己发展方向
- 使用开源库 Objective-C RegEx Categories 处理正则表达式
- web socket
- 冒泡排序、快速排序
- 【NYOJ 14】