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