计算机寄存器是如何实现的
冯·诺依曼体系
冯·诺依曼体系为现代计算机的设计和发展奠定了基础,它的核心思想和原则在当今计算机体系结构中仍然被广泛采用和应用。所以只要谈论计算机的组成就离不开冯诺依曼体系
作为核心组成部分的CPU除了由运算器和控制器组成之外,还有一些寄存器
寄存器
CPU中的寄存器分为:
通用寄存器:通用寄存器是CPU中最常用的寄存器,用于存储临时数据和计算结果等信息。通用寄存器通常由多个DFF(数据触发器)或锁存器(latch)组成,可以进行读写和算术逻辑运算等操作。本文中我们主要介绍DFF组成
特殊寄存器:特殊寄存器是CPU中用于特定目的的寄存器,例如程序计数器(PC)、堆栈指针(SP)和状态寄存器(SR)等。这些寄存器通常由硬件电路直接控制,用于存储程序执行的状态和控制信息等。
控制寄存器:控制寄存器是CPU中用于控制系统运行的寄存器,例如中断控制寄存器(ICR)和时钟控制寄存器(CCR)等。这些寄存器通常由操作系统或应用程序进行编程和控制,用于控制系统的运行和响应外部事件等,底层还是硬件电路实现的。
另外的话,我们需要知道 SRAM和DRAM也可以用于构建寄存器。比如
-
缓存寄存器:缓存寄存器通常由SRAM组成,用于存储CPU访问频率较高的数据。缓存寄存器可以提高CPU的访问速度,减少CPU访问主存的次数,从而提高系统的性能。
-
显存寄存器:显存寄存器通常由DRAM组成,用于存储图形处理器(GPU)处理的图像数据。显存寄存器可以提供高带宽的数据传输,从而支持高分辨率的图像显示和复杂的图形处理。
-
内存控制寄存器:内存控制寄存器通常由SRAM或DRAM组成,用于存储内存控制器的配置信息和状态信息。内存控制寄存器可以控制内存的访问方式和时序,从而提高内存的访问效率和稳定性。
-
状态寄存器:状态寄存器通常由SRAM或DRAM组成,用于存储CPU运行过程中的状态信息,如进位标志位、零标志位、溢出标志位等。状态寄存器可以用于条件判断和控制流程,从而实现复杂的计算和控制逻辑。
这些基于 SRAM和DRAM组成的寄存器跟我们之前提到的相似,感兴趣的同学可以自行查阅。本篇我们只关注哪些非RAM组成的寄存器,即可以通过DFF实现的寄存器
寄存器作用
-
存储数据:寄存器可以暂时存储CPU需要处理的数据,包括指令中的操作数和程序中的变量等。由于寄存器的读写速度非常快,因此可以大大提高CPU的运行效率。
-
存储指令:CPU从内存中读取指令后,需要将指令存储到寄存器中进行解码和执行。由于寄存器的读写速度非常快,因此可以大大提高CPU的指令解码和执行速度。
-
存储地址:寄存器可以存储内存地址,用于访问内存中的数据。CPU从寄存器中读取内存地址后,可以快速地访问内存中的数据。
-
存储特殊用途:CPU中还有一些特殊用途的寄存器,如指令指针寄存器、栈指针寄存器、状态寄存器等。这些寄存器用于存储特殊用途的数据,如指向下一条指令的地址、指向栈顶的地址、存储CPU的状态信息等。
所以寄存器的作用基本就是存储
DFF实现寄存器
由这篇文章我们知道,因为时钟周期的存在,所以我们只考虑时钟结束时的输出,中间的结果不考虑,因为没有意义。
因此我们可以通过基本门And Or Not 来组成下图 1-Bit 寄存器
这个寄存器作用是:当load=1时,芯片开始加载 in输入的数据并保持不变,一直到下次load=1时才改变,如:
而1-Bit register在现实生活中的取值逻辑
依此类推
而1-Bit regitster最关键的逻辑是
out(t + 1) = in(t)
这个是怎么实现的呢?
DFF
案是DFF芯片,全称为Data Flip Flop,它是一种数字电路元件,用于存储和传输二进制数据。它可以将输入数据存储在内部存储器中,并在时钟信号的作用下将其输出。DFF芯片通常用于计算机内存、寄存器、时序逻辑电路等领域。在数字电路中,DFF是最基本的存储器元件之一,它可以实现各种逻辑功能,如计数器、移位寄存器、状态机等。
多说一句,归根到底DFF芯片还是想之前讲CPU的实现那样,是由最基础的门:或门、与门、非门构成的
DFF伴随着时钟周期它的取值逻辑为:
依此类推
了解完了DFF后,1-Bit register可以是这样组成的
其中Mux 全称是Multiplexer,中文名为多路复用器。Mux可以将多个输入信号中的一个选择输出,这个选择是由Mux的控制信号决定的。它也是有And Or Not 门组成的。这样就可以有 load 来控制 Mux。从而决定本次输出是选择out(t-1)还是 in 的。
这是一个1bit寄存器的最简单的实现。但CPU中的寄存器不可能是1bit,而是16/32甚至更多,具体怎么做呢?以16bit为例
16位寄存器可以通过使用16个D触发器(DFF)来制作。每个D触发器都可以存储一个位(0或1),并且可以在时钟上升沿时将其输出更新为其输入。因此,将16个D触发器连接在一起,并将它们的时钟信号连接在一起,那么在时钟信号上升沿到来时,所有DFF都会同时将其输入端的值存储到其输出端,从而实现了16位寄存器的功能。
形象一点的话:
相关文章:

计算机寄存器是如何实现的
冯诺依曼体系 冯诺依曼体系为现代计算机的设计和发展奠定了基础,它的核心思想和原则在当今计算机体系结构中仍然被广泛采用和应用。所以只要谈论计算机的组成就离不开冯诺依曼体系 作为核心组成部分的CPU除了由运算器和控制器组成之外,还有一些寄存器…...
两数之和 三数之和 哈希方法
两数之和 package com; import java.util.*; public class Test5 { //两数之和 public static void main(String[] args) { int[] arr {1,2,3,4,5,6,7,94,42,35}; int target99; Arrays.sort(arr);//快速排序 for(int i0;i<arr.length;i) { int wtarget-arr[i]; int indexA…...

Object Detection in 20 Years: A Survey(2019.5)
文章目录 Abstract1. Introduction1.1. Difference from other related reviews1.2. Difficulties and Challenges in Object Detection 2. OBJECT DETECTION IN 20 YEARS2.1. 目标检测路线图2.1.1. 里程碑:传统探测器(粗略了解)2.1.2. 里程碑:基于CNN的…...
Springboot 设置时区与日期格式
1.配置文件修改(范围修改) spring:jackson:# 东8 北京时区time-zone: GMT8# 日期格式date-format: yyyy-MM-dd HH:mm:ss 2.Java代码修改(范围修改) 2.1 时区 import org.springframework.context.annotation.Bean; import org.…...

从零开始学Go web——第一天
文章目录 从零开始学Go web——第一天一、Go与web应用简介1.1 Go的可扩展性1.2 Go的模块化1.3 Go的可维护1.4 Go的高性能 二、web应用2.1 工作原理2.2 各个组成部分2.2.1 处理器2.2.2 模板引擎 三、HTTP简介四、HTTP请求4.1 请求的文本数据4.2 请求方法4.2.1 请求方法类型4.2.2…...

6.Eclipse里下载Subclipse插件
方法一:从Eclipse Marketplace里面下载 具体操作:打开Eclipse --> Help --> Eclipse Marketplace --> 在Find中输入subclipse搜索 --> 找到subclipse点击install 方法二:从Install New Software里下载 具体操作:打开…...

家用洗地机哪个品牌最好最实用?热门洗地机测评
随着社会的不断进步,我们逐渐意识到日常生活中的许多任务需要消耗大量的时间和体力。一个典型的例子是卫生清洁工作,尤其是在大面积地区,如大型建筑物、商场或工厂。这些任务不仅繁琐,还可能影响生活质量和工作效率。为了应对这一…...

【C语言:自定义类型(结构体、位段、共用体、枚举)】
文章目录 1.结构体1.1什么是结构体1.2结构体类型声明1.3结构体变量的定义和初始化1.4结构体的访问 2.结构体对齐2.1如何对齐2.2为什么存在内存对齐? 3.结构体实现位段3.1什么是位段3.2位段的内存分配3.3位段的跨平台问题3.4位段的应用3.5位段使用注意事项 4.联合体4…...
【1day】华天软件 OAworkFlowService接口SQL注入漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现...

Oracle(2-11)RMAN Backups
文章目录 一、基础知识1、RMAN Backup Concepts RMAN备份概念2、RMAN Backup Modes RMAN备份的类型3、Backup File Types 备份文件类型4、RMAN Backup Destinations RMAN备份目标5、Backup Constraints 备份约束6、Recovery Manager Backups 恢复管理器备份7、Characteristics …...
使用docker搭建『Gitea』私有仓库
文章目录 一、安装 docker 环境1、移除以前的 docker 相关包2、配置yum源3、安装 docker4、启动 docker 二、安装 docker compose1、安装docker compose2、赋予下载的docker-compose执行权限 三、安装 gitea1. 创建工作目录2. 创建 Docker Compose 文件3. 启动 Gitea4. 访问 Gi…...

CopyOnWriteArrayList怎么用
什么是CopyOnWriteArrayListCopyOnWriteArrayList常用方法CopyOnWriteArrayList源码详解CopyOnWriteArrayList使用注意点CopyOnWriteArrayList存在的性能问题CopyOnWriteArrayList 使用实例基本应用实例并发应用实例 拓展写时复制 什么是CopyOnWriteArrayList CopyOnWriteArra…...

旋转设备状态监测与预测性维护:提高设备可靠性的关键
在工业领域的各个行业中,旋转设备都扮演着重要的角色。为了确保设备的可靠运行和预防潜在的故障,旋转设备状态监测及预测性维护变得至关重要。本文将介绍一些常见的旋转设备状态监测方法,并探讨如何利用这些方法来实施预测性维护,…...

类和对象——(7)this指针
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 人生就像骑单车,想保持平衡…...
回溯算法题型分类
题型一:排列、组合、子集相关问题 提示:这部分练习可以帮助我们熟悉「回溯算法」的一些概念和通用的解题思路。解题的步骤是:先画图,再编码。去思考可以剪枝的条件, 为什么有的时候用 used 数组,有的时候设…...
ApplicationRunner 类
优质博文:IT-BLOG-CN 在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执…...

QT中的 容器(container)-大全
一、介绍 Qt库提供了一套通用的基于模板的容器类,可以用这些类存储指定类型的项。比如,你需要一个大小可变的QString的数组,则使用QVector<QString>。 这些容器类比STL(C标准模板库)容器设计得更轻量、更安全并…...
Docker配置镜像加速器
Ubuntu 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo t…...

飞致云1panel + 雷池WAF
可能有许多人都有这个需求:为自己的个人站点套上WAF,增加安全性,本文将介绍如何将1panel面板深度结合长亭雷池防火墙,实现为个人站点套上WAF并且自动续签ssl证书。 前提条件: 服务器IP已绑定域名 完整的1panel环境 …...

策略梯度简明教程
策略梯度方法 (PG:Policy Gradient) 是强化学习 (RL:Reinforcement Learning) 中常用的算法。 1、从库里的本能开始 PG的原理很简单:我们观察,然后行动。人类根据观察采取行动。 引用斯蒂芬库里的一句话: 你必须依靠…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...

MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
第22节 Node.js JXcore 打包
Node.js是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。 JXcore是一个支持多线程的 Node.js 发行版本,基本不需要对你现有的代码做任何改动就可以直接线程安全地以多线程运行。 本文主要介绍JXcore的打包功能。 JXcore 安装 下载JXcore安装包&a…...

【Linux】使用1Panel 面板让服务器定时自动执行任务
服务器就是一台24小时开机的主机,相比自己家中不定时开关机的主机更适合完成定时任务,例如下载资源、备份上传,或者登录某个网站执行一些操作,只需要编写 脚本,然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...