利用AutoESL高級綜合工具可實現在 Xilinx Virtex-5器件中構建復雜的寬帶無線系統接收器。
空分復用MIMO處理技術可顯著提高無線通信系統的頻譜效率,進而大幅增加無線通信系統的容量。正因如此,它已成為新一代WiMAX以及其它基于OFDM無線通信系統的核心組成部分??辗謴陀肕IMO處理技術是一項計算密集型應用,可實現高要求的信號處理算法。
在MIMO系統中,空分復用技術的一個具體實例是球形解碼。球形解碼是一種解決MIMO檢測問題的有效方法,其在比特誤碼率 (BER) 性能方面能與最佳的最大似然檢測算法相媲美。但是,DSP處理器的計算能力有限,不足以滿足球形解碼實時性方面的要求。
現場可編程門陣列 (FPGA) 是一個極具吸引力的平臺,可實現如球形解碼器這樣的復雜DSP密集型算法。現代FPGA 是一種高性能并行計算平臺,可在保持可編程DSP處理器靈活性的同時,為系統提供所需的專用硬件。多項研究表明在多個信號處理應用中,FPGA的性能比傳統 DSP 處理器高100倍,性價比可提高30倍。
盡管FPGA的性能具有相當大的優勢,但通常無法應用于無線信號處理,主要因為傳統的DSP程序員認為它們不容易處理。事實上,造成FPGA無法在無線應用中得到廣泛使用的真正阻礙是以硬件為中心的傳統設計流程與工具。
目前,要想利用FPGA來進行設計,需要具備豐富的硬件設計經驗,包括熟悉VHDL與Verilog等硬件描述語言。最近,新型高級綜合工具可以作為FPGA的輔助設計工具。這些設計工具將高級算法描述作為輸入,并生成可與標準FPGA實現工具(例如 Xilinx? ISE?design suite 與嵌入式開發套件)一起使用的RTL。該工具可提高設計效率,縮短開發時間,同時實現高質量的設計。
我們可利用該工具設計基于 FPGA 的復雜無線算法應用,即802.16e系統下的空分復用MIMO球形檢測器。我們專門選擇AutoESL的AutoPilot高級綜合工具作為時鐘頻率為225MHz的Xilinx Virtex?-5的輔助設計工具。
球形解碼
球形檢測作為解碼過程的一部分,是一種用于簡化空分復用系統檢測復雜程度的有效方法,在 BER 性能方面可與復雜度更高的最佳最大似然 (ML) 檢測算法相媲美。
如圖1所示,在MIMO 802.16e無線接收器的方框圖中,我們假設接收器可以準確估計信道矩陣,該假設條件可通過傳統的信道估算方法來實現。該實現的流水線具有 3 個構建模塊:信道重新排序、QR分解以及球形檢測器 (SD)。我們通過計算檢測到的比特對數似然比(LLR) 來產生軟輸出,從而為軟輸入、軟輸出信道解碼器(比如渦輪解碼器)的
使用做準備。
圖 1 球形解碼器方框圖
信道矩陣重排序
球形檢測器處理天線的順序可對BER的性能產生較大影響。在進行球形檢測之前,首先執行信道重排序。檢測器利用信道矩陣預處理器實現了類似貝爾實驗室分層空時 (BLAST) 結構上采用的連續干擾抵消處理技術,最終達到了接近ML性能。
該方法利用信道重排序處理來實現,通過多次迭代確定復雜信道矩陣最佳列檢測次序。該算法根據迭代次數來選擇范數最大或最小的行。歐幾里德范數最小的行表示天線影響最強,而歐幾里德范數最大的行表示天線影響最弱。這種新穎的方案首先處理最弱的數據流,隨后依次迭代處理功率從高到低的數據流。
為了滿足應用對高數據速率的要求,我們實現了圖2所示的基于流水線架構的信道排序模塊。該模塊可以在時分復用 (TDM) 模式下同時處理5條信道。這種方案延長了同一信道不同矩陣元素之間的處理時間,同時可保持高數據吞吐量。
在圖2中,G矩陣計算是要求最高的組成部分。該過程的核心是矩陣求逆,可通過QR分解 (QRD) 來實現。實現QRD的常用方法是使用吉文斯旋轉。
圖 2 迭代信道矩陣重排序算法
該方法可執行對角線單元和非對角線單元的復雜旋轉,這些單元都是我們所使用脈動陣列的基本計算單元。改進的實數矩陣QRD在獲取信道矩陣列的最佳排序之后,下一步應對實數矩陣系數進行QR分解。用于該QRD處理的功能單元與計算逆矩陣的QRD引擎類似,但有一些不同之處。本例子的輸入數據是實數,因此脈動陣列結構的維數會相應更高(即8×8實數值而不是4×4復數值)。
為了滿足時序約束的要求,輸入數據消耗速率必須保持在每時鐘周期1個輸入采樣。這種要求給處理時延帶來了挑戰,即我們無法在5條信道的TDM結構中處理該問題。因此,在TDM組中將信道數量增加至 15 條,以延長同一信道矩陣中連續元素之間的處理時間。
球形檢測器設計
您可以將迭代球形檢測算法視為遍歷樹過程,樹 i 的每一層對應于第 i 個天線的處理符號。實現遍歷樹有幾種可選方法。我們選擇的是廣度優先搜索法,因為該方案具有備受歡迎的硬件友好特征。在每一層,只選擇具有最小部分歐氏距離的K節點來計算擴展情況。這類檢測器稱為 K-best 檢測器。范數計算是在球形檢測器的部分歐氏距離 (PED) 模塊中完成的。根據樹的層次,我們可以利用3種不同的PED模塊。根節點PED模塊計算所有可能的PED(樹層次指數是 i = M = 8)。
第二層PED模塊分別對第一層計算得出的8個幸存路徑進行計算,計算每個幸存路徑的8個可能PED。在樹層次指數 i = 7的情況下,將得出64個生成PED。第三類PED模塊用于樹的其它層次,負責為上一級計算得出的所有PED計算出最近節點的PED。這會將每一層的分支數量固定為 K = 64,如此傳播至最后一層 i = 1 ,并產生64個最終PED以及它們的檢測符號序列。SD流水線架構可允許在每個時鐘周期中進行數據處理。因此,樹的每一層只需要 1 個 PED 模塊,從而使PED模塊總數量與樹的層數量相等。這樣對4×4 64-QAM調制方式而言,PED的總數量為 8。圖 3為 SD 結構圖。
圖 3 球形檢測器處理流水線
FPGA性能實現目標
目標FPGA器件為Xilinx Virtex-5,其目標時鐘頻率是225MHz。如果為每個數據副載波估計信道矩陣,就會限制每個信道矩陣的處理時間。對于選定的時鐘頻率和5MHz通信帶寬(在WiMAX系統中相當于360個數據副載波),我們可以按如下公式計算每個信道矩陣間隔的可用處理時鐘周期數:
如前所述,我們設計了計算量要求最高的 4×4 天線與 64-QAM 調制方案的配置結構。本方案的原始數據速率可達到 83.965Mb/s。
針對 FPGA 的高級綜合
高級綜合工具將具體算法的高級描述作為其輸入,可執行并生成基于FPGA實現的 RTL 描述,如圖4所示。該RTL描述可與參考設計、IP核或已有RTL代碼結合在一起,利用傳統Xilinx ISE/EDK工具來創建完整的FPGA實現方案。
圖 4 – 針對 FPGA 的高級綜合
現代高級綜合工具將非定時C/C++描述作為輸入規范。該工具對同一C/C++ 代碼執行 2 種解讀:輸入/輸出行為的順序語義與基于 C/C++ 代碼與編譯器指令的架構規范。這些高級綜合工具根據 C/C++ 代碼、編譯器指令以及目標吞吐量的要求來生成高性能的流水線架構。高級綜合工具還具有流水線級數的自動插入與資源共享等其它功能,這樣可減少 FPGA資源的消耗。基本上講,高級綜合工具提高了FPGA設計的抽象級,并將耗時且容易發生錯誤的RTL設計任務實現透明化。
我們將重點集中在 C++ 描述的使用,其目標是利用 C++ 模板類來代表任意精度的整數類型以及利用模板功能來代表架構中參數化的模塊。
圖5給出總體設計方案,出發點是從MATLAB?功能描述中獲得的C/C++參考代碼。如圖所示,在任何硬件目標平臺中實現應用的第一步通常是重組C/C++ 參考代碼。我們將“重組”表示為將原始C/C++ 代碼以一種更適合目標處理引擎的格式進行重寫(通常是為了使代碼清晰明了、易于概念理解而不考慮最優性能)。例如,必須重新排列DSP處理器中的應用代碼,以便算法可以高效地利用緩存。當目標器件是FPGA時,重組可能包括:重寫代碼用以表示可達到預期吞吐量的架構規范,或重寫代碼以高效利用FPGA的特定功能,例如嵌入式DSP宏。
圖 5 C/C++ 改進型迭代設計方案
我們通過利用傳統C/C++編譯器(例如 gcc),并重新利用適用于C/C++參考代碼校驗的C/C++級測試臺,可實現對 C/C++ 執行代碼的功能校驗。C/C++執行代碼是高級綜合工具的主要輸入。但是,額外輸入會顯著影響生成硬件、及其性能和FPGA資源的使用數量。因此存在 2 個基本約束條件,分別為目標FPGA系列產品與目標時鐘頻率,它們都會影響生成架構中流水線級數的數量。
此外,高級綜合工具可接受編譯器指令(例如,在C/C++ 代碼中插入注解),使設計者可以在不同C/C++代碼段中應用不同的指令類型。例如,應用于循環(例如,循環展開)和其它數組(例如,指定哪些 FPGA 資源必須用于執行數組操作)的指令。
根據這些輸入,高級綜合工具生成輸出架構 (RTL),并報告其吞吐量。然后設計者根據吞吐量的大小來修改指令,執行C/C++代碼。如果生成的架構滿足吞吐量方面的要求,則RTL輸出用于FPGA實現工具 (ISE/EDK) 的輸入。
只有在完成邏輯綜合和布局布線之后,才報告可實現的最終時鐘頻率和FPGA資源使用數量。如果該設計不能滿足時序和FPGA資源限制這2方面要求,則該設計與預期設計不相符,那么設計者應修改C/C++執行代碼或編譯器指令。
SD高級綜合實現
我們已經利用A u t o E S L的AutoPilot 2010.07.ft 工具實現了圖1所示的WiMAX球形解碼器的3個關鍵構建模塊。需要重點強調的是,本方案所選擇的算法與最近SDR會議論文中的算法一致,因此可以實現相同的BER。
在本節中,我們給出了用于該特殊實現的代碼重寫與編譯器指令的具體示例。從MATLAB功能描述中獲得的原始C參考代碼大約有2000行,包括綜合C代碼與驗證C代碼。
代碼只包括使用C內置數據類型的定點運算。一個對FPGA友好的實現幾乎可以完成所有要求的浮點運算(例如 sqrt)。除了描述 FPGA 綜合功能的C參考代碼之外,還有一個完整的C級驗證測試平臺。我們從MATLAB描述中生成輸入測試矢量和重要的輸出參考文件。
原始C / C + +參考代碼符合MATLAB 規范的比特精度要求,并可通過由多個數據集構成的回歸分析套件。該C/C++參考代碼經歷了不同類型的代碼重組。例如,圖5顯示了3個我們已經實現的代碼重組的例子。我們重新使用 C 級驗證設施來檢驗 C/C++代碼執行中的任何變化。而且,我們是在 C 級執行所有驗證,而不是在寄存器傳送級,這樣可避免非常耗時的RTL仿真,從而有助于減少總體開發時間。
宏架構說明
代碼重構的最重要部分是重寫C/C++代碼,以描述可有效實現特定功能的宏架構。換句話說,設計人員負責宏架構說明,而高級綜合工具負責宏架構的生成。這類代碼重組對得到的吞吐量和質量結果具有重大影響。就球形解碼器而言,有幾個這類代碼重組的實例。例如,為了滿足信道排序模塊的高吞吐量要求,設計人員應使用C/C++來描述圖2所示的宏架構。
這類C/C++代碼由幾個以數組為傳遞參數的函數構成。該高級綜合工具可自動調用乒乓緩沖器中的數組,以實現在流
水線中并行執行多個矩陣計算模塊。本級代碼重組的另一個實例是決定特定模塊的TDM結構中所使用信道的數量(例如,信道矩陣重排序模塊使用5條信道,修正后的實部QR分解模塊使用15條信道)。
圖6是宏架構說明的一個實例。圖3為描述球形檢測器的C++代碼片段框圖。我們注意到圖中有一條調用9個函數的流水線,其中每個函數代表圖3中的一個模塊。函數之間的通信通過傳遞數組來完成,這些數組被第5行和第7行的適當指令 (pragmas) 映射至數據流接口(不是 FPGA 嵌入式 BRAM 存儲器)。
圖 6 球形檢測器宏架構描述
參數化的重要性
參數化是代碼重寫的另一個關鍵實例。我們廣泛利用C++模板函數來表示架構中的參數化模塊。在球形解碼器的實現過程中,該類代碼重寫有幾個不同實例。一個具體實例是應用于信道重排序模塊的不同類型矩陣操作。圖2所示的矩陣計算模塊(4×4, 3×3與2×2)就包含不同類型的矩陣操作,例如矩陣求逆或矩陣相乘。將這些模塊進行編碼并作為 C++ 模板函數,模板參數即矩陣的行數與列數。
圖7為矩陣相乘的C++模板函數。除了矩陣行數和列數這兩個參數之外,該模板函數還有第三個參數,即MM_II(矩陣相乘初始化間隔),該參數用于指定二次連續循環迭代之間的時鐘周期數量。第 9 行的指令 (pragma)用于對具體實例所需吞吐量進行參數化。這是一項很重要的功能,原因是它可對生成的微體系架構產生重要影響—也就是高級綜合工具具備充分利用資源共享的能力,從而可以減少用于具體實現中的 FPGA 資源數量。例如,高級綜合工具僅僅通過修改初始化間隔 (Initiation Interval) 參數并使用相同的 C++ 代碼,即可在執行不同矩陣求逆(4×4, 3×3, 2×2) 模塊的過程中自動實現不同層面的資源共享。
圖 7 代碼參數化實例
FPGA最優化
FPGA最優化是代碼重寫的最后一個實例。設計人員可以重寫C/C++代碼,以更高效地利用特定FPGA資源,從而可以改善時序并減小存儲區域的使用。該類最優化方面的兩個具體實例是比特寬度最優化與嵌入式DSP模塊 (DSP48) 的高效使用。高效利用DSP48可以改善時序并提高FPGA資源利用率。
我們利用內置C/C++數據類型(例如short、int)來編寫C/C++參考代碼,同時利用18位定點數據類型來表示矩陣元素。我們已經利用C++模板類來表示任意精度的定點數據類型,因此可減少FPGA資源的使用并將時序影響最小化。
圖8是一個先執行乘法后執行減法的C++模板函數,而輸入操作數寬度是需要設置的參數??蓪⑦@兩個運算操作映射至嵌入式DSP48模塊中。在圖8中,有兩條指令指示高級綜合工具用最多兩個時鐘周期來調度這些操作并使用寄存器來存儲輸出返回值。
圖 8 針對 DSP48 有效利用的 FPGA 性能最優化
生產力度量指標
在圖9中,我們繪出利用AutoESL的AutoPilot所生成設計的規模大?。碏PGA資源使用情況)隨時間變化的曲線,并與傳統系統生成器 (RTL)的實現過程相比較。利用高級綜合工具,我們可以實現很多有效的解決方案,且這些解決方案的規模隨時間而變化。因此,設計人員可根據代碼重組的數量,在獲取解決方案的速度與解決方案的規模大小之間做出權衡。另外,RTL 解決方案只有一種,而且開發周期較長。
?
圖 9 FPGA 資源用量隨著開發時間增加而下降
我們已經觀察到可以用相對較少的時間來獲得幾個明顯比傳統RTL解決方案使用更多FPGA資源(例如區域)的綜合解決方案。另一方面,設計人員也可自行決定在工具專家等級下工作,通過執行更高級的C/C++代碼重組技術(例如特定FPGA的最優化),實現用更少的FPGA資源生成更多的解決方案。
最后,因為我們是在C/C++級執行所有驗證,從而可以避免耗時的RTL。因此,在 C/C++ 級執行設計驗證將明顯縮短總體開發時間。
質量結果
在圖10中,我們對比了分別利用高級綜合工具與系統參考生成器(基本屬于結構化的RTL設計,顯示使用如DSP48模塊的FPGA基元)這兩種不同方法來實現的完整球形解碼器,在其最終FPGA資源使用量和總體開發時間這兩方面進行了比較。AutoESL開發時間包括工具學習、產生結果、設計空間探測與詳細驗證所需要的時間。
圖 10 質量結果的度量標準體現了 AutoESL 優勢。
為了更精確地比較,我們利用針對Virtex-5 FPGA的最新Xilinx ISE 12.1工具重新實現RTL參考設計。同樣,我們利用針對同類FPGA的ISE 12.1來執行由AutoESL AutoPilot生成的RTL。圖10顯示AutoESL AutoPilot節約FPGA資源效果明顯,主要是因為在實現矩陣求逆模塊時實現了資源共享。
我們也觀察到寄存器的使用數量明顯減少,查找表 (LUT) 的使用量略有提高。產生這種結果的部分原因在于 AutoESL
實現過程中延遲線被映射至 SRL16(例如 LUT),而在系統生成器方案中,則利用寄存器實現上述功能。在其它模塊中, 我們交替使用BRAM 與 LUTRAM,導致信道預處理器的 BRAM 使用率較低。
AutoESL AutoPilot完成對底層FPGA實現細節的抽象(例如時序與流水線設計)。與使用傳統RTL設計方案相比,其產生的質量結果更具競爭力。C/C++級驗證避免使用耗時的RTL仿真,從而可以減少總體開發時間。但是,對于具有挑戰性的復雜設計而言,如果想取得卓越的效果,則必須給出優異的宏架構定義,且必須具備扎實的FPGA設計工具知識,還要有理解與解釋FPGA工具報告的能力。
評論