基于FSL总线及MicroBlaze系统的IDCT变换的实例_can总线协议实例
摘要:MicroBlaze是基于Xilinx公司新一代FPGA器件的软处理核。其FSL总线是FIFO单向链路,可以实现用户自定义IP核与MicroBlaze内部通用寄存器的高速直连。本文对MicroBlaze的几种主要总线接口进行比较,详细分析,介绍FSL总线的结构、特点、工作原理和配置方法。通过一个IDCT的应用实例,具体描述在FPGA片上系统设计中利用FSL高速总线整合用户自定义IP核,实现软处理器系统硬件加速的方法及步骤。
关键字:FPGA;FSL总线;软核处理器;IDCT
1引言
随着半导体制造工艺的发展,以FPGA(现场可编程门阵列)为代表的新一代可编程逻辑器件(PLD)的逻辑资源密度不断增加,使得可编程技术很自然地就与系统芯片集成技术(SOC)的结合日益紧密,并逐步成为可配置平台技术的主流。MicroBlaze软处理器是Xilinx公司为其FPGA器件开发的,其特有的FSL(Fast Simplex Link,快速单向链路)总线,可以实现用户IP核与软处理器的高速连接,为设计者提供了一条解决这类问题的途径。
2MicroBlaze软处理器核
2.1 概述
MicroBlaze软核是一种针对Xilinx FPGA器件而优化的功能强大的32位处理器,支持CoreConnect总线的标准外设集合,采用RISC架构和哈佛结构的32位指令和数据总线,内部有32个通用寄存器R0-R3、2个特殊寄存器程序指针和处理器状态寄存器、一个ALU单元、1个移位单元和两级中断响应单元等模块,还具有3/5级流水线、桶形移位器、内存管理/内存保护单元、浮点单元、高速缓存、异常处理核调试逻辑等。
2.2 MicroBlaze总线接口
MicroBlaze软处理器核具有丰富的接口资源,可以采用以下的接口和外设或内存进行数据交互。
(1)PLBv64
PLB是IBM CoreConnect架构的一部分,是处理器连接到高性能外围设备的高性能同步总线。具有以下特性:
▲PLB数据总线是64位宽,地址总线是32位宽。
▲支持最多16个主设备。
▲具有4级动态优先级。
▲具有3周期仲裁。
▲总线看门狗。
▲PLB协议兼容。
▲支持最多16个从设备。
(2)LMB
LMB起初是用来存取片上块RAM的同步总线。它使用最少的控制信号和一个用来保证块RAM在一个时钟周期被存取的简单协议。所有的LMB信号都是高电平有效。
(3)XCL
Xilinx CacheLink(XCL)是一个高性能的外部内存访问的方案。MicroBlaze的缓存接口(CacheLink)设计为一个直接通过内嵌的FSL接口连接到内存的控制器。
(4)FSL
MicroBlaze v7.0最多支持16个FSL的接口。每个FSL接口由一个输入口和一个输出口。FSL接口主要用于点对点单向的数据流传输。FSL的特点是效率高而且占用的资源比较少。
(5)调试接口
调试接口设计成与Xilinx Microprocessor Debug Module(MDM)核相连,通过参数设置,开发人员只使用特定应用所需的处理器特性。
2.3 PLB总线与FSL总线比较
将用户IP核整合到基于MicroBlaze的嵌入式软核处理器系统中,通常有两种方法:一种是将IP核连接到PLB总线;第二种方法就是将用户IP连接到MicroBlaze专用的FSL总线上。二者的比较如表1所示。
从表1可见,PLB总线适用于将低速和低性能要求的设备连接到MicroBlaze系统中,而FSL总线则适用于将时间要求高的用户IP核整合到基于MicroBlaze的软核处理器系统中去,以实现硬件加速。
3FSL总线
3.1 FSL总线简介
FSL_V20快速单连接(FSL)总线是一个单向的点对点通讯总线,可用来连接FPGA上的任意两个带有FSL总线接口的设计元素并提供两者间的快速通讯信道。Xilinx MicroBlaze处理器最多可支持8个FSL主设备接口和8个FSL从设备接口。这些接口被用于处理器的寄存器堆和FPGA片内的硬件之间的数据传输,单个数据传输操作消耗的CPU时间不超过2个时钟周期。如图2所示。
FSL总线具备以下主要特征:
▲ 实现了单向的、点对点的、基于FIFO的通讯;
▲ 提供了不共享的、无需仲裁的通讯机制,可以用于在带有FSL接口的主设备和从设备之间快速传送数据;
▲ 提供了额外的控制位用于注释被传输数据,这个控制位对于从设备有多种用途;
▲ 支持的FIFO深度最小为1,最大为8k;
▲ 支持同步和异步两种FIFO模式,这允许FSL的主从端能以不同的速率工作;
▲ 支持两种FIFO实现方式:双端口Block RAM或LUT RAM,SRL16移位寄存器。
3.2 FSL总线的读写操作时序
FSL总线有一个主设备端和一个从设备端,其结构类似于一个FIFO,主设备端是FIFO的数据写入端,从设备端是FIFO的数据读出端。FSL 总线和FIFO一样提供数据有效标志(FSL_S_Exists)和满标志(FSL_M_FULL)。FSL总线的读写时序如图3和图4所示。
4自定义IDCT核
与FSL总线连接应用
本例是尝试通过FSL总线技术,将实现特定函数功能的用户自定义IP核整合到MicroBlaze系统中,以实现硬件加速的目的。
4.1 FSL应用描述
如图5所示,IDCT核通过FSL_0和FSL_1两条FSL总线与MicroBlaze软核相连。
整个嵌入式系统包含了MicroBlaze微处理器,两条FSL总线,IDCT用户自定义IP核,一条PLB总线,PLB总线上分别外挂了UART模块和Debug模块,以及片上块RAM(用来存储数据和程序)。
硬件实现IDCT变换主要是强调高性能是可以达到的,一维IDCT变换在软件中实现需要很高的执行时间,因为C程序主要包括很多循环结构和跳转指令,无形中加大了处理器的执行时间,对于实时处理来说是不可行的。所以通过硬件的特有结构可以降低很多的时钟周期,缩短执行时间。IDCT核需要将近150个LUTS以及64个时钟周期。通过软件程序从块RAM中写入8个数据到FSL_0总线中,再通过FSL_0总线写入到IDCT处理核。IDCT计算出的结果再通过C指令写入到FSL_1总线中,读入到块RAM,这样完成一次IDCT计算过程。MicroBlaze主要负责读写指令的工作,起到命令的作用,FSL总线负责数据的传输,而IDCT的作用则为计算数据。
4.2 实现步骤
图6显示了IDCT核连接MicroBlaze FSL总线接口的方法。IDCT核为VHDL代码,当然也可以用网表文件代替。
其中,FSL接口主要提供控制信号,外部的系统时钟信号和复位信号则很容易集成到系统中。另外,VHDL源代码,MPD(Microprocessor Peripheral Definition)文件和PAO(Perpheral Analyze Order)文件都是必须添加到系统中。MPD文件主要定义外设接口信息,PAO文件包含可综合的HDL代码以及定义编译分析的顺序。这些文件要保存在特定的路径中。XPS(Xilinx Platform Studio)工程的文件结构如7图所示。
其中,xil_idct_v1_00_a/data文件夹包含MPD和PAO文件vhdl文件夹包含用户自定义IP核的源代码。如果所有文件全部定义正确,用户就可以通过XPS软件将这些硬件结构文件编译为比特流文件,并下载到硬件电路中。
4.3 FSL总线用法
目前Xilinx提供的FSL总线IP核的版本是FSL_V20。两个设备要使用FSL进行数据传输,就必须分别作为主设备或从设备连接到FSL核上。如果需要进行双向的传输,只要两个设备分别作为主从设备,使用两个FSL核连接即可。
无论是作为主设备还是从设备都需要通过在设备的微处理器外设描述文件(MPD)中进行相应的定义,以实现所需类型的FSL接口。下面这段代码就是一个分别定义了FSL主设备接口MFSL和从设备接口SFSL的MPD文件:
BEGIN xil_idct
## Peripheral Options
OPTION IPTYPE = PERIPHERAL
OPTION IMP_NETLIST = TRUE
OPTION HDL = VHDL
OPTION ARCH_SUPPORT_MAP =
(OTHERS=DEVELOPMENT)
OPTION IP_GROUP = MICROBLAZE:PPC:USER
## Bus Interfaces
BUS_INTERFACE BUS = SFSL, BUS_TYPE =
SLAVE, BUS_STD = FSL
BUS_INTERFACE BUS = MFSL, BUS_TYPE =
MASTER, BUS_STD = FSL
## Generics for VHDL or Parameters for Verilog
PARAMETER C_DWIDTH = 32, DT = INTEGER
## Ports
PORT FSL_Clk = "", DIR = I, BUS = SFSL:MFSL, SIGIS = CLK
PORT FSL_Rst = OPB_Rst, DIR = I, BUS = SFSL:MFSL, SIGIS = RST
PORT FSL_S_Clk = FSL_S_Clk, DIR = O, BUS = SFSL, SIGIS = Clk
PORT FSL_S_Read = FSL_S_Read, DIR = O, BUS = SFSL
PORT FSL_S_Data = FSL_S_Data, DIR = I, VEC = [0:(C_DWIDTH-1)], BUS = SFSL
PORT FSL_S_Control = FSL_S_Control, DIR = I, BUS = SFSL
PORT FSL_S_Exists = FSL_S_Exists, DIR = I, BUS = SFSL
PORT FSL_M_Clk = FSL_M_Clk, DIR = O, BUS = MFSL, SIGIS = Clk
PORT FSL_M_Write = FSL_M_Write, DIR = O, BUS = MFSL
PORT FSL_M_Data = FSL_M_Data, DIR = O, VEC = [0:(C_DWIDTH-1)], BUS = MFSL
PORT FSL_M_Control = FSL_M_Control, DIR = O, BUS = MFSL
PORT FSL_M_Full = FSL_M_Full, DIR = I, BUS = MFSL
END
以上就是整个设计的实现过程,在实际应用中根据具体情况还可通过FSL添加更多的用户自定义IP核(例如FFT等)到MicroBlaze软核中去。
5结束语
在嵌入式系统的开发中,直接将用户自定义IP核添加到处理器核中,不仅受到处理器原架构的束缚,还有可能降低处理器的性能(处理器的工作频率);而通过与内部寄存器直接相连的FSL接口,用户自定义IP核可以在不破坏处理器原有结构的情况下,紧密地与MicroBlaze软核结合在一起,实现嵌入式系统的整合,从而在不提高系统主频的前提下通过IDCT核的计算功能实现硬件加速的问题。
参考文献
[1] 田耕 徐文波编著. Xilinx FPGA开发实用教程. 清华大学出版社. 2008.410-413.
[2] 叶肇晋 张希楠编著. 基于Xilinx FPGA片上嵌入式系统的用户IP开发. 西安电子科技大学出版社.2008. 81-100.
[3] 李庆成 张 杰 汤建军. FSL总线IP核及其在MicroBlaze系统中的应用. 单片机与嵌入式系统应用.
[4] 孟宪元 钱伟康编著. FPGA嵌入式系统设计. 电子工业出版社.2008. 431-459.
作者简介
郭星辰,助讲,南京工程高等职业学校。
