以MicroBlaze 处理器为内核的嵌入式系统开发过程详解

当今时代,嵌入式系统已经无所不在,与人们的日常生活息息相关。嵌入式系统以微处理器为核心,以计算机技术为基础,其主要特征是实时性强。据统计,目前世界上微处理器每年生产总量的95 %以上都是面向嵌入式系统应用,围绕xilinx 公司的microblaze 微处理器,对其体系结构、设计流程和相关开发工具一一做出介绍,并且通过一个简单的实例来说明以microblaze 处理器为内核的嵌入式系统的开发过程。
1  microblaze 处理器结构 microblaze 处理器是xilinx 公司针对嵌入式处理器开发应用推出的一种32 位嵌入式处理器内核,他是一种软核结构,简单但灵活性强,在目标器件中可以进行任意配置。他采用risc 指令集、harvard 体系结构,该处理器有以下一些特征:
(1) 32 个32 位通用寄存器和2 个专用寄存器。
(2) 32 位指令系统, 支持3 个操作数和2 种寻址方式。
(3) 分离的32 位指令和数据总线,符合ibm 的opb总线规范。
(4) 通过本地存储器总线(lmb) 直接访问片内块存储器(bram) 。
(5) 具有高速的指令和数据缓存(cache) ,三级流水线结构。
(6) 具有硬件调试模块(mdm) 。
(7) 带8 个输入/ 输出快速链路接口( fsl) 。
说明:
dopb 器件内部的外围设备数据接口总线,用于处理器与片内的设备进行数据交换。
dlmb 实现数据交换的本地块存储器总线,该总线为处理器内核与块存储器(bram) 之间提供专用的高速数据交换通道。
iopb 用于实现外部程序存储器的总线接口。当程序较大时,需要外接大容量的存储器,该总线提供读取指令的通道。
ilmb 用于取指令的本地存储器总线,该总线与器件内部的块存储器(bram) 相连,实现高速的指令读取。
mfsl0. 。 7  主设备数据接口, 提供点对点的通信通道。
sfsl0. 。 7  从设备数据接口, 提供点对点的通信通道。
2  edk开发流程 edk( embedded development kit) 是xilinx 公司针对fpga 内部32 位嵌入式处理器开发而推出的开发套件。edk的工具包中集成了硬件平台产生器、软件平台产生器、仿真模型生成器、软件编译器和软件调试等工具,利用其集成开发环境xps( xilinx platform studio) 可以方便、快速地完成嵌入式系统开发的整个流程。edk 以ip core的形式,提供诸如lmb ,opb 总线接口、外部存储控制器、sdram 控制器、uart 中断控制器、定时器及其他一些外围设备接口等资源,利用这些资源,设计者能够轻松构建一个完善的嵌入式处理器系统,其完整的设计框图如图2所示。
一个完整的嵌入式处理器系统设计通常包括3 个部分: 硬件系统的构建;存储器映射及软件的开发;应用程序开发。
在xps 集成开发环境下,嵌入式处理器硬件系统的构建由微处理器硬件规范(mhs) 文件和微处理器外围设备描述(mpd) 文件定义; 软件系统结构由微处理器软件规范(mss) 文件定义,其开发流程如图3 所示。
mhs 文件用于描述硬件系统结构,定义处理器类型、总线接口、外设接口、中断处理和地址空间。该文件可用任意文本编辑器创建,是文本化的原理图输入。mpd 文件包含外围设备的所有有效输入/ 输出接口和硬件参数。mss 文件主要用来定义软件库、驱动程序和文件系统。
说明:data2bram 的作用是把软件代码文件( 3 .elf) 、fpga 位流文件( 3 。 bit) 和块存储器(bram) 初始化数据文件( 3 。 bmm) 转换成新的fpga 位流文件( 3 。 bit )和存储器数据文件( 3 。 mem) 。关于应用程序的编写将在下面的实例中详细介绍。
3  一个简单的实例 本实例基于e 元素科技的数字刀剑系列之火龙刀3评估板,简要叙述一个嵌入式处理器系统的开发流程,着重讲述应用程序的编写。对于其他评估板,只需对用户约束文件( 3 。 ucf) 稍做修改即可。为简单起见,与图2 所示一个完整的系统相比,本例所述系统只在opb 总线上挂mdm(硬件调试模块) 和gpio(通用输入/ 输出设备) 2 个外围设备,gpio 对应评估板上8 个l ed 输出,当完成下载到fpga 后,8 个l ed 将不停地闪烁。具体描述如下:
第一步,硬件系统构建,在xps 集成开发环境下,利用bsp(base system builder ) 向导自动创建一个以mi-croblaze 处理器为核心的简单硬件系统,设置处理器时钟频率为50 mhz ,总线时钟频率为50 mhz ,设置片上读/写调试模块为调试接口,在处理器ip 中,只加入mdm 和gpio。根据向导逐步操作,即可完成硬件系统的构建。
第二步,在硬件系统建立后,利用xps 的集成工具,完成网表的生成和软件的配置,存储器地址映射(默认由系统自动生成,分配的地址随系统而异) 如表1 所示。驱动配置和存储器映射的标识符及地址分配包含在文件xparameter s. h 中, 以上两步具体操作实现细节可参考edk相关文档。
第三步,应用程序的开发。应用程序的编写使用c 语言,其方法有2 种,第一种是可以采用edk 提供的应用程序接口函数(api) ,接口函数既多又复杂,不易搞懂;第二种方法是采用访问硬件的通用方式即简单的对地址赋值的方式。本例选用后者,要采用地址赋值方式,首先要了解gpio 的寄存器地址映射,参见表2 。
相关代码及描述如下:
首先设定一个指针变量,将系统分配给gpio 的地址赋给指针变量, 即让指针指向gpio 的基地址, 也就是gpio 的数据寄存器( gpio data) ,接着向gpio 三态控制寄存器写零(其地址为基地址加上偏移量4 ,即让指针变量加4) ,将gpio 设置为输出,接下来就可以往gpio数据寄存器送数,以控制8 个l ed 的状态。
# include “ xbasic_types. h”
# include “ xparameters. h”
# include “ xutil. h”
# include “ xgpio_l. h”
# define l ed dela y 2000000
void main ()
{
xuint32 data = 0xaa ;
int delay ;
int count = 0 ;
xuint32 3 ledpt r ;
ledpt r = (int 3 ) 0x80002200 ; / / 指针指向gpio
*(ledpt r + 4) = 0x00000000 ;
/ / 向gpio_tri 寄存器写零,将gpio 初始化为输出
while (1)
{ count + + ;
if (count %2 = = 0)
{
*ledpt r = 0x55 ;
/ / 向gpio_data 寄存器送数,驱动l ed
}
else
{
* ledpt r = 0xaa ;
/ / 向gpio_data 寄存器送数,驱动l ed
}
for (delay = 0 ; delay 《 l ed_dela y; delay + + ) ;
/ / 延时以看清l ed 在闪烁
if (count %2 = = 0)
{
* ledpt r = 0x0f ;
/ / 向gpio_data 寄存器送数,驱动l ed
}
else
{
* ledpt r = 0xf0 ;
/ / 向gpio_data 寄存器送数,驱动l ed
}
for (delay = 0 ; delay 《 l ed_dela y; delay + + ) ;
/ / 延时以看清l ed 在闪烁
}
}

小米平板3配置曝光,将与小米6一起亮相 售价很梦幻嘛!
一种采用恒频电流模式的高效单片同步buck调节器
红外线传感器分类
无人驾驶与VR促进图形处理器市场需求向好
NAV联盟:推动自动驾驶技术标准化,致力于自动驾驶汽车走向现实的问题
以MicroBlaze 处理器为内核的嵌入式系统开发过程详解
电磁流量计的特点及优势介绍
AC-DC交流电变直流电
华为P10闪存门最新消息:华为P10闪存门风波未过,华为P10又入高端机市场, 消费者买账吗?
AP630X 可充电多功能LED手电筒与移动照明控制芯片
特斯拉今年电动汽车交付量有望达80万辆
华为两大关键技术化解物联感知网建设难题
哪些产品有用到pogopin连接器?
IR推出PowIRaudio集成式功率模块系列,使用高性能音频放大器
dfrobot6节5号电池盒简介
立磨磨辊磨损了怎么修?教大家一个省钱的维修办法
中国电信在2019年里5G各项工作所取得的成绩探讨
开关电路_三极管开关电路介绍
奇趣iPhone外接风扇让夏季不再炎热
《2022年全球MCU行业市场研究报告》