基于FPGA的GPS测距码的设计

  • IT技术
  • 2019-11-30
  • 人已阅读
简介GPS(全球定位系统)随着时代的发展,技术的进步,展现出非常广阔的应用前景,吸引了不同行业专家的热心研究和开发。本次设计是基于FPGA的GPS测距码的设计。设计使用VHDL语言进行FPGA开发设计,设计目标是设计完成GPS测距码的实现。

                      

... 2

Abstract 3

第一章 ... 4

1.1      选题的背景和目的... 4

1.2      选题相关领域概况... 4

1.2.1 FPGA简介... 4

1.2.2GPS简介... 5

1.2.3GPS卫星测距码简介... 6

第二章       测距码设计方案论证... 6

2.1  GPS测距码方案对比... 6

2.1.1  C/A... 6

2.1.2  P... 7

2.2  GPS距码的方案选择... 7

第三章       GPS C/A设计原理... 7

3.1  G1移位寄存器... 8

3.2  G2移位寄存器... 8

第四章       基于FGPAGPS C/A设计... 8

4.1     触发器的设计... 9

4.2     G1寄存器的设计... 10

4.3     G2寄存器的设计... 10

4.4     整合设计... 10

第五章       ... 10

第六章      ... 10

参考文献... 11

附  ... 11

 

 

 

GPS(全球定位系统)随着时代的发展,技术的进步,展现出非常广阔的应用前景,吸引了不同行业专家的热心研究和开发。

本次设计是基于FPGAGPS测距码设计

设计使用VHDL语言进行FPGA开发设计设计目标是设计完成GPS测距码的实现。

 

关键词:GPS测距码;FPGAVHDL

 

 

Abstract

With the evolution of the society and the technological progress, GPS (global positioning system) has shown an extremely broad application prospect and attracted lots of scientists from different professions to dedicate the research and the development.

The project mainly includes the design of the FPGA control chip and the design of the circuit of GPS receiver.

The design of FPGA control chip. This part uses VHDL language to FPGA development design. The object of the design is to complete the reception and the processing of the GPS module output data and to control

 

Keywords:GPS ranging code; FPGA; VHDL;

 

 

第一章 绪 论

1.1  选题的背景和目的

如今,市场上出现了越来越多GPSGlobal Position System, 全球定位系统)导航产品,包括手持GPS定位仪、车载GPS、蓝牙GPS以及GPS监控系统等。同时,在芯片市场上,FPGAField Programmable Gate Array,现场可编程门阵列)越来越多地取代了ASICApplication Specific Integrated Circuit,专用集成电路),特别是对小批量、多品种的产品需求,FPGA成为首选。FPGA设计开发采用功能强大的EDAElectronic Design Automatic , 电子设计自动化)工具,通过符合国际标准的硬件描述语言(VHDL(Very High Speed Integrated Circuit Hardware Description Language,甚高速集成电路硬件描述语言))来进行电子系统设计和产品开发,开发工具的通用性,设计语言的标准化以及设计过程几乎与所用的FPGA器件的硬件结构没有关系,所以设计成功的逻辑功能软件有很好的兼容性和可移植性,开发周期短,开发便捷。本次设计使用VHDL语言进行FPGA开发设计设计目标是设计完成GPS测距码的实现。

1.2   选题相关领域概况

   设计主要是用FPGAGPS测距码进行开发研究。

1.2.1 FPGA简介

FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PALGALEPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PALGALEPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

FPGA采用了逻辑单元阵列LCALogic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLBConfigurable Logic Block)、输出输入模块IOBInput Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:

a. 采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

b. FPGA可做其它全定制或半定制ASIC电路的中试样片。

c. FPGA内部有丰富的触发器和IO引脚。

d. FPGAASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

e. FPGA采用高速CHMOS工艺,功耗低,可以与CMOSTTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。目前FPGA的品种很多,有XILINXXC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROMPROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。

FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

1.2.2GPS简介

GPS是美军70年代初在“子午仪卫星导航定位”技术上发展而起的具有全球性、全能性(陆地、海洋、航空与航天)、全天候性优势的导航定位、定时、测速系统。由美国国防部投资建设,并免费向全世界民间用户开放。

GPS由空间部分、地面控制部分和用户部分组成:

空间部分由24GPS工作卫星所组成,这些GPS工作卫星共同组成了GPS卫星星座,其中21颗为可用于导航的卫星,3颗为活动的备用卫星,这24颗卫星分布在6个倾角为55°的轨道上绕地球运行,如图1-1所示。卫星的运行周期约为12恒星时。每颗GPS工作卫星都发出用于导航定位的信号。GPS接收机正是利用这些信号来进行工作的。

地面控制部分由分布在全球的若干个跟踪站所组成的监控系统构成,根据其作用的不同,这些跟踪站又被分为主控站、监控站和注入站。主控站有一个,位于美国克罗拉多(Colorado)的法尔孔(Falcon)空军基地,它的作用是根据各监控站对GPS的观测数据,计算出卫星的星历和卫星钟的改正参数等,并将这些数据通过注入站注入到卫星中去;同时,它还对卫星进行控制,向卫星发布指令,当工作卫星出现故障时,调度备用卫星,替代失效的工作卫星工作;另外,主控站也具有监控站的功能。监控站有五个,监控站的作用是接收卫星信号,监测卫星的工作状态;注入站有三个,注入站的作用是将主控站计算出的卫星星历和卫星钟的改正数等注入到卫星中去。

用户部分由GPS接收机、数据处理软件及相应的用户设备所组成。它的作用是接收GPS卫星所发出的信号,利用这些信号进行导航定位等工作。

 

 

 

1.2.3GPS卫星测距码简介

GPS卫星信号的组成 GPS卫星信号采用典型的码分多址(CDMA)调制技术进行合成,抗干扰性好,保密性强。其完整信号主要包括载波、伪随机码和数据码等三种分量。信号载波处于L波段,两载波的中心频率分别记作L1L2。卫星信号参考时钟频率f010.23MHz,信号载波L1的中心频率为f0154倍频,即: fL1=154×f0=1575.42MHz,其波长λ1=19.03cm;信号载波L2的中心频率为f0120倍频,即: fL2=120×f0=1227.60MHz,其波长λ2=24.42cm。两载波的频率差为347.82MHz,大约是L228.3%,这样选择载波频率便于测得或消除导航信号从GPS卫星传播至接收机时由于电离层效应而引起的传播延迟误差。伪随机噪声码(PRN)即测距码主要有精测距码(P码)和粗测距码(C/A码)两种。其中P码的码率为10.23MHzC/A码的码率为1.023MHz

数据码和两种伪随机码分别以同相和正交方式调制在L1载波上,而在L2载波上只用P码进行双相调制,因此L1L2的完整卫星信号分别为: SL1(t)=AcCi(t)Di(t)sin(ωL1t+φc)+ApPi(t)Di(t)cos(ωL1t+φP1) (1-1) SL2(t)=BpPi(t)Di(t)cos(ωL2t+φp2) (1-2)                              式中,ApBpAc分别为P码和C/A码的振幅;Pi(t)Ci(t)分别为对应P码和C/A码的伪随机序列码;Di(t)为卫星导航电文数据码;ωL1ωL2分别为L1L2载波信号的角频率;φCφP1φP2分别为C/A码和P码对应于载波的起始相位。合成的GPS信号向全球发射,随时随地供接收机解算导航定位信息使用。

 

 

 

第二章   测距码设计方案论证

2.1  GPS测距码方案对比

GPS卫星测距码分为P码和C/A码。

2.1.1  C/A

C/A码是由两个10级反馈移位寄存器相组合而产生的。

A. 码长Nu = 210-1=1023比特

B. 码元宽tu = 1/f10.977752μs(相应距离 为293.1m)

C. 周期Tu = Nu tu = 1ms

D. 数码率=1.023Mbit/s

C/A码的码长易于捕获,且通过C/A码提供的信息,又可方便的捕获P码。C/A码的码元宽度较大。假设两个序列的码元对齐误差,为码元宽度的1/100,则相应的测距误差达2.93-29.3m,用于民用领域,以因此也称粗测距码。

2.1.2  P

P码产生的基本原理与C/A码相似,但其发生电路,是采用两种各由两个12级反馈移位寄存器构成的,情况更为复杂。

A. 码长Nu 2.35*1014比特

B. 码元宽度tu 0.0977752μs(相应距离 为29.3m)

C. 周期Tu = Nu tu 267

D. 数码率=10.23Mbit/s

P码周期被分为38部分(7/每一部分周期,码长约为6.19*1012比特),其中1部分闲置,5部分给地面监控站使用,32部分分配给不同的卫星。这样,每颗卫星所使用的P码不同部分,便都具有相同的码长和周期,但结构不同。P码的码长较长,无法采用C/A码逐个进行搜索。一般都是先捕获C/A码,然后根据导航电文中给出的有关信息,捕获P码。P码是军用测距码,精度很高,可达0.29-2.93m,因此也叫精测距码。

2.2  GPS测距码的方案选择

因为P码产生线路十分复杂,为军方专用,且线路设计细节保密。C/A产生线路相对简单,用于民用用途,较为常见,所以在本设计中选择C/A设计

 

 

 

 

 

第三章   GPS C/A设计原理

GPS C/A码是戈尔德码,其序列长度为1023位(基码数)。因为C/A码的基码速率是1.023MHz,因此随机序列的重复周期是1ms。图3.1描述了GPS C/A码的结构方案。有两个10位的移位寄存器G1G2,它们产生长度为1023位的最大长度噪声(PN)码(移位寄存器不允许进入的状态是全0状态)。通常用1+Σxi 形式的多项式描述线性码发生器的方案,这里xi指移位寄存器的第i级的输出用作模2加法器的输入,而1指将加法器的输出馈送到第1级。C/A码是经时延的G2输出序列和G1直接输出序列异或的结果。

 

 

 

 3.1

            3-1 C/A码产生原理图

3.1  G1移位寄存器

C/A码的设计规范要求G1移位寄存器的反馈抽头连到第3和第10级。这两个抽头的寄存器状态用异或电路相互合并,并反馈到第1级。描述这一移位寄存器方案的多项式是G1=1+x3+x10G1的初始状态为1111111111

3.2  G2移位寄存器

   C/A码的设计规范要求G2移位寄存器的反馈抽头连到第23689和第10级。和G1寄存器一样,这些存储单元的输出状态用异或电路相互合并,并反馈到第1级。但是,因为C/A码是经时延的G2输出序列和G1直接输出序列异或的结果,所以要想得到G2PN码,必须要经过时延,G2PN码经过时延效果输出是由某两个存储单元的输出异或而获得的。这是因为PN码序列有这样的性质:与其自身的相移序列相加,结果仍然是个PN码序列,只是相位变了。图3-1G2移位寄存器的两个虚线表示的“抽头”的作用是,相对于G1的码相位而移动G2的码相位,而不需要外加一个移位寄存器以完成这一过程。每个C/A码与G2的两个抽头位置相关联。因为不同的抽头组合,对应不同的时延。C/A码的设计规范各个抽头对所对应的C/A码基码数,也规定了C/A码基码数对对应的等效时延。描述G2移位寄存器方案的多项式是G2=1+x2+x3+x6+x8+x9+x10,G2的初始状态和G1一样。

 

 

 

第四章   基于FGPAGPS C/A设计

    根据上一章的原理分析,不难看出,GPS C/A码的产生,基于一个较为复杂的时序逻辑电路,本设计将使用VHDL语言完成基于FGPAGPSC/A设计。具体设计步骤为先设计触发器,然后分别设计G1移位寄存器和G2移位寄存器的产生过程,最后对两者产生的序列进行异或,完成C/A码的设计。这样设计对程序的分析和检查修改都很有好处。

4.1    触发器的设计

C/A码产生器中的两个10级反馈移位寄存器,于每个星期六子夜零时,全部被置于“1”状态,可见其寄存器中的触发器为异步的复位触发器。就是说只要在复位控制端输入有效信号,输出端的值就将被设成逻辑“1”。

4.1 异步复位触发器

 

 

          4.1 异步复位触发器真值表                                                                                 

reset

d

clk

q

qd

0

1

0

1

0

保持

保持

1

1

保持

保持

1

0

上升沿

0

1

1

1

上升沿

1

0

       

带异步复位控制端的上升沿触发器的电路符号图如图4.1所示,它除了有一个数据输入端d,一个时钟输入端clk和两个反相的输出端qqd以外,还有一个复位控制端reset。这个触发器的真值表如表4.1所示。根据以上原理编写设计程序。用VHDL语言描述如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

 

ENTITY dff IS

 PORT(d,clk:IN STD_LOGIC;

      Reset:IN STD_LOGIC;

       q,qd:OUT STD_LOGIC);

END dff;

 

ARCHITECTURE rlt OF dff IS

BEGIN

PROCESS(clk,reset)

BEGIN

   IF(reset=’0’)THEN

        q<=’1’;

        qb<=’0’;

   ELSIF(clk’EVENT AND clk=’1’)THEN

        q<=d;

        qd<=NOT d;

    END IF;

 END PROCESS;

 END rtl;

       

 

 

 

4.2    G1寄存器的设计

 

               4-2  G1寄存器

   根据C/A码的设计原理,我们可以制出G1移位寄存器的图如图4-2,第一个触发的输入端d1用来接收G1移位寄存器的输入信号,其余触发器的输入端均与前一个触发器的输出端q相连。这样就可以实现输入的数据在时钟边沿的作用下,逐位向后移动,最后在输出端d0输出并将移位寄存器中的ddf3ddf10触发器状态反馈到输入端。G1寄存器是触发器的组合,用COMPONENT语句引用在上一节中编写的触发器的描述,不难写出G1寄存器的描述,应特别注意的是,寄存器中所有存储单元的初始状态都为“1”,在使用赋值语句时,不能将q(0)也赋值,在VHDL描述中各信号符号的表示,全依据图4-2,具体代码见附录。

4.3    G2寄存器的设计

4-3  G2寄存器

   G2寄存器比G1寄存器较为复杂,如图4-3。不但要将寄存器中第2368910级中的状态异或后反馈到第1级,还要在输出时加上延时,G2的最后输出是选择G2移位寄存器中的某两个存储单元的输出进行模2相加后的输出,而这两个储存单元的选择影响着延时的大小,不同的选择,对应着不同的等效延时。应特别注意的是,在本设计中,我选择了第6和第9级存储单元的输出相异或,在VHDL描述中各信号符号的表示,全依据图4-3,具体VHDL代码见附录。

4.4    整合设计

   G1G2寄存器用VHDL设计好后,将两个部分的输出异或后,就可得到C/A码,也称GOLD码。1023个不同结构的C/A码,足够24个卫星分址使用,这组C/A码的码长、周期和数码率相同。

 

 

第五章     

 

     

第六章 

本次设计得到了陈飞老师的大力支持和指导,在论文的编写过程中陈老师为我指导论文重点,在论文的整理过程中杨老师多次审阅论文,提出了完善的修改意见,在后期的工作中陈老师更是时时督促,多次跟我讨论论文中的重点、难点问题。在此对于陈老师对我的关心和帮助,我谨以我个人名义表示最衷心的感谢,祝老师身体健康,万事如意!

参考文献

 

 

 

 

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

 

ENTITY dff1 IS

 PORT(d:IN STD_LOGIC;

      clk:IN STD_LOGIC;

      Reset:IN STD_LOGIC;

      q:OUT STD_LOGIC;

     qb:OUT STD_LOGIC);

END dff1;

 

ARCHITECTURE structure_1 OF dff1 IS

BEGIN

PROCESS(clk,reset)

BEGIN

   IF(reset='0')THEN

        q<='1';

        qb<='0';

   ELSIF(clk'EVENT AND clk='1')THEN

        q<=d;

        qb<=NOT d;

    END IF;

 END PROCESS;

 END structure_1;

 

 

--G1

  LIBRARY IEEE;

 USE IEEE.STD_LOGIC_1164.ALL;

 

  ENTITY shift_1 IS

  PORT(cp:IN STD_LOGIC;

       d0:OUT STD_LOGIC);

END shift_1;

 

ARCHITECTURE structure_2 OF shift_1 IS

SIGNAL q:STD_LOGIC_VECTOR(10 DOWNTO 1):="1111111111";

SIGNAL d1:STD_LOGIC_VECTOR;

BEGIN

PROCESS(cp)

BEGIN

IF(cp'EVENT AND cp='0')THEN

d1<=q(3) XOR q(10);

q(1)<=d1;

 

ELSIF(cp'EVENT AND cp='1')THEN

COMPONENT dff1

 PORT(d:IN STD_LOGIC

      clk:IN STD_LOGIC;

       q:OUT STD_LOGIC);

       END COMPONENT;

l1:FOR i IN 1 TO 9 GENERATE

    dffx:dff1 PORT MAP(q(i),cp,q(i+1));

END GENERATE l1;

 d0<=q(10);

END structure_2;   

 

 

--λòƼÄ′æÆ÷G2

 LIBRARY IEEE;

 USE IEEE.STD_LOGIC_1164.ALL;

 

 ENTITY shift_2 IS

  PORT(

       cp:IN STD_LOGIC;

       d3:OUT STD_LOGIC);

END shift_2;

 

ARCHITECTURE structure_3 OF shift_2 IS

SIGNAL q:STD_LOGIC_VECTOR(10 DOWNTO 1):="1111111111";

SIGNALd2:STD_LOGIC_VECTOR;

BEGIN

IF(cp'EVENT AND cp='0')THEN

d2<=q(2)XORq(3)XORq(6)XORq(8)XORq(9)XORq(10);

d3<=q(6) XOR q(9);

q(1)<=d2

 

ELSIF(cp'EVENT AND cp='1')THEN

COMPONENT dff1

 PORT(d:IN STD_LOGIC;

      clk:IN STD_LOGIC;

      q:OUT STD_LOGIC);

END COMPONENT;

l2:FOR i IN 1 TO 9 GENERATE

dffx:dff1 PORT MAP(q(i),cp,q(i+1));

END GENERATE l2;

END structure_3

 

--C/AÂëéú3é

LIBRARY IEEE;

 USE IEEE.STD_LOGIC_1164.ALL;

 

ENTITY code_ca IS

PORT(g1:IN STD_LOGIC;

     g2:IN STD_LOGIC;

     clock:IN STD_LOGIC;

     ca:OUT STD_LOGIC);

END code_ca;

 

 ARCHITECTURE structure_4 OF code_ca IS

COMPONENT shift_1

 PORT(cp:IN STD_LOGIC;

      d0:OUT STD_LOGIC);

END COMPONENT;

COMPONENT shift_2

PORT(cp:IN STD_LOGIC;

     d3:OUT STD_LOGIC);

END COMPONENT;

SIGNAL a:STD_LOGIC_VECTOR;

SIGNAL b:STD_LOGIC_VECTOR;

BEGIN

U1:shift_1 PORT MAP(clock,a);

U2:shift_2 PORT MAP(clock,b);

g1<=a;

g2<=b;

ca=g1 XOR g2;

END structure_4;

 

 

文章评论

共有条评论来说两句吧...

用户名:

验证码:

Top