基于汉明距离的对数字的二进制表示的制作方法

文档序号:16262946发布日期:2018-12-14 21:43阅读:379来源:国知局
基于汉明距离的对数字的二进制表示的制作方法

本公开涉及用于对数字(number)进行数字式(digital)编码和解码的技术。

背景技术

数字的一种表示是用于表示浮点数的ieee754标准。在一个实现方式中,参考图1,浮点数10具有如下这样的二进制表示:一位用于符号12,“e”位用于指数14,并且“m”位用于尾数16。因此,浮点数10可以由e+m+1位的串来表示。此位串可以被存储到存储器和/或在数字计算机内处理。



技术实现要素:

一个实施例包括一种方法,其包括以下步骤。控制电路访问区间中的各个数字的数字表示。该区间具有覆盖该区间的2^n个非重叠子区间。控制电路将各个数字分配到2^n个非重叠子区间中的一个。根据各个数字在区间内的位置执行分配。控制电路将各个数字中的每个编码为按照汉明权重在区间上排序的2^n个二进制串中的所选的二进制串。编码基于所分配的子区间。控制电路将所选的二进制串存储在非暂时性存储装置中。在一个实施例中,非暂时性存储装置是非易失性存储装置。

一个实施例包括一种装置,其包括非易失性存储装置和用于访问存储在非暂时性存储装置中的数字的数字表示的构件。所述数字在区间中,该区间包括覆盖该区间的2^n个非重叠子区间。2^n个子区间从该区间的第一端到该区间的第二端排序。所述装置包括用于将各个数字分配到2^n个非重叠子区间中的一个的部件,包括用于根据各个数字在该区间内的位置进行分配的部件。所述装置包括用于将各个数字中每个编码为按照汉明权重在该区间上排序的2^n个二进制串中的所选的二进制串的部件。所述装置包括用于将所选的二进制串存储在非易失性存储装置中的部件。

附图说明

图1是浮点数的传统二进制表示。

图2a是可以实践实施例的存储器设备的功能框图。

图2b是示例存储器系统的框图,其描绘了控制器的更多细节。

图3描绘了将数字映射到二进制串的一种朴素的方式。

图4描绘了将数字映射到二进制串的一个实施例。

图5a描述了根据二进制串的汉明权重将二进制串聚类(cluster)为组的一个实施例。

图5b是图示区间[a,b)中的数字到二进制串的映射的图。

图6a是将数字映射到二进制串的处理的一个实施例的流程图。

图6b是将量化的数字映射到二进制串的处理的一个实施例的流程图。

图7a-7b是图示浮点数到二进制串的映射中的失真的图。

图8示出了二进制串中的失真的直方图。

图9是被配置为在浮点数与二进制串之间编码/解码的系统的一个实施例的图。

具体实施方式

这里描述了用于对数字进行编码和解码的技术。在一个实施例中,浮点数被表示为二进制串。二进制串可以以如下这样的方式编码:如果一位翻转,则由二进制串表示的浮点数的平均失真相对小。类似地,二进制串可以以如下这样的方式编码:如果一位翻转,则由二进制串表示的浮点数的最大失真相对小。例如,平均和/或最大失真可以在诸如机器学习算法的应用的容限内。而且,如果在二进制串中使用更多位,则由于位翻转导致的平均失真可能下降。同样,如果在二进制串中使用更多位,则由于位翻转导致的最大失真可能下降。

用于将数字表示为二进制串的一些传统技术的弱点在于:如果二进制串中的单个位翻转,则这可能导致所表示的数字的非常大的失真。考虑使用图1的传统浮点表示的情况。如果指数14中的最高有效位翻转,则浮点数可以从大约最大浮点数变为可以表示的几乎最低浮点数(绝对值)。例如,如果指数有11位,那么数字可以从大约2^1023翻转到2^0(假设指数中的最高有效位的1到0翻转)。其它位翻转也可能导致用位串表示的浮点数的非常大的改变。

当位串被存储到存储器时,读取回位串具有小但有限的的概率不会产生旨在存储在其中的相同信息。例如,一些存储器单元基于存储在存储器单元的电荷存储区中的电荷而被编程为两个或更多个数据状态中的一个。存储器单元可以用作晶体管,其中电荷量控制存储器单元晶体管的阈值电压。随着时间的推移,存储器单元中存储的电荷量可能改变,从而导致存储器单元的阈值电压的改变。作为另一个示例,一些存储器单元基于存储器单元的电阻而被编程为两个或更多个数据状态中的一个。随着时间的推移,存储单元的电阻可能改变。在任一情况下,被表示的数据状态都可能改变。数据状态的这种改变可能导致“位翻转”。通过位翻转,这意味着被编程为“1”的位被读取回为“0”,或者被编程为“0”的位被读取回为“1”。

在一种技术中,可以将冗余位编程到存储器单元中以从数据状态的潜在改变中恢复。作为一个示例,一组存储器单元可以用基于纠错码(ecc)确定的码字来编程。码字可以冗余地表示数据。例如,为了存储一页512字节的数据,可以使用一些存储器单元来存储实际的512字节的数据,并且可以使用其它存储器单元来存储纠错码。使用更大数目的冗余位有助于从更多位翻转中恢复。因此,使用更大数目的冗余位是实现更强ecc的一种方式。

因此,对潜在的位翻转的一种可能的解决方案是当将位串存储到存储器时使用强纠错码(ecc)。例如,存储器系统中的存储器控制器可以当将浮点数(表示为位串)存储到存储器系统中的存储器阵列时使用强ecc。然而,需要存储附加的冗余位以提供强ecc。对于存储器非常密集的应用,使用强ecc是缺点。

在向或从存储器传输位串期间,位翻转也可能产生。避免或至少减少这种传输位翻转的一种技术是将传输速率保持在安全的数据传输速率内。然而,一些应用可能需要非常大量的数据。保持在安全的数据传输速率内可能降低应用的效率(productiveness)。

在一些实施例中,表示区间[a,b)中的数字的二进制串基于汉明权重而被聚类。例如,可以将2^n个二进制串放置到基于它们的汉明权重排序的n+1个组中。每个组可包含具有相同汉明权重的二进制串。在一个实施例中,区间中的数字被分配到2^n个子区间中的一个。例如,数字可以被均匀地量化为2^n个子区间中的一个。例如,区间[a,b)中的浮点数可以被均匀地量化为区间[a,b)中的2^n个子区间。这2^n个子区间(或面元(bin))可以被映射到根据汉明权重在该区间上排序的2^n个二进制串。因此,数字可以被分配到2^n个二进制串中的一个。这样做在所分配的二进制串中存在位翻转的情况下,可以减小数字的失真。注意,失真可以相对于区间[a,b)的尺寸来定义。例如,如果区间是[0,1),那么由于位翻转导致的.5的误差可以被定义为50%失真。

注意,这里,“区间”(或“子区间”)可以包含任何类型的数字。区间可以包括但不限于区间中的所有实数的集合、区间中的所有浮点数的集合、区间中的所有整数的集合,等等。

在一个实施例中,可以在不使用ecc的情况下,或者替代地,通过使用更少的冗余位用于ecc,来将二进制串存储到存储器。在二进制串中可能存在一些将存在翻转的机会,但是一些应用可能能够容忍这样的位翻转,因为由于位翻转导致的最大和/或平均失真小于该区间的特定百分比。

在一个实施例中,二进制串用于存储用于机器学习算法的参数,诸如,神经网络中的权重。神经网络可以模仿人脑在对象识别、决策制定等中的功能。机器学习可能需要大量的参数,诸如,神经网络中的权重。参数可以存储在非易失性存储装置(也称为非易失性存储器)中,并且当要进行预测时被读取到处理器中。如上所述,在存储或传输参数的二进制表示期间,存在较小的位将翻转的机会。纠错码可以用来防止位翻转,但是以附加的存储为代价。而且,需要附加的时间来读取和处理冗余位。ecc所引起的开销可能限制可以处理多少信息。例如,ecc所引起的开销可能限制系统例如在对象识别中可以处理每秒多个帧。这里描述的技术可以改善机器学习应用的性能。注意,这里描述的技术不限于机器学习应用。

这里描述的技术可以与各种类型的存储器系统一起使用。然而,将理解,这里描述的技术不限于存储器系统。图2a是可以实践实施例的存储器设备的功能框图。存储器系统100可以包括一个或多个存储器裸芯108。存储器裸芯108包括存储器单元的存储器结构126(诸如,存储器单元的阵列)、控制电路系统110和读取/写入电路128。存储器结构126可经由行解码器124通过字线且经由列解码器132通过位线寻址。读取/写入电路128包括多个感测块sb1、sb2、...、sbp(感测电路系统)并且允许一页存储器单元被并行地读取或编程。通常,控制器122被包括在与一个或多个存储器裸芯108相同的存储器系统100(例如,可移动存储卡)中。命令和数据经由数据总线120在主机140与控制器122之间且经由线路118在控制器与一个或多个存储器裸芯108之间传递。

存储器结构可以是2d或3d的。存储器结构可以包括存储器单元的一个或多个阵列,包括3d阵列。存储器结构可以包括单片三维存储器结构,在单片三维存储器结构中,多个存储器级形成在单个衬底(诸如晶片)之上(并且不在单个衬底(诸如晶片)中),而没有中间衬底。存储器结构可以包括任意类型的非易失性存储器,其整体地形成在存储器单元的阵列的一个或多个物理层中,所述存储器单元的阵列具有设置在硅衬底之上的有源区域。存储器结构可以在具有与存储器单元的操作相关联的电路系统的非易失性存储器设备中,无论相关联的电路系统在衬底之上或在衬底内。

通常,在单片三维存储器阵列中,一个或多个存储器装置级形成在单个衬底之上。可选地,单片三维存储器阵列还可以具有至少部分地在单个衬底内的一个或多个存储器层。作为非限制性示例,衬底可以包括诸如硅的半导体。在单片三维阵列中,构成阵列的每个存储器装置级的层通常形成在阵列的在下面的(underlying)存储器装置级的层上。然而,单片三维存储器阵列的相邻存储器装置级的层可以在存储器装置级之间共享、或者在存储器装置级之间具有中间层。

而且,二维阵列可以分开地形成、然后封装在一起,以形成具有多层存储器的非单片存储器设备。例如,非单片堆叠式存储器可以通过在分离的衬底上形成存储器级、然后将存储器级上下叠置来构建。在堆叠之前,可以将衬底减薄、或者从存储器装置级移除衬底,但是,由于存储器装置级最初形成在分离的衬底上,所以所得到的存储器阵列不是单片三维存储器阵列。此外,多个二维存储器阵列或三维存储器阵列(单片或非单片)可以形成在分离的芯片上、然后封装在一起,以形成堆叠式芯片存储器设备。

对于存储器元件的操作和与存储器元件的通信,通常需要相关联的电路系统。作为非限制性示例,存储器设备可具有用于控制和驱动存储器元件以完成诸如编程和读取的功能的电路系统。此相关联的电路系统可以在与存储器元件相同的衬底上、和/或在单独的衬底上。例如,用于存储器读取-写入操作的控制器可以位于单独的控制器芯片上、和/或在与存储器元件相同的基板上。

控制电路系统110与读取/写入电路128合作以对存储器结构126执行存储器操作,并且包括状态机112、片上地址解码器114和功率控制模块116。状态机112提供存储器操作的芯片级控制。存储区113可以被提供用于用来操作存储器设备的参数,诸如,用于不同行或其它组的存储器单元的编程参数。这些编程参数可以包括位线电压和验证电压。

片上地址解码器114在由主机或存储器控制器使用的硬件地址与由解码器124和132使用的硬件地址之间提供地址接口。功率控制模块116控制在存储器操作期间供应给字线和位线的功率和电压。功率控制模块116可以包括用于3d配置中的字线层(wll)的驱动器、sgs和sgd选择门(gate)、以及源极线。在一种方法中,感测块可以包括位线驱动器。sgs选择是在nand串的源极端处的栅极晶体管,并且sgd选择门是在nand串的漏极端处的晶体管。

在一些实现方式中,可以组合一些组件。在各种设计中,除存储器结构126之外的一个或多个组件(单独或组合地)可被认为是被配置为执行这里描述的动作的至少一个控制电路。例如,控制电路可以包括控制电路系统110、状态机112、解码器114/132、功率控制模块116、感测块sb1、sb2、...、sbp、读取/写入电路128、控制器122等中的任何一个或组合。

片外控制器122可以包括处理器122c和诸如rom122a和ram122b的存储设备(存储器)。存储设备包括诸如指令集的代码,并且处理器可操作来执行该指令集以提供这里描述的功能性。替代地或附加地,处理器可以在一条或多条字线中访问来自存储器结构的存储设备126a(诸如,存储器单元的保留区域)的代码。

控制器使用该代码来访问存储器结构,诸如,用于编程、读取和擦除操作。该代码可以包括引导代码和控制代码(例如,指令集)。引导代码是在引导或启动处理期间初始化控制器并使控制器能够访问存储器结构的软件。控制器可以使用该代码来控制一个或多个存储器结构。一经通电,处理器122c就从rom122a或存储设备126a取出引导代码以用于执行,并且引导代码初始化系统组件并将控制代码加载到ram122b中。一旦控制代码被加载到ram中,它就由处理器执行。控制代码包括执行诸如控制和分派存储器、对指令的处理进行优先级排序、以及控制输入和输出端口的基本任务的驱动程序。在一些实施例中,控制器122将浮点数编码为二进制串。控制器122连同控制电路系统110以及读取/写入电路128一起可以将二进制串存储在存储器阵列126中。

除nand闪存之外,还可以使用其它类型的非易失性存储器。半导体存储器设备包括诸如动态随机存取存储器(“dram”)或静态随机存取存储器(“sram”)设备的易失性存储器设备、诸如电阻式随机存取存储器(“reram”)、电可擦除可编程只读存储器(“eeprom”)、闪存(其也可以认为是eeprom的子集)、铁电随机存取存储器(“fram”)和磁阻随机存取存储器(“mram”)的非易失性存储器设备、以及能够存储信息的其它半导体元件。每种类型的存储器设备可以具有不同的配置。例如,闪存设备可以以nand或nor配置来配置。

存储器设备可以由无源和/或有源元件以任何组合形成。通过非限制性示例,无源半导体存储器元件包括reram设备元件,其在一些实施例中包括诸如反熔丝或相变材料的电阻率切换存储元件、以及可选地诸如二极管或晶体管的操纵元件。进一步通过非限制性示例,有源半导体存储器元件包括eeprom和闪存设备元件,其在一些实施例中包括包含电荷存储区的元件,诸如,浮栅、导电纳米颗粒或电荷存储介电材料。

多个存储器元件可以被配置为使得它们串联连接或者使得每个元件可单独访问。通过非限制性示例,nand配置(nand存储器)中的闪存设备通常包含串联连接的存储器元件。nand串是包括存储器单元和选择栅极晶体管的串联连接的晶体管的集合的示例。

nand存储器阵列可被配置为使得阵列由存储器的多个串组成,其中串由共享单条位线且作为组被访问的多个存储器元件组成。替代地,存储器元件可以被配置为使得每个元件都可单独访问,例如,nor存储器阵列。nand和nor存储器配置是示例性的,并且可以另外配置存储器元件。

位于衬底内和/或上方的半导体存储器元件可以以二维或三维布置,诸如,二维存储器结构或三维存储器结构。

在二维存储器结构中,半导体存储器元件被布置在单个平面或单个存储器装置级中。通常,在二维存储器结构中,存储器元件布置在基本上平行于支撑存储器元件的衬底的主表面而延伸的平面中(例如,在x-y方向平面中)。衬底可以是在其上方或在其中形成存储器元件的层的晶片,或者衬底可以是在形成存储器元件之后附接到存储器元件的载体衬底。作为非限制性示例,衬底可以包括诸如硅的半导体。

存储器元件可以以有序阵列(诸如,以多个行和/或列)布置在单个存储器装置级中。然而,存储器元件可以以非规则或非正交配置来布置。存储元件可以各自具有两个或更多个电极或接触线,诸如,位线和字线。

三维存储器阵列被布置为使得存储器元件占据多个平面或多个存储器装置级,由此形成三维结构(即,在x、y和z方向上的结构,其中z方向基本上垂直于衬底的主表面,并且x和y方向基本上平行于衬底的主表面)。

作为非限制性示例,三维存储器结构可以被垂直地布置为多个二维存储器装置级的堆叠体。作为另一个非限制性示例,三维存储器阵列可以被布置为多个垂直列(例如,基本上垂直于衬底的主表面,即,在y方向上,而延伸的列),其中每列具有多个存储器元件。列可以以二维配置(例如,在x-y平面中)来布置,从而导致存储器元件的三维布置,其中元件在多个垂直堆叠的存储器平面上。存储器元件的其它三维配置也可以构成三维存储器阵列。

通过非限制性示例,在三维nand存储器阵列中,存储器元件可耦合在一起以在单个水平(例如,x-y)存储器装置级内形成nand串。替代地,存储器元件可耦合在一起以形成横跨多个水平存储器装置级的垂直nand串。可以设想其它三维配置,其中一些nand串包含单个存储器级中的存储器元件,而其它串包含跨越多个存储器级的存储器元件。

本领域技术人员将认识到,此技术不限于所描述的二维和三维示例性结构,而是涵盖如这里描述的且如由本领域技术人员所理解的技术的精神和范围内的所有相关存储器结构。

图2b是示例存储器系统100的框图,其描绘了控制器122的更多细节。在一个实施例中,图2b的系统是固态驱动器。如这里所使用的,存储器控制器是管理存储在存储器上的数据并且与诸如计算机或电子设备的主机通信的设备。除这里描述的特定功能性之外,存储器控制器还可以具有各种功能性。例如,存储器控制器可以对闪存进行格式化,以确保存储器正常运行,映射出不良的存储器单元,并分派备用存储器单元以替换未来的故障单元。备用单元的某个部分可用于保持固件以操作闪存控制器并实现其它特征。在操作中,当主机需要从存储器读取数据或向存储器写入数据时,主机将与存储器控制器通信。如果主机提供数据要被读取/写入的逻辑地址(la),则存储器控制器可以将从主机接收的逻辑地址转换为存储器中的物理地址(替代地,主机可以提供物理地址)。存储器控制器还可以执行各种存储器管理功能,诸如但不限于磨损均衡(对写入进行分布(distribute),以避免磨损存储器的特定块,否则所述特定块将被重复地写入)和垃圾收集(在块已满之后,只将数据的有效页移动到新块,如此,已满的块可以被擦除和重用)。

控制器122与非易失性存储器裸芯108之间的接口可以是任何合适的快闪接口。在一个实施例中,存储器系统100可以是基于卡的系统,诸如,安全数字(sd)或微型安全数字(微型sd)卡。在替代实施例中,存储器系统100可以是嵌入式存储器系统的一部分。例如,闪存可以被嵌入在主机内,诸如,以安装在个人计算机中的固态盘(ssd)驱动器的形式。

在一些实施例中,非易失性存储器系统100包括在控制器122与非易失性存储器裸芯108之间的单个通道,这里描述的主题不限于具有单个存储器通道。例如,在一些存储器系统架构中,取决于控制器的能力,在控制器与存储器裸芯之间可能存在2、4、8或更多个通道。在这里描述的任何实施例中,即使在附图中示出单个通道,在控制器与存储器裸芯之间也可以存在多于单个通道。

如图2b所示,控制器122包括与主机接口的前端模块208、与一个或多个非易失性存储器裸芯108接口的后端模块210、以及执行现在将详细描述的功能的各种其它模块。

图2b所示的控制器122的组件可以采取如下形式:例如,被设计用于与其它组件一起使用的封装功能硬件单元(例如,电子电路);可由通常执行相关功能的特定功能的(微)处理器或处理电路系统(或一个或多个处理器)执行的程序代码(例如,软件或固件)的一部分;或与较大系统接口的独立硬件或软件组件。例如,每个模块可以包括专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、分立电路的组合、门、或任何其它类型的硬件、或者其组合。替代地或附加地,每个模块可以包括或包含存储在处理器可读设备(例如,存储器)中的软件,以对用于控制器122的一个或多个处理器进行编程以执行这里描述的功能。图2b所示的架构是可以(或可以不)使用图2b所示的控制器122的组件(即,ram、rom、处理器)的一个示例实现方式。

控制器122可以包括修复电路系统212,其用于修复存储器的存储器单元或块。再次参考控制器122的模块,缓冲器管理器/总线控制器214管理随机存取存储器(ram)216中的缓冲器并控制控制器122的内部总线仲裁。只读存储器(rom)218存储系统引导代码。虽然在图2b中被图示为与控制器122分开定位,但是在其它实施例中,ram216和rom218中的一个或两个可以位于控制器内。在其它实施例中,ram和rom的部分可以位于控制器122内和控制器外部。此外,在一些实现方式中,控制器122、ram216和rom218可以位于单独的半导体裸芯上。

前端模块208包括提供与主机或下一级存储控制器的电接口的主机接口220和物理层接口(phy)222。主机接口220的类型的选择可以取决于正在使用的存储器的类型。主机接口220的示例包括但不限于sata、sataexpress、sas、光纤通道、usb、pcie和nvme。主机接口220通常便利于数据、控制信号和定时信号的传递。

在一个实施例中,前端模块208包含非暂时性存储装置。非暂时性存储装置可以是易失性或非易失性的。例如,非暂时性存储装置可以包括但不限于缓冲器、寄存器、ram。在一个实施例中,非暂时性存储装置用于存储从主机接收的数字的数字表示。例如,主机可以发送浮点数,其可以存储在前端模块208中的非临时性存储装置中。注意,从主机接收的数字的数字表示可以存储在控制器122中其它地方的非暂时性存储装置中。

后端模块210包括纠错控制器(ecc)引擎224,其对从主机接收的数据字节进行编码,并对从非易失性存储器读取的数据字节进行解码和纠错。ecc引擎224具有一个或多个解码器244和一个或多个编码器256。在一个实施例中,ecc引擎224包括低密度奇偶校验(ldpc)解码器。在一个实施例中,解码器244包括硬解码器和软解码器。一个或多个解码器244的输出可以被提供给主机。

在一个实施例中,ecc引擎224将浮点数编码为二进制串,如这里所述的。注意,ecc引擎224不一定将纠错码添加到二进制串,但那是一种可能性。ecc引擎224还可以将位串解码回到浮点数。在一个实施例中,ecc引擎224包含非暂时性存储装置。非暂时性存储装置可以是易失性或非易失性的。例如,非暂时性存储装置可以包括但不限于缓冲器、寄存器、ram。在一个实施例中,ecc引擎224中的非暂时性存储装置用于存储二进制串和浮点数。注意,二进制串和浮点数可以存储在控制器122中其它地方的非暂时性存储装置中。例如,浮点数和二进制串可以存储在ram216中,以例如便利于如这里所述的编码和解码处理。

命令定序器226生成要传输到非易失性存储器裸芯108的命令序列,诸如,编程和擦除命令序列。raid(独立裸芯冗余阵列)模块228管理raid奇偶校验的生成和故障数据的恢复。raid奇偶校验可以用作以用于被写入到非易失性存储器系统100中的数据的附加的完整性保护等级。在一些情况下,raid模块228可以是ecc引擎224的一部分。注意,raid奇偶校验可以作为额外的一个或多个裸芯而被添加,如由通用名称暗示的,但是,raid奇偶校验也可以被添加在现有裸芯内,例如,作为额外的平面、或额外的块、或块内额外的wl。存储器接口230向非易失性存储器裸芯108提供命令序列,并从非易失性存储器裸芯108接收状态信息。在一个实施例中,存储器接口230可以是双倍数据速率(ddr)接口。

图2b所示的系统100的附加组件包括介质管理层238,其执行非易失性存储器裸芯108的存储器单元的损耗均衡。系统100还包括其它分立组件240,诸如,外部电接口、外部ram、电阻器、电容器或可以与控制器122接口的其它组件。在替代实施例中,物理层接口222、raid模块228、介质管理层238和缓冲器管理/总线控制器214中的一个或多个是在控制器122中不是必需的可选组件。

介质管理层(mml)238可以被集成为可以处置误差并与主机接口的管理的一部分。在一个实施例中,mml238是快闪转译层。具体地,mml可以负责nand管理的内部。具体地,mml238可以包括存储器设备固件中的算法,其将来自主机的写入转译成写入到裸芯108的存储器。可能需要mml238,因为:1)存储器可能具有有限的耐用性;2)存储器可能只能写入多页;和/或3)除非作为块被擦除,否则存储器可能不能写入。mml238了解存储器的这些限制,其可能对主机不可见。因此,mml238尝试将来自主机的写入转译成写入到存储器中。

控制器122可以与一个或多个存储器裸芯108接口。在一个实施例中,控制器122和多个存储器裸芯(一起包括非易失性存储系统100)实现固态驱动器(ssd),其可以模拟、取代或代替主机内部的硬盘驱动器而用作nas设备等。附加地,不需要使ssd作为硬盘驱动器而工作。

图3描绘了示出将数字映射到二进制串的一种朴素的方式的表300。在此示例中,数字可以是浮点数。在表300中,存在16个二进制串。数字空间可以是区间[0,1)中的数字。例如,数字空间可以是区间[0,1)中的所有实数。注意,数字可以被分配到16个子区间。例如,表300包含浮点数的集合[0.0,0.0625,...0.9375}。此集合包含16个值,其可能被称为“索引”。

表300中的二进制串根据它们的二进制值进行朴素地排序。该集合中的每个浮点数都被映射到一个二进制串。例如,浮点值“0.0”被映射到二进制串“0000”,浮点值“0.0625”被映射到二进制串“0001”。

表300中的每列中的两个值被圈起以图示二进制串中单个位翻转的影响。如果值“1111”要变为“0111”,则这意味着所表示的浮点数从0.9375变为0.4375。这表示区间[0,1)内50%的改变。此改变(或误差)在这里被称为“失真”。因此,单个位翻转会导致非常高的失真。存在也可能具有50%的失真的其它情况。例如,如果值“0010”要变为“1010”,则这意味着所表示的浮点数从0.125变为0.625。这再次表示区间的50%的改变。因此,单个位翻转会导致非常高的失真。

另一个观察是,即使更多位用于二进制串,失真也不会减小。例如,考虑如果32位用于二进制串的情况。在此情况下,如果二进制串的最高有效位翻转,则这再次导致基本上50%的失真。

图4是图示将数字映射到二进制串的一个实施例的表400。“二进制串”也可以被称为“二进制向量”。在此示例中,表400具有16个二进制串。数字空间是区间[0,1)。数字空间可以是区间[0,1)中的所有实数。然而,数字空间不需要包含区间[0,1)中的所有实数。根据一个实施例,区间[0,1)中的数字可以被均匀地量化到16个子区间。这16个子区间可以对应于16个二进制串。换句话说,表400描绘了子区间到二进制串的一种可能的映射。该映射可用于将浮点数映射到二进制串。例如,该映射可用于根据ieee754标准将浮点数的二进制表示映射为二进制串。注意,表400中的映射相当简单,因为在每个串中只有四位。如下面将说明的,在二进制串中使用更多位可以减小平均失真。

在表400中,二进制串可以根据它们的汉明权重来排序。这实际上根据区间[0,1]上的二进制串的汉明权重对区间[0,1]上的二进制串进行排序。在表400中,汉明权重为零的二进制串是第一个。通过“第一个”,这意味着它是区间[0,1)下端的第一个二进制串。按顺序接下来是汉明权重为1的所有二进制串(例如,0001、0010、0100、1000)。按顺序接下来是汉明权重为2的所有二进制串(例如,0011、0101、0110、1001、1100)。按顺序接下来是汉明权重为3的所有二进制串(例如,0111、1011、1101、1110)。按顺序接下来是汉明权重为4的二进制串(1111)。因此,在区间[0,1)的上端的最后一个二进制串。还要注意的是,根据汉明权重对二进制串进行排序时,那些具有相同汉明权重的二进制串可以聚类在同一组中。这里,这样的组被称为汉明组。

每列中的两个条目被圈起以图示单个位翻转的影响。如果值“1111”要变为“0111”,则这意味着所表示的浮点数从0.9375变为0.6875。这表示相对于区间的尺寸的25%的改变。因此,单个位翻转导致比图3的朴素表示的类似情况下更低的失真。存在也可以受益的其它情况。例如,如果值“0010”要变为“1010”,则这意味着所表示的浮点数从0.125变为0.5625。这表示相对于区间的尺寸的43.72%的改变。因此,还存在相对于图3的朴素表示的一些改进。注意,将不一定对所有情况都存在改进。然而,对二进制串使用更多位可以减小平均失真。而且,对二进制串使用更多位可以减小最大失真。由于通常多于四位将用于二进制串,所以相对于图3的朴素表示,平均和最大失真可以显著改善。

还要注意的是,图1的浮点数表示也遭遇使用更多位可能不会减小平均或最大失真的问题。例如,如果指数具有11位,那么所表示的值可能从大约2^1023变为2^0(假设指数中的最高有效位的1到0翻转)。如果指数具有8位,那么所表示的值可能从大约2^127变为2^0(假设指数中的最高有效位的1到0翻转)。注意,相对于区间中的数字的尺寸,当使用更多位用于指数时,失真不会下降。

图5a描绘了根据500个二进制串的汉明权重将500个二进制串聚类成汉明组502的一个实施例。在一个实施例中,用于映射的二进制串的集合包括长度为“n”的所有2^n个二进制串。取决于实现方式,“n”可能是16、32、64、128或某个其它值。在此示例中,二进制串至少具有八位。二进制串被聚类为n+1个汉明组502(0)—502(n)。汉明组502(0)包含汉明权重为0的长度为n的所有二进制串。汉明组502(1)包含汉明权重为1的长度为n的所有二进制串。汉明组502(2)包含汉明权重为2的长度为n的所有二进制串。汉明组502(3)包含汉明权重为3的长度为n的所有二进制串。汉明组502(n)包含汉明权重为n的长度为n的所有二进制串。未描绘其它汉明组502,以便不使该图模糊。

注意,在图5a中,基于汉明权重对二进制串进行聚类。这是基于到长度为“n”的基本二进制串的汉明距离的聚类的一个示例。当基本二进制串全部为零时,聚类基于汉明权重。然而,聚类可以相对于另一个基本二进制串(诸如,所有1的串)而执行。这里,“汉明组”被定义为一组各自长度为“n”的二进制串,其各自具有相同的到长度为“n”的基本二进制串的汉明距离。

继续讨论图5a,注意,一位的位翻转对应于从一个汉明组502到相邻汉明组的改变。例如,汉明组502(2)中的任何二进制串的一位的位翻转将把二进制串放置到汉明组502(1)或汉明组502(3)中。还要注意的是,如果在二进制串中存在更多位,那么将存在更多汉明组。例如,对于长度为n的串,存在n+1个汉明组502。实际上,具有更多汉明组倾向于在位翻转的情况下减小失真。

图5b是图示区间[a,b)中的数字到二进制串的映射的图。在一个实施例中,该区间针对于[a,b)中的实数。在一个实施例中,该区间针对于[a,b)中的浮点数。该区间由x轴表示,并且被分成n+1个子区间,其中几个子区间被标记(不是所有的子区间都被描绘)。子区间包括[a,a+r1)、[a+r1,a+r2)、[a+r2,a+r3)、[a+r3,a+r4)、...[a+r(n-1),a+rn)、[a+rn,b)。这些子区间中的每个对应于二进制串的一个汉明组502。例如,子区间[a,a+r1)对应于汉明组502(0),子区间[a+r1,a+r2)对应于汉明组502(1),等等。在一个实施例中,系统将子区间中的数字映射到对应的汉明组502中的某个二进制串。注意,由于存在更多的汉明组502,所以这可以有助于将该区间划分为更多的子区间。这可以有助于减小二进制串中在位翻转的情况下的失真。

图6a是将数字映射到二进制串的处理600的一个实施例的流程图。处理600可以使用汉明组,如在图4、5a和5b的示例中那样,但不限于这些示例。处理600可以由存储器系统100中的控制电路执行,但不限于存储器系统100。在一个实施例中,处理600具有零存储开销。例如,二进制串可以被存储而没有任何冗余位(例如,ecc)。在一个实施例中,要映射的数字在区间[a,b)内。注意,处理600可以被重复以编码区间[a,b)内的其它数字。在一个实施例中,所述数字在区间[0,1)内。这种区间对于诸如机器学习算法中的权重的应用可能是有用的。然而,可以使用不同的区间。

步骤602包括访问数字的表示。在一个实施例中,这是数字的数字式表示。该数字可以是浮点数,但不需要是浮点数。例如,存储器系统100可以访问根据用于表示浮点数的ieee754标准表示的浮点数。众所周知,浮点数的表示可能是位串。注意,步骤602不限于通过ieee754标准表示的浮点数。

步骤604包括将数字分配到2^n个子区间中的一个。在一个实施例中,这2^n个子区间不重叠并且覆盖整个区间[a,b)。2^n个子区间可以从区间的一端到区间的另一端排序。在一个实施例中,浮点数被均匀量化为2^n个子区间。因此,步骤604可以包括将一个浮点数量化为2^n个子区间中的一个。

步骤606包括将来自所分配的2^n个子区间的数字映射到来自2^n个二进制串的集合的二进制串,所述2^n个二进制串根据它们到长度为n的基本二进制串的距离在区间[a,b)上排序。在一个实施例中,基本二进制串具有全零。因此,步骤606可以包括将来自所分配的2^n个子区间的数字映射到来自2^n个二进制串的集合的二进制串,所述2^n个二进制串根据它们的汉明权重在区间[a,b)上排序。

注意,步骤606的映射可以将2^n个二进制串中的每个链接到2^n个子区间中的一个。在一个实施例中,二进制串各自具有长度“n”。在一个实施例中,二进制串的集合包括长度为“n”的所有二进制串。例如,存在2^n个长度为“n”的二进制串。在一个实施例中,二进制串具有n+1个不同的到基本串的汉明距离。在一个实施例中,二进制串具有n+1个不同的汉明权重。因此,2^n个二进制串可以被认为包括n+1个汉明组,其每个仅包括具有相同的到基本串的汉明距离的二进制串。在一个实施例中,2^n个二进制串包括n+1个汉明组,其每个仅包括具有相同的汉明权重的二进制串。

注意,步骤604和606可以由硬件来执行,以用于快速编码。例如,步骤604和606可以在专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、分立电路的组合、门、或任何其它类型的硬件、或其组合内实施,或者由专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、分立电路的组合、门、或任何其它类型的硬件、或其组合实施。

步骤608包括将二进制串存储在非暂时性存储装置中。在一个实施例中,二进制串被存储在存储器126中。非暂时性存储装置可以包括非易失性存储装置(例如,nand、nor、reram)或易失性存储装置(例如,ram)。该二进制串可以与表示其它浮点数的其它二进制串一起存储。在一个实施例中,系统将二进制串存储在非易失性存储装置中。例如,控制器122可以将二进制串传递到存储器裸芯108,存储器裸芯108将二进制串存储在存储器阵列126中(参见图2a)。在一个实施例中,当将二进制串存储在存储器中时,系统不使用任何纠错码。因此,二进制串可以被存储(连同其它二进制串一起),而没有任何存储开销。然而,可以使用一些纠错码。在一个实施例中,与可能用于存储其它数据相比,系统使用较不鲁棒的ecc。例如,当存储由处理600编码的二进制串时,与到存储器阵列126中的其它数据相比,系统可能每页使用更少的冗余位。

注意,即使二进制串中的一位应翻转,由于编码技术使得由位串表示的数字的失真量仍然相对低。对于某些应用,少量的失真可能是可容忍的。因此,该系统可以使用较少的存储空间,同时仍然保持在对于给定应用的可容忍的失真量内。

此外,注意,位翻转可能在存储期间或在向和从存储装置的传输期间发生。因此,在一个实施例中,当向/从存储器写入和/或读取二进制串时,系统使存储器超频(over-clock)。使存储器超频可能增加在传输期间位将翻转的风险。然而,如上所述,对于某些应用,少量的失真是可容忍的。因此,处理600可以允许存储器的超频,同时仍然保持在对于给定应用的可容忍的失真量内。

在一个实施例中,二进制串根据它们的二进制值在给定的汉明组502内排序。例如,如果每串存在八位,则可以对汉明权重为1的二进制串进行排序(00000001,00000010,...10000000)。图6b是如何可以将量化的数字映射到二进制串的处理650的一个实施例的流程图。在此,量化的数字是指已量化为处理600中所提及的区间中的2^n个子区间中的一个的数字。处理650假设二进制串根据它们的二进制值在给定的汉明组502内排序。处理650可以用作处理600中的步骤606的一个实施例。

处理650可以由硬件来执行,以用于快速编码。例如,处理650可以在专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、分立电路的组合、门、或任何其它类型的硬件、或其组合内实施,或者由专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、分立电路的组合、门、或任何其它类型的硬件、或其组合实施。

在步骤652中,量化的数字被分配到汉明组502。假设存在长度为n的2^n个二进制串,则可以存在n+1个汉明组502。此步骤可以包括用于将量化的数字分配到汉明组502的任何技术。在一个实施例中,首先基于量化的数字在该区间内的位置对量化的数字分配索引。这可以等同于基于量化的数字存在于的n+1个非重叠的子区间中的哪一个来分配索引。

在步骤654中,根据汉明组502中的二进制串的值对量化的数字进行编码。在一个实施例中,在子区间中的量化的数字与汉明组502中的二进制串之间存在一对一映射。在一个实施例中,子区间中具有最小值的量化的数字被映射到汉明组502中具有最小值的二进制串,子区间中具有次小值的量化的浮点数被映射到汉明组502中具有次小值的二进制串,等等。因此,子区间中的量化的数字可以根据对应的汉明组502中的二进制串的值来编码。

以下是关于在二进制串中使用附加位如何可以减小位翻转可能导致的失真的简要讨论。为了说明起见,假设存在覆盖要表示的所有实数的区间。例如,对于神经网络,区间可能需要是[0,1]来覆盖神经网络中使用的权重。然而,此区间仅仅是一个示例。此区间可以被分解成子区间,这可以对应于实数的区间的均匀量化。为了说明起见,索引的集合{0,1,...,2n-1}可以表示实数的区间的此均匀量化。

因此,可以假设存在要以二进制形式表示的2^n个浮点数的集合(例如,区间中的量化的实数)。注意,如果在2^n个子区间中的给定的一个中存在其它浮点数,则可以将它们量化为一个具有代表性的浮点数,以产生2^n个浮点数的集合。例如,参考回图4,在表400中存在2^4个浮点数的集合。还要注意的是,二进制串各自具有“n”位。

可以在2^n个浮点数与2^n个二进制串(各自具有“n”位)之间创建一对一映射。例如,参考回图4,表中的2^4个浮点数映射到各自具有“n”位的2^n个二进制串。

对于给定映射(f)的一对二进制串(b1,b2)的失真(d)可以根据浮点数在浮点数的整个区间上的1-范数距离来定义,如等式1。注意,“f”表示从浮点数到二进制串的映射。

对于给定的二进制串,取决于二进制串中的哪一位翻转,可能存在不同的失真。一个二进制串(b)的距离-1失真可以如等式2和3中定义。“距离-1”失真是指二进制串中恰好一位翻转。等式2针对二进制串的最大“距离-1”失真。也就是说,这针对表示导致最大失真的位翻转的情况。等式3针对二进制串的平均“距离-1”失真。也就是说,这针对表示所有可能的一位翻转的平均失真的情况。

可以从等式2和3计算2^n个二进制串的集合中的所有二进制串的失真。映射f的距离-1失真可以如在等式4和5中那样定义。等式4针对于映射f的最大距离-1失真。等式5针对于映射f的平均距离-1失真。

这里公开的实施例提供了映射,使得等式4中的d1,max(f)在应用(诸如但不限于机器学习算法)的容限内。此外,这里公开的实施例提供了d1,max(f)随着位串中使用的位的数目更大而变得更小的映射。这里公开的实施例提供了映射,使得等式5中的d1,ave(f)在应用(诸如但不限于机器学习算法)的容限内。此外,这里公开的实施例提供了d1,ave(f)随着位串中使用的位的数目更大而变得更小的映射。

也可以考虑多于一位翻转的情况。这里,“距离-k失真”是指在单个二进制串中的“k”位翻转。如上面的等式4和5那样,距离-k失真可以以类似的方式定义。等式6针对于最大距离-k失真。可以看出,最大距离-k失真是来自等式4的最大距离-1失真乘以“k”。等式7针对于平均距离-k失真。可以看出,平均距离-k失真是来自等式5的平均距离-1失真乘以“k”。

dk,max(f)≤kd1,max(f),(6)

dk,ave(f)≤kd1,ave(f)(7)

这里公开的实施例提供了映射,使得等式6中的dk,max(f)在应用(诸如但不限于机器学习算法)的容限内。此外,这里公开的实施例提供了dk,max(f)随着位串中使用的位的数目更大而变得更小的映射。这里公开的实施例提供了映射,使得等式7中的dk,ave(f)在应用(诸如但不限于机器学习算法)的容限内。此外,这里公开的实施例提供了dk,ave(f)随着位串中使用的位的数目更大而变得更小的映射。

如上所述,在一些实施例中,长度为n的所有二进制串都按照它们的汉明权重排序。这可能导致2n个二进制串被分类为具有相同的汉明权重的n+1个组。这里,这样的组可以被称为“汉明组”。当发生1位错误时,二进制串只能去到相邻的汉明组。在一个实施例中,汉明组k的最大失真于是由等式8给出。

从等式9可以看出,当k=n/2时,该值最大化。

等式9表明,当“n”达到无穷大时,最大距离-1失真达到零。当然,在实际应用中,“n”不能达到无穷大。然而,随着“n”变大,最大距离-1失真降低。在实际应用中,使“n”等于64、128、或甚至更大的数字是相当实际的。在“n”等于64的情况下,对于许多应用来说,最大距离-1失真可以在可容忍的限度内。例如,最大距离-1失真可能大约为19%。例如,最大距离-1失真可能大约为被覆盖的区间的19%。在“n”等于64的情况下,平均距离-1失真可能大约为7%,这对许多应用来说可在可容忍的限度内。对于一些应用,即使在较低的“n”值(诸如32)的情况下,最大距离-1失真和平均距离-1失真也可在可容忍的限度内。如果需要更严格的公差,则可以使用较大的“n”值。

图7a-7b是图示浮点数到二进制串的映射中可能的失真的图,其中n=16。也就是说,每个二进制串都包含16位。这些图表是为了说明的目的。如果n大于16,则失真可能小得多。

图7a示出了平均失真与对于等于16的“n”的二进制串。y-轴表示对于给定二进制串的平均失真。回想一下,对于给定的二进制串,取决于哪一位被翻转,存在多种可能的失真。x-轴表示二进制串的失真。标度是指二进制串映射到的区间[0,1)中的归一化浮点值。平均失真倾向于在区间的中间更高。这可能是由于在中间的汉明组具有更多的二进制串导致的。例如,与在区间的末尾相比,在区间的中间可能存在更多的具有相同的汉明权重的二进制串。

图7b示出了最大失真与对于等于16的“n”的二进制串。y-轴表示对于给定二进制串的最大失真。x-轴表示二进制串的失真。标度是指二进制串映射到的区间[0,1)中的归一化浮点值。

图8示出了对于等于16的“n”的二进制串的失真的直方图。直方图对应于图7b的示例。x-轴针对于最大失真。y-轴表示具有给定最大失真的串的数目。

如上所述,随着每二进制串更多位,失真(平均失真和最大失真两者)可能下降。在二进制串具有64位的一个实施例中,最大失真(根据等式4)小于0.19。在二进制串具有64位的一个实施例中,平均失真(根据等式5)大约为0.0704。与此形成鲜明对比的是,在使用ieee754标准的64位浮点表示中,翻转单个位可能导致大约100%(绝对值)的失真。而且,图1的朴素表示在某些情况下可能导致大约50%的失真。ieee754标准和图3的朴素表示两者的最大失真对于大多数应用来说可能太高。因此,当使用ieee754标准或图3的朴素表示来以二进制格式表示浮点数时,可能需要采取措施以保证位不翻转。

相反,这里描述的以二进制表示对数字(诸如浮点数)进行编码的实施例在二进制表示中的一位翻转的情况下,对于包括但不限于机器学习算法的许多应用来说,在可容忍的失真量内。因此,实施例可能能够使用更少的纠错码或不使用纠错码,来存储数字的二进制表示。实施例可能能够使存储数字的二进制表示的存储器超频。

图9是被配置为在浮点数和二进制串之间进行编码/解码的系统900的一个实施例的图。该系统包括数字访问器901、量化器902、映射器904、写入电路906、读取电路910和解映射器914。还描绘了二进制串可以存储在其中并从其读取回的存储器阵列126。为了讨论起见,二进制串各自具有“n”位。

数字访问器901被配置为访问可以以例如ieee754标准表示的浮点数的数字表示。在一个实施例中,数字访问器901被配置为从主机140接收数字的数字表示。在一个实施例中,数字访问器901是前端模块(图2b,208)。在一个实施例中,数字访问器901执行处理600的步骤602。

在一个实施例中,量化器902可以被配置为将浮点数分配到2^n个子区间中的一个。在一个实施例中,量化器902执行处理600的步骤604。在一个实施例中,量化器902执行处理600的步骤604。

映射器904可以被配置为将量化的浮点数映射到二进制串。换句话说,映射器904可以被配置为将量化的浮点数编码为二进制串。在一个实施例中,映射器904执行处理600的步骤606。在一个实施例中,映射器904执行处理650。在一个实施例中,映射器904可以从子区间映射到二进制串。在一个实施例中,映射器904基于浮点数在该区间内的哪里,来为浮点数选择二进制串索引。二进制串索引可以对应于二进制串的汉明组。每个汉明组可具有特定的到基本二进制串的汉明距离的二进制串。在一个实施例中,每个汉明组具有特定的汉明权重的二进制串。例如,在图5a中,汉明组502(0)—502(n)可具有在0与n之间的索引。如上所述,映射器904可以基于浮点数在区间内的哪里来选择索引。例如,参考图5b,映射器904可以确定量化的浮点数在哪个子区间中。

写入电路906被配置为将二进制串存储到存储器阵列126中。在一个实施例中,二进制串被存储在存储器阵列126中,而没有任何冗余位。然而,可以使用冗余位。写入电路906可以通过控制器122、状态机112、片上地址解码器114、功率控制116、读取-写入电路128、和/或解码器124、132的任何组合来实现。在一个实施例中,写入电路906执行处理600的步骤608。

读取电路910被配置为从存储器阵列126读取二进制串。读取电路906可以通过控制器122、状态机112、片上地址解码器114、功率控制116、读取-写入电路128、和/或解码器124、132的任何组合来实现。

解映射器914可以被配置为将二进制串解映射回到浮点数。解映射器914执行映射的逆。在一个实施例中,解映射器914的输出是2^n个浮点值中的一个。作为简单的示例,参考图4中的表400,解码器输出16个浮点值中的一个。

在一个实施例中,量化器902、映射器904和解映射器914在存储器系统100的控制器122内实现。在一个实施例中,量化器902、映射器904和解映射器914在控制器122的ecc引擎224内实现。量化器902、映射器904和解映射器914可以通过硬件和/或软件的任何组合来实现。在一个实施例中,量化器902、映射器904和解映射器914以硬件实现,以用于更快的编码和解码。例如,量化器902、映射器904和解映射器914可以在专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、分立电路的组合、门、或任何其它类型的硬件、或其组合内实现,或者由专用集成电路(asic)、现场可编程门阵列(fpga)、电路、数字逻辑电路、模拟电路、分立电路的组合、门、或任何其它类型的硬件、或其组合实现。

第一实施例包括用于将数字编码为二进制形式的装置。该装置包括数字访问器,其被配置为访问存储在非暂时性存储装置中的数字的表示。所述数字在区间中,所述区间包括覆盖该区间的2^n个非重叠子区间。该装置包括量化器,其被配置为根据各个数字在该区间内的位置,将各个数字分配到2^n个非重叠子区间中的一个。该装置包括映射器,其被配置为基于所分配的子区间将各个数字中的每个编码为非暂时性存储装置中的二进制串。该二进制串是长度为“n”的2^n个二进制串中的一个,所述2^n个二进制串根据距长度为“n”的基本二进制串的汉明距离在区间上排序。

在第二实施例中,根据第一实施例,2^n个二进制串在该区间上被聚类在n+1个汉明组中,其中每个汉明组仅包括具有相同的距基本二进制串的汉明距离的二进制串。

在第三实施例中,根据第一至第二实施例,该区间包括对应于n+1个汉明组的n+1个非重叠子区间,其中控制电路还被配置为将分配到n+1个子区间中的给定子区间的所有数字映射到对应于给定子区间的汉明组。

在第四实施例中,根据第一到第三实施例,在n+1个汉明组中的每个内,二进制串根据二进制值排序,其中映射器还被配置为根据对应于给定子区间的汉明组中的二进制串的二进制值,映射分配到给定子区间的数字。

在第五实施例中,根据第一至第四实施例,映射器还被配置为将分配到2^n个子区间中的给定子区间的所有数字映射到相同的二进制串。

在第六实施例中,根据第一至第五实施例,数字是浮点数的数字表示。

在第七实施例中,根据第一至第六实施例,其中为了将区间中的各个数字分配到2^n个非重叠子区间中的一个,量化器还被配置为:将该区间中的浮点数均匀地量化为2^n个子区间。

在第八实施例中,根据第一至第七实施例,该装置还包括:非易失性存储装置;写入电路,被配置为将表示各个数字的二进制串存储在非易失性存储装置中;以及解映射器,被配置为解码所存储的二进制串,其中至少一个二进制串具有翻转的位,其中具有翻转的位的二进制串解码为该区间中除编码时表示的二进制串的数字之外的数字。

在第九实施例中,根据第一至第八实施例,基本二进制串包括全零。

在一个实施例中,用于访问各个数字的数字表示的部件包括控制器122、处理器122c、前端模块208、和/或数字访问器901中的一个或多个。用于访问各个数字的数字表示的部件可以包括其它电子电路系统。

在一个实施例中,用于将各个数字分配到2^n个非重叠子区间中的一个的部件包括控制器122、处理器122c、量化器902中的一个或多个。用于将各个数字分配到2^n个非重叠子区间中的一个的部件可以包括其它电子电路系统。

在一个实施例中,用于将各个数字中的每个编码为按照汉明权重在该区间上排序的2^n个二进制串中的所选的二进制串的部件包括控制器122、处理器122c、和/或映射器904中的一个或多个。用于编码的部件可以包括其它电子电路系统。

在一个实施例中,用于将所选的二进制串存储在非易失性存储器中的部件包括控制器122、状态机112、芯片上地址解码器114、功率控制116、读取-写入电路128、和/或解码器124、132、和/或写入电路906中的一个或多个。用于存储的部件可以包括其它电子电路系统。

也可以提供对应的方法、系统、以及具有用于执行这里提供的方法的可执行代码的计算机或处理器可读存储设备。

已经为了说明和描述的目的给出了前述对本发明的详细描述。不旨在是穷举的或将本发明限制到所公开的确切形式。鉴于上述教导,许多修改和变化是可能的。选择所描述的实施例,以便最好地解释本发明的原理及其实际应用,从而使本领域的其它技术人员能够在各种实施例中且通过适合于预期的特定用途的各种修改来最佳地利用本发明。旨在由所附的权利要求限定本发明的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1