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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...