第2节 Xilinx嵌入式开发系统组成介绍
推荐给好友
打印
加入收藏
更新于2008-05-28 11:48:42

9.2.1 片内微处理器软核MicroBlaze

1.MicroBlaze体系结构

MicroBlaze软核是一种针对Xilinx FPGA器件而优化的功能强大的32位微处理器,是业界最快的软处理器IP核解决方案,支持CoreConnect总线的标准外设集合,具有兼容性和重复利用性,最精简的核只需要将近400个Slice。

MicroBlaze软核内部采用RISC架构和哈佛结构的32位指令和数据总线,内部有32个通用寄存器R0~R3、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指令数量。

2.MicroBlaze的总线接口

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总线连接。

3.MicroBlaze寄存器

1)通用寄存器

MicroBlaze内核中的32个32位的通用寄存器记为R0~R31。寄存器并不是由外部复位输入(如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的操作。

4.MicroBlaze指令集

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

1.PowerPC体系结构

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硬核的内部结构示意图

2.Power 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还具有器件控制寄存器总线,可完成对通用外设器件寄存器的访问。

3.PowerPC寄存器

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指令来访问。

3.PowerPC指令集

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 Handler 
               void *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_0000~0x0000_0017用于特殊处理,0x0000_0018~0xFFFF_FFFF是用户可用的部分,LMB存储器从地址0x0000_0018开始。

PowerPC采用32位地址,其中每一个PowerPC都有其系统引导(boot)区,地址为0xFFFF_FFFC,缺省的可用空间为0xFFFF_0000~0xFFFF_FFFF。 

 

<<上一节    下一节>>




 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.