lucien_1986的个人空间 https://blog.eetop.cn/lucien [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

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

已有 2674 次阅读| 2011-10-30 13:37 |个人分类:Memory/存储器件应用

        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中的位置。

      各个通道根据自己的存储需求,动态的申请调用一个存储颗粒,不需使用时就释放掉供其他通道使用,这样子就能实现缓存容量的动态共享。每个通道维护着一个存储颗粒队列,记录着正被该通道占用的存储颗粒ID,以及这些ID占用的先后顺序。通道内部可以根据这个队列查找到QDRII中对应的存储地址,进行存储内容的写入和读取。申请到了一个新的存储颗粒时,添加到队列的最前端;使用完毕需要释放时,就将它剔除出队列。存储的地址是一段一段的,因为分配到的存储颗粒可能是不连续的。

      以上就是该方法的基本思路,具体实施细节可根据真实的需要来加以充实和完善。

 

-------------------------------------------------------------------------------------------------------------

更多精彩内容,请登录博客:

http://blog.163.com/fpga_ip/


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 0

    获赞
  • 32

    评论
  • 927

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-24 17:52 , Processed in 0.029219 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部