XPS:Xilinx Platform Studio,平台工作室。用于嵌入式处理器硬件部分的开发。
SDK:Software Development Kit,软件开发套件。基于Eclipse平台,支持C/C++。
MicroBlaze总线:MB实质上是一个IP核,这个IP核对外总线接口有PLB(包括一个DPLB和一个IPLB)、LMB(包括一个DLMB和一个ILMB)、FSL(8个FSL主、8个FSL从接口)、XCL(包括一个DXCL和一个IXCL)、MDM。即指令只能通过LMB/XCL/PLB的指令端口访问,速度由快到慢。PLB、LMB、FSL总线也是一个IP核,XCL内嵌两个FSL总线接口,是点对点双向总线。MB应当选用不同的总线来访问不同的外设,且正确协调这些总线的工作。XCL主要是配合MPMC,用于MB的指令Cache和数据Cache从外部存储器读取指令或数据,例如可配置MPMC的两个访问端口为XCL,分别连到MB的DXCL和IXCL上。可以通过配置Microblaze_0模块添加FSL总线,用于和高速点对点输入输出的用户IP的连接。PLB用于MB与系统提供的其它基于PLB总线或基于PLB总线的用户IP相连接。使用CIP创建用户自己的IP,只有PLB和FSL两种可选接口,XCL/LMB为专用于存放程序代码。也可以手工创建NPI接口的用户IP,但以后版本不确定是否支持NPI接口。MDM总线用于调试。注:在SDK环境中,Xilinx Tools->Linker scripts中或在项目上右键,打开Linker scripts来分配程序、堆栈等所占的内存区域,在Windows程序组EDK->Documentation下面有SDK的帮助文档,可查看这部分的帮助。
在EDK12.2的edk_ctt手册中产生的XPS项目中,可以看出MB的总线结构。Microblaze_0下面有DLMB、ILMB、DPLB、IPLB、DXCL、IXCL、DEBUG、TRACE。其中DLMB连接到命名为dlmb的LMB总线上(最上面),同时IP模块dlmb_cntlr的一端也连接到dlmb总线上,一端连接到lmb_bram模块(双口BRAM)的端口B上,同样MB的ILMB最终也连接到lmb_bram模块的端口A上,即lmb_bram为内存,用于MB存放运行软件程序(XPS的帮助上说这个内存不要开的太大,以免LMB总线超负荷降低效率)。由于MB只有一个DLMB和一个ILMB,如果程序代码过大或数据空间不够用,可通过xps_bram_if_cntlr_0,其一端连接PLB,一端连接IP模块bram_block,把FPGA内部的BRAM外扩为MB的存储空间,其大小在XPS界面的Addresses栏设置,参见相应的IP核手册查看此IP能够管理的BRAM大小,此IP管理BRAM深度为32K,当BRAM宽度为32时支持128KB容量的BRAM,当BRAM宽度为64或128时分别为256KB/512KB;或通过MPMC和XCL或PLB外扩DDR;或通过xps_mch_emc和PLB外扩SRAM和NOR FLASH。上述例子里MB的DPLB和IPLB均连接到PLB总线上,和其它外设通过PLB连接到一起,也可以IPLB再用一个单独的PLB总线,外扩存储程序的内存,构成哈佛结构,但一般不必要。
PLB:Processor Local Bus总线。支持任意数目的PLB主设备,可支持128/64/32位宽的主设备和从设备。PLB接口包括IPLB和DPLB两种,IPLB接口用于外设与处理器指令缓冲的连接,DPLB用于外设与处理器数据缓冲的连接。
LMB:Local Memory Bus总线,同步总线,用于MB访问存放指令和数据的片上块RAM。32位宽,包括三种传输方式:字节/半字/字到32位宽BRAM、字节/半字到16位宽BRAM、字节到8位宽BRAM。使用最少的控制信号和简单的协议以达到单周期访问本地块RAM的目的。MB有两个LMB即ILMB和DLMB,分别用于处理器指令和数据接口。lmb_bram_if_cntlr核一端通过LMB总线连到MB的DLMB或ILMB端口,一端连到片上BRAM,由于lmb_bram_if_cntlr核支持最大BRAM大小为128KB,即MB片上BRAM最大为128KB。对于比较小的设计,可把代码直接放到片上BRAM,或者把复杂设计的BOOTLOADER放到片上BRAM。
FSL:Fast Simplex Link总线,32位宽。FSL用于单向、点到点、基于FIFO的快速接口,可用于连接FPGA上任意两个带有FSL总线接口的设备,及用户IP开发。每个FSL有一个输入口和一个输出口。FSL内部FIFO深度最小为1,最大8K。MB最多支持16个FSL接口,即8个FSL主(MFSL或DWFSL)和8个FSL从(SFSL或DRFSL)接口。MFSL(Master FSL Interface)用于FSL总线连接,而DWFSL(FSL master direct connectioninterface)用于直接连接到FSL从设备上。SFSL(Slave FSL Interface)用于FSL总线连接,而DRFSL(FSL slave direct connection interface)用于直接连接到FSL主设备上。XCL使用直接FSL连接方式。
XCL:Xilinx CacheLink总线,32位宽。只有在MB核的指令或数据缓存使能的情况下才可以使用(LMB不需要指令或数据缓存使能),指令或数据缓存可分别单独使能。与MB缓存接近直接连接。每个XCL内嵌两个FSL接口,是高性能的外部内存访问接口。在配合MPMC的情况下,是最小延时的解决方案,此时XCL接口时钟可以是MPMC_clk0的二倍或一倍。XCL分为指令端XCL(IXCL)和数据端XCL(DXCL)。猜想:XCL用于从外存读取连续的一段指令或数据到MB内部缓存中,类似于从windows系统从磁盘上预读取缓存技术,因此没有单独的地址线,需要使用额外信号线来表示地址还是数据,也仅用于缓存读取用,不能使用在用户IP接口上。
MDM:Xilinx Microprocessor Debug Module。
MPMC:Multi-Port Memory Controller,多端口内存控制器。MPMC通过可配置的PHY层连接外部内存,通过1到8个相互独立的端口供用户访问,每个端口包含一个可配置的PIM,配置成用户所需要的接口形式。MPMC包含仲裁器,支持多个端口同时访问内存。为减少MPMC所占用的资源,参见DS643手册206页“MPMC Size Optimization”。
PIM:Personality Interface Modules,MPMC提供给用户的访问端口,可配置成PLB、XCL、NPI、SDMA、VFBC、MCB(仅Spartan-6器件)接口形式。
NPI PIM:Native Port Interface。MPMC支持32/64位宽NPI。专用于MPMC的PIM中,是最高性能的PIM(除配置成MCB的PIM),所有其它的PIM形式均通过NPI连接到MPMC,例如XCL PIM接口可认为把XCL命令翻译成NPI命令的一个桥。以后版本不确定是否继续支持。NPI接口简单,几乎适用于任何协议;用户可以利用NPI扩展MPMC的接口形式,以适应用户自己的设计;NPI包括地址、数据和控制信号,允许从端口FIFO同时读写数据,数据位宽32或64位;NPI运行时钟频率必须与MPMC_clk01时钟频率一致。
SDMA PIM:Soft Direct Memory Access Controller。应用于MPMC中。中等吞吐性能Scatter Gather DMA核,需要CPU参与,因此适用于频发小数据量传输,典型应用于MPMC和XPS_LL_TEMAC核之间数据传输,参见UG643手册163页“SystemArchitecture using xps_ll_temac Core”。SDMA核包括一个NPI接口,一个PLB接口,一个TXLocalLink及一个RX LocalLink接口。NPI接口用于嵌入到MPMC;PLB用于CPU参与Scatter Gather DMA传输;数据利用LocalLink通过DMA传输到MPMC;NPI端接口宽度32或64位,LocalLink端接口宽度32位。Spartan-6支持所有位宽的DDR,其它器件支持16/32/64位宽DDR。
VFBC PIM:Video Frame Buffer Controller (VFBC),高延迟高性能两维DMA核,适用于长burst传输,如视频帧。
MCB PIM:仅Spartan-6器件支持的PIM形式,与硬件内存控制器直接连接,以获取最高的性能。如果MPMC同时使用了MCB PIM和PLBPIM, MCB为32位宽,因此MCB PIM和PLB PIM只能连接到32位宽的PLB总线。
字节/半字/字:MB里分别定义为Byte/half-word/word,位宽分别为8/16/32bit。MB使用BIG-Endian模式存储数据和指令。
BMM:BlockRAM Memory Map file