自制处理器OpenMIPS移植ucos-II过程之1——OpenMIPS介绍
2017-09-05 20:18
351 查看
看到技术大神 《基于Zynq的异构计算加速系统》链接:http://www.openhw.org/project-16 用片上NOC做得一个系统,用到OpenMIPS,所以准备自己先制作一个简单的处理器,这个处理器是完全开源的,第一部分就是OpenMIPS介绍,懒得打字了,看看大神的介绍吧。
计划分以下几部分:
这是第一部分:OpenMIPS介绍
教学版的主要设想是尽量简单,比如:在一个时钟周期内可以取到指令,完成存储、加载数据,这样处理器的运行情况(比如:流水线的运行)就比较理想化,与教科书相似,代码也很清晰简单,便于使用其进行教学、学术研究和讨论,也有助于各位同学理解课堂上讲授的知识。
这里有教学版的视频,只不过清晰度不敢恭维!教学版视频
实践版的主要设想是使OpenMIPS成为一个实际可用的处理器,能够下载到FPGA上,运行实际有用的程序,为此,添加了Wishbone总线接口,使其可以挂接在wb_conmax互联矩阵上,这样就能方便的利用OpenCores上提供的SDRAM、Flash、GPIO、UART、LCD等模块控制器,组成一个SOPC,完成特定功能,进一步还可为其移植操作系统。
同时又一个实践版的讲解视频,讲解视频可以在百度网盘下载:http://pan.baidu.com/s/1jCM78
OpenMIPS是采用具有哈佛结构的32位标量处理器,兼容MIPS32体系结构,这样可以使用现有的MIPS编译环境。具有以下特点:
在我的移植ucos-II的过程中使用的是OpenMIPS实践版(VHDL),小伙伴们不吝赐教啊。
让我们为了OpenMIPS的茁长成长共同努力!
具体来说,当异常发生时,OpenMIPS会进行如下操作:
OpenMIPS支持的异常类型及对应处理例程的入口地址如下表所示,其中无效指令、系统调用、自陷的处理例程入口地址都是0x40,用户也可以自己修改,使得这三个异常的处理例程入口地址不一样。异常的优先级也是可以调整的,小伙伴们只要理解了OpenMIPS的代码,这些都是可以灵活修改的。
计划分以下几部分:
OpenMIPS介绍 OpenMISP实践版及SOPC搭建 在DE2上验证OpenMIPS ucos-II文件目录建立 移植ucos-II时需要修改的文件 创建Makefile 在ZYNQ上验证OpenMIPS+ucos-II
这是第一部分:OpenMIPS介绍
1 OpenMIPS项目简介
OpenMIPS开始于2013年8月,目的是开发一款32位、兼容MIPS32指令集的开源软核处理器,便于老师教学、学生体会理解计算机体系结构课程的相关知识,同时也可以做实际用途。OpenMIPS将坚持自由软件的理念,保持开源的形式,同时采用商业友好的LGPL授权。并且分为两个版本:教学版、实践版,每个版本都使用VHDL、Verilog HDL两种语言编写,这样实际是有四个版本,分别命名为(以1.0版为例)OpenMIPS_VHDL_study_v1.0 教学版(VHDL)1.0 OpenMIPS_Verilog_study_v1.0 教学版(Verilog)1.0 OpenMIPS_VHDL_practice_v1.0 实践版(VDHL)1.0 OpenMIPS_Verilog_practice_v1.0 实践版(Verilog)1.0
教学版的主要设想是尽量简单,比如:在一个时钟周期内可以取到指令,完成存储、加载数据,这样处理器的运行情况(比如:流水线的运行)就比较理想化,与教科书相似,代码也很清晰简单,便于使用其进行教学、学术研究和讨论,也有助于各位同学理解课堂上讲授的知识。
这里有教学版的视频,只不过清晰度不敢恭维!教学版视频
实践版的主要设想是使OpenMIPS成为一个实际可用的处理器,能够下载到FPGA上,运行实际有用的程序,为此,添加了Wishbone总线接口,使其可以挂接在wb_conmax互联矩阵上,这样就能方便的利用OpenCores上提供的SDRAM、Flash、GPIO、UART、LCD等模块控制器,组成一个SOPC,完成特定功能,进一步还可为其移植操作系统。
同时又一个实践版的讲解视频,讲解视频可以在百度网盘下载:http://pan.baidu.com/s/1jCM78
OpenMIPS是采用具有哈佛结构的32位标量处理器,兼容MIPS32体系结构,这样可以使用现有的MIPS编译环境。具有以下特点:
五级整数流水线,分别是:取指、译码、执行、访存、回写 哈佛结构,分开的指令、数据接口 32个32位整数寄存器 大端模式 向量化异常处理,支持精确异常处理 8个外部中断 32bit数据、地址总线宽度 单周期乘法 支持延迟转移 兼容MIPS32体系结构,支持MIPS32指令集中的所有整数指令 大多数指令可以在一个时钟周期内完成 可综合 兼容wishbone b2的指令、数据总线接口(只有实践版提供) LGPL开源 VHDL、Verilog HDL两种语言版本
在我的移植ucos-II的过程中使用的是OpenMIPS实践版(VHDL),小伙伴们不吝赐教啊。
让我们为了OpenMIPS的茁长成长共同努力!
2 OpenMIPS支持的指令
OpenMIPS支持MIPS32指令集中的如下指令(包含全部整数指令),各指令的具体含义可以参考《MIPS32指令集》(在后面的博文中会给出OpenMIPS的下载地址,其中就有该文件)。逻辑操作指令AND、ANDI、LUI、NOR、OR、ORI、XOR、XORI 移位操作指令SLL、SLLV、SRA、SRAV、SRL、SRLV 算术操作指令ADD、ADDI、ADDIU、ADDU、CLO、CLZ、SLT、SLTI、SLTIU、SLTU、SUB、SUBU、MADD、MADDU、MSUB、MSUBU、MUL、MULT、MULTU、DIV、DIVU 移动操作指令MFHI、MFLO、MOVN、MOVZ、MTHI、MTLO 控制指令NOP、SSNOP 跳转指令J、JAL、JALR、JR 分支指令B、BAL、BEQ、BGEZ、BGEZAL、BGTZ、BLEZ、BLTZ、BLTZAL、BNE 加载类指令LB、LBU、LH、LHU、LL、LW、LWL、LWR 存储类指令SB、SC、SH、SW、SWL、SWR 协处理器访问指令MFC0、MTC0 自陷指令SYSCALL、TEQ、TEQI、TGE、TGEI、TGEIU、TGEU、TLT、TLTI、TLTIU、TLTU、TNE、TNEI 异常返回指令ERET
3 OpenMIPS的流水线
OpenMIPS具有五级流水线(这可是经典的五级流水线哦,任何一本计算机体系结构的书籍都会介绍),在各个阶段完成的工作如下:取指阶段:从指令存储器取得指令,修改pc的值 译码阶段:指令译码,根据译码结果取得指令执行需要的寄存器的值、立即数的值,并判断是否是多周期指令 执行阶段:判断并解决数据相关问题,执行指令操作,判断是否转移 访存阶段:如果是加载存储指令,那么读写数据存储器 回写阶段:写目的寄存器。判断是否有异常发生
4 OpenMIPS中的寄存器
OpenMIPS支持32个32位整数寄存器,还支持协处理器CP0中的如下寄存器:COUNT、COMPARE、STATUS、CAUSE、EPC、CONFIG、PrId、BadVAddr、ErrorEPC。这些寄存器的含义可以参考文档《MIPS32_3_Privileged_Resource》(在后面的博文中会给出OpenMIPS的下载地址,其中就有该文件),或者《MIPS体系结构与编程》、《MIPS体系结构透视(See MIPS Run)》等书籍。5 OpenMIPS的异常模型
OpenMIPS支持精确异常模型,当异常发生时,有关处理器的状态信息被存储到协处理器CP0的部分寄存器中,然后OpenMIPS处理器转移到事先定义好的一个地址,在那个地址中往往存储有异常处理例程,在其中进行异常处理,这个地址称为异常处理例程入口地址。具体来说,当异常发生时,OpenMIPS会进行如下操作:
(1)设置EPC寄存器:如果当前指令不在延迟槽中,那么当前指令(或下一条指令)地址被存储到EPC寄存器中,如果当前指令在延迟槽中,那么当前指令的上一条转移指令地址被存储到EPC寄存器中。
(2)设置CASUE寄存器:在其ExeCode字段存储异常原因代码,具体含义可以参考doc目录下的文档《MIPS32_3_Privileged_Resource》(在后面的博文中会给出OpenMIPS的下载地址,其中就有该文件),或者《MIPS体系结构与编程》、《MIPS体系结构透视》等书籍。
(3)设置STATUS寄存器:设置其EXL位为1,表示处理器处于异常处理状态。
(4)转移到相应的异常处理例程继续执行。
当异常处理结束后,需要使用指令eret从异常返回,eret指令会将EPC的值恢复到PC,同时设置STATUS 的EXL位为0,处理器回到异常发生前的状态继续执行。OpenMIPS支持的异常类型及对应处理例程的入口地址如下表所示,其中无效指令、系统调用、自陷的处理例程入口地址都是0x40,用户也可以自己修改,使得这三个异常的处理例程入口地址不一样。异常的优先级也是可以调整的,小伙伴们只要理解了OpenMIPS的代码,这些都是可以灵活修改的。
相关文章推荐
- 自制处理器OpenMIPS移植ucos-II过程之1——OpenMIPS介绍
- 自制处理器OpenMIPS移植ucos-II过程之4——ucos-II文件目录建立
- 自制处理器OpenMIPS移植ucos-II过程之5——修改ucos-II源代码
- 自制处理器OpenMIPS移植ucos-II过程之6——创建Makefile
- 自制处理器OpenMIPS移植ucos-II过程之7——DE2上验证ucos-II+OpenMIPS
- 自制处理器OpenMIPS移植ucos-II过程之2——OpenMISP实践版及SOPC搭建
- 自制处理器OpenMIPS移植ucos-II过程之2——OpenMIPS实践版及SOPC搭建
- 自制处理器OpenMIPS移植ucos-II过程之3——DE2验证OpenMIPS
- LWIP-1.3.0在S3C2440平台UCOS-II-2.8.6系统上的移植过程DEBUG
- uCOS-II移植过程出现的问题
- ucos-ii在ti dsp 28377芯片上的运行过程和移植过程
- uCOS-II在MSP430上的移植2——详细过程
- LWIP-1.3.0在S3C2440平台UCOS-II-2.8.6系统上的移植过程DEBUG
- 在VS2008中移植uCOS-II
- LPC17XX 学习之 uCOS-II 移植实例
- ucos-ii移植到ARM上的一个简单例子mini2440
- ucos在s3c2410上运行过程整体剖析--创建任务到多任务调度及运行 分类: μc /os ii 系统有关知识 2012-03-13 21:38 1565人阅读 评论(1) 收藏
- UCOS-II移植ARM的读书笔记(12.15)
- uCOS-II的移植步骤
- 51单片机移植UCOS-II的方法与改进