0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Idelay對(duì)時(shí)序的補(bǔ)救

冬至子 ? 來(lái)源:Bug記錄 ? 作者:woodfan ? 2023-06-16 11:26 ? 次閱讀

在高速信號(hào)采集的過(guò)程中,經(jīng)常會(huì)因?yàn)?a target="_blank">電路設(shè)計(jì)或者其他原因,原本設(shè)計(jì)好對(duì)應(yīng)的data_clk與data經(jīng)過(guò)線路傳輸之后在接收端時(shí)序上不能很好的對(duì)應(yīng),這可能會(huì)造成采樣數(shù)據(jù)的錯(cuò)位。

如果用了各種物理電路上的辦法都沒法解決后,可以嘗試使用Idelay(針對(duì)Xilinx,Altera應(yīng)該也有相應(yīng)的原語(yǔ))。

Xilinx每個(gè)系列可能Idelay的名字會(huì)有一些差異,但差異不大,在K7系列下,Idelay的原語(yǔ)叫做Idelay2。

Idelay2原語(yǔ)示例:

(* IODELAY_GROUP = "RX_FRAME" *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
 IDELAYE2 #(
 .CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
 .DELAY_SRC("DATAIN"), // Delay input (IDATAIN, DATAIN)
 .HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
 .IDELAY_TYPE("VAR_LOAD"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
 .IDELAY_VALUE(INIT_VALUE), // Input delay tap setting (0-31)
 .PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE
 .REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).
 .SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal
 )
 IDELAYE2_inst (
 .CNTVALUEOUT(cnt_value), // 5-bit output: Counter value output
 .DATAOUT(rx_frame_dly), // 1-bit output: Delayed data output
 .C(sys_clk), // 1-bit input: Clock input
 .CE(1'b0), // 1-bit input: Active high enable increment/decrement input
 .CINVCTRL(1'b0), // 1-bit input: Dynamic clock inversion input
 .CNTVALUEIN(tap_value), // 5-bit input: Counter value input
 .DATAIN(rx_frame), // 1-bit input: Internal delay data input
 .IDATAIN(1'b0), // 1-bit input: Data input from the I/O
 .INC(1'b0), // 1-bit input: Increment / Decrement tap delay input
 .LD(1'b1), // 1-bit input: Load IDELAY_VALUE input
 .LDPIPEEN(1'b0), // 1-bit input: Enable PIPELINE register to load data input
 .REGRST(1'b0) // 1-bit input: Active-high reset tap-delay input
 );

針對(duì)其中經(jīng)常用到的變量,功能如下:

  • DELAY_SRC常量,這個(gè)常量可以選DATAIN或IDATAIN,區(qū)別在于IDATAIN的數(shù)據(jù)輸入要求經(jīng)過(guò)BUF產(chǎn)生,常用于BUF的輸出信號(hào),Input端口信號(hào);DATAIN只要求FPGA內(nèi)部邏輯產(chǎn)生的信號(hào)就可以。
  • IDELAY_TYPE,設(shè)置IDELAY2的模式;FIXED代表延時(shí)值固定,一般用在確定好參數(shù)后使用,VARIBLE,VAR_LOAD,VAR_LOAD_PIPE都是動(dòng)態(tài)改變延時(shí)值,VARIBLE可以自動(dòng)增大減小,后兩個(gè)是根據(jù)CINVALUEIN端口動(dòng)態(tài)改變延時(shí)值,一般選用VAR_LOAD。
  • IDELAY_VALUE,是初始化的值,在FIXED模式下,就是固定的延時(shí)值
  • REFCLK_FREQUENCY,指的Idelay的參考時(shí)鐘的頻率,一般選用200M,這個(gè)后面會(huì)具體講。
  • SIGNAL_PATTERN,這個(gè)有DATA和CLOCK兩個(gè)選項(xiàng),影響Vivado對(duì)信號(hào)時(shí)序分析的路徑。

端口中,

  • CNTVALUEIN是設(shè)置延時(shí)值,用于手動(dòng)調(diào)試;
  • CNTVALUEOUT輸出當(dāng)前延時(shí)值,便于調(diào)試觀測(cè);
  • C是數(shù)據(jù)時(shí)鐘,但CE不是時(shí)鐘使能,而是延時(shí)值tap自動(dòng)增加減少使能,所以我選擇拉低;
  • CINVCTRL,INC,LDPIPEEIN,REGRST不怎么用,全拉低;
  • 在上面的DELAY_SRC選擇了哪一個(gè),就在對(duì)應(yīng)的數(shù)據(jù)端口連接數(shù)據(jù),另一個(gè)數(shù)據(jù)端口拉低,比如DELAY_SRC設(shè)定為"DATAIN",選擇DATAIN端口輸入數(shù)據(jù),IDATAIN端口拉低;
  • 因?yàn)樾枰謩?dòng)調(diào)節(jié)延時(shí)值,所以LD拉高,只有LD拉高才能動(dòng)態(tài)載入CNTVALUEIN的延時(shí)值

前面說(shuō)到參考時(shí)鐘,Idelay之所以延時(shí),CINVALUEIN對(duì)應(yīng)的延時(shí)值多少就跟這個(gè)地方有關(guān)系了,參考時(shí)鐘不是隨便設(shè)的,這跟另一個(gè)原語(yǔ)IDELAYCTRL有關(guān):

(* IODELAY_GROUP = "RX_FRAME" *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
 IDELAYCTRL IDELAYCTRL_inst (
 .RDY(idelay_rdy), // 1-bit output: Ready output
 .REFCLK(ref_clk), // 1-bit input: Reference clock input
 .RST(rst) // 1-bit input: Active high reset input
 );

這個(gè)原語(yǔ)端口很少,連接對(duì)應(yīng)200M的參考時(shí)鐘,復(fù)位信號(hào),輸出一個(gè)ready信號(hào);

看起來(lái)這個(gè)原語(yǔ)并沒有什么有用的輸出;但其實(shí)它的作用是給Idelay2提供了延時(shí)的依據(jù);之所以可以精確延時(shí)并不是說(shuō)我們?cè)赗EFCLK_FREQUENCY填一個(gè)200就可以了,而是這個(gè)IDELAYCTRL 的作用,通過(guò)(* IODELAY_GROUP = "RX_FRAME" *)將IDELAYCTRL 和Idelay2連接起來(lái),"RX_FRAME"類似于組名,可以隨意改,同一組的組名要一樣。

200MHz 對(duì)應(yīng)1個(gè)時(shí)鐘周期5ns,Idelay將其分為64tap,每個(gè)tap延時(shí)值大概是78ps,Idelay可調(diào)的最大tap為31,也就是延時(shí)值控制在0-31tap;

同樣,為了減小相同參考時(shí)鐘下Idelay2與IDELAYCTRL 的FPGA內(nèi)部走線延時(shí),必須使用IODELAY_GROUP將它們綁定在一起,使用方法參考上面的做法。

注意,IDELAYCTRL 的REFCLK輸入時(shí)鐘一定要經(jīng)過(guò)BUFG輸出再接入。

效果:

沒加Idelay

圖片

沒有加Idelay,并串轉(zhuǎn)換中找不到幀頭

加入Idelay

圖片

加了Idelay,找到幀頭

總結(jié):

  • 使用方法都在上面,對(duì)于多bit信號(hào)可以使用generate for 生成塊。
  • 調(diào)試這個(gè)的時(shí)候遇到過(guò)一個(gè)問題,C端口沒有連接到正常的時(shí)鐘,連接到一個(gè)根本沒有定義的信號(hào),Vivado做好事不留名的直接幫我拉低到地,導(dǎo)致我在VAR_LOAD模式下一直無(wú)法正常改變延時(shí)值,CNTVALUEOUT與CINVALUEIN不正確,最后打開Schematic看RTL圖才找到問題。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26452
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59630
  • 串行通信
    +關(guān)注

    關(guān)注

    4

    文章

    561

    瀏覽量

    35196
  • SRC
    SRC
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    17933
  • lvds接口
    +關(guān)注

    關(guān)注

    1

    文章

    120

    瀏覽量

    17377
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    xilinx FPGA中oddr,idelay的用法詳解

    idelay2中按推薦配置,從DATAIN還是從IDATAIN輸入?yún)^(qū)別為是內(nèi)部延時(shí)還是從IO輸入,F(xiàn)IXED固定延時(shí),idelay value先輸入0,,時(shí)鐘是200M,其他全部接0。
    的頭像 發(fā)表于 11-25 14:35 ?1.1w次閱讀

    時(shí)鐘偏移對(duì)時(shí)序收斂有什么影響呢?

    FPGA設(shè)計(jì)中的絕大部分電路為同步時(shí)序電路,其基本模型為“寄存器+組合邏輯+寄存器”。同步意味著時(shí)序路徑上的所有寄存器在時(shí)鐘信號(hào)的驅(qū)動(dòng)下步調(diào)一致地運(yùn)作。
    的頭像 發(fā)表于 08-03 09:27 ?1286次閱讀
    時(shí)鐘偏移<b class='flag-5'>對(duì)時(shí)序</b>收斂有什么影響呢?

    如何為設(shè)計(jì)計(jì)算IDELAY_VALUE的值?

    我在sp601板上使用tri-ethernet-mac示例。gmii接收器接口使用IODELAY2原語(yǔ)來(lái)延遲接收器側(cè)的輸入信號(hào)。vhdl代碼提到應(yīng)該根據(jù)設(shè)計(jì)在ucf中更改IDELAY_VALUE。我
    發(fā)表于 05-28 06:40

    如何將IDELAY與IOBUF一起使用?

    大家好,我正在使用IDELAY原語(yǔ)來(lái)實(shí)現(xiàn)DDR的DQ和DQS延遲。這是我的代碼:IOBUF pad_xb_dq7(.O(bus_data_in_flh [7]),. IO(xb_dq [7
    發(fā)表于 06-01 16:57

    怎么利用CPLD數(shù)字控制技術(shù)對(duì)時(shí)序電路進(jìn)行改進(jìn)

    本文利用CPLD數(shù)字控制技術(shù)對(duì)時(shí)序電路進(jìn)行改進(jìn)。CPLD(Complex Programmable Logic Device)是新一代的數(shù)字邏輯器件,具有速度快、集成度高、可靠性強(qiáng)、用戶可重復(fù)編程或
    發(fā)表于 05-06 09:44

    隨機(jī)噪聲對(duì)時(shí)序抖動(dòng)的影響—理論與實(shí)踐

    有若干因素會(huì)對(duì)隨機(jī)時(shí)序抖動(dòng)產(chǎn)生影響,其中包括相位噪聲、寬帶噪聲、雜散信號(hào)、壓擺率、帶寬。本文探究了這些噪聲源,同時(shí)給出了把噪聲轉(zhuǎn)換為時(shí)序抖動(dòng)的公式。
    發(fā)表于 05-07 13:16 ?722次閱讀

    TFT-LCD系統(tǒng)時(shí)序控制模塊的設(shè)計(jì)

    TFT-LCD系統(tǒng)時(shí)序控制模塊的設(shè)計(jì) 摘要:說(shuō)明時(shí)序控制模塊和LCD系統(tǒng)中其它子模塊之間的關(guān)系,對(duì)時(shí)序控制模塊所要解決的時(shí)序問題進(jìn)行分析。在分析問題的基礎(chǔ)上提出一種適
    發(fā)表于 01-16 09:54 ?4671次閱讀
    TFT-LCD系統(tǒng)<b class='flag-5'>時(shí)序</b>控制模塊的設(shè)計(jì)

    靜態(tài)時(shí)序分析在高速 FPGA設(shè)計(jì)中的應(yīng)用

    介紹了采用STA (靜態(tài)時(shí)序分析)對(duì)FPGA (現(xiàn)場(chǎng)可編程門陣列)設(shè)計(jì)進(jìn)行時(shí)序驗(yàn)證的基本原理,并介紹了幾種與STA相關(guān)聯(lián)的時(shí)序約束。針對(duì)時(shí)序不滿足的情況,提出了幾種常用的促進(jìn)
    發(fā)表于 05-27 08:58 ?70次下載
    靜態(tài)<b class='flag-5'>時(shí)序</b>分析在高速 FPGA設(shè)計(jì)中的應(yīng)用

    后端時(shí)序修正基本思路

    后端時(shí)序修正基本思路,后端對(duì)時(shí)序的影響從0.18開始,在整體影響中的比重也在隨著工藝的變化而變得敏感。
    發(fā)表于 10-26 09:28 ?2882次閱讀
    后端<b class='flag-5'>時(shí)序</b>修正基本思路

    深入了解時(shí)序約束以及如何利用時(shí)序約束實(shí)現(xiàn)FPGA 設(shè)計(jì)的最優(yōu)結(jié)果

    作為賽靈思用戶論壇的定期訪客(見 ),我注意到新用戶往往對(duì)時(shí)序收斂以及如何使用時(shí)序約束來(lái)達(dá)到時(shí)序收斂感到困惑。為幫助 FPGA設(shè)計(jì)新手實(shí)現(xiàn)時(shí)序收斂,讓我們來(lái)深入了解
    發(fā)表于 11-24 19:37 ?5401次閱讀
    深入了解<b class='flag-5'>時(shí)序</b>約束以及如何利用<b class='flag-5'>時(shí)序</b>約束實(shí)現(xiàn)FPGA 設(shè)計(jì)的最優(yōu)結(jié)果

    在寫Verilog時(shí)對(duì)時(shí)序約束的四大步驟的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是在寫Verilog時(shí)對(duì)時(shí)序約束的四大步驟的詳細(xì)資料說(shuō)明包括了:一、 時(shí)鐘,二、 Input delays,三、 Output delays,四、 時(shí)序例外
    發(fā)表于 08-30 08:00 ?32次下載
    在寫Verilog時(shí)<b class='flag-5'>對(duì)時(shí)序</b>約束的四大步驟的詳細(xì)資料說(shuō)明

    寬帶噪聲對(duì)時(shí)序抖動(dòng)的影響資料下載

    電子發(fā)燒友網(wǎng)為你提供寬帶噪聲對(duì)時(shí)序抖動(dòng)的影響資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-29 08:46 ?15次下載
    寬帶噪聲<b class='flag-5'>對(duì)時(shí)序</b>抖動(dòng)的影響資料下載

    使用Idelay對(duì)接收端時(shí)序進(jìn)行補(bǔ)救

    同樣,為了減小相同參考時(shí)鐘下Idelay2與IDELAYCTRL 的FPGA內(nèi)部走線延時(shí),必須使用IODELAY_GROUP將它們綁定在一起,使用方法參考上面的做法。
    的頭像 發(fā)表于 08-20 10:50 ?4289次閱讀
    使用<b class='flag-5'>Idelay</b>對(duì)接收端<b class='flag-5'>時(shí)序</b>進(jìn)行<b class='flag-5'>補(bǔ)救</b>

    時(shí)序約束連載03~約束步驟總結(jié)

    本小節(jié)對(duì)時(shí)序約束做最終的總結(jié)
    的頭像 發(fā)表于 07-11 17:18 ?592次閱讀
    <b class='flag-5'>時(shí)序</b>約束連載03~約束步驟總結(jié)

    某些應(yīng)用下對(duì)時(shí)序要求比較高,串口輸出log占用時(shí)間太長(zhǎng)怎么辦?

    某些應(yīng)用下對(duì)時(shí)序要求比較高,串口輸出log占用時(shí)間太長(zhǎng)怎么辦? 在某些應(yīng)用場(chǎng)景中,對(duì)于時(shí)序的要求非常高,這就要求我們必須避免使用過(guò)多的時(shí)間來(lái)進(jìn)行一些必要但是時(shí)間長(zhǎng)的操作。其中一個(gè)典型的例子就是輸出
    的頭像 發(fā)表于 10-31 14:37 ?442次閱讀