集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1823|回复: 5

FPGA 驱动SD DDR HDMI实现数码相框

[复制链接]
zxopenwgb 发表于 2016-12-11 11:09:48 | 显示全部楼层 |阅读模式
vivado2015.1 开发板AC701;
一、准备8张1920*1080的bmp(24位)图,通过PC存入SD卡;
二、通过WinHex软件和计算确定每张图的起始结束地址;
一张1080p 24位图共有数据(1920*1080*3+54=6220854byte),SD卡每次读出512字节(SD卡用简单的SPI模式、读时序用Single Block Read Operation模式),读完一张图需要发送12151次(6220854/512=12150.105),
所以最后一次读的有些空数据。
('d0~'d12150对应'h0~'h5eec(每次加'h2))
每幅图片的起始结束地址分别为:
1.'h00040000~'h0062ec00;
2.'h00630000~'h00c1ec00;
3.'h00c20000~'h0120ec00;
4.'h01210000~'h017fec00;
5.'h01800000~'h01deec00;
6.'h01df0000~'h023dec00;
7.'h023e0000~'h029cec00;
8.'h029d0000~'h02fbec00;
三、SD卡
1、主时钟30M,进行4分频;
2、初始状态:对各种寄存器复位;
3、SD初始化:上电等待74个时钟、发送CMD0(收到响应'h01)、发送CMD1(收到响应'h00,若没有收到'h00,则继续发送CMD1,连续发送200次);若CMD0收到响应'h01,CMD1收到响应'h00,则说明SD初始化成功。
4、初始化成功后,可以开始读写数据。(写数据用做SD卡调试,在实际显示图片时,只用读就可以了),SD卡与DDR之间用FIFO连接,当判断FIFO中少于一定数据时,则从SD卡读数据写入FIFO。
5、读数据:发送读命令、等待命令响应、等待数据包头、接收数据。
四、SD---->DDR FIFO
写数据宽度8、写深度1024、写时钟30M;
读数据宽度64,读深度128、读时钟DDR控制器产生的100M;
五、DDR控制器(IP)
1、开发板上用1GB DDR3 memory SODIMM,共有8颗128MB的芯片
     单颗容量计算:行地址线复用14根,列地址线复位10根,8个BANK,8根数据线,容量为2的14次方*2的10次方*8*8=1Gbit=128MB,8颗共为1GB
2、FPGA与DDR接口处设置为400M(双沿相当于800M),控制线8颗共用,数据线共为64根;
3、控制器输入时钟200M,单端双端都可;
4、控制器产生的用户时钟100M,用户侧位宽512,FPGA与DDR接口处位宽64,时钟800M(100*512=800*64,总流量一致)
六、DDR接口(读写ARBIT)
1、用DDR用户侧的复位信号判断DDR是否可以开始工作(是否初始化完成,是否读写准备就绪);
2、判断FIFO(SD---->DDR)中是否有一定量的数据,进入写状态、发送写命令、写数据,将数据写入DDR;如果8幅图片都已经导入DDR,则可以不用再进行写操作;
3、从DDR读数据给FIFO(DDR---->HDMI)。
七、DDR---->HDMI FIFO
1、写位宽256,写深度64,写时钟100M;
2、读位宽32,读深度512,读时钟150M;
3、当DDR开始工作,并且FIFO中少于一定的数据,则从DDR中读出数据写入FIFO。这里注意:(1)因为DDR读出数据有延迟,要保证不把FIFO写溢出(2)要满足HDMI的输出要求,不能让HDMI空读FIFO
4、添加复位信号,保证FIFO能长时间正常工作。在帧间隔中间,让FIFO复位足够时间,让(1)DDR读取当前帧的地址复位;(2)复位期间不再向DDR发送读命令;(3)FIFO复位(各指针复位)
八、HDMI输出
1、IIC配置ADV7511芯片(要先配置IIC BUS SWITCH芯片)
2、ADV7511配置信息:
     addr          value
   'h41   -->  'h10(all circuit powered up)
     'h15   -->  'h00(低4bit,输出数据模式为24 bit RGB 4:4:4,独立的同步信号)
     'h16   -->  'h30(输出数据位宽为8bit)
     'h17   -->  'h02(输出比例16:9=1920:1080)
     'h98   -->  'h03(固定值)
     'h9a   -->  'he0(固定值)
     'h9c   -->  'h30(固定值)
     'h9d   -->  'h61(输入时钟不分频,其它位固定值)
     'ha2   -->  'ha4(固定值)
     'ha3   -->  'ha4(固定值)
     'he0   -->  'hd0(固定值)
     'hf9    -->  'h00
     'haf    -->  'h04(Disenable HDCP Frame Encryption, DVI模式)
3、IIC读用来调试,在正常使用时不用读;
4、用两个计数器产生同步信号,共1125行,在1112行时产生一行时间的复位信号,复位FIFO(DDR-->HDMI)和DDR读取当前帧地址;
    在1120行读取54字节的BMP文件头信息,读13次,每次读4个字节,读取52字节,还有2个字节跟有效数据一起读出;
5、从FIFO中一次读出4个字节,HDMI一次送出3个字节(RGB),所以HDMI每发送4次只需要从FIFO读取3次。
      
  
雷磊 发表于 2021-8-13 16:20:50 | 显示全部楼层
FPGA 驱动SD DDR HDMI实现数码相框
zxw123 发表于 2021-8-13 17:39:53 | 显示全部楼层
FPGA 驱动SD DDR HDMI实现数码相框
LYF 发表于 2021-8-18 16:30:21 | 显示全部楼层
FPGA 驱动SD DDR HDMI实现数码相框
雷磊 发表于 2021-8-24 15:30:27 | 显示全部楼层
FPGA 驱动SD DDR HDMI实现数码相框
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-2 18:34 , Processed in 0.066765 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表