EasterMIPS

这道题我真的做不队 @ NSCSCC 2020

EasterMIPS 项目为北京邮电大学“这道题我真的做不队”在 NSCSCC 2020 中获决赛一等奖的参赛作品。

本项目中,我们开源了决赛提交的CPU核、在开发过程中实现的多个MIPS Cache、uCore系统以及示例程序的有关代码。

EasterCache

EasterCache 是使用 Chisel3 实现的,参数可配置的高性能 MIPS Cache。由于Cache在版本迭代过程中,为系统的引导引入了较为棘手的bug,因而最后提交包中使用的Cache并非为最新版本,而为分支legacy-dcache中的版本。仅仅使用了Chisel3开发的D-Cache,其余部分由SystemVerilog实现。

master分支为最新版本的Cache,完全由Chisel3实现,包含一个双发I-Cache,以及一个带有Victim Cache的D-Cache。相联度、行数、行大小都能非常容易的进行配置。

生成 Verilog

EasterCache由Chisel3开发,因而使用sbt调用Chisel3模块来生成 verilog。下面的命令

mkdir target && sbt 'runMain cache.Cache --target-dir target'

能够生成Cache的verilog代码,保存在target/文件夹中。

注意项目中使用BlackBox封装了用Block Memory Generator生成的RAM Xilinx IP。IP名称分别为bank_ramdata_bank_ram。使用生成的verilog代码时,需要在工程中对应定制。

参数配置

修改src/main/scala/cache/Cache.scala文件中

object Cache extends App {
  new ChiselStage execute(args, Seq(ChiselGeneratorAnnotation(
    () =>
      new Cache(new CacheSettings(
        new CacheConfig(wayNum = 2, setWidth = 7, transNum = 1), new CacheConfig(wayNum = 2, setWidth = 7), vcacheDepth = 16
      )))))
}

的相关参数,即可以改变Cache配置。重新生成则得到新的Cache代码。