摘 要 :DDR3 SDRAM 是第二代雙倍數據傳輸速率同步動態隨機存儲器, 以其大容量、 高速率和良好的兼容性得到了廣泛應用。 文中介紹了 DDR3 的特點和操作原理, 以及利用 MIG 軟件工具在 Virtex - 6 系列 FPGA 中實現 DDR3 SDRAM控制器的設計方法, 并進行硬件測試。 驗證了 DDS3 控制器的可行性, 其工作穩定、 占用資源少、 可植性強等。
DDR3 SDRAM 是從 DDR、 DDR2 發展而來的一種高 速同步動態隨機訪問存儲器。 由于 DDR3 SDRAM 可以 在脈沖的上升和下降沿都傳輸數據, 因此傳輸數據的等 效頻率是工作頻率的兩倍。 與 DDR2 相比, DDR3 主要 有以下優勢: ( 1) DDR3 采用 8- bit 預取技術, 解決了 外部數據傳輸率與核心頻率之間的矛盾, 保證了數據 傳輸率的持續增長, 同時增加了帶寬。 ( 2) DDR3 的核 心電壓為 1.5 V, 增加異步重置與 ZQ 校準功能, 功耗 比 DDR2 降低了 25% 。 ( 3) DDR3 存儲器模塊的地址、 命令、 控制信號和時鐘采用了“ fly - by” 的拓撲結構, 大幅減輕了地址 / 命令 / 控制與數據總線的負載, 提高 了信號的完整性[ 2] 。本文介紹了 DDR3 的特點和操作原理, 利用 MIG 軟 件工具在 Virtex - 6 系列 FPGA 中實現 DDR3 SDRAM 控 制器的設計, 并給出了硬件測試的結果。
1 DDR3 的操作原理
DDR3 SDRAM 加電后必須按照規定的步驟完成 初始化。 在初始化的過程中應注意對模式寄存器和擴 展模式寄存器的配置。 通過初始化可以完成對 CAS 延遲, 突發長度, 突發類型, 輸出驅動能力, 片上端接電 阻( ODT) 的值, 伴隨 CAS 的附加延遲, 片外驅動器校 準等配置[ 3 - 4] 。 初始化完成后, DR3 SDRAM 進入正常 工作狀態, 此時可以對其進行尋址和讀寫操作。
1. 1 預充命令
預充命令用于釋放已經打開的 Bank 和已經打開 的行或者打開新的 Bank 和新的行。 發送預充命令后, 要經過 tRP( Row Precharge command Period, 行預充電 有效周期) 個時鐘發送行有效命令。 如果超過了這個 延遲, 那么 Bank 就會進入空閑狀態。 地址線的 A10 用于決定是對一個還是所有的 Bank 進行預 充。 一 個Bank 被預充之后, 進入空閑狀態, 等待接收激活命令。
1. 2 激活命令
在任何讀寫命令被發送到 DDR3 SDRAM 存儲器 的行上之前, Bank 中的行必須使用激活命令進行激 活。 與激活命令一起被觸發的地址用來選擇將要存取 的 Bank 和行, 與讀或寫命令一起觸發的地址位用來選 擇突發存取的起始列單元。
1. 3 讀命令
讀命令用來啟動一個突發的存儲器讀操作, 以訪 問一個激活的行。 BA0 ~ BA2 用來選擇存儲體 Bank 地址, A0 ~ Ai 提供的輸入地址用來選擇開始列位置。 在讀操作完成之后, 這個行在隨后的訪問中仍是活躍, 直到該行被預充命令關閉。 隨著數據一起傳送的還包 括一個雙向的數據選通信號 DQS, 在讀周期中, DQS 由 DDR 存儲器產生, 它與數據時邊沿對齊, 其讀時 序[ 2] 如圖 1 所示。
1.4 寫命令
寫命令用來啟動一個突發的 存 儲 器 寫 操 作, 由 FPGA 向 DDR3 SDRAM 寫 入 數 據, 只 需 按 照 DDR3 SDRAM 的工作要求發出相應的指令即可。 BA0 ~ BA2 用來選擇存儲體 Bank 地址, A0 ~ Ai 提供的輸入地址用 來選擇開始列位置。 在寫周期中, DQS 由 DDR3 控制 器產生, 它 與 數 據 時 中 心 對 齊, 其 寫 時 序[ 2] 如 圖 2 所示。
1. 5 刷新命令
DDR3 是動態存儲器, 必須要定期進行刷新才能 維持其存儲的內容。 刷新間隔和 DDR3 存儲器芯片的 溫度有關。 刷新方式分為兩種: 自動刷新和自刷新。 自動刷新用于正常操作模式, 在自動刷新時, 其他命令 無法操 作。 自 刷 新 主 要 用 于 低 功 耗 狀 態 下 的 數 據 保存。
2 DDR3 SDRAM 控制器的總體設計
DDR3 SDRAM 控制器可以采用 Xilinx virtex - 6 系 列 FPGA 提供的免費 IP 核 MIG3. 9 來設計, 這樣可以 縮短開發周期, 減少設計人員的工作量, 簡化了系統設 計。 用戶只需在 MIG 的 GUI 圖形界面選擇對應的芯片型號, 總線寬度和速度級別, 并設置 CAS 延遲、 突發 長度、 引腳分配等參數, 即可生成 DDR3 SDRAM 控制 器, 包括 HDL 代碼和 UCF 約束文件。 Xilinx virtex - 6 系列的 FPGA 內存接口解決方案如圖 3 所示, 該解決 方案屏蔽了內存底層操作的一些細節。 用戶設計模塊 可以通過用戶接口模塊直接操縱內存控制器。
DDR3 SDRAM 控制器的主要功能是完成對 DDR3 SDRAM 的初始化, 將 DDR3 SDRAM 復雜的讀寫時序 轉化為用戶簡單的讀寫時序, 以及將 DDR3 SDRAM 接 口的雙時鐘數據轉換為用戶的單時鐘沿數據, 使用戶 像操作普通 RAM 一樣控制 DDR3 SDRAM; 同時, 控制 器還要產生周期性的刷新命令來維持 DDR3 SDRAM 內的數據不需要用戶的干預[ 5] 。 DDR3 SDRAM 控制 器的總體框圖[ 1] 如圖 4 所示, 物理層模塊的右側信號 端口連接 DDR3 SDRAM 的物理引腳。 其主要包括 4 部分: 基礎模塊 ( Infrastructure) 、 用戶界面模塊 ( User Interface) 、 物理層模塊( Physical Layer) 和存儲器控制 模塊( Memory Controller) 。
基礎模塊主要用來接收通過 FPGA 全局時鐘網絡 的外部 200 MHz 的差分時鐘, 然后通過數字時鐘管理 器( DCM) 產生用戶接口時鐘、 控制模塊使用的時鐘和 DDR3 存儲器的時鐘, 同時產生一個復位信號對整個 IP 核進行全局復位。 該模塊還包括一個延時控制單 元, 用來同步校準設計中的延時單元以減少功耗。
用戶接口模塊主要控制命令和數據連續的輸入和 輸出, 用來接收和存儲用戶的數據, 命令和地址等信 息, 起到緩沖和同步數據的作用。
物理層模塊直接與 DDR3 SDRAM 通信, 其主要功 能是 捕 獲 DDR3 SDRAM 發 出 的 數 據, 產 生 DDR3 SDRAM 所需要的控制指令信號, 并通過輸入輸出緩存 發送所有 DDR3 SDRAM 的控制信號、 地址信號以及數 據信號, 同時保證指令與地址, 數據的同步和信號的維持[ 6] 。
控制模塊主要實現對 DDR3 的初始化和命令的操 作, 故其由初始化和命令控制兩部分組成。 DDR3 上 電后經過 200 μs 的穩定期, 再等待 500 μs 把時鐘使能 信號 CKE 拉高, 保持至少 10 ns 后開始 ODT 過程, 然 后對擴展模式寄存器和模式寄存器進行配置, 使能 DLL 并對 DLL 復位, 校準結束, 信號 phy_ initial_ done 拉高則表示初始化完成。 初始化完成后, 控制模塊自 動產生命令和控制信號并按照 DDR3 的讀寫時序要求 送給 DDR3, 命令發送完畢后提供給用戶一個命令應答信號, 設計者根據這一信號判斷是否可以發送下一 個命令。 整個過程用戶完全不用干涉存儲器的自動刷 新、 激活和預充電過程, 這些控制命令和過程都會有控 制器自動發出和完成。
通常情況下, DDR3 SDRAM 存儲器僅用作數據的存, 可以將 2 GB 的 DDR3 SDRAM 成一個 虛擬的 FIFO, 如圖 5 所示, 并將這個虛擬的 FIFO 劃分 為上行 FIFO 和下行 FIFO 兩部分。
3 實驗結果
為驗證 DDR3 控制器 IP 核的正確性, 將生成的代 碼添加到 ISE 工程前對采用 MIG 自動生成的測試模 塊在 Xilinx ISE14.2 編程環境下進行功能仿真驗證。
該模塊可以向存儲器發出一系列讀寫命令, 并對寫人 的數據和讀回的數據進行比較, 從而驗證控制器的正確性, 仿真結果如圖 6 所示。 從圖 6 可以看到 phy_init_done 信號置 1 表明初始化完成, 否則為 0。 只有當app_en = 1 和 app_rdy = 1, app_cmd 和 app_addr 才能寫人成功。 當 app_cmd = 000 時, 當前為寫操作; 當 app_ cmd = 001 時, 當前為讀操作。 突發長度 BL 的值設置 為 8, 地址位每增加 64, 數據端口同時寫人兩個 256 位 的數據, 可以通過 error 這個比較信號驗證 DDR3 控制 器正確與否, 在檢測出讀寫數據項的同時該信號輸出 低電平。 從仿真結果可以看出比較信號 error 輸出始 終為低電平, 說明寫人和讀取的數據相同, 所以該測試 模塊仿真通過。
為確保設計的可行性和可靠性, 對設計的控制器 進行約束和綜合實現, 將產生的 bit 文件下載到 FPGA 進行硬 件 測 試。 硬 件 測 試 過 程 采 用 Xilinx 公 司 的 XC6SLX240T FPGA 以及 Micron 的容量為 1 GB、 數據位 寬 64 bit、 含 10 位列地址線、 14 位行地址線和 3 位 Bank 地址線的 MT4JSF12864HZ 芯片。 Xilinx 提供了一個集 成于 ISE 軟件中的 FPGA 片上調試工具 Chipscope, 它 可以捕獲和顯示實時信號, 觀察在系統設計中的硬件 和軟件之間的相互作用。 其原理是設定采樣點數, 實 時采用數據并存儲到 FPGA 片內的 RAM 中, 然后通過 JTAG 接口傳送到 ISE 來顯示。 由于 RAM 容量有限, 一次采樣到的數據也有限, 因此在硬件測試時, 以循環 讀寫的方式進行讀寫數據指令的執行, 以便在邏輯分 析儀中捕獲到數據。 對寫人數據和讀回數據進行比較 時, 用戶可以通過 error 這個比較信號驗證 DDR3 控制 器的正確與否, 在檢測出讀寫數據項同時該信號輸出 低電平。 用調試工具 Chipscope 捕獲到的數據以及指 示和相關控制信號如圖 7 所示, 讀寫比較信號 error 輸出始終為低電平, 說明寫人和讀取的數據相同, 硬件驗證通過。
4 結束語
通過對 DDR3 操作原理的分析, 給出了 DDR3 控 制器的設計及實現。 將 DDR3 控制器在 Xilinx 公司的 Virtex - 6 系列 FPGA 芯片上實現, 在板卡上能夠控制 Micron 公司的 DDR3 芯片穩定地讀寫數據。 經測試驗 證該 DDR3 控制器的可行性, 其工作穩定可靠, 占用邏 輯資源較少, 且具有較高的可移植性以及簡單的用戶 接口, 在此基礎上進行系統開發, 將縮短系統開發周 期, 同時也降低了系統成本。
評論
查看更多