關(guān)鍵詞:數(shù)字相關(guān)器 FPGA 希爾波特變換 Stratix
采用FPGA器件可以將原來的電路板級(jí)產(chǎn)品集成為芯片級(jí)產(chǎn)品,從而降低了功耗、提高了可靠性,同時(shí)還可以很方便地對(duì)設(shè)計(jì)進(jìn)行在線修改。電路設(shè)計(jì)者可以通過軟件編程,經(jīng)過設(shè)計(jì)輸入、仿真、測試和校驗(yàn),用硬件實(shí)現(xiàn)特定的數(shù)字信號(hào)處理算法。這種方法由于具有通用性強(qiáng)的特點(diǎn)并可以實(shí)現(xiàn)算法的并行運(yùn)算,因此無論是作為獨(dú)立的數(shù)字信號(hào)處理器,還是作為DSP芯片的協(xié)處理器,目前都是比較活躍的研究領(lǐng)域。
短波通信具有設(shè)備簡單、通信距離遠(yuǎn)、機(jī)動(dòng)靈活、價(jià)格低廉和抗毀性強(qiáng)的特點(diǎn),有著重要的應(yīng)用價(jià)值。在短波通信系統(tǒng)中,接收方在信號(hào)檢測、同步的過程中,要進(jìn)行大量的乘加操作來做相關(guān)運(yùn)算。在傳輸速率較高、樣點(diǎn)間隔較小的情況下,完全由系統(tǒng)中央DSP處理器進(jìn)行運(yùn)算,很難實(shí)現(xiàn)實(shí)時(shí)處理。利用FPGA的特點(diǎn),把信號(hào)同步數(shù)字相關(guān)部分分離出來,設(shè)計(jì)一個(gè)專用的數(shù)字相關(guān)器,作為中央DSP處理器的協(xié)處理器,來分擔(dān)這部分工作,是一個(gè)很好的解決方案。本文闡述的就是這樣一個(gè)應(yīng)用在短波擴(kuò)頻通信系統(tǒng)的接收方中,完成數(shù)字相關(guān)功能的基于FPGA設(shè)計(jì)的相關(guān)器。
1 Stratix系列芯片簡介
本文采用Stratix系列芯片實(shí)現(xiàn)數(shù)字相關(guān)器。Stratix系列是著名的可編程邏輯器件供應(yīng)商Altera公司于2002年新推出的FPGA產(chǎn)品。其主要特點(diǎn)是:采用1.5V內(nèi)核,0.13μm全銅工藝,容量為10570~114140個(gè)邏輯單元,內(nèi)嵌多達(dá)10Mbit的三種RAM塊,即512bit容量的小型RAM,4KB容量的標(biāo)準(zhǔn)RAM,512KB的大容量RAM;具有True-LVDS(tm)電路,支持LVDS、LVPECL、PCML和HyperTranport(tm)差分I/O電氣標(biāo)準(zhǔn),且有高速通信接口;增加了片內(nèi)終端匹配電阻,提高了信號(hào)完整性,簡化了PCB布線;提供了完整的時(shí)鐘管理方案,具有層次化的結(jié)構(gòu)和多達(dá)12個(gè)鎖相環(huán)(PLL)。
該系列芯片的最大特色是內(nèi)嵌硬件乘法器和乘加結(jié)構(gòu)的可編程DSP模塊,特別適于實(shí)現(xiàn)高速信號(hào)處理。這種DSP模塊是高性能的嵌入算術(shù)單元,它的運(yùn)行速度可以達(dá)到250MHz,每個(gè)DSP模塊的數(shù)據(jù)吞吐性能可以高達(dá)2.0GMACS。它可以配置為硬件乘法器、加減法器、累加器和流水線寄存器,如表1所示。
表1 單個(gè)DSP單元的設(shè)置模式
模 式 | 9bitx9bit | 18bitx18bit | 36bitx36bit |
單個(gè)乘法器 | 8個(gè) | 4個(gè) | 1個(gè) |
相乘累加器 | 2個(gè)(結(jié)果為52bit) | 2個(gè)(結(jié)果52bit) | —— |
2個(gè)乘積求和 | 4個(gè) | 2個(gè) | —— |
4個(gè)乘積求和 | 2個(gè) | 1個(gè) | —— |
Stratix系列具有多達(dá)28個(gè)DSP模塊,可配置為224個(gè)(9bit×9bit)嵌入乘法器,可以為大數(shù)據(jù)吞吐量的應(yīng)用提供靈活、高效和有價(jià)值的方案。這些DSP模塊可以實(shí)現(xiàn)多種典型的DSP功能,如有限沖擊響應(yīng)(FIR)濾波、快速傅立葉變換(FFT)功能、相關(guān)器和加密/解密功能等。
Stratix系列由Altera公司提供的新一代開發(fā)軟件Quartus II支持。此軟件加強(qiáng)了網(wǎng)絡(luò)功能,設(shè)計(jì)人員可以直接通過Internet獲得Altera的技術(shù)支持。Quartus II軟件中的Megawizard Plus_In Manager工具可以很方便地對(duì)一些常用的基本模塊進(jìn)行定制,以滿足不同的需要;設(shè)計(jì)人員還可以在定制后的基礎(chǔ)上,進(jìn)行進(jìn)一步的改進(jìn),擴(kuò)展出更多的功能。
2 FPGA模塊設(shè)計(jì)
數(shù)字相關(guān)器在短波擴(kuò)頻通信系統(tǒng)中的具體功能是:接收A/D采樣后的采樣信號(hào),對(duì)采樣信號(hào)進(jìn)行希爾波特變換,得到與其正交的另一路信號(hào);然后以這兩路信號(hào)分別作為實(shí)部和虛部,與本地序列進(jìn)行相關(guān)運(yùn)算,將相關(guān)值的實(shí)部和虛部送給DSP做后續(xù)處理,如圖1所示。只有包含有正確同步頭信息的信號(hào)經(jīng)采樣后與本地序列作相關(guān)運(yùn)算,得到的相關(guān)值的模值才會(huì)出現(xiàn)峰值;對(duì)應(yīng)于發(fā)端特定的同步頭幀結(jié)構(gòu),相關(guān)后的相關(guān)峰也會(huì)出現(xiàn)規(guī)律性的特征。這樣,DSP才可以通過先對(duì)相關(guān)值求模,然后對(duì)模值出現(xiàn)的峰值的間隔、幅值和數(shù)目等信息進(jìn)行判斷和進(jìn)一步處理,來確定是否捕捉到信號(hào)。下面具體介紹完成上述數(shù)字相關(guān)功能的FPGA的設(shè)計(jì)。FPGA設(shè)計(jì)的內(nèi)部結(jié)構(gòu)框圖如圖2所示。
2.1 希爾波特變換部分
系統(tǒng)接收到的射頻信號(hào)經(jīng)過前端預(yù)處理后,送到A/D采樣,然后以串行方式輸出樣點(diǎn)值到FPGA。每個(gè)樣點(diǎn)值是用10bit的二進(jìn)制補(bǔ)碼表示的,需先通過一個(gè)串/并轉(zhuǎn)換器轉(zhuǎn)化為寬度為10bit的并行信號(hào)。樣點(diǎn)值首先要進(jìn)行的是希爾波特變換,希爾波特變換有多種實(shí)現(xiàn)方法,這里采用一個(gè)129階的濾波器來實(shí)現(xiàn),濾波器的抽頭系數(shù)由MATLAB函數(shù)remez產(chǎn)生,如圖3所示。
將10bit的并行信號(hào)輸入到一個(gè)10bit×129的RAM模塊,采用循環(huán)寫入的方式,RAM模塊類似一個(gè)桶形循環(huán)存儲(chǔ)器?熏較早存入RAM的信號(hào)值就會(huì)被新來的數(shù)據(jù)覆蓋掉,這樣就與圖3所示的輸入信號(hào)先進(jìn)先出是等效的。經(jīng)MATLAB函數(shù)remez產(chǎn)生的抽頭系數(shù)是一組變換范圍很大的帶有小數(shù)部分的十進(jìn)制數(shù),為了能夠進(jìn)行后續(xù)的硬件運(yùn)算,需要對(duì)這組十進(jìn)制數(shù)作歸一量化處理,把它們映射到寬度為14bit的有符號(hào)的二進(jìn)制數(shù)所能表示的范圍上去,即轉(zhuǎn)化為14bit的二進(jìn)制補(bǔ)碼數(shù)。這組抽頭系數(shù)在運(yùn)算的過程中是固定不變的,所以可以把它們固化在片內(nèi)ROM模塊中,與RAM中的值同步讀出,再經(jīng)過兩組D觸發(fā)器對(duì)齊后,送到一個(gè)10bit×14bit的有符號(hào)數(shù)的相乘累加器做相乘累加運(yùn)算。相乘后的數(shù)據(jù)寬度是24bit,但是由于對(duì)固定數(shù)據(jù)寬度的有符號(hào)的二進(jìn)制數(shù)進(jìn)行加減運(yùn)算時(shí),會(huì)出現(xiàn)結(jié)果超出固定數(shù)據(jù)寬度所能表示的范圍,即溢出現(xiàn)象,導(dǎo)致運(yùn)算結(jié)果錯(cuò)誤,所以就要為這里進(jìn)行的129次累加操作留有一定的數(shù)據(jù)寬度富裕量,每次把乘積符號(hào)擴(kuò)展4bit再進(jìn)行累加操作,這樣輸出就是一個(gè)28bit的有符號(hào)數(shù),即是所需的虛部。由于在將抽頭系數(shù)從十進(jìn)制到二進(jìn)制的歸一量化過程中,人為地將其擴(kuò)大了許多倍,所以與每個(gè)虛部相對(duì)應(yīng)的實(shí)部從中心抽頭輸出后,需經(jīng)過一個(gè)固定倍數(shù)的乘法器,擴(kuò)大同樣的倍數(shù)來與虛部保持一致。
相乘累加模塊是希爾波特變換部分的核心單元,這里用到了Stratix器件獨(dú)特的嵌入式DSP模塊。在Quartus的Megawizard Plus_In Manager中選擇ALTMULT_ACCUM(MAC)定制相乘累加模塊。首先系統(tǒng)會(huì)提示只有Stratix系列才可以定制此類型模塊,本例選擇的兩個(gè)輸入端分別是10位和14位的有符號(hào)數(shù),與RAM和ROM的輸出端相連,再將累加后的輸出端設(shè)為28位。這里有意預(yù)留了4位,用來防止在129次累加的過程中出現(xiàn)數(shù)據(jù)溢出的現(xiàn)象。將時(shí)鐘、使能、清零等設(shè)置好后,即可生成所需的相乘累加模塊,在編譯的過程中Quartus就會(huì)自動(dòng)把這部分配置到嵌入式DSP模塊中,而不去占用片內(nèi)的邏輯單元。這樣就把原本用幾個(gè)模塊完成的功能用單個(gè)模塊實(shí)現(xiàn)了,同時(shí)也提高了運(yùn)行的可靠性。
2.2 相關(guān)運(yùn)算部分
樣點(diǎn)值經(jīng)過希爾波特變換得到的實(shí)部和虛部兩部分,將分別存儲(chǔ)到兩個(gè)具有80個(gè)存儲(chǔ)單元的RAM中,同樣是采用循環(huán)寫入的方式,類似于DSP編程中的桶形存儲(chǔ)區(qū)。由于本文所應(yīng)用的短波系統(tǒng)采用的是每個(gè)碼元取五個(gè)采樣點(diǎn),而本地序列是一個(gè)碼元對(duì)應(yīng)一個(gè)數(shù)值,所以在做相關(guān)運(yùn)算時(shí)是從當(dāng)前的80個(gè)樣點(diǎn)值里,每隔4個(gè)點(diǎn)取一個(gè)值,共取出16個(gè)樣點(diǎn)值,依次與本地序列的16個(gè)值做相乘累加。下一次操作就把當(dāng)前樣點(diǎn)向后移一位,按同樣的方法取點(diǎn)運(yùn)算。這樣依次進(jìn)行,每一個(gè)樣點(diǎn)值都會(huì)產(chǎn)生一個(gè)與其相對(duì)應(yīng)的相關(guān)值。反映在FPGA內(nèi)部,就要求RAM從當(dāng)前存入的值開始,向前每隔4個(gè)單元取一個(gè)值作為輸出。這樣在一個(gè)樣點(diǎn)間隔內(nèi),就從RAM中依次讀出16個(gè)值,與從ROM中同步讀出的16個(gè)本地序列值做相關(guān)運(yùn)算。此時(shí)的相關(guān)運(yùn)算中的乘法就需要是復(fù)數(shù)相乘,其結(jié)果也是復(fù)數(shù),分兩路輸出實(shí)部和虛部,對(duì)這兩路結(jié)果分別進(jìn)行累加運(yùn)算,即可得到所需的相關(guān)值的實(shí)部和虛部。
復(fù)數(shù)相乘模塊是相關(guān)運(yùn)算部分中的重要環(huán)節(jié)。從RAM中讀出的實(shí)部和虛部組成的信號(hào)值,與從ROM中讀出的本地序列值,在這里要進(jìn)行復(fù)數(shù)相乘運(yùn)算。復(fù)數(shù)相乘模塊結(jié)構(gòu)圖如圖4所示,a、b、c、d分別代表信號(hào)和本地序列的實(shí)部和虛部,按照式子(a+jb)×(c+jd)=(ac-bd)+j(ad+bc)的組合進(jìn)行相乘加減。這里需要說明的是,考慮到后面要與DSP相連,數(shù)據(jù)的寬度被限制在32位。所以對(duì)于乘法器B和D而言,28bit與9bit相乘得到的結(jié)果應(yīng)是37bit。這里在定制乘法器的時(shí)候強(qiáng)行把它限制為32bit,去掉了最高位的多余符號(hào)位,舍去了低4位。這樣處理帶來的后果就是人為地將乘積縮小了16倍。如果對(duì)乘法器A和C的結(jié)果不做處理,直接進(jìn)行加減運(yùn)算,則結(jié)果將導(dǎo)致嚴(yán)重的錯(cuò)誤。因此對(duì)于乘法器A和C,應(yīng)該人為地將其輸出值右移4位,同樣地縮?。保侗叮龠M(jìn)行下一步的加減運(yùn)算,就可以有效地避免上述的錯(cuò)誤。這樣輸入的4個(gè)數(shù)值經(jīng)過幾個(gè)時(shí)鐘周期的運(yùn)算后,輸出的兩個(gè)數(shù)值就是所求的復(fù)數(shù)相乘結(jié)果。這里的4個(gè)有符號(hào)數(shù)乘法器都會(huì)在編譯時(shí)自動(dòng)地配置到Stratix器件的嵌入式DSP模塊上去。
2.3 總體控制模塊和接口部分
2.3.1 總體控制模塊
系統(tǒng)上電后,FPGA內(nèi)部各模塊都處于運(yùn)行狀態(tài),各個(gè)模塊相互連接,各自有運(yùn)行時(shí)序,所以為了保證各模塊依次先后運(yùn)作,并得出正確的結(jié)果,就需要一個(gè)指揮控制模塊對(duì)各模塊進(jìn)行準(zhǔn)確的控制。這里采用兩個(gè)工作在80MHz和40MHz時(shí)鐘下的主從計(jì)數(shù)器對(duì)相關(guān)部分和希爾波特變換部分各模塊進(jìn)行控制。在一個(gè)樣點(diǎn)間隔內(nèi),根據(jù)計(jì)數(shù)器不同的計(jì)數(shù)值,利用不同的組合邏輯電路產(chǎn)生各個(gè)模塊的使能、清零等信號(hào),保證各模塊在正確的時(shí)序下運(yùn)行。為了提高FPGA處理的效率,希爾波特變換部分和相關(guān)部分實(shí)際上是并行工作的。在同一個(gè)樣點(diǎn)間隔時(shí)間內(nèi),希爾波特變換部分處理的是當(dāng)前輸入的樣點(diǎn)數(shù)據(jù),而相關(guān)部分是在處理上一個(gè)樣點(diǎn)間隔內(nèi)希爾波特變換部分輸出的結(jié)果。這兩部分之間之所以能夠進(jìn)行相互協(xié)調(diào)和并行運(yùn)行,就是由于有來自總體控制模塊的各種控制信息。
2.3.2 接口部分
FPGA有兩個(gè)接口,一個(gè)與A/D接口,另一個(gè)與DSP接口。在與A/D的接口部分中,有三個(gè)輸入端data_in、FS和SLCK,data_in用來串行輸入A/D轉(zhuǎn)換來的樣點(diǎn)值;FS為幀同步信號(hào),它在輸入到FPGA后用來驅(qū)動(dòng)FPGA內(nèi)部的總體控制模塊;SCLK為移位時(shí)鐘,它控制A/D與FPGA之間數(shù)據(jù)串行傳輸?shù)囊莆?。在與DSP的接口部分中,data_out[15..0]用來輸出FPGA運(yùn)算的結(jié)果,與DSP的數(shù)據(jù)總線掛接在一起,在FPGA內(nèi)部設(shè)置一個(gè)三態(tài)門,開門信號(hào)就是FPGA的片選信號(hào)CE。當(dāng)CE不選通的時(shí)候,三態(tài)門輸出為高阻狀態(tài),不會(huì)影響DSP的數(shù)據(jù)總線。在每一個(gè)樣點(diǎn)間隔的時(shí)間內(nèi),FPGA運(yùn)算出相關(guān)值的實(shí)部和虛部,將它們分別鎖存在四個(gè)16bit鎖存器中,并將與DSP相連的data_ready信號(hào)置高電平,表示數(shù)據(jù)已經(jīng)準(zhǔn)備好。DSP檢測到data_ready為高后會(huì)進(jìn)行讀操作,用地址總線的高幾位產(chǎn)生出片選信號(hào)將FPGA選通,通過地址總線的低兩位A0、A1來選擇四個(gè)鎖存器的其中一個(gè),依次讀取實(shí)部和虛部兩個(gè)32位數(shù)的高16位和低16位。FPGA內(nèi)部會(huì)對(duì)DSP的讀操作計(jì)數(shù),確認(rèn)數(shù)據(jù)分四次讀出后,則將data_ready置低,直到下一次運(yùn)算完畢后再抬高。
3 仿真和校驗(yàn)
各子模塊設(shè)計(jì)好后,可以用圖形方式或文本方式將各個(gè)模塊連接起來,對(duì)頂層設(shè)計(jì)進(jìn)行編譯。這里選用的是Stratix系列中容量最小的一種:EP1S10F780C7,編譯后產(chǎn)生的編譯報(bào)告如圖5所示。
無論是片內(nèi)邏輯單元、片內(nèi)RAM還是DSP嵌入塊,所選的EP1S10F780C7芯片都還有相當(dāng)一部分余量。但是,如果是選用其它系列的芯片,沒有嵌入式的DSP模塊,最后其所占用的片內(nèi)邏輯單元會(huì)遠(yuǎn)不止這么多。
編譯完成后即可進(jìn)行仿真和校驗(yàn),這部分可分為三個(gè)過程。對(duì)于同一塊數(shù)據(jù),先在Quartus下進(jìn)行仿真,產(chǎn)生出一系列相關(guān)值。然后在MATLAB環(huán)境下利用其繪圖方便的特性,完全按照FPGA中各模塊處理數(shù)據(jù)的方法,編一段程序?qū)?shù)據(jù)進(jìn)行處理,并畫出處理結(jié)果的圖形,如圖6所示。理論上其處理結(jié)果應(yīng)和Quartus的仿真結(jié)果完全一樣,實(shí)際比較得出兩者確實(shí)完全一樣。最后在MATLAB中從理論上運(yùn)用純軟件的方法編一段程序,對(duì)數(shù)據(jù)進(jìn)行處理,并畫出處理后的相關(guān)峰圖,如圖7所示。
可以比較出這兩種圖形所顯示的相關(guān)峰的幅度與相對(duì)位置都基本一致。這就說明用FPGA對(duì)數(shù)據(jù)進(jìn)行處理的結(jié)果和理論方法的處理結(jié)果是吻合的,這也就驗(yàn)證了FPAG設(shè)計(jì)的正確性。由于FPGA所進(jìn)行的只是初相關(guān),所以圖7顯示的相關(guān)峰幅度不大,數(shù)據(jù)送到DSP后要進(jìn)行二次相關(guān)等處理,然后用于信號(hào)的捕獲和同步。
本文闡述了短波擴(kuò)頻通信系統(tǒng)中用于信號(hào)同步捕獲的數(shù)字相關(guān)器的FPGA實(shí)現(xiàn),并對(duì)所選的Stratix系列器件進(jìn)行了介紹。在384kbps的采樣速率下,由外部提供40MHz的時(shí)鐘,此相關(guān)器工作性能穩(wěn)定,運(yùn)算結(jié)果正確,能很好地配合DSP工作,完成對(duì)樣點(diǎn)數(shù)據(jù)的希爾波特變換和相關(guān)處理。
評(píng)論
查看更多