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

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

2009-06-17
作者:Troy Scott

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

?

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

?


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


  時(shí)序約束應(yīng)該覆蓋設(shè)計(jì)的基本特性,例如clock、I/O延時(shí)和異步路徑的點(diǎn)對(duì)點(diǎn)延時(shí)。如果一個(gè)時(shí)鐘域傳遞數(shù)據(jù)到另外一個(gè)域,則應(yīng)該用多周期類型優(yōu)先選擇定義所需要的周期數(shù)。下面以Synplify SCOPE建立的SDC文檔為例說明這一點(diǎn)。
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提供了豐富的詞表來定義并編譯邏輯相關(guān)的設(shè)計(jì)單元,包括I/O端口、時(shí)鐘網(wǎng)絡(luò)以及同步RTL結(jié)構(gòu)推出的寄存器單元。在編譯期間,Synplify進(jìn)行靜態(tài)時(shí)序分析,包括針對(duì)所有時(shí)鐘、時(shí)鐘關(guān)系以及接口時(shí)序的性能報(bào)告。雖然結(jié)果沒有后布局布線結(jié)果那么精確,但是作為性能的重要指示,它提供了針對(duì)時(shí)序逼近的重要檢測(cè)點(diǎn),是滿足最終速度目標(biāo)的一個(gè)好的指示器。Synplify報(bào)告文件如圖3所示。


  對(duì)于Synplify,可通過數(shù)個(gè)編譯器進(jìn)行優(yōu)化約束。流行的控制類型有狀態(tài)機(jī)編碼、分層保持以及存儲(chǔ)器工藝目標(biāo)。這里以狀態(tài)機(jī)編碼為例說明編譯器約束。Synplify FSM編譯器特性根據(jù)狀態(tài)機(jī)的數(shù)目設(shè)定編碼類型:如果狀態(tài)機(jī)狀態(tài)多達(dá)4個(gè),針對(duì)非常緊湊的實(shí)現(xiàn),可采用時(shí)序編碼;如果狀態(tài)機(jī)狀態(tài)多達(dá)5~40個(gè),將產(chǎn)生高性能的獨(dú)熱編碼(OHE);超過40個(gè)狀態(tài)將產(chǎn)生格雷碼。如果有特殊的設(shè)計(jì)要求,則根據(jù)不同的情況來控制有限狀態(tài)機(jī)編碼,以狀態(tài)寄存器聲明中的syn_encoding為指示。
VHDL實(shí)例:
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類型的信號(hào),syn_encoding屬性設(shè)置促成狀態(tài)寄存器的格雷碼。
  在輸出的log文件中,Synplify給出了每個(gè)編碼狀態(tài)機(jī)FSM的報(bào)告:
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
  輸出報(bào)告證實(shí),基于SDC與HDL的約束改進(jìn)了綜合的結(jié)果。

FPGA布局布線后端約束
  ispLEVER實(shí)現(xiàn)工具的約束覆蓋了時(shí)序性能與設(shè)計(jì)實(shí)現(xiàn)的許多方面。首先約束寫到寄存器傳輸級(jí),或者門、端口以及從RTL推出的網(wǎng)表;然后約束寫到FPGA的物理單元,例如可編程功能單元、針對(duì)存儲(chǔ)器的嵌入式ASIC塊,或者DSP與可編程I/O單元。后端約束通常用來定義I/O編程、I/O布局與時(shí)序目標(biāo)。它們可以定義可編程塊的參數(shù),如存儲(chǔ)器或PLL/DLL電路。約束可以指導(dǎo)邏輯布局、器件布局,以及針對(duì)模塊設(shè)計(jì)流進(jìn)行設(shè)計(jì)分割。與綜合約束相同,后端約束基于硬件描述語言或者ASCII文本文件。
  ispLEVER的Design Planner提供圖形接口以瀏覽post-synthesis網(wǎng)表的內(nèi)容,寫約束根據(jù)端口、網(wǎng)表、寄存器和ASIC塊設(shè)定。
  時(shí)序約束應(yīng)該覆蓋基本的約束特性,包括時(shí)鐘、I/O延時(shí)以及點(diǎn)對(duì)點(diǎn)延時(shí)。約束時(shí)序目標(biāo)通常作為一種手段來提高綜合與布局布線的等級(jí)。實(shí)際上可以保留約束文件的多個(gè)版本,在約束文件中應(yīng)該針對(duì)邏輯優(yōu)化,其余的完全用于靜態(tài)時(shí)序分析,使用“real”結(jié)束時(shí)序。下面以Design Planner建立的LPF文檔為例說明普通的時(shí)序情況。ispLEVER報(bào)告文件如圖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”;
  硬件描述語言中的一些屬性可用于指導(dǎo)FPGA實(shí)現(xiàn)。常用的控制類型有I/O位置、邏輯“don′t touch”類型指示與邏輯組合。為了說明基于硬件描述語言的后端約束,考慮邏輯組合屬性-分層組合(HGROUP)指導(dǎo)布局算法,將組的成員在器件中接近放置,這種類型的屬性有助于改進(jìn)時(shí)序,使得并行運(yùn)行的結(jié)果更加一致。
VHDL實(shí)例:
attribute HGROUP:? string;
attribute BBOX:??? string;
attribute HGROUP of struct: architecture
is ″pgroup1″;
attribute BBOX?? of struct: architecture
is ″5,15″;
  這個(gè)屬性定義了一個(gè)與結(jié)構(gòu)相關(guān)的標(biāo)志“pgroup1”。結(jié)構(gòu)體的所有邏輯約束行高為5,列寬為15的邊界框,此區(qū)域用目標(biāo)器件的行和列單元表示。
  進(jìn)一步考慮LPF中的布局。例如:
  # Anchor pgroup1
  LOCATE HGROUP″pgroup1″
  SITE R11C2D;
  這個(gè)優(yōu)選指示放置器錨定以5×15邊界的NW角,位于目標(biāo)器件的第11行、第2列。如何組合硬件描述語言與基于LPF的后端約束是指導(dǎo)布局的非常有效的辦法。確保組的內(nèi)容,根據(jù)源代碼的內(nèi)容自動(dòng)地更新,使硬件描述語言更加簡捷。
用設(shè)計(jì)約束起步
  為了在設(shè)計(jì)之初定義可實(shí)現(xiàn)的參數(shù),綜合與實(shí)現(xiàn)后端產(chǎn)生的分析報(bào)告顯得尤為重要。下面的報(bào)告將幫助加速關(guān)鍵的后端約束定義。
時(shí)序約束
  根據(jù)Synplify綜合報(bào)告,針對(duì)時(shí)鐘與I/O時(shí)序的約束取決于布線擁堵情況。從綜合估計(jì)中可以發(fā)現(xiàn)變化的程度,期望目標(biāo)速度為綜合報(bào)告的±20%。
I/O Plan
  初始狀態(tài)下,為I/O定義信號(hào)標(biāo)準(zhǔn),并盡可能對(duì)包作浮動(dòng)指定??紤]信號(hào)標(biāo)準(zhǔn)支持,根據(jù)器件組的變化,采用自動(dòng)布局法尋找合適的布局。引腳接口穩(wěn)定時(shí),反注指定LPF優(yōu)選文件。
  圖5展示了在Design Planner Floorplan View中如何實(shí)現(xiàn)時(shí)序和I/O約束。

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

?


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

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