利用直接時鐘控制技術(shù)實現(xiàn)存儲器接口數(shù)據(jù)采集
提要
本應(yīng)用指南介紹了在 VirtexTM-4 器件中實現(xiàn)存儲器接口的直接時鐘控制數(shù)據(jù)采集技術(shù)。直接時鐘控制方案利用了 Virtex-4 系列所獨有的某些架構(gòu)特性(例如,每個 I/O 模塊 (IOB) 中均具備一個 64-tap 的絕對延遲線)。
簡介
大多數(shù)存儲器接口都是源同步接口,從外部存儲器器件傳出的數(shù)據(jù)和時鐘/ 選通脈沖是邊沿對齊的。在 Virtex-4 器件采集這一數(shù)據(jù),需要延遲時鐘/ 選通脈沖或數(shù)據(jù)。利用直接時鐘控制技術(shù),數(shù)據(jù)經(jīng)延遲,并與內(nèi)部 FPGA 時鐘實現(xiàn)中心對齊。在這個方案中,內(nèi)部 FPGA 時鐘采集傳出的數(shù)據(jù)。存儲器傳出的時鐘/ 選通脈沖用于決定與數(shù)據(jù)位相關(guān)的延遲值。因此,與選通脈沖相關(guān)的數(shù)據(jù)位的數(shù)量不受限制。由于無需將選通脈沖分配給相關(guān)數(shù)據(jù)位,所以不需要其他時鐘資源。
時鐘/ 選通脈沖和數(shù)據(jù)位使用的 Virtex-4 資源是一條 64-tap 絕對延遲線。該 64-tap 絕對延遲線可利用 IDELAY 和 IDELAYCTRL primitive 實現(xiàn)。時鐘/ 選通脈沖和數(shù)據(jù)位均通過此 64-tap絕對延遲線來布線。雖然選通脈沖不 用于采集數(shù)據(jù),但它用于確定數(shù)據(jù)與內(nèi)部 FPGA 時鐘實現(xiàn)中心對齊所需的 tap 數(shù)量。以下部分將詳細(xì)解釋直接時鐘控制技術(shù)方案的設(shè)計及實現(xiàn)。
選通脈沖邊沿檢測
與時鐘/ 選通脈沖相關(guān)的數(shù)據(jù)位的延遲值就是內(nèi)部 FPGA 時鐘上升沿與時鐘/ 選通脈沖中心之間的相位差。假設(shè)時鐘/ 選通脈沖和數(shù)據(jù)實現(xiàn)了邊沿對齊。要確定這個相位差,時鐘/ 選通脈沖通過 IOB 內(nèi)的 64-tap 絕對延遲線輸入,并利用內(nèi)部 FPGA 時鐘在增量 tap 輸出端對其進行采樣。
要確定時鐘/ 選通脈沖的中心,至少需要檢測到時鐘/ 選通脈沖的兩個邊沿或轉(zhuǎn)換。檢測出第二次轉(zhuǎn)換所需的 tap 數(shù)(即第二個邊沿的 tap)和檢測出第一次轉(zhuǎn)換所需的 tap 數(shù)(即第一個邊沿的 tap)之差,即為時鐘/ 選通脈沖寬度。這個差值的二分之一就是脈沖中心(即脈沖中心的 tap)。從內(nèi)部 FPGA 時鐘上升沿到時鐘/ 選通脈沖中心之間的 tap 數(shù),即為第一個邊沿的tap 數(shù)與脈沖中心的 tap 數(shù)之和。
表1 描述了各類 tap 數(shù)量。
圖1 說明了通過使數(shù)據(jù)延遲相應(yīng)的 tap 數(shù),讓數(shù)據(jù)與內(nèi)部 FPGA 時鐘實現(xiàn)中心對齊的兩種情況。第 1 種情況所示為,由于時鐘/ 選通脈沖的下降沿是被檢測到的第一個邊沿,因此內(nèi)部FPGA 時鐘的上升沿位于延遲數(shù)據(jù)的中心。第 2 種情況所示為,由于時鐘/ 選通脈沖的上升沿是檢測到的第一個邊沿,因此內(nèi)部 FPGA 時鐘下降沿位于延遲數(shù)據(jù)的中心。
實現(xiàn)選通脈沖邊沿檢測
由于具有專用的 IDELAY 和 IDELAY_CTRL 電路,所以可以輕松地在 Virtex-4 器件中實現(xiàn)確定延遲值的電路。實現(xiàn)確定延遲值電路的結(jié)構(gòu)圖如圖2 所示。
利用一個簡單的算法檢測存儲器時鐘/ 選通脈沖的邊沿。將初始值為 0 的時鐘/ 選通脈沖輸入IDELAY 模塊。時鐘/ 選通脈沖將不停地增加 1 tap 的延遲,直到檢測到第一個邊沿。然后記錄下檢測出第一個邊沿所需的 tap 數(shù)。在檢測到第二個邊沿之前,時鐘/ 選通脈沖仍然不停地增加 1 tap 的延遲。然后記錄下檢測出第二個邊沿所需的 tap 數(shù)。根據(jù)兩次記錄的值,計算出脈沖寬度。在用 tap 數(shù)確定時鐘/ 選通脈沖寬度后,除以 2 即得到中間值。中間值與檢測出第一個邊沿所需的 tap 數(shù)之和為延遲數(shù)據(jù)所需的 tap 數(shù)。
IDELAY 模塊可用的 tap 總數(shù)為64。因此,當(dāng)頻率為 200 MHz 或以下時,將無法檢測出兩個邊沿。如果在 64 tap 結(jié)束后僅檢測出一個邊沿,那么延遲數(shù)據(jù)所需的 tap 數(shù)應(yīng)為,檢測出第一個邊沿所需的 tap 數(shù)減去 16 tap (約 1.25 ns,每個 tap 的延時約為 75 ps)。一個 200 MHz 時鐘/ 選通脈沖周期的四分之一約為 16 tap。根據(jù)時序分析,該值也適用于更低的頻率,最低可達 110 MHz。當(dāng)頻率低于 110 MHz 時,如果在 64 tap 結(jié)束后未檢測出任何邊沿,那么延遲數(shù)據(jù)所需的 tap 數(shù)應(yīng)為 32 tap(約 2.5 ns,每個 tap 的延時約為 75 ps)。該值足以使內(nèi)部 FPGA時鐘邊沿位于數(shù)據(jù)窗口內(nèi)。
檢測第一個和第二個邊沿僅需一個小型狀態(tài)機。只有在為確定數(shù)據(jù)延遲 tap 數(shù)而發(fā)出的虛讀操作過程中,才啟用該狀態(tài)機。在正式工作之前,發(fā)送至外部存儲器器件的虛讀操作命令包含多條背靠背讀命令。狀態(tài)機將控制輸入 IDELAY 電路的信號,即DLYRST、DLYCE 和 DLYINC。
DLYRST - 延遲線復(fù)位信號,將延遲線中的 tap 數(shù)重設(shè)為按 IOBDELAY_VALUE 屬性設(shè)置的值。本設(shè)計中被設(shè)為 "0"。
DLYCE - 延遲線使能信號,確定何時激活延遲線遞增/ 遞減信號。
DLYINC - 延遲線遞增/ 遞減信號,可增加或減少延遲模塊中的 tap 數(shù)。表2 描述了延遲線的運行模式。
用于控制這些延遲模塊輸入的狀態(tài)圖如圖3 所示。該狀態(tài)機的四種狀態(tài)分別為:DELAY_RST、IDLE、DELAY_INC 和 DETECT_EDGE。
DELAY_RST
該狀態(tài)是發(fā)起虛讀操作時啟用的狀態(tài)機的第一個狀態(tài)。在這種狀態(tài)下,延遲模塊被重設(shè)為“0”tap。該狀態(tài)之后是多個 IDLE 狀態(tài)。
IDLE
在這種狀態(tài)下,延遲模塊保持“無變化”運行模式。除 IDLE 狀態(tài)之外,每種狀態(tài)結(jié)束后都會出現(xiàn)數(shù)個 IDLE 狀態(tài),
DELAY_INC
這個狀態(tài)使延遲模塊 tap 數(shù)加 1。該狀態(tài)之后是數(shù)個IDLE 狀態(tài)。
DETECT_EDGE
在這種狀態(tài)下,比較延遲模塊的輸出及其上一個值,用于檢測信號邊沿或轉(zhuǎn)換,同時,延遲模塊 tap 數(shù)加 1。該狀態(tài)之后是數(shù)個 IDLE 狀態(tài)。
在確定了延遲數(shù)據(jù)所需的 tap 數(shù)后,將啟用數(shù)據(jù) IDELAY 電路,并增加到這一數(shù)值。按照所需的 tap 數(shù),使數(shù)據(jù) IDELAY 電路增加相同的時鐘周期。數(shù)據(jù) IDELAY 電路的讀/ 寫數(shù)據(jù)通路結(jié)構(gòu)圖如圖4 所示。
數(shù)據(jù)采集與二次采集
如圖4 所示,利用內(nèi)部 FPGA 時鐘,在輸入 DDR 觸發(fā)器中采集延遲數(shù)據(jù)。然后,把這些觸發(fā)器的輸出存儲到兩個 FIFO 中;一個代表上升沿數(shù)據(jù),另一個代表下降沿數(shù)據(jù)。這些 FIFO 是利用 LUT RAM 實現(xiàn)的,其寫使能操作由控制器生成的讀使能信號提供,并在數(shù)據(jù)格式校準(zhǔn)的基礎(chǔ)上與采集的讀取數(shù)據(jù)對齊。
DDR2 SDRAM 器件并未隨讀取數(shù)據(jù)一同提供讀有效或讀使能信號。因此,控制器將根據(jù) CAS延遲和突發(fā)長度,生成這個讀使能信號。在開始執(zhí)行讀取操作時,必須令該讀使能信號有效,并在選通脈沖的最后一個上升沿結(jié)束后使其無效。在 IDDR 觸發(fā)器的輸出端,該讀使能信號必須與采集到的讀取數(shù)據(jù)對齊。為了實現(xiàn)讀使能對齊,在數(shù)據(jù)與 FPGA 時鐘對齊后,將已知數(shù)據(jù)格式寫入存儲器。然后讀回已知數(shù)據(jù)格式,并在讀使能信號與采集到的讀取數(shù)據(jù)對齊之前,利用移位寄存器延遲讀使能信號。每字節(jié)數(shù)據(jù)都會生成一個讀使能信號。圖5 為讀使能對齊的時序圖。
讀時序分析
這一部分介紹了利用直接時鐘控制技術(shù)實現(xiàn)的讀時序分析。直接在 FPGA 時鐘域內(nèi)采集讀取數(shù)據(jù),因此,用于數(shù)據(jù)有效窗口分析的存儲器參數(shù)就是存取時間 (TAC)。下面簡要介紹了此時序分析中使用的各個參數(shù)。
此時序分析中考慮的外部存儲器參數(shù)有:
TAC - 讀取數(shù)據(jù) (DQ) 的存取時間(以 FPGA 傳遞給存儲器的時鐘為參照)
TDCD - DCM 輸出占空比失真
利用 FPGA 時鐘而非存儲器時鐘/ 選通脈沖 (DQS),來采集讀取數(shù)據(jù) (DQ) ;因此,該分析考慮了 TAC (以時鐘為參照的數(shù)據(jù)存取時間)。在此分析中,未考慮 DQS - DQ 存儲器參數(shù),如TDQSQ 和 TQHS,因為 TAC 比這兩個參數(shù)更重要。
此時序分析中考慮的 FPGA 參數(shù)有:
TCLOCK_TREE-SKEW - 緊密放置在該組中的 IOB 觸發(fā)器的全局時鐘樹歪斜
TPACKAGE_SKEW - 特定器件/ 封裝的封裝歪斜
TSAMP - Virtex-4 源同步數(shù)據(jù)手冊中規(guī)定的采樣窗口
TIDELAYPAT_JIT - Virtex-4 數(shù)據(jù)手冊中規(guī)定的每個 IDELAY tap 的數(shù)據(jù)格式抖動
通過檢測 DQS 邊沿,計算出與 DQS 相關(guān)的數(shù)據(jù)位延遲。利用全局時鐘在 I/O 觸發(fā)器中采集DQS 來進行檢測。因此,最終得到的數(shù)據(jù)延遲值已經(jīng)包含了 I/O 觸發(fā)器的建立時間和保持時間。在進行最差情況分析時,需要考慮 I/O 觸發(fā)器固有的建立時間和保持時間。
此外,計算數(shù)據(jù)位和相關(guān)選通脈沖之間的歪斜也需要考慮 PCB 布局歪斜。
表3 所示為在205 MHz 頻率下,對DDR2 接口執(zhí)行的讀時序分析。全部參數(shù)單位均為皮秒。
TDATA_PERIOD 是時鐘周期的二分之一減去TMEM_DCD。TDATA_PERIOD 與不確定值之和的差,就是有效數(shù)據(jù)窗口 (43 ps)。因此,在 205 MHz 頻率下,-11Virtex-4 器件將產(chǎn)生 43 ps 的余量。
參考設(shè)計
存儲器接口生成器 (MIG) 工具中集成了直接時鐘控制數(shù)據(jù)采集技術(shù)的參考設(shè)計。該工具已被集成到 Xilinx Core Generator 工具中。最新版參考設(shè)計,可從 Xilinx 網(wǎng)站下載 IP 更新:http://www.xilinx.com/cn/xlnx/xil_sw_updates_home.jsp
結(jié)論
Virtex-4 I/O 架構(gòu)增強了源同步存儲器接口的實現(xiàn)。本應(yīng)用指南及參考設(shè)計中使用的架構(gòu)特性包括:
IDELAY 模塊 - 連續(xù)校準(zhǔn)的 tap 延時很小的延遲元件。
FIFO16 primitive - 用作 FIFO 的 Block RAM,無需使用生成狀態(tài)標(biāo)志所需的其他 CLB 資源。
高速差分全局時鐘資源提供了更好的占空比。差分時鐘減少了參考設(shè)計所需的全局時鐘資源數(shù)量。
評論