文件地址寄存器,是计算机系统中信息存储的基本单元,是关于某个主题的信息的集合,以此用来保存当前CPU所访问的内存单元的地址。
40nm工艺多端口寄存器文件设计介绍了40mn工艺下一款16x36b7读6写的寄存器文件全定制设计,采用读写阵列分离策略,支持32位和36位两种写入操作。为了解决多个读端口读同一地址时读出过慢的问题,提出了一种基于与或非逻辑搭建的16选1读出电路。读写阵列分离的应用,压缩了读出位线的线长,提高了读出速度。版图后的模拟结果表明,在TypicalCorner工作条件下,寄存器文件相对于读地址变化的读出延时为217ps,写后读延时为440ps,平均功耗为11.18mW。1
整体电 路设计寄存器文件寻宽度为4位,位宽为36位,支持32位写入或36位写入,低32位写数据由低位写使能信号控制写入,高4位数据由低位写使能和高位写使能共同控制写入。32位写入时,读相应的存储单元时低32位为新写入的值,高4位为原存储单元中的值;36位写入时,读相应的存储单元时36位数据为新写入的值。
数据流向中,读地址经4-16译码,译出16条读字线,控制数据读出;写地址在写使能、写译码时钟控制下经4-16译码译出16条写字线,控制低32位数据写入,该写字线和高4位写使能相与,产生高4位写字线,控制高4位数据写入;写数据在写数据门控时钟控制下锁存,在写字线控制下写入存储单元。1
读存储阵列设计为了加快寄存器文件的读出速度,提出了一种基于与或非逻辑搭建的16选1读出电路;同时把读使能从读译码器中移除,从而把读使能从读关键路径上移走;阵列读写分离后,读出位线线长压缩了约一半的高度,减小了读出位线负载,从而提高了读出速度。
基于与或非逻辑搭建的16选1电路,相较于基于传输门搭建的16选1电路,该设计的好处是支持多端口读同一地址,且不影响读出延时。基于与或非门逻辑搭建的16选1电路中,主要由2个8选1电路、一级两输人或非门再加一级反相器组成。 其中8选1电路由4个AOI电路和一级四输入与非门组成。 选择字线(rwl)有且只有一条有效,分别和reg相与。 只有reg信号和rwl同时为1,输出Q才为1; 否则输出Q为0。
版图设计寄存器文件版图面积为296μmx85μm。 寄存器文件中,版图结构按功能进行划分,主要包括以下几个部分:中间部分从上至下依次为读地址输人反相器、写地址写使能锁存器、读写地址译码器;左右两侧从上至下依次是电源地解耦电容填充单元、写数据锁存器、读写阵列。读地址在输入处增加一级反相器,减小了其输入线负载;读写分离策略的应用,使读出位线线长由57μm减小到26μm,降低了读出位线负载;读出最后一级反相器置于读写阵列之上,使各读出端口输出驱动能力相当。1
写时序第0位(低32位代表)写数据写时序相位关系、第35位( 高4位代 表)写数据写时序相位关系中,第0位和笫35位相比,写数据从写数据锁存时钟clk_wdata开启到写数据锁存分别约为163Ps、169ps;从写地址锁存时钟clk_ we开启到写字线开启分别约为157.6Ps、198Ps。
写时序主要需要满足以下两个要求:
(1)写译码时钟要晚于写锁存后地址开启,否则会先对旧地址译码,后对新地址译码,可能产生写字线毛刺。 由第0位(低32位代表) 写数据写时序相位关系、第35位(高4位代表)写数据写时序相位关系可知写地址锁存时钟clk_we满足晚于写锁存后地址w0_addr_latChed开启,且写字线也没有毛刺,满足正确的写时序要求;
(2) 写字线要晚于写锁存后数据开启,否则会先写入旧值后写入新值,造成功耗的浪费。由第0位(低32位代表)写数据写时序相位关系、第35位(高4位代表)写数据写时序相位关系可知写字线w0_wl_right的开启时间晚于笫0位写锁存后数据w0_data_latched,写字线w0_wl_left的开启时间晚于第35位写锁存后数据w0_data_latched满足正确的写时序要求。
读时序读地址到数据读出时序版图模拟波形中,从读地址变化到读字线r1_wl_left有效约为129.1pS,而从读字线r1_wl_left有效到读数据r1_rf_data读出约为197.8Ps。
低32位和高4位写后读延时版图模拟波形中:对于低32位,clk上升沿到来时,到低32位写字线w2_wl_right产生约需324Ps,写字线有效到写数据写入存储单元reg4中,约需58.4Ps,从reg4有效到低32位读出数据r1 —rf—data读出延时约为269.3ps,故低32位从clk上升沿到r1_rf_data读出延时约为651.7ps。
对于高4位,clk上升沿到来时,到高4位写字线w2_wl_left产生约需375.9PS,写字线有效到写数据写入存储单元reg4中约需56.3ps,从reg4有效到高4位读出数据r1_rf_data读出延时约为271.6ps,故高4位从clk上升沿到r1_rf_data读出延时约为703.8ps。1
适用于多核处理器的扩展寄存器文件设计针对处理器中可用寄存器数量有限的问题,提出一种适用于多核处理器的扩展寄存器文件设计方案。采用多组结构进行硬件设计,将通信端口映射在扩展寄存器地址空间上,以实现寄存器寻址核间通信机制,引入兼具底层指令与高层封装的混合软件配置方案,改进软件编译流程。评估结果表明,该方案将可用寄存器文件的数量增加一倍,核间通信指令数目减少50%,系统吞吐率得到优化。2
多组结构采取多组结构的寄存器文件具有良好的低功耗特性。主要原因是,每组寄存器数目越小,对应的地址位线翻转电容也越小,寄存器访问的动态功耗也越低。其次,在RISC体系结构下,不同寄存器的访问频率并不相同,32个寄存器中4个~10个寄存器占据了总访问次数80%~90%。因此,将这些被频繁访问的寄存器单独成组,可有效降低整体寄存器的地址译码开销,从而降低功耗。
设计中采取了8个字一组的多组结构。根据应用需求,寄存器组的个数可从4组扩展到8组,即32个字扩展到64个字。其中,采取8个字一组的原因有:首先,RISC架构下允许32个寄存器地址空间,可供选择的有4个字一组、8个字一组与16个字一组,4个字一组的面积开销显著增加,16个字一组的翻转电容较大,因此,功耗也较大。8个字一组是在面积与功耗之间的折中方案。其次,活跃寄存器的个数为4个~10个,采取8个字一组方式与实际的应用更为匹配。扩展寄存器文件数据读通道和扩展寄存器文件数据写通道中,分别显示了8组扩展方案情况下24号寄存器与25号寄存器分别与FIFO读口、写口复用;
由扩展寄存器文件数据读通道和扩展寄存器文件数据写通道可知,寄存器配置位保证了每次只有4个寄存器组处于允许访问状态。如$0~$7寄存器组和$32~$39寄存器组每次只有一组处于允许访问状态,由相应的寄存器配置位进行配置。类似的,其他3对寄存器组也由相应的配置位控制。2
核间通信机制扩展寄存器文件所应用的多核处理器平台采用2维Mesh拓扑结构的片上网络,共有4×4,共计16个处理器节点。数据经由异步时钟FIFO由左上的处理器节点流入,同样由异步时钟FIFO从右下的节点流出。每个处理器节点包括RISC处理器核、指令存储器、数据存储器、输入与输出FIFO、路由以及提出的扩展寄存器文件。其中,输入与输出FIFO是该处理器节点与外部进行通信的窗口,数据通过FIFO与路由进行交互,各个处理器节点的路由交互连接
成片上网络,采取的路由算法为X-Y防死锁路由算法。一般地,处理器核访问FIFO的方法是将其端口映射到自身的数据存储器地址空间上,通过load与store指令进行访问。流水线中load和store指令的执行需要2个~3个时钟周期,因此,这种方法的时钟延迟较大。在扩展寄存器文件基础上提出了一种更为简便的方法,将FIFO端口映射到扩展寄存器文件地址空间上,从而实现对FIFO的快速访问,并显著减少核间通信所需指令数。此外,实际应用中24号和25号寄存器访问次数较少,因此,将其分别作为FIFO读端口与FIFO写端口的映射地址,由1bit配置位来控制。2
底层配置指令扩展寄存器文件的配置依赖于5bit 配置寄存器。其中,低4bit用于对4对寄存器组进行切换配置,最高1bit用于对FIFO端口映射的寄存器地址空间进行配置。底层配置指令方法,为通过添加专门的指令对该寄存器文件进行配置。配置指令的格式为regconfig mode[4:0],其中,mode[4:0]为配置信息,将被写入配置寄存器RegFile Config[4:0]中。配置信息的低4bit位标明了允许访问的寄存器组,而最高比特位给出了FIFO读、写端口的配置信息。通过该指令可以显式地配置4对寄存器组以及FIFO读口与FIFO写口。底层配置指令方法的优点是直观性与便捷性,缺点是使用汇编指令配置不利于高层软件开发人员调用,底层特性限制了该配置方法使用范围。2
高层封装函数由于底层配置指令限制在汇编语言层次,不利于高层软件开发人员调用,因此,本文在其基础之上开发了基于函数封装的高层次调配置方案。针对寄存器组配置与核间通信配置问题,抽象出switch、pack和unpack3个任务函数,高层软件开发人员可以通过调用switch函数进行扩展寄存器组切换,通过调用pack函数进行核间通信数据发送,通过调用unpack函数进行核间通信数据接收。其中,switch函数拥有5个输入参数。前4个参数用以配置寄存器组,其可取值为0或者1。0为选中第1对~第4对中的原始寄存器组;1为选中其中的扩展寄存器组。第5个参数用以配置FIFO读、写端口,可取值为0或者1.0为取消;1为建立FIFO读写端口在寄存器地址空间映射关系。pack函数拥有4个输入参数,分别为发送数据的源处理器节点编号、接受数据的目的处理器节点编号、待发送数据包头地址、待发送数据包长度。其中,处理器节点编号的可取值范围为1~16,对应多核处理器的16个处理器节点,数据包头地址为待发送数据的地址指针,数据包长度可取值范围为1~255,最大支持255个字的数据包长度。unpack函数拥有2个输入参数,分别为待接收数据包头地址和待接收数据包长度,前者为待接收数据的地址指针,后者可取值范围为1~255,与pack函数输入参数中的待发送数据包长度一致。值得注意的是,抽象出的任务函数需要调用底层配置指令,因此,需要重新设计支持配置指令的编译器或者对现有编译流程进行改进,以保证高层封装函数的正常编译执行。2
本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所