胡 凱,董志丹,惠 鋒,李 卿,董宜平
(1.中國電子科技集團公司第58研究所,江蘇無錫214072;
2.無錫中微億芯有限公司,江蘇無錫214072)
千萬門級FPGA裝箱實現(xiàn)及驗證
胡凱1,董志丹2,惠鋒2,李卿2,董宜平1
(1.中國電子科技集團公司第58研究所,江蘇無錫214072;
2.無錫中微億芯有限公司,江蘇無錫214072)
裝箱是FPGA工具設計流程中關(guān)鍵的一步,是綜合、工藝映射和布局的橋梁,在很大程度上影響了電路的速度和功耗。基于千萬門級FPGA xc5vlx20tff323-2器件,對XST綜合工具綜合后的網(wǎng)表進行裝箱,并把裝箱結(jié)果轉(zhuǎn)換為XDL格式文件,使用Xilinx工具驗證其正確性。
FPGA;裝箱;驗證
現(xiàn)場可編程邏輯門陣列(FPGA)作為一種可編程的芯片,由于其可重構(gòu)性及低成本的優(yōu)點,使其在市場上贏得了重要的商業(yè)地位。在學術(shù)文獻中,針對過去那種只包含基本邏輯單元LE的簡單FPGA模型的裝箱算法已經(jīng)有了深入的研究。但是現(xiàn)代商業(yè)FPGA包含可配置邏輯單元(CLB)、可配置的I/O塊(IOB)、特殊的硬核(IP)。其中商業(yè)FPGA每個CLB除了包含多個LE,還包含快速進位鏈(CarryChain)、Muxf7/Muxf8、雙輸出端口6輸入的查找表LUT;IP硬核包含RAM塊、數(shù)字信號處理(DSP)、數(shù)字時鐘管理器(DCM)、快速I/O以及其他一些微處理器。
目前,在學術(shù)界比較常用的裝箱算法相對而言比較少,較早的有Betz和Rose提出的基于面積優(yōu)化的裝箱算法[1],由于電路固有的局部性,裝箱后邏輯塊的輸入數(shù)目可能比固有邏輯塊整體的輸入數(shù)目多。Marquardt提出了基于延遲優(yōu)化的裝箱算法[2],在原有基礎上增加了對時延的考慮,減少了裝箱后關(guān)鍵路徑的延遲。Bozorgzadehy提出了基于布通率的裝箱算法[3],在LUTs裝箱時把布線的約束加入評價函數(shù),從而提高布線效率。不過上述算法研究對象均是針對簡單FPGA模型,本文則針對千萬門級的FPGA基于其硬件結(jié)構(gòu)展開裝箱研究。
本文針對Xilinx Virtex-5這種結(jié)構(gòu)復雜的商業(yè)FPGA,實現(xiàn)其裝箱并把裝箱結(jié)果轉(zhuǎn)換成XDL文件的格式,用Xilinx工具驗證其結(jié)果的正確性?;赩irtex-5硬件特征的復雜性,需要對特殊功能模塊進行裝箱預處理。
本文重點關(guān)注特殊的組合邏輯和IP硬核的裝箱。首先介紹Virtex-5架構(gòu)來展示商業(yè)FPGA結(jié)構(gòu)的復雜性,為下一節(jié)如何來實現(xiàn)基于復雜架構(gòu)的裝箱提供數(shù)據(jù)模型。一個Virtex-5邏輯塊CLB包含兩個SLICEs和一個開關(guān)矩陣,每個SLICE中包含4個六輸入雙輸出LUT,8個存儲元件,多功能多路復用器和進位邏輯鏈,可以實現(xiàn)邏輯、算術(shù)和ROM函數(shù)運算。其中SLICE有兩種類型,一類為SLICEL,為普通查找表邏輯發(fā)生器,另一類為SLICEM,SLICEM支持兩個附加功能:分布式RAM存儲數(shù)據(jù)和移位寄存器。然而,LUT的兩個輸出端口不是等價的,其中一個速度相對較慢,當有速度要求時這點必須要考慮。
裝箱既是工藝映射的后處理,也可認為是布局和布線模塊的預處理,在FPGA軟件開發(fā)設計流程中是相當重要的。通用的裝箱算法是先把LUTs和FFs一一配對裝箱到BLE中,然后再將多個BLE裝箱到一個SLICE邏輯塊里。就目前而言,由于商業(yè)FPGA具有更為復雜的硬件架構(gòu),通用的裝箱算法不能很好地解決其裝箱的需求,例如CLB中進位鏈的處理、IP硬核的裝箱等。
要實現(xiàn)層次化的FPGA裝箱首先需要把層次化的網(wǎng)表打平與優(yōu)化,然后再進行裝箱。裝箱要優(yōu)先處理進位鏈、分布式RAM、Muxf7/Muxf8等特殊單元。
(1)根據(jù)SLICE內(nèi)部資源,如圖2所示,一個SLICE內(nèi)部包括4個進位邏輯,而在SLICE外部進位邏輯的互連線只能是直線,考慮到其走線和在SLICE內(nèi)部各個進位邏輯連接的特殊性,在裝箱中優(yōu)先對其處理。對于一個SLICE的進位邏輯未滿4個時,其末端進位要從MUX或者LATCH的Q端輸出;其首個進位邏輯的輸入根據(jù)連接線網(wǎng)的屬性不同其連接會不同。
(2)根據(jù)SLICEM內(nèi)部資源,一個SLICEM內(nèi)部包括4個6位地址線的分布式RAM,其處理方式與LUT的不同,而元件描述中有 RAM16X1D、RAM32X1S、RAM32X1D、RAM32M、RAM64X1D、RAM64M、RAM128X1S不同的原語,它們分別有不同個數(shù)的地址端口,這就需要對上述原語做一次轉(zhuǎn)換,完成裝箱。
圖1 SLICEL
圖2 進位鏈
(3)對于雙輸出端口的LUT來說,LUT/FF也就有其特殊性。如圖4所示,O6直接驅(qū)動SLICE的輸出端口A,而O5必須通過一個額外的多路選擇器,然后驅(qū)動SLICE的輸出端口AMUX,這使得O5輸出比O6輸出要慢,因此,在要求高的情況下,O5不適于用在關(guān)鍵路徑上。
(4)根據(jù)SLICE內(nèi)部連接關(guān)系,Muxf7的驅(qū)動點是雙端口的LUT的O6端,Muxf8的負載點如果沒有寄存器要通過BMUX輸出,而LUT的另外端口O5端不能驅(qū)動寄存器,O5端輸出與Muxf8的輸出容易產(chǎn)生競爭。
圖3 分布式RAM
圖4 基本邏輯單元
在裝箱的第一個階段首先處理特殊單元進位邏輯,根據(jù)進位鏈的長度,按照4個邏輯一組,把進位邏輯裝箱到不同的BLE,根據(jù)SLICE內(nèi)部的連接關(guān)系,綜合每個BLE中進位邏輯的驅(qū)動關(guān)系對有連接關(guān)系的LUT進行裝箱,對于多負載(進位邏輯)的LUT,要滿足負載的裝箱需求,需在LUT與負載間通過插入一個BUF來完成裝箱;接下來依次對分布式RAM及RAM塊進行配對裝箱,并在裝箱后的BLE內(nèi)針對不同的RAM進行拆分;然后對FF進行處理,查找其數(shù)據(jù)輸入端口D的驅(qū)動是否是LUT,把配對的LUT和FF裝箱到一個BLE中;最后特殊處理Muxf7、Muxf8,其驅(qū)動是LUT的O6輸出,根據(jù)其連接關(guān)系查找驅(qū)動LUT并把其裝箱到一個BLE中,如果其驅(qū)動LUT不存在或者已被裝箱,需在MUX之前插入一個BUF。
裝箱第二階段是根據(jù)裝箱的運行規(guī)則檢查(DRC)進行裝箱,以BLE之間連接的線網(wǎng)為研究對象,根據(jù)線網(wǎng)的負載引腳數(shù)從小到大對線網(wǎng)進行排序;針對線網(wǎng)所連的BLEs,選擇其中以連接因子較小的BLE為種子,把線網(wǎng)上其他的BLE依次裝箱到種子所在的CLB中;最后把未被裝箱的不在BLE線網(wǎng)上的LUT、DFF及其他裝箱到CLB中。所謂的連接因子[4]不僅反映這個BLE和較多的線網(wǎng)相連,而且還反映出和該BLE相連線網(wǎng)所含有的引腳數(shù)較少,也即這些線網(wǎng)通過裝箱更容易被裝到CLB中。如圖5所示,a的分離度S=3.33,D=3,C=1.11;b的分離度S=2,D=3,C=0.67;b所示的單元B比a所示的單元A更適合做種子;因為選擇種子B可以將3條斷線完全吸收到CLB內(nèi)(如d),而A只能將一條線網(wǎng)完全吸收到CLB內(nèi)(如c)。
圖5 連接因子的選擇
裝箱的程序設計流程如圖6所示。
裝箱完成后,其結(jié)果保存為XDL格式文件,然后利用Xilinx的XDL工具來驗證其正確性。
以18位累加器ae18_core為測試用例,其測試范圍涵蓋雙輸出端口的LUT、Muxf7/Muxf8、進位鏈、RAM32M、RAM32X1D等分布式RAM,以及特殊的IP核DSP48。輸入為綜合后的網(wǎng)表文件(.edf,.vlg),通過本文提出的優(yōu)化裝箱布局布線后以XDL格式的文件輸出,即ae18_core_route.xdl文件,在Xilinx工具ISE Design Suite 64 Bit Command Prompt中輸入xdl-xdl2ncd ae18_core_route.xdl、drc-eae18_core_route. ncd、netgen-ecnformalityae18_core_route.ncdae18_ core_route.v-w命令,驗證裝箱結(jié)果和規(guī)則的正確性。如圖7所示,圖7(a)是Xilinx裝箱后的結(jié)果,圖7(b)是本文結(jié)合面向?qū)ο蟪绦蛟O計裝箱后的結(jié)果,圖7(c)通過Xilinx工具驗證了裝箱結(jié)果的正確性。
圖7 裝箱結(jié)果的驗證
針對Xilinx Virtex-5架構(gòu)的商業(yè)FPGA,分析其硬件架構(gòu),建立數(shù)據(jù)模型和裝箱DRC;并對其特殊單元優(yōu)先處理,結(jié)合已有的裝箱算法通過面向?qū)ο蟮脑O計方法來實現(xiàn),并通過Xilinx的XDL工具對裝箱結(jié)果進行驗證。
[1]V Betz,J Rose.Cluster-based logic blocks for FPGAs:Area-efficiency vs.input sharing and size[C].IEEE Custom Integrated Circuits Conference,Santa Clara,CA,1997:551-554.
[2]A Marquardt,V Betz,J Rose.Usingclusterbased logic blocks andtiming-drivenpackingtoimproveFPGAspeedanddensity[C].International Symposium on Field-Programmable Gate Arrays,Monterey,CA,1999:37-46.
[3]E Bozorgzadehy,S Ogrenci Memiky,X Yang z,M Sarrafzadehy.Routability-drivenPacking:Metricsand Algorithms for Cluster based FPGAs[M].
[4]胡云,王伶俐,唐璞山,童家榕.基于布通率的FPGA裝箱算法[J].計算機輔助設計與圖形學報,2007.
Packing Implementation and Verification for 10M-gate FPGA
HU Kai1,DONG Zhidan2,HUI Feng2,LI Qing2,DONG Yiping1
(1.China Electronics Technology Group Corporation No.58 Research Institute,Wuxi 214072,China;
2.East Technologies,Inc,Wuxi 214072,China)
Packing is a key step in the FPGA tool flow that straddles the boundaries between synthesis,technology mapping and placement,and that greatly influences circuit speed,density,and power consumption. In the paper,xc5vlx20tff323-2 device,a 10M-gate FPGA,is described in detail covering the packing of the net list synthesized by XST tool,conversion to XDL file and verification by Xilinx tools.
FPGA;packing;verification
TN402
A
1681-1070(2016)10-0032-04
2016-6-3
胡凱(1984—),男,江蘇常州人,東南大學電子科學與技術(shù)專業(yè)本科畢業(yè),工程師,從事集成電路設計工作,在FPGA(可編程邏輯門陣列)技術(shù)領域有豐富經(jīng)驗。