SDRAM读写速率
最近在写ADC采集程序,将ADC采集的数据存储至SDRAM中去,参考黑金的SDRAM程序写的。我使用的ADC是20Msps的,所以每个数据是50ns的占留时间。SDRAM使用的是100MHZ,这个是SDRAM的操作时钟频率,但是不知道读写一个数据SDRAM要花多少个时钟呢??应该这个就是SDRAM的读写速率吧。
我用modlesim做了一下仿真,使用的是黑金的程序,如图所示。从isRead有效到Done_Signal有效,读一个数据完毕,所花的时间是110ns.感觉时间太长了,这里面包含了发送行列地址,读操作等指令。。不知道我这个测量的方式是否正确??
我想这个问题应该蛮多人想知道吧,这数据采集里面,就是怕ADC采集速率和存储速率匹配不上,导致数据丢失的情况,希望知道的可以讲讲里面的知识。 {:sweat:}怎么没有人回复呢??哎
LZ你想多了吧,AD采样数据110ns存一个,用不着吧,一秒都快 这个情况需要用位宽换取速度,SDRAM使用16位宽或32位宽的可以满足要求,SDRAM随机读写速度很慢 随机读写是sdram的软肋 FIFO搞到SDRAM1页深度时突发一次写,100MHz时钟,大约6us左右512个地址 NJ8888 发表于 2013-7-30 16:18 static/image/common/back.gif
FIFO搞到SDRAM1页深度时突发一次写,100MHz时钟,大约6us左右512个地址
O(∩_∩)O哈哈~,你这个方法非常的好,很有远见。{:handshake:}
你有verilogSDRAM猝发读写的程序不??希望可以参考一下,谢谢。 skycomm 发表于 2013-7-30 16:13 static/image/common/back.gif
随机读写是sdram的软肋
对呀,我也这么觉得,所有感觉好迷糊看到随机读写要花好多时间在配置操作指令,配置地址等操作上面。 eaglelpx 发表于 2013-7-30 15:57 static/image/common/back.gif
LZ你想多了吧,AD采样数据110ns存一个,用不着吧,一秒都快
我采用的双通道的ADC,采样率是20MSPS的,而且A、B数据口复用到一个输出口了,所有时钟上升沿输出A口数据,下降沿输出B口数据,所有最后数据率更快了40MSPS了。 Julius20110 发表于 2013-7-30 22:02 static/image/common/back.gif
O(∩_∩)O哈哈~,你这个方法非常的好,很有远见。
你有verilogSDRAM猝发读写的程序不? ...
本坛我发过VHDL突发写的 NJ8888 发表于 2013-7-30 22:10 static/image/common/back.gif
本坛我发过VHDL突发写的
学习了,我也试试 你这样只是单字节读写,速度很慢的,你这样没有把数据刷新算上去 弃风的云 发表于 2013-8-1 13:26 static/image/common/back.gif
你这样只是单字节读写,速度很慢的,你这样没有把数据刷新算上去
O(∩_∩)O哈哈~对每次,我今天看了下。 NJ8888 发表于 2013-7-30 16:18 static/image/common/back.gif
FIFO搞到SDRAM1页深度时突发一次写,100MHz时钟,大约6us左右512个地址
今天我算了一下,如果是按页写的话,时钟100MHz,貌似写一页不要6us吧!!不知道是不是我算错了。
tRCD = 20ns,一页256个数据 就是用了256个时钟就可以写完了 ,所有是256*10ns=2560ns 加上写回的时间tWR = 15ns ,算成tWR = 20ns .这个里面没有算进去自刷新的时间。
所有总共是20ns + 2560ns + 20ns =2600ns 左右。请问这个我算的是否有纰漏呢??我刚看数据手册,可能有些没有注意到的。 Julius20110 发表于 2013-8-2 10:09 static/image/common/back.gif
今天我算了一下,如果是按页写的话,时钟100MHz,貌似写一页不要6us吧!!不知道是不是我算错了。
tRCD =...
我的芯片一页512 NJ8888 发表于 2013-8-2 12:12 static/image/common/back.gif
我的芯片一页512
哦,那就差不多6us了猝发一页的话。
我发现大虾对SDRAM好了解呀!我最近才看的SDRAM时序,导师安排我做FPGA控制ADC采集数据缓存入SDRAM里面,现在最主要的工作就是讲ADC的数据缓存入SDRAM里面去,书写SDRAM控制模块的程序。
感觉只有猝发读写,SDRAM的效率才能提高起来,不然single读写的话,好像效率好低。我理解猝读写下列3中情况。
1,猝发读写,长度=8,设置为自动充电,这样就每次的ACTIVE只能读写一次,下次读写就必须重新ACTIVE.
2,猝发读写,长度=8,设置手动充电,这样可以执行很多次brust 读和写操作,不用发送很多次ACTIVE如果在同一个ROW里面不同COL里面的话,如果在不同的ROW里面的话,还是要重新发送ACTIVE.这样连续brust读写的话,就不知道什么时候会遇到定时自动刷新了,比较难处理这个。
3,猝发页读写,这里也是不好处理什么时候遇到自动刷新,拍读写到页的某处,就遇到自动刷新了。
这个是我自己的理解,不知道哪里有纰漏,恳请指正一下。谢谢。 Julius20110 发表于 2013-8-2 13:40 static/image/common/back.gif
哦,那就差不多6us了猝发一页的话。
我发现大虾对SDRAM好了解呀!我最近才看的SDRAM时序,导师安排我做FP ...
我当时写的代码,用125M时钟,不到5us完成512*16深度的突发,其中包含了刷新,就是每一次突发后都有一次刷新,虽然有点浪费带宽,但是评估过系统需求是200BYTEs/s,那种设计已经够了,带来好处是状态机简单 mark 一下 NJ8888 发表于 2013-8-4 08:37 static/image/common/back.gif
我当时写的代码,用125M时钟,不到5us完成512*16深度的突发,其中包含了刷新,就是每一次突发后都有一次 ...
O(∩_∩)O哈哈~不错,你这种写法还是值得借鉴的。
我一直在纠结的是,就是突发读写的时候,定时刷新时刻到来了怎么办??
因为定时刷新必须先关闭所有的active行,然后才开始刷新的,我想在突发读写BL=1,2,4,8.的时候应该不要紧,因为突发一次读写最多就是100多ns,在定时刷新的时候,定的时间可以稍微短100多ns.这样就考虑到了定时刷新了。但是在页突发读写的时刻就不行了,毕竟一次页突发时间好长,达到几us.所有感觉你那种办法可行,就是你自己所说的蛮占带宽的。
我的想法是在突发页读写的时候,就一直判断是否刷新时间到了,到了就执行BURST TERM命令,中断页操作,这是记录下来读的页长度;然后执行自动刷新。自刷新完毕之后再执行页操作,从中断开始的地方开始读写。 Julius20110 发表于 2013-8-4 15:46 static/image/common/back.gif
O(∩_∩)O哈哈~不错,你这种写法还是值得借鉴的。
我一直在纠结的是,就是突发读写的时候,定时刷新时刻 ...
没有必要按时刷的,只要你64ms把所有的都刷一遍就行,你可以集中刷 用的什么SDRAM芯片啊? sunny_82 发表于 2013-8-4 20:14 static/image/common/back.gif
用的什么SDRAM芯片啊?
三星的,HY57V561620FTP-H的。 NJ8888 发表于 2013-8-4 16:34 static/image/common/back.gif
没有必要按时刷的,只要你64ms把所有的都刷一遍就行,你可以集中刷
不好意思,不是很懂你的意思。
集中刷是什么意思?怎么操作的呀!!技术手册上说的刷新是内部控制器产生地址的呀,不能自动控制吧。
定时自动刷,是不是每次就是刷一行呀?
页:
[1]