第五章&&第六章&&第七章
在流水线中添加运算类指令
5.1 算术逻辑运算类指令的添加
添加指令步骤
- 阅读spec,明确指令功能定义
- 根据功能设计数据通路,能复用的就复用,不能复用就新增
- 根据调整后的数据通路,书里所有指令对应的控制信号。
5.2 乘除法运算类指令的添加
传统MIPS32规范中额外定义HI和LO两个32位寄存器,分别存放乘法结果高32位和低32位。
在进行定点补码除法运算时,商写入LO寄存器,余数写入HI寄存器。
除了乘除法的实现方法,还要关注HI、LO寄存器数据的更新。其中乘法运算单周期,除法运算需要迭代,所以将HI、LO寄存器更新放在执行流水阶段完成比较好。
5.3 乘除法配套数据搬运指令的添加
- MFHI:读取HI寄存器的值,并写入通用寄存器
- MFLO:读取LO寄存器的值,并写入通用寄存器
- MTHI:将通用寄存器的值写入HI寄存器
- MTLO:将通用寄存器的值写入LO寄存器
在流水线中添加转移指令和访存指令
6.1 转移指令的添加
6.2 访存指令的添加
例外和中断的支持
7.1 例外和中断的基本概念
例外是一套软硬件协同处理的机制。
原则上希望尽可能由软件程序来处理复杂的异常情况,来保证硬件的设计复杂度得到控制并且系统实际运行性能没有太大损失。
例外处理的绝大多数工作是由软件完成,但是例外处理的开始和结束阶段必须由硬件完成。
7.2 MIPS指令系统中与例外相关的功能定义
例外处理过程中,硬件逻辑电路和例外处理程序之间需要进行必要的信息交互。因此MIPS定义了一组独立的寄存器CP0(协处理器0),用来进行这类信息的交互。
CPU内部判定接收到中断
外部中断通过处理器核的引脚设置Cause寄存器的对应的中断状态位,当这个中断状态位自身对应的使能位有效且全局使能也有效,那么CPU就认为接收到了中断。当同时接收到多个中断时,后续处理交给软件上的中断处理函数进行。
核内定时中断
常用于操作系统的调度和计时功能的实现。
CPO中有寄存器Count和Compare。Count为32位计数器,每两个时钟周期自增1,Compare为软件可读写寄存器。当两个寄存器值相等时,Cause寄存器对应位置1,产生定时中断。
7.3 流水线CPU实现例外和中断的设计要点
- 地址错例外 可在取值时对PC最低两位进行判断
- 整型溢出例外 可硬件判断也可软件判断
- 系统调用例外 执行SYSCALL就会触发
- 断点例外 执行BREAK就会触发
- 保留指令例外 译码时发现指令码不是spec中定义的指令
- 中断例外
- 中断是一种特殊例外,由外部事件触发,与指令之间无对应关系
- 可将异步的中断事件动态地标记在某一条指令上,被标记的指令被赋予中断这种例外,随后处理都类似。
- 出于精确例外实现开销和中断响应延迟两方面的权衡,通常将中断标记在译码级指令。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】