譯文作者:ljgibbs
知乎連結:https://zhuanlan.zhihu.com/p/262052220
一文了解 DDR4 的基礎知識。
原文地址:https://www.systemverilog.io/ddr4-basics#dram-sub-system
申請翻譯授權中,如有侵權,將會刪除
存儲訪問 Accessing MemoryDDR4 的讀寫訪問都基於 Burst 形式(譯註:Burst 一般譯作突發傳輸或者猝發傳輸)。突發傳輸起始時,由用戶指定傳輸的起始地址,以及本次傳輸的長度,在 DDR4 中這個長度為 8 或者 4,後者是一個 chopped 的傳輸。(譯註:chopped burst ,即提利昂·蘭尼斯特式短小的傳輸)讀寫操作分為兩個階段,以 ACTIVATE 激活命令(保持一個周期的 ACT_n & CS_n 低電平信號)開始,其後是具體的讀或者寫命令。與激活命令同時發出的地址信號,用於確定所需激活的 BankGroup,Bank,Row,這項步驟稱為 RAS 階段,Row Address Strobe。而在第二階段,與讀寫命令同步發出的地址信號用於確定突發傳輸的起始列地址。這項步驟稱為 CAS 階段,Column Address Strobe。由於單個 Bank 只有一個 Sense Amps,只能緩存單個行的內容。因此在激活某行後,訪問同一 Bank 不同行之前,需要使用 PRECHARGE 命令關閉(de-activate)當前激活行。PRECHARGE 命令好比關上當前打開的文件櫃抽屜,命令發出後當前 Sense Amps 中緩存的行會被寫回原地址。相較於直接使用 PRECHARGE 命令關閉某個行,也可以使用 RDA (Read with Auto-Precharge)或者 WRA (Write with Auto-Precharge)命令,在當前傳輸結束後自動關閉當前行。因為列地址只需要使用 A0-A9 10bit,因此 CAS 階段使用 A10 比特表示當前是否啟用自動關閉(Auto-Precharge)。命令真值表 Command Truth Table至今為止,我們一直在使用 」命令「 (Command)這一說法,激活命令,讀寫命令等等。但在本文開始的時候,我們並沒有提到 DRAM 有"命令" IO,那麼這些命令都是如何通過 IO 發送給 DRAM 的呢?
事實上,DRAM 使用 ACT_n, RAS_n, CAS_n & WE_n ,這幾個信號 IO 的組合來發出命令。
表-部分命令的真值表上表是 DRAM 部分命令的子集,完整的命令真值表可以在 JEDEC 標準 JESD79-4B 4.1 節中獲得。
讀命令 Read圖-8 讀命令操作上圖是讀命令的時序圖,此時突發傳輸長度為 8,稱為 BL8。
第一步是 ACT 命令,當時在地址總線上的是 row 地址第二步發出了 RDA 命令,此時地址總線上為 column 地址RDA 命令指示 DRAM 在讀操作完成後自動關閉當前 Bank寫命令 Write圖-9 寫命令操作上圖是寫命令的時序圖。
第二步發出了寫命令,第一次突發傳輸寫入 COL 起始的地址中,第二次突發傳輸寫入 COL+ 8 地址第二次突發傳輸之前無需再發出 ACT 命令,因此所操作的 ROW 行此前已經被打開,數據緩存於 Sense Amps 中此外,第一次發出的是純粹的 WR 命令,所以傳輸結束後,該行仍處於激活狀態。第二次發出的是具有自動關閉功能的 WRA 命令,因此在傳輸結束後自動關閉了該行。[備註:本文對一些內容並沒有做出詳細的解釋,比如 A16&A15&A14 這些具有復用功能的地址信號中,自動關閉功能通過 A10發出,而 A12 則用於選擇突發傳輸的長度:4/8, 如果模式寄存器中相應的配置位使能的話]
DRAM 子系統 DRAM sub-system在前面的章節中,我們已經討論了很多關於 DRAM 本身的內容,在本節中,我們將討論 ASIC 或者 FPGA 與 DRAM 通信時所需的系統組件,由 3 部分組成:
DDR Controller(譯註:一般簡稱為 MC,即 Memory Controller)圖-10 DRAM 子系統組成上圖中的信息量很大,讓我們一點點拉扯來看:
一般來說,DRAM 是一個焊接在 PCB 上的獨立晶片,而 PHY 與 MC 則是 FPGA 或者 ASIC 用戶邏輯的一部分用戶邏輯與 MC 之間的接口是由用戶定義的,並沒有被標準化用戶邏輯向 MC 發出讀寫命令時,其中的地址使用的是邏輯地址MC 再將邏輯地址轉換為物理地址,將用戶邏輯的命令轉換後向 PHY 發出MC 與 PHY 之間採用標準化接口進行通信,一般為 DFI (DDR PHY Interface),DFI 標準可從以下連結得到 http://www.ddr-phy.org/PHY 將 MC 的命令轉換為具體的底層信號,驅動 DRAM 的物理 IO 接口PHY 與 DRAM 之間的接口由 JEDEC 標準化由此看來,MC 好比是讀寫 DDR 的大腦,而 PHY 則是做出反應的肌肉
當用戶激活一行時,整個行被緩存至 Sense Amps 中。後續用戶對該緩存行讀寫的代價會相對較低,因為可以省略第一階段的激活命令。MC 一般可以對訪問 DRAM 的請求進行重排序,來高效地利用行緩存機制。為了實現重排序,MC 一般具有一小塊 cache 或者 TCAM,並始終返回最新的數據(譯註:and always returns the lastest data 這裡沒有搞懂)。所以用戶邏輯無需擔心數據丟失或者衝突,因為控制器會負責重排序功能PHY 中包括了模擬電路的部分,用於驅動 DRAM 的 IO。並負責調整寄存器以增大驅動能力或者調節端接電阻,以提高信號完整性言而總之 In a netshell讓我們最後總結下本文:
DRAM 以 Bank Groups Bank Row Columns 的形式組織用戶發出的地址稱為邏輯地址,由 DRAM 控制器轉換為物理地址後發送給 DRAMDRAM 根據其 DQ 數據總線寬度,劃分為 x4、x8 以及 x16 三類可以通過 depth/width 串聯多個 DRAM 顆粒實現所需的大小讀寫命令分為兩個階段進行,第一步激活某行,第二步讀寫該行DRAM 子系統由 DRAM 顆粒、PHY 以及 控制器三部分組成天若有情天亦老,點個在看好不好