在使用DIMM(或DDR2/DDR3 SDRAM颗粒)的时候,很重要的一点是提高DIMM的带宽利用率。DIMM命令总线上传输一个命令,需要在数据总线上传输若干组数据,在进行一个读写操作的间隙,在命令总线输入一个行切换命令,此时数据总线上传输的还是之前一个命令的数据。因此,如果执行的是其他BANK的行切换命令,当前读写的BANK是不受影响的,不需要等待行切换结束再执行读写操作;如果是当前访问的BANK需要执行行切换,则只能等新的行被打开以后才能操作。因此,提高DIMM带宽利用率的关键在于减少BANK内行切换的等待时间,可以通过不连续访问同一个BANK的方法来消除行切换的等待时间。例如,可以依次访问一个DIMM的8个BANK,重复这个循环,在访问其他BANK的时候对空闲的BANK进行行切换,这样就消除了行切换时间对接口带宽的影响。在这种访问控制中,需要知道每一个BANK的下一次操作是在哪一行,需要对访问请求队列进行分析。 如果DIMM是用来做数据缓存,可以通过将数据依次连续的存放在DIMM的不同BANK内,避免同一个BANK的行切换等待时间。但是,如果DIMM是用来查表的,那么表项的地址是毫无规律,无法做到不连续访问同一个BANK。为了解决这个问题,可以在访问请求(读或者写)发送到DIMM之前,将所有的访问请求进行一个排序,将访问顺序打乱,尽量让对同一个BANK的访问隔开。例如,在访问请求队列里面有十个请求,分别是对BANK0、BANK3、BANK3、BANK2、BANK2、BANK5、BANK7、BANK4、BANK6、BANK6的访问,可以将访问顺序调整为BANK3、BANK2、BANK0、BANK5、BANK3、BANK2、BANK6、BANK7、BANK4、BANK6。这样子在对BANK2、BANK0、BANK5的访问时,就可以对BANK3执行行切换,再次对BANK3进行访问时,就不需要等待行切换时间了。当这一组查表操作结束后,需要按照访问请求的原始顺序,将读写的结果返回到应用层逻辑。当然,打乱了访问的顺序对某些查表应用来说是不允许的,需要其他的办法来消除顺序打乱带来的影响。 |