[换个问题] 什么是单口RAM ,双口RAM和FIFO?
哎说来惭愧 ....始终对单口RAM,双口RAM,FIFO
充满着问题 ....
它们到底是如何运作和使用的? 单口只有一套数据 地址,双口有两套,FIFO没有地址。单口作用域外部SRAM一样,双口和FIFO可以做跨时钟域两个不相干数据传输的同步化处理。举个例子,ADC采集要通过均匀的时钟间隔向缓存存储空间写入数据,同时因为缓存不够大,需要向一个具有大容量,突发传输能力的存储器转移,但是这个存储器不能均匀的写(比如这个存储器是SDRAM,要送行列地址然后突发同步写入,但是在变换地址是是不能写的,还有刷新也不能写)不过它的平均写入速度高于ADC采样速度,通过FIFO就能处理了,数据位宽变换时用双口比较方便,你可以8位并行输入,32位并行输出,处理速度可以降低到1/4 ( ⊙ o ⊙ )啊!思路清晰不少了!
但是工作原理上还有问题
追加问题
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576606.jpg
(原文件名:sp.jpg)
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_576607.jpg
(原文件名:dp.jpg)
这两张图是cyclone 手册裁图出来的!
无论是单端口还是双端口,我始终不明白时序图 ...
典型的ram, 假设,我向 地址0 写入 0xff,然后我可以从地址0 读出 0xff。
cyclone 手册的单端口ram,时序图为什么不同呢?还有它是怎样工作呢? 单口RAM ,双口RAM和FIFO DSP读取到ADC均匀写入的数据后,需要用burst方式储存到外部存储空间,因此需要同时读和写,并且写的速度要高于读的速度。这就牵涉到跨时钟域的问题。用FIFO和DPRAM可以解决。 单口与双口的区别在于,单口只有一组数据线与地址线,因此读写不能同时进行。而双口有两组数据线与地址线,读写可同时进行。FIFO读写可同时进行,可以看作是双口。
双口RAM分伪双口RAM(Xilinx称为Simple two-dual RAM)与双口RAM(Xilinx称为true two-dual RAM)。伪双口RAM,一个端口只读,另一个端口只写;而双口RAM两个端口都可以读写。
FIFO也是一个端口只读,另一个端口只写。FIFO与伪双口RAM的区别在于,FIFO为先入先出,没有地址线,不能对存储单元寻址;而伪双口RAM两个端口都有地址线,可以对存储单元寻址。
异步时钟域的缓存只要是双口器件都可以完成。但FIFO不需对地址进行控制,是最方便的。 本帖最后由 明泰明泰 于 2014-8-14 11:27 编辑
lan_lingshan 发表于 2012-2-8 10:42
单口与双口的区别在于,单口只有一组数据线与地址线,因此读写不能同时进行。而双口有两组数据线与地址线, ...
大神,对于FIFO的满和空的判断,我一直很疑惑。
lan_lingshan 发表于 2012-2-8 10:42
单口与双口的区别在于,单口只有一组数据线与地址线,因此读写不能同时进行。而双口有两组数据线与地址线, ...
如果一个FIFO的宽度是8,深度是8,那么是不是指针先读取宽度为8的数据,然后指针+1,在读取宽度为8的数据;同样写也是如此? 同步FIFO主要搞明白一下几点:
1,循环队列的概念和原理。
2,读写地址的增加。
3,读(写)地址是下一个要读(写)的地址。
4,空和满的判断条件,以及个数的支持。这需要另外设置一个计数器。
5,读和写的时序。尤其是读数据的处理。有一种模式ALTERA 叫做SHOW AHEAD ,XILINX 叫做FIRST WORD FIRST THOUGH,就是说第一个要读出的数据已经出现在输出数据线,读信号线充当一个确认读出的角色。
等有时间写一个完整的介绍,另外发一个帖子。彻底讲讲同步FIFO.
而异步的FIFO比同步FIFO复杂一些,主要是因为读写时钟不是一个,这就需要让一个时钟区域产生的数据延迟两个周期或者以上再出现在另外一个时钟域,并且核心是依赖一个读写端口时钟可以不同的双口RAM。
学习了, 单口RAM ,双口RAM和FIFO 把你的帖子题目贴到百度上去,就都明白了。。。
页:
[1]