搜索
bottom↓
回复: 18

同步双口RAM问题求教

[复制链接]

出0入0汤圆

发表于 2012-2-6 09:20:50 | 显示全部楼层 |阅读模式
异步双口RAM是通过busy线、中断、信号灯的方式来避免出现存储单元竞争的问题,可是同步时序的双口RAM上没有上述三个机制,那它是如何来避免同一存储单元的读写竞争呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2012-2-6 10:57:39 | 显示全部楼层
有谁知道呢,不甚感激!

出0入0汤圆

发表于 2012-2-6 11:11:37 | 显示全部楼层
FPGA的双口RAM没有仲裁机制,避免不了

出0入0汤圆

 楼主| 发表于 2012-2-6 11:16:31 | 显示全部楼层
回复【2楼】h2feo4 无机酸
-----------------------------------------------------------------------

不管是FPGA也好,CPLD也好,实现双口RAM的方式也不外乎同步和异步两种,实际中异步用的较多;不管异步还是同步都有同时访问同一单元地址冲突的问题,这个是必须要避免的,不可能避免不了;如果不避免,必会出现数据错误。
同步里面有个计数器功能,难道是通过这个来避免的么?求真相啊!

出0入0汤圆

发表于 2012-2-6 11:24:06 | 显示全部楼层
回复【3楼】vdakulav  
-----------------------------------------------------------------------

无论同步还是异步,都没有仲裁机制,它根本不保证数据正确,因为根本也不存在"正确"的解
他只保证冲突写入不会造成物理损坏,不会污染其它地址的数据,不影响下一周期的写入

出0入0汤圆

 楼主| 发表于 2012-2-6 11:29:41 | 显示全部楼层
回复【4楼】h2feo4 无机酸
-----------------------------------------------------------------------

唉,推荐你看看cy7c018的datasheet!
FPGA块里没有,是因为这部分较为灵活,推荐用户自己编程,而不是没有!
双口RAM逻辑一个最大的注意项就是:避免同时对同一单元地址又读又写,这是最基本的,什么物理地址,什么污染,我不是做芯片的,我不关心!

出0入0汤圆

发表于 2012-2-6 11:33:02 | 显示全部楼层
回复【5楼】vdakulav  
-----------------------------------------------------------------------

我一直说的是FPGA里没有,要用户自己实现和没有有什么区别?
你说的芯片不是FPGA,要非要在这里问,我只能说,您发错版了

出0入0汤圆

 楼主| 发表于 2012-2-6 11:38:35 | 显示全部楼层
回复【6楼】h2feo4 无机酸
-----------------------------------------------------------------------

FPGA是要让你来写,你不懂就不要再说啦。再说了,人家没有,设计者就不考虑了?你纠缠了半天,只表达了,没有就是没有,难道人家没有,我们就不管了?
很多设计者们根据异步的双口RAM的仲裁处理方式,在FPGA中实现了,现在我就想知道同步的该如何避免,你和我叽歪了半天,不是说,没有就是说发错版,你这样有意思么?

出0入0汤圆

发表于 2012-2-6 11:42:54 | 显示全部楼层
很佩服楼主的理解能力和狡辩勇气

出0入0汤圆

 楼主| 发表于 2012-2-6 11:47:36 | 显示全部楼层
回复【8楼】duzhang
-----------------------------------------------------------------------

项目中需要边采集边上报,因为有时钟信号,又涉及两种CPU访问同一存储器件的情况,所以首要考虑用FPGA实现的双口来实现,但是,出现的问题就是虽然有此模块,但是没有仲裁,也就是说,当两边在采集数据时,可能会出现同时对同一地址的读/存,现在必须要想个办法来解决,查阅了大量资料,发现对于异步的有很好的解决办法,同步的却没有,因此有此一问,不知道如何利用同步的机制来避免!
你所谓的狡辩从何而来?
你知道,我很感谢你的帮助,如果不懂,就静静的和我一看看看有没有高手做过同步的吧,废话就不要说了!

出0入0汤圆

发表于 2012-2-6 11:52:01 | 显示全部楼层
回复【7楼】vdakulav  
-----------------------------------------------------------------------

把 -双口RAM的存储单元- 和 -DPRAM+控制逻辑构成的芯片- 混在一起讨论本身就有问题。

DPRAM存储单元本身,如*h2feo4 无机酸*所说,自身无任何控制逻辑,但是其本身保证必要的特性:比如同时双口同时写,无物理损坏;同地址一读一写,会有已经定义的行为,etc。

基于DPRAM单元的特性,完成对应的控制逻辑就应该是你指的“同步双口RAM”了,异步怎么干同步也可以怎么干,芯片是否集成对应逻辑与怎么完成这个操作此事无关。
同步引入的问题就是单时钟vs多时钟;多时钟下两个时钟的关系等等。双时钟不相关的情况就是退化到异步DPRAM;其它好于这个的情形,可以优化逻辑提高操作速度。我理解是因此Sync DPRAM不提供更为完善的功能。

至于你说的DPRAM中的计数器,据我看过的IDT的手册,那个是地址发生,就是连续访问DPRAM单元的时候,可以不用外部地址了,用那个直接发生地址。似乎某些情况下延迟可小。

出0入0汤圆

 楼主| 发表于 2012-2-6 11:57:58 | 显示全部楼层
回复【10楼】dr2001
-----------------------------------------------------------------------

很感谢。
因为DRAM还有刷新问题,所以不想用。至于-双口RAM的存储单元- 和 -DPRAM+控制逻辑构成的芯片一说,可能是我没有说清楚,这不是混用,查看普通的已经集成好的cy7c018的datasheet就可以知道,同步双口里面好像就没有仲裁(对比,异步的,datasheet里面将仲裁讲的很详细),因此,我很奇怪同步的是如何来避免对同一地址的冲突的。

出0入0汤圆

发表于 2012-2-6 12:01:22 | 显示全部楼层
回复【9楼】vdakulav  
-----------------------------------------------------------------------

异步的速度高到能在一个最小时钟周期内完成的时候,就可以直接拿来用于同步应用。
同步的另外一个问题是前级往往是流水线的,访问冲突了需要必要的方法暂停流水线,这个会麻烦。异步往往前级已经有类似的机制了。


总之的话,就是那句老话:具体问题具体分析。不止是硬件,还有软件上的,作为整体来考虑。
如果,用的双CPU系统是完全独立的,根本没有硬件Wait等可控信号,软件上也不愿意实现信号量等功能,那就基本无解。如果有信号就拿地址仲裁然后Wait就是。

出0入0汤圆

发表于 2012-2-6 12:07:32 | 显示全部楼层
回复【11楼】vdakulav  
-----------------------------------------------------------------------

如无机酸所说,在外边由用户自行实现。和FPGA里干的事情几乎一样。时钟的关系以及访问DPRAM的人的时序要求,不同的应用差太多,厂商也没办法设计一个逻辑通吃所有情况。

如果DPRAM阵列本身的特性满足你的要求,那么同步的DPRAM完全可以不要仲裁。。。如果用FPGA做,可以看FPGA DPRAM的手册。

与其纠结硬件上如何折腾此事并且保证足够的效率,不如通盘考虑软件硬件,寻求合理解决方案来的快捷简便。

另:DPRAM是Dual Port RAM的缩写,不是DRAM的缩写。不知道你的刷新从哪里来的。。。

出0入0汤圆

发表于 2012-2-6 12:23:04 | 显示全部楼层
回复【楼主位】vdakulav  
异步双口ram是通过busy线、中断、信号灯的方式来避免出现存储单元竞争的问题,可是同步时序的双口ram上没有上述三个机制,那它是如何来避免同一存储单元的读写竞争呢?
-----------------------------------------------------------------------

讨论的口气别那么差......急就靠自己,谁叫你能力差.

你的ram在外部还是fpga内部
fpga内部没有这个问题

2个同时写入一个区域有意义吗?竟争什么?

出0入0汤圆

发表于 2012-2-6 12:49:55 | 显示全部楼层
同步何来竞争?仲裁是自己做的,因为读写操作前可以知道读写的地址!异步的问题就是时钟域不同,所以仲裁要ram来做。
不用太过关注这些,重点是根本没选对东西
用fifo就行了,当然很多异步fifo的确用的是异步双口ram

出0入0汤圆

发表于 2012-2-9 20:14:52 | 显示全部楼层
噢,如果是altera的FPGA,他的某些型号FPGA的Memory有read through write 的功能,当同步双口ram用的时候,如果某个clk,读写地址一样,用户可以设定电路的行为,决定当前读出的数据是新写入的那个还是刚被擦除的那个。如果FPGA的memory单元在物理上不支持该行为的设定,可以让quartus工具来添加一些LE辅助实现。

具体的实现请自己看quartus的手册,大概在Recommended HDL Coding Styles, 或是 Implementing Inferred RAM 那部分

可以自行google quartus read through write
不知道楼主是否说的是这个功能

出0入0汤圆

发表于 2012-2-11 15:49:30 | 显示全部楼层
其实同步双口RAM的冲突情况比较简单,无非是
1)两口同时写同一地址,不同的内容。结果是某口优先,或者是结果不确定。
2)一口读,另一口写同一地址。结果可能是
a.读口总是读到旧内容
b.读口总是读到写口新写进去的内容
c.结果不确定。

具体哪种情况,会随着FPGA的不同而不同,有的FPGA是固定的,有的允许你在生成RAM的时候选择。

至于LZ真正关心的两个数据源同时写一个RAM地址的情况,不是我们能够回答的,要看LZ的应用要求怎样的行为,是A设备占先,还是无所谓。
不管是怎样的情况,处理冲突这个功能已经超出了RAM本身提供的功能范围了,需要根据你的应用来决定。

出0入0汤圆

发表于 2014-7-1 20:57:17 | 显示全部楼层
弱弱的问一句,对于双端口SRAM,不需要时钟CLK,用Verilog编写这个程序双口SRAM时读写操作时该如何控制?我现在都用的是电平控制,现在一边可以,另外一边不可以,请各位大神赐教
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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