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

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

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

Xilinx的高質(zhì)量時(shí)鐘輸出ODDR原語

冬至子 ? 來源:FPGA探索者 ? 作者:FPGA探索者 ? 2023-06-21 14:11 ? 次閱讀

一、ODDR概述及使用方法

ODDR(Output Double Data Rate,輸出雙倍數(shù)據(jù)速率):

在DDR接口中,ODDR用于發(fā)送時(shí)鐘和數(shù)據(jù);

SDR接口中,ODDR轉(zhuǎn)發(fā)時(shí)鐘(仍在時(shí)鐘樹內(nèi)),輸出端要直連到輸出port,不可加邏輯,連接方式:輸出時(shí)鐘連接ODDR的C引腳,D1固定值1'b1, D2固定值1'b0,CE固定值1’b1,ODDR的輸出Q連接到OBUF;

圖片

時(shí)鐘輸入有限制,需要從SRCC或者M(jìn)RCC專用時(shí)鐘輸入引腳輸入,時(shí)鐘輸出可以在任何引腳上輸出。當(dāng)輸出時(shí)鐘時(shí),即使使用的是時(shí)鐘專用輸入管腳去輸出時(shí)鐘,也等同于使用普通的GPIO管腳輸出時(shí)鐘。

輸出時(shí)鐘的最佳方法是使用ODDR來轉(zhuǎn)發(fā)時(shí)鐘 (假設(shè)輸出的時(shí)鐘是一個(gè)專用時(shí)鐘網(wǎng)絡(luò)上的時(shí)鐘)。每個(gè)IOB(IO Bank)都具有ODDR功能。

這樣做時(shí),內(nèi)部時(shí)鐘一直停留在專用的時(shí)鐘網(wǎng)絡(luò)上,直到ODDR,永遠(yuǎn)不需要進(jìn)入一般的路由結(jié)構(gòu)。不建議直接將時(shí)鐘帶到OBUF,因?yàn)檫@需要內(nèi)部時(shí)鐘離開專用時(shí)鐘網(wǎng)絡(luò),通過一般的fabric路由線路路由到OBUF。

對Spartan6里面,必須用ODDR寄存器輸出。

二、時(shí)鐘配置

建議在輸出時(shí)鐘時(shí)加入ODDR原語,現(xiàn)在加入ODDR對比一下加入前后的不同。

加入ODDR代碼,D1接高電平,D2接低電平,C接時(shí)鐘,Q輸出。

wire user_clk;
IBUFDS IBUFDS_inst_user_clk(
    .O(user_clk), // Buffer output
    .I(USRCLK_P_I), // Diff_p buffer input
    .IB(USRCLK_N_I) // Diff_n buffer input
);   

wire user_clk_bufg;
BUFG BUFG_inst_user_clk (
      .O(user_clk_bufg), // 1-bit output: Clock output
      .I(user_clk)
);

wire user_clk_bufg_oddr;
ODDR #(
      .DDR_CLK_EDGE("OPPOSITE_EDGE"), //"OPPOSITE_EDGE" or "SAME_EDGE"
      .INIT(1'b0),    // Initial value of Q: 1'b0 or 1'b1
      .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
 ) ODDR_out_clock_inst_user_clock (
     .Q(user_clk_bufg_oddr),   // 1-bit DDR output
     .C(user_clk_bufg),   // 1-bit clock input
     .CE(1'b1), // 1-bit clock enable input
     .D1(1'b1), // 1-bit data input (positive edge)
     .D2(1'b0), // 1-bit data input (negative edge)
     .R(),   // 1-bit reset
     .S()    // 1-bit set
);

 OBUFDS OBUFDS_inst_user_clock (
    .O (USER_SMA_CLOCK_P_O
    .OB(USER_SMA_CLOCK_N_O),     // Diff_n output
    .I (user_clk_bufg_oddr)      // Buffer input
 )

不加ODDR,布局布線后RTL圖如下:

圖片

加ODDR,布局布線后RTL圖如下:

圖片

布局布線的資源中,下圖左側(cè)顯示沒有加ODDR的,右側(cè)是加入了ODDR,可見右側(cè)輸出時(shí)鐘經(jīng)BUFG后先到輸出引腳附近的ODDR(藍(lán)線和紫線交匯處),經(jīng)ODDR轉(zhuǎn)發(fā)后到PAD管腳輸出。

圖片

三、性能對比

按照Xilinx和網(wǎng)上的一些說法,加入ODDR后輸出時(shí)鐘的質(zhì)量會(huì)更好。

圖片

輸出DDR可以轉(zhuǎn)發(fā)一個(gè)時(shí)鐘副本到輸出。這對于傳播具有相同延遲的時(shí)鐘和DDR數(shù)據(jù)、以及生成多個(gè)時(shí)鐘(其中每個(gè)時(shí)鐘負(fù)載都有惟一的時(shí)鐘驅(qū)動(dòng))非常有用。這是通過將ODDR的D1輸入高電平并且D2輸入低電平來實(shí)現(xiàn)的。Xilinx建議使用這種方案將時(shí)鐘從FPGA邏輯轉(zhuǎn)發(fā)到輸出引腳。

如下圖所示是加入ODDR前后的時(shí)序裕量和資源消耗對比,可以看到,對 WNS (Worst Negative Slack,最差負(fù)時(shí)序裕量)和 WHS (Worst Hold Slack,最差保持時(shí)序裕量)、資源使用在加入前后沒有明顯的區(qū)別。實(shí)測加入ODDR前后誤碼率基本一致,眼圖掃描結(jié)果也一致。

圖片

按照Xilinx的推薦,在輸出時(shí)鐘時(shí)最好還是把ODDR加上 。這個(gè)測試用例沒有體現(xiàn)出ODDR的優(yōu)勢,也許在資源使用較多、時(shí)鐘頻率更高時(shí)才能體現(xiàn)。另外,這里只是輸出了時(shí)鐘,沒有輸出使用該時(shí)鐘的數(shù)據(jù)。

很多人說時(shí)鐘直接從BUFG輸出到管腳會(huì)報(bào)錯(cuò),必須加約束或者ODDR,目前我在ZYNQ7045上沒有發(fā)現(xiàn)此問題。

ODDR****的使用場景還在于 OSERDES、 FPGA 的源同步的系統(tǒng)設(shè)計(jì) ,用 ODDR使得隨路時(shí)鐘和數(shù)據(jù)在輸出時(shí)是嚴(yán)格同步的,保證嚴(yán)格的相位對齊關(guān)系 。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26424
  • SDR
    SDR
    +關(guān)注

    關(guān)注

    7

    文章

    232

    瀏覽量

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

    關(guān)注

    1

    文章

    384

    瀏覽量

    59534
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1177

    瀏覽量

    51555
收藏 人收藏

    評論

    相關(guān)推薦

    protel輸出高質(zhì)量gerber

    圖文并茂一步一步手把手教你輸出高質(zhì)量的gerber傻瓜式教學(xué)。。。。[hide] [/hide]
    發(fā)表于 12-12 15:43

    高質(zhì)量C++、C編程指南

    高質(zhì)量C++、C編程指南
    發(fā)表于 08-06 11:58

    高質(zhì)量C&C++

    高質(zhì)量C&C++
    發(fā)表于 08-16 19:45

    原版PIC實(shí)戰(zhàn)項(xiàng)目-C(高質(zhì)量PDF版本)

    英文原版,高質(zhì)量保證。
    發(fā)表于 07-10 21:42

    高質(zhì)量C語言編程

    高質(zhì)量c語言,精,精,精,精華
    發(fā)表于 07-22 13:48

    編寫高質(zhì)量C語言代碼

    編寫高質(zhì)量C語言代碼 編寫高質(zhì)量C語言代碼 編寫高質(zhì)量C語言代碼
    發(fā)表于 07-31 17:47

    林銳《高質(zhì)量C語言編程》

    林銳《高質(zhì)量C語言編程》
    發(fā)表于 08-17 12:10

    高質(zhì)量C++與C編程指南

    高質(zhì)量C++與C編程指南
    發(fā)表于 03-09 10:54

    高質(zhì)量編程

    干貨,《495個(gè)C語言問題》、《華為內(nèi)部程序設(shè)計(jì)編碼規(guī)范》、《C語言:陷阱和缺陷》、《高質(zhì)量C編程[林銳]》
    發(fā)表于 02-27 19:39

    【下載】高質(zhì)量干貨-22本高質(zhì)量EMC電磁兼容性設(shè)計(jì)資料

    22本高質(zhì)量EMC電磁兼容性設(shè)計(jì)資料請君自取總體太大壓縮成兩個(gè)壓縮包。希望這些內(nèi)容能對大家在設(shè)計(jì)上有所幫助!
    發(fā)表于 03-20 00:02

    使用ODDR原語的重要性是什么?

    你好我將virtex5 LX50與具有應(yīng)根據(jù)standardEIA / TIA-644 LVDS規(guī)范終止的輸出數(shù)據(jù)的設(shè)備連接起來我在用著IBUFDS用于將輸入LVDS轉(zhuǎn)換為LVTTL,OBUFDS用于輸出信號和時(shí)鐘這是這樣做的正
    發(fā)表于 06-17 14:59

    請問怎么才能設(shè)計(jì)出高質(zhì)量的印制線路板?

    怎么才能設(shè)計(jì)出高質(zhì)量的印制線路板?
    發(fā)表于 04-23 06:57

    xilinx 原語使用方法

    xilinx 原語使用方法
    發(fā)表于 10-17 08:57 ?11次下載
    <b class='flag-5'>xilinx</b> <b class='flag-5'>原語</b>使用方法

    xilinx原語使用方法

    xilinx原語使用方法
    發(fā)表于 10-19 08:50 ?15次下載
    <b class='flag-5'>xilinx</b><b class='flag-5'>原語</b>使用方法

    Xilinx高質(zhì)量時(shí)鐘輸出ODDR原語的概述及使用方法

    在SDR接口中,ODDR轉(zhuǎn)發(fā)時(shí)鐘(仍在時(shí)鐘樹內(nèi)),輸出端要直連到輸出port,不可加邏輯
    的頭像 發(fā)表于 06-27 10:21 ?7631次閱讀
    <b class='flag-5'>Xilinx</b><b class='flag-5'>高質(zhì)量</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>輸出</b><b class='flag-5'>ODDR</b><b class='flag-5'>原語</b>的概述及使用方法