基于FPGA的嵌入式EDK开发技术

上传人:沈*** 文档编号:69354056 上传时间:2022-04-05 格式:DOC 页数:144 大小:6.66MB
返回 下载 相关 举报
基于FPGA的嵌入式EDK开发技术_第1页
第1页 / 共144页
基于FPGA的嵌入式EDK开发技术_第2页
第2页 / 共144页
基于FPGA的嵌入式EDK开发技术_第3页
第3页 / 共144页
点击查看更多>>
资源描述
第1节 可配置嵌入式系统(EDK)介绍9.1.1 基于FPGA的可编程嵌入式开发系统 嵌入式系统经历了从单片计算机、工业控制计算机、集中分布式控制系统,进而发展到嵌入式智能平台的几个发展阶段。从独立单机使用发展到联网设备。从以模拟电路为主发展到以数字电路为主、数模混合型,进而进入全数字时代。总的来说,嵌入式系统向着更高性能、更小体积、更低功耗、更廉价、无处不在的方向发展。嵌入式系统的设计和实现朝着基于芯片,特别是片上可编程系统(SOPC)的方向发展。 从系统对上市时间的要求、可定制特性以及集成度等方面考虑,FPGA在嵌入式系统中获得广泛应用,已经从早期的军事、通信系统等应用扩展到低成本消费电子类等产品中。目前,FPGA在嵌入式系统中,主要有3种使用方式: 状态机模式:可以无外设、无总线结构和无实时操作系统,达到最低的成本,应用于VGA和LCD控制等,根据用户设计可达到不同的性能。 单片机模式:包括一定的外设,可以利用实时操作系统和总线结构,以中等的成本,应用于控制和仪表,达到中等的性能。 定制嵌入模式:高度集成扩充的外设,实时操作系统和总线结构,达到高性能,应用于网络和无线通信等。 采用90nm生产工艺之后,FPGA器件处理能力更强,且成本低、功耗少,已取代了相当数量的中小规模ASIC器件和处理器,使嵌入式系统具备片上系统(SOC)的规模和动态可编程的能力,具有明显的优势,成为嵌入式应用的主力军之一。 9.1.2 Xilinx公司的解决方案 1解决方案 Xilinx公司的嵌入式解决方案以3类RISC结构的微处理器为核心,涵盖了系统硬件设计和软件调试的各个方面。3类嵌入式内核分别为:PicoBlaze、MicroBlaze和PowerPC,其中PicoBlaze和MicroBlaze是可裁剪的软核处理器,PowerPC为硬核处理器。 PicoBlaze是由VHDL语言在早期开发的小型8位软处理器内核包,其汇编器是简单的DOS可执行文件KCPSM2.exe,用汇编语言编写的程序经过编译后放入FPGA的块RAM存储区,汇编器可在3s内编译完存储在块RAM中的程序。 MicroBlaze采用功能强大的32位流水线RISC结构,包含32个32位通用寄存器和一个可选的32位移位寄存器,时钟可达150MHz,在Virtex 2 Pro以及更高系列的平台上,运行速度可达120DMIPs(DhrystoneMIPS),占用资源不到1000个Slice。 PowerPC是32位PowerPC嵌入式环境架构,确定了若干系统参数,用以保证在应用程序级实现兼容,增加了其设备扩展的灵活性。Xilinx将PowerPC 405处理器内核整合到Virtex 2 Pro系列以及更高等级系列的芯片中,允许该硬IP核能够深入到FPGA架构的任何部位,提供高端嵌入式应用的FPGA解决方案。Virtex 4以及Virtex 5系列部分芯片中集成了24个PowerPC405处理器核。 目前使用较多的嵌入式内核是MicroBlaze和PowerPC,工作频率可达到数百兆赫兹,还添加了新的浮点单元选项,使嵌入式开发人员可将系统性能提升至软件仿真速度的百倍以上,非常适合针对网络、电信、数据通信、嵌入式和消费等市场的产品。 2开发工具 嵌入式开发套件(EDK)是用于设计嵌入式可编程系统的全面的解决方案,该套件包括了嵌入式软件工具(Platform Studio)以及嵌入式 IBM PowerPC硬件处理器核和/或Xilinx MicroBlaze软处理器核进行Xilinx平台FPGA设计时所需的技术文档和IP。注意:这里嵌入式软件工具指用来产生、编辑、编译、链接、加载和调试高级编程语言(通常是C或C+)代码的工具,以便在处理器引擎上执行。 此外,Xilinx公司提供了大量的硬件平台(即评估板),提供了大量的软、硬件设计参考,使得设计人员可以快速了解嵌入式系统的基本操作和大量的IP核的使用方法,并对其完成评估,以确定最优的设计方案。一般来讲,最快捷的硬件设计方式是,在设计系统时以相应的评估板为母板,然后对其进行必要的修改。 第2节 Xilinx嵌入式开发系统组成介绍9.2.1 片内微处理器软核MicroBlaze 1MicroBlaze体系结构 MicroBlaze软核是一种针对Xilinx FPGA器件而优化的功能强大的32位微处理器,是业界最快的软处理器IP核解决方案,支持CoreConnect总线的标准外设集合,具有兼容性和重复利用性,最精简的核只需要将近400个Slice。 MicroBlaze软核内部采用RISC架构和哈佛结构的32位指令和数据总线,内部有32个通用寄存器R0R3、2个特殊寄存器程序指针(PC)和处理器状态寄存器(MSR)、1个ALU单元、1个移位单元和两级中断响应单元等基本模块,还可具有3/5级流水线、桶形移位器、内存管理/内存保护单元、浮点单元(FPU)、高速缓存、异常处理和调试逻辑等可根据性能需求和逻辑区域成本任意裁剪的高级特性,极大地扩展了MicroBlaze的应用范围。MicroBlaze处理器的内核仍在不断更新中,目前最新版为MicroBlaze V7.0,其内部架构如图9-1所示。 图9-1 MicroBlaze内部架构示意图 MicroBlaze处理器架构均衡了执行性能和设计尺寸,但由于其最高工作频率由FPGA芯片提供,所以计算性能随处理器配置、实现工具结果、目标FPGA架构和器件速度级别的不同而不同。表9-1给出了不同FPGA芯片上的MicroBlaze性能对比表,其结果不代表一般嵌入式应用的计算性能。 表9-1 MicroBlaze内核的最大Dhrystone性能 注:DMIPS表示每秒执行的Dhrystone指令数量。2MicroBlaze的总线接口 CoreConnect是由IBM开发的片上总线通信链,它使多个芯片核相互连接成为一个完整的新芯片成为可能。Xilinx以IBM CoreConnect为嵌入式处理器的设计基础,具有丰富的接口资源。目前,最新版本的MicroBlaze软核支持的接口标准有: 带字节允许的OPB(On-chip Peripheral Bus,片上外设总线)V2.0接口; 高速的LMB(Local Memory Bus,本地存储器总线)接口; FSL主从设备接口; XCL(Xilinx Cache Link,Xilinx缓存链路)接口; 与MDM(Microprocessor Debug Module,微处理器调试模块)连接的调试接口。 其中,OPB是对IBM Core Connect片上总线标准的部分实现,适用于将IP核作为外设连接到MicroBlaze系统中。LMB用于实现对片上的blockRAM的高速访问。FSL是MicroBlaze软核特有的一个基于FIFO的单向链路,可以实现用户自定义IP核与MicroBlaze内部通用寄存器的直接相连;而XCL则是MicroBlaze软核新增加的,用于实现对片外存储器的高速访问。MicroBlaze软核还有专门的调试接口,通过参数设置,开发人员可以只使用特定应用所需要的处理器特性。Xilinx提供了大量的外设IP Core,可外挂到MicroBlaze的OPB总线上,如DMA单元、以太网MAC层处理器、PCI/PCIe接口、串口以及USB等,如图9-2所示。图9-2 MicroBlaze支持的外设接口示意图 其中,DMA和多端口存储器控制器是高速接口,OPB属于低速接口总线,一个外设一般不能同时和这两类总线相连。以太网MAC控制器模块之所以和两类总线连接,是因为其控制接口和OPB总线相连,数据接口和高速的DMA总线连接。3MicroBlaze寄存器 1)通用寄存器 MicroBlaze内核中的32个32位的通用寄存器记为R0R31。寄存器并不是由外部复位输入(如reset或debug-rst脚)复位,而是在比特流下载的时候复位。通用寄存器的描述如表9-2所示。 表9-2 MicroBlaze通用寄存器功能表 2)特殊寄存器 程序指针(PC)寄存器:存储下一条指令的地址。它可以由一个MFS指令读出且不能由MTS指令写入。当使用MFS指令的时候,将Sa置为00000或rpc将定义PC寄存器。表中内容为程序指针执行中的指令的地址。也就是说,“mfs r2 rpc” 指令将把mfs指令自己的地址存入R2中。 机器状态寄存器(MSR):包含了处理器的控制和状态比特,可以通过MFS指令读,也可以通过MTS指令或者专用的指令MSRSET、MSRCLR指令写。当对MSR进行读操作时,bit29作为进位位被复制到bit0位。写MSR需要一个时钟周期的延时,当用MTS指令向MSR写指令时,在MTS指令执行结束一个时钟周期之后,写入的值才生效。所有写入bit0的值将被忽略。当使用MTS指令或MFS指令的时候,将sx置为0001或rmsr被定义为对MSR的操作。 4MicroBlaze指令集 MicroBlaze指令字为32位,有A型和B型两种类型指令。A型指令有两个源寄存器和一个目的寄存器,用以完成寄存器到寄存器间的数据运算;B型指令有一个源寄存器、一个目的寄存器和一个16位的立即数(通过在B型指令前加一个IMM指令可将其扩展到32位),可以进行寄存器和立即数间的数据运算。其指令按功能划分有逻辑运算、算术运算、分支、存储器读/写和特殊指令等。类型A和类型B的指令格式如图9-3所示。 图9-3(a) 类型A指令格式 图9-3(b) 类型B指令格式 图9-3 MicroBlaze指令格式 Microblaze指令执行的流水线是并行流水线,它分为3级流水:取指、译码和执行,如图9-4所示。图9-4 MicroBlaze的流水线 完整的MicroBlaze指令集见参考文献11。 9.2.2 片内微处理器PowerPC 1PowerPC体系结构 PowerPC是由苹果、IBM和摩托罗拉公司共同开发的微处理器结构,采用精简指令计算架构(RISC),并形成了一个开放的标准。Xilinx芯片中内嵌的PowerPC结构经过IBM公司优化,以较简单的、快速的运算为基础,促成微处理器在一个给定的时钟速度下执行较多的指令,主要包括PowerPC 405系列。PowerPC提供了3个不同层面的应用,从下往上分别是用户指令集结构(UISA)、虚拟环境结构(VEA)和操作环境结构(OEA),各层功能如表9-3所列。 表9-3 PowerPC 3层结构的说明 这种层次结构提供了软件兼容的灵活性。此外,所有的PowerPC都符合UISA规范,保证PowerPC对应用程序的兼容性,而VEA和OEA则可以有不同版本。Xilinx FPGA芯片中内嵌的32位硬PowerPC核,可以实现高性能嵌入式应用。目前,在单片FPGA芯片中可最多集成2个硬PowerPC核。PowerPC集成了5级标量流水线,具有独立的指令缓存和数据缓存、1个JTAG端口、Trace FIFO、多个定时器和一个内存管理单元(MMU)。此外,Xilinx的高端器件还集成了辅助处理器单元控制器(APU),可直接控制FPGA架构内的硬件指令协处理。PowerPC不占用FPGA内部任何逻辑资源,其内部架构如图9-5所示。 图9-5 PowerPC硬核的内部结构示意图 2Power PC总线接口与传统的总线接口不同,由于Power PC处理器内核被嵌入到FPGA芯片中,利用Xilinx的IP植入和主动互连技术,几百个处理器结点是直接连接到FPGA的逻辑和存储器阵列。这种总体植入在硬件/软件的系统结构中提供了超强的灵活性,可以有效地将复杂的功能成分在硬件中高速地实现和在软件中高度灵活地实现。这种直接连接的配置克服了利用总线在FPGA和附加外部处理器之间接口的瓶颈。 Power PC处理器也采用CoreConnect技术,可运行在100-133MHz的高带宽64位总线。为了使灵活性达到最大,CoreConnect结构是作为软IP在FPGA中实现的。和Microblaze软核一样,Power PC也具备LMB和OPB总线,分别用来接口高速和低速外设到PowerPC处理器。此外,Power PC还具有器件控制寄存器总线,可完成对通用外设器件寄存器的访问。 3PowerPC寄存器 PowerPC的寄存器可分为通用寄存器、专用寄存器、机器状态寄存器、条件寄存器和芯片控制寄存器5大类,如表9-4所列。表9-4 PowerPC寄存器列表 1)通用寄存器 PPC(Power PC的缩写)有32个32比特的通用寄存器,可通过加载指令从内存中读取数值或通过存储指令将数值写入内存。所有的计算指令的操作数都是通用寄存器,且输出结果也都存放于通用寄存器中,所有通用寄存器都可通过软件代码访问。 2)专用寄存器 PPC有丰富的32位专用寄存器,可访问额外的处理器资源,如计数寄存器、连接寄存器、调试资源、计数器、中断寄存器以及其余寄存器资源等。大多数专用寄存器是应用程序所不能访问的,只有计数器和连接寄存器等少数专用寄存器能被所有的软件所访问。 3)机器状态寄存器 32比特机器状态寄存器(MSR)定义了PowerPC处理器的工作状态,允许用户修改。 4)条件寄存器 32位的条件寄存器(CR)可分为8个区域(CR0-CR7),每区域包含4个比特,可用于控制所有的条件分支。算术指令可配置CR0,比较指令可配置所有的CR数值。应用软件可访问所有的CR数值。 5)芯片控制寄存器 32比特芯片控制寄存器用于配置、控制和读取外部处理器,虽然芯片控制寄存器不是PPC的一部分,但仍可在特殊软件中通过mtdcr和mfdcr指令来访问。 3PowerPC指令集 PowerPC实现5级流水线,包括取指、译码、执行、写回、加载写回。PowerPC的指令包括数学运算、逻辑运算、比较、跳转、中断等指令,分为B、D、I、M、SC、X、XFX、XL以及XO类型,详细的指令集见参考文献12。 PowerPC执行指令的速度接近每周期执行一条指令,各类指令的典型执行速度如表9-5所列。 表9-5 PowerPC的指令执行周期列表 9.2.3 常用的IP核以及设备驱动 Xilinx在EDK环境中提供了嵌入式系统中常用的设备,包括:通用I/O设备、中断控制器设备、定时器、外部存储器控制器以及以太网、串口等高、低通信设备。上述外设以及外设驱动都以IP Core的形式给出,便于使用。本节主要介绍CPU系统所必需的基本外设,如通用I/O、中断以及外存储器控制器。 1通用I/O设备(GPIO) 1)GPIO结构 通用I/O设备是32位的OPB总线外设,每一位GPIO都可动态配置为输入、输出端口,包含一个寄存器和一个多路器。每个GPIO可最多包含两个通道,通过IPIF模块连接到OPB总线,如图9-6所示,其中的IPIF模块相当于外部总线控制器。 图9-6 GPIO模块的连接示意图 GPIO的寄存器可以以双字(32比特)、字(16比特)以及字节(8比特)的方式访问。为了与OPB总线相连,需要和IPIF寄存器匹配,因此GPIO的寄存器是字边界访问的。GPIO的数据格式如图9-7所示。图9-7 GPIO的数据格式示意图 GPIO设备完整的端口信号如表9-6所列,在系统中可根据实际需求配置相应的参数。其中C_OPB_AWIDTH为OPB外设地址总线宽度;C_OPB_DWIDTH为OPB外设数据总线宽度;C_GPIO_WIDTH为GPIO的总线宽度;C_BASEADDR为系统为GPIO设备分配的基地址,C_HIGH ADDR为高地址。 表9-6 GPIO组件的端口信号 OPB总线对GPIO寄存器的读写时序如图9-8和图9-9所示。实际上,OPB总线有4种不同的总线访问方式:访问寄存器接口、访问SRAM接口、访问FIFO接口以及突发传送,每种方针方式用于不同的总线操作,具有不同的时序。 图9-8 OPB总线读取GPIO寄存器的时序逻辑 图9-9 OPB总线写GPIO寄存器的时序逻辑 无论读、写操作,都是由OPB总线发出请求,经过几个时钟周期后,收到应答信号表明操作成功,是CPU、DSP等处理器最常见的读、写寄存器操作。 2)GPIO驱动 在EDK中,与GPIO有关的底层文件有:xgpio.c、xgpio.h、xgpio_i.h以及xgpio_l.h。其中xgpio.c定义了GPIO所有的驱动函数,所以在GPIO的用户代码中添加下列语句: #include “xgpio.h” #include “xgpio_1.h” #include “xgpio_i.h” 在xgpio.c中定义了下面驱动函数,包含GPIO的初始化、配置、方向的设定、读取和赋值输出等函数。下面给出常用的GPIO操作函数: (1)初始化函数 XStatus XGpio_Initialize (XGpio *InstancePtr, Xuint16 DeviceId); 其中InstancePtr是Xgpio结构体指针,存储器的指针参数必须被预先指定;DeviceId是由Xgpio控制的唯一的设备ID,可在xparameter.h文件中找到。通过XGpio_Initialize函数将唯一的设备ID和Xgpio结构体联系起来指定设备。 (2)配置查找函数 XGpio_Config * XGpio_LookupConfig (Xuint16 DeviceId); 该函数查找唯一标志符DeviceId所标识的设备配置,系统配置表里包含了每一个设备的配置信息。返回的m_XGpio即为设备配置结构指针,返回m_XNULL表明未找到标识设备。 (3)数据方向设置函数 void XGpio_SetDataDirection (XGpio *InstancePtr, unsigned Channel, Xuint32 DirectionMask); XGpio_SetDataDirection配置GPIO的数据传输方向。InstancePtr是Xgpio结构体指针;Channel为GPIO的通道数(每个GPIO模块有两个通道),可选值为1或2;DirectionMask是输入输出的位标识,对应位的值为0表示输出,1表示输入。 (4)数取函数 Xuint32 XGpio_DiscreteRead (XGpio *InstancePtr, unsigned Channel); XGpio_DiscreteRead读寄存器的值。InstancePtr是Xgpio结构体指针;Channel为GPIO的通道数,可选值为1或0。 (5)赋值函数 void XGpio_DiscreteWrite (XGpio *InstancePtr, unsigned Channel, Xuint32 Mask); XGpio_DiscreteWrite写寄存器的值。InstancePtr是Xgpio结构体指针;Channel为GPIO的通道数,可选值为1或0。 2中断控制器 1)GPIO结构 中断控制器(opb_intc)由中断控制核和总线接口组成,中断核可通过参数配置,与相应的总线接口逻辑配合,接在OPB总线上或DCR总线上,即opb_intc和dcr_intc,可用于MicroBlaze和PowerPC嵌入式系统。其和OPB总线的典型连接方式如图9-10所示。 图9-10 中断控制器和OPB总线的连接示意图 中断控制器包括8个可访问的寄存器,如表9-7所列。通过寄存器的配置,中断输入可以通过电平触发或沿触发,包括高电平触发、低电平触发、上升沿触发和下降沿触发。表9-7 中断控制器以及地址偏移 中断控制器完整的端口信号如表9-8所列,在系统中可根据实际需求配置相应的参数。表9-8 中断控制器的端口信号中断控制器的OPB读写时序如图9-11所示。图9-11 OPB总线中断控制器读写时序 2)中断控制器驱动 在EDK中,与中断控制器有关的底层文件有:xintc.c、xintc.h、xintc_g.c、xintc_i.h、xintc_intr.c、xintc_l.c、xintc_l.h、xintc_options.c以及xintc_selftest.c。所以在GPIO的用户代码中添加下列语句:#include “xintc.h” #include “xintc_1.h” #include “xintc_i.h” 中断控制器的驱动函数,包含中断控制器的初始化、使能、撤销以及清除等函数。下面给出常用的中断控制器操作函数: (1)初始化函数 XStatus XIntc_Initialize (XIntc *InstancePtr, Xuint16 DeviceId); XIntc_Initialize用于指定中断控制模块,同时初始化中断结构域、中断向量表,撤销中断源以及中断输出使能。其中InstancePtr是Xintc的对象;DeviceId是中断模块的唯一设备ID号。返回m_XST_SUCCESS表明初始化成功,否则初始化失败。 (2)中断使能函数 XStatus XIntc_Start (XIntc *InstancePtr, Xuint8 Mode); XIntc_Start开始中断控制。其中InstancePtr是Xintc的对象;Mode为中断模式,可使能模拟中断以及真实的硬件中断。 (3)中断撤销函数 void XIntc_Stop (XIntc *InstancePtr); XIntc_Stop输出停止中断控制,其中InstancePtr是Xintc的对象。 (4)中断源连接函数 XStatus XIntc_Connect (XIntc *InstancePtr, Xuint8 Id, XInterruptHandler Handlervoid *CallBackRef); XIntc_Connect连接中断源的ID以及与之关联的处理程序,当中断被确认后,处理程序将运行。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断;Handler是中断处理程序;CallBackRef是返回参数,通常为连接驱动器的对象指针。若返回mXST_SUCCESS表明连接正确,否则则连接失败。 (5)中断源撤销函数 void XIntc_Disconnect (XIntc *InstancePtr, Xuint8 Id); XIntc_Disconnect撤销与中断源Id关联的处理程序。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。 (6)特定中断使能函数 void XIntc_Enable (XIntc *InstancePtr, Xuint8 Id); XIntc_Enable使能由竞争ID提供的中断源,任何一个未决的特定中断条件将导致一个功能调用。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。 (7)特定中断撤销函数 void XIntc_Disable (XIntc *InstancePtr, Xuint8 Id); XIntc_Disable撤销由竞争ID提供的中断源,但中断控制器将不产生一个特定Id的中断,将继续保留该中断条件。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。 (8)中断源响应函数 void XIntc_Acknowledge (XIntc *InstancePtr, Xuint8 Id); XIntc_Acknowledge响应竞争后Id的中断源,响应中断后将清除中断条件。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。 3外部存储器控制器 外部存储器控制器基本涵盖了目前所有的外部存储器类型,包括片内BRAM、sram、sdr sdram、ddr sdram、ddr2 sdram以及Flash等器件。这里以sdr sdram控制器为例介绍其结构和底层驱动。 1)sdr sdram控制器结构 sdr sdram存储器是动态同步存储器的一种,采用单时钟,其时钟频率就是数据存储的频率,如时钟信号为100或133 MHz,则数据读写速率也为100或133MHz。但由于sdram依赖于电容的电量来区分逻辑“0”和“1”,但电容器会不断漏电,需要周期性地刷新sdram的每一个存储单元,因此读写时序比较复杂,且读写速率也达不到工作时钟的频率。sdram控制器的作用就是将sdram存储器的初始化、刷新、地址转换、数据读取等操作封装起来,让使用者将其看成系统黑盒,读数直接按地址访问,写数直接往目的地址赋值即可。Xilinx提供了sdr sdram控制器的IP Core,在XPS中,直接将其添加到OPB总线上即可。sdr sdram控制器的内部结构以及与OPB总线的接口如图9-12所示。图9-12 sdram控制器和OPB总线的连接示意图 sdram控制器完整的信号端口列表如表9-9所列。其中C_SDRAM_DWIDTH为sdram存储器的数据宽度,C_SDRAM_AWIDTH为sdram存储器的地址宽度,C_SDRAM_BANK_ AWIDTH为存储器BANK的地址。 表9-9 sdr sdram控制器的端口信号列表 sdram控制器支持不同数据位宽的读、写模式,且不同位宽以及不同刷新模式下的读写时序和配置都是不同的。例如,突发模式下16比特数据位宽的sdram控制器读写时序如图9-13和图9-14所示。图9-13 16比特突发模式读数据的时序逻辑图 图9-14 16比特突发模式写数据的时序逻辑图 2)sdr sdram控制器驱动 在嵌入式系统中,sdr sdram控制器对于用户来讲是透明的,即用户在功能使用上没有初始化、刷新等操作,直接用IO读写函数读写相应的地址即可。基本的IO读写函数在文件xio.h中定义,其本质就是简单的指针赋值语句,32比特位宽的读写函数如下所示。 #define XIo_In32(InputPtr) (*(volatile Xuint32 *)(InputPtr) #define XIo_Out32(OutputPtr, Value) (*(volatile Xuint32 *)(OutputPtr) = (Value) 因此在操作sdram时,只需添加下列两个头文件。其中,xio.h定义了端口操作的函数,xparameters.h文件则给出了sdram存储器的基地址。 #include xio.h #include xparameters.h 9.2.4 系统设计方案 1嵌入式总线介绍 总线是多组信号的有效组合,处理器和周边设备通过总线地址、数据以及片选控制等信号进行通信。根据对总线的控制,可将外设分为仲裁设备、主设备、从设备以及主/从设备(桥)。Xilinx嵌入式系统中的总线可分为3类:片外设备总线(OPB)、本地存储器总线(LMB)以及快速简单连接总线(FSL),分别用于访问低速外设、片内高速存储器以及高速外设。 OPB总线能在不影响OPB仲裁器和其余设备的基础上添加周围设备,同步于系统时钟,共享32位地址总线、32位数据总线,支持主设备和从设备之间单一周期数据传送。LMB总线提供单时钟访问片内双口RAM,并提供了简单的同步协议。 PLB总线是PowerPC的高带宽总线,64位数据总线宽度,分离的地址、读写数据总线,具备分别传输的能力。同时执行的读写传输能最有效利用总线,在单周期内可传输两个数据;此外,PLB总线地址通道能叠加一个新的写请求到一个正在执行的写操作上,以及最多3个读请求到正在执行的读操作上,从而减少总线反映时间。 MicroBlaze软核的系统总线有LMB、OPB总线,指令和数据分开。LMB总线用于访问片内存储器的数据和指令,OPB用于片外设备的连接。MicroBlaze典型的总线连接方式如图9-15所示。 图9-15 典型的MicroBlaze总线连接示意图 PowerPC硬核的系统总线分为PLB、OCM以及DCM总线,OPB总线可通过总线桥与PLB总线连接,从而访问外部速度较低的设备,PowerPC典型的总线连接方式如图9-16所示。 图9-16 典型的PowerPC总线连接示意图 2嵌入式系统设计方案 1)系统架构 基于MicroBlaze和PowerPC的嵌入式系统和计算器系统类似,满足冯诺伊曼架构,将应用程序存放在外部非易失存储器(Flash或PROM)中,上电后将其加载到片内BRAM或映射到外部的SDRAM/SRAM存储器中。该类系统的架构是可裁剪的,完全根据需求来添加外设,常用于实现专一的功能,具有价格低、速度快、功耗小以及软硬件协同工作的特点。典型的MicroBlaze的PowerPC的嵌入式系统架构分别如图9-17和图9-18所示。 图9-17 MicroBlaze系统组成架构 图9-18 PowerPC系统组成架构 2)系统地址分配 MicroBlaze采用32位地址,其中0x0000_00000x0000_0017用于特殊处理,0x0000_00180xFFFF_FFFF是用户可用的部分,LMB存储器从地址0x0000_0018开始。 PowerPC采用32位地址,其中每一个PowerPC都有其系统引导(boot)区,地址为0xFFFF_FFFC,缺省的可用空间为0xFFFF_00000xFFFF_FFFF。第2节 EDK软件基本介绍9.3.1 EDK的介绍与安装 1Xilinx嵌入式开发工具集 一般而言,由于嵌入式系统涉及了软件和硬件的开发以及两者的综合设计,因此其开发是较为复杂的。Xilinx为了简化基于FPGA的嵌入式开发流程,提供了功能强大、操作简单的工具集ISE和EDK。1)集成软件环境ISE ISE是Xilinx公司FPGA逻辑设计的基础。在这个环境中,设计者可以进行约束文件的编写,时序分析,逻辑布局布线以及器件编程等。本书第4章对ISE的使用进行了较为详细的说明,这里就不再累述。 2)嵌入式开发套件(Embedded Development Kit,EDK) EDK自带了许多工具和IP,可以用来设计完整的嵌入式处理器系统,主要包括Xilinx平台工作室XPS和软件开发套件SDK。读者需要注意的是:只有安装了ISE软件,才能正常运行EDK,且二者的版本要一致。 下面对EDK的组成模块进行简要说明: 1. Xilinx平台工作室(Xilinx Platform Studio,XPS) XPS是用来设计嵌入式处理器系统硬件部分的开发环境或GUI,是系统设计者构建 Xilinx嵌入式系统时必用的工具套件。在XPS中,可以完成嵌入式系统架构的创建、软件代码的编写、设计的编译以及FPGA芯片的硬件配置。 2. 软件开发套件(Software Development Kit,SDK) SDK是集成的开发环境,基于Eclipse。它支持C/C+,用于嵌入式软件应用的开发和验证。 3. 其它EDK部分 EDK还包括其它的一些部分,如:用于Xilinx嵌入式处理器的硬IP;用于嵌入式软件开发的驱动和库;在MicroBlaze和PowerPC处理器上用于C/C+软件开发的GNU编译器和调试器;有关文档以及一些工程样例等。 2EDK软件的安装 EDK9.1软件安装的基本硬件要求如下:CPU在P III以上,内存大于256M,硬盘大于4G的硬件环境安装。为了更好地使用软件,至少需要512M内存,CPU的主频在2GHz以上。需要注意的是,安装EDK之前,必须安装ISE9.1。EDK的具体安装过程如下: 1)将安装光盘放进DVD光驱,等待其自动运行(如果没有自动运行,直接执行光盘目录下的Setup.exe文件程序即可),欢迎界面后会出现如图9-19所示的获取注册码对话框,可以通过网站、邮件和传真方式申请注册码。如果已有注册码,单击“Next”按键后继续。图9-19 EDK9.1安装程序的欢迎界面 2)下一个对话框是Xilinx软件的授权声明对话框,如图9-20所示,选中“I accept the terms of this software license”,单击“ Next”后进入注册码输入对话框,输入正确的注册码后,单击“ Next”按键后,出现安装路径对话框,单击“Browse”按键后选择自定义安装路径,单击“ Next”按键继续。 图9-20 EDK9.1安装注册ID输入界面 3)接下来的几个对话框分别是选择安装设计环境、设置环境变量,这两个步骤保持默认即可。最后进入安装确认对话框,单击“Install”按钮,即可按照用户的设置自动安装ISE。需要注意的是,在选择安装设计环境时,用户需要选择自己使用的芯片所对应的模块,这样才能在开发中使用这些模块,一般选择“Select All”。 4)安装完成后,会在桌面以及程序菜单中添加EDK的快捷方式。双击即可进入EDK集成开发环境。 9.3.2 EDK设计的实现流程 1基于EDK的开发流程 一个完整的嵌入式设计流程包括硬件设计和调试、软件设计与调试,各个步骤相对独立但又相辅相成。由于嵌入式应用场合多样,且软、硬件都可裁剪,因此并不是每个设计都要完成所有的步骤。图9-21为基于EDK的嵌入式设计的简化流程图。 图9-21 简化的嵌入式设计流程图 通常ISE FPGA开发软件在后台运行,XPS工具调用ISE软件提供的功能。XPS主要用来嵌入式处理器硬件系统的开发。微处理器、外围设备以及这些组件之间的连接问题,另外还有它们各自的属性设置都在XPS里进行。简单的软件开发可以在XPS里完成,而对于更复杂的应用开发和调试,Xilinx则推荐使用SDK工具。硬件平台的功能验证可以通过硬件描述语言HDL仿真器完成。XPS提供了行为级、结构级以及定时精确级等三种类型的仿真。验证过程结构由XPS自动产生,其中包括了仿真的HDL文件。设计者只需要输入时钟时序、重配置信息以及一些应用代码即可。仿真细节将在下面的内容中进行相关讲述。完成设计后,在XPS中将FPGA比特流和可执行可链接格式文件下载,就可以进行目标器件的配置。 完整的EDK开发流程如图9-22所示,其主要步骤有: 1. 创建硬件平台:利用XPS的板级开发包向导(BSB Wizard)快速构建设计的硬件平台,是EDK设计的第一步。 2. 添加IP Core以及用户定制外设:在XPS中添加所需的IP Core,对于XPS库中缺少的模块,需要用户自行设计。同样,XPS提供了建立用户自定义外设的向导,可简化该过程。 3. 生成仿真文件并测试硬件系统:生成硬件系统的仿真文件,可选择行为级、结构级以及时序级仿真,利用ModelSim等工具测试系统,特别是用户自定义的外设;如果测试失败,需要返回上一步修改。 4. 生成硬件比特流:生成硬件网表和比特流文件,这个步骤类似于传统FPGA设计的综合、布局布线、生成编程文件这3个操作。 5. 开发软件系统:针对软件需求编写硬件代码,确定软件的操作系统、库、外设驱动等属性,针对每个应用软件工程,设置编译器、优化级别、使用的连接文件等信息。等设置完成后,编译生成.elf格式的可执行代码。 6. 合并软、硬件比特流:编译软件后,需要将软、硬件可执行文件合并在一起,生成最终的二进制比特文件。 7. 下载:使用JTAG编程电缆或编程器将更新后的最终比特流烧写到FPGA、PROM、FLASH以及CF卡。 8. 在线调试:可利用XMD工具或ChipScope工具调试,通过JTAG编程电缆在线调试,下载可执行软件代码、控制执行,并监控相关系信息。 图9-22 完整的嵌入式设计流程图 2EDK设计比特文件的组成 如前所述,最终下载到FPGA的嵌入式比特流文件是软、硬件比特流合并在一起的,详细的组成部分如图9-23所示。硬件部分比特流包括MHS文件、用户自定义HDL代码,二者经过综合实现后,产生.ngc网表,生成硬件系统的比特流文件;软件系统包括MSS文件、用户.c/cpp/asm文件,通过GCC编译器,生成目标文件.obj,再经过连接合成软件系统的比特流文件;最后通过Data2MEM过程,将软、硬件比特流合成完整系统比特流文件,通过JTAG链路下载到FPGA芯片中。 图9-23 EDK配置比特文件的组成结构 9.3.3 EDK的文件管理架构 对于嵌入式应用来讲,软、硬件协同开发是非常重要的,虽然EDK提供了XPS工具和SDK工具这两个图形化平台,但仍以文件结构管理为基础,图形化平台只是方便用户操作的,所有的设置内容都会写入相应的文件中。了解相应格式的文件是掌握EDK工具操作的必备知识。本节将介绍EDK构建嵌入式系统软、硬件系统的文件,以及管理、存储数据文件的模式和流程。 1板级支持包Board Support Package(BSP) BSP为每个处理器定义了系统的硬件元素。它包括了不同的嵌入式软件元素,如软件驱动文件、所选的库、标准I/O设备、中断处理程序以及其它相关的特征。因此,在将处理器、外围设备组装到硬件系统上,且定义了地址映射后,可以利用XPS来产生BSP。 与硬件组件类似,XPS允许用户规定软件平台部分并管理软件应用。XPS的应用标签包含了用户所需要的工具和命令。 2XMP工程文件 EDK设计的工程文件就是.xmp格式,定义了EDK工具的版本、相关的硬件配置文件(MHS)和软件配置文件(MSS)、目标器件的类型、软件的源码和库位置等信息。用UltraEditor等文本编辑工具可打开查看,ProgStart为程序的起始位置,对应着内存的起始地址;StackSize标志着堆栈信息。与MSS中的信息是一致的。总的来讲,XMP文件是由XPS软件自动生成的,用户一般不要自行修改。下面通过在实际的XMP文件中添加注释来解读XMP文件。 #Please do not modify this file by hand XmpVersion: 9.1 #EDK版本 VerMgmt: 9.1 IntStyle: default MHS File: system.mhs MSS File: system.mss NPL File: projnav/system.ise Architecture: virtex2p #目标器件家族 Device: xc2vp30 #目标器件型号 Package: ff896 #目标器件封装 SpeedGrade: -7 #目标器件速度等级 UseProjNav: 0 PNImportBitFile: projnav/system.bit PNImportBmmFile: implementation/system_bd.bmm UserCmd1: UserCmd1Type: 0 UserCmd2: UserCmd2Type: 0 TopInst: system_i GenSimTB: 0 InsertNoPads: 0 WarnForEAArch: 1 HdlLang: VHDL #所使用的HDL语言类型 Simulator: mti #仿真工具为ModelSim SimModel: BEHAVIORAL#仿真模型为功能仿真模型 MixLangSim: 1 UcfFile: data/system.ucf FpgaImpMode: 0 ShowLicenseDialog: 1 Processor: ppc405_0 #处理器类型为硬核PowerPC BootLoop: 0 XmdStub: 0 Processor: ppc405_1 BootLoop: 0 XmdStub: 0 SwProj: config_decoder_revb Processor: ppc405_0#下面是各类文件的说明 Executable: config_decoder_revb/executable.elf Source: config_decoder_revb/src/xi2c_l.c Source: config_decoder_revb/src p_config_decoder.c Source: config_decoder_revb/src/uart.c Header: config_decoder_revb/src/xi2c_l.h Header: config_decoder_revb/src/uart.h DefaultInit: executable InitBram: 1 Active: 1 CompilerOptLevel: 2 GlobPtrOpt: 0 DebugSym: 1 ProfileFlag: 0 ProgStart: 0X45000000 #程序起始地址 StackSize: #堆的大小 HeapSize: #栈的大小 LinkerScript: ProgCCFlags: CompileInXps: 1 NonXpsApp: 0 3MHS文件和其他相关的硬件平台元素 MHS文件是硬件结构描述文件,定义了系统结构、外围设备和嵌入式处理器,也定义系统的连通性、系统中每个外围设备的地址分配和对每个外围设备的可配选项。该文件可随意更改,在图形界面中对硬件结构的任何改动,都要写入该文件中。同样,对于高级用户,可通过直接修改MHS文件来代替XPS中的图形操作。MHS文件严格按照分层设计的思想,每个硬件模块都是一个独立的组件,再通过上层模块连接起来,形成整个系统。下面通过在实际的MHS文件中添加注释来解读MHS文件。 PARAMETER VERSION = 2.1.0 #定义了参数集版本 PORT sys_clk_pin = dcm_clk_s, CLK_FREQ = 50000000, DIR = I, SIGIS = CLK #定义了系统时钟,大小为50MHz,方向为输入,标记为时钟信号 PORT sys_rst_pin = sys_rst_s, DIR = I, RST_POLARITY = 1, SIGIS = RST PORT sg2fsl_r = xlsg_ifacesg2fsl_r, DIR = I PORT fsl2sg_ctrl = xlsg_ifacefsl2sg_ctrl, DIR = O PORT fsl2sg_data = xlsg_ifacefsl2sg_data, DIR = O, VEC = 0:31 PORT fsl2sg_exists = xlsg_ifacefsl2sg_exists, DIR = O PORT sg2fsl_ctrl = xlsg_ifacesg2fsl_ctrl, DIR = I PORT sg2fsl_data = xlsg_ifacesg2fsl_data, DIR = I, VEC = 0:31 PORT sg2fsl_w = xlsg_ifacesg2fsl_w, DIR = I PORT fsl2sg_full = xlsg_ifacefsl2sg_full, DIR = O #子模块定义,以BEGIN和END定义段 BEGIN microblaze #定义名称 PARAMETER INSTANCE = microblaze_0 #定义例化名称 PARAMETER HW_VER = 6.00.a #定义软件版本 PARAMETER C_USE_FPU = 0 PARAMETER C_DEBUG_ENABLED = 1 PARAMETER C_NUMBER_OF_PC_BRK = 2 PARAMETER C_AREA_OPTIMIZED = 1 PARAMETER C_FSL_LINKS = 1 #下面开始全是端口信号 BUS_INTERFACE DLMB = dlmb BUS_INTERFACE ILMB = ilmb BUS_INTERFACE DOPB = mb_opb BUS_INTERFACE IOPB = mb_opb BUS_INTERFACE SFSL0 = xlsysgenfsl_v20_1 BUS_INTERFACE MFSL0 = xlsysgenfsl_v20_0 PORT DBG_CAPTURE = DBG_CAPTURE_s PORT DBG_CLK = DBG_CLK_s PORT DBG_REG_EN = DBG_REG_EN_s PORT DBG_TDI = DBG_TDI_s PORT DBG_TDO = DBG_TDO_s PORT DBG_UPDATE = DBG_UPDATE_s END 4MSS文件和其它的软件平台元素 除了硬件部分利用MHS文件来描述硬件元素, XPS还利用了微处理
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!