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

FPGA中memory的应用——多通道共享缓存 ?实际中的问题!

时间:10-02 整理:3721RD 点击:
在讲坛中看到了lucien_1986提出的多通道共享缓存技术,但是在实际中有以下问题,比如在数据采集方面,4通道的数据采集卡,共用了1G内存。一般的数据采集卡都是采用了平均分配内存的方法,也就是说当4个通道同时采集的时候,每个通道最大为250M的大小,这个就产生了问题   1 : 这种情况下,就是把内存分成每个小块,也没有办法解决内存的大小吧 ?
   2 : 我认为把内存分成每个小块的原因就是为了,在数据采集时候,上位机读取每个通道的数据,可以直接寻找到特定通道的地址,然后读取数据到PC上去,但是这样就像LUCIEN说的那样,内存管理技术了,但是内存管理又遇到了问题,也就是每个通道占用一个读写FIFO,每次只写一个CH的数据进入DDR2,不过这样内存控制起来会有点复杂了。目前我正在写这个FPGA程序,等写完后,会共享出来这个代码。

所以我认为lucien的意思应该是 分片内存分配给各个通道,但是内存大小不能控制。不知道大家意下如何?

当四个通道每个通道的负载都比较大且行为类似时,多通道共享缓存技术就没有优势了;
多通道共享缓存时,各个分片缓存的总量是一定的,但是根据各个通道的实时负载的不同,会自动增加或者消减各通道的缓存大小。当然还有一些暂时不属于任何通道的分片,也会实时的增加或者消减
个人见解,欢迎讨论!


但是如果 自动增加或者减少数量时候,如果分片过小,导致刷新时间浪费很多,这样不是得不偿失吗? 所以最小应该是以一个BANK为单位吧?

这个刷新不是统一管理或者说是自动管理的吗?
在刷新的时候等待操作应该可以吧
分片越小,会导致管理分片的信息位增加,译码电路变得更复杂,也就是查找更为复杂
我是这样想的;假如信息管理位有ID位(指示现在归哪个通道使用),tag位(分片的地址标志位),valid位是缓存分片的数据有效位。首先由各个通道申请各个通道的缓存分片数(这里我现在不太清楚是实时还是静态的),然后会给分片标上ID号,当有数据进来时,会寻找所有的符合ID的分片(这个搜寻过程可以是分组并行的也可以是串行的),若符合ID号,则进一步比较tag位,这样去顶是否有命中,若有这直接写入,若没有则查看是否有空行,若有,这写入空行,同时更新tag位,和valid位,如果都不满足则需要申请新的分片或者等待有分片被读出;读出过程与就是去tag和valid过程,也即是分片回收的过程
个人见解!



   对头,就是这样的,,不过这样还是需要最小符合一定大小的内存深度,然后就可以进行自由分配了,不过在实际的数据采集中好像不需要通道的自由分配内存设置,包括NI的,也不是自由分配的。看来我想的太简单了

当然,考虑到应用环境和DRAM的存储方式,这个最小分片的大小不肯能很小。
关于实际应用于数据采集,我没有做过相关的研究,也不懂
我只是比较喜欢讨论存储管理相关的问题,
欢迎讨论!

我有个经历,就是把控制器的地址按bank递增,这样每次加1都会切换bank ,能最大利用ddr带宽



    这样不是来回的切换BANK吗 ? 不是更浪费时间吗 ? 你可以说一下原因吗? 谢谢了啊

ddr读的时候,8个bank连续切换的话,就是传说中的bank interleave,这样DDR能够保证连续的处于数据输出状态



    这样的效率还没有在一个bank里面进行地址读写的效率高把 ,在一个BANK里面实现的多次突发完全支持交替操作的啊



    拭目以待中,小编给力啊!

DDR3中有8个bank,每个bank可以打开一个row。打开row的命令是activate,发出这个命令的时候只能打开一个bank中的一个row。如果要bank中已经有打开的row,而现在想要访问其他的row,那么就需要先关闭当前打开的row,再打开row。
关闭row的命令是precharge,可以一次关闭1个bank中的row,也可以同时关闭所有bank中的row。
简而言之,在一个bank中切换row会浪费时间。而在不同的bank中切换row却是不需要花费额外时间的。
http://www.cnblogs.com/haitaox/p/3387419.html
我写的一些关于ddr3的心得笔记



   ,支持原创



    谢谢,最近项目都在做DDR3

写的不错,谢谢!

学习,研究

学习学习

泼点凉水。 我觉得你关注的重点错了。你应该关注DDR的利用率而非缓存。 也就是说,DDR的总带宽是否大于AD,传输加在一起。
DDR有延迟,因此Buffer的设计目的是充分利用DDR的Burst Size. Burst Size越大越好。
CPU缓存的目的是用于程序的不规则访问。
AD的采集,非常规律,可以设计很高效的Buffer。



   分析的到位,明白了

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

网站地图

Top