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