计算机组成原理之处理器(单周期)

news2024/11/18 12:29:10

引言

处理器的实现方式决定了时钟周期长度和CPI。实现方式有单周期与流水线,本篇谈谈单周期处理器。

目前CPU的频率一般是3GHZ/4GHZ,但是频率是有极限值的,受cycletime影响

基本的RISC-V实现

  • 存储指令:ld,sd
  • 算术逻辑指令 :add ,sub,and,or
  • 条件分支指令:beq

实现每条指令的前两个步骤是一样的:

  • 程序计数器发送到指令所在的存储单元,并从其中取出指令
  • 根据指令的某些字段选择要读的一个或两个寄存器

所有类型的指令在读取后都用ALU(存储器访问,算术逻辑,条件分支比较)

单周期CPU概览

file


流程介绍

所有的指令都用程序计数器获得指令在指令存储器中的地址

  • 取到指令后,指令的对应字段知道要使用的寄存器操作数。
  • 寄存器操作数一被取出,即可用于计算存储器地址(load指令或store指令)、计算算术运算结果(定点算术逻辑指令)或进行相等检验(分支指令)。
  • 如果是算术指令,ALU的结果要写回寄存器。
  • 如果是存取操作,ALU的结果黄作为存储器地址以及存储来自寄存器的值,或将存储器数据加载到寄存器中。
  • 对于分支指令ALU的输出来觉得下一条指令的地址,这个地址可能来自PC和分支偏量相加的加法器,也可能来自PC+4的加法器。

时钟同步方法

一般用边沿触发来到达时钟同步的目的。这也决定了要在一个时钟周期内读出寄存器的值。

建立数据通路

数据通路单元

数据通路单元是一个用来操作或保存处理器中数据的单元。在RISC-V实现中,数据通路单元包括指令存储器、数据存储器、ALU和加法器。

如果一个单元内部有存储功能,它就包含状态,称为状态单元

file

程序计数器

包含当前程序正在执行指令地址的寄存器,是一个64位的寄存器,在每个周期结束后被写入。

存储单元

寄存器堆

处理器的32个通用寄存器位于寄存器堆(register-file)的结构中

file


数据存储单元

读写信号是相互独立的,但仅有一个可以在任意给定的时钟上有效

为实现beq指令,需要将PC值与符号扩展后的指令偏移量相加得到分支地址

file


分支指令

  • 指令系统结构规定了计算分支目标地址的基址分支是所在地址
  • 将偏移量左移以为以表示板子为单位的偏移量,这样的偏移有效范围扩大两位

file


ALU控制

”load/store = add“ “branch = sub" "R type ~ depend on opcode"

file


file


控制信号

file

file


数据通路操作

R型

  • 取出指令,PC自增
  • 从寄存器堆读两个寄存器,对从寄存器堆读出的数据进行操作
  • 根据部分操作码确定ALU的功能,对寄存器堆读出的数据进行操作
  • 将ALU的结果写入寄存器堆中的目标寄存器

file

load指令

步骤:

  • 从指令存储器中取出指令,PC自增
  • 从寄存器堆中读出对应一个寄存器的值
  • ALU将从寄存器堆中读出的值和符号扩展后的12位(偏移量)相加
  • 将ALU的结果用作数据存储器的地址
  • 将从寄存器读出的数据写入寄存器堆

file

beq指令

  • 从指令存储器中取出指令,PC自增
  • 从寄存器堆中读出两个寄存器x1和x2
  • ALU将寄存器堆读出的两数相减。PC与左移一位、符号扩展的指令中的12位相加,结果是分支目标地址
  • ALU的零数超出决定将哪个加法器的结果写入PC

file

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

【图文详解】Android Studio(新版本) 配置OpenCV库,解决出现的各种问题

前言 写这篇文章的目的就是记录自己在配置OpenCV库时遇到的问题。在网上查找相关资料时,发现很多Android Studio都是老版本,并且出现的问题都不能被解决。自己在配置过程中出现的问题都进行记录下来并一一解决。 新建项目 点击 New Project 选择界面 …

什么工具可以制作照片书并分享到微信?

大家平时在微信朋友圈,有没有看到别人发的翻页效果的照片书?这种照片书,通过链接或者二维码就能够在线观看,仿真翻页效果,就跟真实的看纸质相册一样,阅读体验感真的是超级nice! 那你们知道这种…

node插件MongoDB(五)—— 库mongoose 的模块化(五)

文章目录 一、使用mongoose 模块化的原因二、准备工作2. 启动mongo.exe 和mongod.exe 两个程序连接数据库 三、基本模块的拆分1、基本逻辑2、代码3、代码图示说明 四、在index.js 中进一步的拆分1.拆分原因2.新建model文件夹存储文档的结构对象3.代码4.代码实际演示和注意点 一…

JAVA基础语法编程详解

1 类型转换 描述: 设计一个方法,将一个小于2147483647的double类型变量以截断取整方式转化为int类型输入描述: 随机double类型变量输出描述: 转化后的int类型变量示例 输入:123.45 输出: 123 题解思路&…

手摸手入门Springboot+Grafana10.2接收JSON

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本…

22款奔驰S400L升级原厂360全景影像 打破死角

本次星骏汇小许介绍的是22款奔驰S400L升级原厂360全景影像,上帝视角看清车辆周围环境,更轻松驾驶 升级360全景影像系统共有前后左右4个摄像头,分别在车头,车尾,以及两边反光镜下各一个,分别用来采集车头&a…

「题解」环形链表的约瑟夫问题

文章目录 🍉题目🍉解析🍌创建环形链表🍌释放指定节点🍌其他思路 🍉写在最后 🍉题目 🍉解析 题目的意思就是从环形链表的第一个节点开始数,数到第 m 的时候释放对应的节点…

Arduino、arm、树莓派、单片机四者有什么不同

文章目录 ArduinoARM树莓派单片机 初学单片机的同学,可能会对Arduino、ARM、树莓派以及单片机这些概念比较模糊,实际上,这四个是不同的概念和技术。 Arduino Arduino(阿尔杜伊诺)是一种开源电子原型平台,它…

Mac安装配置Tomcat,以及使用(详解)

目录 一、Tomcat下载: 1、左栏选择Tomcat版本 2、点击下载即可,任选其一 ​编辑3、下载好的文件夹放到用户名下即可(之前已经下载过,这里以Tomcat 8.5.88为演示),这里提供8.5.88的安装包: 二…

Visual Studio 2019下编译OpenCV 4.7 与OpenCV 4.7 contrib

一、环境 使用的环境是Win10,Visual Studio 2019,Cmake3.28,cdua 11.7,cudnn 8.5,如果只是在CPU环境下使用,则不用安装CUDA。要使用GPU处理,安装好CUDA之后,要测试安装的CUDA是否能用。不能正常使用的话,添加一下系统…

LoadRunner使用动态链接库技术

什么是动态库? 动态库一般又叫动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行…

大数据BigDecimal工具类

我们在开发中经常要对数据进行运算,获取对应正确的数值,而double和float这两个本质都是小数点,没办法使用二进制精确的表示,所以他们是不准确的,这个时候就应该使用大数据BigDecimal进行运算了,它可以精确的…

Selenium自动化测试细节讲解

与以前瀑布式开发模式不同,现在软件测试人员具有使用自动化工具执行测试用例套件的优势,而以前,测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试,而是最大程度地减少手动运行的测试。自动化…

Versal 自适应 SoC SelectMAP 启动检查表

Versal 自适应 SoC SelectMAP 启动检查表 本文档提供了有关 SelectMAP 启动设置的技巧和指南。在提交个案服务请求之前,应认真查看以下检查表。SelectMAP 启动模式的常规检查表: 是否已查看 SelectMAP 文档,了解连接和电源轨的用法&#…

Spring事务一网打尽

Spring事务一网打尽 什么是事务首先说一个坑Spring 中的事务两种用法三大基础设施编程性事务TransactionManager 实现编程性事务TransactionTemplate 实现编程性事务 声明式事务XML配置声明式事务注解配置声明式事务注解XML混合配置声明式事务 什么是事务 这里要额外补充一点&a…

单片机第三季-第五课:GPIO控制LED

目录 1,GPIO数据手册 1.1,端口配置寄存器 ​1.2,端口输入数据寄存器和端口输出数据寄存器 ​1.3,端口位设置/清除寄存器 1.4,端口位清除寄存器 2,原理图分析和MDK工程 3,写代码通过GP…

快速入门:教你如何使用vue-element-admin 集成框架开发项目(保姆式教学)

设置完中文界面,打开是这样的 端口号更改 嘿嘿,要把项目改成自己的,是不是要更改标题啊 题目更改 src/utils/get-page-title.js src/settings.js 如何添加菜单页面 添加菜单页面(父菜单/子菜单) 效果图 添加自己的页…

Unity--视觉组件(Raw Image,Mask)||Unity--视觉组件(Text,Image)

1.Raw Image 2.mask “”Raw Image:“” Texture:(纹理) 表示要显示的图像的纹理; Color:(颜色) 应用于图像的颜色; Material:(材质&#xff09…

FreeRTOS源码阅读笔记3--queue.c

消息队列可以应用于发送不定长消息的场合,包括任务与任务间的消息交换,队列是 FreeRTOS 主要的任务间通讯方式,可以在任务与任务间、中断和任务间传送信息,发送到 队列的消息是通过拷贝方式实现的,这意味着队列存储…

前端开发项目中使用字体库

开发中有些项目要求使用固定的字体,这就需要项目中使用字体库。 首先需要下载字体库 将下载的字体文件放进项目中 在项目代码样式文件中定义字体 font-face {font-family: "Tobias-SemiBold";src: url("./assets/font/Tobias-SemiBold.ttf"…