來源:FPGA開源工作室
在高速接口設計中,時序收斂往往是工程師面臨的最大“噩夢”。當數(shù)據(jù)傳輸速率突破 800Mbps 時,微小的 PCB 走線差異都足以讓系統(tǒng)崩潰。本文將深度剖析 Xilinx 7 系列(IDELAYE2)與 UltraScale 系列(IDELAYE3)的底層原理,帶你徹底攻克輸入延遲校準難題。
一、核心基礎概念:為什么我們需要 IDELAY?
在高速系統(tǒng)中,信號在 PCB 上的傳播速度約為 6英寸/ns。這意味著 100mil 的走線誤差約等于 16ps 的時間偏差。在 DDR3-1600 中,一個數(shù)據(jù)窗口僅有 625ps。如果 PCB 繞線無法做到絕對等長,數(shù)據(jù)眼圖就會閉合。
IDELAY 的作用,就是位于 FPGA IO Pad(焊盤)與內部邏輯之間,通過精確控制延時鏈(Delay Line),在亞納秒級別“微調”輸入信號的到達時間。設計時需牢記以下三大鐵律:
物理位置鎖定: IDELAY 位于 IOB 內部,緊鄰物理引腳。一旦信號進入內部布線,無法再使用。
伴侶關系: 在 DDR 等應用中,必須與 ISERDES 級聯(lián)使用。
心臟依賴: 必須由 IDELAYCTRL 提供高精度參考時鐘,否則無法保證延時準確性。

二、IDELAYE2 詳解(7 系列 FPGA)
對于 Artix-7, Kintex-7, Virtex-7,IDELAYE2 是主力軍。它采用“抽頭(Tap)”式結構,共有 32 個 Tap,每個 Tap 平均延時約 78ps(受參考時鐘影響),總延時范圍 0 ~ 2.5ns。
| 模式 | 場景推薦 | 詳解 |
|---|---|---|
| FIXED | 簡單接口 | 延時值在生成 Bitstream 時固定,上電不可變。 |
| VARIABLE | 動態(tài)校準 | 最常用。通過 CE/INC 端口運行時動態(tài)調節(jié),用于 DDR 讀平衡。 |
| VAR_LOAD | 快速配置 | 允許直接加載 5-bit 數(shù)值到延時線。 |
標準動態(tài)可調模式(VARIABLE)例化代碼:
IDELAYE2 #(
.CINVCTRL_SEL ("FALSE"),
.DELAY_SRC ("IDATAIN"), // 關鍵:信號源來自IOB引腳
.HIGH_PERFORMANCE_MODE ("TRUE"), // 開啟高性能模式減少抖動
.IDELAY_TYPE ("VARIABLE"), // 動態(tài)可調模式
.IDELAY_VALUE (0),
.REFCLK_FREQUENCY (200.0), // 參考時鐘需與IDELAYCTRL一致
.SIGNAL_PATTERN ("DATA")
)
idelay_inst (
.CNTVALUEOUT (cntvalueout), // 輸出當前延遲值(調試神器)
.DATAOUT (dataout), // 輸出至ISERDES
.C (clk),
.CE (ce), // 1=使能調整
.IDATAIN (datain), // 來自物理Pad的輸入
.INC (inc), // 1=增加延遲,0=減少
.LD (1'b0),
.REGRST (rst)
);
三、IDELAYE3 詳解(UltraScale/UltraScale+ 系列)
在 UltraScale 架構中,E3 帶來了質的飛躍:
精度革命: 原生精度提升至 4~10ps,適應 DDR4-2400+。
Native Time Mode: 支持 DELAY_FORMAT = "TIME",可直接設定 500ps,無需手動計算 Tap。
VT 自動校準 (EN_VTC): FPGA 后臺自動補償電壓溫度漂移,保證延時絕對穩(wěn)定。
UltraScale IDELAYE3 例化代碼:
IDELAYE3 #(
.DELAY_FORMAT ("TIME"), // 【亮點】單位直接使用ps
.DELAY_TYPE ("VARIABLE"),
.DELAY_VALUE (100), // 初始延遲 100ps
.REFCLK_FREQUENCY (300.0), // 推薦參考時鐘300MHz
.UPDATE_MODE ("ASYNC")
)
idelay_inst (
.CNTVALUEOUT (cntvalueout),
.DATAOUT (dataout),
.CE (ce),
.CLK (clk),
.DATAIN (datain),
.EN_VTC (en_vtc), // 【核心】使能自動補償
.INC (inc),
.RST (rst) // 注意:E3是RST,E2是REGRST
);
四、IDELAYE2 vs IDELAYE3 全面對比
| 特性 | IDELAYE2 (7系列) | IDELAYE3 (UltraScale) |
|---|---|---|
| 延時精度 | ~78ps / Tap | 4~10ps / Tap |
| 可調范圍 | 0~31 Tap | 0~512 Tap |
| 配置單位 | 僅支持 Tap | 支持 TIME (ps) |
| 校準功能 | 無內置 VT 校準 | 支持 EN_VTC 自動校準 |
五、工程實戰(zhàn)應用案例
案例 1:DDR3 接口物理層(IDELAYE2 + ISERDES)
核心邏輯是“盲調”。FPGA 通過狀態(tài)機掃描 0~31 個 Tap,找到數(shù)據(jù)最穩(wěn)定的點。注意由于 PCB 走線差異,每一位數(shù)據(jù)(DQ)必須獨立例化 IDELAY。
genvar i;
generate
for(i = 0; i < 8; i = i + 1) begin : gen_delay
? ? IDELAYE2 #(
? ? ? ? .IDELAY_TYPE ("VARIABLE"),
? ? ? ? // ... (其他參數(shù)) ...
? ? ) idelay_dq (
? ? ? ? .IDATAIN (dq_in[i]), ? // 每一位獨立輸入
? ? ? ? .DATAOUT (dq_delayed[i]),
? ? ? ? .INC ? ? (delay_inc), ?
? ? ? ? .CE ? ? ?(delay_ce),
? ? ? ? // ...
? ? );
? ? ISERDESE2 #( .DATA_RATE("DDR"), .DATA_WIDTH(8) ) iserdes_dq (
? ? ? ? .D (dq_delayed[i]), ? ?// 接收經過延時校準的數(shù)據(jù)
? ? ? ? // ...
? ? );
end
endgenerate

案例 2:MIPI D-PHY 接口(IDELAYE3)
利用 E3 的高精度和 VAR_LOAD 模式實現(xiàn)快速對齊。
IDELAYE3 #(
.DELAY_FORMAT ("TIME"),
.DELAY_TYPE ("VAR_LOAD"), // 允許直接加載數(shù)值
.DELAY_VALUE (50), // 初始補個 50ps 的 PCB 差異
.REFCLK_FREQUENCY (300.0),
.UPDATE_MODE ("ASYNC")
) idelay_mipi (
.DATAOUT (data_delayed),
.EN_VTC (1'b1), // 保持高電平,讓FPGA自動抵抗溫漂
.LOAD (load_delay),
.CNTVALUEIN (optimal_delay_val) // 直接加載算法值
);
六、使用必備注意事項
1. IDELAYCTRL 是必須的!一個 I/O Bank 內的所有 IDELAY 共享該 Bank 對應的 IDELAYCTRL。系統(tǒng)上電后,必須先復位 IDELAYCTRL,等待其 RDY 信號拉高。
2. 時鐘驅動有潔癖:IDELAY 的參考時鐘嚴禁使用普通邏輯時鐘,必須使用 BUFG/BUFIO 產生的穩(wěn)定時鐘。
3. 多通道獨立性:不要試圖用一個 IDELAY 控制一組總線。8 位數(shù)據(jù)線必須例化 8 個 IDELAY。
總結:IDELAY 原語是 FPGA 通往高速世界的“門票”。7 系列 (E2) 穩(wěn)健經典,適合 DDR3;UltraScale (E3) 引入皮秒級 Time 模式和自動溫補,是 DDR4 和 MIPI 的不二之選。
-
FPGA
+關注
關注
1660文章
22421瀏覽量
636631 -
Xilinx
+關注
關注
73文章
2201瀏覽量
131200 -
高速接口
+關注
關注
1文章
74瀏覽量
15299
原文標題:Xilinx FPGA 輸入延遲原語:IDELAYE2 與 IDELAYE3 詳解
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
FPGA | Xilinx ISE14.7 LVDS應用
xilinx原語問題
FPGA上有哪些額外的原語?
Xilinx FPGA常用原語介紹
Xilinx Vivado I/O延遲約束介紹
Xilinx原語使用方法有哪些
Xilinx原語使用方法
Xilinx FPGA串行通信協(xié)議介紹
Xilinx FPGA輸入延遲原語介紹
評論