多周期流水线CPU设计-暂定与除法运算实现

本文探讨了多周期流水线CPU设计中的暂停机制,详细介绍了当指令处于EX阶段时如何暂停流水线,并阐述了CTRL模块在接收和处理暂停请求中的作用。此外,还提及了乘累加、乘累减以及除法运算的实现,特别是除法运算中的试商过程和负数处理。完整实现和更多细节可在作者提供的资源中找到。
摘要由CSDN通过智能技术生成

完整版放在我的下载中,需要的同学可以参考,包括参考书籍《自己动手写CPU》

暂停机制

指令位于第n个阶段,那么保持第n阶段之前的各个阶段的寄存器保持不变,同时pc值保持不变

假设EX阶段要求暂停

在这里插入图片描述

CTRL模块

接受各阶段的流水线暂停请求信号

接受来自ID,EX模块的stallreq暂停信号,进行判断,将stall结果输出到PC,IF/ID, ID, ID/EX, EX, EX/MEM, MEM/WB

在这里插入图片描述

`include "defines.v"
module ctrl(
	input wire	rst,
	input wire  stallreq_from_id,
	input wire  stallreq_from_ex,
	output reg[5:0]  stall       
	
);
	always @ (*) begin
		if(rst == `RstEnable) begin
			stall <= 6'b000000;
		end else if(stallreq_from_ex == `Stop) begin
			stall <= 6'b001111;
		end else if(stallreq_from_id == `Stop) begin
			stall <= 6'b000111;			
		end else begin
			stall <= 6'b000000;
		end    //if
	end      //always
endmodule

PC, IF/ID, ID, ID/EX, EX, EX/MEM, MEM都需要添加信号,以及对应的机制

乘累加,乘累减

在这里插入图片描述

`define EXE_MADD  6'b000000
`define EXE_MADDU  6'b000001
`define EXE_MSUB  6'b000100
`define EXE_MSUBU  6'b000101
//R型指令
// 31-26    25-21 20-16 15-11  10-6   5-0
// special2 rs    rt    00000  00000  madd  {HI,LO} <- {HI,LO} + rs*rt
// special2 rs    rt    00000  00000  maddu
// special2 rs    rt    00000  00000  msub  {HI,LO} <- {HI,LO} - rs*rt
// special2 rs    rt    00000  00000  msubu
`define EXE_MADD_OP  8'b1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值