转自EETOP论坛,原文链接:http://bbs.eetop.cn/thread-311514-1-2.html
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中的位置。
各个通道根据自己的存储需求,动态的申请
本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念
本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“
课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了
@2003-2020 中国电子顶级开发网