1
https://blog.csdn.net/weixin_44601655/article/details/134022530
2
https://zhuanlan.zhihu.com/p/530520454?utm_id=0
3
https://blog.csdn.net/weixin_45365488/article/details/135580904#:~:text=1%20%E5%8E%9F%E5%88%99%E4%B8%80%EF%BC%8C%E8%80%83%E8%99%91%E6%8B%93%E8%A1%A5%E7%BB%93%E6%9E%84%EF%BC%8C%E4%BB%94%E7%BB%86%E6%9F%A5%E7%9C%8BCPU%E5%9C%B0%E5%9D%80%E7%BA%BF%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%8C%E4%BD%BF%E5%BE%97%E5%9C%B0%E5%9D%80%E7%BA%BF%E6%9C%89%E5%88%A9%E4%BA%8E%E7%9B%B8%E5%BA%94%E7%9A%84%E6%8B%93%E8%A1%A5%E7%BB%93%E6%9E%84%EF%BC%9B%202%20%E5%8E%9F%E5%88%99%E4%BA%8C%EF%BC%8C%E5%9C%B0%E5%9D%80%E7%BA%BF%E3%80%81%E6%8E%A7%E5%88%B6%E7%BA%BF%E4%B8%8A%E7%9A%84%E5%8C%B9%E9%85%8D%E7%94%B5%E9%98%BB%E9%9D%A0%E8%BF%91CPU%EF%BC%88%E5%8F%91%E9%80%81%E7%AB%AF%EF%BC%89%EF%BC%9B%203%20%E5%8E%9F%E5%88%99%E4%B8%89%EF%BC%8C%E6%95%B0%E6%8D%AE%E7%BA%BF%E4%B8%8A%E7%9A%84%E5%8C%B9%E9%85%8D%E7%94%B5%E9%98%BB%E9%9D%A0%E8%BF%91DDR%EF%BC%9B%E6%95%B0%E6%8D%AE%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E8%B0%83%E8%8A%82ODT%20%E6%9D%A5%E5%AE%9E%E7%8E%B0%EF%BC%8C%E6%89%80%E4%BB%A5%E4%B8%80%E8%88%AC%E5%BB%BA%E8%AE%AE%E4%B8%8D%E7%94%A8%E5%8A%A0%E7%94%B5%E9%98%BB%E3%80%82%204,%E5%8E%9F%E5%88%99%E5%9B%9B%EF%BC%8C%E5%B0%86DDR%E8%8A%AF%E7%89%87%E6%91%86%E6%94%BE%E5%B9%B6%E6%97%8B%E8%BD%AC%EF%BC%8C%E4%BD%BF%E5%BE%97DDR%E6%95%B0%E6%8D%AE%E7%BA%BF%E5%B0%BD%E9%87%8F%E7%9F%AD%EF%BC%8C%E4%B9%9F%E5%B0%B1%E6%98%AF%EF%BC%8CDDR%E8%8A%AF%E7%89%87%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BC%95%E8%84%9A%E9%9D%A0%E8%BF%91CPU%EF%BC%9B%205%20%E5%8E%9F%E5%88%99%E4%BA%94%EF%BC%8C%E5%AF%B9%E4%BA%8E%E6%BA%90%E7%AB%AF%E5%8C%B9%E9%85%8D%E7%94%B5%E9%98%BB%E9%9D%A0%E8%BF%91CPU%EF%BC%88%E9%A9%B1%E5%8A%A8%EF%BC%89%E6%94%BE%EF%BC%8C%E8%80%8C%E5%AF%B9%E4%BA%8E%E5%B9%B6%E8%81%94%E7%AB%AF%E6%8E%A5%E5%88%99%E9%9D%A0%E8%BF%91%E8%B4%9F%E8%BD%BD%E7%AB%AF%E3%80%82%206%20%E5%8E%9F%E5%88%99%E5%85%AD%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%9C%89VTT%E7%AB%AF%E6%8E%A5%E7%94%B5%E9%98%BB%EF%BC%8C%E5%B0%86%E5%85%B6%E6%91%86%E6%94%BE%E5%9C%A8%E5%9C%B0%E5%9D%80%E7%BA%BF%E5%8F%AF%E4%BB%A5%E8%B5%B0%E5%88%B0%E7%9A%84%E6%9C%80%E8%BF%9C%E7%9A%84%E4%BD%8D%E7%BD%AE%E3%80%82%20%E4%B8%80%E8%88%AC%E6%9D%A5%E8%AF%B4%EF%BC%8CDDR2%E4%B8%8D%E9%9C%80%E8%A6%81VTT%E7%AB%AF%E6%8E%A5%E7%94%B5%E9%98%BB%EF%BC%8C%E5%8F%AA%E6%9C%89%E5%B0%91%E6%95%B0CPU%E9%9C%80%E8%A6%81%EF%BC%9BDDR3%E9%83%BD%E9%9C%80%E8%A6%81VTT%E7%AB%AF%E6%8E%A5%E7%94%B5%E9%98%BB%E3%80%82%207%20%E5%8E%9F%E5%88%99%E4%B8%83%EF%BC%8CDDR%E8%8A%AF%E7%89%87%E7%9A%84%E5%8E%BB%E8%80%A6%E7%94%B5%E5%AE%B9%E6%94%BE%E5%9C%A8%E9%9D%A0%E8%BF%91DDR%E8%8A%AF%E7%89%87%E7%9B%B8%E5%BA%94%E7%9A%84%E5%BC%95%E8%84%9A%E3%80%82
存是我們平常嵌入式系統中接觸的比較頻繁的硬體之一,但是我們對這個器件的瞭解卻知之甚少。主要的原因是作為嵌入式工程師的我們,這部分主要是配置引數,而這些引數都是由晶片廠商已經提供好了,硬體工程師都會基於廠商認證的DDR選型,減少開發週期。其實對於記憶體,有很多的細節和知識點可以深挖,本章的內容包括如下內容:
透過由淺入深的學習記憶體的基本原理
透過由淺入深的學習記憶體的軟硬體特性
從軟體的角度來學習下,我們該如何嘗試去配置一塊處理器上的DDR。
1. 情景
小張有一定的計算機背景知識,最近他在京東上買了兩條DDR3的記憶體,打算把筆記本升級成8G。可是一拆開包裝到就傻眼了:
4GB看起來很好,兩根剛好8GB。2Rx8是啥,PC3又是啥,10600似乎和他想買的1333的差好遠,後面那串數字又代表什麼呢?於是乎對於這些細節,我們越看越傻眼。後面講會詳細的介紹這些細節。
2. DDR的前世今生
2.1 ROM和RAM的概念
在迴歸DDR的發展過程之前,我們先來了解下儲存器的主要功能,其主要是儲存程式和各種資料,並能在計算機執行過程中高速、自動完成程式或資料的出存取。
首先,要了解下儲存的基本部分,ROM和RAM。
型別 作用 特點 發展
RAM(random access memory):隨機存取儲存器 是與CPU直接交換資料的內部儲存器,也叫主存(記憶體)。它可以隨時讀寫,而且速度很快,通常作為作業系統或其他正在執行中的程式的臨時資料儲存媒介。 電源關閉時RAM不能保留資料 SDRAM、DRAM、DDR
ROM:只讀儲存器 ROM所存資料,一般是裝入整機前事先寫好的,整機工作過程中只能讀出,而不像隨機儲存器那樣能快速地、方便地加以改寫 ROM所存資料穩定,斷電後所存資料也不會改變。 flash、HDD、SSD
從上面的可以看出,其主要的區別有兩點
ROM是可讀可寫,並且速度很快,而ROM只能事先寫,然後就只能讀取,所以程式在執行過程中必須讀寫,就必須要有RAM存在
ROM只作為儲存用途,斷電不會丟失資料;而RAM在斷電的時候會丟失資料
而對於RAM,可分為SRAM(靜態隨機儲存器)和DRAM(動態隨機儲存器)
型別 作用 特點
SRAM(Static Random Access Memory,靜態隨機儲存器) 它是一種具有靜止存取功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資料 優點是速度快,不必配合記憶體重新整理電路,可提高整體的工作效率。缺點是整合度低,功耗較大,相同的容量體積較大,而且價格較高,少量用於關鍵性系統以提高效率。
DRAM(Dynamic Random Access Memory,動態隨機儲存器) DRAM只能將資料保持很短的時間。為了保持資料,DRAM使用電容儲存,所以必須隔一段時間重新整理(refresh)一次,如果儲存單元沒有被重新整理,儲存的資訊就會丟失 必須重新整理,後面衍生出DDR,DDR2,DDR3,DDR4
2.2 發展歷程
但回顧記憶體容量的發展,從最初KB到GB的躍進,從單條1GB到如今單條16GB或者32GB的進化,經歷了漫長的過程。
從最初的時候,個人電腦和嵌入式系統對於功能的實現都比較簡單,記憶體的容量和儲存容量都比較小,只有64K到256KB,對於嵌入式系統上甚至更小。
對於個人電腦,個人電腦上是沒有記憶體條的,記憶體是直接以DIP晶片的形式安裝在主機板的DRAM插座上面,需要安裝8到9顆這樣的晶片,容量只有64KB到256KB,要擴充套件相當困難,但這對於當時的處理器以及程式來說這已經足夠了,直到80286的出現硬體與軟體都在渴求更大的記憶體,只靠主機板上的記憶體已經不能滿足需求了,於是記憶體條就誕生了。
對於嵌入式裝置,例如我最早開始接觸的51微控制器,內部就整合了ROM和RAM,空間很小。後來又接觸到了MTK的晶片,像山寨時期比較流程的53系列的晶片,就使用到了nor flash,可以片上執行,隨著時代的發展,35系列就引入了SDRAM,慢慢隨著CPU的主頻越來越高和對於RAM的容量要求越來越大,就慢慢的開始使用DDR。
那我們以PC的過程來講解發展過程,由於第一代DIP的晶片難以擴充套件,而隨著CPU的資料匯流排的寬度達到64bit,一根DDR就難以滿足處理需要,所以就需要兩根、4根,記憶體容量也有所增加,它的出現很快就替代了30pin SIMM記憶體,386、486以及後來的奔騰、奔騰Pro、早期的奔騰II處理器多數會用這種記憶體。
EDO DRAM【擴充套件資料輸出記憶體】
它擁有更大的容量和更先進的定址方式,這記憶體簡化了資料訪問的流暢,讀取速度DRAM快不少,主要用在486、奔騰,奔騰Pro、早期的奔騰II處理器的電腦上面。
在1991到1995年EDO記憶體盛行的時候,憑藉著製造工藝的飛速發展,EDO記憶體在成本和容量上都有了很大的突破,單條EDO記憶體容量從4MB到16MB不等,資料匯流排依然是32位,所以搭配擁有64位資料匯流排的奔騰CPU時基本都成對的使用。
SDR SDRAM【同步型動態儲存器】
然而隨著CPU的升級EDO記憶體已經不能滿足系統的需求了,記憶體技術也發生了大革命,插座從原來的SIMM升級為DIMM(Dual In-line Memory Module),兩邊的金手指傳輸不同的資料,SDR SDRAM記憶體插座的介面是168Pin,單邊針腳數是84,進入到了經典的SDR SDRAM(Single Data Rate SDRAM)時代。
SDRAM其實就是同步DRAM的意思,“同步”是指記憶體工作需要同步時鐘,內部命令的傳送與資料的傳輸都以它為基準。記憶體頻率與CPU外頻同步,這大幅提升了資料傳輸效率,再加上64bit的資料位寬與當時CPU的匯流排一致,只需要一根記憶體就能讓電腦正常工作了,這降低了採購記憶體的成本。
DDR
SDRAM從發展到現在已經經歷了四代,分別是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,現在已經發展到DDR5 SDRAM。
DDR SDRAM是Double Data Rate Synchronous Dynamic Random Access Memory(雙資料率同步動態隨機儲存器)的簡稱,是由VIA等公司為了與RDRAM相抗衡而提出的記憶體標準,為第二代SDRAM標準。其常見標準有DDR 266、DDR 333和DDR 400。其對於SDRAM,主要它允許在時鐘脈衝的上升沿和下降沿傳輸資料,這樣不需要提高時鐘的頻率就能實現雙倍的SDRAM速度,例如DDR266記憶體與PC133 SDRAM記憶體相比,工作頻率同樣是133MHz,但在記憶體頻寬上前者比後者高一倍。這種做法相當於把單車道更換為雙車道,記憶體的資料傳輸效能自然可以翻倍。
DDR2(Double Data Rate 2)SDRAM是由JEDEC(電子裝置工程聯合委員會)開發的第三代SDRAM記憶體技術標準,1.8v工作電壓,240線介面,提供了相較於DDR SDRAM更高的執行效能與更低的電壓,同樣採用在時鐘的上升/下降延同時進行資料傳輸的基本方式,但擁有兩倍於上一代DDR記憶體預讀取能力(即4bit資料讀預取能力),其常見的頻率規範有DDR2 400\533\667\800\1066\1333等,匯流排頻率553MHz的DDR2記憶體只需133MHz的工作頻率
DDR3 SDRAM相比起DDR2具備更低的工作電壓(1.5v),240線介面,支援8bit預讀,只需133MHz的工作頻率便可實現1066MHz的匯流排頻率。其頻率從800MHz起跳,常見頻率有DDR3 800\1066\1333\1600\1866\2133等。DDR3是當前流行的記憶體標準,Intel酷睿i系列(如LGA1156處理器平臺)、AMD AM3主機板及處理器的平臺都是其“支持者”。
DDR4相比DDR3最大的區別有三點:16bit預取機制(DDR3為8bit),同樣核心頻率下理論速度是DDR3的兩倍;更可靠的傳輸規範,資料可靠性進一步提升;工作電壓降為1.2V,更節能。
在80286時代,記憶體顆粒(Chip)是直接插在主機板上的,叫做DIP(Dual In-line Package)。到了80386時代,換成1片焊有記憶體顆粒的電路板,叫做SIMM(Single-Inline Memory Module)。那麼這樣有帶來哪些好處呢?
由陣腳形態變化成電路板帶來了很多好處:模組化,安裝便利等等,造就了我們現在的DIY市場的產生,我們就可以針對我們現在的PC進行記憶體的升級工作。
當時SIMM的位寬是32bit,即一個週期讀取4個位元組,到了奔騰時,位寬變為64bit,即8個位元組,於是SIMM就順勢變為DIMM(Double-Inline Memory Module)。這種形態一直延續至今,也是記憶體條的基本形態。現在的DIMM分為很多種:
RDIMM: 全稱(Registered DIMM),寄存型模組,主要用在伺服器上,為了增加記憶體的容量和穩定性分有ECC和無ECC兩種,但市場上幾乎都是ECC的。
UDIMM:全稱(Unbuffered DIMM),無緩衝型模組,這是我們平時所用到的標準臺式電腦DIMM,分有ECC和無ECC兩種,一般是無ECC的。
SO-DIMM:全稱(Small Outline DIMM),小外型DIMM,膝上型電腦中所使用的DIMM,分ECC和無ECC兩種。
Mini-DIMM:DDR2時代新出現的模組型別,它是Registered DIMM的縮小版本,用於刀片式伺服器等對體積要求苛刻的高階領域。
從DDR到DDR4主要的區別是在於傳輸速率的不同,隨著時鐘週期的不斷降低,傳輸率也不斷提高。還有電壓也越來越低。有趣的是命名規則,大部分桌上型電腦DIMM廠商都會標註DDRx-yyy,x代表第幾代,yyy代表資料傳輸率。而大部分的SO-DIMM和RDIMM等則標註PCx-zzzz,x還代表第幾代,zzzz則代表最大頻寬。因為DDR位寬為64位,8個位元組,所以zzzz=yyy * 8,而yyy又是時鐘的兩倍。
所以小張的記憶體條上的PC3-10600S代表DDR3,1333MHz的SO-DIMM。小張又問,那2R*8啥意思呢?
2.3 DDR區別
DDR到DDR5的主要變化,我們可以看到,為了配合整體行業對於效能,容量和省電的不斷追求,規範的工作電壓越來越低,晶片容量越來越大, IO的速率也越來越高。
除了電壓,容量和IO的速率變化之外,還列出了Bank, Bank Group,Prefetch和Burst Length的演進,bank數越來越多,到DDR4出現bank group,prefetch也從2n增加到4n,8n。雖然我們說現在DDR4的最大速率是3200MT/s, 但是這是指的DDR4的IO頻率,即DDR4和memroy controller之間的介面資料傳輸速率。那麼DRAM是怎麼實現用比較低的核心傳輸頻率來滿足日益高漲的高速IO傳輸速率的需求呢?這就是靠prefetch來實現的。
從DDR開始到DDR3很好理解,Prefetch相當於DRAM core同時修了多條高速公路連到外面的IO口,來解決IO速率比內部核心速率快的問題,IO資料速率跟核心頻率的倍數關係就是prefetch。
burst length的長度跟CPU的cache line大小有關。Burst length的長度有可能大於或者等於prefetch。但是如果prefetch的長度大於burst length的長度,就有可能造成資料浪費,因為CPU一次用不了那麼多。所以從DDR3到DDR4,如果在保持DDR4記憶體data lane還是64的前提下,繼續採用增加prefetch的方式來提高IO速率的話,一次prefetch取到的資料就會大於一個cache line的大小 (512bits),對於目前的CPU系統,反而會帶來效能問題。
DDR4出現了Bank Group,這就是DDR4在不改變prefetch的情況下,能繼續提升IO速率的秘密武器。DDR4利用Bank group的interleave,實現IO速率在DDR3基礎上進一步提升。
3. 記憶體原理
其實從外觀上就可以看出來小張的記憶體條由很多海力士的記憶體顆粒組成。從記憶體控制器到記憶體顆粒內部邏輯,籠統上講從大到小為:channel>DIMM>rank>chip>bank>row/column,如下圖:
一個現實的例子是:
在這個例子中,一個i7 CPU支援兩個Channel(雙通道),每個Channel上可以插倆個DIMM,而每個DIMM由兩個rank構成,8個chip組成一個rank。由於現在多數記憶體顆粒的位寬是8bit,而CPU頻寬是64bit,所以經常是8個顆粒可以組成一個rank。所以小張的記憶體條2R X 8的意思是由2個rank組成,每個rank八個記憶體顆粒(為啥我們以後講)。由於整個記憶體是4GB,我們可以算出單個記憶體顆粒是256MB。
這次我們來看看rank和Chip裡面有什麼,如下圖:
這是個DDR3一個Rank的示意圖。我們把左邊128MB Chip拆開來看,它是由8個Bank組成,每個Bank核心是個一個儲存矩陣,就像一個大方格子陣。這個格子陣有很多列(Column)和很多行(Row),這樣我們想存取某個格子,只需要告知是哪一行哪一列就行了,這也是為什麼記憶體可以隨機存取而硬碟等則是按塊存取的原因。
實際上每個格子的儲存寬度是記憶體顆粒(Chip)的位寬,在這裡由8個Chip組成一個Rank,而CPU定址寬度是64bit,所以64/8=8bit,即每個格子是1個位元組。選擇每個格子也不是簡單的兩組訊號,是由一系列訊號組成,以這個2GB DDR3為例:
其引腳按照功能可以分為7類:前3類為電源、地、配置
PIN分類 名稱 方向 功能描述
電源 VDD PI 晶片主電源輸入(1.2V)
電源 VDDQ PI DQ訊號線電源供電(1.2V)
電源 VPP PI DRAM啟用電壓(2.5V)
電源 VREFCA PI 控制/命令/地址訊號參考電平
地 VSS - 主地
地 VSSQ - DQ訊號參考地
配置 ZQ - 阻抗匹配(ODT)校準參考,接240歐電阻到地
後4類為:控制訊號、時鐘訊號、地址訊號、資料訊號
PIN分類 名稱 方向 功能描述
控制訊號 ALERT_N OUT 報警訊號,若命令/地址出現奇偶校驗錯誤或者CRC錯誤,該PIN腳拉低,告知DDR Controller
控制訊號 TEN IN 測試模式使能訊號,高電平使能測試模式。正常操作過程中,必須拉低。
控制訊號 RESET_N IN DDR復位訊號,低電平有效。正常操作過程中,保持高電平。
控制訊號 PAR IN 命令/地址訊號的奇偶校驗使能,可透過暫存器禁用或者使能。
控制訊號 CS_N IN DDR晶片使能,用於多個RANK時的RANK組選擇。
控制訊號 ODT IN 阻抗匹配使能
控制訊號 CKE IN 時鐘訊號使能。透過此電平,可以控制晶片是否進入低功耗模式。
控制訊號 ACT_N IN 命令啟用訊號,這個訊號為低電平時,可以透過A[14:16]地址訊號線選擇啟用命令的行地址。為高電平時,Address訊號線正常使用。
PIN分類 名稱 方向 功能描述
時鐘訊號 CK_N/CK_P IN 差分時鐘訊號,由DDR Controller輸出。
地址訊號 BG0 IN Bank Group地址選擇
地址訊號 BA[0:1] IN Bank地址選擇
地址訊號 A[0:16] IN 地址選擇訊號,其中A16還有RAS_N功能,A15有CAS_N功能,A14有WE_N功能,A12有BC_N功能,A10有AP功能。
資料訊號 DQ[0:15] IN/OUT 低8位資料和高8位資料訊號線,共16位資料訊號線。
資料訊號 LDM/LDBI IN/OUT 低8位資料掩碼
資料訊號 UDM/UDBI IN/OUT 高8位資料掩碼
資料訊號 LDQS_N/LDQS_P IN/OUT 低8位資料選通訊號
資料訊號 UDQS_N/UDQS_P IN/OUT 高8位資料選通訊號
電源、地、配置訊號的功能很簡單,在此不贅述。控制訊號主要是用來完成DDR4與DDR4 Controller之間的狀態切換。DDR4中最重要的訊號就是地址訊號和資料訊號。
如上DDR4晶片有20根地址線(17根Address、2根BA、1根BG),16根資料線。在搞清楚這些訊號線的作用以及地址訊號為何還有複用功能之前,我們先丟擲1個問題。假如我們用20根地址線,16根資料線,設計一款DDR,我們能設計出的DDR定址容量有多大?
Size(max)=(2^20) * 16=1048576 * 16=16777216bit=2097152B=2048KB=2MB。
但是事實上,該DDR最大容量可以做到1GB,比傳統的單線編碼定址容量大了整整512倍,它是如何做到的呢?答案很簡單,分時複用。我們把DDR儲存空間可以設計成如下樣式:
首先將儲存空間分成兩個大塊,分別為BANK GROUP0和BANK GROUP1,再用1根地址線(還剩19根),命名為BG,進行編碼。若BG拉高選擇BANK GROUP0,拉低選擇BANK GROUP1。(當然你也可以劃分成4個大塊,用2根線進行編碼)
再將1個BANK GROUP區域分成4個BANK小區域,分別命名為BANK0、BANK1、BANK2、BANK3。然後我們挑出2根地址線(還剩餘17根)命名為BA0和BA1,為4個小BANK進行地址編碼。
此時,我們將DDR記憶體顆粒劃分成了2個BANK GROUP,每個BANK GROUP又分成了4個BANK,共8個BANK區域,分配了3根地址線,分別命名為BG0,BA0,BA1。然後我們還剩餘17根訊號線,每個BANK又該怎麼設計呢?這時候,就要用到分時複用的設計理念了。
剩下的17根線,第一次用來表示行地址,第二次用來表示列地址。現在修改為傳輸2次地址,在傳輸1次資料,定址範圍最多被擴充套件為2GB。雖然資料傳輸速度降低了一半,但是儲存空間被擴充套件了很多倍。這就是改善空間。
所以,剩下的17根地址線,留1根用來表示傳輸地址是否為行地址。
在第1次傳輸時,行地址選擇使能,剩下16根地址線,可以表示行地址範圍,可以輕鬆算出行地址範圍為2^16=65536個=64K個。
在第2次傳輸時,行地址選擇禁用,剩下16根地址線,留10根列地址線表示列地址範圍,可以輕鬆表示的列地址範圍為2^10=1024個=1K個,剩下6根用來表示讀寫狀態/重新整理狀態/行使能、等等複用功能。
這樣,我們可以把1個BANK劃分成67108864個=64M個地址編號。如下所示
所以1個BANK可以分成65536行,每行1024列,每個儲存單元16bit。
所以1個BANK可以分成65536行,每行1024列,每個儲存單元16bit。
每行可以儲存1024*16bit=2048bit=2KB。每行的儲存的容量,稱為Page Size。
單個BANK共65536行,所以每個BANK儲存容量為65536*2KB=128MB。
單個BANK GROUP共4個BANK,每個BANK GROUP儲存容量為512MB。
單個DDR4晶片有2個BANK GROUP,故單個DDR4晶片的儲存容量為1024MB=1GB。
至此,20根地址線和16根資料線全部分配完成,我們用正向設計的思維方式,為大家講解了DDR4的儲存原理以及介面定義和定址方式。
但是細心的同學發現一個問題,對於每一個bank,按照正常的10位資料,那麼col應該是1024,而現在是128,是什麼原因呢?
那麼問題又來了,為什麼Column Address的定址能力只有128呢?請繼續看下圖
在上圖中,可以清晰地發現,10bits的Column Address只有7bits用於列地址譯碼!列地址0,1,2並沒有用!!!列地址0,1,2,這3bits被用於什麼功能了?或者是DDR的設計者腦殘,故意浪費了這三個bits?在JESD79-3規範中有如下的這個表格:
可以發現,Column Address的A2,A1,A0三位被用於Burst Order功能,並且A3也被用於Burst Type功能。由於一般情況,我們採用的都是順序讀寫模式(即{A2,A1,A0}={0,0,0}),所以此時的A3的取值並無直接影響,這個後面章節中重點介紹。
CA[2:0]的值決定了一次Burst sequence的讀寫地址順序。
比如一次Burst Read的時候如果CA[2:0]=3’b001表示低三位從地址1開始讀取,CA3=0的時候按順序讀取1,2,3,0,5,6,7,4,CA3=1的時候交錯讀取1,0,3,2,5,4,7,6。
對於Prefetch而言,正好是8N Prefetch,對於Burst而言對應BL8。
BC4其實也是一次BL8的操作,只是丟棄了後一半的資料。
更形象地理解就是對於一個Bank裡面的Memory Array,每個Memory Cell可以看作是一個Byte的集合體。CA[9:3]選中一行中的一個特定Byte,再由CA[2:0]選擇從這個Byte的哪個位置開始操作。CA3既參與了列地址譯碼,也決定Burst是連續讀取還是交錯讀取。Prefetch也決定了I/O Frequency和SDRAM Core Frequency之間的關係。
3. 總結
本章主要是針對DDR的發展和原理進行了學習,主要集中在硬體的組成原理,其中涉及到Channel > DIMM > Rank > Chip > Bank > Row/Column,其組成如下圖所示
Channel:一個主機板上可能有多個插槽,用來插多根記憶體。這些槽位分成兩組或多組,組內共享物理訊號線。這樣的一組資料訊號線、對應幾個槽位(記憶體條)稱為一個channel(通道)。簡單理解就是DDRC(DDR控制器),一個通道對應一個DDRC。CPU外核或北橋有兩個記憶體控制器,每個控制器控制一個記憶體通道。記憶體頻寬增加一倍。(理論上)
DIMM(dual inline memory module)是主機板上的一個記憶體插槽。一個Channel可以包括多個DIMM。
Rank是一組記憶體晶片的集合,當晶片位寬x晶片數=64bits(記憶體總位寬)時,這些晶片就組成一個Rank。一般是一個晶片位寬8bit,然後記憶體每面8個晶片,那麼這一面就構成一個Rank(為了提高容量,有些雙面記憶體條就有兩個rank。在DDR匯流排上可以用一根地址線來區分當前要訪問的是哪一組)。同一個Rank中的所有晶片協作來共同讀取同一個Address(一個Rank8個晶片 * 8bit = 64bit),這個Address的資料分散在這個Rank的不同晶片上。設計Rank的原因是這樣可以使每個晶片的位寬小一些,降低複雜度。
Chip是記憶體條上的一個晶片。由圖中是由8個bank組成了一個memory device。
Bank:Bank是一個邏輯上的概念。一個Bank可以分散到多個Chip上,一個Chip也可以包含多個Bank。Bank和Chip的關係可以參考下面的圖,每次讀資料時,選定一個Rank,然後同時讀取每個chip上的同一bank。
Row/Column組成的Memeory Array:Bank可以理解為一個二維陣列bool Array[Row][Column]。而Row/Column就是指示這個二維陣列內的座標。注意讀取時每個Bank都讀取相同的座標
4. 參考文件
《記憶體的故事》外一篇–Rambus之戰
從誕生到三足鼎立格局,DRAM到底經歷了什麼?
記憶體系列二:深入理解硬體原理
LPDDR4協議規範
————————————————
版權宣告:本文為CSDN博主「奇小葩」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/u012489236/article/details/107730731