基于FPGA的SPI总线在软件接收机上的应用
扫描二维码
随时随地手机看文章
摘要:在软件接收机的研究中,为了实现在GPS或者北斗模式下基带对射频前端数据的采集,在Altera公司的CycloneⅢ系列FPGA器件上采用VERILOG语言编写了SPI总线协议,完成了对射频前端芯片GPS/北斗两种工作模式的切换,使基带可以随时获得两种模式下的数据。通过验证,采集来的数据与期望的结果一致。同时为工程设计提供了一种原型,也为进一步的工程开发奠定了基础。
关键词:SPI总线协议;FPGA;射频前端;基带
随着现代技术的发展,SPI接口总线已经成为了一种标准的接口,由于协议实现简单,并且I/O资源占用少,为此SPI总线的应用十分广泛。目前,SPI接口的软件扩展方法虽然简单方便,但若用来通信,则速度受到限制。因此,我们采用ALTERA公司的FPGA器件设计SPI总线的通信接口,该总线接口具有高速、配置灵活等优点,大大地缩短了系统的开发周期。
1 SPI总线原理
1.1 SPI总线协议简介
SPI总线是一种全双工同步串行接口,能够实现微控制器与外设通信。它采用主从模式架构,支持多slave模式应用,并且只占用芯片上四个管脚,节省了芯片的引脚。
1.2 SPI总线接口
SPI是一个环形总线结构,通常有4条线:串行时钟(SCK)线、主机输入/从机输出(MISO)数据线,主机输出/从机输入(MOSI)数据线和低电平有效的从机选择线(CS)。
SPI总线在与外设进行数据交换时,可根据外设的工作要求,配置SCK的相位和极性,从而产生不同的数据格式。如果时钟相位CPFIA=0,数据在时钟脉冲的前沿被采样;如果时钟相位CPHA=1,数据在时钟脉冲的后沿被采样。如果时钟的极性CPOL=0,串行数据的移位操作由时钟的正脉冲触发;如果时钟的极性CPOL=1,串行数据的移位操作由时钟的负脉冲触发。因此,SPI主模块和从模块的时钟相位和极性应该一致。
2 开发平台介绍
本文主要介绍在FPGA中实现基带对射频前端数据的采集,通过SPI总线实现对射频前端模式的转换。当射频前端被配置为GPS模式时,采集到的数据来自GPS卫星;当被配置为北斗模式时,采集到的数据来自北斗卫星。本文选用的芯片为杭州中科微有限公司HZG09V2D和ALTERA公司Cyclone III系列中的EP3C40Q240C8。接口之问的连接关系如图1所示。
HZG09V2D是杭州中科微有限公司的一款射频芯片,它是一款工作在L1频段的多模式卫星导航射频前端接收芯片,可支持L1频段中国北斗二代、美国GPS、俄罗斯GLONASS、欧洲伽利略等多个导航系统。
EP3C40Q240C8是Altera公司CycloneⅢ系列中的一款FPGA芯片,它前所未有地同时实现了低功耗、低成本和高性能。其中CycloneⅢFPGA在布局上提供丰富的存储器和乘法器资源,并且所有体系结构都含有非常高效的互联。
3 FPGA实现与调试结果
3.1 实现步骤
首先使用ModelSim SE 6.2对所编写的Verilog代码进行编译仿真,从而得到对功能的验证。再用QuartusⅡ软件进行编译后,将生成的编程文件.sof文件通过JTAG下载到Altera公司CycloneⅢ系列EP3C40Q240C8运行,在数字示波器的辅助分析下都得到了正确的结果。
3.2 模块设计
3.2.1 分频模块
由于SPI总线协议要求的SCK时钟频率与FPGA时钟频率不一致,所以对基带时钟进行分频。本文中,基带时钟频率为40 MHz,SPI总线时钟频率为1 MHz,故需要进行40倍分频。
3.2.2 发送数据模块
在片选信号拉低之前,时钟信必须为低电平。当片选信号拉低后,SCK开始工作,然后写八位地址,接着写32位数据;发送操作结束后,片选信号拉高,SCK=0。代码如下:
3.2.3 接收数据模块
当片选拉低后,SCK=0,同时写八位地址并且使SDA为高阻,再读32位数据;当片选拉高时,CS=1,SCK=0,此外,在片选信号拉低之前,SCK必须为低电平。代码如下:
3.2.4 配置模块
配置模块发送GPS/Compass模式配置命令给SPI功能模块,从而实现一次完整的射频前端工作模式配置。其中,射频前端有5个与SPI相关的配置寄存器,具体模式配置命令如下:
3.3 仿真结果
在GPS模式下,实现了寄存器的读写时序,如图2所示。
在GPS/Compass模式下,实现了5个地址的写操作和读操作。在基带处理中,将读出来的数据与设定好的配置的数据进行对比,当结果一致后,就完成了一次正确的配置操作。如图3所示。
3.4 RTL视图
RTL视图由两个模块组成,分别为ModeSet和newspi,其中ModeSet模块的功能是发送命令来配置射频前端的模式,newspi模块实现射频前端和基带之间具体的数据读写。如图4所示。
4 结语
在现代SPI总线得到了广泛的应用,它能够有效地与FPGA编程结合在一起,利用FPGA的灵活性,将大大减少了电子设计的开发周期。本文通过FPGA实现了射频前端GPS/北斗模式的切换,为将来射频前端多模设计奠定了基础,并且可通过外部器件查看读写操作是否完成,从而实现了实时配置。