用FPGA設計軟件無(wú)線(xiàn)電和調制解調器
本文以16-QAM RF發(fā)射數據泵的設計為例,介紹利用FPGA設計數字濾波器的技巧和器件選擇方法,說(shuō)明執行分布式計算時(shí)FPGA比DSP的優(yōu)越之處。
所有數字邏輯的基本結構
16-QAM調制器
編碼和碼元映射
平方根升余弦濾波器
設計技巧
5 MHz載波
分布式計算(DA)技術(shù)
濾波器的實(shí)現
用現場(chǎng)可編程門(mén)陣列(FPGA)設計軟件無(wú)線(xiàn)電和調制解調器可與DSP芯片媲美。雖然FPGA可輕而易舉地實(shí)現卷積編碼器等復雜邏輯功能,但在實(shí)現大量復雜計算方面卻有很大的缺陷。即使用最快的FPGA來(lái)實(shí)現矩陣乘法器,其成本和性能也抵不上一個(gè)僅值5美元的DSP芯片。在用CAD工具設計時(shí)DSP仍是首選芯片,但是隨著(zhù)分布式計算(DA)技術(shù)的應用,FPGA再次受到設計師的喜愛(ài)。
FPGA的特性之一是結構靈活。事實(shí)上無(wú)線(xiàn)和調制解調數據通道的功能模塊很容易映射到獨立和并行的硬件節點(diǎn)上。采用一個(gè)只能分時(shí)運行的數字信號處理器時(shí),調度多個(gè)時(shí)間要求緊迫的任務(wù)需要非常復雜的編程,而采用FPGA就避免了這一問(wèn)題。
我們將在設計16-QAM射頻發(fā)射數據泵的同時(shí)介紹FPGA特性,并詳細描述如何方便地把數據通道功能模塊轉換為Xilinx 4000系列FPGA的邏輯電路,從而準確地估計所需邏輯電路的數量。雖然滿(mǎn)足相同系統需求及使用同一類(lèi)型FPGA的16-QAM數據泵的設計曾在公開(kāi)文獻中發(fā)表過(guò),但報道中的邏輯電路數量似乎比實(shí)際需要多得多。為了急于投放市場(chǎng),產(chǎn)品很可能不用CAD工具進(jìn)行設計。完全依賴(lài)CAD工具也未必總能得出最優(yōu)的方案,還要付出大量辛勤的汗水、經(jīng)驗和創(chuàng )造性工作。
所有數字邏輯的基本結構
只要有足夠的與非門(mén)及或非門(mén)等通用邏輯門(mén)即可構建任何數字邏輯。FPGA具有充足的邏輯門(mén)。Xilinx 4000系列的邏輯門(mén)采用真值表的形式,或者采用更為通用的16 字 x 1比特查找表(LUT)的形式,它可實(shí)現四個(gè)輸入變量(查找表的地址線(xiàn))的任意布爾函數功能。由于產(chǎn)生的函數功能通常相當于多個(gè)與非門(mén)的組合,所以L(fǎng)UT被視為基本的邏輯單元。Xilinx 4000系列可配置邏輯模塊(CLB)包括兩個(gè)16字的LUT,可組合產(chǎn)生五輸入變量的任意布爾函數。此外LUT還可設置成兩個(gè)16 x 1 RAM或一個(gè)32 x 1 RAM。
CLB成二維方陣排列,CLB及它們之間的互連可以分別配置。最小的XC4002包含一個(gè)8 x 8的CLB矩陣,最大的XC4085XL則包含一個(gè)48 x 48的CLB矩陣。每個(gè)LUT連接一個(gè)高達100 MHz的觸發(fā)器。
16-QAM調制器
16-QAM調制器包括RF發(fā)射數據泵的關(guān)鍵功能模塊(見(jiàn)圖1)。20-Mbps串行數據分為4比特碼元組(symbol)后,以每秒5兆碼元的速率并行送至一個(gè)差分編碼器和碼元映射器(symbol mapper)。該映射器產(chǎn)生3比特的正交分量對。然后這些分量對由一對平方根升余弦濾波器進(jìn)行脈沖整形,經(jīng)過(guò)插值達到每秒20兆碼元,再由5MHz載波進(jìn)行調制,將各輸出相加后進(jìn)行數模轉換。設計的關(guān)鍵是采用一對插值脈沖整形濾波器。

為了有效地實(shí)現這種設計方法,有必要在確定邏輯門(mén)的總數時(shí),將編碼和映射功能模塊以及一個(gè)5MHz調制器也考慮進(jìn)去。
編碼和碼元映射
在確定編碼器和信號映射器的邏輯數目時(shí),我們可以借鑒過(guò)去標準調制解調器的設計。如V.32中的編碼器包括一個(gè)提供180度雙相保護的差分編碼器和一個(gè)能加入冗余以減小接收器的位誤差率(BER)的卷積編碼器。編碼器和映射器都是有限狀態(tài)機實(shí)現的,所有狀態(tài)由五個(gè)寄存器(2.5個(gè) CLB)實(shí)現,連接邏輯由八個(gè)二輸入異或門(mén)(4個(gè)CLB)及三個(gè)二輸入與門(mén)(1.5 CLB)構成。在這個(gè)16-QAM發(fā)送器中,一個(gè)串并轉換寄存器(2個(gè)CLB)捕獲到四個(gè)20-Mbps的串行比特后形成一個(gè)4比特碼元,這樣編碼器就可以處理降低到每秒5兆碼元的數據流,而這種速率CLB很容易處理。數據通道控制需要沿著(zhù)數據通道的寄存器進(jìn)行時(shí)鐘控制,所需CLB的數量少于15個(gè)。接著(zhù),一個(gè)經(jīng)編碼的5比特輸出碼元對應映射器的地址線(xiàn),很簡(jiǎn)單,該映射器是一對3比特輸出的LUT。
這些輸出作為正交分量(I和Q) 映射一個(gè)二維平面(星座)內的碼元位置。64個(gè)交叉點(diǎn)(星)中僅有16個(gè)代表有效的碼元位置。映射器的大小為32字 x 3比特 x 2 即6個(gè)CLB。這些功能模塊的CLB總數是31個(gè)。
平方根升余弦濾波器
平方根升余弦濾波器是在傳輸通道的有限帶寬內抑制碼元相互干擾的一種可行方法。頻譜由發(fā)射器和接收器單元分別調制,形成了平方根升余弦濾波器。濾波器形狀及其系數用QEDesign 1000軟件輔助開(kāi)發(fā)。圖2為12比特定點(diǎn)計算的32抽頭有限脈沖響應(FIR)濾波器的響應圖。我們將采用一個(gè)12比特濾波器模型并確定其邏輯門(mén)數(采用12比特量化的方式,QEDesign程序僅需28個(gè)對稱(chēng)系數,但是這種設計方案將使用一個(gè)完全32抽頭對稱(chēng)FIR濾波器)。

設計技巧
平方根升余弦濾波器用于I、Q兩個(gè)通道上的頻譜形成。當以每秒5兆采樣速率產(chǎn)生I、Q采樣點(diǎn)時(shí),濾波器為調制器產(chǎn)生每秒20兆的采樣數據。這樣,濾波器充當了一個(gè)1:4的插值器。相應的計算量(采用對稱(chēng)系數)為2通道 x 16階對稱(chēng)抽頭x每秒20兆采樣點(diǎn) = 每秒640兆乘法-累加運算。這一速度大大超過(guò)大多數定點(diǎn)DSP芯片的運行速度?,F在FPGA已成為一種很有吸引力的選擇,但是,還要挑選一種濾波器形式使之能最有效地映射到基于CLB的設計。
現在有多種邏輯電路的配置或形式可實(shí)現FIR濾波器。最主要的有直接形式(即一種常用的軟件模型)、帶變量的轉置形式(已由專(zhuān)用濾波器芯片實(shí)現)以及多相濾波器(適用于多速率應用)。但這些形式都不能采用對稱(chēng)系數的方法來(lái)減少乘法計算量。設計多速率濾波器的一個(gè)技巧是在采樣點(diǎn)-系數平面標出信號流軌跡。
縱軸表示采樣點(diǎn),水平軸表示系數,畫(huà)出的數據軌跡顯示了90度翻轉后濾波器的響應圖。因為系數對稱(chēng),只需列出一半濾波器系數。插入系數為K,即在輸入采樣點(diǎn)間填入K-1個(gè)零點(diǎn),從而得到32抽頭FIR的V形軌跡。雖然輸入數據采樣點(diǎn)間隔為200 ns,但新的軌跡點(diǎn)必須每隔50ns一點(diǎn)。
由該圖可以得出兩種計算模型。第一種是轉置形式的變形,其中非零輸入采樣值與所有32個(gè)系數的乘積在部分和寄存器中相加。32個(gè)乘積相加后并且濾波器的完全響應輸出后,乘法-累加器電路可用于計算新軌跡。在此,每隔200ns進(jìn)行32次MAC運算。第二種模型是延遲相加,即FIR濾波器的直接形式。正如在濾波器軌跡中所看到的,需要八個(gè)存儲的采樣值計算一個(gè)濾波響應。通過(guò)計算五個(gè)連續濾波器響應我們可觀(guān)察到表1給出的模型。
由同樣的八個(gè)采樣點(diǎn)輸入組可計算出四個(gè)連續的20MHz響應。只使用了兩組濾波器系數。濾波器系數與每個(gè)采樣數據組的第三和第四個(gè)響應( y d和y e )順序相反。這些響應方程能映射到有效的FPGA電路中嗎?當然能!關(guān)鍵就是應用分布式計算技術(shù),所有現行的設計工具都不具備這種算法。實(shí)現響應方程組以前,可先作一下簡(jiǎn)化。
5 MHz載波
載波調制的簡(jiǎn)單方程為:Y(k) = yI(k)cos(wC*t) + yQ(k)sin(wC*t),其中wC為載波頻率= 2p(5 MHz), I和Q表示同相和正交的碼元分量。
此方程每50 ns執行一次。一個(gè)碼元周期內(200 ns)僅有四個(gè)載波值。這些值可以方便地定義為:cos(wC*t) = 1, 0, -1, 0和sin(wC*t)= 0, 1, 0, -1 ,1。
調制輸出既不需要任何乘法或加法,也不需要每隔50ns計算一次I、Q濾波器響應。50 ns計算一個(gè)I響應接著(zhù)在下一個(gè)50 ns計算一個(gè)Q響應,然后再計算I響應、Q響應,周而復始。
分布式計算(DA)技術(shù)
DA是專(zhuān)門(mén)針對乘積和方程的一種計算技術(shù),方程中的一項乘積因子是常數。DA設計可實(shí)現門(mén)級高效率、串行位算法及高性能位并行運算,它是經(jīng)典的串/并綜合方案。DA技術(shù)可應用于很多重要的線(xiàn)性、時(shí)不變數字信號處理算法,如濾波器(FIR和IIR)、變換(快速傅立葉變換[FFT])及矩陣向量乘積,如8 x 8離散余弦變換(DCT)。
二十多年前就有了DA技術(shù),已經(jīng)證實(shí)它不適于可編程DSP的定點(diǎn)指令集結構。然而,DA非常適于FPGA實(shí)現,尤其是如Xilinx CLB的LUT邏輯模塊。用Xilinx XC3000系列的FPGA設計DA FIR濾波器早在1992年就已提出。
DA電路中沒(méi)有獨立的乘法器。乘法是由LUT完成的。DA預存一個(gè)方程式中所有部分乘積項的和,并且根據所有輸入變量位查表(此處為DALUT)運算。串行DA電路有一個(gè)獨立的DALUT,它從最低的有效位開(kāi)始查表。部分乘積的輸出和存儲在累加器中,這種方法讓我們想起了早期計算機中的移位相加子程序,連續的DALUT輸出累加到部分乘積的二進(jìn)制下移累加和中。這樣可得到一個(gè)真正的雙精度結果。
濾波器的實(shí)現
平方根升余弦濾波器的數據通道由已可轉換為CLB的標準功能模塊定義。每隔200ns將映射器輸出的3比特I、Q信號傳至并串轉換移位寄存器(PSR)。RAM移位寄存器(SR)鏈中存儲了七個(gè)先前的碼元。前三個(gè)濾波器響應Y b , Y c , Y d與移位寄存器中的循環(huán)數據一起運算。PSR還需要一個(gè)反饋通道,但RAM SR在只讀時(shí)循環(huán)受到模塊尋址的影響。這里的模塊有六個(gè),前三次移位用于Y b,緊接著(zhù)的三次用于Y c,最后三次則是用于Y d。在計算Y e時(shí),數據沿SR鏈下移。這種模塊尋址模式隨著(zhù)前級傳輸(寫(xiě))的數據不斷重復。所有十二次移位和相應的PSR加載、RAMSR尋址及寫(xiě)控制都來(lái)源于60MHz系統時(shí)鐘。
由于相同的系數組要用于兩個(gè)采樣周期,一個(gè)用于I通道數據計算,另一個(gè)用于Q通道數據計算,用一組DALUT和2/1復用器將串行數據流導向相應的地址端口。這些端口可以表示DALUT的結構。h 3端口的邏輯高電平選擇部分乘積和包含h 3的所有內存地址。與此類(lèi)似,h 7端口的邏輯高電平選擇所有包含h 7的所有地址,h 3和h 7端口的邏輯高電平選擇所有包含h 3和h 7的地址。剩余的六個(gè)系數仍采用這種模式。事實(shí)上,八個(gè)系數將需要2 8或256個(gè)字存儲。對于12比特系數的情況,將需要 (每個(gè)CLB為256/32 字) x 12 = 96 個(gè)CLB。另一個(gè)訣竅是使用兩個(gè)DALUT,每個(gè)需要四個(gè)系數并增加它們的輸出。這樣CLB的數目則減少到(2 x 24)/32 x 12 + 13/2 (并行加法器) = 18.5 個(gè)CLB.
同樣的簡(jiǎn)化也可用到以h 1開(kāi)始的第二套濾波器系數中。采用2/1復用器可分時(shí)共享并行加法器。該加法器擴展為13個(gè)比特后,輸入到前述執行移位和加法運算的標量累加器。當輸入變量的符號位傳輸給DALUT時(shí),就進(jìn)行減運算。此過(guò)程可通過(guò)在DALUT輸出增加EXOR門(mén)并向累加器第一級進(jìn)位的標準方法來(lái)完成。對于負響應Y d和Y e,數據采樣可不管符號位,而對所有的DALUT輸出數據取反來(lái)求補。
對于分數二進(jìn)制補碼格式的I、Q數據,濾波器系數要進(jìn)行調整以防在最后輸出中溢出。十個(gè)最高有效位可加載到D/A轉換驅動(dòng)寄存器中。
濾波器數據通道的CLB總數為71.5個(gè),FPGA輸出端口帶有觸發(fā)器,可作為D/A轉換的驅動(dòng)寄存器。算上編碼器(31個(gè)CLB)及定時(shí)和控制功能(估計要少于50個(gè)CLB)在內,總數大約為159個(gè)CLB,正好可置于Xilinx XC4000系列中較小(稍大于最小)的芯片中,即XC4005 (196個(gè)CLB)。如果采用Xilinx Virtex等更高級的FPGA器件,則可減少CLB的數量并提高性能。
整個(gè)設計可確保60MHz系統時(shí)鐘條件下的性能。數據流采取統一形式且單向傳輸??梢圆迦牍艿兰拇嫫?不增加CLB)以縮短組合路徑。通過(guò)標量累加器的十四級的進(jìn)位鏈是最長(cháng)的組合路徑。然而,通過(guò)內置預進(jìn)位電路可確保足夠的速度余量。
評論