自己动手画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取数据存储器中的数据

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐