对SDRAM的理解总结
程序员文章站
2022-04-01 22:04:17
...
- Physical Bank,下文简称P-Bank
Logical Bank,下文简称L-Bank. - 地址
sequential与interleave的区别
- 对下表的理解
参考该论坛的理解,摘抄了几段回答,很好说明了interleave存在的意义
总结论坛回答,我的理解就是A2,A1,A0配置的时候定义了burst length;实际读写数据的时候根据实际列地址A7~A0中的A2,A1,A0,即表中的start address来决定读取顺序。(但是还没在说明书内找到怎么分别对这两个进行设置,回头再看看datasheet)
SDRAM具体的一些东西没有深入研究过,仅供参考:
- 此表应该是表达SDRAM Burst模式下,Burst Length,Type两个参数,在实际访问时,对给定起始列地址Burst出来的数据地址的影响。
- Starting Column Address指实际访问的时候,第一个访问的那个地址。根据Length,Type,如果用Burst操作,连续读数据,随后输出的数据地址是按照表格中的顺序来的。
- 选择何种Length和Type,取决于SDRAM控制器的:1、向上接口的协议(CPU侧);2、SDRAM的具体构成,几个芯片拼成的,etc。
Interleave那个Type,至少其中的一个目的,是为了满足比如32Bit对CPU总线,16Bitx1片SDRAM这样的情形,尽快凑够32Bit的数据用的。如4凑8/16/32,8凑16/32,16凑32,都是能支持的。这是因为CPU总线不一定读数据支持Byte Mask。
当然,这种凑数会导致读取的地址序会比较乱,但是对数据吞吐率而言有保证,电路复杂点也就认了。。。
Burst Length=8;Start Col Addr=3;Type=Interleave的一个潜在的例子:
- CPU Cache Line Size: 16Bytes;
- CPU访问(读)字节地址0x???3,导致Cache Miss,进而需要Fill Cache Line;
- CPU Core对外总线是32Bits,读数据不支持Byte Mask,即总是假设该32bits数据都是有效的;这样总线可以发一个4次连续读的Burst或者4次单独读请求。
- SDRAM控制器和Core对外总线连接,但是外部的SDRAM是一片16bit的芯片。为了满足总线的要求,SDRAM读数据总要尽快凑够32Bit数据才能完成一次数据传输。
这时候,就可以设置成Burst Length=8,Type=Interleave,用尽可能少的周期以及CPU对外总线延迟完成操作。
缺点就是地址序可能不单调的,SDRAM控制器可能需要内部几个字节的缓冲或者要和CPU Cache控制器行为去匹配,etc,总之会复杂,但是延迟小了。
-
Interleave也可以是BANK的交替读或写。如下面两幅时序图
full page
关键点一:从address A增加到end of this page,不会停止,然后再从the starting address of this page增加,如此循环
关键点二:直到burst stop命令才停止
上一篇: Spark yarn模式任务提交
下一篇: STM32的hal库 定时器刹车配置