文獻標識碼: A
文章編號: 0258-7998(2012)09-0035-04
衛星導航系統作為先進的測量手段和新的生產力,已經廣泛用于國防建設和社會發展的各個領域[1]。作為比較成熟的衛星導航系統,全球定位系統(GPS)在人們的日常生活中發揮著重要的作用[2]。我國的北斗衛星導航系統也將在未來的10年中逐步實現全球覆蓋[3]。因此,設計具有自主知識產權的衛星導航芯片成為應對不斷發展壯大的衛星導航市場的當務之急。
衛星導航接收機可分成RF射頻前端模塊和數字基帶信號處理模塊兩部分[4]。RF射頻前端模塊把接收到的衛星信號轉變成數字中頻信號,然后交給數字基帶模塊進行處理;數字基帶模塊對數字中頻信號進行捕獲和跟蹤,并解調出導航電文,然后進行導航定位計算[5-6]。
以現有的GPS接收機為例,導航定位運算一般都是通過ARM處理器[7]或通用DSP芯片[8]進行。雖然這些通用處理器功能完善,但是資源龐大,結構復雜,對于導航定位運算來說會占用很多冗余資源,不僅造成資源浪費,而且功耗和成本也都大大提高。
本文針對衛星導航定位計算,設計了一種專用高精度運算處理器。該處理器基于自己的數據格式,不僅能夠實現加減乘除等基礎運算,而且通過數據調度和運算管理還能夠計算導航計算中用到的各種函數(如sin(x)、cos(x)、arctan(x)等)。FPGA驗證表明,該專用處理器運算速度快且精度高,同時具有很強的編程擴展能力。
1 數據格式和基礎運算
本論文定義的數據格式把一個數通過二進制有效值和2的指數這兩個部分的乘積表示,用40 bit表示一個數據,如圖1所示。低33 bit表示二進制有效值,其中第32位是二進制有效值的符號位(0表示正號,1表示負號),第31~0位表示二進制有效值的絕對值;第39~33位表示二進制指數,其中第39位是指數的符號位(0表示正號,1表示負號),其余位為指數絕對值。例如,40’h07_0000_0009表示的十進制實數為-9×23,如圖2所示。這種數據格式的表示方法與浮點數的表示方法類似,不僅能用較少的位數表示更大取值范圍的實數,而且計算精度更高。
在這種數據格式的基礎上運算處理器能實現的基礎運算包括加法、減法、乘法、除法、取模、取余、階乘(n!)和二次階乘(n!!),這些運算都是導航計算所必須的基礎運算。下面以加法、乘法、取模和階乘為例,分別說明處理器基礎運算的實現方式及精度保證措施。
(1)加法運算:首先判斷參與運算的兩個數指數是否相同,如果相同,則將兩數的有效值直接相加;否則將兩數的有效值進行移位使兩數指數相同,然后再將有效值相加。
對有效值進行移位的過程是,首先判斷指數較大數據(例如1大于-3)的有效值絕對值部分最高位是否為1,如果不為1,則將有效值左移1位,相應的指數減1,依此法重復,直到兩數的指數相同為止;如果為1,則將指數較小數據的有效值絕對值部分無條件地右移1位,同時其指數加1,直到兩數的指數相同為止。
指數相同時,有效值相加的過程是,首先判斷有效值符號位是否相同,如果相同則有效值絕對值部分直接相加,符號位保持不變;否則判斷有效值絕對值的大小,然后令大數減小數,相減結果的符號位與絕對值大的數據保持一致。減法的運算過程與加法類似。
(2)乘法運算:運算原則是指數相加,有效值相乘。指數相加過程是,首先判斷指數符號位是否相同,如果相同,則將指數絕對值直接相加,符號位保持不變;如果不同,則判斷指數絕對值部分大小,然后大數減小數,符號位與指數絕對值較大數的指數符號位保持一致。有效值相乘的過程是,首先判斷兩數有效值符號位是否相同,如果相同則令計算結果的有效值符號位為0,否則為1,然后再將有效值絕對值部分相乘。除法的運算原則與乘法類似。
(3)取模運算:首先將兩數進行除法運算,令運算結果的有效值符號位與被除數的有效值符號位相同。由于取模運算即是獲取除法運算結果的整數部分,所以判斷除法運算結果的指數符號位是否為0,如果為0,則表明除法運算的結果本身就是整數,即為所求取模運算的結果;如果為1,表明除法運算的結果是個小數,需要將除法運算結果有效值絕對值右移1位,同時指數加1,重復此法,直到指數為0,得到取模運算的結果。取余運算思想與取模類似。
(4)階乘運算:采用直接查表法。由于在導航定位運算中會用到階乘運算,一般計算到20的階乘就能達到足夠的精度,所以用case語句實現20以內正整數的階乘和二次階乘。這種用邏輯電路產生數據的方法,不僅計算速度快,而且避免了存儲器的使用。
以上所有基礎運算的實現方式和數據的表示形式都是以誤差最小、精度最高為目標,如果想要獲得更高的精度則需適當地擴展數據的表示位數。
2 處理器架構
本運算處理器不僅能完成上述基礎運算,通過數據的操作指令和基礎運算指令的配合,還可以完成各種導航計算所涉及函數的運算,處理器架構如圖3所示。
處理器主要由main模塊、基本指令集模塊、4個40 bit寄存器(A、B、C和D)、一個32×40 bit RAM和一個1 300×8 bit RAM構成。4個40 bit寄存器中的A、B和C寄存器用來存儲操作數據,D寄存器存儲運算結果數據;32×40 bit RAM是數據存儲器,用來存儲運算過程中會反復用到的中間值數據;1 300×8 bit RAM是函數子程序存儲器,用于存儲子函數程序。函數子程序存儲器中存放導航定位運算中需要用到的所有函數的子程序。函數子程序通過控制基本指令集模塊反復進行基礎運算和數據調度,實現各種函數的計算。
基本指令集模塊能夠完成的基本指令包括:(1)置數指令,對指定寄存器或數據存儲器置數;(2)數據傳送指令(寄存器到數據存儲器),將指定寄存器中的數據傳遞給指定數據存儲器;(3)數據傳送指令(數據存儲器到寄存器),將指定數據存儲器中的數據傳遞給指定寄存器;(4)數據互換指令,實現兩個指定寄存器間的數據互換;(5)指針跳轉指令,使程序指針跳轉到子程序存儲器指定位置;(6)定時指令,完成指定時間的延時;(7)比較指令,實現兩數比較大小,用于收斂判斷等操作;(8)運算結束指令,使程序指針停止增加,可通過外部指令喚醒;(9)基礎運算指令(集),包括加法指令、減法指令、乘法指令、除法指令、取模指令、取余指令、階乘指令和二次階乘指令。為了便于硬件測試,還專門增加了將運算結果通過USB上傳到PC的指令,該指令只用于開發階段,把硬件計算結果返回到PC以便分析。
函數子程序存儲器中存儲的函數子程序指令包括:sin(x)指令、cos(x)指令、arcsin(x)指令、arccos(x)指令、tan(x)指令、cot(x)指令、arctan(x)指令、arccot(x)指令和開方指令等。這些指令都接受一個計算精度參數,當達到精度時即停止迭代,精度最高為10-7。
運算處理器接收的宏指令可以包含上述所有基本指令和函數指令,main模塊的作用就是接收宏指令,判斷接收到的宏指令是基本指令還是函數指令。如果是基本指令,則轉發該指令到基本指令集模塊,調用基本指令集模塊完成操作,并將運算結果存儲在寄存器D中,指令執行完畢。如果是函數指令,則給出相應函數子程序在函數子程序存儲器中的起始地址,指針跳轉到起始地址,按照函數子程序里的基本指令順序執行。執行過程中會反復調用基本指令集模塊,以及不斷對寄存器和數據存儲器中數據進行讀取、存儲或者交換等操作,函數子程序執行完,將得到的運算結果存儲在寄存器D中,指令執行完畢。
下面以置數指令為例介紹指令傳送格式。首先發送指令編號字節,每個指令的編號都由一個字節表示,置數指令的編號為8’h01;接著發送指定要賦值的寄存器或數據存儲器的編號字節,同樣由一個字節表示,8’h00~8’h23依次代表數據存儲器0~31和寄存器A,B,C,D;最后發送數據字節,數據字節表示將要給寄存器或者數據存儲器賦的值,由5個字節(40 bit)表示,如圖4所示。例如發送指令字節為56’h01_21_00_00_00_00_16,其含義則是向寄存器B置十進制數22。
函數子程序存儲器的大小是由導航定位運算需要實現的函數個數和函數子程序的大小決定的。如果需要增加函數個數,可以對函數子程序存儲器的容量進行相應的擴展。
3 FPGA驗證
運算處理器性能的好壞主要由運算速度、精度、功耗、成本等幾方面決定。前面已經提到,本文設計的運算處理器是專用于導航定位計算的,沒有其他冗余電路,所以占用硬件資源少,功耗低,其硬件實現也使得處理器速度很快。下面將主要針對處理器的精度進行測試。
將運算處理器的Verilog HDL代碼編譯后,下裝到FPGA開發板里,然后通過USB向運算處理器發送宏指令,運算處理器接到指令進行處理,指令執行完畢后將得到的結果通過USB上傳給PC,即可判斷計算結果的正確性和計算精度。
以sin(x)計算為例,要想用基礎運算來實現sin(x),則需要將sin(x)進行泰勒展開
由于所有三角函數和反三角函數都可以用泰勒級數展開的形式或者相互之間的算術關系來實現,而開方也可以用快速收斂的簡單迭代公式y=(y2+x)/2x來實現,所以利用基本運算組合即可實現所有所需函數的運算。當然,在硬件支持的范圍內,通過算法調度,用戶也可以采用更好的算法實現函數計算。
本文設計了一個專用于導航基帶芯片設計的運算處理器,不同于ARM等通用微處理器,這種運算處理器采用自己的數據格式,并完成了基于這種數據格式的基礎運算以及多種數學函數的計算。FPGA驗證表明,處理器計算迅速準確,精度符合導航定位計算的要求。由于它是專門針對導航定位計算優化的處理器,因而更節省硬件資源,可大大降低功耗和成本,在低功耗導航芯片設計中具有很強的實用價值。
參考文獻
[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,Finland,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.