自己动手写CPU之第九阶段(4)——载入存储指令实现思路
将陆续上传新书《自己动手写CPU》,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈。
开展晒书评送书活动,在 q=%E4%BA%9A%E9%A9%AC%E9%80%8A&ie=utf-8&src=se_lighten_f" style="color:rgb(51,102,153); text-decoration:none; display:inline; position:static">亚马逊
活动时间:2014-9-11至2014-10-30
9.2 载入存储指令实现思路
9.2.1 实现思路
本节介绍除ll、sc之外的载入存储指令的实现思路,ll、sc指令的实现思路将在9.7节专题介绍。
1、载入指令实现思路
载入指令在译码阶段进行译码,得到运算类型alusel_o、aluop_o,以及要写的目的寄存器信息。这些信息传递到运行阶段,然后又传递到訪存阶段,訪存阶段根据这些信息。设置对数据存储器RAM的訪问信号。
从RAM读取回来的数据须要依照载入指令的类型、载入地址进行对齐调整,调整后的结果作为终于要写入目的寄存器的数据。
2、存储指令实现思路
存储指令在译码阶段进行译码,得到运算类型alusel_o、aluop_o,以及要存储的数据。
这些信息传递到运行阶段,然后又传递到訪存阶段,訪存阶段根据这些信息。设置对数据存储器RAM的訪问信号。将数据写入RAM。
须要特别注意的是:本章如果能够在一个时钟周期内完毕对外部数据存储器RAM的读、写操作,在兴许章节实现实践版OpenMIPS处理器的时候会考虑复杂情况。
9.2.2 数据流图的改动
为了实现除ll、sc之外的载入存储指令,改动数据流图如图9-18所看到的。主要是在訪存阶段添加了对数据存储器RAM的訪问。同一时候,因为要写入目的寄存器的数据可能是运行阶段的结果,也可能是在訪存阶段从数据存储器RAM载入得到的数据,所以在訪存阶段添加了一个多路选择器。进行选择。
9.2.3 系统结构的改动
为了实现除ll、sc之外的载入存储指令,须要对系统结构进行改动,添加部分模块的接口,改动后的系统结构如图9-19所看到的。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpc2hhbmd3ZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
主要改动内容例如以下。
(1)译码阶段的ID模块添加了输出信号inst_o,其值就是处于译码阶段的指令,该信号会传递到运行阶段,在运行阶段的EX模块会利用该信号的值计算载入、存储地址mem_addr_o。
(2)运行阶段的EX模块将运算子类型aluop_o、载入存储地址mem_addr_o、读取的第二个操作数reg2_o等信息,通过EX/MEM模块传递到訪存阶段的MEM模块。
(3)訪存阶段的MEM模块根据载入、存储指令的类型,确定对数据存储器RAM的訪问信息,通过mem_ce_o接口送出数据存储器使能信号,mem_addr_o接口送出訪问地址,mem_we_o接口指出是载入还是存储操作、mem_sel_o接口送出字节选择信号。假设是存储指令。那么还通过mem_data_o接口输出要存储的数据,假设是载入指令。那么会从mem_data_i接口获得读取到的数据。然后MEM模块根据详细的载入指令类型、载入地址,对获取的数据进行对齐调整,终于得到要写入目的寄存器的数据。
下一次将改动OpenMIPS的代码以实现载入存储指令。
自己动手写CPU之第九阶段(4)——载入存储指令实现思路的更多相关文章
- 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明
将陆续上传新书<自己动手写CPU>,今天是第47篇. 9.7 ll.sc指令实现思路 9.7.1 实现思路 这2条指令都涉及到訪问链接状态位LLbit,能够将LLbit当做寄存器处理,ll ...
- 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)
将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...
- 自己动手写CPU之第九阶段(7)——MIPS32中的LL、SC指令说明
将陆续上传新书<自己动手写CPU>,今天是第46篇. 在MIPS32指令集中有两条特殊的存储载入指令:链接载入指令LL.条件存储指令SC,本次将介绍这两条指令.在兴许将实现这两条指令. 9 ...
- 自己动手写CPU之第七阶段(7)——乘累加指令的实现
将陆续上传本人写的新书<自己动手写CPU>.今天是第30篇.我尽量每周四篇 亚马逊的销售地址例如以下.欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...
- 自己动手写CPU之第五阶段(1)——流水线数据相关问题
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...
- 自己动手写CPU之第六阶段(2)——移动操作指令实现思路
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第21篇,我尽量每周四篇 6.2 移动操作指令实现思路 6.2.1 实现思路 这6条移动操作指令能够分为两类:一类是不涉及特殊 ...
- 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立
将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ...
- 自己动手写CPU之第五阶段(2)——OpenMIPS对数据相关问题的解决措施
将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第16篇.我尽量每周四篇 5.2 OpenMIPS对数据相关问题的解决措施 OpenMIPS处理器採用数据前推的方法来解决流水 ...
- 自己动手写CPU之第七阶段(2)——简单算术操作指令实现过程
将陆续上传本人写的新书<自己动手写CPU>.今天是第25篇.我尽量每周四篇 亚马逊的预售地址例如以下,欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...
随机推荐
- LeetCode(107) Binary Tree Level Order Traversal II
题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...
- PAT Basic 1010
1010 一元多项式求导 设计函数求一元多项式的导数.(注:x^n^(n为整数)的一阶导数为n*x^n-1^.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数). ...
- 【LeetCode】Integer to Roman(整数转罗马数字)
这道题是LeetCode里的第12道题. 吐了,刚做完"罗马数字转整数",现在又做这个.这个没什么想法,只能想到使用if语句嵌套,或者使用哈希表.但哈希表我还不熟练啊.先拿if嵌套 ...
- JavaScript onload
The onload event occurs immediately after a page or an image is loaded.onload事件当一个页面或是一张图片加载完成时被触发. ...
- OkHttpUtil
package jp.co.gunmabank.util import android.os.Handlerimport android.os.Looperimport com.google.gson ...
- 周赛Problem 1108: 蛋糕(二分)
1108: 蛋糕 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 17 Solved: 4 Description 杨神打代码打得有点疲倦,于是他想要 ...
- 【CCF】通信网络 简单搜索
去重!不然有环就直接挂掉了...0分 #include<iostream> #include<cstdio> #include<string> #include&l ...
- poj 2318 向量的叉积二分查找
TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9350 Accepted: 4451 Description ...
- C Looooops(poj 2115)
大致题意: 对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束. 若在有限次内结束,则输出循环次数. 否则输出死循环. 解题思路: 题意不难理解,只是利用 ...
- The Closest M Points BZOJ 3053
The Closest M Points [问题描述] 软工学院的课程很讨厌!ZLC同志遇到了一个头疼的问题:在K维空间里面有许多的点,对于某些给定的点,ZLC需要找到和它最近的m个点. (这里的距离 ...