張瀚青,王彥革,李上彥,彭一文,郭銀春,石云墀
(上海航天電子技術(shù)研究所,上海 201109)
在直接序列擴頻系統(tǒng)中,偽碼具有非常重要的作用。偽碼全稱為偽隨機噪聲(Pseudo-Random Noise,PRN)碼,又稱為擴頻碼。在發(fā)射端,數(shù)據(jù)通過調(diào)制速率遠高于數(shù)據(jù)速率的擴頻碼,達到擴寬頻譜的作用,利于信號的播發(fā),提高抗干擾性能。在接收端,利用擴頻碼良好的相關(guān)性能對接收信號進行解擴。解擴需要在本地生成與信號相對應(yīng)的偽碼,因此本地碼生成器是擴頻接收機必不可少的組成部分。
目前,接收機中偽碼發(fā)生器多采用在只讀存儲器(Read Only Memory,ROM)中存儲的方式。這種碼發(fā)生器裝置占用資源少,但是在惡劣太空環(huán)境下發(fā)生單粒子翻轉(zhuǎn)[1]難以修復,可靠性不足。根據(jù)奈奎斯特定理,系統(tǒng)時鐘至少是碼速率的2 倍。一些碼發(fā)生器采用分頻時鐘來實現(xiàn)碼速率的降頻[2-3],會對接收系統(tǒng)的時鐘同步性造成了影響。
本文設(shè)計了一種基于現(xiàn)場可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)的實時生成的碼發(fā)生器結(jié)構(gòu),利用雙端口RAM 兩個獨立的讀寫裝置和偽碼的周期性特點來對偽碼進行同時不間斷的寫入和讀出。寫數(shù)據(jù)基于系統(tǒng)時鐘計數(shù),讀數(shù)據(jù)利用NCO 技術(shù)輸出讀地址。在每個碼周期結(jié)束時對碼初相重新置位,減少了惡劣太空環(huán)境下碼翻轉(zhuǎn)對捕獲系統(tǒng)造成的影響,實現(xiàn)了全局時鐘下碼頻率的變頻處理,避免了FPGA 使用分頻時鐘造成的不穩(wěn)定性,同時通過控制讀地址和NCO 累加器的初值來控制輸出碼的相位,實現(xiàn)了高精度的可控相位輸出。該碼發(fā)生器可廣泛應(yīng)用于偽碼滑動相關(guān)的擴頻終端同步系統(tǒng)。
Gold 碼是直擴序列擴頻系統(tǒng)中常用的一種偽碼,具有生成容易和相關(guān)性能好的優(yōu)點[3]。Gold 碼由兩個相同級數(shù)的線性反饋移位寄存器所產(chǎn)生的相同長度的m序列經(jīng)異或相加實現(xiàn)[4]。
設(shè)Gold 碼特征多項式為:
式中,⊕為異或符號。
Gold 碼為周期性序列,其周期為2n-1,n為移位寄存器的階數(shù)。文中采用10 位的移位寄存器,則對應(yīng)碼周期為1 023。
對兩個寄存器設(shè)定相應(yīng)的初相,兩個寄存器的初相分別?。?/p>
則碼生成的原理如圖1 所示。
數(shù)控振蕩器(Numerical Controlled Oscillator,NCO)的作用是產(chǎn)生正交的正弦樣本和余弦樣本,通過查表法將事先根據(jù)各個正余弦波相位計算好相位的正余弦值[5]按照相位角度作為地址,存儲該相位的正余弦值,從而構(gòu)成一個幅度-相位轉(zhuǎn)換電路。圖2 為NCO 的一種電路設(shè)計,在系統(tǒng)時鐘控制下由相位累加器對輸入頻率控制字不斷累加,得到以該頻率控制字為步進的數(shù)字相位,再通過相位相加模塊進行初始相位偏移得到要輸出的當前相位。利用NCO 對數(shù)據(jù)變頻處理,具有頻率分辨率高、變化率快以及相位可連續(xù)線性變化等優(yōu)點。
圖2 NCO 原理
雙端口RAM 是在一個靜態(tài)隨機存儲器(Static Random Access Memory,SRAM)上同時具有兩套完全獨立的數(shù)據(jù)線、地址線和讀寫控制線,并允許兩個獨立的系統(tǒng)同時對該存儲器進行隨機性訪問,即共享式多端口存儲器。雙端口RAM 最大的特點是存儲數(shù)據(jù)共享。
本文采用Xilinx 公司的ISE 開發(fā)工具中的雙端口RAM 的IP(Intellectual Property)核。IP 核的接口如圖3 所示??梢钥闯?,一個存儲器上配備兩套獨立的地址——數(shù)據(jù)和使能,允許兩個獨立的CPU或控制器同時異步訪問存儲單元。因為數(shù)據(jù)共享,所以必須存在訪問仲裁控制。內(nèi)部仲裁邏輯控制提供對同一地址單元訪問的時序控制、存儲單元數(shù)據(jù)塊的訪問權(quán)限分配以及信令交換邏輯等功能。在讀寫地址不沖突的情況下,可以通過兩套獨立的讀寫地址和使能對數(shù)據(jù)進行讀寫操作。
碼生成器硬件生成方案如圖4 所示。在開始信號脈沖給出后,寫使能置為“1”,此后寫使能一直處于高電平,同時給出在一個碼周期長度循環(huán)累加的計數(shù)器作為寫地址。每次周期結(jié)束給出一個置位脈沖,對兩個移位寄存器的初相進行重新賦值。如果要對碼進行截短,則可以將置位脈沖設(shè)置到需要截位的碼相位上。
圖3 雙端口RAM 接口原理
由于雙端口RAM 可以同時進行讀操作和寫操作,設(shè)置碼NCO累加器的頻率控制字來控制讀地址,進而改變輸出碼的頻率。此時,輸出的碼速率為:
圖4 碼生成器原理
式中,fclk為系統(tǒng)時鐘,F(xiàn)CW為頻率控制字,L為累加器位寬。
設(shè)置兩個累加器cnt1和cnt2來進行累加器的進位檢測。cnt1的位寬為L,每次讀數(shù)開始脈沖給出后,對累加器賦相位初值。每個時鐘累加值為相位控制字FCW,對累加器cnt1延時一個時鐘得到cnt2。對cnt1和cnt2的最高位進行進位檢測,若兩個計數(shù)器發(fā)生進位,即當cnt2的最高位為“1”而cnt1的最高位變?yōu)椤?”時,認定cnt1發(fā)生進位,對讀地址加1。
碼初相的設(shè)置分為整數(shù)位和小數(shù)位兩部分,分別設(shè)定為參數(shù)int_phase 和deci_phase。整數(shù)位int_phase范圍為0~1 022,小數(shù)位x范圍為0~1,換算到累加器的位寬中則小數(shù)位初相deci_phase 可以表示為:
此時的輸出碼相位phase_out 為:
輸出數(shù)據(jù)的相位分辨率reso_phase 可以表示為:
具體的工作流程:在開始給出脈沖后,對寫地址賦高電平,寫地址開始累加,此后碼開始源源不斷地進行寫入;每個碼周期結(jié)束時給出置位脈沖,對移位寄存器的初相重新賦值,確保偽碼不因太空中的單粒子翻轉(zhuǎn)發(fā)生錯誤;對兩個移位寄存器的相位賦初值,動態(tài)刷新存儲器中的碼;讀數(shù)開始信號需要在一個完整碼周期的偽碼寫入存儲器之后給出,以確保讀寫操作不發(fā)生沖突;讀書開始脈沖給出后,讀使能賦高電平,對讀地址和累加器相位賦初值,此后變頻后的偽碼開始不間斷輸出。其中,雙端口RAM 的輸入位寬決定了可以同時寫入的偽碼通道數(shù)量;碼NCO 的累加器位寬、相位控制字和系統(tǒng)時鐘決定了輸出碼速率。
在Modelsim 上進行仿真,系統(tǒng)時鐘為10 MHz,碼速率為3.069 MHz,累加器位寬為32,帶入式(3)可得頻率控制字FCW為:
輸出碼初相取5.8,則可知個位數(shù)地址int_phase為5。小數(shù)位地址deci_phase 帶入式(4),可得:
deci_phase=0.8×232=3 435 973 837 (8)
由式(6)可得此時的碼相位分辨率reso_phase為:
仿真結(jié)果如圖5 所示,可以看出寫地址和讀地址有著不同的位寬,輸出碼速率已經(jīng)進行了降速處理,輸出碼相位也對應(yīng)了5.8 的設(shè)置值。
圖5 仿真結(jié)果
本文設(shè)計了一種實時生成的碼發(fā)生器結(jié)構(gòu),利用雙端口RAM 和偽碼的周期性特點來進行源源不斷地進行刷新存儲,減少了惡劣太空環(huán)境下碼翻轉(zhuǎn)對捕獲系統(tǒng)造成的影響,同時利用碼NCO 來實現(xiàn)全局時鐘下碼頻率的變頻處理,減少了在FPGA 使用分頻時鐘造成的不穩(wěn)定性。通過設(shè)置整數(shù)位相位初值和小數(shù)位相位初值實現(xiàn)碼相位的輸出變化,具有相位分辨率高和易于相位調(diào)整的優(yōu)點。此外,對碼發(fā)生器進行功能仿真,得到了設(shè)計預(yù)期的結(jié)果,可廣泛應(yīng)用于偽碼滑動相關(guān)的擴頻終端同步系統(tǒng)。