zhongxx0227 / mips-cpu

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Gemini CPU

重庆大学2019级大三上期结束硬件综合设计项目

我们小组设计的处理器名为 Gemini CPU,采用双发射五级流水,可以执行 MIP32 的指令子集,包含移位指令、逻辑运算指令、算术运算指令、数据移动指令、分支跳转指令、访存指令。

我们小组采用取指阶段发射两条指令,主流水线 (master) 和辅流水线 (slave) 并行执行的方法实现双发射,通过数据前推减少流水线阻塞,在最大程度上提高 IPC。

通过运行计算机组成原理 lab4 的 仿真程序,我们在一定程度上验证了该处理器的正确性。

设计方案

我们小组的设计基于计算机组成原理实验 4 的单发射五级流水线,通过添加第 2 条流水线实现了主流水线 (master) 和辅流水线 (slave) 的并行执行。为了解决数据冒险,对于可以前推的数据,进行 master-master, master-slave, slave-slave 的必要前推。对于无法前推的数据,进行必要的阻塞,等到操作数就位,再执行指令,使得两条流水线中的指令可以正确执行。

CPU datapath

取指阶段,PC 的值被送往指令存储器 inst_mem_dual,指令存储器的前两条指令会被取出。在译码阶段,双发射判断模块 dual_engine 根据双发射判断逻辑决定是否发射第 2条指令和如何更新 pc_next。若发射第 2 条指令,则 pc_next 被赋值为 pc+8;否则,pc_next被赋值为 pc+4。同时在译码阶段,分支跳转指令也在此执行,一旦需要跳转,则跳转指令被送往 PC,PC 在下一周期更新到目的地址。在执行阶段,最多两条指令会并行地执行ALU 操作,执行结果被送往访存阶段。在访存阶段,主流水线正常地执行访存指令,辅流水线不执行访存指令。访存结果被送往写回阶段,运算/访存结果被送往目的寄存器。

参考文献

[1] Hennessy and JohnL. Computer Architecture A Quantitative Approach: 计算机体系结构量化研究方法. China Machine Press, 2002.

[2] 姚永斌. 超标量处理器设计. 清华大学出版社, 2014.

[3] 雷思磊. 自己动手写 CPU. 电子工业出版社, 2014.

文件树

rtl:
│  .DS_Storeadder.v # 加法器alu.v # ALUaludec.v # ALU控制信号生成
│  common.vh # 宏定义文件controller.v # 控制器datapath.v # 数据通路decode_field.sv # 指令分段dual_engine.v # 控制双发射eqcmp.v # 判断两个数是否相等fake_top.v # 验证双端口ROM的伪topflopenr.v # 带有enablereset的触发器flopenrc.v # 带有 enablereset  clear 的触发器flopr.v # 带有 reset 的触发器floprc.v #  带有 reset  clear 的触发器forwarding.sv # 旁路单元hazard.sv # 阻塞单元maindec.v # 主译码器mips.v # CPU顶层文件mipstest.coe # 测试指令集mux2.v # 二选一多路选择器mux3.v # 三选一多路选择器pc.v # PCpc_ctrl.sv # 选择下一条发射指令regfile.v # 老版的寄存器堆两个读端口一个写端口
│  register.sv # 新版的寄存器堆四个读端口两个写端口signext.v # 有符号扩展sl2.v # 左移两位tb_inst_mem_dual.v # 双端口测试文件testbench.v # 测试文件top.v # 最顶层模块tree.txt # 文件树
│    
└─ip
    ├─data_memdata_mem.xci # 数据存储器IP
    │      
    └─inst_mem
            inst_mem.xci # 指令存储器IP
            

About


Languages

Language:VHDL 96.6%Language:Verilog 2.5%Language:SystemVerilog 0.3%Language:Shell 0.3%Language:C 0.1%Language:Tcl 0.1%Language:JavaScript 0.1%Language:Stata 0.0%Language:Batchfile 0.0%Language:Forth 0.0%Language:Pascal 0.0%