Giter Club home page Giter Club logo

minirv-1's Introduction

Readme

实现功能

实现了 单周期CPU 以及 流水线CPU,实现指令如下表

单周期
R-类型
add (rd) ← (rs1) + (rs2)
sub (rd) ← (rs1) - (rs2)
and (rd) ← (rs1) & (rs2)
or (rd) ← (rs1) | (rs2)
xor (rd) ← (rs1) ^ (rs2)
sll (rd) ← (rs1) << (rs2)
srl (rd) ← (rs1) >> (rs2), 逻辑右移
sra (rd) ← (rs1) >> (rs2), 算术右移
slt (rd) ← ((rs1) < (rs2)), 有符号比较
sltu (rd) ← ((rs1) < (rs2)), 无符号比较
I-类型
addi (rd) ← (rs1) + sext(imm)
andi (rd) ← (rs1) & sext(imm)
ori (rd) ← (rs1) | sext(imm)
xori (rd) ← (rs1) ^ sext(imm)
slli (rd) ← (rs1) << shamt
srli (rd) ← (rs1) >> shamt, 逻辑右移
srai (rd) ← (rs1) >> shamt, 算术右移
slti (rd) ← ((rs1) < sext(imm)), 有符号比较
sltiu (rd) ← ((rs1) < sext(imm)), 无符号比较
lb (rd) ← sext(Mem[(rs1) + sext(offset)][7:0])
lh (rd) ← sext(Mem[(rs1) + sext(offset)][15:0])
lw (rd) ← sext(Mem[(rs1) + sext(offset)][31:0])
jalr t ← (pc) + 4; (pc) ← ((rs1) + sext(offset)) & ~1; (rd) ← t
S-类型
sb Mem[(rs1) + sext(offset)] ← (rs2)[7:0]
sh Mem[(rs1) + sext(offset)] ← (rs2)[15:0]
sw Mem[(rs1) + sext(offset)] ← (rs2)[31:0]
多周期
R-类型
add (rd) ← (rs1) + (rs2)
sub (rd) ← (rs1) - (rs2)
and (rd) ← (rs1) & (rs2)
or (rd) ← (rs1) | (rs2)
xor (rd) ← (rs1) ^ (rs2)
sll (rd) ← (rs1) << (rs2)
srl (rd) ← (rs1) >> (rs2), 逻辑右移
sra (rd) ← (rs1) >> (rs2), 算术右移
slt (rd) ← ((rs1) < (rs2)), 有符号比较
sltu (rd) ← ((rs1) < (rs2)), 无符号比较
I-类型
addi (rd) ← (rs1) + sext(imm)
andi (rd) ← (rs1) & sext(imm)
ori (rd) ← (rs1) | sext(imm)
xori (rd) ← (rs1) ^ sext(imm)
slli (rd) ← (rs1) << shamt
srli (rd) ← (rs1) >> shamt, 逻辑右移
srai (rd) ← (rs1) >> shamt, 算术右移
slti (rd) ← ((rs1) < sext(imm)), 有符号比较
sltiu (rd) ← ((rs1) < sext(imm)), 无符号比较
lb (rd) ← sext(Mem[(rs1) + sext(offset)][7:0])
lh (rd) ← sext(Mem[(rs1) + sext(offset)][15:0])
lw (rd) ← sext(Mem[(rs1) + sext(offset)][31:0])
jalr t ← (pc) + 4; (pc) ← ((rs1) + sext(offset)) & ~1; (rd) ← t
S-类型
sb Mem[(rs1) + sext(offset)] ← (rs2)[7:0]
sh Mem[(rs1) + sext(offset)] ← (rs2)[15:0]
sw Mem[(rs1) + sext(offset)] ← (rs2)[31:0]
B-类型
beq if ((rs1) = (rs2)) (pc) ← (pc) + sext(offset)
bne if ((rs1) ≠ (rs2)) (pc) ← (pc) + sext(offset)
blt if ((rs1) < (rs2)) (pc) ← (pc) + sext(offset), 有符号比较
bltu if ((rs1) < (rs2)) (pc) ← (pc) + sext(offset), 无符号比较
bge if ((rs1) ≥ (rs2)) (pc) ← (pc) + sext(offset), 有符号比较
bgeu if ((rs1) ≥ (rs2)) (pc) ← (pc) + sext(offset), 无符号比较
U-类型
lui (rd) ← sext(imm[31:12] << 12)
auipc (rd) ← (PC) + sext(imm[31:12] << 12)
J-类型
jal (rd) ← (pc) + 4; (pc) ← (pc) + sext(offset)

设计特色

  1. 分支预测功能

采用静态分支预测,默认不进行跳转。同时将分支检测提前至译指令阶段,因此当需要进行跳转时,仅需要插入一次空周期即可完成跳转。

  1. 实现扩展指令

除24条基本指令之外,另外实现了11条扩展指令:slt、sltu、slti、sltiu、lb、lh、sb、sh、bltu、bgeu、auipc

  1. 流水线实现了外设功能

成功运行试验二中小彩灯的汇编代码

  1. 增加原器件复用

所有关于加法、减法、比较的操作,包括要求无符号运算和有符号运算,均复用加法器模块。加法器模块通过将31位操作数扩展至32位操作数,以及取反等操作,可以避免溢出并在运算的同时得到比较信号。

  1. 增加mask模块

在存储模块中新增mask模块,作为dmem IP核与外部电路的接口模块,可以成功进行存取半字、存取字节、无符号读出操作

资源使用与数据功耗图

single CPU  (30MHz)

pipline CPU (50MHz)

minirv-1's People

Contributors

j-cyoung avatar

Stargazers

 avatar  avatar Sora Shu avatar 刘玄昊 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.