https://zhuanlan.zhihu.com/p/865277160
简略
一个寄存器(逻辑上的 “寄存器实例”),通常对应硬件上的一组bit存储单元,这组 bit 的个数为8/16/32/64bit 等,再加上专属的控制逻辑。——存储单元负责 “存”,控制逻辑负责 “管”(如读写触发、清零、移位等),例如下面的寄存器芯片:
包含寄存器的SN74HC597 芯片
16 脚的功能分类 | 管脚数量 | 与 “16bit 寄存器” 的关系 |
数据相关管脚 | 8(D0~D7)+ 2(SER、QH')= 10 脚 | 对应内部 2 个 8bit 寄存器的数据接口 |
控制信号管脚 | 4 脚(SH/LD、CP、STCP、MR) | 控制寄存器的读写 / 移位逻辑 |
电源 / 地 | 2 脚(VCC、GND) | 芯片供电 |
增加说明:
- 明确寄存器是硬件(芯片 / CPU/GPU/ 外设)的内部组件(bit 存储单元的组合),而非独立模块;
- 用 “绑定的专属控制逻辑”:强调控制逻辑与存储单元是 “一一对应、不可拆分” 的(比如某 8 位寄存器的控制逻辑,只负责该寄存器的读写,不控制其他寄存器),更贴合实际硬件设计。
例子:
- CPU 的 32 位通用寄存器:
- 硬件内部的 32 个 bit 存储单元(触发器)+ 专属控制逻辑(接收 CPU 指令,控制数据读写、运算);
- 是 CPU 内核的内部组件,不是独立硬件模块。
- SN74HC597 的 8 位存储寄存器:
- 芯片内部的 8 个 bit 存储单元(触发器)+ 专属控制逻辑(响应 SH/LD、STCP 信号,控制并行加载、数据锁存);
- 是芯片的内部组件,不是独立硬件模块。
- IB 卡的 DBREC 寄存器:
- IB 硬件内部的 32 个 bit 存储单元(触发器)+ 专属控制逻辑(响应 PCIe 总线的读写信号,同步硬件状态);
- 是 IB 卡的内部组件,不是独立硬件模块。
更新说明
寄存器是构建在CPU中的计算机存储区域。
由Stan Hutter在Unsplash上拍摄的照片
寄存器由多个触发器(能存储 1 比特信息的电子电路:0 or 1)。通过组合多个触发器,寄存器可以存储更大的二进制值,如字节或字。
寄存器还包含控制逻辑电路,这使得它能够协调CPU内部数据和指令的流动。这可能包括解码控制信号、执行数据操作如数据加载、存储或算术运算,以及使用多路复用器将数据路由到寄存器内的特定位置。(如MOV、ADD、RST、CLK、LDR、AND/OR/NOT、MUX)
总结:寄存器本质上就是一个独立的硬件模块含多个bit(位)存储单元的组合,通常为8位、16位、32位、64位等宽度。用于暂存数据、状态或控制信号。 ——存储单元负责 “存”,控制逻辑负责 “管”,二者结合才能让寄存器实现 “可控的暂存功能”
CPU寄存器的大小
- 8位寄存器:这些寄存器可以存储8位数据(1字节)。它们通常用于基本的算术运算和数据操作。
- 16位寄存器:这些寄存器可以存储16位数据(2字节)。它们通常出现在旧的处理器中,或在需要16位操作的特定架构中。
- 32位寄存器:这些寄存器可以存储32位数据(4字节)。它们在许多处理器中广泛使用,并且能够处理更大的数据大小和更复杂的计算。
- 64位寄存器:这些寄存器可以存储64位数据(8字节)。它们在现代处理器中普遍存在,提供了增加的计算能力和内存寻址能力。
现代PC “通用寄存器的宽度”+“地址总线宽度”通常有32位或64位,并且被称为我们经常听到的32位处理器和64位处理器。
在一些特殊的处理器或架构中,您也可能发现更大的寄存器大小,如128位、256位甚至更大的寄存器。这些更大的寄存器通常用于特定目的,如向量处理或密码学操作,其中涉及并行性和大数据集。
CPU寄存器的类型
CPU中常见的寄存器类型可能包括:
- 程序计数器(PC):程序计数器跟踪下一个要获取和执行的指令的内存地址。
- 指令寄存器(IR):指令寄存器保存当前获取的正在执行的指令。
- 累加器(ACC):累加器是一个通用寄存器,用于算术和逻辑操作。它在计算期间存储中间结果。
- 通用寄存器(R0, R1, R2…):这些寄存器用于在计算和数据操作期间存储数据。它们可以被程序员访问和用于各种目的。
- 地址寄存器(AR):地址寄存器存储用于数据访问或在不同内存位置之间传输数据的内存地址。
- 堆栈指针(SP):堆栈指针指向堆栈的顶部,这是在函数调用和其他操作期间用于临时存储的内存区域。
- 数据寄存器(DR):这些寄存器存储从内存中获取的数据或从输入/输出操作中获得的数据。
- 状态寄存器/标志寄存器(SR):状态寄存器或标志寄存器包含指示操作结果的单个比特,如进位、溢出、零结果等。这些标志有助于根据先前操作的结果做出决策和控制程序流程。
- 控制寄存器(CR):控制寄存器管理与CPU操作相关的各种控制设置和参数,如中断处理、内存管理和系统配置。
所有寄存器在硬件底层都基于 “bit 存储单元组合 + 控制逻辑” 的架构,差异主要体现在 “存储内容的约定” 和 “控制逻辑的定制化”
寄存器如何与其他CPU组件协同工作?
CPU由多个组件组成,主要组件包括控制单元(CU)、算术逻辑单元(ALU)、寄存器、时钟、缓存和总线。
包含CU(控制单元)、ALU(算术逻辑单元)、寄存器的CPU示意图,以及它与嵌入式系统内其他组件的关系。
ALU 组件负责算术和逻辑操作。它可以执行加法、减法、AND、OR等操作。ALU从寄存器接收输入,执行所需的操作,并将结果存储回寄存器。
控制单元(CU)指导和协调CPU内部各个组件的操作。它解释指令并生成控制信号以管理寄存器、ALU、内存和输入/输出设备之间的数据流动。
寄存器、ALU和CU之间的交互可以总结为以下步骤:
- CU从内存中获取指令并将其放入指令寄存器。
- CU解码指令以确定要执行的操作并识别涉及的寄存器。
- CU发出控制信号以选择适当的寄存器并将数据路由到ALU。
- ALU对选定寄存器中的数据执行算术或逻辑操作。
- 操作的结果根据CU的控制信号存储回寄存器。
寄存器的目的
寄存器被计算机用于多种目的,包括在执行之前存储程序指令或保存计算的中间结果,以便在需要时可以检索它们的值。它们还通过允许处理器不必每次都从主存储器中检索它们而访问常用值来加速过程。
嵌入式系统中的寄存器:
CPU或其他处理器被广泛用作嵌入式系统中的“大脑”或主要处理组件。嵌入式系统是像汽车或家用电器这样的大型设备中的自包含计算机系统。寄存器提供了一种快速且简便的方式来在这些小型计算设备中存储数据,它们的低功耗确保了它们不会对设备的能源预算造成压力。
在某些情况下,寄存器甚至可以用于创建特殊的寄存器文件,允许处理器在一个指令周期内访问多个寄存器地址。这种类型的寄存器文件对于需要速度以获得成功结果的应用特别有用,如数字信号处理(DSP)。通过将所有必要的数据存储在寄存器中,并通过寄存器文件快速访问,嵌入式系统可以比其他方法更快、更有效地运行。
总结
寄存器是计算机存储器的一个关键组件,它存储数据和指令以快速处理。它充当一个高效的临时存储区,信息可以在这里被快速访问和操作,以执行复杂任务。
“寄存器是CPU里‘距离运算器最近、延迟最低、名字最短的存储’——它把‘存储’和‘控制’合二为一,让指令在纳秒级完成‘取-译-执-写回’的循环。”
RDMA 中的Doorbell 寄存器
寄存器(逻辑上的 “寄存器实例”),通常对应一个独立的硬件模块,这个硬件模块包含了固定宽度(8/16/32/64bit 等)的存储空间(存储单元组合),再加上专属的控制逻辑。——存储单元负责 “存”,控制逻辑负责 “管”
Doorbell寄存器本质上就是网卡(或其他 PCIe 设备)芯片内部的一个硬件寄存器,通过 PCIe 的内存映射(MMIO)方式,映射到主机(或 GPU)的物理地址空间上。当主机或 GPU 需要通知网卡有新任务(如新 WQE),会向这个这个地址写入数据,本质就是操作网卡上的寄存器,实现通知和控制。
网卡硬件会实时监听其 BAR 空间内的特定地址(即门铃寄存器)。
当检测到主机/GPU 对该地址的写操作时,网卡硬件会触发相应的动作(如读取新的 WQE)。
这就是“写门铃寄存器通知网卡”的原理。
1. PCIe写操作和门铃寄存器的关系 门铃寄存器(Doorbell Register) 本质上是网卡(或其他 PCIe 设备)在 PCIe 总线上的一个“内存映射寄存器”。 这类寄存器通常通过 PCIe BAR(Base Address Register)空间映射到主机(或 GPU)的物理地址空间。 当主机或 GPU 需要通知网卡有新任务(如新 WQE),会向这个寄存器写入数据。 为什么“PCIe写操作”可以“触发门铃寄存器”? PCIe 设备(如网卡)会在其 BAR 空间内暴露一段物理地址,主机或 GPU 通过 PCIe 总线对这个地址进行写操作。 这个写操作实际上就是“写寄存器”,只不过这个寄存器是通过 PCIe 总线暴露出来的。 当写入发生时,PCIe 控制器会把数据通过 PCIe 传输到网卡,网卡硬件检测到这个写操作,就知道有新 WQE 需要处理。 2. 寄存器的本质 硬件寄存器 是设备芯片内部的一块小容量存储单元,通常用于控制、状态、数据交换等。 内存映射寄存器(MMIO Register) 是指这些寄存器被映射到主机的物理地址空间,主机可以像访问内存一样访问它们。 对于 PCIe 设备,寄存器通常通过 BAR 映射到主机物理地址空间,主机/CPU/GPU 通过 MMIO 访问。 3. 为什么写寄存器可以通知网卡? 网卡硬件会实时监听其 BAR 空间内的特定地址(即门铃寄存器)。 当检测到主机/GPU 对该地址的写操作时,网卡硬件会触发相应的动作(如读取新的 WQE)。 这就是“写门铃寄存器通知网卡”的原理。 4. 寄存器是网卡上的? 是的,门铃寄存器等控制寄存器物理上位于网卡芯片内部。 只是通过 PCIe BAR 映射,主机/GPU 可以直接访问这些寄存器。 总结 “PCIe写操作”本质上就是“写网卡上的寄存器”,只不过是通过 PCIe 总线远程完成的。 寄存器是网卡硬件的一部分,通过 PCIe BAR 映射到主机/GPU 地址空间。 写门铃寄存器就是通知网卡有新任务,这种机制高效且通用。