【整理】详解嵌入式片上资源之SDRAM内存
【整理】詳解嵌入式片上資源之SDRAM內存
2013 年 12 月 18 日 上午 10:49crifan已有110人圍觀我來說幾句相關內容:
【整理】嵌入式各種外設的引腳的相通之處和不同點
【整理】嵌入式SoC中各種片內資源
【整理】嵌入式系統的各種常見外設
【整理】嵌入式系統中各種軟件功能模塊
?
SDRAM內存中的重要參數解析
關于BRC和RBC:
【詳解】SDRAM的地址映射方式BRC(Bank Row Column)和RBC(Row Bank Column)
其中,那個截圖,參考的是:
An Introduction to SDRAM and memory controllers – Benny Akesson
其中,核心就只有一句:
BRC==B-R-C (Bank, Row, Column)
RBC==R-B-C (Row, Bank, Column)
?
SDRAM內存的內部物理層次和結構
如圖:
其中,很明顯是:
上圖中的DRAM Memory Matrix中的:
- rows,對應的長度是上面的那個16384==16K
- columns,對應的長度是上面的那個1024==1K
- 對應的行和列交叉的點,對應的大小是8bit==1Byte
?
SDRAM內存中的bank
對應的rank,就是上述上面這個單根內存。
而在一般PC上,臺式機中,對應的是主板上的內存的多個插槽
比如:
就是有6個插槽,就是6個rank
上面插了6個內存條。
?
SDRAM內存的單個bank的容量大小計算方法
所以,上述例子中的bank的計算方法就是:
| 單個bank的大小 == row address width * column address width * memory data width == rows number * columns number * memory data width == 16K * 1K * 1Byte ==16MBytes ==16MB |
相應的的解釋:
| Typical figures: 4-8 banks 16K rows/bank 1024 columns/row 4-16 bits/column |
的含義就是:
此處這個單個bank是16MB的內存:
如圖,一共:
8個bank,每個bank是上面算出來的是16MB
| 16384==16K rows/bank 1024==1K columns/row 8bits/column |
所以,此處,總的內存容量是:
16MB*8=128MB
了。
?
嵌入式驅動中如何寫代碼去配置對應的SDRAM內存
明白如何計算SDRAM內存的row address width和column address number
即,內存的容量計算,所對應的嵌入式中的內存驅動方面的代碼,如何寫。
關于內存容量,按照上面的例子,是:
| bank number * size per bank == bank number * (rows number/bank * columns number/row * bits/column) == 8 * (16K * 1K * 8) == 1024MBits == 128MBytes |
需要注意的是:
在寫SDRAM驅動時,往往,上面的
- rows number/bank==16K
- columns number==1K
不是直接寫成16K和1K的。
而是:
有個對應的:
- row address width
- column address number
此處,其值就是:
- row address width == 2的次方數,而16K是2的14次方
- 所以此處:
- row address width ==14
同理:
- column address number == 2的次方數 而1K是2的10次方,
- 所以此處是:
- column address number == 10
類似的,之前見過的,某個MPMC(參見附錄的解釋)
?
找到SDRAM內存的數據手冊中的詳細參數
驅動中,去配置MT48LC32M16A2內存時,其配置是:
?| 1 2 3 4 | #define MT48LC32M16A2_SIZEMB??????????????????? 64 /*!< memory size in MBytes*/ #define MT48LC32M16A2_SIZEBYTES???????????????? (64 * 1024 * 1024) #define MT48LC32M16A2_CLMN_ADDR_WIDTH?????????? 10 #define MT48LC32M16A2_ROW_ADDR_WIDTH??????????? 13 |
其中的很容易看出:
這個MT48LC32M16A2,共64MB
注:此處隱含的條件是:memory data width是8bit=1Byte
對應的datasheet中是:
MT48LC32M16A2 – 8 Meg x 16 x 4 banks
即:
每個bank是8MBit
然后memory data width是16bit
然后一共有4個bank
所以,此處,先算總大小是:
8MBit * 16bit * 4
== 8Mbit * 2Byte * 4
== 64MB
?
搞懂代碼中如何配置SDRAM內存的參數
然后,再去看看,上面的:
MT48LC32M16A2_CLMN_ADDR_WIDTH為何設置為10
MT48LC32M16A2_ROW_ADDR_WIDTH為何設置為13
那是因為:
先去看其datasheet中的圖示:
注意,是”32 Meg x 16 SDRAM“,對應的這個圖:
?
其中可見:
每個bank是:
8,192×1,024×16
?
其實,8192,1024,16,這幾個參數,也可以在datasheet中的表格中看到:
即:
表格中也寫了,對于:
32Megx16,說明是x16,即16bit的
對應的:
row addressing是8K==8192
column addressing是1K==1024
然后再去推算:
MT48LC32M16A2_CLMN_ADDR_WIDTH
== row address width
== row個數對應的是2的多少次方
== 此處column個數是1024
== 1024是2的10次方
== 10
所以,此處配置為:
?| 1 | #define MT48LC32M16A2_CLMN_ADDR_WIDTH?????????? 10 |
MT48LC32M16A2_ROW_ADDR_WIDTH
== column address width
== column個數對應的是2的多少次方
== 此處column個數是8192
== 8192是2的13次方
== 13
所以,此處配置為:
?| 1 | #define MT48LC32M16A2_ROW_ADDR_WIDTH??????????? 13 |
?
關于SDRAM內存數據寬度的寫法和引用
其中的:
memory data width
內存數據寬度
對應的單位是bit,通常也寫成xN
常見都有:
4bit==x4
8bit==x8
x16==x16
對應的圖表中的寫法,是那個DQ。
?
比如:
中的:
DQ[31:0]
表示:
此處的內存數據寬度是0-31,供32位,即32bit==4Byte
按照之前的那個算法:
如果前面的Bank中,內存數據寬度,不是那個8==8bit,而是此處的32bit==4Byte的話,那么上面的內存,單個的bank的大小就是:
16,384×1,024x32bit
== 16K x 1K x 4Byte
== 64MB
了。
?
更多的SDRAM內存的內部結構的例子
再給出另外兩個內存的架構的例子:
?
HY57V56820C(L)T內部結構圖
可見,其中是:
DQ是:
DQ[7:0]
即:
0-7,共8位的DQ
即:
memory data width 內存數據寬度
為8bit。
?
如此,才算,真正搞懂了,
內存的
bank
row
column?
memory data width
的含義,以及拿到一個內存,去看對應的datasheet,如何去寫其驅動,如何設置對應的
row address width
column address width
等參數,如何計算內存的總容量了。
?
其他一些SDRAM內存控制器
JZ4760_DDR Contorller
?
繼續深入了解SDRAM內存單元結構和原理
后續再深入了解內部機制:
表示的是:
是x4==4bit==內存位寬是4bit
的內存的例子。
每次,訪問row和column的交叉點,即對應的單個的cell
然后讀取出對應的值。
?
對應的物理上的時序圖,就是:
?
至此,才算是,對于SDRAM的結構,更加有個了解了。
?
參考資料
【詳解】SDRAM的地址映射方式BRC(Bank Row Column)和RBC(Row Bank Column)
An Introduction to SDRAM and memory controllers – Benny Akesson
Everything You Always Wanted to Know About SDRAM (Memory): But Were Afraid to Ask – A Break from the Norm
Everything You Always Wanted to Know About SDRAM (Memory): But Were Afraid to Ask – The INs and OUTs of Memory Addressing
Everything You Always Wanted to Know About SDRAM (Memory): But Were Afraid to Ask – Wider, Not Faster
Micron的MT48LC32M16A2的datasheet
JZ4760_DDR Contorller_百度文庫
SDRAM內存驅動(轉載)
?
S3C2440 SDRAM內存驅動
HY5756820C : 4 Banks x 8M x 8Bit Synchronous DRAM Hynix Semiconductor
?
Everything You Always Wanted to Know About SDRAM (Memory): But Were Afraid to Ask – SDRAM Core Scheduling – The Impossible discipline
?
附錄
MPMC
1.MPMC==Multiport Memory Controller==多端口存儲設備控制器
參考自:
Tutorial 1:Sharing DRAM between Modules Using MPMC
2.而:
LogiCORE IP Multi-Port Memory Controller, MPMC (v6.03.a) – mpmc.pdf
中更詳細的解釋:
”MPMC is a fully parameterizable memory controller that supports SDRAM/DDR/DDR2/DDR3/LPDDR memory.“
即:
MPMC是一個內存控制器,可以通過參數配置以支持各種不同類型的存儲器:SDRAM/DDR/DDR2/DDR3/LPDDR內存
總結
以上是生活随笔為你收集整理的【整理】详解嵌入式片上资源之SDRAM内存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言开头写C清零是为啥,这个汇编语言
- 下一篇: 顺丰快递下单接入