[华中科技计组实验]logisim完成8指令单周期MIPS CPU

自己动手画cpu系列 建设中ing 仅供参考!
在这首推华中科技大学计算机组成原理实验课mooc连接
初衷:在mooc上看见了本课觉得超赞,本人已完成了课中所有的实验,在做实验的过程中有时候实验会没有思路或者有些bug会浪费很多时间,目前呢也没找到完整的答案,所以做了份自己的答案给大家困惑的时候一份参考(大神请忽视,我自己也就一弱鸡),也就给大家卡壳的时候能有个找灵感的地方,请先独立思考,切勿抄袭。

tips:每个部分都是先贴答案再写思路

    • 数字逻辑基础
    • 数据表示实验
    • 运算器设计
    • 存储器设计
    • MIPS CPU
      • MIPS CPU必备基础知识
      • 8指令单周期MIPS32 CPU
      • 8指令多周期(微指令)MIPS32 CPU
      • 8指令多周期(硬布线)MIPS32 CPU
      • 24条指令5级流水MIPS32 CPU

主电路图如下
在这里插入图片描述

控制器如下
在这里插入图片描述

这个是早期编写的了,可以看出控制器比较简陋,我感觉最优方法还是参照24指令的单周期控制器,就是老师给出的那个,由译码器构成而不是由比较器构成,比较器损耗太大了
在这里插入图片描述

因为是mipscpu部分第一个实验啰嗦一下,说一下各个控制信号
在这里插入图片描述
在这里插入图片描述
首先是regdist信号,它的作用是区分R型和J型指令的,一般来说regdist==1是R型信号因为R型指令写成汇编形式寄存器分配op rd,rs,rt是写到rd里的所以W#应是rd地址。
Sign Extend实际上就是个16->32的位扩展器,因为无论是alu还是pc都需要32位数据,特别说明在本实验后面不用左移两位,pc也不是+4而是+1因为logisim中都是按字寻址而不是按字节
AlUSrc:区分是加立即数还是寄存器数,实际上还是R和非R的区分,因为在本实验R型alusrc==0,代表R型指令加寄存器数其余加的是立即数
MemtoReg:==0代表寄存器堆中要存的是寄存器数之间的运算即R型,==1代表是lw取数据存储器中的数据

单周期还是挺基础的最好把这个仔细做做,对后面的实验很有帮助。

  • 16
    点赞
  • 263
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,下面是基于单周期MIPS CPULogisim设计的8指令: 1. ADD指令:将两个寄存器的值相加,并将结果存储在第三个寄存器中。 操作码:000000 功能码:100000 格式:R型指令 示例:ADD $t0, $s0, $s1 2. SUB指令:将两个寄存器的值相减,并将结果存储在第三个寄存器中。 操作码:000000 功能码:100010 格式:R型指令 示例:SUB $t0, $s0, $s1 3. AND指令:将两个寄存器的值进行按位与操作,并将结果存储在第三个寄存器中。 操作码:000000 功能码:100100 格式:R型指令 示例:AND $t0, $s0, $s1 4. OR指令:将两个寄存器的值进行按位或操作,并将结果存储在第三个寄存器中。 操作码:000000 功能码:100101 格式:R型指令 示例:OR $t0, $s0, $s1 5. ADDI指令:将一个寄存器的值与一个常数相加,并将结果存储在另一个寄存器中。 操作码:001000 格式:I型指令 示例:ADDI $t0, $s0, 100 6. LW指令:将某个内存地址中的数据加载到寄存器中。 操作码:100011 格式:I型指令 示例:LW $t0, 0($s0) 7. SW指令:将寄存器中的数据存储到某个内存地址中。 操作码:101011 格式:I型指令 示例:SW $t0, 0($s0) 8. BEQ指令:如果两个寄存器的值相等,则跳转到指定的地址。 操作码:000100 格式:I型指令 示例:BEQ $t0, $s0, label 注意:以上指令仅供参考,实际应用中需要根据具体需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值