OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3573|回复: 1

如何对FPGA上的SDRAM进行“同时读写”?

[复制链接]

66

主题

224

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1349
金钱
1349
注册时间
2018-10-4
在线时间
200 小时
发表于 2019-12-21 20:12:16 | 显示全部楼层 |阅读模式
本帖最后由 潘长青 于 2019-12-21 20:48 编辑

转载自明德扬科教网(http://www.mdy-edu.com/zuixinyuanchuang/2019/1213/649.html
不是打广告,是自己觉得有用就转载了
----------------------------------分割线--------------------------------------
工程中使用过SDRAM的朋友就知道,SDRAM是无法实现同时读写的,今天就跟大家分享一下遇到需要同时读写的问题时如何解决。

一、SDRAM数据总线属性
下图为SDRAM的某一接口时序图,我们可以看到,读和写占用的都是DQ这个数据总线,对于SDRAM来说,只有一根数据总线,那么当我们需要用这根线读取数据的时候,读出来的数据占用了总线,这个时候是必然无法写入数据的,同样的在写数据的时候也无法进行读数据的操作。

二、SDRAM同时读写需求
虽然SDRAM具有不可同时读写的属性,但是在一些项目中需要写入的数据和读出的数据都是连续的。比如在边缘检测的工程中,摄像头一直在传出数据,并且送到VGA的图像数据也不能断,这时我们既要将摄像头传出的数据写到SDRAM,又要从SDRAM读出数据并在VGA显示。因此实际工程中时需要SDRAM同时实现读数据和写数据功能的。

前面我们也分析过SDRAM的接口时序图,明确DQ总线只能进行读数据或者写数据,不能同时进行读写数据,那么如果遇到上述情况,就需要我们在SDRAM固有属性的基础上来解决问题。
1-1912131Q2509B.jpg
三、“伪同时读写”的原理
既然SDRAM的属性不变,那么我们可以在SDRAM时序前面加两个FIFO,SDRAM接口时序和SDRAM硬件之间由一根数据总线DQ相连,如下图所示。
1-1912131Q320495.jpg
FIFO是在FPGA中比较常用的存储器,FIFO写入和读出都由时钟控制,而且可以用不同的时钟,那么当读出的时钟大于写入时钟的时候,我可以一直往里面写,但是由于读出的速率要快,那就不必要一直读,FIFO的深度越深,我就可以等待越多的时间。

上图结构中,设置FIFO左边时钟是25M,右边时钟为100M。写命令和写数据先保存到FIFO1中,读命令保存到FIFO2中,在SDRAM接口时序里面,会判断FIFO1和FIFO2中谁有数据,谁有数据就执行哪个命令;如果都同时有数据,那工程师可以决定一个优先级,选择其中一个命令执行。而没有选中的命令,则保留到FIFO中缓存,等候被选中执行。

简单来讲就是数据都暂时的存在FIFO中,FIFO左边和右边的工作时钟不同,同样一组数据,如果左边读写数据都需要一个时钟,那么右边读写数据就需要四倍时钟即四个时钟。这样一来,看FIFO右侧的接口,永远都是要不就是写,要不就是读,DQ不会被读写同时使用(也就是读写不同时)。而在左侧的接口看来,写命令和读命令是可以同时有效的(也就是读写同时)。

有的朋友会讲,这种方法并不是真正的同时读写呀。其实,能不能同时读写,是在不同的时间精度来看待的。例如右侧的接口,在某一个时钟沿看来,其状态不是读就是写,无法实现读写同时;但如果把时间拉长,例如在1秒的时间内来看,在这一秒钟内既有读数据状态,又有写数据,就会令我们感觉到它是可以同时读和写的。将这样一个结构当作一个整体来看,可以认为实现了SDRAM的同时读写,我们将其称之为“伪同时读写”。

其实这种“伪同时读写”我们还是经常会遇到的。例如电脑CPU,众所周知,它是串行执行指令的,一次只能处理一个指令。但我们在使用电脑时,可以感觉到QQ、浏览器和电影是同时工作的,这也就是时间精度的问题。

四、现实案例
学会了利用FIFO的存储特点来实现“伪同时读写”,我们也就解决了最开始提到的SDRAM在边缘检测中实现同时读写的问题。我们在写侧接收的像素数据在25M时钟域的,在FIFO1的读侧是100M的时钟域,读写速率相差4倍,当FIFO缓存一定量的数据之后,就读出来写到SDRAM中,写完之后,就可以利用FIFO1读写的时间差,来将SDRAM中的数据读出,然后再放到一个写侧时钟100M,读侧时钟25M的FIFO2中,就可以保证FIFO2一直有数据读出,而FIFO1又一直有数据写入。这样以来就实现了摄像头一直采集数据并且一直有数据传输到VGA。
----------------------------------分割线--------------------------------------
知网下载了一篇文章,涉及到了“伪同时读写”SDRAM,附件里有原文和自己的一点分析,没有源码。附件: “伪同时读写”SDRAM实例分析.zip (2.47 MB, 下载次数: 124)
吾虽浪迹天涯 却未迷失本心
欢迎光临我的CSDN博客
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-22 12:37:31 | 显示全部楼层
帮顶                                                      
成功没有捷径
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-21 08:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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