文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)09-0035-04
衛(wèi)星導(dǎo)航系統(tǒng)作為先進(jìn)的測(cè)量手段和新的生產(chǎn)力,已經(jīng)廣泛用于國(guó)防建設(shè)和社會(huì)發(fā)展的各個(gè)領(lǐng)域[1]。作為比較成熟的衛(wèi)星導(dǎo)航系統(tǒng),全球定位系統(tǒng)(GPS)在人們的日常生活中發(fā)揮著重要的作用[2]。我國(guó)的北斗衛(wèi)星導(dǎo)航系統(tǒng)也將在未來(lái)的10年中逐步實(shí)現(xiàn)全球覆蓋[3]。因此,設(shè)計(jì)具有自主知識(shí)產(chǎn)權(quán)的衛(wèi)星導(dǎo)航芯片成為應(yīng)對(duì)不斷發(fā)展壯大的衛(wèi)星導(dǎo)航市場(chǎng)的當(dāng)務(wù)之急。
衛(wèi)星導(dǎo)航接收機(jī)可分成RF射頻前端模塊和數(shù)字基帶信號(hào)處理模塊兩部分[4]。RF射頻前端模塊把接收到的衛(wèi)星信號(hào)轉(zhuǎn)變成數(shù)字中頻信號(hào),然后交給數(shù)字基帶模塊進(jìn)行處理;數(shù)字基帶模塊對(duì)數(shù)字中頻信號(hào)進(jìn)行捕獲和跟蹤,并解調(diào)出導(dǎo)航電文,然后進(jìn)行導(dǎo)航定位計(jì)算[5-6]。
以現(xiàn)有的GPS接收機(jī)為例,導(dǎo)航定位運(yùn)算一般都是通過(guò)ARM處理器[7]或通用DSP芯片[8]進(jìn)行。雖然這些通用處理器功能完善,但是資源龐大,結(jié)構(gòu)復(fù)雜,對(duì)于導(dǎo)航定位運(yùn)算來(lái)說(shuō)會(huì)占用很多冗余資源,不僅造成資源浪費(fèi),而且功耗和成本也都大大提高。
本文針對(duì)衛(wèi)星導(dǎo)航定位計(jì)算,設(shè)計(jì)了一種專(zhuān)用高精度運(yùn)算處理器。該處理器基于自己的數(shù)據(jù)格式,不僅能夠?qū)崿F(xiàn)加減乘除等基礎(chǔ)運(yùn)算,而且通過(guò)數(shù)據(jù)調(diào)度和運(yùn)算管理還能夠計(jì)算導(dǎo)航計(jì)算中用到的各種函數(shù)(如sin(x)、cos(x)、arctan(x)等)。FPGA驗(yàn)證表明,該專(zhuān)用處理器運(yùn)算速度快且精度高,同時(shí)具有很強(qiáng)的編程擴(kuò)展能力。
1 數(shù)據(jù)格式和基礎(chǔ)運(yùn)算
本論文定義的數(shù)據(jù)格式把一個(gè)數(shù)通過(guò)二進(jìn)制有效值和2的指數(shù)這兩個(gè)部分的乘積表示,用40 bit表示一個(gè)數(shù)據(jù),如圖1所示。低33 bit表示二進(jìn)制有效值,其中第32位是二進(jìn)制有效值的符號(hào)位(0表示正號(hào),1表示負(fù)號(hào)),第31~0位表示二進(jìn)制有效值的絕對(duì)值;第39~33位表示二進(jìn)制指數(shù),其中第39位是指數(shù)的符號(hào)位(0表示正號(hào),1表示負(fù)號(hào)),其余位為指數(shù)絕對(duì)值。例如,40’h07_0000_0009表示的十進(jìn)制實(shí)數(shù)為-9×23,如圖2所示。這種數(shù)據(jù)格式的表示方法與浮點(diǎn)數(shù)的表示方法類(lèi)似,不僅能用較少的位數(shù)表示更大取值范圍的實(shí)數(shù),而且計(jì)算精度更高。
在這種數(shù)據(jù)格式的基礎(chǔ)上運(yùn)算處理器能實(shí)現(xiàn)的基礎(chǔ)運(yùn)算包括加法、減法、乘法、除法、取模、取余、階乘(n?。┖投坞A乘(n?。。@些運(yùn)算都是導(dǎo)航計(jì)算所必須的基礎(chǔ)運(yùn)算。下面以加法、乘法、取模和階乘為例,分別說(shuō)明處理器基礎(chǔ)運(yùn)算的實(shí)現(xiàn)方式及精度保證措施。
(1)加法運(yùn)算:首先判斷參與運(yùn)算的兩個(gè)數(shù)指數(shù)是否相同,如果相同,則將兩數(shù)的有效值直接相加;否則將兩數(shù)的有效值進(jìn)行移位使兩數(shù)指數(shù)相同,然后再將有效值相加。
對(duì)有效值進(jìn)行移位的過(guò)程是,首先判斷指數(shù)較大數(shù)據(jù)(例如1大于-3)的有效值絕對(duì)值部分最高位是否為1,如果不為1,則將有效值左移1位,相應(yīng)的指數(shù)減1,依此法重復(fù),直到兩數(shù)的指數(shù)相同為止;如果為1,則將指數(shù)較小數(shù)據(jù)的有效值絕對(duì)值部分無(wú)條件地右移1位,同時(shí)其指數(shù)加1,直到兩數(shù)的指數(shù)相同為止。
指數(shù)相同時(shí),有效值相加的過(guò)程是,首先判斷有效值符號(hào)位是否相同,如果相同則有效值絕對(duì)值部分直接相加,符號(hào)位保持不變;否則判斷有效值絕對(duì)值的大小,然后令大數(shù)減小數(shù),相減結(jié)果的符號(hào)位與絕對(duì)值大的數(shù)據(jù)保持一致。減法的運(yùn)算過(guò)程與加法類(lèi)似。
(2)乘法運(yùn)算:運(yùn)算原則是指數(shù)相加,有效值相乘。指數(shù)相加過(guò)程是,首先判斷指數(shù)符號(hào)位是否相同,如果相同,則將指數(shù)絕對(duì)值直接相加,符號(hào)位保持不變;如果不同,則判斷指數(shù)絕對(duì)值部分大小,然后大數(shù)減小數(shù),符號(hào)位與指數(shù)絕對(duì)值較大數(shù)的指數(shù)符號(hào)位保持一致。有效值相乘的過(guò)程是,首先判斷兩數(shù)有效值符號(hào)位是否相同,如果相同則令計(jì)算結(jié)果的有效值符號(hào)位為0,否則為1,然后再將有效值絕對(duì)值部分相乘。除法的運(yùn)算原則與乘法類(lèi)似。
(3)取模運(yùn)算:首先將兩數(shù)進(jìn)行除法運(yùn)算,令運(yùn)算結(jié)果的有效值符號(hào)位與被除數(shù)的有效值符號(hào)位相同。由于取模運(yùn)算即是獲取除法運(yùn)算結(jié)果的整數(shù)部分,所以判斷除法運(yùn)算結(jié)果的指數(shù)符號(hào)位是否為0,如果為0,則表明除法運(yùn)算的結(jié)果本身就是整數(shù),即為所求取模運(yùn)算的結(jié)果;如果為1,表明除法運(yùn)算的結(jié)果是個(gè)小數(shù),需要將除法運(yùn)算結(jié)果有效值絕對(duì)值右移1位,同時(shí)指數(shù)加1,重復(fù)此法,直到指數(shù)為0,得到取模運(yùn)算的結(jié)果。取余運(yùn)算思想與取模類(lèi)似。
(4)階乘運(yùn)算:采用直接查表法。由于在導(dǎo)航定位運(yùn)算中會(huì)用到階乘運(yùn)算,一般計(jì)算到20的階乘就能達(dá)到足夠的精度,所以用case語(yǔ)句實(shí)現(xiàn)20以?xún)?nèi)正整數(shù)的階乘和二次階乘。這種用邏輯電路產(chǎn)生數(shù)據(jù)的方法,不僅計(jì)算速度快,而且避免了存儲(chǔ)器的使用。
以上所有基礎(chǔ)運(yùn)算的實(shí)現(xiàn)方式和數(shù)據(jù)的表示形式都是以誤差最小、精度最高為目標(biāo),如果想要獲得更高的精度則需適當(dāng)?shù)財(cái)U(kuò)展數(shù)據(jù)的表示位數(shù)。
2 處理器架構(gòu)
本運(yùn)算處理器不僅能完成上述基礎(chǔ)運(yùn)算,通過(guò)數(shù)據(jù)的操作指令和基礎(chǔ)運(yùn)算指令的配合,還可以完成各種導(dǎo)航計(jì)算所涉及函數(shù)的運(yùn)算,處理器架構(gòu)如圖3所示。
處理器主要由main模塊、基本指令集模塊、4個(gè)40 bit寄存器(A、B、C和D)、一個(gè)32×40 bit RAM和一個(gè)1 300×8 bit RAM構(gòu)成。4個(gè)40 bit寄存器中的A、B和C寄存器用來(lái)存儲(chǔ)操作數(shù)據(jù),D寄存器存儲(chǔ)運(yùn)算結(jié)果數(shù)據(jù);32×40 bit RAM是數(shù)據(jù)存儲(chǔ)器,用來(lái)存儲(chǔ)運(yùn)算過(guò)程中會(huì)反復(fù)用到的中間值數(shù)據(jù);1 300×8 bit RAM是函數(shù)子程序存儲(chǔ)器,用于存儲(chǔ)子函數(shù)程序。函數(shù)子程序存儲(chǔ)器中存放導(dǎo)航定位運(yùn)算中需要用到的所有函數(shù)的子程序。函數(shù)子程序通過(guò)控制基本指令集模塊反復(fù)進(jìn)行基礎(chǔ)運(yùn)算和數(shù)據(jù)調(diào)度,實(shí)現(xiàn)各種函數(shù)的計(jì)算。
基本指令集模塊能夠完成的基本指令包括:(1)置數(shù)指令,對(duì)指定寄存器或數(shù)據(jù)存儲(chǔ)器置數(shù);(2)數(shù)據(jù)傳送指令(寄存器到數(shù)據(jù)存儲(chǔ)器),將指定寄存器中的數(shù)據(jù)傳遞給指定數(shù)據(jù)存儲(chǔ)器;(3)數(shù)據(jù)傳送指令(數(shù)據(jù)存儲(chǔ)器到寄存器),將指定數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)傳遞給指定寄存器;(4)數(shù)據(jù)互換指令,實(shí)現(xiàn)兩個(gè)指定寄存器間的數(shù)據(jù)互換;(5)指針跳轉(zhuǎn)指令,使程序指針跳轉(zhuǎn)到子程序存儲(chǔ)器指定位置;(6)定時(shí)指令,完成指定時(shí)間的延時(shí);(7)比較指令,實(shí)現(xiàn)兩數(shù)比較大小,用于收斂判斷等操作;(8)運(yùn)算結(jié)束指令,使程序指針停止增加,可通過(guò)外部指令喚醒;(9)基礎(chǔ)運(yùn)算指令(集),包括加法指令、減法指令、乘法指令、除法指令、取模指令、取余指令、階乘指令和二次階乘指令。為了便于硬件測(cè)試,還專(zhuān)門(mén)增加了將運(yùn)算結(jié)果通過(guò)USB上傳到PC的指令,該指令只用于開(kāi)發(fā)階段,把硬件計(jì)算結(jié)果返回到PC以便分析。
函數(shù)子程序存儲(chǔ)器中存儲(chǔ)的函數(shù)子程序指令包括:sin(x)指令、cos(x)指令、arcsin(x)指令、arccos(x)指令、tan(x)指令、cot(x)指令、arctan(x)指令、arccot(x)指令和開(kāi)方指令等。這些指令都接受一個(gè)計(jì)算精度參數(shù),當(dāng)達(dá)到精度時(shí)即停止迭代,精度最高為10-7。
運(yùn)算處理器接收的宏指令可以包含上述所有基本指令和函數(shù)指令,main模塊的作用就是接收宏指令,判斷接收到的宏指令是基本指令還是函數(shù)指令。如果是基本指令,則轉(zhuǎn)發(fā)該指令到基本指令集模塊,調(diào)用基本指令集模塊完成操作,并將運(yùn)算結(jié)果存儲(chǔ)在寄存器D中,指令執(zhí)行完畢。如果是函數(shù)指令,則給出相應(yīng)函數(shù)子程序在函數(shù)子程序存儲(chǔ)器中的起始地址,指針跳轉(zhuǎn)到起始地址,按照函數(shù)子程序里的基本指令順序執(zhí)行。執(zhí)行過(guò)程中會(huì)反復(fù)調(diào)用基本指令集模塊,以及不斷對(duì)寄存器和數(shù)據(jù)存儲(chǔ)器中數(shù)據(jù)進(jìn)行讀取、存儲(chǔ)或者交換等操作,函數(shù)子程序執(zhí)行完,將得到的運(yùn)算結(jié)果存儲(chǔ)在寄存器D中,指令執(zhí)行完畢。
下面以置數(shù)指令為例介紹指令傳送格式。首先發(fā)送指令編號(hào)字節(jié),每個(gè)指令的編號(hào)都由一個(gè)字節(jié)表示,置數(shù)指令的編號(hào)為8’h01;接著發(fā)送指定要賦值的寄存器或數(shù)據(jù)存儲(chǔ)器的編號(hào)字節(jié),同樣由一個(gè)字節(jié)表示,8’h00~8’h23依次代表數(shù)據(jù)存儲(chǔ)器0~31和寄存器A,B,C,D;最后發(fā)送數(shù)據(jù)字節(jié),數(shù)據(jù)字節(jié)表示將要給寄存器或者數(shù)據(jù)存儲(chǔ)器賦的值,由5個(gè)字節(jié)(40 bit)表示,如圖4所示。例如發(fā)送指令字節(jié)為56’h01_21_00_00_00_00_16,其含義則是向寄存器B置十進(jìn)制數(shù)22。
函數(shù)子程序存儲(chǔ)器的大小是由導(dǎo)航定位運(yùn)算需要實(shí)現(xiàn)的函數(shù)個(gè)數(shù)和函數(shù)子程序的大小決定的。如果需要增加函數(shù)個(gè)數(shù),可以對(duì)函數(shù)子程序存儲(chǔ)器的容量進(jìn)行相應(yīng)的擴(kuò)展。
3 FPGA驗(yàn)證
運(yùn)算處理器性能的好壞主要由運(yùn)算速度、精度、功耗、成本等幾方面決定。前面已經(jīng)提到,本文設(shè)計(jì)的運(yùn)算處理器是專(zhuān)用于導(dǎo)航定位計(jì)算的,沒(méi)有其他冗余電路,所以占用硬件資源少,功耗低,其硬件實(shí)現(xiàn)也使得處理器速度很快。下面將主要針對(duì)處理器的精度進(jìn)行測(cè)試。
將運(yùn)算處理器的Verilog HDL代碼編譯后,下裝到FPGA開(kāi)發(fā)板里,然后通過(guò)USB向運(yùn)算處理器發(fā)送宏指令,運(yùn)算處理器接到指令進(jìn)行處理,指令執(zhí)行完畢后將得到的結(jié)果通過(guò)USB上傳給PC,即可判斷計(jì)算結(jié)果的正確性和計(jì)算精度。
以sin(x)計(jì)算為例,要想用基礎(chǔ)運(yùn)算來(lái)實(shí)現(xiàn)sin(x),則需要將sin(x)進(jìn)行泰勒展開(kāi)
由于所有三角函數(shù)和反三角函數(shù)都可以用泰勒級(jí)數(shù)展開(kāi)的形式或者相互之間的算術(shù)關(guān)系來(lái)實(shí)現(xiàn),而開(kāi)方也可以用快速收斂的簡(jiǎn)單迭代公式y(tǒng)=(y2+x)/2x來(lái)實(shí)現(xiàn),所以利用基本運(yùn)算組合即可實(shí)現(xiàn)所有所需函數(shù)的運(yùn)算。當(dāng)然,在硬件支持的范圍內(nèi),通過(guò)算法調(diào)度,用戶(hù)也可以采用更好的算法實(shí)現(xiàn)函數(shù)計(jì)算。
本文設(shè)計(jì)了一個(gè)專(zhuān)用于導(dǎo)航基帶芯片設(shè)計(jì)的運(yùn)算處理器,不同于ARM等通用微處理器,這種運(yùn)算處理器采用自己的數(shù)據(jù)格式,并完成了基于這種數(shù)據(jù)格式的基礎(chǔ)運(yùn)算以及多種數(shù)學(xué)函數(shù)的計(jì)算。FPGA驗(yàn)證表明,處理器計(jì)算迅速準(zhǔn)確,精度符合導(dǎo)航定位計(jì)算的要求。由于它是專(zhuān)門(mén)針對(duì)導(dǎo)航定位計(jì)算優(yōu)化的處理器,因而更節(jié)省硬件資源,可大大降低功耗和成本,在低功耗導(dǎo)航芯片設(shè)計(jì)中具有很強(qiáng)的實(shí)用價(jià)值。
參考文獻(xiàn)
[1] HEGARTY C J,CHATRE E.Evolution of the global navigation satellite system(GNSS)[J].Proc.IEEE,2008,96(12):1902-1917.
[2] RAASAKKA J,HURSKAINEN H,NURMI J.GNSS baseband processing in a multi-core platform[C].International Conference on Localization and GNSS.Tampere,F(xiàn)inland,2011:42-46.
[3] CHEN J C,ZHANG D J,GAO X H.Research of beidou system in electric power system time service[C].China International Conference on Electricity Distribution. Guangzhou,china,2008:1-5.
[4] WU P,HE C,ZONG Z L.A novel correlation architecture of acquisition for GNSS satellite navigation system receiver based on CORDIC algorithm[C].International Conference on Computational Problem-Solving. Chengdu,China,2010:115-121.
[5] ZHAO L,GAO S H,LI P F,et al.The design and validation of RF front-end platform for GPS receiver[C].IEEE International Conference on Information and Automation. Harbin,China,2010:519-522.
[6] ZHUANG W H,TRANQUILLA J.Digital baseband processor for the GPS receiver modeling and simulations[J].IEEE Transactions on Aerospace and Electronic Systems,1993,29(4):1343-1349.
[7] WANG B,DONG J X.The system of GPS navigation based on ARM processor[C].International Forum on Information Technology and Applications.Taiyuan,China,2010:308-312.
[8] ZENG Q X,WANG Q,PAN S G,et al.A GPS L1 software receiver implementation on a DSP platform[C].International Conference on Intelligent Networks and Intelligent System,Nanjing,China,2008:612-615.