以下文章來源于FPGA開源工作室,作者Leee
IDELAYCTRL 是 Xilinx FPGA(特別是支持高速 I/O 的系列,如 Virtex-5/6/7、Kintex-7、Artix-7、Spartan-6/7 等)中用于管理和校準輸入延遲模塊(IDELAYE2/IDELAYE3)的必須存在的參考時鐘控制模塊。
1 核心功能
IDELAYCTRL 的主要功能是為 IDELAY 模塊提供精確的延遲校準。
IDELAY(輸入延遲單元)是一個可以以 ~78ps(32 步進)或 ~11ps(512 步進) 的精度對輸入信號進行延遲調整的硬件原語。
但是這種延遲的精度依賴于一個參考時鐘(REFCLK),該時鐘的頻率決定了每一步延遲的實際時間。
IDELAYCTRL 模塊的作用就是持續監控和校準 IDELAY 的延遲步進,使其不隨 PVT(工藝、電壓、溫度)變化而漂移。
簡單說:沒有 IDELAYCTRL,IDELAY 的延遲量將不可預測。
2 工作原理
IDELAYCTRL 需要一個穩定且頻率匹配的參考時鐘 REFCLK
REFCLK 頻率要求:
對于 IDELAYE2(7系列、Virtex-6等):
REFCLK 必須為 200 MHz(如果延遲步進為 78ps) 或 300 MHz(如果延遲步進為 52ps,僅部分型號支持)。
通常 200 MHz 對應 78ps 步進,300 MHz 對應 52ps 步進。
但 7 系列中,實際步進為 78ps(200MHz) 或 ~52ps(300MHz),具體需查手冊。
對于 IDELAYE3(UltraScale/UltraScale+):
支持更多頻率,步進可為 ~10ps 到 ~50ps,需根據選擇的步進配置對應頻率。
校準機制:
IDELAYCTRL 內部包含一個環形振蕩器和校準電路,它通過比較 REFCLK 周期與延遲鏈的傳播時間,動態調整 IDELAY 單元的步進,使其保持恒定。
3 使用場景
IDELAYCTRL 用于以下場合:
高速源同步接口(如 DDR、LVDS 接收)
比特對齊(通過調整不同 bit 的延遲實現通道對齊)
時序收斂(調整建立/保持時間余量)
通常與 IDELAYE2/IDELAYE3 和 ISERDESE2/ISERDESE3 結合使用。
4 使用規則
一個 IDELAYCTRL 可服務多個 IDELAY:
在同一個區域(通常是一個 Bank 或幾個相鄰 Bank)內的所有 IDELAY 可以共享一個 IDELAYCTRL 實例。
跨區域需多個 IDELAYCTRL:
不同時鐘區域(Clock Region)或不同 IDELAY 類型可能需要獨立的 IDELAYCTRL。
必須提供穩定 REFCLK:
REFCLK 必須來自全局時鐘資源(如 MMCM/PLL 輸出),并且頻率精確。
上電后需等待 RDY 信號:
IDELAYCTRL 啟動后需要一段時間校準,完成后輸出 RDY 信號為高,之后才能使用 IDELAY。
5 原語示例(7系列)
IDELAYCTRL#( .SIM_DEVICE("7SERIES") // 對于7系列,Virtex-6 為"VIRTEX6" ) idelayctrl_inst( .RDY(rdy_out), // 輸出:校準就緒信號,高有效 .REFCLK(refclk), // 輸入:參考時鐘(200 MHz) .RST(rst) // 輸入:復位,高有效,初始化校準 );
idelayctrl_inst:IDELAYCTRL generic map( SIM_DEVICE=>"7SERIES" ) port map( RDY =>rdy_out, REFCLK=>refclk, RST =>rst );
6 連接方式
在典型設計中:
使用一個 MMCM/PLL 產生精確的 200 MHz 參考時鐘。
將該時鐘連接到 IDELAYCTRL 的 REFCLK。
將 IDELAYCTRL 的 RDY 信號作為系統中 IDELAY 模塊使能的條件(或作為系統復位釋放條件)。
同一區域的所有 IDELAYE2 共享此 IDELAYCTRL。
必須使用 IDELAYCTRL:
只要使用了 IDELAYE2/IDELAYE3,就必須例化并正確連接 IDELAYCTRL,否則延遲值會隨環境變化,導致接口不穩定。
REFCLK 頻率必須精確:
如果 REFCLK 頻率偏差大,校準后的延遲步進誤差也會增大。
復位和就緒:
上電或復位后,需等待 RDY 變高才能使用 IDELAY。
7 與 IDELAYE2 的連接示例
//1. 先產生200MHz 參考時鐘(例如從100MHz 系統時鐘倍頻)
clk_wiz_inst(
.clk_in1(sys_clk),
.clk_out1(refclk_200m)//200MHz
);
//2. 實例化 IDELAYCTRL
IDELAYCTRL idelayctrl_inst(
.RDY(rdy),
.REFCLK(refclk_200m),
.RST(~pll_locked) // PLL 鎖定時釋放復位
);
//3. 使用 IDELAYE2(需要延遲的輸入信號)
IDELAYE2#(
.DELAY_SRC("IDATAIN"),
.IDELAY_TYPE("VAR_LOAD"), // 或"FIXED","VARIABLE"
.IDELAY_VALUE(0),
.REFCLK_FREQUENCY(200.0)
)
idelaye2_inst(
.IDATAIN(data_in),
.DATAOUT(data_delayed),
.C(refclk_200m), // 時鐘,用于加載新延遲值
.CE(ce),
.INC(inc),
.LD(load),
.LDPIPEEN(1'b0),
.CNTVALUEIN(cntvaluein), // 動態加載的延遲值
.CNTVALUEOUT(cntvalueout),
.REGRST(1'b0)
);
//4. 在系統中,確保在 rdy 為高后才使能 IDELAY 操作
// 時鐘生成
clk_wiz_inst u_clk_wiz(
.clk_in1(sys_clk),
.clk_out1(refclk_200m),
.locked(pll_locked)
);
// IDELAYCTRL 實例化
wire idelayctrl_rdy;
IDELAYCTRL u_idelayctrl(
.RDY(idelayctrl_rdy),
.REFCLK(refclk_200m),
.RST(~pll_locked)
);
// 等待 IDELAYCTRL 就緒
reg idelay_ready;
always @(posedge refclk_200m)begin
idelay_ready<=?idelayctrl_rdy;
end
// IDELAYE2 實例化
wire?[4:0]?cntvalueout;
IDELAYE2?#(
? ? .DELAY_SRC("IDATAIN"),
? ? .IDELAY_TYPE("VAR_LOAD"),
? ? .IDELAY_VALUE(0),
? ? .REFCLK_FREQUENCY(200.0)
)?u_idelaye2?(
? ? .IDATAIN(data_in),
? ? .DATAOUT(data_delayed),
? ? .C(refclk_200m),
? ? .CE(idelay_ready ? ce_signal?:1'b0), ? ? ?// 門控 CE
? ? .INC(inc_signal),
? ? .LD(idelay_ready ? load_signal : 1'b0), ? ?// 門控 LD
? ? .LDPIPEEN(1'b0),
? ? .CNTVALUEIN(cntvaluein),
? ? .CNTVALUEOUT(cntvalueout),
? ? .REGRST(~idelay_ready) ? ? ? ? ? ? ? ? ? ? // 未就緒時復位
);
// 示例:在就緒后加載初始延遲值
reg load_init;
always @(posedge refclk_200m) begin
? ? if (~idelay_ready) begin
? ? ? ? load_init <= 1'b0;
? ? ? ? cntvaluein?<=5'b0;
? ? end else if (idelay_ready && ~load_init) begin
? ? ? ? // 第一次就緒時加載默認延遲
? ? ? ? load_init <= 1'b1;
? ? ? ? cntvaluein?<=5'b01000; ?// 8個步進,約624ps
? ? ? ? load_signal <= 1'b1;
? ? end?else?begin
? ? ? ? load_signal?<=1'b0;
? ? ? ? //?... 正常操作
? ? end
end
必須等待 RDY:在 RDY 為高之前,不應操作 IDELAYE2
門控控制信號:CE、LD 等信號應在 RDY 有效后才使能
位管理:可以使用 ~RDY 作為 REGRST 或系統復位條件
上電時序:整個系統應等待 PLL_LOCKED + IDELAYCTRL_RDY 后才開始工作。
-
FPGA
+關注
關注
1660文章
22408瀏覽量
636240 -
Xilinx
+關注
關注
73文章
2200瀏覽量
131124 -
時鐘控制
+關注
關注
0文章
19瀏覽量
7180
原文標題:詳細解釋xilinx源語的使用:IDELAYCTRL
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Xilinx官方開源FOC電機控制工程解析
使用Xilinx 7系列FPGA的四位乘法器設計
Xilinx FPGA串行通信協議介紹
基于FPGA的高效內存到串行數據傳輸模塊設計
開源RISC-V處理器(蜂鳥E203)學習(二)修改FPGA綜合環境(移植到自己的Xilinx FPGA板卡)
時鐘移項電路加速模塊的設計
E203工程源碼時鐘樹解析
基于FPGA的DDR控制器設計
FPGA搭建DDR控制模塊
用FPGA實現DDR控制模塊介紹
一文詳解xilinx 7系列FPGA配置技巧
Xilinx Ultrascale系列FPGA的時鐘資源與架構解析
Xilinx FPGA中IDELAYCTRL參考時鐘控制模塊的使用
評論