1、本科毕业设计论文基于FPGA的GPS伪码NCO设计06级通信工程1班 黄彦东指导教师:朱耀麟目 录GPS伪码NCOGPS伪码软件实现过程GPS伪码NCO的时序仿真结论与展望GPSGPS伪码伪码NCONCO伪码伪码NCONCO的作用的作用:伪码NCO模块是GPS接收机中的信号处理单元中重要组成部分,在信号处理单元中,数字中频载波N CO、码N CO控制、码N CO生成及相关加法、乘法单元共同完成由载波频率控制和相位控制到载波调制。码NCO是码跟踪环的核心,它的主要功能是再生本地伪码,包括即时码和超前滞后码,以保证对接收信号的码跟踪。码NCO设置有频率控制字,频率控制字负责码率的调整。下图为伪码N
2、CO在GPS接收机中的结构位置:低噪声放大器下变频器A/D转换器信号处理导航解算GPS天线RF数字中频图1 GPS接收机一般结构接收机处理积分累加器积分累加器积分累加器积分累加器积分累加器积分累加器Sin映射Cos映射载波NCO码产生器码NCO E P L三位移位寄存器时钟fc时钟fc每时钟周期码相位增量数字中频fcoIesIpsIlsQesQpsQls图2 信号处理模块框图基本结构基本结构:伪码NCO(Numerically Controlled Oscillator,数控振荡器)包括码NCO时钟发生器和伪码发生器两部分,伪码NCO时钟发生器提供码发生器的时钟,通过控制码NCO时钟发生器就可
3、以实时地调整本地码的相位。伪码NCO的产生结构图如下图:累加器相位增量寄存器伪码发生器伪随机序列图3 伪码NCO结构图基本原理基本原理:伪码NCO采用累加器结构实现,时钟信号fin的频率为62MHz系统时钟,相位累加器按输入的工作频率fin(即采样频率)进行累加,每次的累加量为增量寄存器(即频率控制字fcntrl)的内容。当累加器加满溢出时,推动码产生器产生下一个码元输出,输出的码率fo由相位增量哥存器的内容决定。输入与输出频率之间的关系可表示如下:inncntrlofff2 (1)产生的时钟信号的频率分辨率fmin可由下式计算:ninff2min(2)码NCO要能够分辨该码率变化量,并能将该
4、变化量修正到码率上。这就要求码NCO要有足够的相位累加字长,来满足频率分辨率的要求。当码NCO的相位累加器字长为31位时,频率分辨率为:HzMHzffnin028.0262231min电路原理图电路原理图:32位相位累加器更新寄存器32位寄存器伪码产生器6位移位寄存器计数器3位移位寄存器图4 电路原理图GPSGPS伪码伪码NCONCO软件设计过程软件设计过程设计流程图设计流程图:系统时钟累加器累加累加器第32位溢出?计数器加1;驱动伪码器输出计数器1021?计数器清0;更新寄存器更新频率控制字半码标志位=1&本地时钟=1?累加器值=接受半码片的最低位NYNYYN模块化设计模块化设计:根据伪码N
5、CO的电路原理图可将伪码NCO模块分为:更新寄存器模块、相位累加器模块、寄存器模块、更新时钟产生器模块、伪码序列产生器模块、移位寄存器模块,这些模块既可独立完成各自的功能、又能互相协同构成一个整体来完成系统的总体功能,各个模块用VHDL语言设计完成,在QuartusII7.2软件中实现。(1)更新寄存器 更新寄存器实际上就是一个32位的并行输入并行输出的寄存器。更新寄存器用来对频率控制字的短暂存储,当伪随机序列产生一个周期时更新时钟产生器产生更新时钟,驱动更新寄存器中暂存的频率控制字更新。用VHDL语言编程生成的模块图形如图1.1:n32ParameterValueresetclockdata
6、inn-1.0dataoutn-1.0jicunqiinst1reset:复位clock:时钟信号输入datain:更新频率控制字输入dataoutdataout:频率控制字输出(2)相位累加器 相位累加器是实际上是对加法器的输出端引回输入端,对更新寄存器输出的频率控制字进行累加,用VHDL语言编程生成的模块图形如图2.1:图1.1banmabzbanmabdclkclka31.0b31.0sum31.0add32instbanmabz:半码片标志banma:半码片输入bdclk:本地时钟clk:系统时钟a:加数1b:加数2sum:和输出(3)寄存器模块 寄存器为32位并行输入输出最高位的寄存
7、器,它用来暂存累加器输出的和,并将累加器和的第32位输出作为伪码发生器的驱动时钟。用VHDL语言编程生成的模块图形如图3.1:图2.1n32ParameterValueclockdatainn-1.0c_32jicunqi32inst2clock:驱动时钟datain:并行输入端c_32:最高位输出(4)更新时钟产生器 更新时钟产生器实际上是一个计数器计数长度为一个伪随机序列的周期,伪随机序列为两个10级移位寄存器产生的m序列延迟后进行模2加产生,两个m序列的周期均为,所以计数器的长度为1023。用VHDL语言编程生成的模块图形如图4.1:图3.1(5)伪码产生器 伪随机序列产生器模块是伪码N
8、CO模块的核心,是两个10级的m序列经过相位延迟进行模二和而形成的复码,它的原理图如下:clkclrencocnt1023inst3clk:驱动时钟clr:清零端en:使能端co:更新时钟输出图4.1a0a1a3a2a4a5a6a7a8a9b0b1b3b2b4b5b6b7b8b9全部置1相位选择器clkloadclkNiG1G2G图5 伪码产生器原理图G1和G2的特征方程为:10311xxG109863221xxxxxxGG1与G2的码长为L1=L2=1023码元,复合码的生成式为:)()()(021tNtGtGtGi式中:t0为伪码的码元宽度,Ni为G1与G2间相位延迟的码元数,通过选择Ni
9、可产生一系列独立的伪随机序列。不同卫星所用的伪随机序列不同,故不同的卫星所对应的Ni也不同。伪码产生器用软件实现起来比较简单。用VHDL语言编程生成的模块图形如图5.1:(6)移位寄存器器 伪码NCO模块共包含两个移位寄存器,它们都是右移寄存器。移位寄存器一jicunqi6是6位的移位寄存器输出超前、即时、滞后伪码移位寄存器二mov_jicunqi是一个三位寄存器。用VHDL语言编程生成的模块图形如图6.1和6.2:clkenloaddata9.0N3.0loutweima_generatorinst4clk:驱动时钟en:使能端load:伪码生成器初值预置标志data:伪码生成器初值预置N:
10、相位延迟数lout:伪码输出端图 5.1n6ParameterValueclockserinrchaoshimajishimazhihoumajicunqi6inst6n3ParameterValueclockserinrrenew_clkmov_jicunqiinst7clock:驱动时钟serinr:右移输入端chaoshima:超时码输出jishima:即时码输出zhihouma:滞后码输出clock:驱动时钟serinr:右移输入端renew_clk:更新时钟输出端图6.1 移位寄存器1图6.2 移位寄存器2GPS伪码NCO的时序仿真仿真步骤(1)新建工程:运行QuartusII7.2
11、新建一个工程,命名为NCO,在新建 的工程下创建add32.vhd、jicunqi.vhd、jicunqi32.vhd、mov_jicunqi.vhd、jicunqi6.vhd、weima_generator.vhd、cnt1023.vhd等文件,把相应的VHDL程序写入相应的文件中并保存。建好的工程如下图6:(2)两种连线方法:方法一:创建nco.vhd文件写入源程序保存,通过程序连线。生成的.bsf文件如图7。方法二:创建nco.bdf文件并将add32.vhd、jicunqi.vhd、jicunqi32.vhd、mov_jicunqi.vhd、jicunqi6.vhd、weima_gen
12、erator.vhd、cnt1023.vhd等文件生成相应的.bsf文件,在nco.bdf文件中调用这些文件,按照原理图连线连线图如下图8。(3)运行nco.vhd文件或者运行nco.bdf文件.(4)创建文件nco.vwf文件并保存,然后打开node finder窗口,打开方法:view菜单utility windowsnode finder,在node finder窗口中找到nco的端口添加到nco.vwf窗口中。(5)对引脚进行赋值进行仿真。仿真结果如图9、图10、图11、图12。图6工程NCO返回图7 伪码NCO模块的封装返回图8 伪码NCO各模块连线图返回图9 Ni=3,fcw=01
13、010110011110000001001000110100 返回图10 Ni=7 fcw=01010110011110000001001000110100 返回图11 Ni=7 fcw=01000101010001010100010101000101 返回图12 预置捕获到的半码片数 返回仿真结果分析仿真结果分析:时序仿真时采用的系统时钟是100MHz。当Ni=3 fcw=01010110011110000001001000110100时与Ni=7 fcw=01010110011110000001001000110100时比较图4与图5可见得到的伪随机序列不同,图4中伪码周期为T1=60.5
14、6-30.31=30.25us,图5中伪码周期为T2=60.55-30.31=30.24us,两个伪码周期基本相同。当Ni=7 fcw=01010110011110000001001000110100时与Ni=7 fcw=01000101010001010100010101000101,时比较图5和图6可见得到的伪随机序列相同,图5伪码周期T2=60.55-30.31=30.24us,图6伪码周期T3=75.65-37.81=37.84us两个伪码周期不同。不同的卫星所用的伪随机序列是不同的,只要调整Ni和fcw就可以得到适合不同卫星的伪随机序列。图7是预置捕获到的半码片数的时序仿真波形,仿真
15、时系统时钟仍然采用100MHz,当半码片标志位(banmabz)为1且本地时钟(bdclk)为高电平时,系统将捕获到的半码片数最低位(banma)预置给累加器。本地时钟本应该是1ms的脉冲,由于仿真的时序时间太长会加长仿真软件运行仿真的时间,所以在仿真时图4.5所示的(bdclk)的脉冲是通过波形编辑工具(waveform editing tool)加上去的。如图中所示当本地时钟冲击来到之后的伪码波形是预置半码片数后的伪码。结论与展望 本课题在描述了GPS接收机整体框架的基础之上,对其中的伪码NCO模块进行了详细的研究,并采用QuartusII软件对其进行仿真。主要创新点是:(1)有详细的算法的描述过程;(2)采用模块化设计,简单易懂;(3)用QuartusII软件进行多次仿真;(4)对比分析得出结论。本设计主要采用了软件设计,没有进行硬件实现主要原因是由于伪码NCO只是GPS系统中的一个很小的模块,它的输入信号是由上一级的信号处理器送予的,不是一个完全独立的模块,而且若用硬件实现的话至少需要一片FPGA芯片,用整个FPGA芯片只实现伪码NCO是一种浪费。Thanks For Your Attention Thanks For Your Attention The End