当前位置:首页 > 作文大全 >

一种基于POWERPC+FPGA的无线系统设计与实现

发布时间: 2022-03-24 09:23:38 浏览:

摘 要:在军事、抢险、应急通信等复杂环境中对无线系统需求日益增多以及多样化,本文提出一种基于PowerPC+FPGA的无线系统来应对无线系统需求和多样化的需求,阐述了硬件设计与现实,引导程序uboot、嵌入式操作系统linux、设备树如何对新平台支持与实现,以及FPGA驱动的设计与实现。实验结果显示,本文设计的无线系统硬件设计合理,uboot和linux工作稳定,FPGA驱动设计合理高效,实现无线系统之间点对点的通信,满足设计要求。

关键词:PowerPC;FPGA;CompactPCI;嵌入式操作系统;PCI;PCIe;eLBC;eTSEC

中图分类号:TP391.41

在军事、抢险、应急通信等复杂环境中对无线通信系统需求日益增多,同时现有的通信网络结构又无法满足对这些复杂环境下的移动性、抗毁性、鲁棒性、易构性等要求[1]。随着嵌入式处理器设计和工艺的发展,嵌入式处理器的性能越来越高,基于嵌入式的无线系统可以很好的满足这种复杂环境下的应用,同时也能满足体积和功耗限制的要求。本文选择用PowerPC和FPGA来实现无线通信系统的设计;PowerPC实现对操作系统的支持,FPGA实现了无线通信的链路层和物理层,方便无线通信链路层和物理层的更新,应对通信系统多样化的需求,PowerPC的CPU和FPGA都有工业级的芯片,能很好满足复杂工作环境下的要求。

本文介绍基于PowerPC+FPGA的无线系统的硬件设计与现实,描述引导程序、嵌入式操作系统、设备树如何对新平台的支持与实现,以及FPGA驱动的设计与实现。

1 设计硬件结构

基于FPGA+FPGA的无线系统可以支持一路无线信号收发也可以支持多路无线信号收发,为了兼容性和互换性,以及项目整体设计和结构要求,设计时把CPU+FPGA放在一个板卡:网络基带板,ADC、DAC和射频部分放在一个板卡:射频板,射频板实现了一路无线信号的接收和发射;网络基带板和射频板都做成6U CompactPCI标准,通过背板连接。网络基带板主要由CPU核心模块、FPGA模块、系统电源、复位及上电配置电路、系统时钟电路组成如图1。其中CPU核心模块电路主要包括CPU处理器、FLASH存储器、DDR2 SDRAM存储器、RS232串口、JTAG接口、两个千兆以太网接口、三个USB2.0接口、一个MiniPCIe接口、一个PCI接口等;FPGA部分主要包括DDR2 SDRAM、SPI FLASH、RS232、LVDS和CMOS信号接口。射频板主要由ADC、DAC、正交调制/解调电路、混频器、频率综合器、滤波器、功率放大器、LNA以及天线组成,目前实现了一路无线信号发射和一路无线信号接收功能。本文主要介绍网络基带板的设计。

图1 无线系统网络基带硬件系统结构图

1.1 设计CPU模块

CPU选择freescale的MPC8536E处理器,使用两片16bit数据宽度NOR Flash(每片128MB),其中一片Flash存储引导程序、操作系统和文件系统,一片Flash存储应用软件和日志文件,保证系统软件和应用软件的隔离,防止系统软件被迫坏;使用四片16bit DDR2 SDRAM组成64位的数据宽度实现512MB内存;CPU的UART控制器连接RS232 Transceiver实现一个RS232接口,CPU的两个eTSEC以太网控制器分别连接以太网PHY芯片实现两个千兆以太网接口,CPU的PCI控制器直接连接到CompactPCI的J1连接器上实现32位PCI接口,PCI接口根据连接到背板的槽位来决定工作在host模式还是device模式,CPU的PCIe控制器直接连接miniPCIe连接器实现一个PCIe接口。CPU的三个USB控制器分别连接USB PHY芯片实现三个USB host接口。CPU模块实现操作系统的支持和对无线信号的收发控制、无线网络和以太网络路由转发或者网桥等功能

1.2 设计FPGA模块

FPGA选择xilinx 的XC5VLX50T,使用一片SPI flash(32Mb)提供FPGA配置文件的存储、使用四片16bit DDR2 SDRAM组成64位数据宽度存储器(512MB),提供CMOS和LVDS信号接口和一路RS232接口与射频板进行通信。FPGA模块实现链路层、发射机和接收机物理层。发射机物理层主要完成FEC编码、交织、加扰、脉冲分组、同步插入、频率分配、GMSK调制、脉冲成型等功能;接收机物理层主要完成同步检测、时钟频率回复、多普勒估计与消除、GMSK解调、解扰、解交织、FEC解码等功能[2]。

1.3 设计电源、复位及上电配置电路

系统电源取自CompactPCI接口提供的5V和3.3V,根据芯片电压、功耗、上电顺序要求,选择TPS54910、TPS51116、TPS74401来进行电源变换,提供的网络基带板芯片所需电源,使用电源芯片的使能ENA信号、电源正确输出指示信号PWRGD和逻辑电路来实现上电顺序。

根据CPU和FPGA以及外围芯片的电源规格,CPU芯片上电顺序要求比较严格,FPGA的上电顺序没有限制;因此电源设计以CPU上电顺序为准。

CPU工作电压上电顺序如下:

(1)VDD_PLAT,AVDD,BVDD,LVDD,OVDD,SVDD,S2VDD,TVDD,XVDD and X2VDD;

(2)等待POWER_EN使能,来控制VDD_CORE电压输出;

(3)GVDD[3]。

复位电路主要完成系统中芯片的复位功能,选择复位芯片同时监控电源,使用逻辑电路监控各个电源的输出指示信号,同时逻辑电路还监控PCI总线的工作模式是host还是device来选择PCI总线复位信号的输出还是输入,最后经过逻辑电路给出系统复位信号,对CPU、FPGA以及外围芯片进行复位。

上电配置电路主要完成上电过程中的功能配置,CPU需要上电配置CCB平台时钟、e500 core时钟、DDR工作时钟、SYSCLK输入时钟、CPU启动模式、以太网网络接口工作模式、PCI接口及工作时钟、PCIe接口工作模式等[4]。

1.4 设计系统时钟电路

系统时钟电路为系统中芯片提供时钟,其中CPU时钟信号有输入时钟SYSCLK、PCI控制器输入时钟PCI_CLK、RTC输入时钟RTC_CLK、DDR内存控制器输入时钟DDRCLK、PCIe控制器输入时钟、eTSEC以太网控制器输入时钟。CPU输入时钟SYSCLK、PCI_CLK、RTC_CLK、DDRCLK可以工作在同步模式也可以工作在异步模式,本设计把SYSCLK、RTC_CLK、DDRCLK时钟设置在同步模式,共用同一时钟源SYSCLK,通过CPU内部的锁相环电路倍频和分频得到相应的工作频率,而PCI控制器时钟选择异步模式,PCI接口工作在设备模式输入时钟来自CompactPCI接口,PCI接口工作在host模式输入时钟来自时钟驱动器CDCVF2505。选择9FG108EGILF来提供CPU的PCIe控制器的时钟输入和MiniPCIe接口的时钟,CPU的以太网控制器时钟输入使用以太网PHY芯片产生125MHz的时钟。

对于PCIe控制器的正常工作,CPU要求内部CCB平台时钟必须大于或等于[4],本设计选择PCI Express link with为1。

1.5 设计印制电路板

印制电路的设计首先考虑叠层结构和阻抗要求,其次是布局、设置布线规则,最后是PCB布线。完成PCB设计文件,还需完成制板和焊接,印制电路板布线图和实物图如图2。

图2 无线系统网络基带板电路板图

2 引导程序uboot和操作系统linux

引导程序选用uboot,uboot是由德国DENX开发,目前支持多种嵌入式CPU,不仅能支持嵌入式linux的引导,还支持NetBSD、VxWorks、QNS等嵌入式操系统。操作系统选择开源嵌入式操作系统linux,支持多种嵌入式CPU;uboot和linux使用设备树来提供硬件相关信息的配置。

2.1 引导程序

uboot选择u-boot-200908的版本,并添加补丁以对CPU MPC8536E的支持(补丁从freescale网站下载)。打完补丁之后添加对网络基带平台MPC8536CPCI的支持;支持新的MPC8536E设计平台需要如下步骤:

(1)在uboot文件目录下的Makefile文件添加如下信息

MPC8536CPCI_config:unconfig

@$(MKCONFIG)–t$(@:_config=) MPC8536CPCI ppc mpc85xx mpc8536cpci freescale

(2)添加MPC8536CPCI.h文件

在uboot文件目录下include/configs/下添加MPC8536CPCI.h文件,文件给出CPU以及集成PCI、PCIe、DDR SDRAM、eLBC、eTSECs控制器相应寄存器的设置值和CCSRBAR寄存器的重映射地址、Flash的扇区大小、容量大小;根据选用的DDR2 SDRAM芯片给出DDR2 SDRAM控制器寄存器设置值;以太网PHY芯片地址和串口终端及其波特率等。

(3)添加mpc8536cpci目录

在uboot文件目录的board/freescale下添加mpc8536cpci目录,然后在此目录下添加mpc8536cpci.c、ddr.c、law.c、tlb.c、config.mk、Makefile等6个文件;实现对CPU和DDR SDRAM控制器、TLB进行相应的硬件初始化工作。

(4)配置和编译

先设置好交叉编译器Gcc路径

PATH=$PATH:/opt/freescale/usr/local/gcc-4.3.74-eglibc-2.8.74-dp-3/powerpc-none-linux-gnuspe/bin/

#make distclean;

#make MPC8536CPCI_config;

#make

最后得到u-boot.bin(512KB)文件,通过freescale仿真器USB TAP连接网络基带板的CPU Jtag接口,把u-boot.bin烧写到0xfff80000地址(MPC8536E上电之后从0xfffffffc开始执行[4])之后,从新上电网络基带板,调试uboot。

2.2 设备树

设备树是描述硬件配置的数据结构,包括CPU、内存、Flash、PCI总线、PCIe总线、串口、PHY等设备信息,linux操作系统对于所有的PowerPC平台支持在启动时使用了Open Firmware风格的设备树传递给内核,操作系统能在启动时候解析这个设备树并决定如何配置内核和加载哪些驱动程序[5]。设备树被组织为树形结构,有且仅有单一的根节点,每个节点都有一个名字和可能有任意数量的子节点。节点也可以具有一组可选的包含属性和属性值,属性值可以是数字、字符、字符串或其他数据结构,设备树中数据格式遵循IEEE 1275标准。设备树编译工具(Device Tree Compiler)dtc把设备树源文件(Device Tree Source)dts格式编译成被操作系统识别的二进制设备树(Device Tree blob)dtb格式文件[5]。

在linux目录arch/powerpc/boot/dts/目录下有设备树参考文件,对支持网络基带板需要在此目录下的添加mpc8536cpci.dts文件,其中根节点下model定义平台名称,平台名称要唯一性,compatible是指兼容的平台,定义如下:

model="dhc,mpc8536cpci";

compatible="fsl,mpc8536ds";

其次是flash布局信息、以太网芯片PHY地址、USRT、SPI、USB、PCI、PCIe控制器信息配置。

flash@0,0{

partition@0 {

label = " kernel";

reg = <0x00000000 0x00400000>;

};

partition@400000 {

label = " rootfs ";

reg = <0x00400000 0x07b00000>;

};

partition@7F40000 {

label = " dts";

reg = <0x07F40000 0x00020000>;

};

partition@7F60000 {

label = " env";

reg = <0x07F60000 0x00020000>;

};

partition@7F80000 {

label = "uboot";

reg = <0x07F80000 0x00080000>;

};

};

flash@1,0 {

partition@0 {

label = "user1";

reg = <0x00000000 0x04000000>;

};

partition@4000000 {

label = "user2";

reg = <0x04000000 0x04000000>;

};

};

最后完成mpc8536cpci.dts文件,使用dtc命令对mpc8536cpci.dts进行编译,命令如下:

#dtc–O dtb-o mpc8536cpci.dtb–b 0-I dts mpc8536cpci.dts

2.3 操作系统

linux选用2.6.32-rc5的版本,并添加补丁文件对CPU的支持(补丁从freescale官网下载),打完补丁之后,在此基础上添加本系统MPC8536CPCI的支持。内核对每个平台都定义一个machdep_calls数据结构,内核调用probe_machine函数遍历machine_desc表,并调用machdep_calls对应的.probe()钩子函数,每个.probe()检查设备树并返回真,决定设备树支持该平台的代码[5]。支持新的MPC8536E设计平台需要如下步骤:

(1)在linux目录下arch/powerpc/platfroms/85xx目录下添加mpc8536_cpci.c文件;此文件调用define_machine宏来定义硬件平台相关的数据结构machdep_calls,并完成其相应成员函数的定义。

(2)arch/powerpc/platfroms/85xx/Kconfig文件中添加对MPC8536CPCI的支持,在if MPC85xx条件语句内添加如下信息,支持MPC8536_CPCI配置。

config MPC8536_CPCI

bool “Freecale MPC8536E CompactPCI board”

select DEFAULT_UIMAGE

select SWIOTLB

help

This option enables support for MPC8536E CompactPCI board

(3)在arch/powerpc/platfroms/85xx/Makefile中关联配置变量和文件,在最后添加一行:

obj-$(CONFIG_MPC8536_CPCI) += mpc8536_cpci.o

(4)配置和编译内核

#make distclean

#make ARCH=powerpc menuconfig

#make ARCH=powerpc CROSS_COMPILE=powerpc-none-linux-gnuspe- uImage

最后得到内核镜像文件uImage,在网络基带板启动之后,在uboot下把uImage和mpc8536cpci.dtb分别通过tftp下载到网络基带板卡指定的内存空间,并通过bootm命令引导linux启动,命令如下(文件系统使用ramdisk,使用freescale提供的版本进行调试):

=>tftp 1000000 uImage;tftp 2000000 rootfs.ext2.gz.uboot

=>tftp c00000 mpc8536cpci.dtb;bootm 1000000 2000000 c00000

3 FPGA驱动设计与实现

FPGA驱动程序实现了无,实现一路无线信号的发射和接收。CPU通过SPI总线与FPGA进行通信,在驱动设计上把FPGA驱动程序按照网络驱动来设计,方便实现以太网络和到FPGA无线的路由转发或者网桥功能。FPGA网络驱动主要包括驱动模块初始化,网络设备数据结构初始化,网络设备访问方法的实现,FPGA寄存器访问控制[7]。

FPGA接口驱动模块初始化:首先定义spi_driver类型数据结构fpga_driver,然后在驱动模块初始化函数中调用spi_register_driver()函数注册fpga_driver[8]。

static struct spi_driver fpga_driver ={

.driver = {

.name = “fpga_net”,

.owner = THIS_MODULE,

},

.probe = fpga_probe,

.remove = __devexit_p(fpga_remove),

};

网络设备数据结构初始化,首先要定义私有数据结构类型fpga_net、然后在fpga_driver的钩子函数.probe()中使用alloc_etherdev分配net_device数据结构,调用netdev_priv分配fpga_net类型数据结构,关联net_device和fpga_net类型的数据结构,关联net_device与net_device_ops类型数据结构;关联中断信号、注册中断处理函数、关联FPGA寄存器访问函数,最后调用register_netdev函数完成net_device类型数据结构注册。

typedef struct fpga_net{

sruct net_device *netdev;

struct spi_device * spidev;

….

};

static int _devinit fpga_probe(struct spi_device *spi)

{

struct net_device *ndev;

struct fpga_net *ks;

ndev = alloc_etherdev(sizeof(struct fpga_net));

ks = netdev_priv(ndev);

ks->netdev = ndev;

ks->spidev = spi;

……

dev_set_drvdata(&spi->dev, ks);

ndev->if_port = IF_PORT_100BASET;

ndev->netdev_ops = &fpga_netdev_ops;

ndev->irq = spi->irq;

ret = request_irq(spi->irq, fpga_net_irq, IRQF_TRIGGER_LOW,

ndev->name, ks);

ret = register_netdev(ndev);

……

}

设备访问方法的实现,主要对关键数据结构net_device_ops成员函数的实现,包括打开网络、关闭网络、数据发送、数据接收、ioctl调用、mac地址设置等,还有FPGA寄存器访问控制函数。中断处理函数主要完成接收队列的调度工作。

static const struct net_device_ops fpga_netdev_ops ={

.ndo_open = fpga_net_open,

.ndo_stop = fpga_net_stop,

.ndo_do_ioctl = fpga_net_ioctl,

.ndo_start_xmit = fpga_net_start_xmit

.ndo_set_mac_address = fpga_net_mac_address,

.ndo_set_rx_mod = fpga_set_rx_mode,

.ndo_change_mtu = eth_change_mtu

.ndo_validate_addr = eth_validate_addr,

};

最后完成驱动设计,还需在mpc8536cpci.dts文件中添加对fpga驱动的支持;并编译最新的mpc8536cpci.dts得到mpc8636cpci.dtb,然后编译fpga驱动模块得到fpga.ko,通过uboot更新mpc8636cpci.dtb,然后在linux系统启动后加载fpga.ko测试FPGA驱动。

4 实验测试

测试时把千兆网络接口和无线网络接口设置工作在网桥模式,两台无线系统平台(网络基带板卡+射频板)分别连接两台windows XP系统的笔记本电脑,两个无线网络平台之间通过空口无线连接,在笔记本电脑上分别运行chariot4.3 和endpoint进行UPD协议下流量测试,chariot设置为双向,每个方向设置三个数据流,共计六个数据流,测试时间一个小时,流量运行平稳,都在10Mbps以上,满足设计要求≥10Mbps。

5 结束语

本文提出了的一种基于PowerPC+FPGA的无线系统,该系统包括硬件平台、嵌入式linux、uboot、设备树以及FPGA驱动软件的实现,支持无线信号的一路发射和一路接收,实现了无线系统之间点对点无线通信。在后续的研究中,需要支持多路无线信号的发射与接收,FPGA驱动程序根据不同无线基带调制/解调设定参数,自动选择FPGA的配置文件实现动态加载。

参考文献:

[1]常关羽,许晴.Ad Hoc环境下基于稳定链路的语音通信系统设计与实现[J].小型微型计算机系统,2011(01):107-111.

[2]Bernard Sklar.数字通信——基础与应用(第二版)[M].北京:电子工业出版社,2010.

[3]MPC8536E PowerQUICC III Integrated Processor Hardware Specifications[M].Rev.5 05/2011 Freescale.

[4]MPC8536E PowerQUICC III™Integrated Processor Reference Manual[M].Rev.1 05/2009 Freescale.

[5]Grant Likely,Josh Boyer.A Symphony of Flavours:Using the device tree to describe embedded hardware[R].Ottawa,Canada:Linux Symposium,2008.

[6]IEEE Standard for Boot(Initialization Configuration)Firmware:Core Requirements and Practices,IEEE Std 1275-1994[M].IEEE Computer Society,345 East 47th St,NewYork NY 10017-2394,USA,1994.

[7]魏永明,耿岳,译.Corbet J,Rubini A.Linux设备驱动程序[M].北京:中国电力出版社,2006.

[8]宋宝华,何韶然,史海滨,译.Sreekrishnan Venkateswaran.精通Linux设备驱动程序开发[M].北京:人民邮电出版社,2010.

作者简介:杨柏松(1973-),男,天津人,本科,广电事业部嵌入式技术总监,助理工程师,研究方向:嵌入式系统。

作者单位:东华软件股份公司,北京 100190

相关热词搜索: 设计 系统 PowerPC FPGA

版权所有:无忧范文网 2010-2024 未经授权禁止复制或建立镜像[无忧范文网]所有资源完全免费共享

Powered by 无忧范文网 © All Rights Reserved.。冀ICP备19022856号