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