以下文章來源于FPGA開源工作室,作者Leee
IDELAYCTRL 是 Xilinx FPGA(特別是支持高速 I/O 的系列,如 Virtex-5/6/7、Kintex-7、Artix-7、Spartan-6/7 等)中用于管理和校準(zhǔn)輸入延遲模塊(IDELAYE2/IDELAYE3)的必須存在的參考時(shí)鐘控制模塊。
1 核心功能
IDELAYCTRL 的主要功能是為 IDELAY 模塊提供精確的延遲校準(zhǔn)。
IDELAY(輸入延遲單元)是一個(gè)可以以 ~78ps(32 步進(jìn))或 ~11ps(512 步進(jìn)) 的精度對(duì)輸入信號(hào)進(jìn)行延遲調(diào)整的硬件原語。
但是這種延遲的精度依賴于一個(gè)參考時(shí)鐘(REFCLK),該時(shí)鐘的頻率決定了每一步延遲的實(shí)際時(shí)間。
IDELAYCTRL 模塊的作用就是持續(xù)監(jiān)控和校準(zhǔn) IDELAY 的延遲步進(jìn),使其不隨 PVT(工藝、電壓、溫度)變化而漂移。
簡(jiǎn)單說:沒有 IDELAYCTRL,IDELAY 的延遲量將不可預(yù)測(cè)。
2 工作原理
IDELAYCTRL 需要一個(gè)穩(wěn)定且頻率匹配的參考時(shí)鐘 REFCLK
REFCLK 頻率要求:
對(duì)于 IDELAYE2(7系列、Virtex-6等):
REFCLK 必須為 200 MHz(如果延遲步進(jìn)為 78ps) 或 300 MHz(如果延遲步進(jìn)為 52ps,僅部分型號(hào)支持)。
通常 200 MHz 對(duì)應(yīng) 78ps 步進(jìn),300 MHz 對(duì)應(yīng) 52ps 步進(jìn)。
但 7 系列中,實(shí)際步進(jìn)為 78ps(200MHz) 或 ~52ps(300MHz),具體需查手冊(cè)。
對(duì)于 IDELAYE3(UltraScale/UltraScale+):
支持更多頻率,步進(jìn)可為 ~10ps 到 ~50ps,需根據(jù)選擇的步進(jìn)配置對(duì)應(yīng)頻率。
校準(zhǔn)機(jī)制:
IDELAYCTRL 內(nèi)部包含一個(gè)環(huán)形振蕩器和校準(zhǔn)電路,它通過比較 REFCLK 周期與延遲鏈的傳播時(shí)間,動(dòng)態(tài)調(diào)整 IDELAY 單元的步進(jìn),使其保持恒定。
3 使用場(chǎng)景
IDELAYCTRL 用于以下場(chǎng)合:
高速源同步接口(如 DDR、LVDS 接收)
比特對(duì)齊(通過調(diào)整不同 bit 的延遲實(shí)現(xiàn)通道對(duì)齊)
時(shí)序收斂(調(diào)整建立/保持時(shí)間余量)
通常與 IDELAYE2/IDELAYE3 和 ISERDESE2/ISERDESE3 結(jié)合使用。
4 使用規(guī)則
一個(gè) IDELAYCTRL 可服務(wù)多個(gè) IDELAY:
在同一個(gè)區(qū)域(通常是一個(gè) Bank 或幾個(gè)相鄰 Bank)內(nèi)的所有 IDELAY 可以共享一個(gè) IDELAYCTRL 實(shí)例。
跨區(qū)域需多個(gè) IDELAYCTRL:
不同時(shí)鐘區(qū)域(Clock Region)或不同 IDELAY 類型可能需要獨(dú)立的 IDELAYCTRL。
必須提供穩(wěn)定 REFCLK:
REFCLK 必須來自全局時(shí)鐘資源(如 MMCM/PLL 輸出),并且頻率精確。
上電后需等待 RDY 信號(hào):
IDELAYCTRL 啟動(dòng)后需要一段時(shí)間校準(zhǔn),完成后輸出 RDY 信號(hào)為高,之后才能使用 IDELAY。
5 原語示例(7系列)
IDELAYCTRL#( .SIM_DEVICE("7SERIES") // 對(duì)于7系列,Virtex-6 為"VIRTEX6" ) idelayctrl_inst( .RDY(rdy_out), // 輸出:校準(zhǔn)就緒信號(hào),高有效 .REFCLK(refclk), // 輸入:參考時(shí)鐘(200 MHz) .RST(rst) // 輸入:復(fù)位,高有效,初始化校準(zhǔn) );
idelayctrl_inst:IDELAYCTRL generic map( SIM_DEVICE=>"7SERIES" ) port map( RDY =>rdy_out, REFCLK=>refclk, RST =>rst );
6 連接方式
在典型設(shè)計(jì)中:
使用一個(gè) MMCM/PLL 產(chǎn)生精確的 200 MHz 參考時(shí)鐘。
將該時(shí)鐘連接到 IDELAYCTRL 的 REFCLK。
將 IDELAYCTRL 的 RDY 信號(hào)作為系統(tǒng)中 IDELAY 模塊使能的條件(或作為系統(tǒng)復(fù)位釋放條件)。
同一區(qū)域的所有 IDELAYE2 共享此 IDELAYCTRL。
必須使用 IDELAYCTRL:
只要使用了 IDELAYE2/IDELAYE3,就必須例化并正確連接 IDELAYCTRL,否則延遲值會(huì)隨環(huán)境變化,導(dǎo)致接口不穩(wěn)定。
REFCLK 頻率必須精確:
如果 REFCLK 頻率偏差大,校準(zhǔn)后的延遲步進(jìn)誤差也會(huì)增大。
復(fù)位和就緒:
上電或復(fù)位后,需等待 RDY 變高才能使用 IDELAY。
7 與 IDELAYE2 的連接示例
//1. 先產(chǎn)生200MHz 參考時(shí)鐘(例如從100MHz 系統(tǒng)時(shí)鐘倍頻)
clk_wiz_inst(
.clk_in1(sys_clk),
.clk_out1(refclk_200m)//200MHz
);
//2. 實(shí)例化 IDELAYCTRL
IDELAYCTRL idelayctrl_inst(
.RDY(rdy),
.REFCLK(refclk_200m),
.RST(~pll_locked) // PLL 鎖定時(shí)釋放復(fù)位
);
//3. 使用 IDELAYE2(需要延遲的輸入信號(hào))
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), // 時(shí)鐘,用于加載新延遲值
.CE(ce),
.INC(inc),
.LD(load),
.LDPIPEEN(1'b0),
.CNTVALUEIN(cntvaluein), // 動(dòng)態(tài)加載的延遲值
.CNTVALUEOUT(cntvalueout),
.REGRST(1'b0)
);
//4. 在系統(tǒng)中,確保在 rdy 為高后才使能 IDELAY 操作
// 時(shí)鐘生成
clk_wiz_inst u_clk_wiz(
.clk_in1(sys_clk),
.clk_out1(refclk_200m),
.locked(pll_locked)
);
// IDELAYCTRL 實(shí)例化
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 實(shí)例化
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) ? ? ? ? ? ? ? ? ? ? // 未就緒時(shí)復(fù)位
);
// 示例:在就緒后加載初始延遲值
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
? ? ? ? // 第一次就緒時(shí)加載默認(rèn)延遲
? ? ? ? load_init <= 1'b1;
? ? ? ? cntvaluein?<=5'b01000; ?// 8個(gè)步進(jìn),約624ps
? ? ? ? load_signal <= 1'b1;
? ? end?else?begin
? ? ? ? load_signal?<=1'b0;
? ? ? ? //?... 正常操作
? ? end
end
必須等待 RDY:在 RDY 為高之前,不應(yīng)操作 IDELAYE2
門控控制信號(hào):CE、LD 等信號(hào)應(yīng)在 RDY 有效后才使能
位管理:可以使用 ~RDY 作為 REGRST 或系統(tǒng)復(fù)位條件
上電時(shí)序:整個(gè)系統(tǒng)應(yīng)等待 PLL_LOCKED + IDELAYCTRL_RDY 后才開始工作。
-
FPGA
+關(guān)注
關(guān)注
1663文章
22487瀏覽量
638689 -
Xilinx
+關(guān)注
關(guān)注
73文章
2205瀏覽量
131775 -
時(shí)鐘控制
+關(guān)注
關(guān)注
0文章
19瀏覽量
7205
原文標(biāo)題:詳細(xì)解釋xilinx源語的使用:IDELAYCTRL
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Xilinx FPGA中的混合模式時(shí)鐘管理器MMCME2_ADV詳解
IEEE1588從時(shí)鐘模塊 ptp時(shí)鐘源 1588V2時(shí)鐘發(fā)貨視頻
淺談FPGA的時(shí)鐘輸入要求
智能汽車的隱形心臟:高精度 PTP 時(shí)鐘模塊 gPTP時(shí)鐘模塊 IEEE802.1AS PTP主時(shí)鐘
Xilinx官方開源FOC電機(jī)控制工程解析
基于FPGA的I2C控制模塊設(shè)計(jì)
Xilinx FPGA串行通信協(xié)議介紹
基于FPGA的高效內(nèi)存到串行數(shù)據(jù)傳輸模塊設(shè)計(jì)
時(shí)鐘移項(xiàng)電路加速模塊的設(shè)計(jì)
E203工程源碼時(shí)鐘樹解析
基于FPGA的DDR控制器設(shè)計(jì)
FPGA搭建DDR控制模塊
用FPGA實(shí)現(xiàn)DDR控制模塊介紹
XILINX XCZU67DR FPGA完整原理圖
Xilinx Ultrascale系列FPGA的時(shí)鐘資源與架構(gòu)解析
Xilinx FPGA中IDELAYCTRL參考時(shí)鐘控制模塊的使用
評(píng)論