1 Star 7 Fork 2

以凝 / MIPS_CPU

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

太原理工大学-2022-12-冬季课设-RoLa处理器


项目团员

团队成员: 以凝(个人 limper.styrene.03@icloud.com)


本处理器特性:

  • 标量处理器,顺序执行

  • 实现的指令 89条:

    1. 逻辑操作 8条:and andi or ori xor xori nor lui
    2. 移位操作 6条:sll sllv sra srav srl srlv
    3. 移动类 6条:movn movz mfhi mthi mflo mtlo(后四个设计对特殊寄存器HI,LO的操作)
    4. 算数操作 21条:add、addi、addiu、addu、sub、subu、clo、clz、slt、slti、sltiu、sltu、mul、mult、multu、madd、maddu、msub、msubu、div、divu
    5. 转移指令 14条,分为
      1. 跳转 : jr jalr j jal (在转移之前都要先执行延迟槽指令)
      2. 分支 : b bal (前两个不用单独实现)beq bgez bgezal bgtz blez bltz bltzal bne
    6. 存储加载指令 14条:
      1. 8条加载: lb lbu lh lhu ll lw lwl lwr
      2. 6条存储指令: sb sc sh sw swl swr
    7. 协处理器访问指令 2条:mtc0,mfc0
    8. 异常指令 14条
      1. 自陷指令12条:

        a. 不包括立即数6条:teq,tge,tgeu,tlt,tltu,tne

        b. 包含立即数6条:teqi,tgei,tgeiu,tlti,tltiu,tnei

      2. 系统调用:syscall(这里解释一下,RoLa不区分用户模式和内核模式,所以没有使用Status寄存器的UM字段,所有操作没有限制,但是这里还是实现了syscall)

      3. 异常返回指令:eret

    9. 其余 4个指令:
      1. nop : 空指令
      2. ssnop : 特殊类型的空指令
      3. sync : 保证加载,存储顺序
      4. pref : 缓存预取
  • 相关接口


项目结构介绍:

  • src/RoLa: 各个模块的源码文件

  • src/Flash:Flash控制器

  • src/GPIO:GPIO控制器

  • src/SDRAM:SDRAM控制器(相应的实例化的配置信息有待调整)

  • src/wb_conmax:总线

  • sim : 存放了开发阶段的项目仿真文件

  • img : 含有开发信息的图片

  • pdf : MIPS参考资料

  • tools/mips-4.3 : 编译工具链

  • tools/compile : 编译指令文件夹,其中有一个makefile负责将汇编代码转成机器码。里面的大多数文件不重要,你需要关注你的.data文件。使用方法是:

    1. 执行make clean清空其他无关文件
    2. 将你需要转变成机器码的汇编文件拖到此文件夹。一般情况下你可以将sim下的.s文件拖进来进行转化。
    3. 执行make或者make all,即可。注意clean会清除你的.s文件,执行之前请想清楚.s还要不要。

其他说明:

  • 关于编译链工具的使用说明:本编译链工具可以运行在linux下,(mac貌似不行,我没有运行成功在mac上)ubuntu 64位下可以兼容32位程序的运行,但是必须要有32位基础库的支持才行。请依次运行以下指令。

    sudo dpkg --add-architecture i386
    sudo apt-get update
    sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
    sudo apt install lib32z1
  • 另外本项目还附赠了支持win的编译链工具。同在tools文件夹下。(2022.12.9:win下的编译链工具貌似有点问题,和Bin2Mem不太兼容,请审慎。如果不想费脑细胞的话请无脑使用项目自带的编译链工具在linux下运行)

  • 源码中有一个小小的可执行文件Bin2Mem.exe,这个可执行文件只能linux下运行。由于我开发RoLa的时候涉及到Win,Mac和Linux三种环境,所以为了解决不兼容问题,编写一个py脚本用于读取bin转化成hex/data文件。源码在Bin2Mem文件夹下。

  • 处理器的名字,RoLa,来源一个歌曲 Round & Laundry 《卡罗尔与星期二》 ,各取了两个单词的前两个字母。 计划写这个课设的时候,网易云心动模式播放了这个,然后一时兴起给了这个名字

  • 最后谈谈个人写这个课设的感悟,大学四年第一次一个人不组队写课设。整个项目看我提交commit message就可以看出开发时候的自由和洒脱。收货分两方面谈,第一点从项目角度出发,个人开发的好处就是可以全权揽在手里,整个项目写完之后至少不会有任何外界因素造成的遗憾;第二点从心得和收货的角度上讲,这个处理器的开发流程给我有不小的收货,软件到硬件,终于做到或者勉强做到了通透的感觉。整个实践下来,一开始还是比较顺利的,因为一开始代码量小,bug比较好查,但是越到后期,功能越加越多,代码越来越冗杂沉重,bug确确实实是越来越难查了。必须硬着头皮给它找出来,可能是顶层模块的接口没有露出来,可能是宏定义没及时更新,甚至可能是组合逻辑写成了时序逻辑(体现在敏感信号不小心把*写成posedge clk,这个查了两天)总而言之,仿真之后波形不对就回去再查再改,形成了一套井然有序的流程:Mac上写代码-推送-Linux拉取编译-推送-Win拉取仿真-打回Mac修bug-Win拉取再仿真,直至仿真波形正确。


参考资料:

  1. 自己动手写CPU - 雷思磊 (本项目原型是书中OpenMIPS)

  2. Minsys 开发指南 (本次课设指导说明)

  3. AssemblyLanguageProgDoc

  4. The MIPS32$^{TM}$ Instruction Set - MIPS_Vol2.pdf

  5. The MIPS32$^{TM}$ Privileged Resource Architecture - MIPS_Vol3.pdf


个人开发笔记链接:

from飞书:个人开发文档

空文件

简介

基于MIPS32架构设计标量单核多周期五级流水处理器RoLa 项目原型:OpenMIPS 展开 收起
Verilog 等 6 种语言
取消

发行版 (1)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
Verilog
1
https://gitee.com/bei_yi_ning/mips_-cpu.git
git@gitee.com:bei_yi_ning/mips_-cpu.git
bei_yi_ning
mips_-cpu
MIPS_CPU
master

搜索帮助