自己动手写CPU之第七阶段(7)——乘累加指令的实现

本文介绍了如何在OpenMIPS处理器中添加乘累加和乘累减指令,包括修改ID模块进行指令分析,EX模块的改进以处理乘法结果,以及对EX/MEM模块的更新。详细阐述了每个阶段的修改细节,如译码阶段的寄存器读取和运算类型设置,执行阶段的乘法计算、流水线暂停管理和结果存储,以及OpenMIPS顶层模块的接口连接。
摘要由CSDN通过智能技术生成

将陆续上传本人写的新书《自己动手写CPU》,今天是第30篇,我尽量每周四篇

亚马逊的销售地址如下,欢迎大家围观呵!

http://www.amazon.cn/dp/b00mqkrlg8/ref=cm_sw_r_si_dp_5kq8tb1gyhja4

China-pub的销售地址如下:

http://product.china-pub.com/3804025

北发的销售地址如下:

http://book.beifabook.com/Product/BookDetail.aspx?Plucode=712123950&extra=0_s25960657


7.8 修改OpenMIPS以实现乘累加、乘累减指令

7.8.1 修改译码阶段的ID模块

      译码阶段的ID模块要添加对乘累加、乘累减指令的分析,根据图7-11给出的指令格式可知,这4条指令都是SPECIAL2类指令,可以依据功能码确定是哪一种指令,确定指令的过程如图7-13所示。


      其中涉及的宏定义如下,正是图7-13中各个指令的功能码。在本书附带光盘Code\Chapter7_2目录下的defines.v文件中可以找到这些定义。

`define EXE_MADD   6'b000000
`define EXE_MADDU  6'b000001
`define EXE_MSUB   6'b000100
`define EXE_MSUBU  6'b000101
      译码阶段的ID模块主要修改内容如下。完整代码请参考本书光盘Code\Chapter7_2目录下的id.v文件。

module id(
	......	
);

   ......
   assign stallreq = `NoStop;
  
   always @ (*) begin	
     if (rst == `RstEnable) begin
	      ......
     end else begin
        aluop_o     <= `EXE_NOP_OP;
        alusel_o    <= `EXE_RES_NOP;
        wd_o        <= inst_i[15:11];          // 默认目的寄存器地址wd_o
        wreg_o      <= `WriteDisable;
        instvalid   <= `InstInvalid;
        reg1_read_o <= 1'b0;
        reg2_read_o <= 1'b0;
        reg1_addr_o <= inst_i[25:21];          // 默认的reg1_addr_o
        reg2_addr_o <= inst_i[20:16];          // 默认的reg2_addr_o
        imm         <= `ZeroWord;
        case (op)
	        ......
	        `EXE_SPECIAL2_INST:  begin          // SPECIAL2类指令
	           case ( op3 )
		           ......
		           `EXE_MADD:		begin       // madd指令
                 wreg_o      <= `WriteDisable;
                 aluop_o     <= `EXE_MADD_OP;
                 alusel_o    <= `EXE_RES_MUL; 
                 reg1_read_o <= 1'b1;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值