OpenMIPS除法指令实现解析
需积分: 0 74 浏览量
更新于2024-08-05
收藏 958KB PDF 举报
"这篇文档详细介绍了除法指令的实现过程,包括试商法的原理和在OpenMIPS架构中的具体应用。"
在计算机系统中,除法指令的实现是一个复杂的过程,尤其在像OpenMIPS这样的处理器架构中。文档"除法指令的实现No.07"探讨了这个主题,主要分为三个部分:除法指令的说明、系统结构修改以及具体实现。
首先,文档解释了除法的基本思想——试商法,这是一种类似于我们小时候学习的除法方法,但在这里全部转化为二进制运算。在OpenMIPS中,32位除法需要至少32个时钟周期来完成。具体步骤如下:
1. 取出被除数的最高位m[k],然后用这个最高位去减去除数n。如果差值大于等于0,说明被除数至少能被除数整除一次,因此商的相应位s[k]为1;否则,s[k]为0。
2. 如果第一步的差值为0,说明当前的被减数小于除数,此时我们需要结合被除数的次高位m[k-1]继续尝试。若差值为1,表示被除数大于除数,需要结合减法结果与m[k-1]进行下一轮减法。
3. 这个过程会不断迭代,每次将k减1,直到k等于1。每次迭代后,根据减法结果更新商的相应位。
此外,文档提到了系统的结构修改,即在执行除法指令时需要暂停流水线。一个名为DIV的新模块被添加,负责执行除法。当执行到EX(执行)阶段时,被除数和除数的值被传入DIV模块,通过signed_div_i标志确定是否进行有符号除法。DIV模块在start_i信号触发后开始工作,完成除法后通过ready_o和result_o接口将结果返回到EX模块,最终结果会存储在HILO寄存器中。
实现这部分,文档指出DIV模块包含一个状态机,具有四个状态:DivFree(空闲)、DivStart(开始)、DivByZero(除以零)和DivEnd(结束)。当start_i信号为DivStart并且annul_i信号为0时,除法开始。如果除数为0,状态机将进入DivByZero状态,商和余数均设为0,然后进入DivEnd状态,准备好返回结果。
这篇文档详细阐述了OpenMIPS中除法指令的实现原理,从试商法的基本逻辑到系统层面的硬件支持,为我们揭示了计算机内部如何执行除法操作的复杂细节。
2022-08-08 上传
2021-11-02 上传
2023-06-06 上传
2023-04-12 上传
2023-06-06 上传
2023-05-28 上传
2023-06-12 上传
2023-06-28 上传
2023-06-10 上传
2023-06-06 上传
![](https://profile-avatar.csdnimg.cn/0f7c3a248a764f229ea6b1bb25a96da1_weixin_35830006.jpg!1)
df595420469
- 粉丝: 29
- 资源: 310
最新资源
- 解决本地连接丢失无法上网的问题
- BIOS报警声音解析:故障原因与解决方法
- 广义均值移动跟踪算法在视频目标跟踪中的应用研究
- C++Builder快捷键大全:高效编程的秘密武器
- 网页制作入门:常用代码详解
- TX2440A开发板网络远程监控系统移植教程:易搭建与通用解决方案
- WebLogic10虚拟内存配置详解与优化技巧
- C#网络编程深度解析:Socket基础与应用
- 掌握Struts1:Java MVC轻量级框架详解
- 20个必备CSS代码段提升Web开发效率
- CSS样式大全:字体、文本、列表样式详解
- Proteus元件库大全:从基础到高级组件
- 74HC08芯片:高速CMOS四输入与门详细资料
- C#获取当前路径的多种方法详解
- 修复MySQL乱码问题:设置字符集为GB2312
- C语言的诞生与演进:从汇编到系统编程的革命