Skip to content

A simple OoO processor developed by njuallen and wierton, it won 2nd prize in LoongsonCup18.

License

Notifications You must be signed in to change notification settings

nju-mips/noop-lo

Repository files navigation

MIPS32-NPC(MIPS32 NJU Processor Collection)

在基础设施搭建以及代码编写过程中,从下列项目借鉴了很多:


准备工作

clone这个repo

git clone https://github.com/njuallen/mips32-npc.git

安装gcc mips32工具链

sudo apt-get update
sudo apt-get install gcc-mips-linux-gnu
sudo apt-get install g++-mips-linux-gnu

安装scala工具链

  1. 安装Java 对于ubuntu 18.04,由于default-jdk版本的问题,运行sbt、scala会出错。因此建议安装oracle Hotspot JVM。 从Java官网下载jre-8u171-linux-x64.tar.gz并解压缩到个人home目录的java目录下,将下列行加入profile。
export JAVA_HOME=~/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  1. 安装sbt
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823
sudo apt-get update
sudo apt-get install sbt

安装verilator

对于ubuntu 14.04/16.04

# make autoconf g++ flex bison should be available
wget https://www.veripool.org/ftp/verilator-3.906.tgz
tar -xzf verilator-3.906.tgz
cd verilator-3.906
unset VERILATOR_ROOT
./configure
# use -jN if CPU has N cores
make
# add the following lines to your profile
export VERILATOR_ROOT=$PWD
export PATH=$PATH:$VERILATOR_ROOT/bin

对于ubuntu 18.04,请使用

sudo apt-get install verilator

clone AM及MIPS32-NEMU

git clone https://github.com/njuallen/nexus-am.git
git clone https://github.com/njuallen/mips32-nemu.git

设置环境变量

将下列命令修改后添加到你的.profile文件或者添加到.bashrc文件中。

export AM_HOME=path_to_am
export MIPS32_NEMU_HOME=path_to_mips32-nemu

你可以在所在的命令行界面中运行source .profilesource .bashrc使之生效。 需要注意的是,运行上述命令仅仅是针对你当前用的shell设置了环境变量,如果切换到其他窗口,你还需要再执行source命令。 为方便起见,建议你关闭所有窗口,log out后再重新log in进入系统,这样子可以确保每个新开的shell窗口都设置好了上述环境变量。


编译运行

编译

$ make

使用verilator进行仿真运行

$ make sim # 请在工作目录下准备好bin.txt

使用vivado-xsim进行仿真运行(结果更加可靠)

$ make xsim # 请在工作目录下准备好bin.txt

生成bitstream

$ make bit

将bit文件编程到开发板上

$ make prog

打开项目对应的vivado项目

$ make vivado

以上描述的仿真流程需要手动将程序处理成bin.txt,才能运行,如果要运行cputest和microbench,有如下的一键运行方式。

运行cputest中的某一个程序fact

$ make run-fact

批量运行cputest

$ make run-cputest

运行microbench

$ make run-microbench

上述命令的运行目录以及输出的log文件,全部在output/cputest/program_name output/microbench文件夹下。

关于使用nemu运行程序,以及与nemu diff,请阅读doc/diff.md。


项目进展

现在的处理器能运行cputest以及microbench。

Core

  • 顺序流水线
  • gshare branch prediction + set associative BTB + RAS
  • full pipeline forwarding
  • AM-Asye(Interrupt and Exception)

Cache

  • 1 cycle load to use latency
  • set-associative
  • pipelined(block on miss)
  • blocking
  • random replacement

外设

仿真

  • 支持uart(仅能输出,不能输入)
  • GPIO(用来trap以及结束运行)
  • VGA/ps2尚未支持

FPGA

  • uart(输入/输出)
  • GPIO
  • VGA
  • ps2键盘

访存

  • AXI4

FAQ

如何开发调试,如何获取更多资源: 请见doc目录


TODO

处理器

  • Out of Order
  • 支持pte
  • 跑通Nanos,Linux

开发环境

  • 完善MIPS32-NEMU,支持更多的指令,跑过更多的测试用例。MIPS32-NEMU现在能跑过所有cputest、microbench、nanos、nwm,同时在外设方面支持uart、GPIO与VGA。
  • 完善外设仿真,争取能支持AM的VGA以及PS2键盘

About

A simple OoO processor developed by njuallen and wierton, it won 2nd prize in LoongsonCup18.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published