1、1嵌入式设计在 FPGA 快速开发中的应用摘要:基于 FPGA 的数据采集处理方案一般开发周期较长,在短周期任务流程中往往会给开发者带来较大的工作压力,本文论述了利用FPGA 内嵌 PPC 嵌入式处理器进行数据处理的可行性,在保证数据处理速度及精度的前提下,缩短 FPGA 开发周期,降低设计复杂度,解放代码设计人员。 关键词:FPGA PPC440 嵌入式设计 快速开发 0 引言 在使用硬件描述语言(VHDL 或 Verilog)进行 FPGA 系统设计时,当系统原理或逻辑功能较为复杂时,模块数量将十分巨大,相互之间的链接、嵌套使得设计仿真相当困难。并且基于 FPGA 的数据采集处理方案一般开
2、发周期较长,在短周期任务流程中往往会给开发者带来较大的工作压力,利用 FPGA 内嵌 PowerPC 嵌入式处理器进行数据处理的可行性,在保证数据处理速度及精度的前提下,缩短 FPGA 开发周期,降低设计复杂度,解放代码设计人员。 1 基于 FPGA 嵌入式开发简介 1.1 Microblaze 嵌入式软核处理器概况 在某研究项目中,我们采用了一款 Xilinx FPGA 芯片 VIRTEX-5 XC5VSX50T 作为嵌入式系统开发硬件平台。在该芯片中,创建并优化设计了一个嵌入式 Microblaze 软核处理器,该处理器采用 32 位 RISC(精简2指令集)优化构架和哈佛结构,32 位地
3、址总线、独立的指令和数据缓存,并且有独立的数据(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 等,将之与软核配合,可以完成绝大部分工作。 硬件设计软件化
4、 嵌入式软核处理器的最大优势就是将原本需要用硬件描述语言来进行的 FPGA 设计变为搭建硬件平台,使用完全的 C/C+语言进行编程,从而使得硬件设计实现了真正的软件化。采用 C/C+语言进行编程的优势是显而易见的,设计过程中将不再需要考虑许多硬件描述语言的特有约束,比如“=”和“=”的区别,另外在逻辑门的使用上也相对固定,对于总体布局布线的考虑很有帮助。 在线软硬联调 EDK 套件在进行完 SDK 软件设计之后,就可以对整个嵌入式系统进行在线调试了。调试的方法有很多种,比较高效的就是进行在线软硬联调,即在将 bit 文件通过 JTAG 链下载到 FPGA 之后,软核内是没有逻辑功能的,此时可以
5、使用 debug on hardware 方式将软件下载到软核处理器内,3之后便可以像任何一款 C/C+开发环境一样对功能进行调试,断点、单步、内存状态监控、变量值监控等等,均可以一次完成。 2 软硬件联合设计方法 Microblaze 的总线接口 Microblaze 采用哈佛结构,配置了 LMB 总线和 PLB 总线。 LMB 总线主要用于连接片上 Block Ram,为了保证所有访问在一个周期内完成,LMB 总线采用了最少的控制信号和最简单的协议方式。LMB 总线支持单字节读写和数据流读写两种方式,并且可以实现BYTE、WORD、DWORD 之间的自动转换,使得数据读写与转换十分方便并且
6、高速! PLB 总线主要用于挂接数据和指令的片上外设,是各类外设连接处理器的主要方式。以上提及的各种 IO 接口设备的 IP 均需挂接到 PLB 总线上方能与处理器协同工作。 3 应用经验 在项目的实际操作中,对嵌入式的软核应用十分成功,大大的减少了编程工作量,使得 FPGA 设计更易于操作。 总结一下,在使用中的经验与问题,主要集中在以下几个方面: 3.1 自定义 IP 的仿真调试 某课题中,microblaze 嵌入式设计的第一个设计要点,就是自定义IP 的设计、调试。该课题自定义 IP 的主要功能集中在 CPCI 接口时序、数据存储、处理、转发等方面,因此,在自定义 IP 设计过程中,调
7、试过4程是十分重要的。幸运的是,在 EDK 套件中设计的自定义 IP 可以在Modelsim 下进行仿真调试,这大大缩减了自定义 IP 的调试工作量。 3.2 堆栈的使用 堆栈在 SDK 软件设计中具有很重要的作用,SDK 在调用通用 IP 或USER IP 过程中,是通过事先设计的 driver 中的功能函数来进行调用的。对函数的操作,普遍使用“栈”来进行参数传递,而 SDK 中“栈”的大小默认为 0x400,如果设计的 driver 中的功能函数所需进行传递和恢复的参数段过大的话,将会出现“栈”溢出错误,导致功能函数异常。更为严重的是“堆” ,SDK 中“堆”的大小默认为 0,即不使用“堆
8、”进行参数处理,而我们知道,在进行动态变量初始化时, “堆”是必不可少的,因此如果在 driver 中设计的功能函数,有动态变量的话,一定要记得手动设置“堆”的容量。 4 课题收益 在该课题的研发过程中,采用了一颗 Xilinx Virtex5 系列芯片,其中 CPCI 总线接口单元与 OFDM 收发器最初均采用硬件描述语言(Verilog)进行系统功能模块设计,占用系统资源较多,收发双向共占用 35%左右的 slice 和 LUT,导致 FPGA 系统总体资源超过 95%,编译布线不成功。 当采用 EDK 套件进行嵌入式系统研发设计之后,利用软核完成以上全部功能,编译实现后,系统总体资源占用
9、 80%左右,并且 FPGA 内部router 方式固定,不会出现多次编译实现的结果不一致的情况。 硬件设计软件化使得系统的通用性更好,在后期调试过程中,获得5了极大地便利性。 5 结束语 通过以上论述,基于 PFGA 的嵌入式开发方法可以大大降低系统复杂度,利用 FPGA 内嵌 PPC 嵌入式处理器进行数据处理具有工程可行性,在保证数据处理速度及精度的前提下,可以缩短 FPGA 开发周期,降低设计复杂度,解放代码设计人员,十分值得进行推广。 参考文献: 1Xilinx kernel Development Kit User Guide. 2WANG 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-) ,男,学士,研究方向:飞行器测控技术。