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

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

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

DDR信號(hào)的處理

冬至子 ? 來源:Bug記錄 ? 作者:woodfan ? 2023-06-16 10:22 ? 次閱讀

注意,這里的DDR指的是Double Data Rate,雙倍數(shù)據(jù)速率。這篇文章并不是講DDR存儲(chǔ)器系列的東西。

不同于SDR,也就是單上升沿或下降沿,傳輸數(shù)據(jù)。DDR說我不想選擇是上升沿還是下降沿傳輸數(shù)據(jù),小孩子才做選擇,大人只會(huì)說我全都要。

上升沿和下降沿全部都要傳數(shù)據(jù)

通過一組圖片就可以看到SDR和DDR的區(qū)別:

圖片

SDR

圖片

DDR

可以看到經(jīng)過DDR處理的數(shù)據(jù)在數(shù)據(jù)時(shí)鐘上升沿和下降沿都有數(shù)據(jù)更新,對(duì)于如何完整的取出數(shù)據(jù),我仔細(xì)思考了許久,經(jīng)歷了否定之否定的過程,最終才找到了通用的解決方案?,F(xiàn)在寫出解決方案的心路歷程:

  1. 剛開始覺得,既然它上升沿和下降沿都有,不如用一個(gè)always檢測時(shí)鐘跳變,有跳變就開始取值。代碼示例如下:
always @ (fb_clk)
begin
if (fb_clk == 1'b1) //上升沿跳變
   i_data <= tx_frame ? {tx_d,6'd0} : {i_data[11:6], tx_d};// tx_frame為高代表高6位, 低為低8else
   q_data <= tx_frame ? {tx_d,6'd0} : {q_data[11:6], tx_d};
end

但是這么做肯定是有問題的,我們本來是要描述一個(gè)時(shí)序電路,最后always的敏感列表里面是一個(gè)信號(hào),這么做就成了組合邏輯了,這么做不穩(wěn)定不可取。

  1. 第二種方法是使用鎖相環(huán)輸出一個(gè)與原數(shù)據(jù)時(shí)鐘同頻但相位延后180度的時(shí)鐘fb_clk_180, fb_clk負(fù)責(zé)采樣data_I, fb_clk_180負(fù)責(zé)data_Q。這種方法可以,但感覺麻煩,因?yàn)楹竺孢€要使用DDR輸出信號(hào),時(shí)鐘轉(zhuǎn)來轉(zhuǎn)去有點(diǎn)麻煩。
  2. 第三種方法還是使用鎖相環(huán),輸出一個(gè)同相但頻率為原來頻率2倍的時(shí)鐘信號(hào)fb_clk_mul2。fb_clk_mul2的每次上升沿,對(duì)應(yīng)著原時(shí)鐘fb_clk的上升沿和下降沿,使用fb_clk_mul2就可以分離data_I和data_Q。但這種方法也有局限性,不僅增加時(shí)鐘數(shù)量,當(dāng)原時(shí)鐘速率過高,這種方法的穩(wěn)定性也將有待商榷。

最后,我們在Vivado里面找到了一種原語,完美解決這個(gè)問題。這就是IDDR和ODDR。

對(duì)于輸入信號(hào),我們使用IDDR解出原始數(shù)據(jù),在Language Template找到IDDR原語示例,例子如下:

IDDR #(
         .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE"
                                         //    or "SAME_EDGE_PIPELINED"
         .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1
         .INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1
         .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
      ) IDDR_inst (
         .Q1(rx_data_pos[i]), // 1-bit output for positive edge of clock
         .Q2(rx_data_neg[i]), // 1-bit output for negative edge of clock
         .C(data_clk),   // 1-bit clock input
         .CE(1'b1), // 1-bit clock enable input
         .D(rx_data_dly[i]),   // 1-bit DDR data input
//         .D(rx_data[i]),   // 1-bit DDR data input
         .R(1'b0),   // 1-bit reset
         .S(1'b0)    // 1-bit set
      );

設(shè)置好IDDR的4個(gè)常量參數(shù)之后,將數(shù)據(jù)時(shí)鐘接入C端口,時(shí)鐘使能CE端口拉高,待轉(zhuǎn)數(shù)據(jù)信號(hào)接入D端口,Q1端口將會(huì)輸出時(shí)鐘上升沿采樣的數(shù)據(jù),Q2端口將會(huì)輸出時(shí)鐘下降沿采樣的數(shù)據(jù)。注意設(shè)置好復(fù)位R和置位S端口。

設(shè)置好之后就可以在rx_data_pos,rx_data_neg看到數(shù)據(jù)。這里我使用了generate for生成塊,所以出現(xiàn)了genvar變量i;

同樣,對(duì)于DDR輸出信號(hào),使用ODDR原語解決:

ODDR #(
     .DDR_CLK_EDGE("SAME_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_inst (
     .Q(p0_data[i]),   // 1-bit DDR output
     .C(data_clk),   // 1-bit clock input
     .CE(1'b1), // 1-bit clock enable input
     .D1(idata[i]), // 1-bit data input (positive edge)
     .D2(qdata[i]), // 1-bit data input (negative edge)
     .R(1'b0),   // 1-bit reset
     .S(1'b0)    // 1-bit set
  );

設(shè)置好ODDR的3個(gè)常量參數(shù)之后,將數(shù)據(jù)時(shí)鐘接入C端口,時(shí)鐘使能CE端口拉高,Q端口輸出DDR處理后的數(shù)據(jù),數(shù)據(jù)時(shí)鐘上升沿更新的數(shù)據(jù)接入D1端口,數(shù)據(jù)時(shí)鐘下降沿更新的數(shù)據(jù)接入D2端口。注意設(shè)置好復(fù)位R和置位S端口。

ODDR還可以巧妙地輸出時(shí)鐘,在D1輸入1'b1, D2輸入1'b0,其他不變,則在數(shù)據(jù)時(shí)鐘上升沿輸出高電平,下降沿輸出低電平。巧妙地輸出了數(shù)據(jù)時(shí)鐘。

注意,ODDR輸出的數(shù)據(jù)只能經(jīng)過IOBUF或者輸出,曾經(jīng)有人想使用ILA抓取ODDR的Q端口輸出的數(shù)據(jù),無奈Implemention總會(huì)報(bào)錯(cuò)。

總結(jié):

  • 對(duì)于DDR信號(hào),不能直接用always @ (data_clk)的方法采樣信號(hào),詳細(xì)見上述(1)內(nèi)容
  • 上述(2)和(3)的方法在一定范圍內(nèi)都有其可行性,但也有一些弊端,詳細(xì)見上述(2)和(3)內(nèi)容
  • 使用IDDR和ODDR最為妥當(dāng),IDDR和ODDR的數(shù)據(jù)端口都是1bit,多bit可以使用generate for生成塊
  • 可以使用ODDR在普通IO上輸出數(shù)據(jù)時(shí)鐘
  • ODDR輸出的數(shù)據(jù)只能經(jīng)過IOBUF或者輸出

如果是LVDS信號(hào),需要先轉(zhuǎn)單端再進(jìn)IDDR;或者ODDR后再轉(zhuǎn)差分輸出;差分信號(hào)的處理方法可以看上一篇文章。

信號(hào)處理好之后,如果出現(xiàn)了時(shí)鐘與數(shù)據(jù)對(duì)不上該怎么辦,這個(gè)時(shí)候可以使用Idelay調(diào)整時(shí)序。

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

    關(guān)注

    38

    文章

    7403

    瀏覽量

    163393
  • DDR
    DDR
    +關(guān)注

    關(guān)注

    11

    文章

    701

    瀏覽量

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

    關(guān)注

    7

    文章

    232

    瀏覽量

    50361
  • LVDS信號(hào)
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    7813
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    799

    瀏覽量

    66131
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DDR5的基本信號(hào)完整性 DDR5頻率相關(guān)損耗和反射

    伴隨著設(shè)計(jì)復(fù)雜性的增加。 DDR5與前幾代產(chǎn)品之間最顯著的區(qū)別是判決反饋均衡的引入,這是串行鏈路系統(tǒng)中用于改善接收信號(hào)完整性的一項(xiàng)技術(shù)。 隨著新技術(shù)的發(fā)展,本文將研究DDR5上下文中的一些基本
    的頭像 發(fā)表于 01-22 15:29 ?5113次閱讀

    信號(hào)完整性仿真:DDR3/4/5系列地址信號(hào)端接優(yōu)化對(duì)比

    導(dǎo)讀:DDR5協(xié)議發(fā)布已經(jīng)有一段時(shí)間了,其中的變化還是比較大的,地址信號(hào)采取了ODT的端接形式,本篇文章為大家仿真一下DDR5地址信號(hào)。同時(shí),我也推薦大家關(guān)注我在仿真秀原創(chuàng)的精品課《
    發(fā)表于 12-01 10:24 ?1513次閱讀

    DDR4信號(hào)完整性測試要求

    DDR5已經(jīng)開始商用,但是有的產(chǎn)品還才開始使用DDR4。本文分享一些DDR4的測試內(nèi)容。DDR4 和前代的 DDR3 相比, 它的速度大幅提
    的頭像 發(fā)表于 01-08 09:18 ?1647次閱讀
    <b class='flag-5'>DDR</b>4<b class='flag-5'>信號(hào)</b>完整性測試要求

    240-4C6678_K7_DDR3_VPX高速信號(hào)處理

    4C6678_K7_DDR3_VPX高速信號(hào)處理板 4C6678_K7_DDR3_VPX板為基于TI多核DSP TMS320C6678的通用處理
    發(fā)表于 09-18 14:50

    針對(duì)DDR2-800和DDR3的PCB信號(hào)完整性設(shè)計(jì)

    針對(duì)DDR2-800和DDR3的PCB信號(hào)完整性設(shè)計(jì)
    發(fā)表于 02-23 11:37 ?0次下載

    針對(duì)DDR2-800和DDR3的PCB信號(hào)完整性設(shè)計(jì)

    針對(duì)DDR2-800和DDR3的PCB信號(hào)完整性設(shè)計(jì),要認(rèn)證看
    發(fā)表于 12-16 21:23 ?0次下載

    嵌入式DDR布線分析 DDR信號(hào)布線介紹

    嵌入式 DDR(Double Data Rate,雙數(shù)據(jù)速率)設(shè)計(jì)是含DDR的 嵌入式 硬件設(shè)計(jì)中最重要和最核心的部分。隨著嵌入式系統(tǒng)的處理能力越來越強(qiáng)大,實(shí)現(xiàn)的功能越來越多,系統(tǒng)的工作頻率越來越高,
    發(fā)表于 04-11 15:33 ?4349次閱讀
    嵌入式<b class='flag-5'>DDR</b>布線分析 <b class='flag-5'>DDR</b><b class='flag-5'>信號(hào)</b>布線介紹

    DDR工作原理_DDR DQS信號(hào)處理

    Random Access Memory的縮寫,即同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器。本文首先介紹了DDR工作原理及結(jié)構(gòu)圖,其次闡述了DDR DQS信號(hào)處理,具體的跟隨小編一起來了解一下。
    的頭像 發(fā)表于 05-23 16:07 ?5.3w次閱讀
    <b class='flag-5'>DDR</b>工作原理_<b class='flag-5'>DDR</b> DQS<b class='flag-5'>信號(hào)</b>的<b class='flag-5'>處理</b>

    DDR高速信號(hào)線的布線原則和技巧

    在普通印制電路板的布線中由于信號(hào)是低速信號(hào),所以在3W原則的基本布線規(guī)則下按照信號(hào)的流向?qū)⑵溥B接起來,一般都不會(huì)出現(xiàn)問題。但是如果信號(hào)是100M以上的速度時(shí),布線就很有講究了。由于最近
    發(fā)表于 03-24 10:00 ?7635次閱讀
    <b class='flag-5'>DDR</b>高速<b class='flag-5'>信號(hào)</b>線的布線原則和技巧

    DDR總線時(shí)間的解決辦法

    基于向?qū)У牟樵兒苋菀自O(shè)置批處理模式模擬評(píng)估時(shí)間和信號(hào)質(zhì)量DDR 1/2/3和LPDDR 1/2/3設(shè)計(jì)。
    的頭像 發(fā)表于 10-22 07:07 ?2848次閱讀

    DDRDDR2與DDR3的設(shè)計(jì)資料總結(jié)

    本文檔的主要內(nèi)容詳細(xì)介紹的是DDRDDR2與DDR3的設(shè)計(jì)資料總結(jié)包括了:一、DDR的布線分析與設(shè)計(jì),二、DDR電路的
    發(fā)表于 05-29 08:00 ?0次下載
    <b class='flag-5'>DDR</b>和<b class='flag-5'>DDR</b>2與<b class='flag-5'>DDR</b>3的設(shè)計(jì)資料總結(jié)

    ZCU10中MPSoC對(duì)DDR復(fù)位信號(hào)設(shè)計(jì)

    Xilinx的開發(fā)板ZCU102支持休眠到內(nèi)存(suspend-to-ram)。休眠到內(nèi)存時(shí),DDR進(jìn)入自刷新,MPSoC被關(guān)電,完全不耗電。喚醒時(shí),MPSoC根據(jù)外部輸入信號(hào)判斷出不是上電啟動(dòng)而是
    的頭像 發(fā)表于 11-04 17:02 ?2747次閱讀
    ZCU10中MPSoC對(duì)<b class='flag-5'>DDR</b>復(fù)位<b class='flag-5'>信號(hào)</b>設(shè)計(jì)

    關(guān)于DDR信號(hào)的如何去判斷信號(hào)質(zhì)量?

    通常,DDR設(shè)計(jì)完成之后 ,對(duì)信號(hào)質(zhì)量并沒有一個(gè)完全確定的概念,需要我們通過仿真和測試的手段去判斷和驗(yàn)證。而此時(shí),往往我們拿到的就是一個(gè)波形,測試波形或者仿真波形,該如何去判斷其信號(hào)質(zhì)量,參照的標(biāo)準(zhǔn)
    的頭像 發(fā)表于 04-09 10:04 ?5654次閱讀
    關(guān)于<b class='flag-5'>DDR</b><b class='flag-5'>信號(hào)</b>的如何去判斷<b class='flag-5'>信號(hào)</b>質(zhì)量?

    DDR加終端匹配電阻和不加信號(hào)質(zhì)量的區(qū)別

    DDR加終端匹配電阻和不加信號(hào)質(zhì)量的區(qū)別? DDR(雙倍數(shù)據(jù)傳輸速率)是一種常用于計(jì)算機(jī)內(nèi)存的高速數(shù)據(jù)傳輸技術(shù)。在DDR中,終端匹配電阻和信號(hào)
    的頭像 發(fā)表于 12-29 13:54 ?924次閱讀

    0706線下活動(dòng) I DDR4/DDR5內(nèi)存技術(shù)高速信號(hào)專題設(shè)計(jì)技術(shù)交流活動(dòng)

    01活動(dòng)主題DDR4/DDR5內(nèi)存技術(shù)高速信號(hào)專題設(shè)計(jì)技術(shù)交流活動(dòng)時(shí)間:2024年7月6日(本周六)10:00地點(diǎn):深圳市南山區(qū)科技南十二路曙光大廈1002(深圳地鐵1號(hào)線,高新園地鐵站D出口200
    的頭像 發(fā)表于 07-06 08:12 ?234次閱讀
    0706線下活動(dòng) I <b class='flag-5'>DDR</b>4/<b class='flag-5'>DDR</b>5內(nèi)存技術(shù)高速<b class='flag-5'>信號(hào)</b>專題設(shè)計(jì)技術(shù)交流活動(dòng)