1、第7章 基于FPGA的系统级设计技术7.1 基于基于FPGA的嵌入式开发技术的嵌入式开发技术7.2 MicroBlaze嵌入式处理器嵌入式处理器7.3 嵌入式开发套件嵌入式开发套件EDK7.4 在在SOPC系统中添加定制外设系统中添加定制外设IP Core7.5 Xilinx DSP设计平台设计平台7.6 FIR滤波器设计滤波器设计小结小结题习题习实验项目实验项目7.1 基于基于FPGA的嵌入式开发技术的嵌入式开发技术7.1.1 嵌入式系统与嵌入式系统与SOPC技术技术 嵌入式系统在国内一般被认为是指以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗
2、等严格要求的专用计算机系统。嵌入式系统的构架可分为处理器、存储器、输入/输出(I/O)接口和软件四部分。嵌入式系统的软件一般由嵌入式操作系统和应用软件组成,它们之间的结合十分紧密,不同于PC机上的Windows系统和应用软件;硬件的核心部件是嵌入式处理器,其主要发展方向是小体积、高性能和低功耗,主要类型有嵌入式微处理器(MPU)、嵌入式微控制器(MCU)、嵌入式数字信号处理器(DSP)和嵌入式片上系统(SOC)。目前芯片集成度日益提高,设计复杂度越来越大,设计和验证技术的发展明显落后于集成电路制造技术,已经成为SOC设计面临的一个重大问题。传统的SOC设计方法采用软、硬件分立设计方法,首先构造
3、硬件子系统部分,然后在己有硬件上进行软件的设计、调试和开发。在深亚微米设计中,硬件开发费用急速增加,而当硬件设计完成后再进行软件调试时,如果发现了硬件系统设计的错误,纠正错误则要付出人力、物力、财力等方面高昂的代价,系统研发周期变长,成本增加,市场风险增大。软、硬件协同设计成为解决这一问题的关键技术之一。随着平台级FPGA产品的出现和EDA设计工具软件的不断发展,利用现有的FPGA和EDA工具,人们也可以很方便地在FPGA中嵌入RISC(Reduced Instruction Set Computer,精简指令集)处理器内核、DSP算法、存储器、专用ASIC模块、其它数字IP Core以及用户
4、定制逻辑等,构建成一个可编程的片上系统(SOPC),把原来需要在PCB上采用处理器、DSP、若干ASIC芯片才能实现的功能全都集成到了单片FPGA上,如图7.1所示。图7.1 基于FPGA的嵌入式系统 SOPC设计建立在平台设计的基础之上,采用系统级软硬件协同设计方法,在系统级上探析不同的设计方案,如软硬件划分、总线和处理器负载平衡、可编程资源分配,通过在系统级上比较不同实现结构的选择对产品性能的影响,从而进行设计的权衡,使得在物理实现之前就可以进行有效的分析和结构的优化,大大提高系统的可预测性,加速系统的研发速度,提高系统的设计效率,减少设计迭代的次数,降低设计风险,增强系统的竞争力。SOP
5、C软硬件协同技术包括基于平台的SOPC的系统建模、软件与硬件的划分、由建模系统到软硬件的映射即软硬件协同综合技术、软硬件协同调度、可验证设计、并行计算技术以及协同仿真和集成,这些技术不仅推动了SOPC的应用,而且促进了SOPC平台的发展。平台是软、硬IP模块及片上通信结构的结合体,一般还包括嵌入式CPU、实时操作系统、外围接口模块、中间件等。基于平台的设计PBD(Platform-Based Design)方法是近几年提出的SOC软硬件协同设计新方法,是基于块的设计BBD(Block-Based design)方法的延伸。它扩展了设计重用的理念,强调系统级复用,包含了时序驱动的设计和BBD的各
6、种技术,支持软硬件协同设计,提供系统级的算法和结构分析。PBD方法是一种面对集成、强调系统级重用的设计方法,此方法在平台的基础上开发复杂的产品,目标是降低开发风险和代价,缩短产品的上市时间。PBD方法具有开发周期短、重用效率高以及设计质量好等优点,不仅能实现最大化的设计复用,而且为软硬件协同设计提供了极大的便利。基于平台的SOPC设计方法扩展了芯核设计方法,简化了SOC设计过程,无需实现新的芯片即可快速获得片上系统。平台建立在集成IP Core的基础上,通常是针对某一特定应用领域而设计的,一个结构良好的SOPC平台系统可以有效实现IP Core复用,缩短SOC开发周期,同时降低研发风险。SOP
7、C将微处理器、DSP、可编程逻辑等组合形成平台系统,从而消除设计中的差异,硬件可编程性好,容易升级和扩展,受到越来越多的关注。半导体业界认为将整个系统整合到单一模型之中时,平台设计为设计重点之一,而其研发关键在于平台必须可以区分差异性的元素,包括先进的系统模型和验证环境。随着设计项目复杂程度的提高,系统级设计语言的整合趋势可以大大提高设计效率,从而为从事EDA设计的企业带来益处。现已证明,基于C语言的系统级设计语言不仅可以提高生产效率,而且也是对Verilog流程的补充。目前VHDL和Verilog HDL是中国的主流设计语言。然而,随着IC复杂度的不断提高,从更高层次入手对系统进行描述是描述
8、语言未来的发展方向。SystemVerilog/SystemC的整合,使得软件团队一方面可以与高效的硬件设计和验证流程进行合作,同时还可以使用自己原来熟悉的编程语言进行工作,使得整个流程可以达到最高的设计效率。Synopsys公司是SystemC的初始发起人之一。为了推动SystemVerilog的标准化进程,Synopsys还公开提供了其OpenVera测试平台语言、常用的API和OpenVera Assertion(OVA)规范,这些使得SystemVerilog3.1的出现成为可能。在这些提供出来的技术的基础上,System Verilog包含了对RTL设计进行简化所需的全部功能。这些工
9、具及相关设计方法学一起被归类为电子系统级ESL(Electronic System-Level)设计,广义指比目前主流的寄存器传输级RTL更高的抽象级别上开始的系统设计与验证方法学。ESL工具和可编程硬件一起构成了基于桌面的硬件开发环境,并提供了符合软件开发的工作流程模型。工具可提供针对特定的基于FPGA的参考板的优化支持,软件开发者可以利用这些支持启动项目评估或原型构建。这些板及相应的参考应用程序均使用更高级别的系统描述语言编写,这使创建定制的及硬件加速的系统变得更为快速和容易。另外,ESL 方法学与可编程硬件的结合使用,使尝试大量可能的应用实现以及对极不同的软件/硬件分割策略快速进行实验成
10、为可能。这种尝试新方法和快速分析性能与尺寸平衡的实验能力使基于ESL设计方法的FPGA设计能够比基于传统的RTL方法以更短的时间实现更高的总体性能。7.1.2 基于基于SOPC的嵌入式系统开发流程的嵌入式系统开发流程1.需求分析需求分析确定设计任务和目标,并制定说明规格文档,作为下一步设计的指导和验收标准。需求分析往往要与用户反复交流,以明确系统功能需求,性能需求,环境、可靠性、成本、功耗、资源等需求。2.体系结构设计体系结构设计体系结构设计是嵌入式系统的总体设计,它需要确定嵌入式系统的总体构架,从功能上对软硬件进行划分。在此基础上,确定嵌入式系统的硬件选型(主要是处理器选型),操作系统的选择
11、和开发环境的选择。3.硬件的设计、制作及测试硬件的设计、制作及测试对于一般的嵌入式系统,在这一阶段要确定硬件部分的各功能模块及模块之间的关联,并在此基础上完成元器件的选择、原理图绘制、印刷电路板(PCB)设计、硬件的装配与测试、目标硬件最终的确定和测试。SOPC系统在此有所不同,由于硬件系统的大部或全部是在FPGA上实现的,因此在这一阶段的设计工作是基于硬件定义文件,利用平台产生工具生成对应的网表文件,再通过FPGA实现工具来完成硬件系统的实现。4.软件的设计、实现及测试软件的设计、实现及测试这部分工作与硬件开发并行、交互进行。软件设计主要完成引导程序的编制、操作系统的移植、驱动程序的开发、应
12、用软件的编写等工作。设计完成后,软件开发进入实现阶段。这一阶段主要是嵌入式软件的生成(编译、链接)、调试和固化运行,最后完成软件的测试。5.系统集成系统集成将测试完成的软件系统装入制作好的硬件系统中,进行系统综合测试,验证系统功能是否能够正确无误地实现,最后将正确的软件固化在目标硬件中。本阶段的工作是整个开发过程中最复杂、最费时的,特别需要相应的辅助工具支持。6.系统性能测试及可靠性测试系统性能测试及可靠性测试 测试最终完成的系统性能是否满足设计任务书的各项性能指标和要求。若满足,则可将正确无误的软件固化在目标硬件中;若不能满足,在最坏的情况下,则需要回到设计的初始阶段重新进行设计方案的制定。
13、基于SOPC的软硬件协同设计流程从目标系统构思开始。对一个给定的目标系统经过构思,完成其系统整体描述,然后交给软硬件协同设计的开发集成环境,由计算机自动完成剩余的全部工作。一般而言,还要经过模块的行为描述、对模块的有效性检查、软硬件划分、硬件综合、软件编译、软硬件集成、软硬件协同仿真与验证等各个阶段,其中软硬件划分后产生硬件部分、软件部分和软硬件接口界面三个部分。硬件部分遵循硬件描述、硬件综合与配置、生成硬件组建和配置模块;软件部分遵循软件描述、软件生成和参数化的步骤来生成软件模块。最后把生成的软硬件模块和软硬件界面集成,并进行软硬件协同仿真,以进行系统评估和设计验证。SOPC设计流程如图7.
14、2所示。图7.2 SOPC设计流程图 7.2 MicroBlaze嵌入式处理器嵌入式处理器FPGA中嵌入式处理器一般情况下可以有三种不同的使用模式,分别是状态机模式、单片机模式和定制嵌入模式,如图7.3所示,因此并不是在FPGA中简单地增加一个或多个嵌入式处理器就实现了SOPC。(a)状态机模式 (b)单片机模式 (c)定制嵌入模式 图7.3 FPGA中嵌入式处理器的使用模式 在状态机模式下嵌入式处理器可以无外设、无总线结构和无实时操作系统,但是可以执行复杂的状态机和算术运算,达到可高或可低的性能,以及最低的成本,通常应用于VGA和LCD控制等。当嵌入式处理器带有一定的外设,能执行单片机即微控
15、制器的功能时,被称之为单片机模式,该模式可能会利用实时操作系统和总线结构,达到中等的性能和中等的成本,常应用于控制和仪表等。SOPC中的嵌入式处理器一般为定制嵌入模式,嵌入式处理器具有扩充的外设、实时操作系统和总线结构,达到高度的集成和高的性能,除应用于控制和仪表等外,还可应用于网络和无线通信等。当嵌入式处理器具有基于硬件的除法单元和浮点单元,以及大的可寻址的存储器空间时,嵌入式处理器核还可被用来实现现代复杂的DSP算法,此时既可以只利用软件来实现,也可直接利用硬件加速来实现。Xilinx公司的SOPC嵌入式解决方案中以三类RISC结构的微处理器为核心,涵盖了系统硬件设计和软件调试的各个方面。
16、三类嵌入式内核分别为PicoBlaze、MicroBlaze和PowerPC,其中PicoBlaze和MicroBlaze是可裁剪的软核处理器,PowerPC为硬核处理器。PicoBlaze是采用VHDL语言在早期开发的小型八位软处理器内核包,其汇编器是简单的DOS可执行文件KCPSM2.exe,用汇编语言编写的程序经过编译后放入FPGA的块RAM存储区,汇编器可在数秒内编译完存储在块RAM中的程序。需要提醒的是,Xilinx的EDK不提供基于PicoBlaze的嵌入式系统开发支持。PowerPC是32位PowerPC嵌入式环境架构,确定了若干系统参数,用以保证在应用程序级实现兼容,增加了其设
17、备扩展的灵活性。Xilinx将PowerPC 405处理器内核整合在Virtex2 Pro系列以及更高等级系列的芯片中,允许该硬IP Core能够深入到FPGA架构的任何部位,提供高端嵌入式应用的FPGA解决方案。Virtex4以及Virtex5系列的部分芯片中集成了24个PowerPC 405处理器核。MicroBlaze是一款由Xilinx公司开发的应用十分广泛的嵌入式处理器软核,用以开发Xilinx的FPGA上的嵌入式工程,下面主要对MicroBlaze进行介绍。MicroBlaze采用功能强大的32位流水线RISC结构,MicroBlaze是一个非常简化,却具有较高性能的软核。它包含3
18、2个32位通用寄存器和一个可选的32位移位寄存器,时钟可达150MHz,在Virtex 2 Pro以及更高系列的平台上,运行速度可达120DMIPs(DhrystoneMIPS),占用资源不到1000个Slice。它符合IBM CoreConnect总线标准,能够与PowerPC 405系统无缝连接。在FPGA内部可以集成多个MicroBlaze处理器,这极大增加了FPGA开发的灵活性。MicroBlaze软核内部采用RISC架构和哈佛结构的32位指令和数据总线,内部有32个通用寄存器R0R31、两个特殊寄存器程序指针(PC)和处理器状态寄存器(MSR)、一个ALU单元、一个移位单元和两级中断
19、响应单元等基本模块,还可具有3/5级流水线、桶形移位器、内存管理/内存保护单元、浮点单元(FPU)、高速缓存、异常处理和调试逻辑等可根据性能需求和逻辑区域成本任意裁剪的高级特性,极大地扩展了MicroBlaze的应用范围。MicroBlaze处理器的内核在不断更新中,MicroBlaze 7.1a版的内部架构示意图如图7.4所示。MicroBlaze处理器架构均衡了执行性能和设计尺寸,但由于其最高工作频率由FPGA芯片提供,所以计算性能随处理器配置、实现工具结果、目标FPGA架构和器件速度级别的不同而不同。如同PC机除了CPU之外还需要具有PCI总线、ISA总线和USB总线与各类外设相连才能实
20、现一个完整的计算机硬件系统一样,嵌入式系统也必须有自己的总线连接方案。MicroBlaze的总线接口是以IBM CoreConnect为嵌入式处理器的设计基础,具有丰富的接口资源。CoreConnect即片上总线通信链,它能使多个芯片核相互连接成为一个完整的新芯片。目前MicroBlaze软核支持的外设接口示意图如图7.5所示,其中包括:PLB(Processor Local Bus,处理器局部总线)接口;带字节允许的OPB(On-chip Peripheral Bus,片上外设总线)接口;高速的LMB(Local Memory Bus,本地存储器总线)接口;FSL(Fast Simplex
21、Link,快速单工链)接口;XCL(Xilinx Cache Link,Xilinx缓存链路)接口;与MDM(Microprocessor Debug Module,微处理器调试模块)连接的调试接口。图7.4 MicroBlaze 7.1a版的内部架构示意图 图7.5 MicroBlaze软核支持的外设接口示意图 其中,PLB总线是高带宽的主从结构,并完全同步到一个时钟。OPB总线比PLB总线在协议上相对简单,属于低速接口总线,是对IBM CoreConnect片上总线标准的部分实现,适用于将IP Core作为外设连接到MicroBlaze系统中。目前,新的PLB 4.6版本总线协议已提供了对
22、老版本PLB和OPB两类总线的完全支持。LMB用于实现对片上的块RAM(BlockRAM)的高速访问。FSL是MicroBlaze软核特有的一个基于FIFO的单向链路,可以实现用户自定义IP Core与MicroBlaze内部通用寄存器的直接相连;而XCL则是MicroBlaze软核新增加的,用于实现对片外存储器的高速访问。MicroBlaze软核还有专门的调试接口,通过参数设置开发人员可以只使用特定应用所需要的处理器特性。Xilinx提供了大量的外设IP Core,可外挂到MicroBlaze的OPB总线上,如DMA单元、以太网MAC层处理器、PCI/PCIe接口、UART以及USB等。一个
23、外设一般不能同时和这两类总线相连,部分IP模块之所以能和两类总线连接,是因为其控制接口和低速的OPB总线相连,而数据接口和高速总线连接。MicroBlaze采用的是哈佛存储结构,也就是指令和数据采用分离的地址空间结构,每个地址空间有32位宽,可以最多分别处理4GB的指令和数据存储。另外指令和数据的存储空间可以重叠地被映射到同一块物理地址中,以方便软件调试。除非声明了支持非法异常,所有的指令必须以合法字的形式被接收。由于MicroBlaze没有区分数据接口是I/O还是存储,所以处理器存储的接口也是OPB、LMB和XCL,而且LMB存储地址空间不能和OPB及XCL重叠。表 7.1 Micro Bl
24、aze 支持的字、半字和字节的具体内容 字 半字 字节 字节地址 n n+1 n+2 n+3 n n+1 n 字节标签 0 1 2 3 0 1 字节数端 MSByte LSByte MSByte LSByte 位标签 0 31 0 15 0 7 位数端 MSBit LSBit MSBit LSBit MSBit LSBit 7.3 嵌入式开发套件嵌入式开发套件EDKXilinx公司推出的Embedded Development Kit(EDK)是包含了所有用于设计嵌入式编程系统的集成开发解决方案,该套件包括了Xilinx Platform Studio(XPS)工具、PowerPC嵌入式硬处理
25、器核和MicroBlaze软处理器核,以及进行Xilinx平台FPGA设计时所需的技术文档和IP Core,是Xilinx综合性嵌入式解决方案的关键部分,利用该工具包提取和自动化处理系统设计,能大大加速嵌入式开发。同时,EDK也对使用Xilinx ISE、ChipScope Pro和第三方EDA工具的共同开发提供了良好的支持,如图7.6所示。图7.6 Xilinx嵌入式集成开发解决方案 7.3.1 EDK的组成的组成 1XPS集成设计环境集成设计环境XPS为嵌入式处理器系统提供了一个创建软件和硬件规范流程的图形化集成开发环境,如图7.7所示。XPS无缝地把产生硬件和软件部件以及可选择的校验部件
26、所需要的全部嵌入式系统工具组合在一起,由项目管理、源程序管理和进程管理组成。通过XPS可以使用基本系统向导BSB(Base System Builder)迅速完成基本硬件平台创建,提供自定义IP Core创建向导,支持ChipScope Pro调试,支持多软件工程项目,是面向独立系统的集成开发环境。例如Xilinx MicroKernel、Wind River VxWorks、MontaVista Linux和其它第三方开发系统,提供板支持包BSP(Board Support Package)。图7.7 XPS的图形化集成开发环境 2SDK集成开发环境集成开发环境XPS SDK为XPS的应用软
27、件开发提供了一个软件工程项目的增强型图形化集成开发环境,如图7.8所示。它是基于Eclipse开放源代码标准设计的,具备功能完善的C/C+代码编辑器和编译环境,能创建、配置和自动生成Makefile,并集成了对嵌入式对象的无缝调试环境。它还具有强大的项目管理和源码版本控制功能,支持类似CVS的插件。由于本书重点放在硬件系统的实现上,不介绍嵌入式软件开发的相关内容,关于XPS SDK的使用请读者参看Xilinx的相关文档和嵌入式编程相关书籍自行学习。图7.8 XPS SDK的增强型图形化集成开发环境 3ChipScope Pro支持支持ChipScope Pro分析器主要被用来作硬件系统调试。它
28、支持利用GNU调试器同时对软件和硬件进行调试;在EDK中集成了ChipScope Pro核,能极大地方便调试。7.3.2 EDK的任务流程、工具模块与工程管理的任务流程、工具模块与工程管理对于嵌入式应用来讲,软、硬件协同开发是非常重要的,虽然EDK提供了XPS工具和SDK工具两个图形化平台,但仍以文件结构管理为基础,图形化平台只是方便用户操作的,所有的设置内容都会写入相应的文件中。下面先了解基于EDK的嵌入式系统设计流程,再结合流程认识EDK中的工具模块,最后了解相应格式的文件以及管理、存储数据文件的模式,这些都是掌握EDK操作工具的必备知识。基于EDK嵌入式设计的简化流程图如图7.9所示。由
29、图可知,模块1完成硬件设计工作,主要由ISE完成,最终结果是生成用于配置FPGA的bit位流文件;模块2完成软件设计工作,一般使用XPS SDK完成,生成.elf可执行文件是该阶段结束的标志;模块3是XPS,它提供图形化集成设计环境,无缝地把产生的硬件和软件部件,以及可选择的校验部件所需的全部嵌入式系统工具组合在一起,提供工程项目管理、应用软件管理和平台管理的能力,为设计提供系统化的支持,并能对bit和elf进行整合,完成对目标芯片的配置。图7.9 基于EDK的嵌入式设计简化流程图 硬件设计工作包括以下几个方面的内容:(1)使用EDK工具进行硬、软核集成。(2)将EDA生成的HDL代码用ISE
30、进行综合、布局布线和前端仿真验证,也可用第三方工具综合,仿真验证,将设计顶层模块在目标器件进行分配。(3)使用ISE编程器将生成的配置文件下载到FPGA,进行后端验证和测试。软件设计工作包括以下几个方面的内容:(1)在EDK构建硬件系统的同时,开始编写独立于器件的C/C+应用程序,或编写自行设计的IP Core驱动程序。(2)根据EDK对系统的配置脚本生成相对应的HAL库,对程序进行软件级仿真和调试,还可以进行操作系统配置。(3)将编译、链接后生成的可执行程序下载到目标器件,进行硬件级的调试、测试和优化设计。在图7.10中详细列出了完成设计流程的各项任务的核心软件工具,以及每一个任务流程的输入
31、文件和输出文件。图7.11列出了一个完整的EDK项目的工程文件结构组织关系。下面结合图7.10和图7.11,对EDK工程的主要文件和工程结构关系进行简要说明。使用XPS创建一个EDK项目,将生成一个后缀名为.xmp的文本文件作为工程文件,其中定义了EDK工具的版本、相关的硬件配置文件(MHS)和软件配置文件(MSS)、目标器件的类型、软件的源码和库位置等信息。.xmp文件是由XPS软件自动生成的,用户一般不要自行修改。图7.10 EDK中各工具模块的任务流程 图7.11 EDK的工程文件结构组织关系 一般情况下,利用EDK开始某个嵌入式系统的设计工作都是从使用XPS提供的BSB(Base Sy
32、stem Biulder)向导工具构造系统的硬件平台起步的,根据BSB工具建立的系统设计会产生包括PBD(Platform Block Diagram,平台模块框图)、MHS(Microprocessor Hardware Specification,微处理器硬件配置)、MSS(Microprocessor Software Specification,微处理器软件配置)和UCF等在内的关键文件和工程目录结构。MHS文件是硬件配置文件,定义了系统结构、外围设备和嵌入式处理器,也定义了系统的连通性、系统中每个外围设备的地址分配和对每个外围设备的可配选项,该文件可随意更改,在图形界面中对硬件结构的
33、任何改动都要写入该文件中。同样,对于高级用户,可通过直接修改MHS文件来代替XPS中的图形操作。MHS文件严格按照分层设计的思想,每个硬件模块都是一个独立的组件,再通过上层模块连接起来形成整个系统。平台产生器PlatGen输入MHS文件和MPD(Micorprocessor Peripheral Description,微处理器外设描述)文件,以硬件网表清单的形式构造嵌入式处理器系统,输出HDL、Implementation和Synthsis目录以及其下的设计文件,与UCF文件一起供ISE设计流程使用,产生bit配置位流文件。XPS除了利用MHS文件来描述硬件系统,还利用了MSS文件进行类似的
34、软件系统描述。将MSS文件和用户的应用软件一起组成了描述嵌入式系统软件部分的主要源文件,利用这些文件以及EDK的库和驱动器,XPS就可以编译用户的应用程序。而编译后的软件程序生成.elf可执行可链接格式的文件,和MHS文件一样,高级用户也可通过直接修改MSS文件达到更改软件配置的目的。库生成器LibGen利用MSS文件和EDK软件库为系统的嵌入式处理器产生必要的库和驱动,输出为嵌入式处理器目录下的code、include、lib和libsrc四个子目录以及其下的设计文件。这些文件为软件开发建立了一个HAL硬件抽象层,用户基于此进行应用软件设计,编写c或cpp或asm源文件,再通过GCC编译和链
35、接器,生成.elf文件。MHS和MSS两个关键设计文件的语法格式和内容,将在介绍EDK使用时结合具体工程作介绍。工程目录下的pcores目录主要存储针对本工程的定制IP。UCF文件在XPS中和在ISE中一样,都是用来添加信号的管脚约束与时序约束的。在EDK设计中,UCF文件最常用的功能是用来锁定管脚,可以通过文本编辑器修改,相关的语法和ISE中是一致的。在XPS中,最终得到的FPGA配置位流文件可能不同于由ISE生成的位流文件,它可能是通过Data2MEM过程,将软、硬件比特流合成完整系统比特流文件,该位流文件也是通过JTAG下载到FPGA芯片中的。7.3.3 EDK的使用的使用1EDK的安装
36、的安装 EDK对计算机硬件的要求和安装过程都与ISE的类似。执行安装文件包中的Setup.exe程序,依次接受软件授权协议,输入注册码,选择安装路径,确认安装的组件、环境变量设置等,接下来安装程序开始复制文件,安装完成后,会在桌面以及程序菜单中添加EDK的快捷方式。双击即可进入EDK集成开发环境。2EDK的使用的使用完整的EDK开发流程如图7.9所示,各主要步骤分别是:(1)创建基本硬件平台。(2)根据设计要求添加IP Core以及用户定制外设。(3)生成硬件系统仿真文件并测试。(4)生成硬件网表和位流文件,这个步骤类似于传统FPGA设计的综合、布局布线、生成位流文件这三个操作。(5)开发软件
37、系统,编译生成.elf格式的可执行代码。(6)合并软、硬件位流,得到最终的二进制比特文件。(7)将更新的最终比特流下载或烧写到FPGA、PROM、FLASH和CF卡内。(8)利用XMD命令行调试工具或ChipScope工具在线调试、验证整个系统的正确性。下面按照EDK的开发步骤,通过一个简单的基于MicroBlaze处理器的嵌入式系统设计实例,介绍EDK的主要功能和操作。1)创建基本硬件平台(1)启动XPS(Xilinx Platform Studio)。(2)选择【Base System Builder Wizard】创建基本硬件平台,如图7.12所示。(3)为当前工程建立一个专用目录,保存
38、system.xmp文件,如图7.13所示。图7.12 基本硬件平台生成向导 图7.13 新建XPS项目(4)选择创建一个新设计,指定目标板型号,此处选择Xilinx公司的Spartan-3E Starter开发板,如图7.14所示。列出的可选开发板型号都是由与开发板型号同名的XBD文件确定的。XBD文件按照一定的文件组织结构关系保存在EDK软件安装目录的board子目录下。在XBD文件中按特定格式记录了开发板硬件配置和对应的硬件约束设置。感兴趣的读者可以参照board目录的组织结构和XBD的文件格式来定制其它型号的开发板。(5)使用MicroBlaze处理器作为硬件系统的处理器内核。开发板上
39、的Spartan-3E FPGA只能支持软核处理器MicroBlaze,如图7.15所示。图7.14 选择工程的目标板 图7.15 选择嵌入式处理器 图7.16 设置嵌入式处理器(7)在接下来的几页外设选择页面,不同的开发板差别会很大。这里仅选一个RS232外设,其它参数保持缺省,如图7.17所示。图7.17 选择系统外设(8)软件设置页面中要为软件调试指定标准输入/输出设备,并选上【Memory test】演示软件项目作为测试程序,用来检验所实现的基本硬件平台,如图7.18所示。图7.18 设置工程的软件内容(9)确认系统创建页面的设置信息,完成基本硬件平台的创建,如图7.19所示。图7.1
40、9 工程设置信息确认(10)创建完成的基本硬件平台会在XPS中自动打开,并开启【Block Diagram】和【System Assembly View】视图供用户观察硬件平台的系统结构,如图7.20所示。图7.20 创建的基本硬件平台 至此,基本硬件平台的创建结束,用户接下来可以继续完善硬件设计。在XPS左侧的【Project】视图上,列出了包括MHS和MSS等在内的工程关键设计文件。分别双击打开MHS和MSS文件,查看其中的配置信息。下面通过在文件中添加注释来解读文件。system.mhs文件内容(节选):PARAMETER VERSION=2.1.0#定义了参数集版本#定义UART串口的
41、输入和输出信号 PORT fpga_0_RS232_DTE_RX_pin=fpga_0_RS232_DTE_RX,DIR=I PORT fpga_0_RS232_DTE_TX_pin=fpga_0_RS232_DTE_TX,DIR=O#定义了系统时钟,大小为50 MHz,方向为输入,标记为时钟信号 PORT sys_clk_pin=dcm_clk_s,DIR=I,SIGIS=CLK,CLK_FREQ=50000000#定义系统复位信号,方向为输入,标记为复位信号PORT sys_rst_pin=sys_rst_s,DIR=I,RST_POLARITY=1,SIGIS=RST#子模块定义,以BE
42、GIN和END定义段 BEGIN microblaze#处理器子模块定义 PARAMETER INSTANCE=microblaze_0#定义例化名称 PARAMETER C_INTERCONNECT=1 PARAMETER HW_VER=7.10.d#定义IP Core版本 PARAMETER C_DEBUG_ENABLED=1 PARAMETER C_AREA_OPTIMIZED=1#下面是模块端口信号定义 BUS_INTERFACE DLMB=dlmb BUS_INTERFACE ILMB=ilmb BUS_INTERFACE DPLB=mb_plb BUS_INTERFACE IPLB
43、=mb_plb BUS_INTERFACE DEBUG=microblaze_0_dbg PORT MB_RESET=mb_resetEND(此处省略部分内容)BEGIN lmb_bram_if_cntlr#定义存储器模块 PARAMETER INSTANCE=dlmb_cntlr PARAMETER HW_VER=2.10.a PARAMETER C_BASEADDR=0 x00000000#定义模块的基地址 PARAMETER C_HIGHADDR=0 x00003fff#定义模块的结束地址,与基地址一起确定了模块的存储器大小 BUS_INTERFACE SLMB=dlmb BUS_INT
44、ERFACE BRAM_PORT=dlmb_portEND(此处省略部分内容)BEGIN xps_uartlite#定义UART串口模块 PARAMETER INSTANCE=RS232_DTE PARAMETER HW_VER=1.00.a PARAMETER C_BAUDRATE=9600#定义波特率 PARAMETER C_DATA_BITS=8#定义数据位数 PARAMETER C_ODD_PARITY=0#定义奇偶校验位 PARAMETER C_USE_PARITY=0#定义是否使用校验 PARAMETER C_SPLB_CLK_FREQ_HZ=50000000 PARAMETER
45、C_BASEADDR=0 x84000000#定义串口基地址 PARAMETER C_HIGHADDR=0 x8400ffff BUS_INTERFACE SPLB=mb_plb PORT RX=fpga_0_RS232_DTE_RX PORT TX=fpga_0_RS232_DTE_TXEND(此处省略余下内容)system.mss文件内容(节选):PARAMETER VERSION=2.2.0#定义参数版本BEGIN OS#定义操作系统,以BEGIN和END定义段 PARAMETER OS_NAME=standalone PARAMETER OS_VER=2.00.a PARAMETER
46、PROC_INSTANCE=microblaze_0 PARAMETER STDIN=RS232_DTE PARAMETER STDOUT=RS232_DTEENDBEGIN PROCESSOR#定义处理器类型,以BEGIN和END定义段 PARAMETER DRIVER_NAME=cpu PARAMETER DRIVER_VER=1.11.b PARAMETER HW_INSTANCE=microblaze_0 PARAMETER COMPILER=mb-gcc PARAMETER ARCHIVER=mb-arENDBEGIN DRIVER#定义驱动,以BEGIN和END定义段 PARAME
47、TER DRIVER_NAME=bram PARAMETER DRIVER_VER=1.00.a PARAMETER HW_INSTANCE=dlmb_cntlrEND(此处省略部分内容)BEGIN DRIVER#定义驱动,以BEGIN和END定义段 PARAMETER DRIVER_NAME=uartlite PARAMETER DRIVER_VER=1.13.a PARAMETER HW_INSTANCE=RS232_DTEEND(此处省略余下内容)如果电脑与开发板之间已经连接好了串口通信线缆和下载线缆,那么可以按照下面的操作验证基本硬件平台是否设置正确。先打开Windows操作系统中【附
48、件】菜单下的【超级终端】,进行串口通讯设置,波特率设为9600 bps,数据位为8位,1位停止位,无奇偶校验位,如图7.21所示,用来监视主机串口的通讯情况。然后在XPS的菜单中单击【Device Configuration】【Download BitStream】,该操作需要运行一段时间,自动完成整个设计流程中从编译到下载配置的多个步骤。如无差错的话,在【超级终端】的窗口中将看到图7.22所示的两行字符串输出。图7.21 设置超级终端 图7.22 超级终端的输出结果如没有观察到此输出结果,主要原因可能有两个:超级终端软件的电脑主机和开发板的波特率设置不一致;使用的串口电缆其发送和接收端没有对
49、调,如使用的是9针串口电缆,应将发送和接收两侧串口的2和3脚进行对调连接,使电脑侧串口的接收线与开发板侧串口的发送线相连。2)添加外设(1)在XPS的工程信息区将视图切换到【IP Catalog】,该视图中列举出了当前工程可以利用的全部IP,包括用户的自定义IP,如图7.23所示。图7.23 工程可利用的IP库(2)双击或者拖曳需添加的外设IP,将其加入到当前硬件系统中。本例中,为系统添加了两个opb_gpio核,缺省命名为“xps_gpio_0”和“xps_gpio_1”,如图7.24所示。从图中左侧的总线连接图示上可以看出所添加的IP是基于PLB总线的。图7.24 添加外设IP(3)对新添
50、加的外设改名并选择其总线连接关系。本例新添的两个外设名分别改为“gpio_buttons”和“gpio_leds”,总线关系选择连接于“mb_plb”,如图7.25所示。图7.25 修改外设IP命名(4)为新添加的外设自动或手动分配基地址和大小,如图7.26所示。图7.26 分配外设的基地址和大小(5)确定外设的端口类型和位宽。gpio_buttons设置为与外部连接的输入端口,gpio_leds设置为与外部连接的输出端口,如图7.27所示。图7.27 设置外设的端口类型和位宽(6)在工程的ucf文件中为新添外设添加约束。在本例中,根据Spartan-3E Starter开发板的PCB布线关系