文 豐,李晴爽,李輝景
(中北大學(xué) 電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山西 太原 030051)
隨著現(xiàn)代數(shù)據(jù)存儲(chǔ)采集技術(shù)的高速發(fā)展,在數(shù)據(jù)采集過(guò)程中對(duì)于數(shù)據(jù)處理的要求越來(lái)越高,在保證得到的數(shù)據(jù)可靠且不丟失的同時(shí),更要求數(shù)據(jù)處理速度快、實(shí)時(shí)性強(qiáng)、穩(wěn)定性高且功耗低。高速數(shù)據(jù)采集作為現(xiàn)代衛(wèi)星通信、傳感器及數(shù)據(jù)記錄儀等應(yīng)用設(shè)備的核心裝置,要采用滿足高帶寬、大容量的高速存儲(chǔ)設(shè)備。DDR 是目前比較成熟的數(shù)據(jù)緩存技術(shù)[1]。
Xilinx UltraScale 架構(gòu)的高性能FPGA 具有低功耗、高速DSP 和高塊RAM-TO-LOGIC 比率的優(yōu)點(diǎn);同時(shí)還提供了大量的電源選項(xiàng),在所需的系統(tǒng)性能和最小功耗之間提供了最優(yōu)平衡;而且該芯片含有大量的高速差分線對(duì)GTH QUAD,可以很好地滿足傳輸大量高速差分信號(hào)的要求。本課題將使用基于此架構(gòu)的FPGA 設(shè)計(jì)DDR3 的讀寫操作。但DDR3 不能直接被處理器訪問(wèn),因此需要設(shè)計(jì)一款控制器來(lái)管理DDR3 的正常讀寫[2-3]。
DDR SDRAM 采用雙信道同步存儲(chǔ)方式。SDR SDRAM 在一個(gè)周期內(nèi)可以讀取或?qū)懭霐?shù)據(jù)一次,DDR SDRAM 在一個(gè)周期內(nèi)可以讀取或?qū)懭霐?shù)據(jù)兩次。因此,DDR SDRAM 的傳輸速率是SDR SDRAM 的兩倍[4]。目前,已有的DDR 產(chǎn)品的性能參數(shù)對(duì)比圖如表1 所示。
表1 四代DDR 的性能參數(shù)對(duì)比
從上面的性能參數(shù)對(duì)比表中可以看到,每一代DDR的升級(jí)較前一代都會(huì)有著明顯的功耗降低、電壓減少、數(shù)據(jù)傳輸速率的提升[5]。但高性能的DDR 芯片也會(huì)給硬件電路設(shè)計(jì)帶來(lái)很多問(wèn)題,例如阻抗設(shè)計(jì)要求不滿足、信號(hào)干擾嚴(yán)重等現(xiàn)象。對(duì)此應(yīng)結(jié)合頻率、速率等方面的具體要求選擇。本課題根據(jù)取數(shù)速率的要求選擇DDR3。DDR 性能的不斷優(yōu)化也給軟件方面的設(shè)計(jì)應(yīng)用帶來(lái)了很多問(wèn)題,造成用戶開發(fā)困難,對(duì)此Xilinx 推出了其相應(yīng)的IP 核,可以很好地解決DDR 底層邏輯設(shè)計(jì)困難的問(wèn)題。用戶通過(guò)MIG IP 核提供的用戶接口,可以快速實(shí)現(xiàn)FPGA 對(duì)DDR3 的控制。
本課題選用鎂光公司的MT41K256M16-125 芯片,該芯片包含時(shí)鐘、地址、控制、數(shù)據(jù)4 種信號(hào)線。CK_P和CK_N 時(shí)鐘信號(hào)輸入芯片的全局差分時(shí)鐘信號(hào);A0~A13 和BA0~BA2 地址信號(hào)在DDR3 初始進(jìn)程時(shí)負(fù)責(zé)對(duì)初始模式的寄存器參數(shù)的配置。包括配置長(zhǎng)度、操作或者突發(fā)模式的設(shè)定等;數(shù)據(jù)信號(hào)DQ0~DQ15 實(shí)現(xiàn)16 bit 數(shù)據(jù)信號(hào)的傳遞,LDQS 和UDQS 差分?jǐn)?shù)據(jù)信號(hào)分別控制兩組數(shù)據(jù)的寫入平衡,LDM 和UDM 信號(hào)是數(shù)據(jù)掩碼信號(hào)。CKE 控制信號(hào)的自刷新以及使能輸入,CS_N 控制片選信號(hào)的輸入[6];RAS_N 是行選擇信號(hào),CAS_N 是列選擇信號(hào),WE_N 控制寫使能,ODT 引腳接高使能、接低禁用DDR3 內(nèi)部的終止電阻。ZQ 引腳用于輸出驅(qū)動(dòng)校準(zhǔn)的外部參考引腳,此引腳與240 Ω 的電阻(RZQ)綁定,電阻再與VSSQ 綁定[7]。其中,VSSQ 代表DQ 電源地,VSS 代表DQ 電源地,VDD 和VDDQ 分別代表電源電壓和DQ 電源電壓,本課題DDR3 采用1.35 V 供電。
本課題使用的FPGA 芯片是基于Xilinx UltraScale架構(gòu)的XCKU060-2FFVA1156I,該芯片包含2 個(gè)高電壓HR I/O Bank 和8 個(gè)低電壓HP I/O Bank,如圖1 所示,完全可以滿足1.35 V 供電的DDR3 芯片的使用。
圖1 XCKU060-2FFVA1156I 的Bank 分配情況
FPGA 中每個(gè)Bank 設(shè)計(jì)有不同的lane,它們是T0、T1、T2、T3,每個(gè)lane 中的引腳編號(hào)為N0~N12,下面簡(jiǎn)單地介紹應(yīng)用于XCKU060 的DDR3 的引腳分配規(guī)則。
(1)DDR3 的dqs 信號(hào)必須被分配在時(shí)鐘對(duì)專用字節(jié)N6 與N7 上,與dqs 信號(hào)相關(guān)聯(lián)的同組dq 信號(hào)必須被分配在同一個(gè)lane 內(nèi)N1 和N12 引腳之外的其他引腳上,與之相關(guān)聯(lián)的同組dm 信號(hào)必須被分配在相同lane的N0 引腳上。
(2)DDR3 的dqs 信號(hào)所處的lane 可以被認(rèn)為是數(shù)據(jù)字節(jié)lane,數(shù)據(jù)字節(jié)lane 的N1 和N12 引腳可以被用來(lái)存放地址或控制信號(hào)。地址信號(hào)和控制信號(hào)可以在N0~N12 中的任何一個(gè)引腳上,但所有的地址,控制信號(hào)必須在同一個(gè)bank 中。
(3)每個(gè)bank 都有一個(gè)vrp 引腳需要連接DCI,在包含輸入的I/O bank 以及僅包含輸出的bank 內(nèi)都需要vrp引腳,只包含輸出的bank 需要vrp 引腳,因?yàn)榈刂沸盘?hào)和控制信號(hào)使用SSTL15DCI/SSTL135_DCI 來(lái)啟動(dòng)控制輸出阻抗,當(dāng)DCI 選擇級(jí)聯(lián)時(shí),vrp 引腳可以被當(dāng)做正常的I/O 口使用。
(4)內(nèi)存復(fù)位引腳reset 可以被分配到任何地方,只要能夠滿足時(shí)長(zhǎng)。
(5)系統(tǒng)時(shí)鐘引腳ck 可以被分配到不同的bank,但必須在同一列的內(nèi)存接口bank 內(nèi)。
在45bank 對(duì)控制信號(hào)、時(shí)鐘信號(hào)、地址信號(hào)和數(shù)據(jù)信號(hào)分配I/O 引腳,DDR3 與FPGA 的原理圖如圖2~圖4 所示。
圖2 DDR3 退耦電路
圖4 DDR3 的1.35 V 供電電源模塊電路
DDR3 SDRAM IP 核是Xilinx 公司提供的用戶使用接口,它將FPGA 的片內(nèi)邏輯功能封裝起來(lái),在用戶開發(fā)過(guò)程中,只需按照需求在IP 核向?qū)е羞M(jìn)行配置即可[8]。DDR3 的IP 核生成流程圖如圖5 所示。
圖5 DDR3 SDRAM IP 核生成流程圖
對(duì)IP 核配置完成后即可得到DDR3 SDRAM 控制器的用戶接口解決方案[9],如圖6 所示。
用戶通過(guò)用戶接口模塊對(duì)DDR3 進(jìn)行讀寫操作,用戶接口模塊位于IP 核的最前端,直接對(duì)接用戶邏輯控制模塊。
內(nèi)存控制模塊在物理層模塊和用戶接口模塊中間,IP 核的本地接口在內(nèi)存控制模塊前端與用戶接口模塊連接。內(nèi)存控制模塊可以幫用戶提供DDR3 外部存儲(chǔ)設(shè)備和用戶設(shè)計(jì)模塊之間的數(shù)據(jù)傳送機(jī)制,并且可以幫用戶提交讀寫請(qǐng)求給存儲(chǔ)器;其后端連接至物理層接口,可以處理物理層接口模塊的所有請(qǐng)求;同時(shí),內(nèi)存控制模塊可以選擇是否重新排序的功能,將其接收到的所有選擇進(jìn)行重新排序可以優(yōu)化整個(gè)數(shù)據(jù)傳輸過(guò)程的數(shù)據(jù)吞吐量與時(shí)延[10]。
物理層模塊的后端通過(guò)引腳連接至外部存儲(chǔ)設(shè)備DDR3,其前端連接至內(nèi)存控制模塊。物理層模塊可以暫時(shí)存儲(chǔ)來(lái)自內(nèi)存控制模塊輸入的DDR3 系統(tǒng)的數(shù)據(jù)、地址、控制等信號(hào),并且產(chǎn)生控制DDR3 的指令信號(hào),以此可以保證地址、數(shù)據(jù)信號(hào)與指令能夠同步傳送,并傳輸捕獲到的DDR3 發(fā)出的數(shù)據(jù)給內(nèi)存控制模塊[11-12]。
用戶在IP 核的信息配置頁(yè)面對(duì)DDR3 的參數(shù)進(jìn)行設(shè)置時(shí)用戶接口模塊即被確定,用戶邏輯控制模塊的功能在于通過(guò)控制用戶接口的信號(hào)得以控制DDR3 的讀寫操作[13-14]。
在讀數(shù)期間由時(shí)鐘信號(hào)、準(zhǔn)備信號(hào)、使能寫地址信號(hào)、使能信號(hào)和命令信號(hào)有效進(jìn)行讀操作,更新讀地址。讀期間的理想時(shí)序圖如圖7 所示。
當(dāng)寫地址和寫數(shù)據(jù)信號(hào)同時(shí)有效時(shí)才可以成功進(jìn)行寫操作。寫操作與寫地址不必同時(shí)進(jìn)行,二者可以相差幾個(gè)周期。當(dāng)用戶接口的準(zhǔn)備信號(hào)和使能信號(hào)同時(shí)處于高使能狀態(tài)時(shí),寫操作的命令和地址信號(hào)是有效的,當(dāng)app_wdf_rdy 信號(hào)和app_wdf_wren 信號(hào)處于高使能狀態(tài)時(shí),寫入數(shù)據(jù)的信號(hào)是有效的[15]。寫操作時(shí)各信號(hào)的理想時(shí)序圖如圖8 所示。
圖8 DDR3 寫操作
由于Xilinx 提供的DDR3 IP 核的用戶接口信號(hào)邏輯設(shè)計(jì)比較復(fù)雜,用戶在應(yīng)用時(shí)比較難以設(shè)計(jì),為了方便用戶的使用,引入讀寫FIFO 和讀寫邏輯控制模塊對(duì)DDR3 SDRAM IP 核進(jìn)行用戶接口優(yōu)化??梢云帘蔚鬒P核中復(fù)雜的用戶接口,用簡(jiǎn)易的接口封裝使得用戶只需確保信號(hào)能夠順利地存入進(jìn)行寫操作,以及能夠順利地從讀操作中讀出使用,如圖9 所示。
圖9 類FIFO 接口封裝結(jié)構(gòu)圖
DDR3 SDRAM 模塊由IP 核,讀寫FIFO 和讀寫控制模塊四部分組成。寫FIFO 用于控制信號(hào)寫入數(shù)據(jù)流,讀FIFO 用來(lái)將DDR3 內(nèi)讀取的數(shù)據(jù)順利輸出,整個(gè)讀寫控制模塊通過(guò)控制DDR3 整體的讀寫進(jìn)行狀態(tài)將讀寫效率控制在最佳狀態(tài)。DDR3 讀寫狀態(tài)機(jī)是DDR3 模塊的關(guān)鍵設(shè)計(jì),狀態(tài)機(jī)存在3 種工作狀態(tài):在write 狀態(tài)下進(jìn)行寫操作,在read 狀態(tài)下進(jìn)行讀操作,在idle 狀態(tài)下不進(jìn)行任何操作。為了保證狀態(tài)機(jī)的讀寫效率不被影響,在使用時(shí)不能頻繁地切換讀寫狀態(tài)。通過(guò)控制寫FIFO 的編程空信號(hào)和讀FIFO 的編程滿信號(hào)以采用雙門限設(shè)置的方法,數(shù)據(jù)將在寫FIFO 數(shù)據(jù)已滿的狀態(tài)下丟失,而當(dāng)讀FIFO 已滿狀態(tài)下數(shù)據(jù)將會(huì)緩存在DDR3 內(nèi)部。所以讀操作低于寫操作的優(yōu)先級(jí)。
在型號(hào)為XCKU060-2FFVA1156I 的FPGA 以及型號(hào)為MT41K256M16 的DDR3 SDRAM 基礎(chǔ)上對(duì)設(shè)計(jì)的DDR3 控制器進(jìn)行驗(yàn)證。圖10、圖11 為在VIVADO 軟件對(duì)DDR3 內(nèi)部讀寫操作進(jìn)行仿真得到的簡(jiǎn)易時(shí)序圖。
圖10 DDR3 內(nèi)部寫操作仿真時(shí)序圖
圖11 DDR3 內(nèi)部讀操作仿真時(shí)序圖
從圖10 中可以看出,當(dāng)app_wdf_rdy 信號(hào)和app_wdf_wren 信號(hào)同時(shí)有效時(shí)可以準(zhǔn)確寫入對(duì)應(yīng)的數(shù)據(jù)“00、01、02、03、00”。從圖11 中可以看出當(dāng)app_rd_data_valid 信號(hào)有效時(shí),app_read_data 信號(hào)有效的輸出“00、01、02”。該控制器的讀寫操作數(shù)據(jù)一致,驗(yàn)證了設(shè)計(jì)的有效性及準(zhǔn)確性,可以有效使用該控制器實(shí)現(xiàn)DDR3 數(shù)據(jù)讀寫。
本設(shè)計(jì)以Xilinx 公司的XCKU060 FPGA 為核心,通過(guò)對(duì)DDR3 SDRAM 分區(qū)存儲(chǔ)實(shí)現(xiàn)了高速圖像數(shù)據(jù)采集,并且保證了DDR3 在高速數(shù)據(jù)流緩存中工作的可靠性和較高的工作效率。在介紹DDR3 的讀寫操作是如何實(shí)現(xiàn)的的基礎(chǔ)上,介紹了讀寫控制模塊的用戶接口優(yōu)化。本設(shè)計(jì)模塊接口應(yīng)用簡(jiǎn)單、可移植性較高。該設(shè)計(jì)在航天、軍事、醫(yī)學(xué)和農(nóng)業(yè)領(lǐng)域的高速圖像處理領(lǐng)域有著廣泛的應(yīng)用前景。