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

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

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

已测试完降序冒泡排序
排序gif
在这里插入图片描述

微指令设计如下:
在这里插入图片描述
微指令地址转移逻辑如下:
在这里插入图片描述
有个坑爹的地方,注意syscall指令R_type和syscall都是1

上面俩个我都测试过了仅供参考吧,设计完微地址和转移逻辑,cpu的连线还算是比较简单吧。

以下思路:



首先先把大体结构搭好,弄清楚每个控制信号的意义,最后再写控制器,主要说的是控制器的编写。
有了转移图,按照转移图的顺序写每个阶段的微指令
|________ |________ |________ |________ |________ |
|<- 取码 -> |<- 译码 -> |<- 执行 -> |<- 访存 -> |<- 写回 -> |

微指令中P和下址字段说明:
我感觉这设计的属实精妙,P只在译码阶段置为1,下址字段代表着下一阶段的微指令,就拿LW举例说明,初始微指令存储器地址为0000,微指令P为0下址字段为0001代表取码,首先第一个时钟到来,从存储器取出指令,控制器按照微指令下址字段,微存储器地址变为0001,第二个时钟到来,按0001地址取第二个微指令即译码,这时P为1下址字段0000(随便),P为1二路选择器取地址转移逻辑(其实就是个编码器)的输出,因为本例是LW所以现在微指令储存器的地址为0002,第三个时钟到来,微指令为LW1即执行阶段算出要取数的地址(rs+最后16位立即数),第四个时钟到来,微指令为LW2即访存阶段按照LW1算出的地址取出数据放入DR数据寄存器中,第五个时钟到来,微指令为LW3即写回阶段写到rt所指向的寄存器中,这时候下址字段为0000,然后第六个时钟周期微指令存储器从0000取出下一条微指令,然后重复过程。

注意:本实验停机信号不要停时钟而是停pc使能端,还有真值表一定要认真仔细填好,我感觉真值表是易错点了,本实验老师讲的跳下一条指令是pc+=4但是logisim中的存储器是按字存取的吧,pc+=1应该是正确的。其他的知识点,mooc中都有讲到,这里不再赘述了。

Logo

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

更多推荐