【【萌新的RISC-V学习之再看计算机组成与设计大收获总六】】

news2024/10/5 17:17:58

萌新的RISC-V学习之再看计算机组成与设计大收获总六

我们在进行设计的时候首先要明白一点 就是 确定我们的设计所需要的
指令的大小和 地址的大小 指令集是32位的 而 地址则一般更多的是64位 数据也是64位
在这里插入图片描述
PC与指令寄存器之间的关系
PC是用来保存当前指令的地址。假设地址是000000
然后所有的指令都是存在了指令存储器中 那就是为什么叫instruction memory PC
其实指令早就写好了 存在了指令寄存器中 PC只是一个地址的媒介告诉我们从指令寄存器的哪里开始取出这条指令 为什么下一条指令是PC+4 也就是说明因为 我们的指令是32位 4字节 加4 就是正好换成下一个指令
PC+1就是1字节 PC+2 就是2字节
在这里插入图片描述
寄存器堆由32个通用寄存器构成
我们对寄存器进行操作 指令的实现有多种多样的
R型指令 读取 一个数据需要一个指定的”寄存器号“
还需要一个从寄存器堆中读出的数据
写入 那就需要 寄存器堆能够接收一个指定的”寄存器号“
还需要一个准备写入的数据
其实寄存器堆也是一样的 ,数据存在了寄存器堆中,寄存器根据寄存器号 选择相应的数据
所以对此我们总共需要3个寄存器编号和一个数据(写入的数据) 还有2个输出数据
寄存器编号是5位的 ,还有一个写入数据是64位
数据输入和数据输出总线都是64位宽的
在这里插入图片描述
注: 寄存器在进行写操作的时候 ,必须明确使得写使能信号有效。

对于此处的ALU模块 是用来 读入2个64位宽的输入,产生一个64的输出 还有一个1位的输出指示其结果是否为0

上面是进行简单的R型指令 可以完成
下面所用的指令 ld sd
在这里插入图片描述
我们来看这句话的意思就是说我们在完成存取这两样指令的时候 ,他说存储指令 其实意思是存储数据的指令 ,载入指令 其实是载入数据的指令
我们来看这句话的意思他说 这类指令通过将基址寄存器x2 与指令中包含的12位有符号偏移量相加,得到存储器地址 ,对于存储指令 ,就是存储数据指令,就是从寄存器x1中读取出想要存储的指令。
这句话的意思就是对于 ld x1 (offset)x2 我们依据ld 的opcode hex 代码 先从ld读出整个指令所需要的x1 x2两个寄存器编号 我们从x2 这个编号内读出他所代表的数据 那是64位 然后将ld 的op码中含有的12位数扩展64位的数据 共同组成 datamemory 的64位地址 然后在这个地址下读出 数据 并写会编号为x1的寄存器中
在这里插入图片描述
data memory 的读写控制信号都是独立的,但是仅有一个会在上升或下降沿有效。
然后我们来分析 这个立即数扩展单元 我们会发现这个模块是32位输入 64位输出的 实际上 其实只用到了这32位指令中的12位字段符号

上面我们讲述完了R型指令 和 ld 等需要用到data memory 和 一个扩展
接下来 还有一种 beq 类型
对于分支指令检查是否成立,我们可以这么来看
在这里插入图片描述
我们使用单独的加法器 将PC地址(64位) 和符号扩展之后的左移一位的12位指令相加,得到分支目标地址 。

上面是整个电路的基本逻辑
其实我们发现我们还有一些control 和 ALU单元的没做完
其实对于ALU这种中控 我们能进行的操作只有 加减乘除

我们现在想要做的是将ALUop细化出来 做以区分
其实因为我做的只有8条指令 只要在register里面筛选出来 分别对应了什么 op 的值 丢给parameter 就行了
在这里插入图片描述
我们需要进行的操作分为四类 算术 载入 存储 条件分支
1.R型算术指令 add sub and or
二进制op操作数 实现的操作码是011 0011
在这里插入图片描述
2. I型载入数据指令 ld 000 0011
在这里插入图片描述
3.S型存储指令 sd类型 010 0011
在这里插入图片描述
3. SB类型的条件分支语句 110 0011
在这里插入图片描述
在这里插入图片描述
这里表明 其实除了PCSrc 不能直接表示 其他都可以由控制单元经过opcode 和func字段控制
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Huggingface遇到 Couldn‘t reach xxx on the Hub (ConnectionError)解决方法

文章目录 遇到的问题解决方法参考 遇到的问题 使用服务器下载Huggingface的数据集,显示ConnectionError: Couldn’t reach ‘Salesforce/dialogstudio’ on the Hub (ConnectionError) 具体代码如下: dataset load_dataset("Salesforce/dialogs…

Scanner类用法(学习笔记)

Scanner类用法(学习笔记,后续会补充) 1.next()用法 package com.yushifu.scanner; import java.util.Scanner;//util java工具包 //Scanner类(获取用户的输入) Scanner s new Scanner&#…

Otter改造 增加springboot模块和HTTP调用功能

环境搭建 & 打包 环境搭建: 进入 $otter_home/lib 目录执行:bash install.sh 打包: 进入$otter_home目录执行:mvn clean install -Dmaven.test.skip -Denvrelease发布包位置:$otter_home/target 项目背景 阿里…

【量化交易】151个量化交易策略解析

我又来推书了~ 今天分享的这本书,量化交易领域的同学们肯定喜欢(doge),它就是Zura Kakushadze大佬(“Alpha101”作者)撰写的《151 Trading Strategies》。(文末领) 《151 Trading …

创建对象内存分析

package com.mypackage.oop.demo03;public class Pet {String name;int age;//无参构造public void shout(){System.out.println("叫了一声");} }package com.mypackage.oop.demo03;public class Application03 {public static void main(String[] args) {Pet dog n…

vue中el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案 使用强制提前加载dialog方法

问题描述 在没有进行任何操作的时候,使用 this.$refs.xxxx 无法获取el-dialog中的内部元素,这个问题会导致很多bug,其中目前网络上也有许多关于这个问题的解决方案,但是大多数是使用el-dialog中的open在dialog打开的时候使用thi…

typescript类型详解

typescript类型概述 typescript是JavaScript的超集,ts提供了js所有的功能.并且额外增加了:类型系统 所有的js代码都是ts代码js有类型(比如,number/string等),但是js不会检查变量的类型是否发生变化,而ts会检查.ts类型系统的主要优势为:可以显示标记出代码中的意外行为,从而降…

spi协议精讲

spi 总线是一种 高速的、全双工,同步串行总线,有四根线MISO MOSI SCLK CS 2.通信过程 3.极性和相位 因为没有像iic一样规定上升沿还是下降沿发送数据,spi的通信取决于极性和相位,因此有四种工作模式 CPHA0 表示SCK 第一个边沿时&…

Jetpack Compose 介绍和快速上手

Compose版本发展 19年,Compose在Google IO大会横空出世,大家都议论纷纷,为其前途堪忧。 21年7月Compose 1.0的正式发布,却让大家看到了Google在推广Compose上的坚决,这也注定Compose会成为UI开发的新风向。 23年1月…

基于springboot+vue的便利店信息管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

IDEA最新激 20活23码

人狠话不多 大家好,最近Intelli Idea官方的校验规则进行了更新,之前已经成功激20活23的Idea可能突然无法使用了。 特地从网上整理了最新、最稳定的激20活23码分享给大家,希望可以帮助那些苦苦为寻找Idea激20活23码而劳累的朋友们。 本激23…

所有字母异位词

class Solution { public:vector<int> findAnagrams(string s, string p) {std::vector<int> idxs;// 先获取p的hash串std::string dstr getHash(p);for (int i 0; i<s.length(); i) {// 使用滑动窗口&#xff0c;每次截取p的长度串并hashstd::string sub_str…

【Shiro】基本使用

1、环境准备 1、Shiro不依赖容器&#xff0c;直接创建maven工程即可 2、添加依赖 <dependencies><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.9.0</version></depen…

华为云云耀云服务器L实例评测|部署宝塔及使用宝塔管理服务器

在昨天的文章中,我们了解了一些关系实例的概念性的东西,并且购买了服务器,然后登录上后进行了简单的操作,今天我将会按照官网给出的教程,进行部署宝塔及使用宝塔对服务器进行管理的实践,那么 就让我们开始吧! 第一步:购买华为云云耀云服务器L实例 这个可以参考我的上一篇文章,…

关于医疗器械的检测认证

医疗器械注册审评流程&#xff1f; 【每日分享23.7.27】医疗器械产品注册申报流程&#xff08;超详细版&#xff09;之注册申报受理及审评审批 - 知乎 (zhihu.com) 医疗器械注册审评流程&#xff08;附图&#xff09;_申报_咨询_机构 (sohu.com) 型式试验&#xff1f; 型式试验…

Python 图形化界面基础篇:获取文本框中的用户输入

Python 图形化界面基础篇&#xff1a;获取文本框中的用户输入 引言 Tkinter 库简介步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a;创建文本框步骤4&#xff1a;获取文本框中的用户输入步骤5&#xff1a;启动 Tkinter 主事件循环 完整…

少儿编程 2023年5月中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)

2023年5月scratch编程等级考试四级真题 选择题(共10题,每题2分,共50分) 1、下列积木运行后的结果是 (说明:逗号后面无空格) A、我 B、爱 C、中 D、国 答案:B 考点分析:考查字符串相关积木的使用,逗号也是一个字符,所以两个连起来后第8个字符就是爱字,答案…

webpack:css-loader和style-loader关系

测试 当我们webpack 的 rules 啥都没配置的时候 const path require(path);module.exports {entry: ./src/index.js,output: {filename: index.js,path: path.resolve(__dirname, dist)},module: {rules: []} };我们在 js 中导入了 css&#xff0c;发现报错&#xff0c;因为…

Linux编译过程与交叉编译

一.GCC由来 GCC&#xff08;GNU编译器套件&#xff09;是一个自由开源的编程工具集&#xff0c;用于编译和链接C、C和其他编程语言的程序。它由理查德斯托曼&#xff08;Richard Stallman&#xff09;和其他自由软件基金会&#xff08;Free Software Foundation&#xff09;的…

leetcode229. 多数元素 II(java)

多数元素 II 题目描述Hash表记录 题目描述 难度 - 中等 leetcode229. 多数元素 II 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;[3] 示例 2&#xff1a; 输入&#…