基于OR1200的嵌入式SoC设计
的微处理器,但是没有合适的开源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 是由与处理器相关的代码,与处理器无关的代码及与应用程序相关的代码组
- IP核在SoC设计中的接口技术 (08-06)
- 视频跟踪算法在Davinci SOC上的实现与优化(10-06)
- 基于赛灵思Spartan-3A DSP的安全视频分析(02-17)
- Linux下Sniffer程序的实现(06-12)
- linux操作系统下的进程通信设计(01-24)
- 基于S3C44B0X和uClinux的Socket通信实现(02-28)