- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
⾃⼰动⼿写CPU之第七阶段(1)——简单算术操作指令说明将陆续上传本⼈写的新书《⾃⼰动⼿写
CPU》(尚未出版),今天是第24篇,我尽量每周四篇
本章将实现MIPS32指令集架构定义的所有算术操作指令,共有21条,按照OpenMIPS实现这些指令的⽅
式,可以分为三类,分别介绍如下。
(1)简单算术操作指令
共有15条,包括加法、减法、⽐较、乘法等指令,这些指令在流⽔线的执⾏阶段都只需要⼀个时钟周
期,⽽且实现思路很直观,与
第4章添加逻辑操作指令类似,只需修改译码阶段的ID模块、执⾏阶段的EX模块,即可实现。
(2)乘累加、乘累减指令
共有4条:乘累加madd、⽆符号乘累加maddu、乘累减msub、⽆符号乘累减msubu。其中madd、maddu要
求操作数相乘后,再
与HI、LO寄存器的值相加,msub、msubu指令要求操作数相乘后,再与HI、LO寄存器的值相减,也就
是这4条指令都要做两次运算,⼀次乘法、⼀次加(减)法,如果将这两次运算放在流⽔线执⾏阶段的
⼀个时钟周期中完成,那么会使流⽔线执⾏阶段所需要的时间明显增加,从⽽降低OpenMIPS⼯作时钟
的频率,因此,OpenMIPS设计在流⽔线执⾏阶段使⽤两个时钟周期完成这类指令,⼀个时钟周期进⾏
乘法,下⼀个时钟周期进⾏加(减)法。
(3)除法指令
共有2条:有符号除法div、⽆符号除法divu。OpenMIPS计划采⽤试商法完成除法运算,对于32位的除
法,流⽔线执⾏阶段⾄少需
要32个时钟周期,也就是除法指令需要多个时钟周期才能完成,所以单独作为⼀类。
本章将分别介绍上述三种类别的算术操作指令的实现过程。7.1-7.4节给出了简单算术操作指令的格式、
作⽤,介绍了实现思路,并修改OpenMIPS代码以实现简单算术操作指令,最后通过ModelSim仿真验证
是否实现正确。
因为乘累加、乘累减、除法指令都需要在流⽔线执⾏阶段占⽤多个时钟周期,这就需要使流⽔线暂停,
所以在实现这些指令之前,先要实现流⽔线暂停,在7.5节介绍了使流⽔线暂停的⽅法。
7.6-7.9节给出了乘累加、乘累减指令的格式、作⽤,介绍了实现思路,并修改OpenMIPS代码以实现乘累
加、乘累减指令,最后进⾏仿真测试。
7.10-7.13节给出了除法指令的格式、作⽤,介绍了实现思路,并修改OpenMIPS代码以实现除法指令,最
后进⾏仿真测试。
7.14节给出了实现算术操作指令后的数据流图。
7.1 简单算术操作指令说明
简单算术操作指令包括:add、addi、addiu、addu、sub、subu、clo、clz、slt、slti、sltiu、sltu、mul、
mult、multu ,共15条指令,各指令的格式及作⽤说明如下。
1、add、addu、sub、sub、slt、sltu指令
这6条指令的格式如图7-1所⽰。从图中可以发现这6条指令都是R类型指令,并且指令码都是6b000000 ,
即SPECIAL类,另外第6-10bit都为0 ,需要依据指令中0-5bit功能码的值进⼀步判断是哪⼀种指令。
当功能码是6b100000时,表⽰是add指令,加法运算
指令⽤法为:add rd, rs, rt
指令作⽤为:rd - rs + rt ,将地址为rs的通⽤寄存器的值,与地址为rt的通⽤寄存器的值进⾏加法运算,
结果保存到地址为rd的通⽤寄存器中。但是有⼀种特殊情况:如果加法运算溢出,那么会产⽣溢出异
常,同时不保存结果。
当功能码是6b100001时,表⽰是addu指令,加法运算
指令⽤法为:addu rd, rs, rt
指令作⽤为:rd - rs + rt ,将地址为rs的通⽤寄存器的值,与地址为rt的通⽤寄存器的值进⾏加法运算,
结果保存到地址为rd的通⽤寄存器中。与add指令不同之处在于addu指令不进⾏溢出检查,总是将结果保
存到⽬的寄存器。
当功能码是6b100010时,表⽰是sub指令,减法运算
指令⽤法为:sub rd, rs, rt
指令作⽤为:rd - rs - rt ,将地址为rs的通⽤寄存器的值,与地址为rt的通⽤寄存器的值进⾏减法运算,
结果保存到地址为rd的通⽤寄存器中。但是有⼀种特殊情况:如果减法运算溢出,那么产⽣溢出异常,
同时不保存结果。
当功能码是6b100011时,表⽰是subu指令,减法运算
指令⽤法为:subu rd, rs, rt
指令作⽤为:rd - rs - rt ,将地址为rs的通⽤寄存器的值,与地址为rt的通⽤寄存器的值进⾏减法运算,
结果保存到地址为rd的通⽤寄存器中。与sub指令不同之处在于subu指令不进⾏溢出检查,总是
您可能关注的文档
最近下载
- 《应用文写作》高职完整全套教学课件.pdf
- 人教版二年级上册数学全册教学设计(配2025年秋新版教材).docx
- 路灯维修工考试题库单选题100道及答案.docx VIP
- TDZJN 80-2022 数据中心用锂离子电池设备产品技术标准.docx
- 2025年教科版一年级《科学》上册全册教案 .pdf VIP
- 唱天瑶 课件接力版音乐五年级上册(共11张PPT)(含音频+视频).pptx VIP
- 数字化驱动下的智慧家庭医生服务报告.pdf VIP
- [工程科技]MODFLOW用户手册中文版.doc
- 苏教版小学一年级数学下学期综合检测试卷 附解析.pdf VIP
- 矿山排水工培训课件视频.pptx VIP
文档评论(0)