綜合與可綜合的HDL設計
綜合的定義
綜合就是針對給定的電路實現功能和實現此電路的約束條件,如速度、功耗、成本及電路類型等,通過計算機進行優化處理,獲得一個能滿足上述要求的電路設計方案。
被綜合的文件是HDL文件(或相應文件等),綜合的依據是邏輯設計的描述和各種約束條件,綜合的結果則是一個硬件電路的實現。該方案必須同時滿足預期的功能和約束條件。對于綜合來講,滿足要求的方案可能有多個,綜合器將產生一個的或接近的結果。因此,綜合的過程也就是設計目標的優化過程,獲得的結構與綜合器的工作性能有關。
FPGA/CPLD綜合軟件
FPGA/CPLD綜合軟件包括:Synopsys公司的FPGA Compiler II、Synplicity公司的Synplify/Synplify Pro、Mentor公司的LeonardoSpectrum及FPGA/CPLD廠商集成開發環境中自帶的綜合工具,如Altera Quartus II軟件中的綜合軟件等。
綜合的特點
綜合的特點體現在以下幾個方面:綜合是在一定的限制條件下進行的,比如時序、面積或物理約束等;綜合器獨立于具體設計工藝,如果工藝改變,可使用新工藝元件庫重新綜合;綜合器很難得到硬件設計的所有實現方案,不可能得到的硬件結果;不同的綜合器使用不同的機制和算法,因此對相同的HDL描述可能得到不同的結果;不同的綜合器對HDL語句和語法的支持不同,需要通過察看綜合軟件的相關文檔進行了解。
可綜合的數據類型包括枚舉類型、整數類型、數組類型(一維數組、二維數組)及記錄類型。綜合器不支持的數據類型包括:物理類型,如時間類型;浮點類型,如實數類型;存取類型及文件類型等。
面向綜合的編碼風格
設計描述的編碼風格將直接影響EDA軟件工具的綜合結果。好的描述方式易于被綜合器識別且能夠被綜合出設計者所期望的電路。電路的質量取決于設計者使用的描述風格和綜合工具的能力。
形成良好的編碼風格應注意以下幾個方面:
對希望形成組合邏輯的if和case語句,要完整地描述其各個分支,避免形成鎖存器(可行的方法之一是給所有被賦值信號賦初始值);
盡量使用簡單的邏輯及數字運算符;
進程的敏感清單應列舉完全,否則可能產生綜合前后仿真結果不同的現象;
在循環中不要放置不隨循環變化的表達式;
對 于復雜的數字運算要充分進行資源共享,如采用if塊等;
對于長的組合鏈路應該在代碼編寫階段注意描述成樹狀結構;
時序邏輯盡可能采用同步設計;
對具有不同的時序或面積限制的設計,應盡可能采用不同的代碼描述以達到不同的要求(一般而言,面積與延時是相互沖突的,在FPGA 中面積代表資源的多少);
對于復雜系統設計,應盡量采用已有的算法和模塊來實現。
設計實現
設計實現即利用實現工具把邏輯映射到目標器件結構的資源中,決定邏輯的布局,選擇邏輯與輸入輸出功能連接的布線通道進行連線,并產生相應文件(如,配置文件與相關報告)的過程。通常可分為如下五個步驟:
1)轉換:將多個設計文件進行轉換并合并到一個設計庫文件中。
2)映射:將網表中的邏輯門映射成物理單元或元素,即把邏輯設計分割到構成可編程邏輯陣列內的可配置邏輯塊與輸入輸出塊及其他資源中的過程。
3)布局布線:布局是指從映射中取出定義的邏輯和輸入輸出塊,并把它們分配到 FPGA 內部的物理位置。通常基于某種先進的算法,如小分割、模擬退火和一般的受力方向張弛等來完成;布線是指利用自動布線軟件使用布線資源選擇路徑,試著完成所有的邏輯連接。在布局布線過程中,可同時提取時序信息形成時序分析報告。
4)時序提取:產生反標文件,供后續的時序仿真使用。
5)配置:產生FPGA配置時所需的位流文件。
增量設計
傳統方法vs增量設計
傳統的FPGA設計過程中,每次修改都將導致整個設計的重新編譯,如此,時序也將產生變化,針對這一現象,引入了增量設計的概念。
增 量設計主要是指增量編譯:根據設計者的分割設置,對不同的層次和模塊分別編譯。在對設計進行重新編譯時,可以保持未修改部分的編譯結果,從而節省編譯時間。
增量設計可將設計中無需修改的部分鎖定并保持其性能,僅對設計中變化的部分重新處理。使用增量設計,設計人員可在驗證過程中加速設計變化的調試,將更多時間用于調整設計中的關鍵元件,甚至在后期設計規范發生改變時,也不會影響整個設計的主要進度。
對于設計中未改變的部分,由于它們布局布線都保持不變,性能也不會變化,因此無需進行重新驗證,從而可以節省大量的設計時間。增量設計有助于模塊化設計和基于團隊的設計流程。
圖1 傳統方法vs增量設計(略)
設計分割
設計分割指用戶定義的邏輯分割,它與物理區域不同。邏輯分割應與設計的層次邊界相符合,其中,每個設計實體并不自動成為一個分割。設計分割具有不同的設計文件,如果使用第三方綜合軟件,要為每個分割生成各自的EDIF或VQM文件。化過程不能跨越分割的邊界,每個分割部分獨立的進行綜合和適配。
圖2給出了設計分割示意,頂層劃為一個分割,其他層次結構的子模塊根據具體情況進行分割。不一定每個設計實體即為一個分割,也可以是幾個設計模塊的組合。
圖2 設計分割(略)
對于不同的設計流程,Altera提供了不同的軟件支持。自頂向下(Top-Down)的設計流程,整個設計在頂層編譯,可由一個設計者或項目管理者完成編譯設計,Altera Quartus II 5.0 和5.1中完全支持。自底向上(Bottom-Up)的設計流程,整個設計是在底層編譯,在各個設計者分別優化后進行集成。目前Altera Quartus II 5.0和5.1中尚無導入和導出功能,因此并不支持自底向上(Bottom-Up)的設計流程,而借助LogicLock可實現該設計流程。
圖3 增量編譯流程(略)
增量編譯流程
增量編譯流程如圖3所示,首先,準備利用增量編譯的項目。包括:詳細的設計分析,識別設計的層次;生成設計分割;使能“完全增量編譯”或者“只進行增量綜合”;用LogicLock生成設計版圖等。
利用LogicLock布圖
利用LogicLock生成設計版圖:對包括頂層在內的每個分割產生一個LogicLock區域,而后每個LogicLock區域或設計分割將被獨立放置在分開的物理區域上,手動或使用Altera Quartus II早期時序估計工具分配物理位置。
LogicLock區域由位置和尺寸定義。用原點表示位置:對于Stratix,Cyclone和MAX II器件,原點位于區域左下角,而其他Altera器件,原點則位于區域左上角。區域的寬度和高度決定了區域的尺寸。
推薦的設計分割用法與布局方式
根據設計經驗,分割中有一些推薦用法,包括:所有分割的輸入輸出端口要有寄存器;應令跨邊界的連接少;將關鍵路徑限制在每個分割的內部;分割不應太小(如<1000個邏輯單元);可能需要均衡使用資源;及分割邊界上不使用三態或雙向端口等。
同時,推薦的布圖方式包括:避免區域間相互覆蓋及使用父區域和子區域,從而保持設計的邏輯層次關系,提高區域布局的靈活性等。
其次,執行完全編譯。執行完全編譯即啟動完全編譯并編譯每一個分割,從而生成在隨后增量編譯中重新使用的綜合后和適配后的網表。
,對設計進行修改并執行增量編譯。完全編譯后,在設計與調試階段需反復進行設計的修改及增量編譯。
執行增量編譯
在下一次編譯期間為每個分割設置使用的網表類型,如表1所示,然后重新編譯設計。
表1 :網表類型設置(略)
設計優化與模塊化設計方法
設計優化
FPGA設計過程中,必須采用與其結構相適應的優化技術,才能有效發揮FPGA芯片的能力。設計優化是指在設計沒有達到用戶要求的情況下,對其進行改進,以便滿足設計的初始規格。
設計優化的主要內容包括:理解整個設計;對設計進行約束和設置;優化資源利用;輸入輸出時序優化;速度優化;編譯效果優化及編譯和測試時間優化。其設計流程如圖4所示。
圖4 設計優化流程(略)
只有深入理解整個設計,才能對其進行優化。包括理解系統時序,如系統時鐘、模塊時鐘、時鐘域及時鐘來源等內部時鐘問題。
在理解整個設計的基礎上,須對設計進行約束和設置,約束和設置旨在完成編譯后,可以根據編譯結果對設計進行分析,找到設計中的真正瓶頸,從而有效的引導后續的優化過程。利用Altera提供的開發工具及其他廠商的EDA軟件都可設定各種設計約束。
完成約束、設置后,通常將查看并分析編譯產生的報告,包括:了解設計的資源使用情況,以便在后續的設計優化中更合理的分配和使用資源;查看并分析時序報告,判斷各種時序關系和系統運行速度等指標是否滿足了設計的需求,以便對不滿足要求的部分進行修改和優化。
優化資源的利用
設計過程中,由于資源數量限制,造成系統不能在目標器件中實現,則需對資源利用進行優化。FPGA的資源,包括:邏輯單元、塊RAM、I/O引腳、DSP塊、鎖相環、布線資源及各種硬IP核等。
設計中根本、有效的優化方法是對設計輸入(如HDL代碼)的優化,比較常用的面積優化方法包括:模塊的時分復用、改變狀態機的編碼方式及改變模塊的實現方式等。
當 設計中位置約束或者邏輯鎖定約束較多時,可能會造成局部設計擁擠,導致布線資源緊張,此時,可適當解除或放松布線擁擠區域的約束 。
輸入輸出時序優化
輸入輸出時序優化需要重點考慮的問題是可編程邏輯器件與外圍芯片間的接口時序。在同步系統設計中,外部芯片和可編程邏輯器件使用的時鐘經常是同相位的。設計主要關心芯片輸入引腳的建立時間和保持時間、數據的時鐘到輸出延時及數據的輸入到輸出延時等。
輸入輸出時序的優化方法:根據外圍器件和PCB連線情況,保留一定余量,計算I/O時序要求,并將這些時序要求在EDA軟件中對設計進行約束,編譯軟件將根據約束條件進行自動優化;使用I/O單元的觸發器;及使用鎖相環電路等。
速度優化
速度優化即時鐘頻率優化,其有效的方法是對設計代碼進行優化。具體優化方法包括:增加流水線級數、組合邏輯分割和平衡、復制高扇出的節點及令狀態機僅完成控制邏輯的功能等。
編譯效果優化
使用不同的隨機數種子,編譯結果將在小幅度內變動。如果設計已經非常接近系統需求,則可以嘗試改變隨機數種子,使性能達到系統需求。同時,使用軟件工具,如Altera的"Design Space Explorer",可以一次運行多種編譯設置和優化目標,探索設計的優化空間。
編譯和測試時間優化
設計較大或約束較多時,編譯時間往往很長,從而影響開發進度。縮短編譯時間有以下3種常用方法:使用快速編譯方式,其特點是速度快,但可能在一定程度上影響設計性能;使用增量編譯,限度的利用上一次的編譯結果;反標注,使邏輯的位置和布線成為下一次編譯的約束,對這部分不進行重新編譯。
模塊化設計方法
模塊化設計
模 塊化設計是將復雜的大型設計分成多個模塊,利用基于團隊的優勢,分別進行設計和調試。采用模塊化設計,可以進行系統的標準化設計,即將一些系統中常用的功能塊進行模塊化設計、調試和包裝,以備調用。
與傳統設計流程相比,模塊化設計流程的輸入模塊是已經優化并達到時序收斂的子模塊,通過模塊化設計方法繼承以往編譯與實現的結果,在保證每個子模塊時序收斂的基礎上,達到頂層設計的時序收斂。因此有效避免了對整個系統進行的繁瑣的設計編譯、時序分析以及優化的反復循環,提高了設計效率。
模塊劃分的一般原則:模塊內部聯系緊密;各個模塊的功能盡量獨立;模塊間連接盡量簡單。
模塊化設計基本流程
模塊化設計的基本流程(如圖5所示),分為兩部分,一:模塊化設計輸入與綜合,包括:頂層模塊設計(輸入與綜合)、子模塊劃分及子模塊的輸入與綜合。二:模塊化設計實現,包括模塊分割,添加設計約束、各子模塊的實現(布局布線)及設計整合:將頂層設計和各子模塊合并。
圖5 模塊化設計基本流程(略)
頂層設計是進行模塊化設計的必要條件,包括:所有全局邏輯、輸入輸出端口、類似黑匣子的子模塊及模塊間、模塊與輸出輸入端口間的信號連接等。項目設計人員設計各個子模塊的邏輯實體,綜合出各個子模塊的網表。
模塊化設計的實現包括三個階段:初始預算、模塊實現及設計整合。初始預算階段,項目負責人對設計的整體進行分割和邏輯資源的分配,主要任務包括:對設計進行全局區域規劃和布局;規劃每個模塊的規模和區域;規定每個模塊的輸入輸出端口及初的時序約束。
模 塊實現階段,項目設計人員將實現頂層設計中確定的各個模塊,包括:添入功能實體、添加約束、進行布局布線。當終實現結果滿足模塊的設計要求,則該模塊的實現階段完成。設計整合階段,項目負責人將所有實現好的有效模塊的設計結果與頂層設計結果進行整合,從而完成整個設計,包括:對設計進行合并及對合并后的設計進行布局布線。
Altera LogicLock工具
Altera LogicLock工具是Altera Quartus II軟件內嵌的工具,LogicLock模塊化設計流程支持復雜設計的某個模塊獨立進行設計、實現及優化,并將該模塊的實現結果約束在規劃好的FPGA區域內。這樣在進行設計整合時,能夠更好的繼承每個模塊的實現結果,提高模塊復用效率,縮短設計周期。
基于LogicLock的模塊化設計流程如下:1.合理規劃設計層次并劃分模塊;2.使用Quartus II軟件自帶的綜合軟件或其他第三方綜合軟件,對設計的每個模塊進行綜合;3.對每個子模塊建立Quartus II軟件工程,在每個獨立的工程中分別對每個子模塊進行設計優化,以滿足每個子模塊的時序性能和面積目標,創建LogicLock區域;4.當所有子模塊都滿足要求后,導出所有模塊和LogicLock區域的反標信息,作為后續設計的約束;5.建立頂層工程,根據設計要求選擇節點反標或布線反標,將每個子模塊的LogicLock區域反標信息導入頂層設計中;6.編譯頂層設計,并觀察頂層設計是否滿足設計需要。
通過 LogicLock可以將關鍵路徑分組,便于時序優化;繼承模塊的設計優化成果,便于設計重用;通過增量的編譯與實現,有效縮短設計編譯時間;支持模塊化設計方法,便于分工協作與并行設計。
FPGA器件的設計實現、設計優化與模塊化設計方法
更新時間: 2008-07-26 09:47:18來源: 粵嵌教育瀏覽量:1266