RISC是一种履行较少类型计算机指令的微处理器,起源于80 时代的MIPS主机(即RISC 机),RISC机中选用的微处理器总称RISC处理器。这样一来,它能够以更快的速度履行操作(每秒履行更多百万条指令,即MIPS)。因为计算机履行每个指令类型都需求额定的晶体管和电路元件,计算机指令集越大就会使微处理器更杂乱,履行操作也会更慢。RISC微处理器不只精简了指令体系,选用超标量和超流水线结构;它们的指令数目只要几十条,却大大增强了并行处理才能。如:1987年Sun Microsystem公司推出的SPARC芯片便是一种超标量结构的RISC处理器。而SGI公司推出的MIPS处理器则选用超流水线结构,这些RISC处理器在构建并行精简指令体系多处理机中起着中心的效果。
近年来敞开源代码运动迅速发展,敞开性源码的概念现已从软件范畴(如Linux,GCC等)扩展到了硬件范畴,呈现了专门发布免费的IP核源代码的组织–OpenCores.OR1200以其彻底敞开的源代码和编译器招引了规划者。其结构简略、通用性和可移植性强,具有完好的开发渠道,十分适宜嵌入式SoC规划[1].关于OR1200的研讨也遭到学术界和工业界越来越多的重视。
1 32位敞开源代码处理器核OpenRISC1200
OpenRISC1000系列处理器是敞开IP核源代码组织OpenCores发布的32/64位处理器软核。OpenRISC1200选用了自主规划的OpenRISC1000体系结构和自界说的ORBIS32 指令集。它是一种32位、标量、哈佛结构、5 级整数流水线的RISC,支撑Cache、MMU和根本的DSP 功用。OR1200具有较好的可装备性, 运用者能够依据自己的需求定制自界说的指令,确认是否运用MMU,装备Cache 的巨细(1 KB~64 KB之间)。OR1200一起还供给了1个用于下降功耗的电源办理单元和1个支撑片内调试的调试单元[2].
OR1200有完善的软件开发环境和操作体系的支撑。运用者能够经过包括GCC、Binutils和GDB等在内的GNU tool chains进行依据OR1200内核的编译和调试。一起,OR1200具有专门的仿真器Or1ksim,能够进行指令集一级的仿真,并支撑Linux,μClinux,μC/OS-Ⅱ等任何一种现代操作体系。
OR1200典型运用状况[3]:运用0.18 ?滋m和6层金属工艺时,主频运转到达300 MHz,能够供给300Dhrystone、2.1MIPS和300 Hz的32 bit×32 bit的DSP乘加操作的才能。OR1200默许装备有100万个晶体管。
2 体系的总体方案
本文构建以OR1200微处理器为中心,包括软硬件渠道的嵌入式SoC体系。硬件体系以开源32位RISC核+Wishbone总线为骨干,进行增量迭代开发,将仿真验证过的模块逐一加入到OR1200嵌入式体系中,然后在FPGA上进行验证。软件部分进行穿插编译环境的树立、操作体系的移植、运用程序开发并运用驱动程序、函数库,经穿插编译东西终究生成可履行程序下载到内存中。终究在Altera的DE2-70开发板上验证体系能否安稳运转。体系开发流程如图1所示:
主函数中3个使命函数十分简略,优先级从高究竟分别为1、2、3,体系供给的函数OSTimeDly()分别为10、20、30,OsTimeDly()是将1个使命挂起,延时若干个时钟节拍,CPU能够去履行其它使命。
图4给出的是经过串口东西输出μC/OS-II多使命调度的信息,3个使命依据优先级和延迟时间正确履行并打印出履行信息,测验证明OR1200嵌入式SoC体系能够安稳的运转μC/OS-II.
3 硬件渠道的构建
OR1200Q嵌入式SoC体系组件包括:OR1200、Wishbone互联模块、Memory Controller、Flash、SDRAM、UART、GPIO、DM9000A接口模块以及DM9000A操控器。图2所示体系的硬件架构。
体系外接50 MHz的时钟,经过PLL分频,体系作业在25 MHz频率。因为OR1200的可装备性,装备了硬件乘法功用,挑选8 KB的%&&&&&%(指令缓存)、8 KB的DC(数据缓存),挑选NO_DMMU,NO_IMMU,即未加内存办理单元。开端地址设为0x100,对体系做了硬件映射,复位时,0x04000000地址映射到0x0地址,所以体系能够从Flash发动。Memory Control为一致的存储操控器模块,操控着SDRAM和Flash 2种存储器。本体系针对AlteraDE2-70开发板硬件装备挑选64 MB的SDRAM和8 MB的Flash.Flash用于存储紧缩的内存映像文件及发动程序Bootloder.Bootloder把紧缩的内存映像文件从Flash复制到SDRAM中,并跳到开端方位解压履行可履行文件、发动操作体系。UART是嵌入式中重要的I/O设备,本体系挑选由OpenCores组织保护的UART16550 IP核,它与国家工业规范兼容并且可装备。UART通讯协议的要求是:波特率9600 b/s、8个数据位、1个中止位、无奇偶校验位。GPIO在体系中首要用于操控LED显现状况。DM9000A支撑8 bit和16 bit数据接口以适用于不同的微处理器,可是没有适宜的开源IP模块来衔接DM9000A和Wishbone.因而需求开发1个IP接口模块能将Wishbone从设备信号转换为DM9000A操控信号。这个接口模块有2个接口:1个衔接在Wishbone从设备上;1个衔接DM9000A操控器。DM9000A自身是little-endian,OR1200是big-endian,所以数据线接法应该做穿插接法。
Wishbone互联模块有很多种,比方Wishbone Conbuse、Wishbone Traffic Cop、Wishbone Interconnect Matrix.鉴于本体系外设不多,挑选Wishbone Traffic Cop,它有8个主设备、9个从设备。体系2个主设备即指令总线主设备、数据总线主设备,主设备经过Wishbone 的总线译码器和裁定器与从设备进行数据通讯,总线裁定器挑选操控总线的主设备,确保每个周期最多只要1个主设备取得总线操控权。体系有4个从设备,分别是UART、Flash、SDRAM和DM9000A.每个从设备都由32 bit地址线的最高8 bit来编址,总线译码器对主设备宣布的地址的最高3 bit进行译码来决议拜访哪个从设备。
4 体系的软件开发
软件开发进程包括穿插编译环境的树立,Bootloader的规划、μC/OS-II的移植和运用程序开发等。
4.1 GNU穿插编译环境的构建
OR1200体系运用的是OR32东西链,它由GCC, GNU Binutils和GDB组成,别的还供给了OR32模仿仿真东西。gcc-3.4.4用于程序的编译;Binutils-2.16.1供给了链接等各种东西;gdb-5.3用于程序的调试。OR32模仿仿真东西or1ksim东西能够模仿OR1200处理器的行为,让程序脱离处理器在模仿东西上运转,然后完成OR1200与程序并行开发。OR32可从opencores网站上下载。
4.2 发动代码Bootloder的规划
Boot Loader 是在操作体系内核运转之前运转的一段小程序。经过这段小程序,咱们能够初始化硬件设备、树立内存空间的映射图,然后将体系的软硬件环境带到一个适宜的状况,以便为终究调用操作体系内核预备好正确的环境。一般,Boot Loader 是严重地依赖于硬件而完成的,特别是在嵌入式国际。因而,在嵌入式国际里树立一个通用的 Boot Loader 几乎是不可能的。尽管如此,咱们依然能够对 Boot Loader 概括出一些通用的概念来,以辅导用户特定的 Boot Loader 规划与完成。
4.2.1 移植剖析
关于计算机体系来说,从开机到操作体系发动需求一个引导进程,嵌入式体系相同离不开引导程序,这个引导程序便是Bootloader.经过这段小程序,能够初始化硬件设备、树立内存空间的映射表,然后树立恰当的体系软硬件环境,为终究调用操作体系内核做好预备。
结合前面构建的OR1200嵌入式SoC体系,详细的移植进程中需求修正或编写以下代码:
spr_defs.h OR1200相关寄存器的设置;
board.h体系验证所用的DE2-70开发板的界说,发动参数等;
flash_boot.S,修正初始化代码和进口;
flash.ld,代码在flash中的地址空间组织;
mc.h存储操控器的初始化;
uart.h UART的初始化;
copier.c下载的程序从Flash复制到SDRAM履行的复制代码;
在Makefile中增加Bootloder的编译支撑。
4.2.2 发动剖析
0x100处是复位进口地址,可是Flash的初始地址为0x04000000,经过设置寄存器对体系做了硬件映射。复位时,0x04000000地址映射到0x0地址,所以可从Flash发动。体系加电后,CPU从该地址开端履行。该地址也便是体系反常处理向量表第1项(复位)。跳到了init_mc 中,此刻完成了体系的大部分初始化,例如设置寄存器、CPU、SDRAM、Flash.然后把Flash中的复制代码(copier)复制到SDRAM,跳到SDRAM中的Copier处,copier担任把Flash中的用户程序(userprog.bin)复制到SDRAM中去,并跳到0x100处,解压履行用户程序,发动操作体系。此刻的内存映射为:SDRAM为0x00000000~0x04000000, Flash仍是0x04000000~0x08000000.Bootloader的发动如图3所示。
4.3 实时操作体系μC/OS-II的移植
μC/OS-II 是一种依据优先级的抢占式多使命实时操作体系,包括了实时内核、使命办理、时间办理、使命间通讯同步(信号量,邮箱,音讯 行列)和内存办理等功用。它能够使各个使命独立作业,互不干涉,很简单完成按时并且无误履行,使实时运用程序的规划和扩展变得简单,使运用程序的规划进程大为减化。μC /OS-II是一个完好的、可移植、可固化、可裁剪的占先式实时多使命内核。μC/OS-II绝大部分的代码是用ANSI的C言语编写的,包括一小部分汇编代码,使之可供不同架构的微处理器运用。
μC/OS-II是一个代码揭露、内核精简、实时性强、支撑多使命的操作体系,十分适宜嵌入式体系开发。μC/OS-II 是由与处理器相关的代码,与处理器无关的代码及与运用程序相关的代码组成。它在规划之初就现已充分考虑了可移植性,所以μC/OS-II在不同处理器上的移植是比较简单的,