将陆续上传本人写的新书《自己动手写CPU》。今天是第29篇。我尽量每周四篇

亚马逊的销售地址例如以下,欢迎大家围观呵!

http://www.amazon.cn/dp/b00mqkrlg8/ref=cm_sw_r_si_dp_5kq8tb1gyhja4

China-pub的销售地址例如以下(有文件夹、内容简单介绍、前言):

http://product.china-pub.com/3804025

7.6 乘累加、乘累减指令说明

乘累加、乘累减指令有4条,包含:madd、maddu、msub、msubu,各指令的格式如图7-11所看到的。从图中可知这4条指令的指令码都是SPECIAL2,第6-15bit都为0,能够根据第0-5bit的功能码确定是哪一种指令。

  • 当功能码是6'b000000时,表示是madd指令,有符号乘累加运算

指令使用方法为:madd rs, rt

指令作用为:{HI, LO} <- {HI, LO} + rs × rt,将地址为rs的通用寄存器的值。与地址为rt的通用寄存器的值,作为有符号数进行乘法运算。运算结果与{HI, LO}相加,相加的结果保存到{HI, LO}中。

此处{HI, LO}表示的是HI、LO寄存器连接形成的64位数,HI是高32位,LO是低32位。

  • 当功能码是6'b000001时,表示是maddu指令,无符号乘累加运算

指令使用方法为:maddu rs, rt

指令作用为:{HI, LO} <- {HI, LO} + rs × rt,将地址为rs的通用寄存器的值,与地址为rt的通用寄存器的值,作为无符号数进行乘法运算,运算结果与{HI, LO}相加,相加的结果保存到{HI, LO}中。

  • 当功能码是6'b000100时,表示是msub指令,有符号乘累减运算

指令使用方法为:msub rs, rt

指令作用为:{HI, LO} <- {HI, LO} - rs × rt,将地址为rs的通用寄存器的值,与地址为rt的通用寄存器的值,作为有符号数进行乘法运算。然后使用{HI, LO}减去乘法结果,相减的结果保存到{HI, LO}中。

  • 当功能码是6'b000101时,表示是msubu指令。无符号乘累减运算

指令使用方法为:msubu rs, rt

指令作用为:{HI, LO} <- {HI, LO} - rs × rt。将地址为rs的通用寄存器的值,与地址为rt的通用寄存器的值,作为无符号数进行乘法运算。然后使用{HI, LO}减去乘法结果,相减的结果保存到{HI, LO}中。

7.7 乘累加、乘累减指令实现思路

7.7.1 实现思路

在本章開始已经说明了乘累加、乘累减指令的实现思路,计划在流水线运行阶段採用两个时钟周期完毕运算。第一个时钟周期进行乘法运算,第二个时钟周期将乘法结果与HI、LO寄存器进行加/减法。

7.7.2 系统结构的改动

为了实现7.7.1节的思路,必需要保存两个信息:(1)当前是第几个时钟周期;(2)乘法结果。

OpenMIPS通过在EX/MEM模块中加入两个寄存器cnt、hilo,分别保存上述信息。

改动系统结构如图7-12所看到的。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpc2hhbmd3ZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

运行阶段EX模块的输出hilo_temp_o是乘法结果,传递到EX/MEM模块。并在下一个时钟周期送回EX模块,參与第二个时钟周期的加/减法运算。

运行阶段EX模块的输出cnt_o代表当前是第几个时钟周期。传递到EX/MEM模块,并在下一个时钟周期送回EX模块。后者据此推断当前处于乘累加、乘累减指令的第几个运行周期。

下一次将给出实现乘累加、乘累减指令的代码,敬请关注!

自己动手写CPU之第七阶段(6)——乘累加指令实现思路的更多相关文章

  1. 自己动手写CPU之第七阶段(7)——乘累加指令的实现

    将陆续上传本人写的新书<自己动手写CPU>.今天是第30篇.我尽量每周四篇 亚马逊的销售地址例如以下.欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...

  2. 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ...

  3. 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明

    将陆续上传新书<自己动手写CPU>,今天是第47篇. 9.7 ll.sc指令实现思路 9.7.1 实现思路 这2条指令都涉及到訪问链接状态位LLbit,能够将LLbit当做寄存器处理,ll ...

  4. 自己动手写CPU之第五阶段(1)——流水线数据相关问题

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...

  5. 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第17篇.我尽量每周四篇 5.4 逻辑.移位操作与空指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条:and.and ...

  6. 自己动手写CPU之第六阶段(2)——移动操作指令实现思路

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第21篇,我尽量每周四篇 6.2 移动操作指令实现思路 6.2.1 实现思路 这6条移动操作指令能够分为两类:一类是不涉及特殊 ...

  7. 自己动手写CPU之第八阶段(4)——转移指令实现过程2

    将陆续上传本人写的新书<自己动手写CPU>,今天是第36篇,我尽量每周四篇 开展晒书评送书活动,在亚马逊.京东.当当三大图书站点上,发表<自己动手写CPU>书评的前十名读者,均 ...

  8. 自己动手写CPU 笔记

    自己动手写CPU 跳转至: 导航. 搜索 文件夹 1 处理器与MIPS 2 可编程逻辑器件与Verilog HDL 3 教学版OpenMIPS处理器蓝图 4 第一条指令ori 5 逻辑.移位与nop ...

  9. 《自己动手写CPU》写书评获赠书活动结果

    <自己动手写CPU>写书评获赠图书的读者有: 京东:8***2.16号哨兵.magicyu.kk6803.jddickyd.杰出的胡兵 亚马逊:徐贺.马先童.jaychen.farmfar ...

  10. 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...

随机推荐

  1. package-org.springframework.ui-interface:Model.class

    ylbtech-package-org.springframework.ui-interface:Model.class 1.返回顶部 1. /* * Copyright 2002-2012 the ...

  2. 如何正确产看API

    看API时,先看的它的父接口自接口,及其相关的抽象类和子类 看完后,看概述的第一段话就行,后面的不用看. 再看构造方法,并到底层去看构造方法里参数的具体含义. 最后,再将包含的方法一个个进行测试. 解 ...

  3. 常用的CSS命名

    头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体佈局宽度:wrapper 左右中:left rig ...

  4. Android入门知识

    1.Android开发环境 Android常用的开发环境包括两个:Eclipse + ADT 和Android Studio,Android Studio作为google官方推出的开发环境自然有得天独 ...

  5. 算法 之 3n+1问题

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  6. hdu3873 Invade the Mars 有限制的最短路

    此段略过.看完题目,觉得这真的是一道好题目.自己有想法,但是实现起来却很难.看题解,写代码,然后写题解,意义何在?我不认为自己总是这么弱.就算抄代码,我也要有自己的理解.菜鸟总会成长. 首先,题目必须 ...

  7. 深度讲解智能硬件手机APP开发流程

    常州做APP开发公司紫竹云科技分析,智能硬件产品的软件开发,除了APP和后台之外还有一个固件端的开发,由于固件是要运行产品上的,不过此时的硬件也是刚开始进行研发,所以是无法提供硬件来运行固件的.因此在 ...

  8. 关于生sql中的空值

    在数据库中的空值无非就是两种形式的表示 一种是什么都没有,一种是以NuLL显示的 , 那么在C# 读取出来怎么判断呢, DtStatus.Rows[0]["FetchCode"]. ...

  9. java加密解密算法位运算

    一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...

  10. ack 工具

    ack-tools ack其实就是快速查找工具,但centos在没有这个安装包. 下载安装 cd /tmp git clone https://github.com/dongci/ack.git cd ...