MIPS五级流水线CPU(扩展指令)-Verilog设计整体架构
整体结构如下
本次设计与P5主要不同为增加了乘除指令,由于乘除法计算时间较长,不应当只用一个周期进行运算,而应当设计一采用多个周期计算,并且在计算乘除指令时应当将其他涉及乘除模块的指令阻塞于前一个流水极。
设计方案
整体思路采用分布式译码(在每个极分别实例化一个Control模块,并输出相应的选择信号)。
冒险处理采用分布式判断(在每个极分别使用一个模块用于判断是否进行转发和阻塞)。
实际上CPU内部并没有存储器模块,因此我们应当将存储器外置,并为CPU设计访问外部存储器的接口。
流水线模块设计PC
输入端口设置
[31:0]imm:PC跳转值
PCset:beq类PC跳转选择
PCjump:J指令跳转选择
clk:时钟信号
reset:同步复位信号
输出端口设置
[31:0]PCout:当前PC值
模块内部实现:根据PCset与PCjump选择PC寄存器值的变化行为,reset有效时PC寄存器值设置为0x3000。
部分代码实现 1234567891011121314151617alway ...
MIPS五级流水线CPU-Verilog设计设计方案
整体思路采用分布式译码(在每个极分别实例化一个Control模块,并输出相应的选择信号)。
冒险处理采用分布式判断(在每个极分别使用一个模块用于判断是否进行转发和阻塞)。
流水级
I极:取指令。
D极:寄存器堆GRF所在极,同时进行beq,jr,jal等跳转指令的跳转地址计算与跳转实现。
E极:ALU模块所在极,计算ALU结果。
M极:内存模块DM所在极,实现内存读写。
W极:将一次流水线进程计算后需要写回寄存器堆的值写回GFR。
AT模型
AT模型即Address-Time,通过流水线某一极指令使用寄存器所需要的时间与其前序指令写入寄存器堆的时间,以及这两个寄存器的地址是否相同,判断流水线此时是否需要转发或阻塞。
阻塞判断:根据其定义,需要tUse和tNew两个时间,将后序极的tNew和需要改变的寄存器的地址传入当前极进行判断,如果寄存器地址相同且tUse < tNew(通俗地说也就是我马上要使用该寄存器了,但前序指令对此寄存器值的修改还需要一段时间才能完成)则需要进行阻塞。
阻塞方法:在保持D极指令,I极 ...
MIPS单周期CPUVerilog设计设计草稿模块设计mips顶层模块,将各个模块连接,设置clk,reset输入端口。
PC
输入端口设置
[31:0]imm:PC跳转值
PCset:beq类PC跳转选择
PCjump:J指令跳转选择
clk:时钟信号
reset:同步复位信号
输出端口设置
[31:0]PCout:当前PC值
模块内部实现:根据PCset与PCjump选择PC寄存器值的变化行为,reset有效时PC寄存器值设置为0x3000。
部分代码 12345678910111213141516always @(posedge clk) begin if (reset==1) begin pc<=16'h3000; end else begin if (PCset==1) begin pc<=pc+4+imm; end else if (PCjump==1) begin pc<=imm; end ...
设计方案模块根据需要的add,sub,ori,lw,sw,beq,nop,lui指令,需要设计IFU,GRF,ALU,DM,Controller,lui模块
IFU
输入端口设置
PC:传入可能要更改到的pc值(beq)
PCset:判断pc值是否需要跳转
clk:时钟信号
reset:异步复位信号
输出端口设置
text:pc值指向的指令内容
PCout:输出当前pc值
模块内部实现
GRF
输入端口设置
A1:PD1输出对应寄存器地址
A2:PD2输出对应寄存器地址
WD:写入寄存器的值
A3:写入寄存器地址
clk:时钟信号
reset:异步复位信号
WE:写使能信号
输出端口设置
PD1:A1寄存器对应值
PD2:A2寄存器对应值
模块内部实现
采用多路分配器,以A3为选择信号将WE分配至每个寄存器
采用多路选择器,以A1,A2为选择信号将寄存器堆中相应寄存器的值分别选择到PD1,PD2
将clk,reset,WD连接至每一个寄存器对应接口
ALU
输入端口设置
input1:ALU输入第一个数据
input2:ALU输入第二个数据
op: ...
生活日常
未读Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment