FPGA中memory的应用——多通道共享缓存 ?实际中的问题!
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。
分析的到位,明白了
