随着集成电路设计与制造技术的发展,FPGA芯片的容量越来越大、性能越来越高,用FPGA构建片上系统成为现实,基于FPGA的嵌入式系统与SOPC(System On a Programmable Chip)设计技术将逐渐成为系统设计的主流技术,正获得越来越广泛地研究。Microblaze是Xilinx公司一款针对FPGA器件进行了优化设计的软处理器核,有不错的性能且价格低廉,且支持Xilinx全系列的FPGA器件,应该有着广阔的发展前景。μC/OS-II是Jean Labrosse先生于1998年推出的一个优秀的开放源码的实时操作系统,具有移植方便、执行效率高、占用空间小、实时性强和可靠性高等优点。采用μC/OS-II+Microblaze的应用平台对中小嵌入式系统应用来说是十分适合的。本文基于μC/OS-II在Microblaze上的移植与基于该系统的应用研究,记录移植和使用过程的心得、体会,内容可能会有些零散,希望对有类似应用的朋友有些帮助,也欢迎大家来交流与讨论。
一、主要参考资料
①μC/OS-II学习主要参考邵贝贝教授译的《嵌入式实时操作系统μC/OS-II(第2版)》
下面是CHINA-PUB的介绍http://www.china-pub.com/12618
网上也有该书第一版的电子书可以找来学习。
② Micrium公司的Micrium-uCOS-II-V286.ZIP,包括代码与文档,可以从
www.micrium.com获得。
③ Micrium公司的μC/OS-II and the Xilinx MicroBlaze Processor Application Note
可以从www.micrium.com获得。
④ Xilinx公司EDK相关文档:http://www.xilinx.com/ise/embedded/edk_docs.htm
⑤ ISE、EDK软件的帮助文档,包括MicroBlaze Processor Reference Guide (mb_ref_guide.pdf)。
⑥ EDK的基本使用可以参考:Xilinx官方的6个EDK实验(中文版).pdf
百度文库上有http://wenku.baidu.com/view/e92e71d184254b35eefd3425.html

二、操作系统的配置选项问题
在进行Software Platform配置时,一般安装了EDK软件后,操作系统与库设置时可选择的标准选项只有两个:Standalone和Xilkernel。 Standalone适合不带操作系统的应用,只提供基本的设置中断,配置Cache等功能,Xilkernel是赛灵思提供的一个嵌入式内核。为了能在设置操作系统时可以选择μC/OS-II,根据赛灵思文档描述,EDK软件的操作系统配置选项其实是通过扫描bsp目录得到,扫描顺序是:
1. 当前工作目录,即工程目录。
2.调用Libgen时用 –lp选项指定的目录。
3.EDK安装目录下的 EDK\sw\lib\bsp目录。
所以我们如果要在所有新建工程时都有μC/OS-II选项,可以把Micrium公司提供的移植包AN-1013.zip里的BSP目录下内容COPY到EDK安装目录下的 EDK\sw\lib\bsp目录下就可。如果仅仅是当前工程用的话,把它COPY到工程目录就可以了。
bsp目录有特定的结构,如下图示:

bsp目录下my_os指定我们用的操作系统,这里为uCOS-II_v2_86_a。
my_os目录下面的src目录包括所有的源文件和头文件,data目录包括两个文件: mld文件和tcl文件。mld文件用来定制操作系统的软件库与板级支持包(BSP:Board
Support Packages),tcl文件为产生软件库和BSP包的脚本文件。

三、Microblaze的总线接口
Microblaze处理器提供了以下的总线接口和外部进行通信
① PLB总线:32比特版本的PLB V4.6总线可以支持多个主设备和从设备连接,提供高效率的传输性能,适合于数据传输密集性应用。
② OPB总线:外设总线,适用于低速设备的连接。
③ LMB总线:本地存储总线,用来高速连接片内的 BLOCK RAM的同步总线,使用最少数量的控制信号和在一个时钟周期内存取BLOCK RAM的简单协议。LMB总线的读写时序和BLOCK RAM的读写时序是一样的,且所有的LMB信号是高电平有效。
④ FSL总线:快速单工链接接口,提供一种效率高、占用资源少的单向的点对点数据流传输。最新的Microblaze 7.2处理器最多支持16个FSL接口,每个FSL接口有一个输入和一个输出接口组成。FSL总线的读写操作通过Microblaze的PUT和GET指令完成的, 分为两种模式: 阻塞模式和非阻塞模式。阻塞模式是指写操作时如fifo满或读操作时如fifo空时处理器会等待,只到fifo不满而写操作成功或fifo非空而读操作成功。非阻塞模式读写操作不成功时处理器不会等待,但会在MSR中设置进位信号。
⑤ XCL总线:Xilinx 缓存链路接口,用在需要使用外部存储时,提供一种高效和延时最小的方案,XCL接口设计为直接通过内嵌的FSL接口连接到内存控制器。
⑥ Debug和Trace:用于基于JTAG的软件调试模块DMD(
Xilinx Microprocessor Debug Module)。
对于代码量不大的应用来说,代码和数据都可以放在BLOCK RAM内而使用LMB总线比较方便,如果需要外扩存储器时,就要使用XCL总线来提供访问外部存储器的效率。外设连接一般用到PLB或OPB或FSL总线。像LMB,FSL总线协议是比较简单的,但使用也是比较多的,具体读写时序可以参考MicroBlaze Processor Reference Guide的第2章信号接口描述,而PLB总线可以参考IBM 128-Bit Processor Local Bus Architectural Specification (v4.6)。在EDK\hw安装目录下的EDKIP核内有相应的IP说明文档参考。

-待续-
此文为“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛参赛作品

μC/OS-II在Microblaze上的移植与使用专题--“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛参赛作品的更多相关文章

  1. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  2. KEIL MDK环境下uCOS-II在LPC17xx上的移植实例

    1. 知识准备 要想对ucos-ii的移植有较深的理解,需要两方面知识: (1)目标芯片,这里是lpc17xx系列芯片,它们都是基于ARMv7 Cortex-M3内核,所以这一类芯片的ucos-ii移 ...

  3. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  4. 怎样把UCos-ii_在STM32上的移植

    下载代码 stm32 标准外设库是 stm32 全系列芯片的外设驱动,有了它能够大大加速我们 开发 stm32. 首先从 st 公司的站点下载最新的 stm32 标准外设库,写本文时最新的版本号是 V ...

  5. Qt4.8.5在ARM9上的移植

    Qt4.8.5在ARM9开发板上的移植 以前移植过qtopia-embedded-2.2.0,俗称Qt/E,在早期的Qt框架中是使用X11桌面服务器系统,无法应用于嵌入式平台,为此产生了qtopia, ...

  6. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方 ...

  7. UCOSII在STM32F1上的移植

    UCOSII在STM32F1上的移植 首先准备好一份STM32F1的工程.UCOSII源码. 在准备好的工程中新建一个"UCOSII"文件夹(或者取其它名字也行): UCOSII文 ...

  8. SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)

    由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...

  9. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...

随机推荐

  1. 【消息队列】kafka是如何保证高可用的

    一.kafka一个最基本的架构认识 由多个broker组成,每个broker就是一个节点:创建一个topic,这个topic可以划分为多个partition,每个partition可以存在于不同的br ...

  2. android------eclipse运行错误提示 Failed to load D:\Android\sdk\build-tools\26.0.0-preview\lib\dx.jar

    更新了SDK后,在ecplise上运行项目时出现了一个问题. 一运行就提示这个错误:Your project contains error(s), please fix them before run ...

  3. 全站从http升级到https(WordPress博客)

    最近几年HTTPS取代HTTP已经成为大趋势,HTTP是超文本传输协议,信息是明文传输的,而HTTPS是安全超文本传输协议,需要证书和提供安全连接,换句话说,HTTPS是嵌套了SSL加密的HTTP连接 ...

  4. ncnn框架

    1.下载和编译ncnn git clone https://github.com/Tencent/ncnn cd ncnn mkdir build && cd build cmake ...

  5. Mysql更改表名大小写不敏感

    编辑配置文件 vi /etc/my.cnf 在[mysqld]后添加添加 lower_case_table_names=1 重启服务 service mysqld stop service mysql ...

  6. scrapy-redis(一)

    安装scrapy-redis pip install scrapy-redis 从GitHub 上拷贝源码: clone github scrapy-redis源码文件 git clone https ...

  7. Rest_framework 和路由配置(一)

    简介 Django REST framework是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用. Rest_framework 核心思想: 缩减代码. ...

  8. apicloud 按返回键

    api.addEventListener({ name: 'keyback' }, function(ret, err) { //调取index.html暴露的方法 api.execScript({ ...

  9. CentOS下yum命令详解

    CentOS下yum命令详解 Yum: 即Yellowdog Update Modifier,是一种基于rpm的包管理工具 yum命令使用示例 显示yum仓库 显示所有仓库 yum repolist ...

  10. ssh -vT git@github.com get “ No such file or directory” 错误

    在"Are you sure you want to continue connnecting"的时候回复y,不要打空格跳过 参考:http://stackoverflow.com ...