3 綜合運用工具
下面提到的解決問題技巧,因爲受目前認識的限制和現有的技術水準,不該當把它們當作是「萬能」的。尤爲是隨着技術的發展,其中的許多手段確定會不合適了。佈局
3.1 可能成爲關鍵路徑的電路優化
在作詳細設計方案或者整體方案的時候,必定要考慮到設計中哪些電路可能成爲關鍵路徑。若是不考慮這些,極可能會致使設計實現失敗,或者要更改設計,或者要更換器件。spa
在FPGA設計裏,經常影響到設計沒法(或者很難)實現的電路有(指設計速度方面):比較器、多路選擇器、Distributed RAM、乘法器、加法器等,尤爲是在位寬比較大的狀況下。設計
建議:在作方案時,針對上述電路先進行速度評估,以決定是否要Pipeline。ip
3.2 如何提升芯片速度資源
提升芯片速度的根本方法是:減小組合邏、LUT的級數、儘可能壓縮關鍵路徑上的線延時。pip
3.2.1 引入放鬆約束 TIG False path 和Multi-Cycle-Pathclass
許多設計者以爲設置TIG和Multi-Cycle-Path意義不大,由於它們不直接對關鍵路徑發生做用這種想法是錯誤的。雖然它們不直接對關鍵路徑發生做用,但能夠起到「讓非關鍵路徑散開」的做用,讓這些非關鍵路徑滾得越遠越好。這樣,就爲關鍵路徑騰挪出空間,從而與關鍵路徑相關的LUT有可能儘可能壓縮在一塊兒,從而到達「壓縮關鍵路徑上線延時的目的」這實際是一種「曲線救國」的策略,用詞可能不太好,不過我想不出更好的了。技巧
實踐證實:這種方法很是行之有效,並且它的一個最大好處是不用更改設計。
3.2.2 對線延時比較大的net 設置Maxdelay和Maxskew
迫使工具利用驅動能力比較強的長線資源,以減小線延時。
3.2.3 採用BUFGS
對於一些扇出特別多,線延時特別大的net,能夠直接引用BUFGS 以提升驅動能力。例如:對時鐘使能信號採用BUFGS進行驅動。
3.2.4 基本設計技巧
在「設計技巧」章節裏,咱們提到了許多設計技巧,其中許多與設計速度相關,如今整理以下:copy邏輯電路減小fanout;加法器處理;case代替if語句;合併if語句;減小關鍵路徑上的LUT級數;去掉資源共享;pipeline 組合邏輯與時序邏輯分離;利用電路的等價性巧妙分配延時;利用LUT四輸入特色進行優化。
3.2.5 專有資源的利用
如進位鏈、MUX 、SRL、乘法器等,可利用Coregen產生宏單元。
利用專有資源雖然能夠提升速度,但有一缺點:下降代碼的可移植性;若是是準備轉ASIC,則需對專有資源進行代碼改動,增長出錯的可能性。所以,在作ASIC設計時,採用這種方法要仔細權衡。
3.2.6 關鍵路徑在同一個Module
這樣,在綜合時,能夠或得最佳效果。
3.2.7 關鍵路徑單獨綜合,不與其它模塊放在一塊兒綜合
對關鍵路徑所在模塊,採起速度優先策略;對非關鍵路徑模塊,採用面積優先策略。
3.2.8 針對關鍵路徑,進行位置約束
若是發現關鍵路徑相關LUT距離太遠,可經過floorplanner手工佈線,並造成位置約束文件,以指導佈局佈線。
3.2.9 迂迴策略:下降非關鍵路徑上的面積,爲關鍵路徑騰挪空間。
儘量優化非關鍵路徑上的面積,以儘可能多給關鍵路徑留空間,以便將關鍵路徑相關
LUT壓縮在一塊兒,下降線延時。
該方法體現了「向非關鍵路徑要面積,向關鍵路徑要時間」的設計思想。
3.3 如何下降芯片面積
3.3.1 Distributed RAM代替BlockRAM
在設計中,若是LUT足夠多,而BLOCK RAM不夠,則可考慮採用Distributed RAM代替BlockRAM,這種狀況在設計中有時會碰到。
3.3.2 Distributed RAM代替通道計數器
這個在前面的章節已經提到,這裏很少說。
3.3.3 專有資源的利用
狀況同 3.2.5
3.3.4 基本設計技巧
在「設計技巧」章節裏,咱們提到了許多設計技巧,其中許多與設計面積相關,如今整理以下:
加法器處理;if代替case語句;資源共享;組合邏輯與時序邏輯分離;利用LUT四輸入特色進行優化;高效利用IOB;採用單端口BlockRAM,爲ASIC作準備。