文件寄存器作用是什么 寄存器文件是什么

寄存器文件(register file)又称寄存器堆 , 是 CPU 中多个寄存器组成的阵型 , 一般由快速地静态随机读写存储器(SRAM)完成 。这类 RAM 具备专门的读端口与写端口 , 能够多路并发浏览不同的寄存器 。

文件寄存器作用是什么 寄存器文件是什么

文章插图
CPU 的指令集架构总是定义了一批寄存器 , 用以在内存与 CPU 计算部件之间储存数据 。在更加简化的 CPU , 这些架构寄存器(architectural registers)一一对应与 CPU 里的物理存有的寄存器 。在更为复杂的 CPU , 应用寄存器重命名技术 , 促使执行期间哪个架构寄存器对应于哪个寄存器堆的物理存放条目(physical entry stores)是动态变化的 。寄存器堆是指令集架构的一部分 , 程序能够浏览 , 这和透明色 CPU 高速缓存(cache)不同 。
完成通常的设计布局是一个简单的阵型 , 在水平方向的一行便是寄存器的全字长总宽 , 一行的每一位块的存储单元(bit cell)根据位线(Bit Line)读/写其数据 。在垂直方向把寄存器一次即能全字长读取 。放大电路(Sense amplifier)一般设在底端 , 把读取的小幅值的两根位线(构成了一对差分电路)的电势差 , 放大为全幅值的逻辑值电位 。更多的寄存器堆的设计是镜像与转动后(tiling mirrored and rotated)铺贴这类简单寄存器阵型 。
【文件寄存器作用是什么 寄存器文件是什么】寄存器堆的每个条目(entry , 即一个物理寄存器)对每个端口(port)都有一条字线(word line) , 每个位元的基本存储单元 , 对每个读端口有 1 条位线 , 对每个写端口有 2 条位线 。每个位元的基本存储单元都连接到了供电的 Vdd(高电平)与 Vss(低电频或是接地) , 这儿的 d 是指构成 SRAM 的场效应管的漏极(drain) , s 是指场效应管的源极(source) 。因此 , 走线所占面积随端口的平方提升 , 晶体管是线形提升 。多个冗余的具备偏少读端口的寄存器堆可能要比具备整套多个读端口的单一寄存器堆 , 面积更小、读取迅速 。MIPSR8000 的整数模块 , 有一个寄存器堆的实现 , 有 32 个条目 , 字长 64 位 , 具备 9 个读端口及 4 个写端口 。
一个典型的寄存器堆
解码解码器常常划分成预解码(predecoder)与解码(decoder) 。
解码器是一系列的跟门 , 最终选定并驱动字线 。
每个读端口与写端口都有各自的专用解码器 。比如 , 假如阵型有 4 个读端口与 2 个写端口 , 那么就有 6 套地址解码器 , 每个寄存器堆的条目有 6 条字线 。
阵型一个位元的基本存储单元的基本模式:
情况被存储在一对反相器中;
数据通过一个 NMOS 晶体管得到与字线相配的“读位线”上 。
数据根据“写位线”的电位来调节 2 个做为开关的 NMOS 管导通或是截至 , 从而把反相器的一端或是此外一端接地来写入数据 。
因此:读端口需要一个晶体管 , 而写端口必须 4 个晶体管!
很多可能的优化:
在基本存储单元之间共享线路 , 如 Vdd 与 Vss 电源线 。
读位线常常预充为 Vdd 或是 Vss 。
读位线常常要在 Vdd 或 Vss 电位附近的一个小幅值内起伏来描述存放状态 。由认知放大仪将这种小幅值信号转换为全幅值的思路信号 。小幅值信号的速度更快 , 由于位线只有极小的驱动可是具有一定的寄生电容 。
写位线是全幅值信号 , 这可能会致使与它伴生布线的读位线的很大影响 。
假如 Vdd 是平行布线能够关掉 , 如果这些周期内一个写端口正在写入 。这类提升提升了写速率 。
选用低功率电子产品来节能降耗
微架构大部分寄存器堆并没独特设备来预防多个写端口同时写同一个寄存器条目 。取代的 , 命令调度硬件保证在任何时钟周期只有一条命令写入特定一个寄存器条目 。假如对于同一个寄存器的多条机器指令同时被传出(issue) , 只有一条的写使能(write enable)不被关掉 。
每个基本存储单元内部2个交叉反相器必须在写位线实行完用一些时间修改内部情况 。假如正在写操作时对同一个条目实行读操作 , 或是需要等待更长时间 , 或是读到的是错误的情况数据 。一般有一个旁通复用器(bypass multiplexor)把正在写入的信息旁通(bypass)给读端口 。这类旁通复用器通常是更大规模旁通网络的一部分 , 用于把功能器件之间分享都还没递交的信息 。
寄存器堆一般是间隔配对与对应的数据通路 , 这避免了很多总线拐角 , 节省了占用面积 。但由于每个单元必须有同样的位线间隔 , 迫使数据通路上的位线间隔遵循最宽的模块 , 浪费了面积 。
假如一条数据通路经过多个单元 , 则通过两条数据通路并行 , 促使每条数据通路的位线间隔更小 , 进而节省了面积 。因此一般会造成了一个寄存器堆的多个团本 , 每个团本有自己的数据通路 。
比如 , Alpha 21264(EV6)Cpu有两种整数寄存器堆的团本 。只用一个时钟周期就能在二者之间传播数据 。发送逻辑(issue logic)尝试减少在两个团本间的数据转发 。MIPSR8000 浮点模块有两种浮点寄存器堆的团本 , 每个团本有 4 个读口、4 个写口 。写操作是对2个团本的对应条目同时写入 。
处理器的寄存器重命名能为每个功能模块分配写入到物理寄存器堆的一个子集 。这能够避免每个基本存储单元有多个写口的规定 , 很大节省了面积 。最后的寄存器堆 , 效果上有一个单写口、双读口的寄存器堆组成的栈 。
SPARCISA 定义了“register window” , 寄存器的 5-bit 架构名字指向一个很大的有数百个条目的寄存器堆的一个窗口 。register window 没挪动一步就经过 16 个寄存器 。因此每个架构寄存器名字仅指向这个寄存器堆里的少量寄存器 。比如架构寄存器 r20 仅指向物理寄存器#20, #36, #52, #68, #84, #100, #116, 如果这些物理寄存器堆只有 7 个窗口 。