很多处理器都支持Burst_Read_和Burst_write,请问在读写存储器的时候,如果连续读写,处理器就会采用这种模式吗?burst模式在编程的时候能够体现吗?
根据计算机组成原理和计算机系统结构中的内容, cache存在的意义就是在提高命中率的情况下,减少因访问dram所花费的时钟周期。而cache的原理是,程序的时间局部性与空间局部性
说了这么多,是想说明,cache的更新是以一块数据为单位的,也就是一个cache line,根据cpu指令集,risc,cisc,以及具体的指令集下架构的不同,powerpc,arm,mips,x86等,其对一个cache line的大小的定义可能是不同的,假设某 cache line 大小是 32个字节,那么这个cache line 的定义通常是以对dram的 burst 访问来实现的,而根据,dram 和 cpu间 总线的 宽度,dram的 burst的长度,也就是一个burst的字节数,也是可定义的, 在dram 的controller 里边会有相应的寄存器可以设置,给出可编程的几个,通常是2个,或者3个burst的长度设置。比如说,一个burst 可配置成 4个字节长,或者8个字节长。
支持不支持主要在于dram。
我不太确定,即使不是连续读写,应该也是以burst方式访问dram的。
编程的时候,对于burst应该是没有认知的,因为就编程本身而言,关注的是数据本身,对于数据是以什么访问被CPU获得的,这个应该是对于编程透明的。
实现burst的目的,也只是提高访问dram的效率,降低 cpu 在需要数据时的等待时间
我遇到的问题是这样的:
我用一片ARM连接FPGA,ARM是TI的AM3715,FPGA连接到GPMC接口上,ARM在读写的时候都会涉及连续的读写,所以想采用Brust的方式。AM3715的GPMC本身肯定是支持Brust,关键是我要调试FPGA中的程序,现在不管我在ARM那边怎么连续读写GPMC端口都不出现Brust的波形。
系统是linux,请问下程序里面需要怎么操作,还是我在内存映射的时候什么选项没有设置正确?
ReadMultiple函数的意思是
能被编译为Load/Read Multiple汇编指令的函数
例如利用memcpy进行字对齐的复制
当然前提条件是你的CPU要支持类似指令(一般现代的CPU都有支持)
你也可以直接嵌入汇编
例如arm架构的,可以直接用LDM或STM汇编指令试试