SDRAM

来源:http://www.cnblogs.com/archiexie/archive/2016/12/07/6126665.html
-Advertisement-
Play Games

SDRAM(Synchronous Dynamic Random Access Memory,同步動態隨機存儲器)也就是通常所說的記憶體。同步是指其時鐘頻率與CPU前端匯流排的系統時鐘頻率相同;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲的。 ...


SDRAM(Synchronous Dynamic Random Access Memory,同步動態隨機存儲器)也就是通常所說的記憶體。同步是指其時鐘頻率與CPU前端匯流排的系統時鐘頻率相同;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲的。


工作原理

定址

SDRAM的內部是一個存儲陣列。陣列就如同表格一樣,將數據“填”進去。在數據讀寫時和表格的檢索原理一樣,先指定一個行(Row),再指定一個列 (Column),我們就可以準確地找到所需要的單元格,這就是記憶體晶元定址的基本原理,如圖:
存儲陣列

這個表格(存儲陣列)就叫邏輯 Bank(Logical Bank,下文簡稱 L-Bank)。 由於技術、成本等原因,不可能只做一個全容量的 L-Bank,而且最重要的是,由於 SDRAM的工作原理限制,單一的 L-Bank將會造成非常嚴重的定址衝突,大幅降低記憶體效率。所以人們在 SDRAM內部分割成多個 L-Bank(其中一個Bank在進行預充電期間,另一個Bank卻馬上可以被讀取,這樣當進行一次讀取後,又馬上去讀取已經預充電Bank的數據時,就無需等待而是可以直接讀取了,這也就大大提高了存儲器的訪問速度),目前基本都是 4個(這也是SDRAM規範中的最高L-Bank數量),由此可見,在進行定址時就要先確定是哪個 L-Bank,然後在這個選定的 L-Bank中選擇相應的行與列進行定址。因此對記憶體的訪問,一次只能是一個 L-Bank工作。如圖:
Bank定址

SDRAM行地址和列地址的地址線是分時復用的,而且還有高低位的掩碼信號,最終可以定位到一個位元組(通常操作系統的最小定址單位也為1個位元組)。所以整個定址流程就是:先找L-Bank,然後是行,再找列,得到存儲單元的數據,最後再根據掩碼定位到指定位元組

存儲單元

L-Bank中的存儲單元是最基本的存儲單元,它的容量是若幹個Bit(晶元位寬),而每個Bit則存放在單獨的存儲體中,這些存儲體就是記憶體中最小的存儲單元。
最小存儲單元

SDRAM記憶體晶元一次傳輸率的數據量就是晶元位寬,那麼這個存儲單元的容量就是晶元的位寬(也是L-Bank的位寬)。記憶體晶元的容量就是所有L-Bank中的存儲單元的容量總合。

存儲容量(bit) = 行數 x 列數(得到一個L-Bank的存儲單元數量)x 位寬 x L-Bank的數量

預充電與刷新

  • 預充電

        從存儲體的結構圖上可以看出,原本邏輯狀態為1的電容在讀取操作後,會因放電而變為邏輯0。由於SDRAM的定址具有獨占性,所以在進行完讀寫操作後,如果要對同一L-Bank的另一行進行定址,就要將原先操作行關閉,重新發送行/列地址。在對原先操作行進行關閉時,DRAM為了在關閉當前行時保持數據,要對存儲體中原有的信息進行重寫,這個充電重寫和關閉操作行過程叫做預充電。預充電中重寫的操作與刷新操作(後面詳細介紹)一樣,只不過預充電不是定期的。
  • 刷新

        SDRAM之所以成為DRAM就是因為它要不斷進行刷新(Refresh)才能保留住數據,因此它是SDRAM最重要的操作。
        刷新操作與預充電中重寫的操作一樣,都是用S-AMP(讀出放大器Sense Amplifier)先讀再寫。但為什麼有預充電操作還要進行刷新呢?因為預充電是對一個或所有L-Bank中的工作行操作,並且是不定期的,而刷新則是有固定的周期,依次對所有行進行操作,以保留那些很長時間沒經歷重寫的存儲體中的數據。那麼要隔多長時間重覆一次刷新呢?目前公認的標準是,存儲體中電容的數據有效保存期上限是64ms,也就是說每一行刷新的迴圈周期是64ms。我們在看記憶體規格時,經常會看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的標識,這裡的4096與8192就代表這個晶元中每個L-Bank的行數。刷新命令一次對一行有效,刷新間隔也是隨總行數而變化,4096行時為 15.625μs(微秒,1/1000毫秒),8192行時就為 7.8125μs。由於刷新涉及到所有 L-Bank,因此在刷新過程中,所有 L-Bank 都停止工作,而每次刷新所占用的時間為9個時鐘周期(PC133標準),之後就可進入正常的工作狀態,也就是說在這9個時鐘期間內,所有工作指令只能等待而無法執行。顯然,刷新操作肯定會對SDRAM 的性能造成影響,但這是沒辦法的事情,也是相對於SRAM(靜態記憶體,無需刷新仍能保留數據)取得成本優勢的同時所付出的代價。 

突發模式

突發(Burst)是指在同一行中相鄰的存儲單元連續進行數據傳輸的方式,連續傳輸所涉及到存儲單元(列)數量就是突髮長度(Burst Length,簡稱BL)。

    上文寫到的讀/寫操作,都是一次對一個存儲單元進行定址,如果要連續讀/寫,還要對當前存儲單元的下一單元進行定址,也就是要不斷的發送列地址與讀/寫命令(行地址不變,所以不用再對行定址)。雖然由於讀/寫延遲相同可以讓數據傳輸在I/O端是連續的,但是它占用了大量的記憶體控制資源,在數據進行連續傳輸時無法輸入新的命令效率很低。為此,引入了突發傳輸機制,只要指定起始列地址與突髮長度,記憶體就會依次自動對後面相應長度數據的數據存儲單元進行讀/寫操作而不再需要控制器連續地提供列地址,這樣,除了第一筆數據的傳輸需要若幹個周期(主要是之間的延遲,一般的是tRCD + CL)外,其後每個數據只需一個周期即可。

實現

下圖為32MB(64Mb)的SDRAM內部結構圖。它有4個L-Bank,每個L-Bank有4M(4x1024x1024 = 2^13x2^9)個存儲單元,每個存儲單元16bit(16位寬,兩塊可以並聯成32bit匯流排寬度)。
結構圖

管腳說明

PIN PIN NAME DESCRIPTION
CLK Clock 輸入時鐘。其他輸入管腳的信號在時鐘上升沿被鎖存
CKE Clock Enable 時鐘使能。當Disable時,SDRAM則處於power down/suspend/self refresh等狀態
CS Chip Select 片選。低有效
RAS Row Address Strobe 行地址脈衝選通信號。低有效
CAS Column Address Strobe 列地址脈衝選通信號。低有效
WE Write Enable 寫使能。低有效
UDQM, LDQM Data Input/Output Mask 高低位元組數據掩碼控制信號
A0~A12 Address 地址線
BA0,BA1 Bank Address L-Bank選擇信號線
DQ0~DQ15 Data Input/Output 數據線

讀寫時序

時序圖

  •     SDRAM進行讀操作時,先向地址線上送上要讀取數據的地址,通過前面的知識瞭解到,地址被分成3部分,行地址,列地址,L-Bank片選信號。片選(L-Bank的定址)操作和行有效操作可以同時進行。
        在CS、L-Bank定址的同時,RAS(行地址選通信號)也處於有效狀態。此時An地址線則發送具體的行地址。A0~A12,共有13根地址線(可表示8192行),A0~A12的不同數值就確定了具體的行地址。由於行有效的同時也是相應 L-Bank有效,所以行有效也可稱為L-Bank有效。
        行地址確定之後,就要對列地址進行定址了。列地址復用了A0~A8,共9根(可表示512列)。讀取命令與列地址一塊發出(當WE為低電平是即為寫命令),然而在發送列讀寫命令時必須要與行有效命令有一個間隔,這個間隔被定義為 tRCD,即RAS to CAS Delay(RAS至 CAS延遲),通常tRCD以時鐘周期(tCK,Clock Time)數為單位。也可以理解為行選通周期,是根據晶元存儲陣列電子元件響應時間(從一種狀態到另一 種狀態變化的過程)所制定的延遲。
        在選定列地址後,就已經確定了具體的存儲單元,剩下就是等待數據通過數據 I/O通道(DQ)輸出到記憶體數據匯流排上了。但是在列地址選通信號CAS發出之後,仍要經過一定的時間才能有數據輸出,從CAS與讀取命令發出到第一筆數據輸出的這段時間,被定義為 CL(CAS Latency,CAS潛伏期)。由於CL只在讀取時出現,所以CL又被稱為讀取潛伏期(RL,Read Latency)。CL的單位與tRCD一樣,也是時鐘周期數。不過,CAS並不是在經過CL周期之後才送達存儲單元。實際上CAS與RAS一樣是瞬間到達的。由於晶元體積的原因,存儲單元中的電容容量很小,所以信號要經過放大來保證其有效的識別性,這個放大/驅動工作由S-AMP負責。但它要有一個準備時間才能保證信號的發送強度,這段時間我們稱之為tAC(Access Time from CLK,時鐘觸發後的訪問時間)。
        在讀操作的最後,要向SDRAM發出預充電(PRECHARGE)命令,以關閉已經激活的L-BANK。再同一片L-Bank上需等待tRP時間後,才開始下一次的讀、寫操作。SDRAM的讀操作支持突發模式(Burst Mode),突髮長度為1、2、4、8可選。
  •     數據寫入的操作也是在 tRCD 之後進行,但此時沒有了 CL(記住,CL 只出現在讀取操作中),行定址與列定址的時序圖和上文一樣 ,只是在列定址時,WE為有效狀態。由於數據信號由控制端發出,輸入時晶元無需做任何調校,只需直接傳到數據輸入寄存器中,然後再由寫入驅動器進行對存儲電容的充電操作,因此數據可以與 CAS 同時發送,也就是說寫入延遲為 0。不過,數據並不是即時地寫入存儲電容,因為選通三極體 (就如讀取時一樣)與電容的充電必須要有一段時間,所以數據的真正寫入需要一定的周期。為了保證數據的可靠寫入,都會留出足夠的 寫入/校正時間(tWR,Write Recovery Time),這個操作也被稱作寫回(Write Back)。tWR 至少占用一個時鐘周期或再多一點(時鐘頻率越高,tWR占用周期越多)。

重要參數

Parameter Symbol Description
Precharge command Period tRP 預充電有效周期
RAS to CAS Delay tRCD RAS 至 CAS 延遲
CAS Latency CL CAS 潛伏期,又稱為讀取潛伏期
Access Time from CLK tAC 時鐘觸發後的訪問時間
Write Recovery Time tWR 寫入/校正時間
Burst Lengths BL 突髮長度

References

1. SDRAM 的原理和時序
2. S3C2440 SDRAM記憶體驅動


Copyright (C) 2016 archiexie@cnblogs. All Rights Reserved.



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 觀察者模式, 就像一群人在玩大家來找茬一樣, 一幅一幅的玩. 這種玩的方式, 是類似於推拉模式中的推模式的. 推送給玩家的是, 兩幅圖片, 相同的部分和不同的部分都推送給你, 但是, 作為玩家來說, 其實更想要的, 只是不同的部分. 下麵以一個簡單的示意性實現為例,討論觀察者模式的結構。 觀察者模式 ...
  • arm處理器以其低功耗和小尺寸而聞名,幾乎所有的手機處理器都是基於arm,在嵌入式系統中應用非常廣泛。 armv6, armv7, armv7s, arm64指的是arm處理器的指令集。 i386, x86_64指的是pc端處理器指令集。 所有指令集原則上是向下相容的。 arm64:iPhone6s ...
  • 今天在運行自己編寫的App時,突然發現App在運行時閃退,然後就查看了Android Studio的Log,發現了這個錯誤,上網查了一下,才知道是RecyclerView的原生Bug,在數據更新時會出現這個Bug,錯誤顯示為 可以看到錯誤並沒有指到我自己所寫的代碼,所以斷定是原生的Bug。 錯誤解決 ...
  • Linux設備驅動中必須解決的一個問題是多個進程對共用資源的併發訪問,併發的訪問會導致競態。中斷屏蔽、原子操作、自旋鎖和信號量都是解決併發問題的機制。中斷屏蔽很少單獨被使用,原子操作只能針對整數進行,因此自旋鎖和信號量應用最為廣泛。自旋鎖會導致死迴圈,鎖定期間不允許阻塞,因此要求鎖定的臨界區小。信號... ...
  • CentOS 6.5 x86_64系統下安裝Apache-2.4.10,並且根據生產環境需要做了一定的安全配置。 ...
  • 設備驅動充當了硬體和應用軟體之間的紐帶,它使得應用軟體只需要調用系統軟體的應用編程介面(API)就可讓硬體去完成要求的工作。本文主要講解了Linux設備驅動與硬體的關係,Linux設備驅動的開發模式以及內核中相關的重要基礎數據結構。 ...
  • CentOS 6.5 x86_64系統下安裝Nginx-1.6.2,並且根據生產環境需要做了一定的安全配置。 ...
  • MII(media-independent interface)提供了MAC(media access control)與PHY(Ethernet physical layer)之間的互聯技術,該介面支持10Mb/s與100Mb/s的數據傳輸速率,數據傳輸的位寬為4位。MDIO(Management... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...