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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于FPGA的時鐘設計

          基于FPGA的時鐘設計

          作者: 時間:2011-09-25 來源:網絡 收藏

          3 多級邏輯
          當產生門控的組合邏輯超過一級(即超過單個的“與”門或“或”門)時,驗證項目的可靠性變得很困難。即使樣機或仿真結果沒有顯示出靜態(tài)險象,但實際上仍然可能存在著危險。通常,不應該用多級組合邏輯去鐘控PLD中的觸發(fā)器。
          圖4給出一個含有險象的多級的例子。時鐘是由SEL引腳控制的多路選擇器輸出的。多路選擇器的輸入是時鐘(CLK)和該時鐘的2分頻(DIV2)。多級邏輯的險象可以去除。例如,可以插入“冗余邏輯”到項目中。然而,PLD/編譯器在邏輯綜合時會去掉這些冗余邏輯,使得驗證險象是否真正被去除變得困難了。為此,必須應尋求其他方法來實現電路的功能。


          圖5給出圖4電路的一種單級時鐘的替代方案。圖中SEL引腳和DIV2信號用于使能D觸發(fā)器的使能輸入端,而不是用于該觸發(fā)器的時鐘引腳。采用這個電路并不需要附加PLD的邏輯單元,工作卻可靠多了。

          4 行波時鐘
          另一種流行的時鐘電路是采用行波時鐘,即一個觸發(fā)器的輸出用作另一個觸發(fā)器的時鐘輸入。如果仔細地設計,行波時鐘可以像鐘一樣地可靠工作。然而,行波時鐘使得與電路有關的定時計算變得很復雜。行波時鐘在行波鏈上各觸發(fā)器的時鐘之間產生較大的時間偏移,并且會超出最壞情況下的建立時間、保持時間和電路中時鐘到輸出的延時,使系統(tǒng)的實際速度下降,如圖6所示。

          5 多時鐘系統(tǒng)
          許多系統(tǒng)要求在同一個PLD內采用多時鐘。最常見的例子是兩個異步微處理器之間的接口,或微處理器和異步通信通道的接口。由于兩個時鐘信號之間要求一定的建立和保持時間,所以,上述應用引進了附加的定時約束條件。它們也會要求將某些異步信號同步化。
          圖7給出一個多時鐘系統(tǒng)的實例。CLK_A用以鐘控REG_A,CLK_B用于鐘控REG_B,由于REG_A驅動著進入REG_B的組合邏輯,故CLK_A的上升沿相對于CLK_B的上升沿有建立時間和保持時間的要求。由于REG_B不驅動饋到REG_A的邏輯,CLK_B的上升沿相對于CLK_A沒有建立時間的要求。此外,由于時鐘的下降沿不影響觸發(fā)器的狀態(tài),所以CLK_A和CLK_B的下降沿之間沒有時間上的要求。電路中有兩個獨立的時鐘,可是,在它們之間的建立時間和保持時間的要求是不能保證的。在這種情況下,必須將電路同步化。圖8給出REG_A的值(如何在使用前)同CLK_B同步化。新的觸發(fā)器REG_C由GLK_B觸控,保證REG_G的輸出符合REG_B的建立時間。然而,這個方法使輸出延時了一個時鐘周期。
          在許多應用中只將異步信號同步化還是不夠的,當系統(tǒng)中有兩個或兩個以上非同源時鐘的時候,數據的建立和保持時間很難得到保證,將面臨復雜的時間問題。最好的方法是將所有非同源時鐘同步化。使用PLD內部的鎖項環(huán)(PLL或DLL)是一個效果很好的方法,但不是所有PLD都帶有PLL,DLL,而且?guī)в蠵LL功能的芯片大多價格昂貴,所以除非有特殊要求,一般場合可以不使用帶PLL的PLD。這時需要使用帶使能端的
          D觸發(fā)器,并引入一個高頻時鐘。

          6 結語
          穩(wěn)定可靠的時鐘是系統(tǒng)穩(wěn)定可靠的重要條件,所以不能將任何可能含有毛刺的輸出作為時鐘信號,并且盡可能只使用一個全局時鐘,對多時鐘系統(tǒng)要注意同步異步信號和非同源時鐘。


          上一頁 1 2 下一頁

          關鍵詞: 設計 時鐘 FPGA 基于

          評論


          相關推薦

          技術專區(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); })();