《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 用設計約束實現(xiàn)FPGA性能的最優(yōu)化

用設計約束實現(xiàn)FPGA性能的最優(yōu)化

2009-06-17
作者:Troy Scott

  摘? 要: 除了硬件描述語言本身的功能之外,,設計約束是影響FPGA性能的重要因素,。合理的設計約束能幫助設計者在設計流程的各個相應階段通過優(yōu)化來滿足設計目標,。本文以萊迪思公司的FPGA設計工具為例,,論述如何用設計約束實現(xiàn)FPGA性能最優(yōu)化,。
  關鍵詞: FPGA,;設計約束;綜合約束,;后端約束

?

  除了硬件描述語言本身的功能之外,,設計約束是影響FPGA性能的第二大因素。許多設計者沒有花費足夠的時間進行約束設計,,而是在設計流程中試圖通過各種各樣的布局布線工具選項和手工布局來實現(xiàn)時序要求,。這些方法不僅費時,而且在設計的下一個版本中存在不能工作的可能,。合理的設計約束能幫助設計者在設計流程的各個相應階段通過優(yōu)化來滿足設計目標,。
  FPGA設計約束表達了超越硬件描述語言的設計意圖。最普通的是目標器件的時序特性,,此外還包括針對設計優(yōu)化的指示,、I/O編程,或者物理布局,。本文以萊迪思公司的FPGA為例進行說明,,所論述的大多數(shù)技術同樣適用于其他可編程集成電路設計工具。
數(shù)據(jù)流程的綜合與實現(xiàn)
  圖1為基于Synplicity公司的Synplify和萊迪思半導體公司的ispLEVER FPGA設計工具的約束數(shù)據(jù)流程,,其中特別強調(diào)了約束流程,。通過圖形編輯器對SCOPE和 Design Planner進行約束,或者將VHDL屬性和Verilog注釋嵌入到硬件描述語言的源代碼中,,還可以將硬件描述語言與約束編輯器組合以指導綜合與布局布線工具,。

?


  第一個處理模塊為Synplify編譯器和綜合算法?;谟布枋稣Z言的約束與Synplicity設計約束(SDC)文件直接用于Synplify優(yōu)化與綜合引擎,。時序約束指導嵌入式時序分析、邏輯優(yōu)化算法,,同時映射出控制約束指示在目標網(wǎng)表中所使用的庫類型,。
  實現(xiàn)綜合之后,得到后端工具所用的設計約束,。ispLEVER Design Planner用來表達時序目標和許多物理實現(xiàn)細節(jié),,例如I/O與物理布局。在設計映射階段使用Lattice LPF約束文檔進行I/O編程與時序優(yōu)化,。將硬件描述語言中產(chǎn)生的ispLEVER的約束合并至基于LPF的約束,,并寫至PRF文檔。對post-synthesis網(wǎng)表的任何邏輯引用都自動地翻譯成物理單元,,如FPGA的Slices,、DSP或者EBR塊。物理參考文件用于布局與布線,以及靜態(tài)時序分析工具,,這些都是FPGA實現(xiàn)工具的一部分,。布局與布線之后,通常會將更加精確的時序反注至綜合階段,。黑盒IP時序和布線延時改進了綜合時序分析的精確性,。
  Synplicity在指示與屬性約束之間做出了區(qū)分。指示影響了映射優(yōu)化,,時序約束用來定義時鐘,、I/O時序、時鐘或路徑之間的多周期關系及例外的時序,。為了使代碼盡可能簡潔,,在SDC文件中保留了時序約束。嵌入在硬件描述語言中的時序約束通常為黑盒子的IP核所保留,,綜合時序分析器不能得到這些細節(jié),。在這些情況下,IP供應商經(jīng)常會提供用于分析的時序細節(jié),。
  圖形約束編輯器SCOPE提供了方便的初始化方法,,以瀏覽設計信號、指定時序約束,。編輯器輸出以ASCII SDC格式存儲,。圖2為Synplify SCOPE約束編輯器的界面。


  時序約束應該覆蓋設計的基本特性,,例如clock,、I/O延時和異步路徑的點對點延時。如果一個時鐘域傳遞數(shù)據(jù)到另外一個域,,則應該用多周期類型優(yōu)先選擇定義所需要的周期數(shù),。下面以Synplify SCOPE建立的SDC文檔為例說明這一點。
Synplify SDC文檔:
//Clock with specific duty cycle and
period goal
define_clock{CLK1}-period 10.0-clock-
group default_clkgroup
//I/O delays of top-level ports
define_input_delay{porta[7:0]}7.8-ref
clk1:r
define_output_delay{portb[7:0]}10-ref
clk1:r
//Point-to-point delay
define_path_delay-from {i:dmux.alua[5]}-
?to{i:regs.mem_regfile_15[0]}max 0.800
//Multi-clock cycle conditions
define_multicycle_path-from{i:regs.addr
  [4:0]}-to{i:special_regs.w[7:0]}2
  Synplify SDC提供了豐富的詞表來定義并編譯邏輯相關的設計單元,,包括I/O端口,、時鐘網(wǎng)絡以及同步RTL結構推出的寄存器單元,。在編譯期間,,Synplify進行靜態(tài)時序分析,包括針對所有時鐘,、時鐘關系以及接口時序的性能報告,。雖然結果沒有后布局布線結果那么精確,但是作為性能的重要指示,,它提供了針對時序逼近的重要檢測點,,是滿足最終速度目標的一個好的指示器。Synplify報告文件如圖3所示。


  對于Synplify,,可通過數(shù)個編譯器進行優(yōu)化約束,。流行的控制類型有狀態(tài)機編碼、分層保持以及存儲器工藝目標,。這里以狀態(tài)機編碼為例說明編譯器約束,。Synplify FSM編譯器特性根據(jù)狀態(tài)機的數(shù)目設定編碼類型:如果狀態(tài)機狀態(tài)多達4個,針對非常緊湊的實現(xiàn),,可采用時序編碼,;如果狀態(tài)機狀態(tài)多達5~40個,將產(chǎn)生高性能的獨熱編碼(OHE),;超過40個狀態(tài)將產(chǎn)生格雷碼,。如果有特殊的設計要求,則根據(jù)不同的情況來控制有限狀態(tài)機編碼,,以狀態(tài)寄存器聲明中的syn_encoding為指示,。
VHDL實例:
library synplify;
use synplify.attributes.all,;
package my_states is
type state_type is(Xstate,,st0,st1,,st2,,
st3,st4,,st5,,st6,st7,,st8,,st9,st10,,st11,,
st12,st13,,st14,,st15);
signal state:state_type,;
attribute syn_encoding of state:signal is ″gray″,;
end my_states;
  該包聲明了自定義的數(shù)據(jù)類型“state_type”,、state_type類型的信號,,syn_encoding屬性設置促成狀態(tài)寄存器的格雷碼,。
  在輸出的log文件中,Synplify給出了每個編碼狀態(tài)機FSM的報告:
Finished RTL optimizations(Time elapsed
0h:00m:00s,;Memory used current:50MB
peak:51MB)
Encoding state machine work.fsm(rtl)-_work_my_states_state_1[0:16]
original code -> new code
?00000000000000001 -> 00000
?00000000000000010 -> 00001
?00000000000000100 -> 00011
?00000000000001000 -> 00010
?00000000000010000 -> 00110
?00000000000100000 -> 00111
?00000000001000000 -> 00101
?00000000010000000 -> 00100
?00000000100000000 -> 01100
?00000001000000000 -> 01101
?00000010000000000 -> 01111
?00000100000000000 -> 01110
?00001000000000000 -> 01010
?00010000000000000 -> 01011
?00100000000000000 -> 01001
?01000000000000000 -> 01000
?10000000000000000 -> 11000
  輸出報告證實,,基于SDC與HDL的約束改進了綜合的結果。

FPGA布局布線后端約束
  ispLEVER實現(xiàn)工具的約束覆蓋了時序性能與設計實現(xiàn)的許多方面,。首先約束寫到寄存器傳輸級,,或者門、端口以及從RTL推出的網(wǎng)表,;然后約束寫到FPGA的物理單元,,例如可編程功能單元、針對存儲器的嵌入式ASIC塊,,或者DSP與可編程I/O單元,。后端約束通常用來定義I/O編程、I/O布局與時序目標,。它們可以定義可編程塊的參數(shù),,如存儲器或PLL/DLL電路。約束可以指導邏輯布局,、器件布局,,以及針對模塊設計流進行設計分割。與綜合約束相同,,后端約束基于硬件描述語言或者ASCII文本文件,。
  ispLEVER的Design Planner提供圖形接口以瀏覽post-synthesis網(wǎng)表的內(nèi)容,寫約束根據(jù)端口,、網(wǎng)表,、寄存器和ASIC塊設定。
  時序約束應該覆蓋基本的約束特性,,包括時鐘,、I/O延時以及點對點延時。約束時序目標通常作為一種手段來提高綜合與布局布線的等級,。實際上可以保留約束文件的多個版本,,在約束文件中應該針對邏輯優(yōu)化,其余的完全用于靜態(tài)時序分析,,使用“real”結束時序,。下面以Design Planner建立的LPF文檔為例說明普通的時序情況。ispLEVER報告文件如圖4所示,。

?

ispLEVER LPF 文檔:
# Clock with specific duty cycle and
period goal PERIOD PORT “CLK1”
10.0 ns,;
# I/O delays of top-level ports
INPUT_SETUP“porta[7:0]”7.8 ns CLKPORT“clk1”;
CLOCK_TO_OUT“portb[7:0]”10 ns CLKPORT“clk1”,;
# Point-to-point delay
MAXDELAY FROM CELL“dmux”TO CELL“regs”0.800 ns,;
# Multi-clock cycle conditions
MULTICYCLE“M1”FROM CELL“regs”TO CELL special_regs 2X;
# Ignore during timing analysis,,lower
priority BLOCK NET FROM CELL“myInst1_reg”TO CELL “myInst3_reg”,;
  硬件描述語言中的一些屬性可用于指導FPGA實現(xiàn)。常用的控制類型有I/O位置,、邏輯“don′t touch”類型指示與邏輯組合,。為了說明基于硬件描述語言的后端約束,考慮邏輯組合屬性-分層組合(HGROUP)指導布局算法,,將組的成員在器件中接近放置,,這種類型的屬性有助于改進時序,使得并行運行的結果更加一致,。
VHDL實例:
attribute HGROUP:? string;
attribute BBOX:??? string;
attribute HGROUP of struct: architecture
is ″pgroup1″,;
attribute BBOX?? of struct: architecture
is ″5,15″,;
  這個屬性定義了一個與結構相關的標志“pgroup1”,。結構體的所有邏輯約束行高為5,列寬為15的邊界框,,此區(qū)域用目標器件的行和列單元表示,。
  進一步考慮LPF中的布局。例如:
  # Anchor pgroup1
  LOCATE HGROUP″pgroup1″
  SITE R11C2D,;
  這個優(yōu)選指示放置器錨定以5×15邊界的NW角,,位于目標器件的第11行、第2列,。如何組合硬件描述語言與基于LPF的后端約束是指導布局的非常有效的辦法,。確保組的內(nèi)容,根據(jù)源代碼的內(nèi)容自動地更新,,使硬件描述語言更加簡捷,。
用設計約束起步
  為了在設計之初定義可實現(xiàn)的參數(shù),綜合與實現(xiàn)后端產(chǎn)生的分析報告顯得尤為重要,。下面的報告將幫助加速關鍵的后端約束定義,。
時序約束
  根據(jù)Synplify綜合報告,針對時鐘與I/O時序的約束取決于布線擁堵情況,。從綜合估計中可以發(fā)現(xiàn)變化的程度,,期望目標速度為綜合報告的±20%。
I/O Plan
  初始狀態(tài)下,,為I/O定義信號標準,,并盡可能對包作浮動指定??紤]信號標準支持,,根據(jù)器件組的變化,,采用自動布局法尋找合適的布局。引腳接口穩(wěn)定時,,反注指定LPF優(yōu)選文件,。
  圖5展示了在Design Planner Floorplan View中如何實現(xiàn)時序和I/O約束。

Floor Plan
  用基于初始,、low-effort的“flat”布局來指導floor plan,。突出層次分支以決定使用的分支?;跀?shù)據(jù)流確定PIO的位置和區(qū)域的相對位置,。圖6展示了Design Planner Floorplan View中突出層次分支的情況。

?


  FPGA設計約束表達了超越硬件描述語言的設計目的,,對優(yōu)化器件的性能發(fā)揮了主要作用,。約束規(guī)劃應覆蓋針對時鐘與I/O的關鍵時序目標,以及多周期關系與設計的時序期望,。約束可以以設計單元表示,,通過提取改變級數(shù),從RTL到post-synthesis塊以及網(wǎng)表,,使用混合的基于HDL與SDC,、或者LPF的約束是最有效的約束設計方法。

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉載的所有的文章,、圖片,、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權者,。如涉及作品內(nèi)容,、版權和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:aet@chinaaet.com,。