具有内部读取-修改-写入操作的存储部件的制作方法

文档序号:18731349发布日期:2019-09-21 00:34阅读:173来源:国知局
具有内部读取-修改-写入操作的存储部件的制作方法

相关申请

本申请要求2013年9月24日提交的美国临时申请第61/881,869号的权益,在此通过参考将该临时申请的全部内容引入。

附图说明

在附图中,通过示例而不限制地示出本公开。

图1是示出根据实施例的包括具有内部读取-修改-写入操作的存储部件的计算系统的框图。

图2是示出根据实施例的具有内部读取-修改-写入操作的存储部件的框图。

图3是示出根据实施例的利用一列循环间隔的延迟对存储部件中的读取-修改-写入操作进行的延迟读取访问的定时图。

图4是示出根据实施例的利用两列循环间隔的延迟对存储部件中的读取-修改-写入操作进行的延迟读取访问的定时图。

图5是示出根据实施例的存储部件中的两个读取-修改-写入操作的重叠的定时图。

图6是示出根据实施例的存储部件中的三个读取-修改-写入操作的重叠的定时图。

图7是示出根据实施例的对存储部件中的读取-修改-写入操作的延迟读取访问的流程图。

图8是示出根据实施例的存储部件中的重叠读取-修改-写入操作的流程图。

图9是示出根据实施例的具有用于每对存储体的专用错误检测和校正电路的存储部件的框图。

具体实施方式

描述用于存储部件的读取-修改-写入操作的实施例。在所描述的实施例中,读取-修改-写入操作是在同一操作期间自动地读取存储位置并将新值写入该存储位置的部件内部存储操作。写入存储位置的新值可以是完全的新值(例如,从存储控制器接收)或者可以是从存储位置读取的先前值的一些函数。读取-修改-写入操作通常可用于防止多线程应用中的竞争条件,并且可用于非阻塞同步等。

在一个实施例中,存储部件(例如,动态随机存取存储器(DRAM))包括存储单元的一个或多个存储体(bank)。每个存储体都可以包括若干存储单元,存储客户端数据可存储在其中。存储体中的每个单元可以通过存储地址来识别。存储部件外的存储控制器部件可代表存储客户端向存储部件发送命令。这些命令例如可以包括读取-修改-写入命令。在一个实施例中,本文使用的“部件”是指在单个芯片或裸片上实施的电路或设备。在其他实施例中,各个部件可以堆叠或利用其他裸片密封,然而每个部件本身是单个裸片。

在一个实施例中,存储部件包括两个或更多个双向数据总线。全局总线(G)可用于传送存储部件内的数据,诸如在数据接口与一个或多个存储体之间。数据总线(DQ)可用于传送来自存储部件的数据,诸如在存储部件的接口与存储控制器之间。当在存储部件中执行读取-修改-写入操作时,全局总线和数据总线根据数据是写入存储部件的存储体还是从存储体读取出来而在相对方向上使用。这会导致读取和写入信号的干扰,这可以被称为阻塞。为了避免阻塞,全局和数据总线的数据流的方向根据读取-修改-写入操作的当前相位而改变。然而,存在与改变这些总线的方向相关联的周转时间,这会不利地影响存储部件的性能。如果作为读取-修改-写入操作的一部分执行内部错误校正,则会进一步降低性能。

为了减少或避免对存储部件性能的不利影响,在一个实施例中,存储部件可执行内部读取-修改-写入操作,其包括读取-修改-写入操作的延迟读取访问部分、读取数据解码和写入数据编码的时间的重叠、两个或多个读取-修改-写入操作的重叠(其中第一读取-修改-写入操作的写入访问发生在第二读取-修改-写入操作的读取访问之后)、或者专用于存储部件中的第一存储体的第一读取-修改-写入操作(此时第二读取-修改-写入操作专用于存储部件中的第二存储体)中的至少一种。在一个实施例中,如本文所描述的,存储部件可以包括内部错误检测和校正块,其与字节可屏蔽写入操作一起操作来执行读取-修改-写入操作。这些技术中的每一项技术即使与内部错误检测和校正组合使用时仍可以提高读取-修改-写入性能。例如,根据实施例,读取-修改-写入带宽可以从峰值带宽的1/6提高到峰值带宽的1/5、1/4、2/7或3/8。这表示用于执行存储部件中的读取-修改-写入操作的时间的显著改善。

图1是示出根据实施例的包括具有内部读取-修改-写入操作的存储部件102的计算系统100的框图。计算设备100可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、环球网设备、服务器、网络路由器、开关或桥或者能够执行指定将由机器进行的动作的指令集(顺序或其他方式)的任何机器。此外,虽然仅示出了单个计算设备,但术语“计算设备”还可以包括单独或联合地执行指令集(执行本文讨论的任何一个或多个方法)的任何机器的集合。在一个实施例中,计算系统100包括存储部件102、存储控制器104以及一个或多个存储客户端106。

存储控制器104可以管理进出存储部件102的数据流。例如,存储控制器104可以接收并处理来自计算设备100中的一个或多个存储客户端106的存储访问请求。此外,存储控制器104可以恢复来自存储部件102的请求数据并将数据提供给请求存储客户端106。在一个实施例中,存储控制器104可以具有内部队列,其接受来自请求者(诸如存储客户端106)的存储访问请求。例如,请求可以包括写入、读取-修改-写入或者其他存储操作。在一个实施例中,写入请求和读取-修改-写入请求被保持在内部队列中,而读取请求在接受时被传输至存储部件102。当内部队列达到特定大小(例如,阈值)时,存储控制器104可以在突发(burst)中向存储部件102发布写入和读取-修改-写入。根据突发中读取-修改-写入的数量,存储控制器104可以指示存储部件102使用延迟读取访问或者重叠读取-修改-写入技术以优化性能。在一个实施例中,存储控制器104可以是另一部件(诸如处理设备)的一部分。然而,在其他实施例中,存储控制器104可以是独立的芯片或者集成到计算设备100内的不同芯片中。例如,在另一实施例中,处理设备的CPU或GPU核可以相互连接或者连接至内部处理器高速缓存器,并且存储控制器104可以外部地连接至处理设备。在其他实施例中,存储控制器104和存储客户端106可以以一些其他方式连接。包含存储控制器104的芯片上系统(SoC)将通常称为“控制器部件”、“DRAM控制器”或“存储控制器”。

存储部件102可以包括存储阵列(诸如闪存、动态随机存取存储器(DRAM)(例如,同步DRAM(SDRAM)或Rambus DRAM(RDRAM)等))或静态存储器(诸如静态随机存取存储器(SRAM)等)。存储体110和120可分别包括其中可存储数据值的多个存储单元或位置。存储体110和120中的每个单元或单元的集合可以由存储地址进行识别。因此,当通过存储部件102接收命令地址信号时(例如,作为读取-修改-写入请求的一部分来接收),命令接口130可以识别存储体110和120中的对应位置或单元。在实施例中,命令和地址接收器可以是分离的总线或者可以在单个请求接口中多路复用到一起。

在一个实施例中,存储部件102包括存储体110和120、命令接口130、数据接口140以及错误校正电路150。存储体110和120可以通过全局总线103连接至存储部件102中的其他块,诸如命令接口130、数据接口140和错误校正电路150。存储部件102中的命令接口130和数据接口140可以分别通过命令总线105和数据总线107连接至存储控制器104。在一个实施例中,存储控制器104和存储部件102横跨高速极低摇摆-近地(VLS-NG)信令接口相互通信。VLS-NG信令使用极低的电压摆幅以多达2Gbps的速度在一个设计中操作,以使功率最小化。参考块(CK)和命令地址(CA)105和数据(DQ)107线路可以都使用VLS-NG技术,而标准的轨对轨CMOS信令可以用于芯片使能(EN)线路。

在一个实施例中,CA线路105被用于从存储控制器104向存储部件102传送命令和地址,而DQ线路107在二者之间承载读取和写入数据。被用于在存储控制器104和存储部件102之间通信的CA和DQ线路的数量是接口架构的可伸缩参数。所实现的CA和DQ线路的数量可以取决于存储部件102的数量和宽度以及所要求的CA和DQ带宽。在一个实施例中,存储控制器104的大小被确定为支持用于每个系统的适当数量的CA和DQ线路。在一个实施例中,所有CA和DQ数据传输可以是同步的,意味着它们是指CK转换。

图2是示出根据实施例的用于读取-修改-写入操作的存储部件102的框图。如上所述,在一个实施例中,存储部件102包括存储体110和120、命令接口130、数据接口140以及错误检测电路150。在该实施例中,全局总线103被示为两个独立的总线,包括全局地址总线202和全局数据总线204。全局地址总线202在命令接口130与存储体110和120之间传输地址信息,同时全局数据总线204在数据接口140、错误校正电路105与存储体110和120之间传输读取和写入数据。实际上,根据实施例,全局总线103可以包括更多或更少的总线。所示实施例示出了两个存储体110和120。然而,在其他实施例中,存储部件102可以包括一些其他数量的存储体。

在一个实施例中,在命令接口130处接收读取-修改-写入命令。可以在命令总线105上从存储控制器104在命令地址(CA)焊盘232处接收读取-修改-写入命令。在一个实施例中,读取-修改-写入命令包括16位值。然而,在其他实施例中,读取-修改-写入命令可以包括一些其他大小的值。基于时钟信号(CK),16位值可以存储在寄存器234中。在一个实施例中,表示存储体110和120中的位置的地址A在全局地址总线202上被驱动到存储体110和120。执行由地址A指定的位置处的数据访问操作,并且266位数据值在全局数据总线204上从存储体110和120中驱出。该值可以存储在错误校正电路150的寄存器252中。在一个实施例中,该值可以称为与读取-修改-写入操作相关联的“读取数据”。

在一个实施例中,解码器254对266位读取数据进行解码。解码器254使用读取数据中的10位校验子(syndrome)对读取数据执行错误检测和校正。根据实施例,解码器254可使用汉明(hamming)错误校正、单一错误校正/双重错误校正或者一些其他错误校正技术,以校正读取数据中的至少单个位的错误。作为错误校正的结果,10位校验子被去除,并且解码器254输出256位值。根据实施例,上述256位数据值和10位校验子的使用仅仅是一种可能的实施方式。在其他实施例中,数据宽度和校验子宽度可以根据具体的实施方式而改变。

在一个实施例中,256位错误校正值与所接收的“写入数据”值合并到一起,其中“写入数据”值与读取-修改-写入操作相关联。可以在数据总线107上从存储控制器104在数据接口140中的DQ焊盘242处接收写入数据。在一个实施例中,写入数据包括八个32位字,其通过串并转换器244串并转换为256位值。然而,在其他实施例中,写入数据可以包括一些其他大小的值。基于时钟信号(CK),256位值可以存储在寄存器246中。

在一个实施例中,使用数据屏蔽256,来自寄存器246的串并转换的写入数据与来自解码器254的错误校正读取数据合并。在一个实施例中,利用来自存储控制器104的写入数据接收数据屏蔽256。数据屏蔽256可以包括用于表示来自写入数据的哪些位或字节应该被来自读取数据的位或字节重写入以及写入数据中的哪些位或字节应该保持不变的操作的数据。在一个实施例中,数据屏蔽256可以包括与32个数据信号并行的在四个控制信号上传送的32位,以控制分离的8位数据字节是否被写入(0)或屏蔽(1)。数据屏蔽256的结果是256位合并的数据值。在一个实施例中,解码器258通过生成10位校验子并将校验子添加(例如,附加)至合并的数据以创建266位值来对合并数据进行编码。错误校正电路150可以在全局数据总线204上驱动266位值,其中在由地址A识别的位置(即,从中读取出读取数据的位置)处将值写入存储体110和120。

在一个实施例中,存储部件102使用读取-修改-写入操作,如以下详细描述的。读取-修改-写入操作可以以多种方式来改善。通常,上述读取-修改-写入操作中的每个子操作都可以根据时钟信号CK来定时。定时可以使得每个子操作发生在独立的列循环间隔期间。根据系统定时,一个列循环间隔例如可以包括系统时钟的四个时钟循环或者一些其他值。在一个实施例中,为了提高读取-修改-写入操作的性能,存储部件102可以通过可调数量的列循环间隔(例如,一个或多个列循环间隔)来延迟读取访问子操作。在另一实施例中,存储部件102可以重叠两个或更多个读取-修改-写入操作(例如,两个或三个读取-修改-写入操作),使得第一读取-修改-写入操作的写入访问发生在第二读取-修改-写入操作的读取访问之后的列循环间隔期间。以下参照图3至图6的定时图以及图7和图8的流程图提供读取-修改-写入操作的附加细节。

图3是示出根据实施例的利用一列循环间隔的延迟对存储部件中的读取-修改-写入操作进行延迟读取访问的定时图300。定时图300示出了包括读取命令R0、第一读取-修改-写入命令M1、第二读取-修改-写入命令M2和写入命令W3的一系列存储操作。这些命令可以在命令总线(CA)105上接收。根据一个实施例,定时图300示出了列循环间隔351-361,其中这些存储操作中的每个操作的子操作相对于彼此发生。

在一个实施例中,在列循环间隔351期间接收第一读取-修改-写入命令M1。在列循环间隔352处,识别(302)读取数据的地址(A)。然而,在列循环间隔251期间不在全局数据总线(G)204上执行读取访问(R1)304,读取访问(R1)可以被延迟一列循环间隔。在一个实施例中,命令接口130中的延迟元件236通过可调数量的列循环间隔使要被提供给存储体110和120的读取地址延迟。延迟可以通过由存储控制器104提供给延迟元件236的控制信号来控制或者可以在读取-修改-写入命令自身内被指定。因此,在一个实施例中,全局数据总线(G)204上的读取访问(R1)304可以发生在列循环间隔353期间。

在列循环间隔354期间,来自存储体110和120的读取数据R1可以通过错误校正电路150中的解码器254进行解码(DR)306。在同一列循环间隔354期间,与读取-修改-写入命令M1相关联的写入数据W1 308可以在数据总线(DQ)107上接收。在列循环间隔355期间,写入数据W1可以使用数据屏蔽256与读取数据R1合并,并且合并的数据可以通过错误校正电路150中的编码器258进行编码(EW)310。在列循环间隔356期间,在全局数据总线(G)204上的识别地址(A)处,编码的合并数据被写入存储体110和120(W1 312)。

一旦编码的合并数据被写入(312)存储体110和120,就完成了第一读取-修改-写入操作M1。因此,在列循环间隔357处,可以开始第二读取-修改-写入操作M2。在列循环间隔357期间,识别(314)用于读取数据R2的地址(A)。全局数据总线(G)204还使用列循环间隔357来将数据流的方向从写入写入数据W1切换到读取读取数据R2。这在通过命令接口130中的延迟元件236创建的一列循环间隔之后。类似于上面参照第一读取-修改-写入操作M1所描述的,第二读取-修改-写入操作M2的剩余子操作可以发生在列循环间隔359、360和361中。

在该实施例中,第一读取-修改-写入操作M1和第二读取-修改-写入操作M2之间的时间是5个列循环间隔。这表示相对于读取访问子操作304没有被延迟至少一列循环间隔的实施例的一列循环间隔的改善。在一个实施例中,只要对应的地址可用,就开始读取访问子操作。因此,读取-修改-写入操作在只要可能使用连续的读取-修改-写入操作之间的六个列循环间隔就开始其访问操作。将其访问操作延迟一列循环间隔的读取-修改-写入操作将在连续的读取-修改-写入操作之间仅使用五列循环间隔。因此,延迟读取访问子操作304实际上减少了用于执行读取-修改-写入操作M1的时间的总量。

图4是示出根据实施例的利用两列循环间隔的延迟对存储部件中的读取-修改-写入操作进行延迟读取访问的定时图400。定时图400示出了包括读取命令R0、第一读取-修改-写入命令M1、第二读取-修改-写入命令M2和写入命令W3的一系列存储操作。这些操作可以在命令总线(CA)105上接收。根据一个实施例,定时图400示出了列循环间隔451-461,其中这些存储操作中的每个操作的子操作均相对于彼此发生。

在一个实施例中,在列循环间隔451期间接收第一读取-修改-写入命令M1。在列循环间隔452处,识别(402)用于读取数据的地址(A)。然而,在列循环间隔451期间不在全局数据总线(G)204上执行读取访问(R1)404,读取访问(R1)404可以被延迟两列循环间隔。在其他实施例中,可以在时钟循环而非列循环间隔中指定延迟周期,其中列循环间隔可以表示为一些数量的时钟循环(例如,四个)。在一个实施例中,命令接口130中的延迟元件236通过可调数量的列循环间隔延迟将读取地址提供给存储体110和120。延迟可以通过由存储控制器104提供给延迟元件236的控制信号来设置,可以在读取-修改-写入命令自身内被指定,或者可以通过存储控制器部件和存储部件中的控制寄存器值来设置。因此,在一个实施例中,全局数据总线(G)204上的读取访问(R1)404可以发生在列循环间隔454期间。在列循环间隔453期间,可能不发生与第一读取-修改-写入操作相关联的子操作,然而,可以发生与读取命令R0相关联的全局数据总线(G)上的读取访问。此外,在列循环间隔454期间,可以在数据总线(DQ)107上接收与读取-修改-写入命令M1相关联的写入数据W1 408。

在列循环间隔455期间,可以通过错误校正电路150中的解码器254对从存储体110和120读取的读取数据R1进行解码(DR)406。在同一列循环间隔455期间,写入数据W1可以使用数据屏蔽256与读取数据R1合并,并且合并的数据可以通过错误校正电路150中的解码器258进行解码(EW)410。因此,在系统时钟的同一列循环间隔455内,读取数据被解码406且合并数据被编码410。在一个实施例中,在该合并编码和解码期间发生的时间周期小于解码和编码分别发生的时间。各个编码和解码操作通常可分别占用与数据位的数量(例如,256)的对数成比例的时间。然而,通过并行地执行编码和解码并将它们组合到一起,合并的编码和解码可以被优化,使其占用基本相同的时间量。在列循环间隔456期间,在全局数据总线(G)204上的识别地址(A)处,编码的合并数据被写入存储体110和120(W1 412)。在一个实施例中,存储部件102包括用于读取和写入地址的独立的地址寄存器。因此,在一个实施例中,当针对随后的读取操作恢复地址时,可以在同一列循环间隔456期间恢复写入(412)编码的合并数据的地址(A)。

一旦编码的合并数据被写入(412)存储体110和120,就完成了第一读取-修改-写入操作M1。在一个实施例中,然而,在同一列循环间隔456期间,可以开始第二读取-修改-写入操作M2。在列循环间隔456期间,识别(414)用于写入数据R1和读取数据R2的地址(A)。全局数据总线(G)204使用列循环间隔457来将数据流的方向从写入写入数据W1切换到读取读取数据R2。在一个实施例中,在地址管线逻辑中存在两个独立的寄存器,其在M1(写入)和M2(读取)读取-修改-写入操作的重叠部分期间保持这两个地址值。在列循环间隔458期间,可发生全局数据总线(G)204上的读取访问(R2)416。这在由命令接口130中的延迟元件236创建的两列循环间隔延迟之后。类似于上面参照第一读取-修改-写入操作M1所描述的,可以在列循环间隔459和460中发生第二读取-修改-写入操作M2的剩余子操作。

在该实施例中,第一读取-修改-写入操作M1和第二读取-修改-写入操作M2之间的时间是四列循环间隔(即,近似为峰值带宽的1/4或25%)。这表示相对于读取访问子操作304没有被延迟至少一列循环间隔的实施例改善了两列循环间隔。因此,增加读取访问子操作404的延迟实际上减少了用于执行读取-修改-写入操作M1的时间的总量。

图5是示出根据实施例的存储部件中的两个读取-修改-写入操作的重叠的定时图。定时图500示出了包括读取命令R0、第一读取-修改-写入命令M1、第二读取-修改-写入命令M2、第三读取-修改-写入命令M3、第四读取-修改-写入命令M4和写入命令W5的一系列存储操作。这些命令可以在命令总线(CA)105上被接收。定时图500示出了根据一个实施例的列循环间隔551-564,其中这些存储操作中的每个操作的子操作相对于彼此发生。

在一个实施例中,在列循环间隔551期间接收第一读取-修改-写入命令M1。在列循环间隔552处,识别(502)用于读取数据的地址(A)。在同一列循环间隔552期间,可以发生全局数据总线(G)204上的读取访问(R1)504。在该实施例中,不通过命令接口130中的延迟元件236创建延迟。此外,在列循环间隔552期间,接收第二读取-修改-写入命令M2。

在列循环间隔553处,识别(506)与第二读取-修改-写入命令M2相关联的读取数据的地址(A)。在同一列循环间隔553处,可以在全局数据总线(G)204上发生第二读取-修改-写入命令M2的读取访问(R2)508。此外,在列循环间隔553期间,可以通过错误校正电路150中的解码器254对与从存储体110和120中读取的第一读取-修改-写入命令M1相关联的读取数据R1进行解码(DR)510。因此,在第一读取-修改-写入命令M1的写入访问(W1)520之前发生第二读取-修改-写入命令M2的读取访问(R2)508。

在一个实施例中,在列循环间隔554期间,可以在数据总线(DQ)107上接收与第一读取-修改-写入命令M1相关联的写入数据W1 512。此外,在列循环间隔554期间,可以通过错误校正电路150中的解码器254对与从存储体110和120中读取的第二读取-修改-写入命令M2相关联的读取数据R2进行解码(DR)514。

在一个实施例中,在列循环间隔555期间,可以在数据总线(DQ)107上接收与第二读取-修改-写入命令M2相关联的写入数据W2 516。此外,在列循环间隔555期间,写入数据W1可以使用数据屏蔽256与读取数据R1合并,并且合并的数据可以通过错误校正电路150中的解码器258进行解码(EW)518。

在列循环间隔556期间,在全局数据总线(G)204上的识别地址(A)处,编码的合并数据被写入存储体110和120(W1 520)。此外,在列循环间隔556期间,写入数据W2可以使用数据屏蔽256与读取数据R2合并,并且合并的数据可以通过错误校正电路150中的编码器258进行编码(EW)522。在列循环间隔557期间,在全局数据总线(G)204上的识别地址(A)处,编码的合并数据被写入存储体110和120(W2 524)。

一旦编码的合并数据被写入(520和524)存储体110和120,就完成第一读取-修改-写入操作M1和第二读取-修改-写入操作M2。然而,在一个实施例中,在列循环间隔558期间,可以开始第三读取-修改-写入操作M3。全局数据总线(G)204使用列循环间隔588来将数据流的方向从写入写入数据W2切换到读取读取数据R3。在列循环间隔559期间,识别(526)与第三读取-修改-写入操作M3相关联的用于读取数据R3的地址(A)。在列循环间隔559处,可以发生全局数据总线(G)204上的读取访问(R3)528。类似于上面参照第一读取-修改-写入操作M1和第二读取-修改-写入操作M2所描述的,可以在列循环间隔560-564中发生第三读取-修改-写入操作M3和第四读取-修改-写入操作M4的剩余子操作。

在该实施例中,第一读取-修改-写入操作M1和第三读取-修改-写入操作M3之间的时间是七列循环间隔(即,近似为峰值带宽的2/7或29%)。这表示相对于读取-修改-写入操作没有重叠的实施例改善了五列循环间隔。因此,在执行第一读取-修改-写入操作之前开始第二读取-修改-写入不会引起命令地址管线中的问题,而是改善了存储部件中的读取-修改-写入操作的总吞吐量。

图6是示出根据实施例的存储部件中的三个读取-修改-写入操作的重叠的定时图。定时图600示出了包括读取命令R0、第一读取-修改-写入命令M1、第二读取-修改-写入命令M2、第三读取-修改-写入命令M3、第四读取-修改-写入命令M4、第五读取-修改-写入命令M5、第六读取-修改-写入命令M6和写入命令W7的一系列存储操作。这些命令可以在命令总线(CA)105上接收。定时图600示出了根据一个实施例的列循环间隔651-666,其中这些存储操作中的每个操作的子操作可以相对于彼此发生。

在一个实施例中,在列循环间隔651期间接收第一读取-修改-写入命令M1。在列循环间隔652处,识别(602)用于读取数据的地址(A)。在同一列循环间隔652期间,可发生全局数据总线(G)204上的读取访问(R1)604。在该实施例中,不存在由命令接口130中的延迟元件236创建的延迟。此外,在列循环间隔652期间,接收第二读取-修改-写入命令M2。

在列循环间隔653处,识别(606)与第二读取-修改-写入命令M2相关联的读取数据的地址(A)。在同一列循环间隔653期间,可以在全局数据总线(G)204上发生用于第二读取-修改-写入命令M2的读取访问(R2)608。此外,在列循环间隔653期间,可以通过错误校正电路150中的解码器254对从存储体110和120读取的与第一读取-修改-写入命令M1相关联的读取数据R1进行解码(DR)610。此外,在列循环间隔653期间,接收第三读取-修改-写入命令M3。

在一个实施例中,在列循环间隔654期间,可以在数据总线(DQ)107上接收与第一读取-修改-写入命令M1相关联的写入数据W1 612。在同一列循环间隔654期间,可以通过错误校正电路150中的解码器254对从存储体110和120中读取的与第二读取-修改-写入命令M2相关联的读取数据R2进行解码(DR)614。此外,在列循环间隔654期间,识别(616)与第三读取-修改-写入命令M3相关联的读取数据的地址(A)。此外,在列循环间隔654期间,可以在全局数据总线(G)204上发生用于第三读取-修改-写入命令M3的读取访问(R3)618。因此,在第一读取-修改-写入命令M1的写入访问(W1)626之前发生第三读取-修改-写入命令M3的读取访问(R3)618。

在一个实施例中,在列循环间隔655期间,可以在数据总线(DQ)107上接收与第二读取-修改-写入命令M2相关联的写入数据W2 620。此外,在列循环间隔655期间,写入数据W1可以使用数据屏蔽256与读取数据R1合并,并且合并的数据可以通过错误校正电路150中的编码器258进行编码(EW)622。此外,在列循环间隔654期间,可以通过错误校正电路150中的解码器254对与从存储体110和120读取的第三读取-修改-写入命令M3相关联的读取数据R3进行解码(DR)624。此外,全局数据总线(G)204使用列循环间隔655来将数据流的方向从读取读取数据R3切换到写入写入数据W3。

在列循环间隔656期间,在全局数据总线(G)204上的识别地址(A)处,编码的合并数据被写入存储体110和120(W1 626)。此外,在列循环间隔656期间,写入数据W2可以使用数据屏蔽256与读取数据R2合并,并且通过错误校正电路150中的编码器258对合并数据进行编码(EW)628。此外,在列循环间隔656期间,可以在数据总线(DQ)107上接收与第三读取-修改-写入命令M3相关联的写入数据W3 630。

在列循环间隔657处,在全局数据总线(G)204上的识别地址(A)处,编码的合并数据被写入存储体110和120(W2 632)。此外,在列循环间隔657处,写入数据W3可以使用数据屏蔽256与读取数据R3合并,并且通过错误校正电路150中的编码器258对合并数据进行编码(EW)634。在列循环间隔658处,在全局数据总线(G)204上的识别地址(A)处,编码的合并数据被写入存储体110和120(W3 636)。

一旦编码的合并数据被写入(626、632和636)存储体110和120,就完成了第一读取-修改-写入操作M1、第二读取-修改-写入操作M2和第三读取-修改-写入操作M3。在一个实施例中,然而,在列循环间隔659期间,可以开始第四读取-修改-写入操作M4。全局数据总线(G)204使用列循环间隔659来将数据流的方向从写入写入数据W3切换到读取读取数据R4。在列循环间隔660期间,识别(638)与第四读取-修改-写入操作M4相关联的读取数据R4的地址(A)。在列循环间隔660处,可以发生全局数据总线(G)204上的读取访问(R4)640。类似于上面参照第一读取-修改-写入操作M1、第二读取-修改-写入操作M2和第三读取-修改-写入操作M3所描述的,可以在列循环间隔661-666中发生第四读取-修改-写入操作M4、第五读取-修改-写入操作M5和第六读取-修改-写入操作M6的剩余子操作。

在该实施例中,第一读取-修改-写入操作M1和第四读取-修改-写入操作M4之间的时间是八列循环间隔(即,近似为峰值带宽的3/8或38%)。这表示相对于不重叠读取-修改-写入操作的实施例改善了13列循环间隔。

图7是示出根据实施例的用于存储部件中的读取-修改-写入操作的延迟读取访问的流程图。可以通过包括硬件(例如,电路、专用逻辑、可编程逻辑、微码等)、软件(例如,在处理设备上运行以执行硬件模拟的指令)或它们的组合的处理逻辑来执行方法700。方法700可以通过将读取-修改-写入操作的读取访问子操作延迟可编程长度的时间来执行读取-修改-写入操作。为了简化解释,本公开的方法被示为和描述为一系列动作。然而,根据本公开的动作可以以各种顺序和/或同时发生,并且具有本文没有表示和描述的其他动作。此外,不是要求所有示出的动作来实施根据所公开主题的方法。此外,本领域技术人员应该理解,方法可以可选地经由状态图或事件表示为一系列相关状态。此外,应该理解,本说明书公开的方法能够存储在利于将这种方法传输或传送至计算设备的制品上。本文使用的术语“制品”旨在包括可从任何计算机可读设备或存储介质访问的计算机程序。在一个实施例中,方法700可以通过图1和图2所示的存储部件102来执行。

参照图7,在框710中,根据方法700,在命令接口130上接收读取-修改-写入命令。读取-修改-写入命令可以在命令地址(CA)焊盘232处接收,读取-修改-写入命令在命令总线105上被存储控制器104或一些其他部件发送。在一个实施例中,读取-修改-写入命令包括16位值。然而,在其他实施例中,读取-修改-写入命令可以包括一些其他大小的值。

在框720中,方法700包括在发生可调的延迟周期之后从存储体中的位置访问与读取-修改-写入命令相关联的读取数据。在一个实施例中,命令接口130中的延迟元件236通过可调数量的列循环间隔将读取地址延迟提供给存储体110和120。延迟可以通过存储控制器104提供给延迟元件236的控制信号来设置,或者可以在读取-修改-写入命令自身内指定。在其他实施例中,延迟可以通过一些其他部件来控制。在一个实施例中,在延迟(例如,设置数量的列循环间隔或系统时钟循环)之后,表示存储体110和120中的位置的地址A在全局地址总线202上被驱至存储体110和120。执行由地址A指定的位置处的数据访问操作,并且在全局数据总线204上从存储体110和120驱动266位数据值。该值可以存储在错误校正电路150的寄存器252中。在一个实施例中,该值被称为与读取-修改-写入操作相关联的“读取数据”。

在框730中,方法700包括解码读取数据。在一个实施例中,解码器254解码266位读取数据。解码器254使用读取数据中的10位校验子对读取数据执行错误检测和校正。根据实施例,解码器254可以使用汉明错误校正、单一错误校正/双重错误检测或者一些其他错误校正技术来校正读取数据中的至少单个位的错误。作为错误校正的结果,去除10位校验子,并且解码器254输出256位值。

在框740中,方法700包括在数据接口140上接收与读取-修改-写入命令相关联的写入数据。可以在数据总线107上从存储控制器104在数据接口140中的DQ焊盘242处接收写入数据。在一个实施例中,写入数据包括8个32位字,其通过串并转换器244串并转换为256位值。然而,在其他实施例中,写入数据可以包括一些其他大小的值。基于时钟信号(CK),256位值可以存储在寄存器246中。

在框750中,方法700包括将接收到的写入数据与读取数据合并以形成合并数据。在一个实施例中,使用数据屏蔽256,来自寄存器246的串并转换的写入数据与来自解码器254的错误校正读取数据合并。在一个实施例中,利用来自存储控制器104的写入数据来接收数据屏蔽256。数据屏蔽256可以包括用于逐位操作的数据以表示来自写入数据的哪些位应该利用来自读取数据的位重写入以及写入数据中的哪些位应该保持不变。数据屏蔽256的结果是256位合并数据值。

在框760中,方法700包括编码合并数据。在一个实施例中,编码器258通过生成10位校验子并将校验子添加(例如,附加)至合并数据以创建256位值来对合并数据进行编码。

在框770中,方法700包括将编码的合并数据写入到存储体中的从中读取读取数据的位置。错误校正电路150可以在全局数据总线204上驱动256位值,其中该值在通过地址A识别的位置(即,从中读取读取数据的位置)处被写入存储体110和120。

图8是示出根据实施例的重叠存储部件中的读取-修改-写入操作的流程图。方法800可以通过包括硬件(例如,电路装置、专用逻辑、可编程逻辑、微码等)、软件(例如,在处理设备上运行以执行硬件模拟的指令)或它们的组合的处理逻辑来执行。方法800可以通过重叠多个读取-修改-写入操作来执行读取-修改-写入操作。在一个实施例中,方法800可以通过图1和图2所示的存储部件102来执行。

参照图8,在框810中,根据方法800,在命令接口130上接收第一、第二和第三读取-修改-写入命令。可以在命令总线105上从存储控制器104或一些其他部件在命令地址(CA)焊盘232处接收读取-修改-写入命令。在一个实施例中,读取-修改-写入命令在连续的列循环间隔中接收或者通过一些数量的系统时钟循环来在时间上隔开。在其他实施例中,可以在突发中接收一些其他数量的读取-修改-写入命令(例如,两个、四个、五个等)。

在框820中,方法800包括从存储体中的指定位置访问与读取-修改-写入命令相关联的读取数据。在一个实施例中,在读取访问子操作之前没有延迟,并且可以在接收读取-修改-写入操作时的同一列循环间隔或下一列循环间隔期间发生读取访问。在一个实施例中,表示存储体110和120中的位置的地址A在全局地址总线202上被驱出存储体110和120。执行由地址A指定的位置处的数据访问操作,并且从存储体110和120在全局数据总线104上驱动266位数据值。在一个实施例中,在连续的列循环间隔中执行用于所接收的每个读取-修改-写入操作的数据访问操作,或者通过一些数量的系统时钟循环在时间上隔开用于所接收的每个读取-修改-写入操作的数据访问操作。在一个实施例中,在突发中的任何读取-修改-写入操作的数据写入子操作之前执行突发中的每个读取-修改-写入操作的数据访问操作。

在框830中,方法800包括解码与每个读取-修改-写入操作相对应的读取数据。在一个实施例中,解码器254解码266位读取数据。解码器254使用读取数据中的10位校验子对读取数据执行错误检测和校正。根据实施例,解码器254可使用汉明错误校正、单个错误校正/双重错误检测或者一些其他错误校正技术以校正读取数据中的至少单个位的错误。作为错误校正的结果,去除10位校验子,并且解码器254输出用于每个操作的256位值。

在框840中,方法800包括在数据接口140上接收与读取-修改-写入命令相关联的写入数据。可以在数据总线107上从存储控制器104在数据接口140中的DQ焊盘242处接收写入数据。在一个实施例中,写入数据包括通过串并转换器244串并转换为256位值的8个32位字。然而,在其他实施例中,写入数据可以包括一些其他大小的值。在一个实施例中,用于每个命令的写入数据在连续的列循环间隔中接收或者通过一些数量的系统时钟循环在时间上隔开。

在框850中,方法800包括将接收到的写入数据与读取数据合并以形成用于每个操作的合并数据。在一个实施例中,使用数据屏蔽256,来自寄存器246的串并转换写入数据与来自解码器254的错误校正读取数据合并。在一个实施例中,利用来自存储控制器104的写入数据接收数据屏蔽256。数据屏蔽256可以包括用于逐位操作的数据以表示来自写入数据的哪些位应该利用来自读取数据的位重写入以及写入数据中的哪些位应该保持不变。数据屏蔽256的结果是256位合并的数据值。

在框860中,方法800包括编码合并数据。在一个实施例中,编码器258通过生成10位校验子并将校验子添加(例如,附加)至合并数据以创建用于每个读取-修改-写入操作的256位值来对合并数据进行编码。

在框870中,方法800包括将编码的合并数据写入到存储体中从中读取读取数据的位置。错误校正电路150可以将256位值驱动到全局数据总线204上,其中该值在由地址A识别的位置(即,从中读取读取数据的位置)处被写入到存储体110和120。在一个实施例中,仅在完成用于突发中的所有读取-修改-写入操作的读取操作之后执行突发中的每个读取读取-修改-写入操作的写入子操作。

图9是示出根据实施例的具有用于每对存储体的专用错误检测和校正电路的存储部件900的框图。在一个实施例中,存储部件900可以类似于上面参照图1和图2讨论的存储部件102。在一个实施例中,存储部件900包括多个存储体,其可以类似于上面讨论的存储体110和120。存储部件中的存储体可以成对布置,其中每对中的存储体相互关联。例如,存储体对可以包括Bank0和Bank4、Bank1和Bank5、Bank2和Bank6以及Bank3和Bank7。每个存储体均可以通过全局数据总线905连接。

在一个实施例中,每个存储体对均共享专用的错误检测和校正电路910、920、930和940。在一个实施例中,错误检测和校正单元可以位于全局数据总线905下方或与全局数据总线905相邻。例如,如错误检测和校正电路910的展开图所示,可以具有从存储体对(即,Bank0和Bank4)连接到错误检测和校正电路910的共享4位线以及从错误检测和校正电路910连接到272位全局总线905(其耦合至接口(例如,数据接口140和命令接口130))的第二4位线。错误检测和校正电路910、920、930和940中的每一个都可以类似于上面参照图1和图2描述的错误校正电路150。

在一个实施例中,用于每个存储体对的专用错误检测和校正电路910、920、930和940使得用于一个存储体对的读取-修改-写入操作的错误检测和校正以交错方式与存储体对的其他存储体并行处理。这种方法的成本在于所使用的附加错误检测和校正电路。然而,在一个实施例中,如果错误检测和校正电路910、920、930和940被建立在256位全局总线905下方,则可以减少占位面积。

在一个实施例中,存储控制器104得知每次只有每个存储体对的一个存储体可以执行读取-修改-写入操作的限制。然而,通过写入交易的仔细优化和再排序,用于这些读取-修改-写入操作的带宽可以近似地匹配正常写入操作的流的带宽。

前面的描述阐述了多个具体的细节(诸如具体系统、部件、方法等的示例)以提供对本公开的多个实施例的良好理解。然而,本领域的技术人员应该理解,在不具有这些具体细节的情况也可以实践本公开的至少一些实施例。在其他情况下,已知的部件或方法没有具体描述或者以简化框图的形式来表示以避免不必要地模糊本公开。因此,所阐述的具体细节仅仅是示例性的。具体实施例可以与执行示例性细节不同,并且仍然包括在本公开的范围内。

本说明书引用“一个实施例”或“实施例”表示结合至少一个实施例中包括的实施例所描述的具体特征、结构或特性。因此,本说明书各个部分中出现的说法“在一个实施例中”或“在实施例中”不是必须均参照相同的实施例。此外,术语“或”用于表示包括性的“或”而非排除性的“或”。

尽管以具体顺序示出和描述了本文的方法的操作,但每个方法的操作顺序可以改变,使得可以以逆序执行特定操作或者使得可以至少部分地与其他操作同时执行特定操作。在另一实施例中,可以以间歇和/或交替方式来进行不同操作的指令或子操作。

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