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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > FPGA設計流程及其布線資源解析

          FPGA設計流程及其布線資源解析

          作者: 時間:2017-06-05 來源:網(wǎng)絡 收藏

          1、電路設計與輸入

          本文引用地址:http://www.ex-cimer.com/article/201706/348865.htm
          電路設計與輸入是指通過某些規(guī)范的描述方式,將工程師電路構思輸入給EDA工具。常用的設計方法有硬件描述語言(HDL)和原理圖設計輸入方法等。原理圖設計輸入法在早期應用得比較廣泛,它根據(jù)設計要求,選用器件、繪制原理圖、完成輸入過程。這種方法的有點是直觀、便于理解、元器件庫資源豐富。但是在大型設計中,這種方法的可維護性較差,不利于模塊構造與重用。更主要的缺點就是當所選用芯片升級換代后,所有的原理圖都要做相應的改動。目前進行大型工程設計時,最常用的設計方法是HDL設計輸入法,其中影響最為廣泛的HDL語言是VHDL和Verilog HDL.他們的共同特點是利用由頂向下設計,利于模塊的劃分與復用,可移植性好,通用性好,設計不因芯片的工藝與結構不同而變化,更利于向ASIC的移植。波形輸入和狀態(tài)機輸入方法是兩種常用的輔助設計輸入方法:使用波形輸入時,志耘愛繪制出激勵波形與輸出波形,EDA軟件就能自動地根據(jù)響應關系進行設計;使用狀態(tài)機輸入法時,設計者只需要畫出狀態(tài)轉移圖,EDA軟件就能生成相應的HDL代碼或原理圖,使用十分方便。但是需要指出的是,波形輸入和狀態(tài)機輸入方法只能在某些特殊情況下緩解設計者的工作量,并不適合所有的設計。
          2、
          電路設計完成以后,要用專用的仿真工具對設計進行,驗證電路功能是否符合設計要求。有時也稱為前仿真。通過仿真能及時發(fā)現(xiàn)設計中的錯誤,加快設計進度,提高設計的可靠性。
          3、綜合優(yōu)化
          綜合優(yōu)化(Synthesize)是指將HDL語言、原理圖等設計輸入翻譯成由與、或、非門,RAM,觸發(fā)器等基本邏輯單元組成的邏輯連接(網(wǎng)表),并根據(jù)目標與要求(約束條件)優(yōu)化所生成的邏輯連接,輸出edf和edn等標準格式的網(wǎng)表文件,供/CPLD廠家的布局布線器進行實現(xiàn)。
          4、綜合后仿真
          綜合完成后需要檢查綜合結果是否與設計一致,做綜合后仿真。在仿真時,把綜合生成的標準延時文件反標志到綜合仿真模型中去,可估計門延時帶來的影響。綜合后仿真雖然比功能仿真精確一些,但是只能估計門延時,不能估計線延時,仿真結果與布線后的實際情況還有一定的差距,并不十分準確。這種仿真的主要目的在于檢查綜合器的綜合結果是否與設計輸入一致。目前主流綜合工具日益成熟,對于一般性的設計,如果設計者確信自己標注明確,沒有綜合歧義發(fā)生,則可省略該步驟。但是如果在布局布線后仿真時發(fā)現(xiàn)有電路結構與設計意圖不符的現(xiàn)象,則常常需要回溯到綜合后仿真以確認是否時由于綜合歧義造成的問題。
          5、實現(xiàn)與布局布線
          綜合結果的本質是一些由與、或、非門,觸發(fā)器,RAM等基本邏輯單元組成的邏輯網(wǎng)表,它與芯片的實際的配置情況還有較大的差距。此時應該使用/CPLD廠商提供的軟件工具,根據(jù)所選芯片的型號將綜合輸出的網(wǎng)表適配到具體/CPLD器件上,這個過程就叫做實現(xiàn)過程。因為只有器件的開發(fā)商最了解器件的內部結構,所以實現(xiàn)步驟必須選用器件開發(fā)商提供的工具。在實現(xiàn)過程中最主要的過程是布局布線(PAR)。所謂布局(Place),就是指將邏輯網(wǎng)表中的硬件原語或者底層單元合理地適配到FPGA內部的固有硬件結構上,布局的優(yōu)劣對設計的最終結果(在速度和面積兩個方面)影響很大。所謂布線(Route),是指根據(jù)布局的拓撲結構,利用FPGA內部的各種連線資源,合理正確連接各個元件的過程。FPGA的結構相對復雜,為了獲得更好的實現(xiàn)結果,特別是保證能夠滿足設計的時序條件,一般采用時序驅動的引擎進行布局布線,所以對于不同的設計輸入,特別是不同的時序約束,獲得的布局布線結果一般有較大的差異。CPLD結構相對簡單得多,其資源有限而且一般為交叉連接矩陣,故CPLD的布局布線過程相對簡單明朗的多,一般稱為適配過程。一般情況下,用戶可以通過設置參數(shù)指定布局布線的優(yōu)化準則,總的來說優(yōu)化目標主要有兩個方面,面積和速度。一般根據(jù)設計的主要矛盾,選擇面積或者速度或者是兩者平衡等優(yōu)化目標,但是當兩者沖突時,一般滿足時序約束要求更重要一些,此時選擇速度或時序優(yōu)化目標更佳。
          6、時序仿真與驗證
          將布局布線的延時信息反標注到設計網(wǎng)表中,所進行的仿真就叫時序仿真或布局布線后仿真,也叫后仿真。該仿真的仿真延時文件包含的延時信息最全,不僅包含了門延時,還包含了實際布線延時,所以布局布線后仿真最準確,能夠較好的反映芯片的實際工作情況。一般來說,布線后仿真步驟必須進行,通過布局布線后仿真能檢查設計時序與FPGA實際運行情況是否一致,確保設計的可靠性和穩(wěn)定性。
          ——功能仿真主要目的在于驗證語言設計的電路結構和功能是否和設計意圖相符。
          ——綜合后仿真主要目的在于驗證綜合后電路結構是否與設計意圖相符,是否存在歧義綜合結果。
          ——布局布線后仿真主要目的是驗證是否存在時序違規(guī)。
          7、板級仿真與驗證
          有些高速設計情況下還需要使用第三方的板級驗證工具進行仿真與驗證。這些工具通過對設計的IBIS、HSPICE等模型的仿真,能較好地分析高速設計的信號完整性、電磁干擾等電路特性。
          8、調試與加載配置
          設計開發(fā)的最后步驟就是在線調試或者將生成的配置文件寫入芯片中進行測試。示波器和邏輯分析儀是邏輯設計的主要調試工具。傳統(tǒng)的邏輯功能板級驗證手段是用邏輯分析儀分析信號,設計時要求FPGA和PCB設計人員保留一定數(shù)量FPGA管腳作為測試管腳,編寫FPGA代碼時將需要觀測的信號作為模塊的輸出信號,在綜合實現(xiàn)時在把這些輸出信號鎖定到測試管腳上,然后連接邏輯分析儀的探頭到這些測試管腳,設定觸發(fā)條件,進行觀測。
          任何仿真或驗證步驟出現(xiàn)問題,就需要根據(jù)錯誤定位返回到相應的步驟更改或者重新設計邏輯設計的主要調試工具。傳統(tǒng)的邏輯功能板級驗證手段是用邏輯分析儀分析信號,設計時要求FPGA和PCB設計人員保留一定數(shù)量FPGA管腳作為測試管腳,編寫FPGA代碼時將需要觀測的信號作為模塊的輸出信號,在綜合實現(xiàn)時在把這些輸出信號鎖定到測試管腳上,然后連接邏輯分析儀的探頭到這些測試管腳,設定觸發(fā)條件,進行觀測。
          任何仿真或驗證步驟出現(xiàn)問題,就需要根據(jù)錯誤定位返回到相應的步驟更改或者重新設計。
          FPGA中豐富的
          連通FPGA內部的所有單元,而連線的長度和工藝決定著信號在連線上的驅動能力和傳輸速度。FPGA芯片內部有著豐富的布線資源,根據(jù)工藝、長度、寬度和分布位置的不同而劃分為4類不同的類別。
          第一類是全局布線資源,用于芯片內部全局時鐘和全局復位/置位的布線;
          第二類是長線資源,用以完成芯片Bank間的高速信號和第二全局時鐘信號的布線;
          第三類是短線資源,用于完成基本邏輯單元之間的邏輯互連和布線;
          第四類是分布式的布線資源,用于專有時鐘、復位等控制信號線。
          在實際中設計者不需要直接選擇布線資源,布局布線器可自動地根據(jù)輸入邏輯網(wǎng)表的拓撲結構和約束條件選擇布線資源來連通各個模塊單元。從本質上講,布線資源的使用方法和設計的結果有密切、直接的關系。


          評論


          相關推薦

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