自己动手写CPU之第九阶段(5)——实现加载存储指令1(修改译码阶段)

本文介绍如何修改OpenMIPS处理器的译码阶段以支持加载存储指令,包括lb、lwl等,详细阐述了对ID模块和ID/EX模块的修改,涉及寄存器读写和运算类型的选择。
摘要由CSDN通过智能技术生成

将陆续上传新书《自己动手写CPU》,今天是第41篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈。

开展晒书评送书活动,在亚马逊、京东、当当三大图书网站上,发表《自己动手写CPU》书评的前十名读者,均可获赠《步步惊芯——软核处理器内部设计分析》一书,大家踊跃参与吧!活动时间:2014-9-11至2014-10-30


9.3 修改OpenMIPS以实现加载存储指令

9.3.1 修改译码阶段

      1、修改ID模块

      参考图9-19可知,ID模块要增加接口inst_o,如表9-1所示。


      在ID模块还要增加对加载存储指令的分析,根据图9-19-29-69-12给出的加载存储指令的格式可知,这些指令的指令码都是不同的,所以可以直接依据指令码确定是哪一种指令,确定指令的过程如图9-20所示。


      其中涉及的宏定义如下,正是各个加载存储指令的指令码,在本书附带光盘Code\Chapter9_1目录下的defines.v文件可以找到这些定义。

`define EXE_LB   6'b100000
`define EXE_LBU  6'b100100
`define EXE_LH   6'b100001
`define EXE_LHU  6'b100101
`define EXE_LW   6'b100011
`define EXE_LWL  6'b100010
`define EXE_LWR  6'b100110
`define EXE_SB   6'b101000
`define EXE_SH   6'b101001
`define EXE_SW   6'b101011
`define EXE_SWL  6'b101010
`define EXE_SWR  6'b101110

      修改译码阶段的ID模块如下。完整代码请参考本书附带光盘Code\Chapter9_1目录下的id.v文件。

module id(
  ......
	
  output wire[`RegBus]          inst_o,   // 新增加的输出接口
	
  ......
);

  ......

  assign inst_o = inst_i;    // inst_o的值就是译码阶段的指令
    
  always @ (*) begin
    if (rst == `RstEnable) begin
     ......
    en
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值