胡文彬, 吳劍旗,2, 洪 一,2
(1.合肥工業(yè)大學(xué) 計(jì)算機(jī)與信息學(xué)院,安徽 合肥 230009;2.中國(guó)電子科技集團(tuán) 第38研究所,安徽 合肥 230031)
FPGA驗(yàn)證是IC設(shè)計(jì)者普遍采用的一種驗(yàn)證手段。FPGA的容量雖然不斷增大,但是許多超大規(guī)模ASIC不能在一片F(xiàn)PGA上實(shí)現(xiàn),所以面臨著將一個(gè)IC設(shè)計(jì)劃分到幾個(gè)FPGA內(nèi)的情況,劃分軟件將不同的模塊劃分到不同的FPGA內(nèi),將互連信號(hào)指定到驗(yàn)證板的互連路徑上。把ASIC分割到不同F(xiàn)PGA內(nèi)時(shí),模塊間的信號(hào)線可能達(dá)到上萬根,而FPGA的可用IO是有限的,這樣造成邏輯線數(shù)量遠(yuǎn)大于物理連線數(shù)量。
針對(duì)FPGA可用IO數(shù)量有限這一情況,IC驗(yàn)證者通常采用以下方式來實(shí)現(xiàn)驗(yàn)證:①采用非對(duì)稱的FPGA拓?fù)浣Y(jié)構(gòu)或構(gòu)建可編程的互連芯片F(xiàn)PIC[1];②應(yīng)用設(shè)計(jì)分割軟件對(duì)設(shè)計(jì)進(jìn)行合理劃分,在對(duì)設(shè)計(jì)進(jìn)行劃分時(shí)使用更為先進(jìn)的劃分算法,盡量避免產(chǎn)生寬總線;③利用FPGA內(nèi)的資源對(duì)IO進(jìn)行復(fù)用,通過LE資源實(shí)現(xiàn)虛擬線路[2]。大多數(shù)FPGA原型版供應(yīng)商采用在模塊與IO端口間插入一個(gè)高速串行收發(fā)器(SERDES)的方法,由于使用了LVDS技術(shù),提高了系統(tǒng)的工作頻率,發(fā)揮了FPGA平臺(tái)的高效性能。
IO復(fù)用成為通用多FPGA開發(fā)平臺(tái)引腳限制問題的有效解決方案。設(shè)計(jì)劃分到不同F(xiàn)PGA內(nèi),分區(qū)間的信號(hào)將流經(jīng)FPGA內(nèi)部邏輯資源內(nèi)構(gòu)建的IO復(fù)用模塊。本文通過分析傳統(tǒng)FPGA驗(yàn)證的設(shè)計(jì)流程,提出了一種新型的多FPGA的驗(yàn)證流程,得出系統(tǒng)工作頻率與IO復(fù)用模塊的信號(hào)發(fā)收頻率的關(guān)系。通過整個(gè)體系的構(gòu)建,實(shí)現(xiàn)了2片F(xiàn)PGA內(nèi)信號(hào)的無延時(shí)傳輸,對(duì)FPGA劃分時(shí)出現(xiàn)IO瓶頸問題的研究有很好的借鑒作用。
傳統(tǒng)的FPGA驗(yàn)證流程如圖1a所示[3]。
設(shè)計(jì)輸入硬件描述語言或原理圖通過編譯,利用仿真工具進(jìn)行功能驗(yàn)證[4]。功能驗(yàn)證后,綜合工具對(duì)RTL進(jìn)行綜合,將 RT L翻譯成由與、或、非門,RAM及觸發(fā)器等基本邏輯單元組成的邏輯連接,輸出網(wǎng)表文件。綜合后網(wǎng)表一般要進(jìn)行仿真以檢查綜合器的綜合結(jié)果是否與設(shè)計(jì)輸入一致。
隨著設(shè)計(jì)規(guī)模的擴(kuò)大,一片F(xiàn)PGA的驗(yàn)證系統(tǒng)難以完成超大規(guī)模IC設(shè)計(jì)的驗(yàn)證,多FPGA驗(yàn)證平臺(tái)的出現(xiàn)保障了超大規(guī)模IC設(shè)計(jì)驗(yàn)證的順利進(jìn)行。多FPGA驗(yàn)證引入了2個(gè)難點(diǎn),即設(shè)計(jì)的劃分和IO瓶頸。傳統(tǒng)的多FPGA驗(yàn)證時(shí)需要通過復(fù)雜的劃分算法對(duì)設(shè)計(jì)進(jìn)行劃分,使得分區(qū)的邏輯規(guī)模小于單個(gè)FPGA的容量上限,同時(shí)也必須保證分區(qū)間信號(hào)線數(shù)量小于FPGA間的物理連線數(shù)量。這一過程建立在驗(yàn)證者豐富的經(jīng)驗(yàn)之上,而且也耗費(fèi)大量的時(shí)間。本文在傳統(tǒng)驗(yàn)證流程的基礎(chǔ)上加入了嵌入自行設(shè)計(jì)的IO復(fù)用模塊這一步驟,形成了新的多FPGA系統(tǒng)驗(yàn)證流程,如圖1b所示。
圖1 驗(yàn)證流程
復(fù)雜芯片設(shè)計(jì)由多個(gè)設(shè)計(jì)模塊構(gòu)成,硬件描述語言編寫的代碼是基于模塊的設(shè)計(jì),基于模塊的自然邊界對(duì)設(shè)計(jì)進(jìn)行劃分是一種簡(jiǎn)單直觀的劃分方法,也便于后期的測(cè)試工作。在模塊框圖中,寄存器組、宏功能模塊、存儲(chǔ)器單元、控制模塊及一些重復(fù)使用的模塊都具有其本身的自然邊界,各模塊又可由多個(gè)子模塊組成。依據(jù)設(shè)計(jì)的功能模塊與層次的設(shè)計(jì)可以方便地找到自然邊界。以下介紹劃分的各項(xiàng)工作。
(1)設(shè)計(jì)劃分前的準(zhǔn)備。將設(shè)計(jì)劃分到多個(gè)FPGA內(nèi)需要同時(shí)考慮模塊的面積大小和FPGA間互連線的影響[5]。在對(duì)設(shè)計(jì)進(jìn)行劃分前,要對(duì)設(shè)計(jì)進(jìn)行預(yù)先的估計(jì),得到模塊的一些參數(shù),包括模塊資源占用情況、模塊的輸入輸出以及各模塊間的互連信號(hào)數(shù)量的大致情況,這些信息可以指導(dǎo)設(shè)計(jì)的劃分。如果某個(gè)模塊規(guī)模過大,則需要追溯到該模塊的下一層,將該模塊拆分成更小的模塊。邏輯劃分后的結(jié)構(gòu)示意圖如圖2所示,圖2中數(shù)字大小代表模塊的規(guī)模大小順序。
圖2 邏輯劃分后的結(jié)構(gòu)示意圖
(2)設(shè)計(jì)劃分的方法。在FPGA規(guī)模日益擴(kuò)大的基礎(chǔ)上,盡量節(jié)約芯片的引腳是邏輯劃分算法的主要考慮因素。依據(jù)模塊的邊界,將圖2中1、3、5、7模塊劃分在一起,另外 3個(gè)模塊劃分到另一個(gè)FPGA內(nèi),使得2個(gè)大模塊間互連線最少,且2個(gè)分區(qū)的規(guī)模滿足FPGA的要求。圖2中虛線圈內(nèi)模塊劃分到一個(gè)FPGA內(nèi),并設(shè)虛線框內(nèi)的模塊分別為RT L-1和RTL-2。
(3)對(duì)原代碼進(jìn)行拆分。在圖2中,3和7的輸出端信號(hào)連接到2和6的輸入端。首先要找到這些信號(hào),將3和7的輸出信號(hào)定義為RTL-1的輸出,將2和6的輸入信號(hào)定義為 RT L-2的輸入信號(hào)。這樣,RT L-1和RTL-2都是帶有輸入輸出的模塊,它們間的互連情況也由各自的端口信號(hào)唯一確定。
RTL-1和 RT L-2分別劃分到2片F(xiàn)PGA內(nèi)后,以下過程轉(zhuǎn)化為2個(gè)并行的子過程。由于要考慮對(duì)IO進(jìn)行復(fù)用,所以應(yīng)該在RT L-1端對(duì)輸出引腳進(jìn)行復(fù)用,加入IO復(fù)用模塊,將RTL-1的輸出信號(hào)復(fù)用在可用IO上。這樣,RT L-1和復(fù)用模塊構(gòu)成一個(gè)整體設(shè)計(jì),并對(duì)該設(shè)計(jì)綜合、布局布線,并生成編程比特流。同理,在另一塊FPGA上,要在對(duì)應(yīng)的引腳上對(duì)IO解復(fù)用,加入設(shè)計(jì)好的解復(fù)用模塊,它與RTL-2一起進(jìn)行綜合及布局布線,并生成編程比特流。最后,將編程比特流分別下載到2塊FPGA內(nèi)。這樣就完成了具有引腳限制的多片F(xiàn)PGA驗(yàn)證。
在劃分到不同F(xiàn)PGA內(nèi)的分區(qū)間加入本文設(shè)計(jì)的IO復(fù)用模塊,利用IO口的高速度,使一端的多路并行數(shù)據(jù)可以在一根互連線上無延時(shí)地傳輸?shù)搅硪欢?節(jié)約了IO,有效地解決IO瓶頸問題。
分區(qū)進(jìn)行布線時(shí),當(dāng)有充足的可用IO時(shí),一條邏輯線在一根物理連線上實(shí)現(xiàn)[6]。當(dāng)分區(qū)間互連信號(hào)數(shù)量超過片間物理互連線數(shù)量時(shí),對(duì)IO進(jìn)行復(fù)用是唯一的解決辦法。按照?qǐng)D2所示的驗(yàn)證步驟,在2個(gè)分區(qū)間分別加入發(fā)送模塊與接收模塊,實(shí)現(xiàn)信號(hào)的多路復(fù)用。對(duì)IO進(jìn)行復(fù)用的系統(tǒng)結(jié)構(gòu)如圖3所示。
圖3 IO復(fù)用互連結(jié)構(gòu)
ASIC設(shè)計(jì)工作時(shí)鐘為clk,對(duì)應(yīng)頻率為F。設(shè)計(jì)被劃分到不同F(xiàn)PGA內(nèi)后,系統(tǒng)在進(jìn)行仿真時(shí)信號(hào)從一個(gè)分區(qū)流向另一個(gè)分區(qū)。信號(hào)流經(jīng)IO復(fù)用模塊,復(fù)用模塊對(duì)發(fā)送端的并行信號(hào)并串轉(zhuǎn)換,以較高的發(fā)送頻率發(fā)送到另一塊FPGA內(nèi)的接收端,接收端對(duì)高速的串行信號(hào)串并轉(zhuǎn)換。在系統(tǒng)時(shí)鐘的某有效沿時(shí)刻產(chǎn)生了工作時(shí)鐘為clk、頻率為F的一組并行信號(hào),該組信號(hào)經(jīng)過IO復(fù)用模塊后,在下一個(gè)時(shí)鐘有效時(shí)下一個(gè)分區(qū)要能準(zhǔn)確采樣到該組并行數(shù)據(jù)。對(duì)驗(yàn)證者來說,IO復(fù)用模塊加入后對(duì)系統(tǒng)仿真才沒有產(chǎn)生延遲。這一過程主要考慮復(fù)用模塊的高速串行發(fā)送時(shí)鐘頻率f與邏輯設(shè)計(jì)的工作時(shí)鐘頻率F之間的關(guān)系。
發(fā)送端n位的并行數(shù)據(jù)data-n的發(fā)送時(shí)鐘為sys-clk,頻率為F,并行數(shù)據(jù)經(jīng)過移位寄存器串化,設(shè)串化后的數(shù)據(jù)發(fā)送時(shí)鐘為trans-clk。接收端向內(nèi)部邏輯發(fā)送的并行數(shù)據(jù)為data-out。接收端同時(shí)對(duì)高速的串行數(shù)據(jù)進(jìn)行接收,當(dāng)?shù)趎個(gè)串行數(shù)據(jù)接收到后,接收端將data-out發(fā)送給內(nèi)部的邏輯,此時(shí),sys-clk為有效沿,將對(duì)并行信號(hào)進(jìn)行處理。并行數(shù)據(jù)的發(fā)送與接收要小于一個(gè)sys-clk時(shí)鐘周期,從而保障了功能仿真的無延時(shí)。對(duì)n位的并行數(shù)據(jù)進(jìn)行串化需要n個(gè)串行時(shí)鐘,接收端同步對(duì)串行數(shù)據(jù)進(jìn)行接收,并在第n+1個(gè)時(shí)鐘時(shí)對(duì)所接收到的數(shù)據(jù)并行發(fā)送給后面邏輯。
從整個(gè)過程來看,n位并行數(shù)據(jù)的發(fā)收經(jīng)歷了n+1個(gè)發(fā)送時(shí)鐘,因此,系統(tǒng)工作頻率F與n位并行數(shù)據(jù)的發(fā)送頻率 f滿足關(guān)系式:F=(n+1)f。對(duì)IO進(jìn)行復(fù)用時(shí),該頻率關(guān)系是時(shí)鐘倍頻時(shí)發(fā)送時(shí)鐘頻率選擇的參考。按照這個(gè)關(guān)系選擇的倍頻時(shí)鐘使得片間的數(shù)據(jù)傳輸無延時(shí)。系統(tǒng)的時(shí)序示意圖如圖4所示。
圖4 IO復(fù)用時(shí)序示意圖
設(shè)計(jì)的實(shí)現(xiàn)方式是多種多樣的,LVDS收發(fā)器或SERDES是比較常用的方法[7],也可以用內(nèi)部邏輯實(shí)現(xiàn)發(fā)送與接收[8],本文利用內(nèi)部的邏輯資源,編寫Verilog代碼設(shè)計(jì)的電路結(jié)構(gòu)如圖5所示。
圖5 復(fù)用模塊的體系結(jié)構(gòu)
在發(fā)送端,data-n經(jīng)FIFO寄存,PLL鎖相環(huán)倍頻產(chǎn)生發(fā)送時(shí)鐘 trans-clk,在高速時(shí)鐘trans_clk的時(shí)鐘沿對(duì)并行數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換,生成高速串行的數(shù)據(jù)流,數(shù)據(jù)流經(jīng)過LVDS端口發(fā)送至接收端。在接收端,clk在標(biāo)志信號(hào)flag有效時(shí)開始對(duì)串行數(shù)據(jù)進(jìn)行采集。該協(xié)議沒有把數(shù)據(jù)封裝成幀,而是采用與數(shù)據(jù)同步傳輸?shù)碾S路同步時(shí)鐘以及用來控制接收端啟動(dòng)接收的幀同步標(biāo)志信號(hào)flag,使得數(shù)據(jù)在接收端可以同步地采樣。這種協(xié)議方式為一種改進(jìn)的外同步高速串行傳輸形式,在片間數(shù)據(jù)傳輸線上傳輸?shù)臄?shù)據(jù)都是實(shí)時(shí)的信號(hào)數(shù)據(jù),使得片間的數(shù)據(jù)傳輸無延時(shí),而且協(xié)議簡(jiǎn)單,開銷小。通過仿真得到設(shè)計(jì)的波形,如圖6所示。
圖6 并行數(shù)據(jù)發(fā)送與接收波形圖
由圖6波形可知,并行8位的數(shù)據(jù)01111011經(jīng)過復(fù)用模塊的并串及串并轉(zhuǎn)換,在經(jīng)過9個(gè)發(fā)送時(shí)鐘后被接收端準(zhǔn)確接收。
驗(yàn)證平臺(tái)的IO限制使得設(shè)計(jì)加載困難,通過本文設(shè)計(jì)可以了解如何對(duì)固定物理連線進(jìn)行時(shí)分復(fù)用,按照文中的多片F(xiàn)PGA驗(yàn)證的驗(yàn)證流程進(jìn)行驗(yàn)證,使得具有IO限制的多FPGA驗(yàn)證順利進(jìn)行。文中提到的基于模塊的邊界進(jìn)行劃分的方法對(duì)設(shè)計(jì)劃分有指導(dǎo)作用,基于該方法構(gòu)建劃分算法也是設(shè)計(jì)自動(dòng)劃分軟件的一個(gè)研究方向。最后得出系統(tǒng)工作頻率與串行發(fā)送頻率的關(guān)系,這一關(guān)系可作為IO復(fù)用模塊構(gòu)建時(shí)的參考。該方案同樣適用于所有具有多FPGA結(jié)構(gòu)的系統(tǒng)。
[1]夏 飛.基于FPGA組的 ASIC驗(yàn)證原型和邏輯分割算法的研究與實(shí)現(xiàn)[D].長(zhǎng)沙:國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院,2005.
[2]吳繼華,王 誠(chéng).AlteraFPGA/CPLD設(shè)計(jì):高級(jí)篇[M].北京:人民郵電出版社,2005:102-109.
[3]楊 焱,侯朝煥.一種面向系統(tǒng)芯片的FPGA協(xié)同驗(yàn)證方法[J].微電子學(xué),2004,34(4):469-472.
[4]Walters S.Computer-aided prototyping for ASIC-based systems[J].IEEE Design and Test 1991,8(2):4-10.
[5]李小波,張 珩,張復(fù)新,等.一類復(fù)雜芯片的FPGA驗(yàn)證[J].計(jì)算機(jī)工程,2006,32(14),243-245.
[6]Babb J W.Virtual wires:overcoming pin limitations in FPGA-based logic emulation[D].Masschusetts:Laboratory for Computer Science,MIT,1994.
[7]陳 維.基于VHDL的串行同步通信電路設(shè)計(jì)[J].網(wǎng)絡(luò)信息技術(shù),2006,25(2):46-49.
[8]李云志,李立萍,楊 恒.基于FPGA的 LVDS高速差分板間接口應(yīng)用[J].集成電路設(shè)計(jì)與開發(fā),2008,33(12):1138-1141.