《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 一种基于以太网加载FPGA和DSP的实现方法
一种基于以太网加载FPGA和DSP的实现方法
来源:微型机与应用2011年第18期
吴湘宁,江 瑾,冯俊涛
(广州海格通信集团股份有限公司,广东 广州510663)
摘要: 介绍了脱离仿真器直接使用外部计算机通过网口进行程序代码加载的基本原理, 讨论分析了网络接口、FPGA接口和HPI接口的访问控制等关键技术。详述了在包含CPU、FPGA和DSP的复杂系统设计方案中基于以太网加载FPGA和DSP的实现。该技术在系统工程化的应用中具有很好的前景。
Abstract:
Key words :

摘  要: 介绍了脱离仿真器直接使用外部计算机通过网口进行程序代码加载的基本原理, 讨论分析了网络接口、FPGA接口和HPI接口的访问控制等关键技术。详述了在包含CPU、FPGA和DSP的复杂系统设计方案中基于以太网加载FPGA和DSP的实现。该技术在系统工程化的应用中具有很好的前景。
关键词: CPU;以太网;FPGA;DSP;HPI;引导加载


    随着嵌入式技术的发展,嵌入式系统逐渐演变为由微处理器、大规模集成电路、软件技术和各种具体的行业应用技术相结合的结果。嵌入式设备已经在航空航天、通信、电子等行业得到广泛应用。在以微处理器为核心的嵌入式应用系统中,对其中的FPGA和DSP的传统加载都是通过硬件仿真器来完成的。这在产品的初研阶段非常适用,然而在实际工程应用中各种产品组装成一个庞杂的系统时(如需对系统进行软件更新和维护时),传统的加载方式就显得极其不方便,程序代码的引导加载就需要一种更加灵活、高效的方法来实现,而基于以太网加载FPGA和DSP的实现方法能很好地解决这个难题。
    本文介绍了基于以太网加载FPGA和DSP的基本原理, 并通过该技术在某嵌入式主控设计中的应用详述了在包含CPU、FPGA和DSP的复杂系统设计方案中基于以太网加载FPGA和DSP的实现, 讨论分析了网络接口、FPGA接口和HPI接口的访问控制等关键技术。
1 基于以太网加载FPGA和DSP的基本原理
    基于以太网加载FPGA和DSP的实现过程为: 首先,外部计算机通过网络接口将代码传送给微处理器,并存储到微处理器的Flash存储器模块;然后,由微处理器分别通过FPGA的从串加载模式和DSP的主机引导加载(HPI接口)实现对FPGA和DSP程序代码的引导加载。
    基于TCP/IP协议的以太网是目前使用最广泛的网络。网络协议通常分不同层次进行开发,每一层负责不同的通信功能。嵌入式设备通常根据微处理器的结构特点和系统需要实现的功能,将TCP/IP协议嵌入到微处理器中,从而实现嵌入式系统的网络接口功能[1-2]。
1.1 FPGA加载
    FPGA常见的配置文件的加载模式有5种:主串加载模式、从串加载模式、主并加载模式、从并加载模式及JTAG加载模式。其中,JTAG加载模式在开发调试阶段使用。其余4种加载模式可分为串行加载方式和并行加载方式,而串行加载方式和并行加载方式都有主、从两种模式。由于主模式的加载同步时钟(CCLK)由FPGA提供,从模式的加载同步时钟(CCLK)由外部时钟源或者外部控制信号提供,为了方便微处理器控制加载过程,一般选择使用从串模式。
1.2 DSP加载
    DSP常见的三种引导加载方式为仿真器引导加载、ROM引导加载、主机引导加载。
    (1)仿真器引导主要用于调试阶段,是一种特殊的主机引导加载方式。
    (2)ROM引导加载:在DSP外部复位信号被释放后,芯片处于内部复位保持状态, DSP芯片自动地通过EDMA/QDMA将外部ROM中的1 KB程序搬入地址0处。内部复位完成后,DSP开始从地址0处执行指令。
    (3)主机引导加载:DSP上电复位后, I/O部分将处于激活状态,可以进行正常的通信,但DSP的内核仍处于复位状态,一直等待主机向HPI控制寄存器中的DSPINT位置1。这样,主机就可以通过HPI接口访问DSP的整个存储空间,对它们进行初始化。完成相关设置后,向DSPINT位写入1, DSP内核结束复位状态,执行地址0处的指令。
2 嵌入式数字处理系统设计与实现
2.1 硬件设计

    嵌入式数字处理系统采用微处理器PowerPC作为主控CPU,主要执行网络控制等各种控制任务,其程序代码相对固定,存储在Flash中。如图1所示,选用Xilinx公司的XC3S1000和XC4VSX35这两种FPGA分别做逻辑和变频[3-4],选用两片TI公司的DSP TMS320C6416芯片完成数据处理与算法实现,这些FPGA和DSP的程序代码需实时更新[5]。

    (1)网络接口设计
    以太网PHY采用Marvell公司PHY协议层千兆网卡88E1111[6]。88E1111是高性能千兆以太网收发芯片,可以完成所有PHY(物理层)功能,支持全双工或半双工的10/100/1 000 Mb/s三速以太网,支持8 bit数据总线。CPU和以太网PHY、FPGA及DSP的接口基本电路如图2所示。CPU的网络接口引脚和以太网PHY的网络接口相连接,通过硬件配置模式HWCFG MODE[3:0]来确定88E1111的操作模式,从而确定需要连接的引脚,如图2所示,该设计选择了RGMII模式,以太网PHY通过网络隔离滤波器HX5008与外部以太网接口相连。

    (2)FPGA接口设计
    在从串模式下进行FPGA程序加载仅需要使用CCLK、PROG_B、INIT_B、DONE、DIN这5个信号引脚,微处理器使用通用IO管脚来配置FPGA。此外还需要设置M[2:0]信号以选择配置模式,根据芯片XC3S1000和XC4VSX35的模式设置其从串模式的配置均为M[2:0]=111。
    (3)HPI 接口设计
    引导配置引脚BEA[19∶18]决定了TMS320C6416的引导加载模式,将DSP的EMIFB接口引脚BEA[19∶18]通过上下拉电阻配置成BEA[19∶18]=01,即选择DSP为HPI加载方式。HPI接口电路如图2所示,主控CPU的数据总线、地址总线及控制I/O连接到FPGA上,DSP的HPI接口数据总线和控制线也连接到FPGA上,通过FPGA的接口逻辑设计将CPU和DSP连接起来。
2.2 软件设计
2.2.1 网络接口程序设计

      (1)网络通信协议设计
      网络通信协议设计主要是实现TCP/IP 协议。根据嵌入式系统结构特点和系统设计实现的功能需求,在TCP/IP 协议的基础上实现系统所需功能。
      (2)网络接口的访问控制
      驱动程序设计包括以太网PHY芯片的初始化、数据包的发送和接收。Freescale的MPC8377自带了三速以太网控制器ETSEC,作为以太网接口与外部的PHY芯片相连接[7]。本设计中主控CPU与PHY之间是RGMII模式接口。88E1111可以实现多种数据速率和访问控制模式,通过HWCFG MODE[3:0]确定其操作模式,设定DIS_FC为0,可以自适应地选择FIBER、COPPER接口。
    Linux网络驱动程序的实现主要是在Linux内核中提供的网络设备接口及以上层次的代码基础上,移植或编写特定网络硬件的驱动程序工作,也就是完成设备驱动功能层,主要包括数据的接收、发送等控制。
2.2.2 FPGA接口程序设计
    FPGA从串模式的配置过程将配置比特流载入到FPGA,有4个主要阶段: (1)清除配置内存;(2)初始化;(3)载入配置数据;(4)设备启动。其配置时序流程图如图3所示。

 

 

    系统上电后,将PROG_B拉低以复位FPGA内部逻辑重新配置FPGA,充分复位内部逻辑后,将PROG_B置高。
    INIT_B为低电平,在PROG_B拉高保持一定时间后,FPGA将INIT_B置高。在INIT_B由低向高跳变的瞬间,采样配置模式M[2:0]。此系统采用从串配置模式。在FPGA采样配置模式后,微处理器就可以向FPGA配置时钟CCLK和数据,在CCLK的上升沿,传输数据至DIN,数据字节先发送低位,再发送高位。配置过程中若发生错误,则INIT_B为低电平。
    当DONE为高电平时,FPGA释放全局三态(GTS),激活I/O引脚,释放全部置位复位(GSR)和全局写使能(GWE)有效,开始执行配置区的逻辑。因此在所有的配置数据传送完成,CRC校验无误时,DONE为高电平,否则为低电平[6]。
    微处理器从串配置FPGA的时序图如图4所示。

2.2.3 HPI 接口程序设计
    本文的嵌入式数字处理系统设计中, 主控CPU通过FPGA访问HPI接口的HPIC、HPIA 、HPIDA 和HPIDF这4个寄存器,实现与TMS320C6416的通信,从而完成引导加载DSP程序代码。图5为DSP的HPI加载流程图。
    本设计中采用HPI16模式,16根数据线通过FPGA逻辑与主控CPU数据总线的低16位相连,将HPI的控制信号通过FPGA连接到主控CPU上。

    对DSP进行HPI接口加载首先要对DSP进行复位,主控CPU对DSP的全部存储空间进行访问,先对HPIC寄存器初始化,主要针对HPI16模式最低位HHWIL位设置,决定数据传输格式是按高半字在前(设置为0),还是低半字在前(设置为1),该位对于HPI32模式无效,可不设置;然后,对HPIA寄存器初始化,设置访问单元的地址;最后通过读写数据寄存器(HPIDA、HPIDF)实现数据读写操作,其中读写HPIDA寄存器是完成连续地址单元读写操作,读写HPIDF寄存器是完成固定地址单元读写操作。数据线、地址线定义如图6所示。

    LD、LA分别表示主控CPU的数据和地址,addr表示FPGA内部地址,HPIX表示DSP的HPI控制器数据。
    CSEL:0表示选择FPGA,1表示选择主DSP,2表示选择从DSP,3作为备用选择。
    BSEL:0表示HPIX的低16位,1表示HPIX的高16位。
    HCNTL:0表示HPIC,1表示HPIA,2表示HPID(HPIA自动递增),3表示HPID(HPIA保持不变)。
    在软件编程时, HPI 接口寄存器的定义如下所示:
    /* HPI FPGA registers */
    #define HPI_HCNTL_HPIC        (0x0<<11)
    #define HPI_HCNTL_HPIA        (0x1<<11)
    #define HPI_HCNTL_HPIDINC    (0x2<<11)
    #define HPI_HCNTL_HPIDFIX    (0x3<<11)
    #define HPI_BSEL_LOW            (0x0<<13)
    #define HPI_BSEL_HIGH        (0x1<<13)
    #define HPI_CSEL_FPGA        (0x0<<14)
    #define HPI_CSEL_HPI1            (0x1<<14)
    #define HPI_CSEL_HPI2            (0x2<<14)
    #define HPI_FPGA_MEM_SIZE (2<<16)   /* bytes */
2.3 HPI 程序加载代码的生成
    在CCS开发环境下生成的目标文件是“.out”,即通用目标文件格式(COFF)。该代码文件不是DSP中实际运行的程序代码,需用Hex工具进行转换,然后使用自编程序将可执行的程序代码提取出来,封装成帧,通过以太网加载到DSP中。HPI引导完成后, DSP从地址0开始执行,而DSP 程序的入口是_c_int00,所以要在地址0处添加一条跳转指令到程序入口[7]。
3 工程应用
    以前研制的数字处理系统采用CPU+DSP或CPU+FPGA,在研制阶段和应用过程中需采用仿真器进行程序加载,无法实现远程加载。然而在产品组装成品进行系统联调时需要多次对FPGA、DSP程序进行优化和完善,在对FPGA、DSP程序进行更新时极其不方便,每次更新程序都需要先解除系统连接,然后拆卸产品再用仿真器对该主控单元进行FPGA、DSP程序进行升级更新,整个过程繁琐并且费时费力,严重制约研制进程,而且后续工程应用的维护工作难度也较大。
    本文所述嵌入式数字处理系统基于以太网加载FPGA和DSP,只要将需要进行更新程序的产品通过网络接口和外部计算机连接起来进行数据交换,FPGA和DSP程序的加载与启动直接由外部计算机控制,无需拆卸系统和产品,摆脱了仿真器。这种方式使得整个加载简单方便,易于操作,而且可以实现对复杂系统的多个FPGA和多个DSP进行基于以太网接口的加载。
    随着现在数字技术的高速发展,数字系统设计的功能越来越强大,设计中综合微处理器、FPGA、DSP也越来越常见,本文提出了一种基于以太网加载FPGA和DSP的实现方法, 文中嵌入式数字处理系统实现了多个FPGA、DSP的程序加载进行软件更新,证实了该技术简单方便、可实现远距离加载,且具有良好的可靠性。该技术在工程应用领域具有独特的优越性和良好的应用前景。
参考文献
[1] 朱伟,王广君.基于ARM的嵌入式系统中从串配置FPGA的实现[J].仪表技术,2007(5):13-15.
[2] 李文禄,蒋宇中.一种基于以太网的 TMS320C6713B程序加载技术[J].海军工程大学学报,2008,20(6):35-39.
[3] Spartan-3 FPGA Family Data Sheet[S].Xilinx.2009.
[4] Virtex-4 User Guide v2.3[S].Xilinx.2008.
[5] TMS320C6416 fixed-point digital signal processor[S].Texas  Instruments.2005.
[6] 88E1111 Datasheet INTEGRATED 10/100/1000 ULTRA[S]. Marvell.2009.
[7] MPC8379E PowerQUICCTM II Pro integrated host processor  family Reference manual[S].Freescale Semiconductor.2009.

此内容为AET网站原创,未经授权禁止转载。