<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設計應用 > 利用 IDDR 簡化亞穩(wěn)態(tài)

          利用 IDDR 簡化亞穩(wěn)態(tài)

          作者: 時間:2010-11-28 來源:網(wǎng)絡 收藏

          圖1 同步器鏈的默認布置圖


          圖中,將寄存器鏈放置在兩個單元中:第一個為ILOGIC單元,而另外兩個寄存器放置在SLICE單元中(選擇具有相同時鐘的3個寄存器和鏈)。這是減少問題的一種快速且非常簡單的方法,還有其他一些方法不但可減少問題,還可優(yōu)化性能。

          使用賽靈思邏輯塊的方法
          在Virtex-4和Virtex-5 FPGA中,賽靈思將其ILOGIC模塊直接放置在I/O驅(qū)動器和接收器的后面。該模塊包括4個存儲元件寄存器和1個可編程絕對延遲元件。


          Virtex-4與Virtex-5器件均采用這4個寄存器來實現(xiàn)雙倍數(shù)據(jù)率輸入()寄存器,功能設計師只需例化原語便能實現(xiàn)。這將使 受益匪淺。


          這種原語的其中一個模式稱為SAME_EDGE_PIPELINED。圖2顯示了采用這種模式的DDR輸入寄存器及相關信號。綠色矩形框顯示了一系列最優(yōu)的寄存器,可用其解決問題。此外,使用 IDDR 方法還有一個優(yōu)勢,即能使用兩三倍之多的主時鐘,同時又不會造成任何設計時延問題。

          圖2 SAME_EDGE_PIPELINED模式中的輸入DDR

          只需少量代碼
          在《Virtex-4用戶指南》的328~329頁,舉例說明采用VHDL和Verilog語言編寫的IDDR原語的例化。以下采用Verilog語言的IDDR原碼例化的典型實例:
          defparam IDDR_INT2.DDR_CLK_EDGE = SAME_EDGE_PIPELINED;
          defparam IDDR_INT2.INIT_Q1 = 1'b1;
          defparam IDDR_INT2.INIT_Q2 = 1'b1;
          defparam IDDR_INT2.SRTYPE = SYNC;
          IDDR IDDR_INT2( .Q1(sync_data),
          .Q2(signal_noload), .C(CLK_2X),
          .CE(1'b1), .D(async_data),.R(), .S());
          在圖3中看到全新的布局圖。 用這種方法將寄存器鏈放置在兩個單元:前兩個寄存器放置在ILOGIC單元中,另一個寄存器則放置在SLICE單元中(這里選擇的鏈具有3個寄存器和2個不同的時鐘,其中一個時鐘速度是另一個的兩倍)。

          圖3 顯示IDDR替代的同步器鏈


          整體而言,亞穩(wěn)態(tài)問題會給設計帶來不便,但采用一些快速便捷的解決方案(如以一種新的方式使用IDDR原語)就能大幅降低設計發(fā)生亞穩(wěn)態(tài)問題的幾率。大家應在創(chuàng)建設計時就采用上述方法,而不應事后亡羊補牢,這樣就能創(chuàng)建出既能靈活應對亞穩(wěn)性問題,而且所占面積、性能和成本又得到優(yōu)化的架構(gòu)。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();