数码相框各模块时钟流详解

主要由sd卡模块、输入异步FIFO、SDRAM、输出异步FIFO、单口RAM、VGA模块组成。

1.sd卡模块:采用SPI模式读取SD卡中的数据,SPI工作在25Mhz(每bit),那么一字节需要多久?差不多是25M/8=3.125Mhz,这样的速度拿去在VGA(40~50Mhz)显示是远远不够的,因此需要用到下边的异步FIFO以及SDRAM。

2.输入异步FIFO模块:既然是异步,就得两个时钟,那么两个时钟分别是多少呢?和SD卡的接口,我认为只要大于3.125Mhz就可以了,因为SPI协议是串行按位读,可以在成功读取一个字节时,发送使能写FIFO的信号,这样,只要这个时钟大于3.125Mhz,都是可以顺利写入FIFO的。另外一个和SDRAM接口的clk需要多大时钟?根据SDRAM定的,100M就可以了。关于此FIFO需要注意的是,什么时候开始往SDRAM写,也就是读使能呢?可以根据FIFO已使用量来判断,若大于或等于512字节(对于列宽度为9的SDRAM,页模式可访问的长度是512个16bit数据,也就是一行的长度column[8:0]。)则发出写SDRAM使能,如此变可以将所有数据写入SDRAM。

3.SDRAM模块:这个就是Verilog控制SDRAM时序了,先留着。

4.输出异步FIFO:输入clk,毫无疑问和SDRAM一致,100M的。输出clk,由于输出是直接和单口ram相接的,所以也应是50M。什么时候读出数据呢?当VGA模块已经同步到x,y的显示区域时,使能读FIFO。

5.单口RAM模块:采用50Mclk,前边已经提到,SPI输出一字节是3.125M,为什么单口RAM可以跑50M呢?答案和上面红色字体一样,可以在色彩表数据成功锁存后,使能一个周期的wr_ram,这样,可以将数据写入ram。这一句:else if((cnt78 < 11'd1078) && wrf_wrreq) cnt78 <= cnt78+1'b1;仅在写FIFO一个周期信号有效时,cnt78才会加一,环环相扣,很是巧妙,,;又因为,色彩表数据存放在SD卡数据的前方(较之图像数据),因此完全保证了,后期译码时,ram中色彩表已经准备好。什么时候读ram?VGA计数到显示区域时,就会使能输出FIFO,数据输出,然后进入ram,然后进入VGA,从而完成图像的显示。

6.VGA模块:VGA显示是一个不断刷新的过程,x从0计数到行尾,伴随着y从0计数到列尾,因此是一个周而复始的读数据的过程。VGA模块时钟频率是这么计算的,比如800*600@72Hz,那么时钟频率约为:1040*666*72=49870080约50M,1040和666是这种格式的帧长。

原文地址:https://www.cnblogs.com/fkl523/p/4075271.html