掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本公开总体涉及低复杂度的基于覆盖率的压缩。

背景技术

错误纠正码(error-correcting code,ECC)存储器是一种类型的计算机数据存储装置,其检测和纠正许多类型的内部数据损坏。通常,ECC存储器使得存储器系统不受一个或多个比特的错误的影响。在ECC存储器中,从每个字读取的数据与曾被写入到它的数据相同,即使实际存储在ECC存储器中的一个或多个比特被翻转到了错误的状态。征候表(syndrome table)是一种识别比特错误并随后纠正该比特错误的数学方式,并且征候空间可被用于这种基于征候的解码中。

ECC存储器被用来为不能容忍数据损坏的应用提供可靠性。ECC存储器可以由双列直插式存储器模块(dual in-line memory module,DIMM)上的额外设备组成,它提供额外的ECC存储,以及数据通道,以便ECC信息与数据一起被写入和读取。例如,在具有x8设备的DDR4上,ECC DIMM可由9个这样的设备组成,以形成72比特通道,其中64比特被用于传送数据,并且8比特被用于ECC数据传送。可以用单错误纠正和双错误检测(Single ErrorCorrection and Double Error Detection,SECDED)来保护数据,其中对于每64比特的数据传送有8比特。ECC DIMM通常比常规DIMM更昂贵。

基准-差量-即时(Base-Delta-Immediate,BDI)压缩是指一种在片上缓存中压缩数据的技术。BDI使用基准值和差异阵列来表示缓存线,该基准值和差异阵列的组合大小小于原始缓存线。在缓存线将这种基准+差量值与小值穿插在一起的情况下,BDI高效地将这种即时值并入编码中。

节约型ECC(frugal ECC,FECC)以缓存块的粒度来压缩主存储器,使用节省的空间来存储ECC信息。FECC利用了面向覆盖率的压缩来权衡压缩率和压缩覆盖率。FECC对于同质类型的数据利用BDI压缩,对于浮点数据利用指数压缩,并且对于异质类型的数据利用频繁字模式压缩。

发明内容

本公开的第一实施例提供了一种电子装置,包括:衬底;以及与所述衬底耦合的逻辑,所述逻辑用于:确定用以压缩数据块的基准值,其中,所述数据块由第一数目的数据字构成,将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据,其中,所述第二数目的数据字比所述第一数目的数据字至少少两个,以及将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中。

本公开的第二实施例提供了一种电子存储器系统,包括:控制器;用于存储数据块的存储器,所述数据块由第一数目的数据字构成;以及与所述控制器和所述存储器通信地耦合的逻辑,所述逻辑用于:确定用以压缩所述数据块的基准值,将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据,其中,所述第二数目的数据字比所述第一数目的数据字至少少两个,以及将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中。

本公开的第三实施例提供了一种压缩存储器的方法,包括:确定用以压缩数据块的基准值,其中,所述数据块由第一数目的数据字构成;将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据,其中,所述第二数目的数据字比所述第一数目的数据字至少少两个;以及将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中。

本公开的第四实施例提供了一种存储器压缩装置,包括:用于确定用以压缩数据块的基准值的设备,其中,所述数据块由第一数目的数据字构成;用于将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据的设备,其中,所述第二数目的数据字比所述第一数目的数据字至少少两个;以及用于将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中的设备。

附图说明

在附图中以示例的方式而不是限制的方式图示了本文描述的素材。为了图示的简单和清晰起见,附图中图示的元素不一定是按比例绘制的。例如,为了清晰起见,一些元素的尺寸相对于其他元素可能被夸大了。另外,在认为适当时,在附图之间重复附图标记以指示出对应的或相似的元素。在附图中:

图1是根据一实施例的电子存储器系统的示例的框图;

图2是根据一实施例的电子装置的示例的框图;

图3是根据一实施例的压缩存储器的方法的示例的流程图;

图4是根据一实施例的过程流程的示例的框图;

图5是根据一实施例的压缩块的示例的框图;

图6是根据一实施例的压缩块的另一示例的框图;

图7图示了根据一实施例示出带内ECC压缩模块在存储器子系统中的放置的框图;

图8图示了根据一实施例示出存储器空间如何被划分成系统可见存储器和ECC征候空间的框图;

图9图示了根据一实施例示出具有最近征候缓冲器的带内ECC压缩模块的框图;并且

图10是根据一实施例的电子存储器系统的另一示例的框图。

具体实施方式

现在参考附图来描述一个或多个实施例或实现方式。虽然论述了具体的配置和布置,但应当理解这么做只是为了说明的目的。相关领域的技术人员将会认识到,在不脱离描述的精神和范围的情况下,可以采用其他配置和布置。对于相关领域的技术人员而言显而易见的是,本文描述的技术和/或布置也可被用在与本文所述不同的各种其他系统和应用中。

虽然接下来的描述阐述了例如可在诸如片上系统(system-on-a-chip,SoC)体系结构之类的体系结构中显现的各种实现方式,但本文描述的技术和/或布置的实现方式不限于特定的体系结构和/或计算系统,而是可由任何体系结构和/或计算系统为类似的目的而实现。例如,采用例如多个集成电路(integrated circuit,IC)芯片和/或封装件的各种体系结构,和/或诸如机顶盒、智能电话等等之类的各种计算设备和/或消费电子(consumerelectronic,CE)设备,可实现本文描述的技术和/或布置。另外,虽然接下来的描述可阐述许多具体细节,例如逻辑实现方式、系统组件的类型和相互关系、逻辑分区/集成选择等等,但可在没有这种具体细节的情况下实现要求保护的主题。在其他情况中,可能没有详细示出一些素材,例如控制结构和完整软件指令序列,以免模糊本文公开的素材。

可以用硬件、现场可编程门阵列(Field Programmable Gate Array,FPGA)、固件、驱动器、软件或者其任何组合来实现本文公开的素材。本文公开的素材也可被实现为存储在机器可读介质上的指令,这些指令可被摩尔机(Moore Machine)、米利机(MealyMachine)和/或一个或多个处理器读取和执行。机器可读介质可包括用于以机器(例如,计算设备)可读的形式来存储或传输信息的任何介质和/或机制。例如,机器可读介质可包括只读存储器(read only memory,ROM);随机存取存储器(random access memory,RAM);动态随机存取存储器(dynamic random-access memory,DRAM),磁盘存储介质;光存储介质;闪存设备;相变存储器,量子位固态量子存储器,电的、光的、声的或者其他形式的传播信号(例如,载波、红外信号、数字信号,等等),以及其他。

说明书中提及“一个实现方式”、“一实现方式”、“一示例实现方式”等等是表明所描述的实现方式可包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指同一实现方式。另外,当结合一实施例来描述特定的特征、结构或特性时,认为结合其他实现方式(无论本文是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。

本文描述的各种实施例可包括存储器组件和/或到存储器组件的接口。这种存储器组件可包括易失性和/或非易失性(NV)存储器。易失性存储器可以是需要电力来维持该介质存储的数据的状态的存储介质。易失性存储器的非限制性示例可包括各种类型的随机存取存储器(random access memory,RAM),例如动态RAM(DRAM)或静态RAM(SRAM)。可用在存储器模块中的一种特定类型的DRAM是同步动态RAM(SDRAM)。在特定实施例中,存储器组件的DRAM可遵守由联合电子设备工程委员会(Joint Electron Device EngineeringCouncil,JEDEC)颁布的标准,例如用于双数据速率(double data rate,DDR)SDRAM的JESD79F,用于DDR2SDRAM的JESD79-2F,用于DDR3SDRAM的JESD79-3F,用于DDR4SDRAM的JESD79-4A,用于低功率DDR(Low Power DDR,LPDDR)的JESD209,用于LPDDR2的JESD209-2,用于LPDDR3的JESD209-3,以及用于LPDDR4的JESD209-4(这些标准可在jedec.org获得)。这些标准(以及类似的标准)可被称为基于DDR的标准,并且实现这种标准的存储设备的通信接口可被称为基于DDR的接口。

NV存储器(NVM)可以是不需要电力来维持该介质存储的数据的状态的存储介质。在一个实施例中,存储器设备可以包括块可寻址存储器设备,例如基于NAND或NOR技术的那些设备。存储器设备也可包括未来世代的非易失性设备,例如三维(3D)交叉点存储器设备,或者其他字节可寻址就地写入(write-in-place)非易失性存储器设备。在一个实施例中,存储器设备可以是或者可以包括使用硫属化合物玻璃的存储器设备,多阈值级别NAND闪存,NOR闪存,单级别或多级别相变存储器(Phase Change Memory,PCM),电阻性存储器,纳米线存储器,铁电晶体管RAM(ferroelectric transistor RAM,FeTRAM),反铁电存储器,包含忆阻器技术的磁阻式RAM(magnetoresistive RAM,MRAM)存储器,包括金属氧化物基底、氧空位基底和导电桥RAM(conductive bridge RAM,CB-RAM)的电阻性存储器,或者自旋转移力矩(spin transfer torque,STT)-MRAM,基于自旋电子磁结存储器的设备,基于磁隧道结(magnetic tunneling junction,MTJ)的设备,基于DW(Domain Wall,畴壁)和SOT(SpinOrbit Transfer,自旋轨道转移)的设备,基于半导体闸流管的存储器设备,或者上述任何项的组合,或者其他存储器。存储器设备可以指管芯本身和/或指封装的存储器产品。在特定的实施例中,具有非易失性存储器的存储器组件可遵守JEDEC颁布的一个或多个标准,例如JESD218、JESD219、JESD220-1、JESD223B、JESD223-1、或者其他适当的标准(本文引用的JEDEC标准可在jedec.org获得)。

参考图1,电子存储器系统10的一个实施例可包括控制器11、用于存储由第一数目的数据字构成的数据块的存储器12、以及与控制器11和存储器12通信地耦合的逻辑13。逻辑13可被配置为确定用以压缩数据块的基准值,将来自数据块的第二数目的数据字的原始值替换为与基准值的各自差量值以提供压缩数据,其中第二数目的数据字比第一数目的数据字至少少两个,并且将与数据块相关联的元数据与压缩数据一起存储在数据块中。在一些实施例中,逻辑13还可被配置为在元数据中设置一个或多个数据索引字段,以指示出数据块的被用与基准值的各自差量值替换的数据字的各自位置。

在一些实施例中,逻辑13还可被配置为从数据块中识别具有适合于基准值的数据值的数据字,并且将基准值设置为所识别的数据字的数据值。例如,逻辑13还可被配置为在元数据中设置基准索引字段,以指示出所识别的数据字的位置。替换地,或者额外地,逻辑13可被配置为将基准值设置为固定数据字位置的数据值,并且在元数据中设置字段来指示出基准值是零还是固定数据字位置的数据值。例如,元数据可包括错误纠正码(ECC)信息。

上述控制器11、存储器12、逻辑13和其他系统组件中的每一者的实施例可以用硬件、软件或者其任何适当组合来实现。例如,硬件实现方式可包括可配置逻辑,例如可编程逻辑阵列(programmable logic array,PLA)、现场可编程门阵列(field programmablegate array,FPGA)、复杂可编程逻辑器件(complex programmable logic device,CPLD)、或者使用诸如专用集成电路(application specific integrated circuit,ASIC)、互补金属氧化物半导体(complementary metal oxide semiconductor,CMOS)或者晶体管-晶体管逻辑(transistor-transistor logic,TTL)技术之类的电路技术的固定功能逻辑硬件,或者这些的任何组合。控制器11的实施例可包括通用控制器、专用控制器、存储器控制器、存储控制器、微控制器、通用处理器、专用处理器、中央处理器单元(central processorunit,CPU)、执行单元,等等。在一些实施例中,存储器12、逻辑13和/或其他系统存储器可位于包括控制器11在内的各种组件中(例如,在同一个管芯上),或者与之处于相同位置。

替换地,或者额外地,这些组件中的全部或部分可作为存储在机器可读或计算机可读存储介质中的一组逻辑指令被实现在一个或多个模块中以被处理器或计算设备执行,所述机器或计算机可读存储介质例如是随机存取存储器(random access memory,RAM)、只读存储器(read only memory,ROM)、可编程ROM(programmable ROM,PROM)、固件、闪存,等等。例如,可以用一种或多种操作系统(operating system,OS)适用/适当的编程语言的任何组合来编写用于执行组件的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如PYTHON、PERL、JAVA、SMALLTALK、C++、C#、VHDL、Verilog、System C,等等,还包括传统的过程式编程语言,比如“C”编程语言或者类似的编程语言。例如,存储器12、持久性存储介质或者其他系统存储器可存储一组指令,该组指令在被控制器11执行时,使得系统10实现系统10的一个或多个组件、特征或方面(例如,逻辑13,确定用以压缩数据块的基准值,将来自数据块的原始值替换为与基准值的差量值以提供压缩数据,将与数据块相关联的元数据与压缩数据一起存储在数据块中,等等)。

现在转到图2,电子装置15的一个实施例可包括衬底16,以及与衬底16耦合的逻辑17。逻辑17可被配置为确定用以压缩数据块的基准值(其中数据块由第一数目的数据字构成),将来自数据块的第二数目的数据字的原始值替换为与基准值的各自差量值以提供压缩数据(其中第二数目的数据字比第一数目的数据字至少少两个),并且将与数据块相关联的元数据与压缩数据一起存储在数据块中。在一些实施例中,逻辑17还可被配置为在元数据中设置一个或多个数据索引字段,以指示出数据块的被用与基准值的各自差量值替换的数据字的各自位置。

在一些实施例中,逻辑17还可被配置为从数据块中识别具有适合于基准值的数据值的数据字,并且将基准值设置为所识别的数据字的数据值。例如,逻辑17还可被配置为在元数据中设置基准索引字段,以指示出所识别的数据字的位置。替换地,或者额外地,逻辑17可被配置为将基准值设置为固定数据字位置的数据值,并且在元数据中设置字段来指示出基准值是零还是固定数据字位置的数据值。例如,元数据可包括ECC信息。

逻辑17的实施例可被实现在系统、装置、计算机、设备等等中,例如本文描述的那些。更具体而言,逻辑17的硬件实现方式可包括可配置逻辑,例如PLA、FPGA、CPLD,或者使用诸如ASIC、CMOS或TTL技术之类的电路技术实现在固定功能逻辑硬件中,或者这些的任何组合。替换地,或者额外地,逻辑17可作为存储在机器可读或计算机可读存储介质中的一组逻辑指令被实现在一个或多个模块中以被处理器或计算设备执行,所述介质例如是RAM、ROM、PROM、固件、闪存,等等。例如,可以用一种或多种OS适用/适当的编程语言的任何组合来编写用于执行组件的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如PYTHON、PERL、JAVA、SMALLTALK、C++、C#、VHDL、Verilog、System C等,还包括传统的过程式编程语言,比如“C”编程语言或类似的编程语言。

例如,逻辑17可被实现在可包括一个或多个衬底16的半导体装置上,其中逻辑17耦合到该一个或多个衬底16。在一些实施例中,逻辑17可至少部分被实现在(一个或多个)半导体衬底(例如,硅、蓝宝石、砷化镓,等等)上的可配置逻辑和固定功能硬件逻辑中的一个或多个中。例如,逻辑17可包括与(一个或多个)衬底16耦合的晶体管阵列和/或其他集成电路组件,其中晶体管沟道区域位于(一个或多个)衬底16内。逻辑17和(一个或多个)衬底16之间的界面可能不是突变结。逻辑17也可被认为包括在(一个或多个)衬底16的初始晶圆上生长的外延层。

现在转到图3,压缩存储器的方法20的实施例可包括在方框21处,确定用以压缩数据块的基准值,其中数据块由第一数目的数据字构成,在方框22处,将来自数据块的第二数目的数据字的原始值替换为与基准值的各自差量值以提供压缩数据,其中第二数目的数据字比第一数目的数据字至少少两个,并且在方框23处,将与数据块相关联的元数据与压缩数据一起存储在数据块中。该方法的一些实施例还可包括在方框24处,在元数据中设置一个或多个数据索引字段,以指示出数据块的被用与基准值的各自差量值替换的数据字的各自位置。

在一些实施例中,方法20还可包括在方框25处,从数据块中识别具有适合于基准值的数据值的数据字,并且在方框26处,将基准值设置为所识别的数据字的数据值。例如,方法20还可包括在方框27处,在元数据中设置基准索引字段,以指示出所识别的数据字的位置。替换地,或者额外地,方法20的实施例可包括在方框28处,将基准值设置为固定数据字位置的数据值,并且在方框29处,在元数据中设置字段来指示出基准值是零还是固定数据字位置的数据值。例如,在方框30处,元数据可包括ECC信息。

方法20的实施例可被实现在系统、装置、计算机、设备等等中,例如本文描述的那些。更具体而言,方法20的硬件实现方式可包括可配置逻辑,例如PLA、FPGA、CPLD,或者使用诸如ASIC、CMOS或TTL技术之类的电路技术的固定功能逻辑硬件,或者这些的任何组合。混合硬件实现方式包括静态动态SoC可重配置设备,从而控制流和数据路径实现用于功能的逻辑。替换地,或者额外地,方法20可作为存储在机器可读或计算机可读存储介质中的一组逻辑指令被实现在一个或多个模块中以被处理器或计算设备执行,所述介质例如是RAM、ROM、PROM、固件、闪存,等等。例如,可以用一种或多种OS适用/适当的编程语言的任何组合来编写用于执行组件的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如PYTHON、PERL、JAVA、SMALLTALK、C++、C#、VHDL、Verilog、System C等等,还包括传统的过程式编程语言,比如“C”编程语言或类似的编程语言。

例如,方法20可被实现在计算机可读介质上。方法20的实施例或一些部分可被实现在固件、应用(例如,通过应用编程接口(application programming interface,API))或者在操作系统(operating system,OS)上运行的驱动器软件中。此外,逻辑指令可包括汇编指令、指令集体系结构(instruction set architecture,ISA)指令、数据集体系结构(dataset architecture,DSA)命令、机器指令、机器相关指令、微代码、状态设置数据、用于集成电路的配置数据、个性化电子电路和/或硬件固有的其他结构组件(例如,主机处理器、中央处理单元/CPU、微控制器,摩尔机、米利机,等等)的状态信息。

参考图4,用于压缩存储器的过程流程40的一个实施例可从数据块42和与数据块44相关联的元数据M1开始。在收到对数据块42的写入请求时,过程流程40包括如本文所述的对数据进行压缩,以将压缩数据和元数据M1两者都存储在用于未压缩的数据块42的相同空间中。如果压缩成功,则压缩数据被与设置为一的压缩标志(C=1,指示出压缩成功)和元数据M2(包括压缩元数据和元数据M1)相组合。然后,成功压缩的块被写入到存储器44(例如,DIMM)。如果压缩不成功,则未压缩的数据被分割成未压缩的部分数据,该部分数据被与设置为零的压缩标志(C=0,指示出压缩不成功)和元数据M3相组合。然后,未压缩的块被写入到存储器44,并且对于作为溢出数据的未压缩数据的剩余部分需要进行第二次写入。元数据M1可与元数据M3或溢出数据包括在一起。在收到读取请求时,从压缩块(例如,通过适当的解压缩)或未压缩块(例如,通过对未压缩数据进行重组装)重建数据块42,并且取回元数据M1。有利的是,当压缩成功时,只需要对存储器44进行一次读取就可以取回数据块42和元数据M1两者。此外,当压缩不成功时,只涉及很少或者不涉及惩罚,因为传统上已经要求有两次存储器读取来取回数据块42和元数据M1两者。

一些实施例可提供用于低复杂度的基于覆盖率的压缩的技术。存储与每个存储器块相关联的元数据可能要求对于每个存储器请求使用两个存储器访问。作为一个示例,为了减少存储器错误,可以将ECC与每个64字节(B)或32B块一起存储在存储器中。读取一存储器块要求读取数据和ECC两者,这意味着每次最后一级缓存(last level cache,LLC)错失可能需要两次存储器引用,这增大了存储器带宽使用和功率。节约型ECC(FECC)使用细粒度压缩来为ECC提供支持,为ECC信息节省了足够的空间,但压缩算法的实现很复杂,因为它在压缩/解压缩逻辑中利用了多个复杂的算法,具有很高的延迟和显著的功率消耗。FECC利用的算法之一是BDI算法,该算法涉及为存储器块中的除了基准字以外的每个字计算差量值,这增加了计算和功率消耗。有利地,实施例克服了前述问题中的一个或多个。

实施例提供了针对用单个块(例如,64B或32B,取决于ECC粒度)中的数据压缩ECC的技术,以节省存储器带宽和功率。成功的压缩将压缩数据和ECC(例如,和/或其他元数据)都存储在用于未压缩块的相同空间中。一些实施例可以利用一类压缩算法(例如,从选定的任意基准进行的差量压缩)来增大覆盖率而不增大复杂度。有利的是,一些实施例可以在使用ECC从存储器错误中恢复的系统中节省带宽和功率。例如,实施例可被应用于使用商品(非ECC)DIMM但仍需要支持可靠性的客户端、服务器、高性能计算(high performancecomputing,HPC)系统,等等。

一些实施例可以利用一类压缩算法,即具有选定的任意基准的差量压缩,这些算法与传统技术相比,既提供了高覆盖率,又提供了更低的复杂度。差量压缩一般而言在存储器块中识别与基准字相似(例如,在一个小的差量内相似)的一个或多个字。基准字可以是值零、块中已识别的字(例如,提供成功压缩的字)、块中的第一个字、或者块中的另一个任意的字。字具有固定的长度,例如,16比特(b)、32b、64b,等等。在各种实现方式中,术语“块”或“数据块”可以指代“线”或“缓存线”或“数据线”或者与之互换。实施例从块中去除一个或多个字,并且包括压缩元数据来指示出去除的字在未压缩块中的位置。成功压缩的实施例对应于以下情况发生时:有足够的比特被去除,从而能够再利用去除的比特来存储元数据(例如,ECC)和任何其他与压缩有关的元数据。

参考图5,压缩块50的实施例利用压缩技术来去除两(2)个16比特字,这些字相对于32B块中的所选16比特字在3比特差量内。压缩块的压缩元数据包括压缩标志字段C(1比特标志x 3),基准标志字段F(1比特标志,指示出零基准或所选的基准),基准索引字段IS(到所选基准值的位置的4比特索引),第一数据索引字段I1(到被替换的数据字一的位置的4比特索引),第二数据索引字段I2(到被替换的数据字二的位置的4比特索引),第一差量字段D1(被替换的数据字一的3比特差量值),第二差量字段D2(被替换的数据字二的3比特差量值),元数据字段ECC(10比特单错误纠正和双错误检测(SECDED)ECC),以及十四(14)个数据字字段W0…W13,用于剩余的(非压缩)16比特数据字。当压缩成功时,所有的压缩元数据和ECC元数据占据了两个被去除的16比特数据字的32比特。

如图5所示,1比特标志F指示出,差量是相对于零还是相对于所选的数据字来测量的。三个索引字段,每个4比特,指向所选字索引(IS)以及两个被去除的字的两个索引(I1,I2)。两个3比特差量字段D1、D2存储了两个被去除的字中的每一者与零或所选字之间的算术差异。三个比特被用于压缩标志字段,使用三重模块冗余(triple modular redundancy,TMR),因为压缩标志字段中的错误不被ECC覆盖。去除的32比特中的剩余10比特存储了覆盖32B数据的10比特SECDED ECC字段。压缩块的剩余部分存储了未被去除的14个字。

可以利用任何适当的技术来识别用于压缩的适当基准值。例如,一些实施例可以从零(0)开始作为基准值,并且确定两个其他字是否在零的3比特差量之内。如果是,则压缩标志C被设置为7(二进制111),标志F被设置为零以指示出基准值为零,I1被设置为在零的3比特差量内的第一数据字的位置,I2被设置为在零的3比特差量内的第二数据字的位置,并且差量字段D1和D2被设置为各自的差量值。否则,一些实施例可以从W0开始,并且确定两个其他字是否在W0的3比特差量之内。如果是,则压缩标志C被设置为7(二进制111),标志F被设置为一以指示出所选基准值,IS被设置为0(W0的数据字位置),I1被设置为在W0的3比特差量内的第一数据字的位置,I2被设置为在W0的3比特差量内的第二数据字的位置,并且差量字段D1和D2被设置为各自的差量值。如果少于两个字在W0的3比特差量内,则该过程可以对数据字W1至W15重复进行,当识别出适当的基准值时停止。本领域的技术人员将会明白,前述过程的全部或部分可以用状态机或组合逻辑来实现。如果识别了适当的基准值,则该块的ECC信息被存储在ECC字段中。如果没有识别出适当的基准值,则压缩标志字段可被设置为0,指示出压缩没有成功,并且溢出数据可以与未压缩的块分开存储。

参考图6,压缩块60的实施例利用压缩技术来去除两(2)个16比特字,这些字相对于32B块中的固定位置处的一个或多个任意16比特字在4比特差量内。压缩块的压缩元数据包括压缩标志字段C(1比特标志x3),元数据字段ECC(11比特SECDED ECC),基准标志字段F(1比特标志,指示出零基准或任意基准),基准索引字段IA(1比特标志,指示出将两个任意位置中的哪个用于基准值),第一数据索引字段I1(到被替换的数据字一的位置的4比特索引),第二数据索引字段I2(到被替换的数据字二的位置的4比特索引),第一差量字段D1(被替换的数据字一的4比特差量值),第二差量字段D2(被替换的数据字二的4比特差量值),以及十四(14)个数据字字段W0…W13,用于剩余的(非压缩)16比特数据字。当压缩成功时,所有的压缩元数据和ECC元数据占据了两个被去除的16比特数据字的32比特。

对于压缩块50而言,识别其他两个字接近的单个所选字要求更多的复杂度(例如,面积、时延和功率)来减去块中的所有字对。压缩块60针对所选的任意字,其中预定义的任意字集合可被用作差量压缩的基准。例如,一些实施例可以利用块中的第一个和第九个字作为两个任意基准。限制可能的基准字位置的数目和/或对于可能的基准字利用固定位置,显著减小了计算差量所需的面积、时延和功率,因为减法只需要对所有字对的一个小子集执行。利用较少的可能基准字位置也增加了元数据中的空闲比特的数目,这些空闲比特然后可被用于其他目的。例如,4比特IS字段可被用1比特IA标志来替换,这就释放了3比特的元数据。额外的比特允许压缩块60包括11比特SECDEC ECC(可覆盖高达64B块),以及4比特差量值而不是3比特(这增大了成功压缩的可能性)。

压缩块60的一种示例实现方式可以在零之外只利用两个任意的字(例如,第一个和第九个字)作为可能的基准。例如,一些实施例可以从零(0)开始作为基准值,并且确定两个其他字是否在零的4比特差量之内。如果是,则压缩标志C被设置为7(二进制111),标志F被设置为零以指示出基准值为零,I1被设置为在零的4比特差量内的第一数据字的位置,I2被设置为在零的4比特差量内的第二数据字的位置,并且差量字段D1和D2被设置为各自的差量值。否则,一些实施例可以从第一字开始,并且确定两个其他字是否在第一字的4比特差量之内。如果是,则压缩标志C被设置为7(二进制111),标志F被设置为一以指示出任意基准值,IA被设置为0(以指示出第一字提供基准值),I1被设置为在第一字的4比特差量内的第一数据字的位置,I2被设置为在第一字的4比特差量内的第二数据字的位置,并且差量字段D1和D2被设置为各自的差量值。

如果少于两个字在第一字的4比特差量内,则该过程可对第九数据字重复进行,以确定两个其他字是否在第九字的4比特差量内。如果是,则压缩标志C被设置为7(二进制111),标志F被设置为一以指示出任意基准值,IA被设置为1(以指示出第九字提供基准值),I1被设置为在第九字的4比特差量内的第一数据字的位置,I2被设置为在第九字的4比特差量内的第二数据字的位置,并且差量字段D1和D2被设置为各自的差量值。本领域的技术人员将会明白,前述过程的全部或部分可以用状态机或组合逻辑来实现。如果零、第一字或第九字中的任何一者提供了适当的基准值,则该块的ECC信息被存储在ECC字段中。否则,压缩标志字段可被设置为0,指示出压缩没有成功,并且溢出数据可以与未压缩的块被分开存储。

压缩块60有利地为32B或64B块覆盖了SECDED ECC。对于32B,只需要10比特的ECC。对于64B粒度,ECC需要11比特,它可以被存储在顶部或底部的32B组块(chunk)中。1比特标志F指示出差量是从零还是从任意基准测量的,并且1比特标志IA识别了任意基准的适当索引,因为只有两种可能性(例如,W0或W8)。有利的是,与传统的压缩技术(例如,FECC、BDI,等等)相比,实施例以较低的复杂度提供了较高的压缩覆盖率。在若干客户端、服务器和HPC工作负载上的广泛基准测试(benchmark)中,当支持32B ECC粒度时,实施例显示出超过80%的平均覆盖率。对于64B粒度,因为如果顶部或底部组块可被压缩,该块就被覆盖,所以平均覆盖率增大到84%。

压缩块50和60是根据一些实施例的压缩技术的非限制性示例。鉴于本申请的好处,本领域的技术人员会想到许多其他示例。例如,取决于元数据的大小,更多或更少的数据字可以被去除,同时对压缩元数据进行相应的改变。类似地,一些实施例可以为基准值使用更多或更少的固定的、任意的数据字位置。一些实施例可以为差量值使用更多或更少的比特。

可以在各种计算系统(例如,包括非移动计算设备,比如桌面型电脑、工作站、服务器、机架系统,等等;移动计算设备,比如智能电话、平板设备、超便携个人计算机(Ultra-Mobile Personal Computer,UMPC)、膝上型计算机、ULTRABOOK计算设备、智能手表、智能眼镜、智能手镯,等等;和/或客户端/边缘设备,比如物联网(Internet-of-Things,IoT)设备(例如,传感器、相机,等等))中提供本文论述的技术。

如上所述,ECC存储器由于额外的DRAM设备和数据通道而增大了成本。对于高端系统,与常规DRAM相比,客户传统上已经投资于填充特殊ECC DRAM所需要的额外成本。然而,对于物联网(IoT)领域的低端系统,成本是一个非常重要的参数。例如,当使用具有16比特通道宽度的低功率DDR(Low Power DDR,LPDDR)存储器时,为ECC保护在每个通道添加专用设备的成本是非常高的。因此,为了支持低成本和ECC要求,可以使用带内ECC机制。

带内ECC允许SECDED具有低得多的容量开销并且不增加引脚计数。利用2字节的ECC值以可配置的粒度(64字节、32字节、16字节,等等)来保护数据。传统上,总DRAM大小的一部分被保留用来存储这些ECC数据,并且启用带内ECC会导致性能惩罚,因为对存储器的每次读取或写入访问都被转化为读取或写入ECC数据的额外请求,从而增大了所使用的存储器带宽。一些实施例提供了技术来减小被保留来存储ECC数据的DRAM的部分,并且减小带内ECC性能惩罚,其方式是通过用相对于选定任意基准的差量压缩来对块进行压缩,并且将压缩数据和ECC(例如,和/或其他元数据)都存储在用于未压缩块的相同空间中。一些实施例可有利地以低复杂度压缩来增大覆盖率(例如,与其他压缩技术相比)。有利的是,带内ECC压缩技术的实施例可以大大减少要求对存储器的两次访问的读取和写入请求的数目。

在一些实施例中,带内ECC压缩是在单独的模块中实现的,该模块被放置在SoC中的存储器控制器之前。将带内ECC压缩功能放在独立的模块中,允许了不同SoC间的可移植性和再利用,而无需改变现有的模块。它还允许了在不需要ECC保护时对整个带内ECC压缩模块进行功率门控。

带内ECC压缩模块通过对物理存储器空间的所有或特定区域提供错误校验和纠正来提高安全性和可靠性。可以为不支持带外ECC的存储器技术启用带内ECC压缩模块,在这种存储器技术中为ECC数据存储向每个通道添加额外设备的成本是过高的。

在一些实施例中,带内ECC压缩模块被放置在到DRAM存储器控制器(或者任何其他类型的可寻址存储器元件)的存储器读取和写入的路径上。带内ECC压缩模块基于传入的请求地址来识别一区域是否应当受到ECC保护。由于ECC数据的读取和生成会添加额外的带宽开销,所以带内ECC压缩模块内部的最近征候缓冲器可通过存储最近使用的ECC数据而被用于减少这种开销。

图7图示了根据某些实施例示出带内ECC压缩模块120在存储器子系统中的放置的框图100。

多个存储器请求者104、106可经由存储器架构108向存储器设备110发送包括读取和写入的输入/输出(I/O)请求。多个存储器请求者104、106可包括主机计算系统或其他设备。

存储器设备110包括带内ECC压缩模块120,该模块包含了如本文所述的相对于选定任意基准的差量压缩技术(例如,利用压缩块60,等等)。带内ECC压缩模块120以这样的配置被放置在存储器设备110中:即,在由存储器控制器112进一步处理以访问DRAM 114(在替换实施例中可以使用除了DRAM 114以外的其他存储器)之前,I/O请求被带内ECC压缩模块120拦截和处理。虽然在图7中带内ECC压缩模块120被示为与存储器控制器112分开的模块,但在某些实施例中,带内ECC压缩模块120或其操作可以在存储器控制器112中实现。

在图7中,带内ECC压缩模块120位于到存储器控制器112的存储器读取和写入的路径上,并且以可配置的粒度(64B、32B、16B,等等)用16比特SECDED代码来保护数据。带内ECC压缩模块120位于通往DRAM存储器114的路上,并且当被启用时,拦截去到存储器控制器112的所有请求。

虽然带内ECC压缩模块120支持对DRAM 114中的所有存储器地址空间的ECC保护,但预期只有较小部分的存储器地址空间需要被ECC保护,而且只有关键的应用被分配到该受保护空间中。这减少了启用带内ECC的带宽开销,因为对未受保护区域的访问不会生成额外的请求来读取或写入ECC数据。

虽然各种实施例是针对诸如DRAM 114之类的动态易失性存储器来描述的,但实施例可被应用于任何存储器设备或传播值的设备。如本文所述的存储器子系统可以与多种存储器技术兼容,例如DDR4(DDR版本4,由JEDEC于2012年9月发布的初始规范)、LPDDR4(低功率双数据速率(LOW POWER DOUBLE DATA RATE,LPDDR)版本4,JESD209-4,最初由JEDEC于2014年8月发布)、WIO2(宽I/O 2(WideIO2),JESD229-2,最初由JEDEC于2014年8月发布)、HBM(高带宽存储器DRAM,JESD235,最初由JEDEC于2013年10月发布)、DDR5(DDR版本5)、LPDDR5(LPDDR版本5)、HBM2(HBM版本2)、和/或其他,以及基于这些规范的衍生或扩展的技术。

除了易失性存储器以外,或者作为易失性存储器的替代,在某些实施例中,对存储器设备的提及可以指一种非易失性存储器设备,即使该设备的电力被中断,其状态也是确定的。在一个实施例中,非易失性存储器设备是可块寻址的存储器设备,例如NAND或NOR技术。因此,存储器设备也可包括3D交叉点存储器设备,或者其他可字节寻址的非易失性存储器设备。在一个实施例中,存储器设备可以是或者可以包括使用硫属化合物相变材料(例如,硫属化合物玻璃)的存储器设备、多阈值级别NAND闪存、NOR闪存、单级或多级相变存储器(Phase Change Memory,PCM)、电阻式存储器、纳米线存储器、铁电晶体管随机存取存储器(ferroelectric transistor random access memory,FeTRAM)、包含了忆阻器技术的磁阻式随机存取存储器(magnetoresistive random access memory,MRAM)存储器、或者自旋转移力矩(spin transfer torque,STT)-MRAM、基于自旋电子磁结存储器的设备、或者上述任何项的组合、或者其他存储器。

本文提到的“DRAM”的描述可以适用于任何允许随机访问的存储器设备,无论是易失性的还是非易失性的。存储器设备或DRAM可以指管芯本身和/或指封装的存储器产品。

图8图示了框图200,该框图根据某些实施例示出了与DRAM 114相对应的可寻址存储器空间如何被划分为系统可见存储器202和作为ECC数据存储区域的ECC征候空间204。图8还示出了在系统可见存储器中,可寻址的存储器空间如何被划分为受保护和非受保护的区域。例如,缓存线A 206和缓存线B 208是受保护的区域,其数据需要ECC保护,并且如果压缩不成功,则相应的ECC数据与来自未压缩块的任何溢出数据一起被分别存储在ECC缓存线212中的区域214、216中。缓存线C 210是不受保护的区域,其数据不需要ECC保护。

ECC征候空间204的区域和系统可见存储器202的区域可以在启动时被编程,或者可以在运行时被动态地改变。在启动时为ECC数据存储保留的存储器区域被称为ECC征候空间204。这个区域的大小取决于压缩覆盖率和保护粒度。这个保留的空间204对系统的其余部分是不可见的,而只可由内嵌ECC压缩模块120使用。有利的是,一些实施例减少了为ECC征候空间204保留的存储器的量,因为相对较高的压缩覆盖率确保了大多数ECC数据被与压缩块一起存储。

如果压缩不成功(例如,如压缩标志所指示),则内嵌ECC压缩模块120将对存储器的受保护区域的读取/写入事务(缓存线访问)转换为两个单独的存储器请求。一个存储器请求是对实际数据缓存线的请求,另一个是对包含ECC值和溢出数据的缓存线的请求。基于传入的读取/写入地址,内嵌ECC压缩模块120通过使用简单的地址计算来确定与该缓存线相对应的ECC数据的地址。

例如,带内ECC压缩模块120拦截从存储器请求者104、106经由存储器架构108发送到存储器设备110的I/O请求。带内ECC压缩模块120确定与I/O请求相对应的逻辑地址的数据是否需要ECC保护。如果是,则带内ECC压缩模块120既在存储成功压缩数据的位置中对可见地址空间(即,系统可见存储器202)执行I/O,并且(如果需要的话)也对存储未压缩数据的ECC数据的ECC征候空间204执行I/O。

如果带内ECC压缩模块120确定与I/O请求相对应的逻辑地址的数据不需要ECC保护,则带内ECC压缩模块120在存储未压缩数据的位置中对可见地址空间(即,系统可见存储器202)执行I/O,但不需要对ECC征候空间204执行I/O,因为不存在用于数据的ECC数据。

图9图示了根据某些实施例示出具有最近征候缓冲器402的带内ECC压缩模块120的框图。

带内ECC压缩模块120内部的最近征候群缓冲器402可用于通过将最近使用的ECC数据和溢出数据存储到带内ECC压缩模块120中的内部结构中来进一步减少带宽开销,并且避免从存储器中读取数据所需要的额外读取请求。因为在读取存储在ECC缓存线212的区域中的ECC数据时,整个ECC缓存线212被读取,所以多个受保护区域的ECC数据可被存储在征候缓冲器404中,以期待未来的读取请求因为引用的局部性而被引导到相邻区域。

例如,如果读取请求是针对存储在缓存线A 206中的数据的,那么为了读取缓存线A 206的ECC数据214和溢出数据,整个ECC缓存线212被读取,并且缓存线B 208的ECC数据216和溢出数据也被读取。缓存线B 208的ECC数据216和溢出数据被存储在最近征候缓冲器402中,以期待未来的读取请求被引导到存储在缓存线B 208中的数据。

因为单个ECC缓存线包含32、16或8个其他数据线的ECC和溢出数据(基于ECC保护粒度),并且考虑到大多数基准测试表现出时间/空间上的局部性,所以很多时候同一个ECC缓存线可能会被从DRAM中重取得,这将大大增大整个DRAM带宽。

读取征候缓冲器402是一种完全关联性的结构,包含四个主要字段。DATA字段404,它持有64字节缓存线;标签字段406;消费者计数字段408,它指示出有多少消费者在等待来自请求者的这个DATA字段;以及最后是就绪字段410,每个就绪字段指示出数据是存在于读取征候缓冲器402中还是正在从存储器传输。

内嵌ECC模块DATA片段可具有一个读取和一个写入端口。消费者可以利用读取端口来从DATA区域读出数据,并且写入端口可被用于将返回的数据存储到读取征候缓冲器402中。标签查找可能只有一个端口用于地址匹配,并且它可能有以下响应之一:HIT指示连同条目位置和就绪比特,或者MISS指示连同读取征候缓冲器402中的分配和相应条目位置。每当对相应条目发生DATA端口读取时,消费者计数字段408就被递减,并且每当对该条目发生HIT时,它就被递增。

就绪字段410指示出数据在读取征候缓冲器402中是否可用,或者数据是否处于被从DRAM取得的过程中。对于每一个ECC保护的读取,一旦ECC元数据读取的地址被生成,它就会查找读取征候缓冲器标签406,以发现它在尝试访问的缓存线是否已经存在于读取征候缓冲器402中。

在某些实施例中,写入不会被缓存在读取征候缓冲器402中。如果写入在读取征候缓冲器402中的某条线上命中,则会使该线无效。然而,读取征候缓冲器402也可被实现为被读取和写入都访问的缓存。

图10图示了框图500,该框图根据某些实施例示出了带内ECC压缩模块120中的元素和在带内ECC压缩模块120内执行的操作。带内ECC压缩模块120在去到可寻址存储器的路径上既作为存储器请求者又作为响应者。

带内ECC压缩模块120包括输入端口502和输出端口504、写入数据缓冲器506、ECC和压缩计算单元540、地址范围查找516、读取未决队列518、写入未决队列520、仲裁器526、最近征候缓冲器控制器528、读取跟踪器532、读取数据缓冲器538、最近征候缓冲器536(对应于最近征候缓冲器402)、以及解压缩/ECC计算和纠正单元544。

经由输入端口502进入带内ECC压缩模块120的所有读取和写入都要经过ECC地址查找516,该查找516首先基于其地址517来确定给定的事务是否是ECC保护访问。执行危害校验,并且确定要向其发送读取或写入的队列。

带内ECC压缩模块120为读取和写入维护两个单独的队列518、520。这些队列在ECC和非ECC流量间被组合。所有队列中的每个队列条目都持有关于数据请求的信息;ECC事务是在请求赢得仲裁之后被生成的。这些队列还维护额外的元数据,以指示出请求是否是ECC保护的事务,当前是否由于对另一个事务的依赖而被阻塞,以及用来实现调度的其他元数据字段。

每个队列向主带内ECC模块仲裁器526呈现最老旧的、未被阻塞的事务。带内ECC压缩模块120、仲裁器526随后基于仲裁策略,一次选择一个请求。

对于每个进行中的ECC保护读取事务,如果数据未被压缩,则带内ECC压缩模块120跟踪两个独立读取的完成:数据读取和ECC/溢出读取。ECC检测和纠正操作544只能在两个读取事务的数据都被返回之后被执行。此外,带内ECC压缩模块120向每个受保护的读取或写入请求分配新的请求标签。ECC读取跟踪器532持有原始读取请求的标签,并且跟踪两个关联读取请求的完成。

读取数据缓冲器538包括单独的用于ECC保护的读取事务和未受保护的返回数据的存储装置。

最近征候缓冲器536存储最近访问的ECC数据。基于配置的保护粒度,最近征候缓冲器525中的每个条目持有32、16或8个缓存线的ECC数据。

在请求进入带内ECC压缩模块120之后,该事务的地址被与受保护的地址范围进行比较,以确定该请求是针对ECC保护的区域还是非保护的区域。然后,该请求被分配到未决请求队列之一中。

每个队列向主带内ECC压缩模块120调度器呈现最老旧的、未被阻塞的事务。带内ECC压缩模块120随后采用在“事务”级别进行调度的仲裁器526。对于受ECC保护的流量,压缩数据的事务由单次读取/写入构成,而未压缩数据的事务由两次读取/写入构成;对于未受保护的流量,事务由单次读取/写入构成。如果需要的话,ECC事务是在请求被仲裁器选择之后被生成的。

ECC数据请求地址是作为指向ECC数据存储区域的传入地址的函数来计算的。

在赢家事务被选择之后,带内ECC压缩模块120调度器确保它被原子式地发出。这本质上意味着,如果选择了对于未压缩数据的ECC保护事务,那么对数据和ECC的读取/写入都是被接连发出的,而没有来自另一事务的其他居间的读取/写入可被发出。

读取数据缓冲器(read data buffer,RDB)538是所有进行中受保护数据及其ECC值的临时存储装置。在发送请求之前,带内ECC压缩模块120可以确保在读取数据返回缓冲器中有预先分配的数据返回槽位,用于返回数据及其ECC数据。对于不受保护的流量,有专用的先入先出(first in first out,FIFO)数据结构。

ECC读取数据跟踪器532结构与最近征候缓冲器536同步操作,并且保持原始请求的头部信息,以及跟踪关于数据何时被返回并且准备好被消费的细节。

进入带内ECC压缩模块120的每个请求都要经过ECC地址查找,以确定它是否是受保护的事务。基于它是否受保护/不受保护和读取/全写入/部分写入,可以有许多类型的请求。

进入带内ECC压缩模块120的未受保护的读取被引导到读取未决队列518,该队列支持基于年龄的调度。对照写入未决队列520来校验读取地址,以查明与队列中等待的写入是否有任何依赖性。如果存在匹配,则较新的写入在队列中被阻塞,直到对同一地址的所有先前写入已被调度为止。当读取的数据从存储器控制器返回时,带内ECC压缩模块120校验标签信息以确定该数据是用于受保护的流量还是不受保护的流量。在不受保护的读取的情况下,读取的数据绕过ECC校验引擎,并且被发送到原始请求者。

进入带内ECC压缩模块120的未受保护的完全写入事务被引导到支持基于年龄的调度的写入未决队列520。该写入对照队列中的其他条目对地址进行校验,以查明它是否与到同一地址的较旧的写入和读取有任何依赖性,并且被阻塞,直到该依赖性得到解决为止。对于不受保护的写入和部分写入,带内ECC压缩模块120只是作为一个转发代理,不需要生成ECC。

与不受保护的读取类似,在分配时,受保护的读取事务查找写入未决队列520,以找到使它被阻塞的所有事务(数据/ECC对)。对于受保护的、未压缩的数据,受保护的读取保持被阻塞,直到它们看见到该地址的数据和ECC请求都从调度器发出为止。一旦读取请求赢得了仲裁,它就会校验最近征候缓冲器536,以查明针对该请求的ECC数据是否已经存在。在错失时,当最近征候缓冲器536未满时,在该缓冲器中分配新的条目,或者如果最近征候缓冲器已满,则最近征候缓冲器536中没有等待的消费者的条目之一将被取消分配,并且新的条目将被分配在该位置。条目号码被存储在读取跟踪器532中。同时,ECC数据事务被并行生成,并且在读取数据请求之后被立即发送。在命中时,最近征候缓冲器控制器528递增该条目的消费者计数器,并且还返回最近征候缓冲器536中存储该条目的条目号码。这个条目号码将被存储在ECC读取跟踪器532中,并且将在相应数据存在于最近征候缓冲器536中时被利用。在这种情况下,ECC数据事务不被生成,因为最近征候缓冲器已经准备好了数据。

在受保护的未压缩数据的返回路径上,带内ECC压缩模块120等待数据访问和ECC访问(如果不存在于最近征候缓冲器中)两者返回,然后才执行ECC检测/纠正操作。所需要的ECC数据的准备就绪情况将由读取跟踪器来跟踪。带内ECC压缩模块120需要确保在读取数据缓冲器/读取跟踪器结构中存在槽位,返回的事务在其可被发出到ECC逻辑之前可被保存在这些槽位中。为了解决这个问题,带内ECC压缩模块120在调度之时预先分配跟踪器中的条目。当受保护的读取数据返回时,带内ECC压缩模块120可以识别出它应当被写入在读取数据缓冲器538中的哪个位置。当ECC数据返回到带内ECC压缩模块120的最近征候群缓冲器536时,条目号码将被广播到读取跟踪器中的所有等待的消费者,并且它将校验其是否等于它正在等待的条目,因此能够跟踪ECC数据何时已到达并且准备好从最近征候群缓冲器536进行消费。一旦两个访问都在读取数据缓冲器538和最近征候缓冲器536中,带内ECC压缩模块120就会把请求调度到ECC计算和纠正逻辑534。然后,纠正后的数据被放置在适当的先进先出(FIFO)队列中,并且被发送给请求者。

当受保护的写入事务进入带内ECC压缩模块120时,请求信息被分配到写入未决队列中,并且数据被存储在写入数据缓冲器中。受保护的写入的ECC请求地址、值和字节使能不被存储,而是在事务被调度时实时生成的。带内ECC压缩模块120需要确保写入之后写入和读取之后写入的排序,以及最近征候缓冲器536中相应的ECC数据的无效(如果存在的话)。为了确保这一点,传入的写入请求将对照未决队列中的所有读取、跟踪器/读取数据缓冲器中等待的所有未完成读取、写入未决队列中的所有写入以及最近征候缓冲器中的有效条目进行校验。

带内ECC压缩模块120中的受保护部分写入事务本质上由两个受保护事务组成:受保护的未充满(underfill)读取事务,和受保护的完全写入事务。危害管理与完全写入的情况相同。然而,注意,在没有清除所有的危害和依赖性的情况下,不能发出未充满读取事务。带内ECC压缩模块120调度器需要意识到它正在发出未充满读取,并且跟踪器/读取数据缓冲器结构需要设置未充满字段,以及指示出写入队列中的哪个条目是未充满读取的接收者。一旦未充满读取完成,经纠正的数据就会被引导回到写入数据缓冲器,在那里它被与部分数据合并。在这个时点,写入未决队列现在将向带内ECC压缩模块120调度器呈现受保护的完全写入。

错误检测和纠正是通过在写入到存储器的每512、256或128个数据比特上添加16比特来完成的(基于保护粒度配置)。每个ECC比特的创建是通过根据汉明矩阵(hammingmatrix)对写入比特的某个组合进行异或来完成的。当读取数据时,通过将每个ECC比特与最初创建了它们的相同比特进行异或,来创建16比特征候。

征候分析显示出错误,它是否可纠正,以及如何纠正它。

带内ECC压缩模块120需要识别出ECC错误并且报告它们。每当ECC错误发生时,带内ECC压缩模块120就可生成错误消息给收集器模块。该错误消息指示出该错误是可纠正的还是不可纠正的错误,然后系统软件可以调查相应的错误日志寄存器,以发现关于该错误的更多细节。

示例1包括一种电子装置,包括衬底,以及与所述衬底耦合的逻辑,所述逻辑用于确定用以压缩数据块的基准值,其中所述数据块由第一数目的数据字构成,将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据,其中所述第二数目的数据字比所述第一数目的数据字至少少两个,以及将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中。

示例2包括如示例1所述的装置,其中,所述逻辑还用于在所述元数据中设置一个或多个数据索引字段,以指示出所述数据块的被用与所述基准值的各自差量值替换的数据字的各自位置。

示例3包括如示例1至2中任一项所述的装置,其中,所述逻辑还用于从所述数据块中识别具有适合于所述基准值的数据值的数据字,并且将所述基准值设置为所识别的数据字的数据值。

示例4包括如示例3所述的装置,其中,所述逻辑还用于在所述元数据中设置基准索引字段,以指示出所识别的数据字的位置。

示例5包括如示例1至4中任一项所述的装置,其中,所述逻辑还用于将所述基准值设置为固定数据字位置的数据值。

示例6包括如示例5所述的装置,其中,所述逻辑还用于在所述元数据中设置字段以指示出所述基准值是零还是所述固定数据字位置的数据值。

示例7包括如示例1至6中任一项所述的装置,其中,所述元数据包括错误纠正码信息。

示例8包括一种电子存储器系统,包括:控制器;用于存储数据块的存储器,所述数据块由第一数目的数据字构成;以及与所述控制器和所述存储器通信地耦合的逻辑,所述逻辑用于确定用以压缩所述数据块的基准值,将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据,其中,所述第二数目的数据字比所述第一数目的数据字至少少两个,以及将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中。

示例9包括如示例8所述的系统,其中,所述逻辑还用于:在所述元数据中设置一个或多个数据索引字段,以指示出所述数据块的被用与所述基准值的各自差量值替换的数据字的各自位置。

示例10包括如示例8至9中任一项所述的系统,其中,所述逻辑还用于:从所述数据块中识别具有适合于所述基准值的数据值的数据字,并且将所述基准值设置为所识别的数据字的数据值。

示例11包括如示例10所述的系统,其中,所述逻辑还用于:在所述元数据中设置基准索引字段,以指示出所识别的数据字的位置。

示例12包括如示例8至11中任一项所述的系统,其中,所述逻辑还用于:将所述基准值设置为固定数据字位置的数据值。

示例13包括如示例12所述的系统,其中,所述逻辑还用于:在所述元数据中设置字段以指示出所述基准值是零还是所述固定数据字位置的数据值。

示例14包括如示例8至13中任一项所述的系统,其中,所述元数据包括错误纠正码信息。

示例15包括一种压缩存储器的方法,包括:确定用以压缩数据块的基准值,其中,所述数据块由第一数目的数据字构成,将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据,其中所述第二数目的数据字比所述第一数目的数据字至少少两个,以及将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中。

示例16包括如示例15所述的方法,还包括:在所述元数据中设置一个或多个数据索引字段,以指示出所述数据块的被用与所述基准值的各自差量值替换的数据字的各自位置。

示例17包括如示例15至16中任一项所述的方法,还包括:从所述数据块中识别具有适合于所述基准值的数据值的数据字,并且将所述基准值设置为所识别的数据字的数据值。

示例18包括如示例17所述的方法,还包括:在所述元数据中设置基准索引字段,以指示出所识别的数据字的位置。

示例19包括如示例15至18中任一项所述的方法,还包括:将所述基准值设置为固定数据字位置的数据值。

示例20包括如示例19所述的方法,还包括:在所述元数据中设置字段以指示出所述基准值是零还是所述固定数据字位置的数据值。

示例21包括如示例15至20中任一项所述的方法,其中,所述元数据包括错误纠正码信息。

示例22包括至少一种非暂态机器可读介质,包括多个指令,所述多个指令响应于在计算设备上被执行,使得所述计算设备执行以下操作:确定用以压缩数据块的基准值,其中所述数据块由第一数目的数据字构成,将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据,其中所述第二数目的数据字比所述第一数目的数据字至少少两个,以及将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中。

示例23包括如示例22所述的至少一种非暂态机器可读介质,包括多个进一步的指令,所述进一步的指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:在所述元数据中设置一个或多个数据索引字段,以指示出所述数据块的被用与所述基准值的各自差量值替换的数据字的各自位置。

示例24包括如示例22至23中任一项所述的至少一种非暂态机器可读介质,包括多个进一步的指令,所述进一步的指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:从所述数据块中识别具有适合于所述基准值的数据值的数据字,并且将所述基准值设置为所识别的数据字的数据值。

示例25包括如示例24所述的至少一种非暂态机器可读介质,包括多个进一步的指令,所述进一步的指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:在所述元数据中设置基准索引字段,以指示出所识别的数据字的位置。

示例26包括如示例22至25中任一项所述的至少一种非暂态机器可读介质,包括多个进一步的指令,所述进一步的指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:将所述基准值设置为固定数据字位置的数据值。

示例27包括如示例26所述的至少一种非暂态机器可读介质,包括多个进一步的指令,所述进一步的指令响应于在所述计算设备上被执行,使得所述计算设备执行以下操作:在元数据中设置字段以指示出所述基准值是零还是所述固定数据字位置的数据值。

示例28包括如示例22至27中任一项所述的至少一种非暂态机器可读介质,其中,所述元数据包括错误纠正码信息。

示例29包括一种存储器压缩装置,包括:用于确定用以压缩数据块的基准值的设备,其中所述数据块由第一数目的数据字构成,用于将来自所述数据块的第二数目的数据字的原始值替换为与所述基准值的各自差量值以提供压缩数据的设备,其中所述第二数目的数据字比所述第一数目的数据字至少少两个,以及用于将与所述数据块相关联的元数据和所述压缩数据一起存储在所述数据块中的设备。

示例30包括如示例29所述的装置,还包括:用于在所述元数据中设置一个或多个数据索引字段以指示出所述数据块的被用与所述基准值的各自差量值替换的数据字的各自位置的设备。

示例31包括如示例29至30中任一项所述的装置,还包括:用于从所述数据块中识别具有适合于所述基准值的数据值的数据字的设备,以及用于将所述基准值设置为所识别的数据字的数据值的设备。

示例32包括如示例31所述的装置,还包括:用于在所述元数据中设置基准索引字段以指示出所识别的数据字的位置的设备。

示例33包括如示例29至32中任一项所述的装置,还包括:用于将所述基准值设置为固定数据字位置的数据值的设备。

示例34包括如示例33所述的装置,还包括:用于在所述元数据中设置字段以指示出所述基准值是零还是所述固定数据字位置的数据值的设备。

示例35包括如示例29至34中任一项所述的装置,其中,所述元数据包括错误纠正码信息。

术语“耦合”在本文中可被用于指所涉组件之间的任何类型的关系,无论是直接的还是间接的,并且可应用到电的、机械的、液体的、光的、电磁的、机电的或者其他连接。此外,除非另外指出,否则术语“第一”、“第二”等等在本文中可只被用于促进论述,而不带有特定的时间或先后意义。

就在本申请中和权利要求中使用的而言,由术语“…中的一个或多个”联接的项目的列表可意指所列出的术语的任何组合。例如,短语“A、B和C中的一个或多个”和短语“A、B或C中的一个或多个”两者都可意指A;B;C;A和B;A和C;B和C;或者A、B和C。可以用软件、固件和/或硬件和/或其任何组合来实现本文描述的系统的各种组件。例如,本文论述的系统或设备的各种组件可至少部分由计算SoC的硬件来提供,例如可存在于计算系统中,例如智能电话中。本领域技术人员可认识到,本文描述的系统可包括在相应附图中没有描绘的额外组件。例如,本文论述的系统可包括为了清晰起见而没有描绘的额外组件,例如比特流复用器或解复用器模块等等。

虽然本文论述的示例过程的实现方式可包括按图示的顺序执行示出的所有操作,但本公开不限于此,并且在各种示例中,本文的示例过程的实现方式可只包括示出的操作的子集,包括按与图示不同的顺序执行的操作,或者包括额外的操作。

此外,可响应于由一个或多个计算机程序产品提供的指令来执行本文论述的操作中的任何一个或多个。这种程序产品可包括提供指令的信号承载介质,这些指令在被例如处理器执行时,可提供本文描述的功能。可在任何形式的一个或多个机器可读介质中提供计算机程序产品。因此,例如,包括一个或多个图形处理单元或处理器核心的处理器可响应于由一个或多个机器可读介质输送到处理器的程序代码和/或指令或指令集而执行本文的示例过程的一个或多个块。一般而言,机器可读介质可以以程序代码和/或指令或指令集的形式输送软件,所述程序代码和/或指令或指令集可使得本文描述的任何设备和/或系统实现本文论述的操作的至少一些部分和/或如本文所述的设备、系统或任何模块或组件的任何部分。

按照在本文描述的任何实现方式中使用的,术语“模块”指的是被配置为提供本文描述的功能的软件逻辑、固件逻辑、硬件逻辑和/或电路的任何组合。软件可被实现为软件封装、代码和/或指令集或指令,并且如本文描述的任何实现方式中使用的“硬件”例如可单一地或者组合地包括硬连线电路、可编程电路、状态机电路、固定功能电路、执行单元电路、和/或存储被可编程电路执行的指令的固件。模块可集体地或者个体地被实现为形成更大系统的一部分的电路,例如集成电路(IC)、片上系统(SoC),等等。

可以使用硬件元素、软件元素或者两者的组合来实现各种实施例。硬件元素的示例可包括处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器,等等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组,等等。软件的示例可包括软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号,或者这些的任何组合。确定一实施例是否使用硬件元素和/或软件元素来实现可根据任何数目的因素而变化,例如期望的计算速率、功率水平、耐热性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度、成本、以及其他设计或性能约束。

至少一个实施例的一个或多个方面可由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些代表性指令在被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为IP核心的表现形式可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。

虽然已参考各种实现方式描述了本文记载的某些特征,但此描述并不旨在被从限制意义上来解释。因此,对本公开所属领域的技术人员来说显而易见的对本文描述的实现方式的各种修改以及其他实现方式,被认为属于本公开的精神和范围内。

将会认识到,实施例不限于这样描述的实施例,而是可在带有修改和变更的情况下实现,而不脱离所附权利要求的范围。例如,上述实施例可包括特征的特定组合。然而,上述实施例不限于此,并且在各种实现方式中,上述实施例可包括仅执行这种特征的子集,执行这种特征的不同顺序,执行这种特征的不同组合,和/或执行除明确列出的那些特征以外的附加特征。因此,应当参考所附权利要求以及这种权利要求有权享有的等同物的完整范围来确定实施例的范围。

技术分类

06120114735767