動態(tài)重構(gòu)兩種模式的分析與對比
1、引言
隨著數(shù)字邏輯系統(tǒng)功能的復(fù)雜化,單片系統(tǒng)的芯片正朝著超大規(guī)模、高密度的方向發(fā)展。然而,隨著數(shù)字邏輯系統(tǒng)規(guī)模的擴(kuò)大,在相同速度的條件下,在一定的時間區(qū)間,由于從時間軸上來看,系統(tǒng)中的各個功能模塊并不是任何時刻都在激活或工作,所以其功能模塊的平均使用率將下降。也就是說,隨著系統(tǒng)規(guī)模的擴(kuò)大,單片電路的資源利用率反而下降。因此,系統(tǒng)設(shè)計(jì)能不能從傳統(tǒng)的追求大規(guī)模、高密度的方向,轉(zhuǎn)向如何提高資源利用率上來呢?
FPGA動態(tài)重構(gòu)技術(shù)正適應(yīng)了這種要求,用有限的資源去實(shí)現(xiàn)更大規(guī)模的邏輯設(shè)計(jì),大大提高了資源利用率。但它決不僅僅是一種新型功能電路的應(yīng)用,其涉及數(shù)字系統(tǒng)設(shè)計(jì)方法、設(shè)計(jì)思想的變革,可以使數(shù)字系統(tǒng)單片化的設(shè)計(jì)從追求邏輯規(guī)模轉(zhuǎn)向追求邏輯的分時復(fù)用;從專用的固定功能邏輯系統(tǒng)轉(zhuǎn)向功能可自適應(yīng)進(jìn)化的邏輯系統(tǒng)。動態(tài)重構(gòu)技術(shù)是未來FPGA研究和使用方向。
2、基本理論
嚴(yán)格來講,系統(tǒng)重構(gòu)的概念可分為靜態(tài)系統(tǒng)重構(gòu)和動態(tài)系統(tǒng)重構(gòu)。靜態(tài)系統(tǒng)重構(gòu)是指目標(biāo)系統(tǒng)的邏輯功能靜態(tài)重載,即在系統(tǒng)空閑期間通過各種方式進(jìn)行在線編程,而不是在其他部分動態(tài)運(yùn)行時重載。
動態(tài)系統(tǒng)重構(gòu)是指在系統(tǒng)實(shí)時運(yùn)行當(dāng)中對FPGA的邏輯功能實(shí)時地進(jìn)行動態(tài)配置,能夠只對其內(nèi)部需要修改的邏輯單元進(jìn)行重新配置,而不影響沒有被修改的邏輯單元的正常工作。動態(tài)重構(gòu)特征引出了一種新的設(shè)計(jì)思想[3]:即用有限的硬件邏輯資源來實(shí)現(xiàn)大規(guī)模系統(tǒng)時序功能;將傳統(tǒng)的空間分布的硬件邏輯,分為器件外部特征不變,而內(nèi)部邏輯在時間上交替變換的硬件邏輯,并共同在時間空間上構(gòu)成系統(tǒng)整體邏輯功能。
當(dāng)器件的同一個區(qū)域需要載入不同的設(shè)計(jì)功能并且又不需要重新配置整個電路也不影響其他電路的運(yùn)行時就需要部分動態(tài)重構(gòu)。這樣既可以降低電路能量消耗又可以提高板子利用率、加快下載速度。
可重構(gòu)系統(tǒng)的歷史很短,目前還處于研究、驗(yàn)證階段,但已經(jīng)被應(yīng)用到了很多方面,如軍事目標(biāo)匹配[4,5] 、集成電路計(jì)算機(jī)輔助設(shè)計(jì)[6]等??芍貥?gòu)系統(tǒng)研究的關(guān)鍵之處在于硬件方面即FPGA,有代表性的主要有MI芯片[7]、SIDSA FIPSOC結(jié)構(gòu)[8]、MIT的DPGA[9]和Virtex系列,目前使用較多的是Xilinx 公司推出的Virtex系列。
Virtex器件的有效部分重構(gòu)可以使用Select映射模式或者Boundary Scan(JTAG)模式下載。不需要重新配置器件也不需要下載完整的配置,新的數(shù)據(jù)只需下載到器件的可重構(gòu)部分。對于目前的FPGA器件來說,數(shù)據(jù)是以column為基礎(chǔ)下載,最小的可下載單元是一幀(frame)的配置比特流,它根據(jù)目標(biāo)器件的不同而有不同的大小。
FPGA的動態(tài)可重構(gòu)有兩種不同的方式:基于模塊(Module-based)的部分動態(tài)可重構(gòu)和基于差異(Difference-based)的部分動態(tài)可重構(gòu)?;谀K的部分動態(tài)可重構(gòu)將設(shè)計(jì)分解成模塊,對一個設(shè)計(jì)來說,每個模塊都是完全獨(dú)立的。如果模塊之間需要交流通信,就需要一種特殊的總線宏,它允許信號穿過部分可重構(gòu)的邊界。總線宏為設(shè)計(jì)的內(nèi)部通信提供了一個固定的總線。每次實(shí)現(xiàn)部分可重構(gòu)時,總線宏就用來確保模塊間布線通道沒有改變,保證正確的連接。而基于差異的部分可重構(gòu)只是比較部分重構(gòu)前后的電路差別,產(chǎn)生一個只包含重構(gòu)前后設(shè)計(jì)差別的比特流。
3、基于模塊的部分可重構(gòu)
部分可重構(gòu)定義了一些特殊的區(qū)域,這些區(qū)域可以在器件的其他部分還在運(yùn)行的情況下進(jìn)行重構(gòu),這些特殊區(qū)域稱作可重構(gòu)區(qū)域?;谀K的部分可重構(gòu)就是將電路功能劃分成一個個的模塊,這些模塊包括可重構(gòu)模塊(可以實(shí)現(xiàn)重構(gòu)的特殊區(qū)域)和固定模塊(功能不變不能實(shí)現(xiàn)重構(gòu)的區(qū)域)。其中可重構(gòu)模塊是重構(gòu)技術(shù)的關(guān)鍵,具有以下特性:
重構(gòu)模塊的高度是整個器件的高度。
重構(gòu)模塊的寬度最小可以是四個slice最大可以到整個器件的寬度,但必須以四的整數(shù)倍個slice增加。
重構(gòu)模塊放置的水平坐標(biāo)必須是四的整數(shù)倍個slice的邊界,例如:左邊邊界可以放置在x=0,4,8,……
可重構(gòu)模塊和其他模塊之間的通信(包括可重構(gòu)模塊和普通固定模塊之間、可重構(gòu)模塊和 可重構(gòu)模塊之間)都是通過使用特殊的總線宏,如圖1。
圖1 總線宏用作模塊內(nèi)部通信
重構(gòu)模塊寬度范圍內(nèi)包括的所有邏輯資源都被看作是可重構(gòu)模塊的一部分,包括slice、TBUF、RAM塊、乘法器、IOB和布線資源。
時鐘邏輯和可重構(gòu)模塊是相互分離的,時鐘和比特流是相互獨(dú)立的。
可重構(gòu)模塊上部和下部的IOB是可重構(gòu)模塊資源的一部分。
如果一個可重構(gòu)模塊貫穿了整個板子的左部和右部,那么每一邊的IOB都是可重構(gòu)模塊資源的一部分。
為了降低設(shè)計(jì)難度,要盡量減少可重構(gòu)模塊的個數(shù)(理想狀況下,如果可能的話,最好只有一個可重構(gòu)模塊)。
可重構(gòu)模塊的邊界不能改變。任何一個可重構(gòu)模塊的位置、所占據(jù)的區(qū)域都是固定的。
為了保證重構(gòu)的時候?qū)崿F(xiàn)合適的操作,需要外在的握手邏輯。
在可重構(gòu)過程之前和之后,要保存可重構(gòu)模塊內(nèi)的存儲元素的狀態(tài)。
如圖2所示,是一個具有兩個部分可重構(gòu)模塊的設(shè)計(jì),各模塊間都是通過總線宏來通信。通過合理的時序控制,實(shí)現(xiàn)在其他電路還在運(yùn)行時的動態(tài)配置重構(gòu)模塊,實(shí)現(xiàn)硬件復(fù)用。從而用更少的硬件資源去實(shí)現(xiàn)更大的系統(tǒng)功能,提高資源利用率。同時,可重構(gòu)模塊比整個系統(tǒng)小很多,下載速度也得到大大提高。
圖2 具有兩個可重構(gòu)模塊的設(shè)計(jì)布局圖
4、總線宏的通訊
為了促進(jìn)可重構(gòu)模塊之間的通信,需要保證穿過可重構(gòu)模塊邊界的布線資源是完全固定而且必須是靜態(tài)的,這就需要一種特殊的總線宏。如圖3就是所需的這種總線宏。
其中,左邊的A是一個模塊,右邊的B是另一個模塊,A或者B是可重構(gòu)模塊,或者AB全是可重構(gòu)模塊。A和B中間的總線宏,就是支持AB之間通信的特殊總線宏。它保證AB間布線資源的不變性。也就是說當(dāng)一個模塊進(jìn)行重構(gòu)時模塊內(nèi)部信號用到的布線資源不能改變。如圖3,總線宏是兩個模塊間的一個固定的布線橋。它是一個事先已經(jīng)布線好的用來確定精確布線軌道的宏,并且在編輯改變的時候保持不變。對于每個不同的設(shè)計(jì)應(yīng)用來說,它是一個絕對固定不變的總線宏。
圖3 總線宏
目前使用的總線宏由八個三態(tài)緩沖器組成如圖4??偩€宏允許信息雙向傳遞,一個比特的信息使用一個三態(tài)緩沖器的長線。Virtex器件的每一行支持一個總線宏的四個固定的通信??偩€宏的信息通訊是雙向的,既可以從左到右又可以從右到左。但是對于這個設(shè)計(jì)來說,一旦信息通信方向確定以后就不能再改變。
圖4 總線宏的物理執(zhí)行
5、基于差異的部分可重構(gòu)
基于差異的部分可重構(gòu)比較重構(gòu)前后的電路差別,產(chǎn)生一個只包含重構(gòu)前后設(shè)計(jì)差別的比特流??梢允褂脙煞N方法來改變設(shè)計(jì)、產(chǎn)生重構(gòu)前后的差別,分別是前端改變(HDL描述)和后端改變(NCD文件)。使用前端改變,設(shè)計(jì)必須重新綜合,創(chuàng)建新的NCD文件。后端改變只需直接修改NCD文件,不必重新綜合,可通過FPGA Editor工具修改NCD文件。
在FPGA Editor中可以進(jìn)行三種方式的修改:改變I/O標(biāo)準(zhǔn)、BRAM內(nèi)容、LUT設(shè)計(jì)。其中可以選擇的最小邏輯元素是slice。首先打開NCD文件,看到邏輯塊后找到可選擇的最小邏輯元素slice,打開slice的結(jié)構(gòu)圖窗口,可以分別將重構(gòu)前的I/O標(biāo)準(zhǔn)、BRAM內(nèi)容、LUT設(shè)計(jì)修改為重構(gòu)后的形式,如圖5所示。
圖5 改變LUT設(shè)計(jì)
以上三種修改都符合有效的重構(gòu)流程。除了這三種方式還有其他的修改方式,比如:顛倒極性、振蕩器的初始化和重新設(shè)置值、上拉、下拉外部管腳或者RAM寫方式。所有這些特性都能夠在實(shí)際的slice、RAM邏輯塊或IOB中修改。但是,最好不要進(jìn)行任何有可能影響布線或者產(chǎn)生內(nèi)部連接沖突的修改行為。
實(shí)現(xiàn)上述修改后,使用BitGen就可產(chǎn)生可下載的差異比特文件??芍貥?gòu)前后開關(guān)配置的改變非常迅速,比重新配置整個電路要快很多,就像差異比特流比整個電路的比特流小很多一樣,所以能夠迅速而簡單的下載到電路中。
6、結(jié)論
當(dāng)電路只需要修改比較少的內(nèi)容時,往往選擇基于差異的部分可重構(gòu)。差異比特流比整個電路的比特流小很多,所以能夠迅速下載到電路中。
但是如果電路功能比較復(fù)雜則差異文件會非常龐大,部分動態(tài)重構(gòu)的優(yōu)勢并不十分明顯。所以基于差異的部分可重構(gòu)只適用于功能簡單的電路,對于功能復(fù)雜的電路需要使用基于模塊的部分可重構(gòu)。
綜上所述,基于差異和基于模塊的部分動態(tài)重構(gòu)都可以大大節(jié)省系統(tǒng)的硬件資源,加快文件的下載速度,提高資源利用率,相信會有廣闊的研究和應(yīng)用前景。