前言

本章继续讲述计算机硬件系统设计的内容,之前已经大概说明了 ALU 和存储系统的设计,本文讲述CPU的设计。对应的有单周期、多周期 CPU 设计,以及流水线设计,中断处理会在后文中详细说明,本文不进行讲述。


单周期 CPU 设计

在这里插入图片描述

数据通路

即定长指令周期,机器性能取决于最慢的指令,导致时钟周期过长。
指令类型分为三类,R型指令、I型指令、J型指令。
在这里插入图片描述
数据通路如下
在这里插入图片描述
最左侧多路选择器,当执行有条件跳转指令时,选择跳转地址,跳转地址由15位的立即数运算得到;下一层为无条件跳转指令选择,当执行JAL(函数调用指令)或J(无条件跳转指令)选择由26位立即数运算得到的地址;第三层选择为JR指令(跳转到寄存器记录地址,一般用于在JAL调用退出时使用),一般选择$31号寄存器保存JAL执行时PC的值,函数调用后,再读取 $31 的值进行返回。

本设计支持24条指令,这里不一一介绍,有疑问可以评论共同探讨学习。


控制器设计

控制器是通过分解指令,由OP和FUNC字段确定某种运算,给出控制信号,协同数据通路的工作,确保数据的正确流通。

控制器设计方法可以使用硬布线设计,也可以采用微程序设计。

第一步需要分析指令在执行过程需要的控制信号,之后根据分析,设计电路,使用课程包中的EXCEL,填写输入信号,生成控制器电路,以设计控制器。
在这里插入图片描述由上图 指令-控制信号 得到控制信号生成表达式
在这里插入图片描述
将逻辑表达式输入,自动生成电路。
在这里插入图片描述
最后导入程序测试功能。


MIPS 指令流水线设计

在这里插入图片描述

理想流水线

理想流水线满足以下特点:阶段数相同,所有指令经过同样的流程、阶段;各段时延相同,各段传输延迟一致,不存在等待现象,所以设计时考虑最慢的处理过程;无资源冲突,各段之间不存在资源共享,各段完全并发;无段间互锁,进入流水线的数据与部件不受其他执行阶段的影响。

这里不在介绍各段的执行流程,细节参考MOOC课程。

在这里插入图片描述


流水接口部件设计

流水接口部件实际为寄存器的组合设计,用于暂存数据,本段输出处理好的数据暂存于寄存器,寄存器为后段提供数据。
在这里插入图片描述
考虑设计不同位数的接口部件,方便后期直接使用,同时注意使用同步清零,防止异步清零时丢失数据。


气泡流水线

在执行跳转指令时,由于前段已经加载其他指令,属于误取指令,故需要进行处理。这里介绍采用插入气泡的方法解决问题。这会导致流水行性能损失。
在这里插入图片描述
当判断流水线执行跳转指令时,取指阶段于译码阶段设计同步清零信号,清空流水线保证指令正确执行。

当流水段出现数据相关问题时,也可以采用插入气泡的方法解决问题。
在这里插入图片描述

数据重定向

使用气泡解决冲突问题时,流水线会有性能损失,故而可以采用数据重定向方法解决该类问题。

主体思路是通过寄存器使用检查,确定段间的争用关系,通过设计电路,完成数据重定向。

寄存器使用检查

通过之前设计完成的控制信号生成文件,只关注RegDst信号与RegWrite信号,即输入为6位OP字段,6位FUNC字段,输出两个寄存器信号。
在这里插入图片描述

寄存器冲突检测

通过设计好的寄存器检查电路组件,设计比较电路。
在这里插入图片描述

数据重定向实现

在这里插入图片描述

在这里插入图片描述


总结

本文仅提供设计思路,如有错误还请指正,也希望各位读者可以提供宝贵意见与指导,共同探讨学习。设计不尽完善,还有许多需要改进的地方,希望拙笔可以抛砖引玉,之后可以出现更多完善优秀的设计提供参考。

本人也因对硬件设计极为感兴趣,欢迎各位提问交流,最后也衷心祝愿各位读者万事胜意,身体健康。

Logo

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

更多推荐