APP下载

嵌入式设计在FPGA快速开发中的应用

2014-07-14张磊常扬

张磊 常扬

摘要:基于FPGA的数据采集处理方案一般开发周期较长,在短周期任务流程中往往会给开发者带来较大的工作压力,本文论述了利用FPGA内嵌PPC嵌入式处理器进行数据处理的可行性,在保证数据处理速度及精度的前提下,缩短FPGA开发周期,降低设计复杂度,解放代码设计人员。

关键词:FPGA PPC440 嵌入式设计 快速开发

0 引言

在使用硬件描述语言(VHDL或Verilog)进行FPGA系统设计时,当系统原理或逻辑功能较为复杂时,模块数量将十分巨大,相互之间的链接、嵌套使得设计仿真相当困难。并且基于FPGA的数据采集处理方案一般开发周期较长,在短周期任务流程中往往会给开发者带来较大的工作压力,利用FPGA内嵌PowerPC嵌入式处理器进行数据处理的可行性,在保证数据处理速度及精度的前提下,缩短FPGA开发周期,降低设计复杂度,解放代码设计人员。

1 基于FPGA嵌入式开发简介

1.1 Microblaze嵌入式软核处理器概况

在某研究项目中,我们采用了一款Xilinx FPGA芯片VIRTEX-5 XC5VSX50T作为嵌入式系统开发硬件平台。在该芯片中,创建并优化设计了一个嵌入式Microblaze软核处理器,该处理器采用32位RISC(精简指令集)优化构架和哈佛结构,32位地址总线、独立的指令和数据缓存,并且有独立的数据(DPBL)和指令总线(IPBL)连接到IBM的OPB总线,使其能够很容易的与其他外设IP一起完成整体功能。

1.2 Microblaze处理器特点、优势

①工作特性

Microblaze的系统工作时钟频率可以在50Mhz-125

Mhz范围内快速设置,local memory可以在4k-64k字节范围内寻址,并且EDK提供了丰富的IO接口设备IP,包括EMC(SRAM),ETHERNET,GPIO,DMA,IIC,DDR,DDR2,RS232,PCI等,将之与软核配合,可以完成绝大部分工作。

②硬件设计软件化

嵌入式软核处理器的最大优势就是将原本需要用硬件描述语言来进行的FPGA设计变为搭建硬件平台,使用完全的C/C++语言进行编程,从而使得硬件设计实现了真正的软件化。采用C/C++语言进行编程的优势是显而易见的,设计过程中将不再需要考虑许多硬件描述语言的特有约束,比如“<=”和“=”的区别,另外在逻辑门的使用上也相对固定,对于总体布局布线的考虑很有帮助。

③在线软硬联调

EDK套件在进行完SDK软件设计之后,就可以对整个嵌入式系统进行在线调试了。调试的方法有很多种,比较高效的就是进行在线软硬联调,即在将bit文件通过JTAG链下载到FPGA之后,软核内是没有逻辑功能的,此时可以使用debug on hardware方式将软件下载到软核处理器内,之后便可以像任何一款C/C++开发环境一样对功能进行调试,断点、单步、内存状态监控、变量值监控等等,均可以一次完成。

2 软硬件联合设计方法

Microblaze的总线接口

Microblaze采用哈佛结构,配置了LMB总线和PLB总线。

LMB总线主要用于连接片上Block Ram,为了保证所有访问在一个周期内完成,LMB总线采用了最少的控制信号和最简单的协议方式。LMB总线支持单字节读写和数据流读写两种方式,并且可以实现BYTE、WORD、DWORD之间的自动转换,使得数据读写与转换十分方便并且高速!

PLB总线主要用于挂接数据和指令的片上外设,是各类外设连接处理器的主要方式。以上提及的各种IO接口设备的IP均需挂接到PLB总线上方能与处理器协同工作。

3 应用经验

在项目的实际操作中,对嵌入式的软核应用十分成功,大大的减少了编程工作量,使得FPGA设计更易于操作。

总结一下,在使用中的经验与问题,主要集中在以下几个方面:

3.1 自定义IP的仿真调试

某课题中,microblaze嵌入式设计的第一个设计要点,就是自定义IP的设计、调试。该课题自定义IP的主要功能集中在CPCI接口时序、数据存储、处理、转发等方面,因此,在自定义IP设计过程中,调试过程是十分重要的。幸运的是,在EDK套件中设计的自定义IP可以在Modelsim下进行仿真调试,这大大缩减了自定义IP的调试工作量。

3.2 堆栈的使用

堆栈在SDK软件设计中具有很重要的作用,SDK在调用通用IP或USER IP过程中,是通过事先设计的driver中的功能函数来进行调用的。对函数的操作,普遍使用“栈”来进行参数传递,而SDK中“栈”的大小默认为0x400,如果设计的driver中的功能函数所需进行传递和恢复的参数段过大的话,将会出现“栈”溢出错误,导致功能函数异常。更为严重的是“堆”,SDK中“堆”的大小默认为0,即不使用“堆”进行参数处理,而我们知道,在进行动态变量初始化时,“堆”是必不可少的,因此如果在driver中设计的功能函数,有动态变量的话,一定要记得手动设置“堆”的容量。

4 课题收益

在该课题的研发过程中,采用了一颗Xilinx Virtex5系列芯片,其中CPCI总线接口单元与OFDM收发器最初均采用硬件描述语言(Verilog)进行系统功能模块设计,占用系统资源较多,收发双向共占用35%左右的slice 和LUT,导致FPGA系统总体资源超过95%,编译布线不成功。

当采用EDK套件进行嵌入式系统研发设计之后,利用软核完成以上全部功能,编译实现后,系统总体资源占用80%左右,并且FPGA内部router方式固定,不会出现多次编译实现的结果不一致的情况。

硬件设计软件化使得系统的通用性更好,在后期调试过程中,获得了极大地便利性。

5 结束语

通过以上论述,基于PFGA的嵌入式开发方法可以大大降低系统复杂度,利用FPGA内嵌PPC嵌入式处理器进行数据处理具有工程可行性,在保证数据处理速度及精度的前提下,可以缩短FPGA开发周期,降低设计复杂度,解放代码设计人员,十分值得进行推广。

参考文献:

[1]Xilinx kernel Development Kit User Guide.

[2]WANG Zheng-jie. Implementation of VxWorks in autopilot for micro aerial vehicle based on PXA255 and FPGA [J].Journal of Beijing Institute of Technology,2011,1.

[3]郭锐靖.FPGA开发板设计与研究[D].华南理工大学,2013.

作者简介:

张磊(1983-),男,学士,研究方向:飞行器测控技术。