FPGA的双口RAM,如果读比写快很多,那读的是啥,那读的那些地址都是空吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FPGA的双口RAM,如果读比写快很多,那读的是啥,那读的那些地址都是空吗?相关的知识,希望对你有一定的参考价值。

谢谢大家的回答,但还不是我想要的。
比如一个RAM有512Byte,向里只写了一些不知道长度(比如20Bbyte)的数据,一个地址可以放1Bytes的数据,但读的速度很快,读的地址很快就从0到511了,读的地址就清零重新开始了,怎么确定RAM的东西被读完了

写入的时候有地址啊。读的时候判断一下,是否大于写入的地址就可以了。当然如果是异步读写,注意一下时钟。
读比写得快,就是说读的那个地址还没有写入数据,那么应该是读出初始化时的数据,如果没有初始化那应该是不定态,同意楼上。同时,RAM模块里有clr引用,可以清空为0。
还有,FPGA上电复位时,基本上是0(和厂商有关,altera,xilinx 的FPGA都是0).追问

写的地址写完后会清零,另外读的时钟比写的快多了

追答

那就加个寄存器,在写完时,把写入的地址保存下来

参考技术A 双口RAM不是FIFO,双口RAM的一个地址是可以多次重复读写的,因此不存在读写速率匹配的问题。
如果是FIFO,读速度高于写速度,那么随着时间的累积,最终FIFO会“空”,此时的读出数据为无效数据,具体是什么值,与具体的FIFO有关系。
参考技术B 读RAM是给定地址然后出数据吧,读比写得快的话那就是说读的那个地址还没有数据写入,那么应该是读出初始化时的数据,如果没有初始化那应该是不定态了吧

FPGA设计中RAM的一些基本概念

1、FPGA中双口RAM的基本概念

  在FPGA的设计中,常用的数据缓存IP有FIFO和RAM,其中RAM又分为单口RAM,伪双口RAM和双口RAM。

  单口RAM与双口RAM的区别在于,单口RAM只有一组数据线与地址线,因此读写不能同时进行。而双口RAM有两组数据线与地址线,读写可以同时进行。

  伪双口RAM(Xilinx称为Simple two-dual RAM),一个端口只读,另一个端口只写。

  双口RAM(Xilinx称为True two-dual RAM),其两个端口都支持读写。

2、双口RAM的时序总结

  • 写数据时,双口RAM的存储时在写时钟的上升沿到来时完成的。因此要在写时钟的上升沿到来前,数据跟写地址都已经是一个稳定的状态,即要准备好数据线和地址信号,这样才能保证数据的正确存储。
  • 读数据时,双口RAM的读取是在读时钟的上升沿到来前完成的,因此要在都市中的上升沿到来时,读地址已经处于稳定的状态,这样才能保证读到的数是相应地之内的数据,数据在读时钟的上升沿到来后输出。
  • 对于双端口RAM的数据输出,对于一个地址上数据会在读下一个地址的数据是才输出到数据线上,相当于数据的真正输出延时读时钟一个时钟周期。
  • 读地址模块的使能应延时的输出使能一个时钟周期,使得第一个地址0可以保持被时钟上升沿采集到,否则,输出时第一位输出不稳定的数据。

3、双口RAM的一些特点

  如果同时访问双口RAM的统一存储单元,必然会造成数据访问失真。为防止冲突的发生,采用Busy逻辑控制,也称硬件地址仲裁逻辑。此处只给出了地址总线选通信号线与片选脉冲信号的情况。而且,两端的片选信号至少相差仲裁最小时间间隔,内部仲裁器逻辑控制才可给后访问的一方输出Busy闭锁信号,将访问权交给另一方直至结束对该地址单元的访问,才撤销Busy闭锁信号。即使在极限情况,两个CPU几乎同时访问同一单元----地址匹配时片选信号低调变之差少于仲裁最小时间间隔,Busy闭锁信号也仅输出给其中任一CPU,只允许一个CPU访问该地址单元。仲裁器控制不会同时向两个CPU发Busy闭锁信号。

  存储单元数据块的访问权限分配至允许在某一时间段内由1个CPU对自定义的某一数据块进行读写操作,这将有助于存储数据的保护,更有效地避免地址冲突。信号量仲裁闭锁就是一种硬件电路结合软件实现访问权限分配方法。

  为了提高数据的交换能力,有些双端口RAM采用,命令交换逻辑来通知对方。

以上是关于FPGA的双口RAM,如果读比写快很多,那读的是啥,那读的那些地址都是空吗?的主要内容,如果未能解决你的问题,请参考以下文章

关于Xilinx的FPGA中双口RAM使用的若干问题

FPGA教程案例6基于vivado核的双口RAM设计与实现

FPGA基础设计双口RAM乒乓操作

altera和xilinx的fpga区别

FPGA设计中RAM的一些基本概念

FPGA教程案例27通过Verilog实现双口RAM乒乓结构