微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA中memory的应用——多通道共享缓存

FPGA中memory的应用——多通道共享缓存

时间:10-02 整理:3721RD 点击:

FPGA应用于通信领域时,常常外接大容量memory器件用于缓存,常用的有DDR3 SDRAM、QDRII等。对于这些器件,如何提高它们的使用效率是值得深入研究的。本文侧重于讨论在一个memory被多通道共同使用时,如果提高memory的利用效率。
       本文以一个四通道memory应用为例:一个FPGA中有四路独立的数据处理电路,但是共用同一个QDRII作为它们的数据缓存单元,用于应付数据突发。QDRII的接口总带宽能满足同时处理四路数据输入输出的带宽要求,但是QDRII的缓存容量是有限的,是将整个缓存容量平均的分配给四路(或称为四个通道)呢,还是采用动态共享的机制达到缓存容量灵活配置呢?
     最简单也最容易想到的分配办法是将QDRII的总缓存容量平均的分配给四个通道,这样子简单,在FPGA中实现起来也比较容易。但是这种方法有一个弊端,就是两个通道之间无法共享缓存空间,即使其中一个通道缓存有大量剩余,也不能分配给其他的通道使用,造成缓存能力的大量浪费和缓存效果不佳。
      所以,有必要实现多通道间的缓存空间共享,但控制逻辑又不能过于复杂,要便于在FPGA中以较少的资源来实现。下文中是我觉得比较理想的一种实现办法。
       将整个QDRII的缓存空间分成若干份,以一个72M缓存容量的QDRII为例,可以将它分成72份,每份的容量是1M,每份为一个最小存储单元。也可以分的更细,最小存储单元的粒度越小,共享的效率越高,但是维护起来越复杂,存储时最小存储单元的切换也就越频繁,控制逻辑也更复杂。所以要根据实际需要选择合适的最小存储单元容量。下文中为描述方便起见,以存储颗粒来表示一个可以分配调度的最小存储单元。
       整个缓存空间被分割成若干个独立的存储颗粒以后,首先需要有一个管理调度模块用来分配、调度、回收存储颗粒。管理模块根据各个通道的使用需求,动态的分配存储颗粒,并在通道释放该存储颗粒时将它回收,以供下一次分配使用。
     每个存储颗粒有一个编号(ID),和它在QDRII中的地址段有一个对应关系,例如,ID=0,对应的是地址20'h0~20'hff;ID=1,对应的是地址20'h100~20'h1ff。也就是根据存储颗粒的大小,以及它的ID,可以知道它在QDRII中的位置。
      各个通道根据自己的存储需求,动态的申请

原来这就是所谓的内存共享了把?

比较有道理! 学习了!



    这个是内存共享的基本思路,很多相关的内存共享机制都是基于这个基本路线的。

多对列共享存储的方式:
将这个存储容量作成一个链式存储,分片共享;

其实就是一个内存管理问题,这可以无限参考操作系统中各种对内存的管理和使用方式。

学习了,,,

不错。学习 学习

lucien_1986大侠,在此发帖,小弟必须顶呀

受教了!

有道理,顶了!

比较有道理! 学习了!

挺好,思路非常具体,学习了!

有结构层次图么?

跟cache的内存管理方法很相似
看来很多东西是相同的

thank youu

小编的思维方法,早就被Xilinx的专家想到了解决方法,只要DDR3/QDRII 带宽足够能够容纳无限的数据通路。Xilinx 通过AXI 存储器接口, 外部能接受npi接口,或多个级联,实现多路数据的传输

学习了。挺好的话题。

比较常用啊

也可以考虑用FIFO实现,简单处理,地址管理也会增加资源利用率的

Thanks!

非常好的思路,以后可以借鉴下。谢谢分享

学习啦哈。。

thank  you !

谢谢,受教了。

不错,学习了

谢谢三大诉讼法三翻四复

留名,学习了

It is similar with share with cache between multi-core. But in order to void share memory can't suit burst transferring, sometimes we still needed to exclusive memory for buffer data

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top