混合存储器模块的制作方法

文档序号:16989986发布日期:2019-03-02 00:53阅读:153来源:国知局
混合存储器模块的制作方法

所公开的实施例总体上涉及存储器系统、组件和方法。

附图说明

在附图的图中,通过示例而非限制的方式示出了详细描述,并且其中类似的附图标记指代类似的元件,并且在附图中:

图1a描绘了存储器系统100,其中母板105支持存储器控制器110,存储器控制器110经由20对半字节宽(4位或x4)主数据端口dqu/dqv和两个主命令和地址(ca)端口dcao和dca1与两个存储器模块115通信。

图1b描绘了图1a的存储器系统100,但是包括粗体虚线箭头以示出64b高速缓存行数据如何从使用粗体边界突出显示的单个闪存组件130f分布到一排十个类似地突出显示的dram组件130d。

图2描绘了根据一个实施例的图1a和1b的存储器切片125[4]。

图3以强调低阶模块半部115(0)的功能的方式描绘了图1的存储器系统100。

图4示出了根据一个实施例的图3的闪存空间335中的64b高速缓存行如何映射到dram存储器空间330中的64b高速缓存行。

图5是示出对模块半部115(0)的读存取的流程图500,并且参考图3中引入的信号和信号线。

图6是图示了根据一个实施例的直接高速缓存未命中/多设置高速缓存命中(missd/hitm)的时序图。

图7是根据一个实施例的直接高速缓存未命中/多设置高速缓存未命中(missd/missm)的时序图。

图8是示出对模块半部115(0)的写存取的流程图800,并且参考图3中引入的信号和信号线。

图9描绘了根据一个实施例的单个闪存设备900和dram高速缓存905的相关部分。

图10描绘了地址映射1000的形式,其减少了模块控制器118(0)读取高速缓存行tagsdm以标识用于高速缓存回写操作的脏高速缓存行条目所需的时间。

图11描绘了根据一个实施例的闪存设备1100,其中模块控制器118(0)管理两个数据结构,每个数据结构同时通过闪存工作。

图12描绘了当慢速和快速页面阵列1105和1110各自相对于图11的示例在它们各自的方向上前进时的图11的闪存设备1100。

图13描绘了当慢速和快速页面阵列1105和1110各自相对于图12的示例前进时的图11和12的闪存设备1100。

图14描绘了当快速页面阵列1110被重组并且头部到慢速页面阵列1105的子范围1105h向后前进以填充快速页面阵列1110留下的间隙时的图11-13的闪存设备1100。

具体实施方式

存储器模块包括相对快速、耐用且昂贵的动态随机存取存储器(dram)的高速缓存,以服务于更大量的相对慢速、磨损敏感且廉价的闪存。存储器模块上的本地控制器管理dram高速缓存和闪存之间的通信,以适应不同的存取粒度,减少存储器事务的必要数目,并最小化闪存组件外部的数据流。因此,存储器模块将闪存的非易失性和降低的每位价格与dram的速度和耐用性相结合。

图1a描绘了存储器系统100,其中母板105支持存储器控制器110,存储器控制器110经由20对半字节宽(4位或x4)主数据端口dqu/dqv和两个主命令和地址(ca)端口dca0和dca1与两个存储器模块115通信。存储器模块115在逻辑上被分成两个模块半部115(0)和115(1),它们可以被单独控制或一起控制以通过模块连接器116传送四十位或八十位数据。半部115(0)和115(1)为了本公开的目的是相同的;以下讨论集中于低阶模块半部115(0)。半部115(0)和115(1)之间的链路117允许两者在80位模式下响应相同的命令。

模块115支持dram高速缓存,其加速读和写访问并减少大量非易失性存储器的磨损。模块半部115(0)包括本地模块控制器118(0),有时称为寄存器或寄存器时钟驱动器(rcd),是在外部控制器110的指示下管理五个存储器切片125[4:0]的集成电路组件。每个切片125[4:0]包括两个闪存组件130f、两个dram组件130d和数据缓冲器(db)组件135。dram组件130d共同具有例如十六分之一(1/16)闪存组件130f的存储容量。在其他任务中,每个db组件135与模块控制器118一起工作以管理相同切片的dram组件130d与来自相同或不同切片的闪存组件130f之间的数据流。以下讨论集中于存储器切片125[4],最接近模块控制器118(0)的模块半部115(0)中的切片。剩余的切片125[3:0]基本完全相同。在其他实施例中,dram和闪存可以不同地布置。例如在dram组件130d以切片组织的情况下,闪存组件可以与这些切片的全部或子集分离。例如只有具有一个或多个dram组件的每个其他切片也可能包括闪存。

模块控制器118(0)经由链路ca0[15:0]从外部控制器110接收命令,并经由链路stat0[1:0]返回状态信息。模块控制器118(0)还:经由本地通信总线bcom控制db组件135[4:0];经由dram控制总线qc控制dram组件130d;并且经由闪存数据和控制总线adqf控制闪存组件130f。在一个实施例中,总线adqf符合称为onfi的接口规范,以用于“开放nand闪存接口”。其他实施例可以使用不同的接口和不同类型的易失性和非易失性存储器。

剩余的重点在于切片125[4],db组件135[4]经由八个主要数据链路dqp[39:32]与控制器110通信,并且经由对应的八个辅助数据链路dqs[39:32]与dram组件130d通信。读取和写入存储器访问以16位突发完成,因此db组件135[4]为每次存储器访问传送128位(4x2x16b=128b),并且模块半部115(0)的五个切片125[4:0]与外部控制器110传送累积的640位(5×128b=640b)。因此,使用10位字节,模块半部115(0)表现出64字节(64b)的访问粒度。dram组件130d共同用作高速缓冲存储器,并且在dram组件130d存储器与控制器110或闪存组件130f之间传递的64b数据集被称为“高速缓存行”。

外部控制器110发布请求来自闪存组件130f中的特定地址的信息的读命令。如果请求的地址被高速缓存在dram组件130d中,则模块控制器118(0)管理经由五个db组件135[4:0]来自一排10个dram组件130d裸片的该高速缓存行的递送。在此上下文中,“排”指的是模块控制器118(0)响应于主机侧存储器请求来访问(读或写)的组件集合。每个dram组件130d具有四位的数据宽度,因此模块半部115(0)具有四十位的排宽度。

如果所请求的数据不在高速缓存中-所谓的高速缓存未命中-模块控制器118(0)经由本地总线adqf从闪存组件130f中的一个或多个中的高速缓存行地址读取所请求的数据,并在模块半部115(0)的所有十个dram组件130d上均匀地分布所得到的闪存高速缓存行。本地双向或成对的单向菊花链数据总线dqt提供模块控制器118(0)和每个切片125[4:0]之间的点对点连接。在每个dram组件130d中高速缓存每个高速缓存行的子集支持对主机控制器110的并行、高速读和写访问。在单个闪存组件130f中存储完整的闪存高速缓存行有助于快速和有效的高速缓存写回和垃圾收集过程。

图1b描绘了图1a的存储器系统100,但是包括粗体虚线箭头以说明64b高速缓存行数据如何从使用粗体边界突出显示的单个闪存组件13of分布到一排十个类似地突出显示的dram组件130d。在宽模式中,模块115支持20个dram组件130d的排列;模块控制器118(0)和118(1)之间的链路117允许来自一个或多个闪存组件130f的高速缓存行分布在所有二十个dram组件130d上。

图2描绘了根据一个实施例的图1a和1b的存储器切片125[4]。dram组件130d中的每一个包括dram组件接口dq[3:0],其支持经由两个辅助数据链路组dq[35:32]和dqs[39:36]中的相应一个连接到数据缓冲器组件135的四位数据宽度(“易失性数据宽度”),闪存组件130f中的每一个包括经由多点总线adqf[15:0]连接到模块控制器118(0)(图1a和1b)的闪存组件接口fq,组件接口fq和总线adqf各自支持16位数据宽度(“非易失性数据宽度”)。转向逻辑200和205允许dram组件130d经由主数据链路dqp[39:32]与控制器110传送数据,或者经由本地总线dqt与闪存组件130f传送数据。转向逻辑205和通过db组件135的链路dqt另外允许切片125[4]在模块控制器118(0)和相邻切片125[3:0]之间传送数据。以下结合图3详细说明该功能。

图2另外示出了用于闪存组件130f的封装选项215以及用于dram组件130d的替代封装选项220和225。闪存封装选项215包括通过例如硅通孔(tsv)互连的两个堆叠的八个闪存器件或“裸片”。在该示例中,闪存组件130f位于模块基板230的任一侧。dram封装选项220包括由例如tsv互连的两个堆叠的八个dram裸片。因此,对于每个存储器访问,模块控制器118(0)选择一排dram裸片,来自每个dram组件130d的一个。每个dram堆叠包括具有数据缓冲逻辑的主裸片235。在封装选项225中,dram组件130d是双封装堆叠,一个封装在模块基板230的任一侧上。dram组件130d用作高速缓存存储装置,用于达到例如由闪存组件130f提供的存储空间的十六分之一。也可以使用具有相同或不同数目的dram或非易失性存储器裸片或封装的其他替代布置。

图3以强调低阶模块半部115(0)的功能方面的方式描绘了图1的存储器系统100。db组件135[4]和模块控制器118(0)包括多个三角形,多个三角形提示缓冲器并且被包括用于突出显示信息流的方向。信号缓冲器的选择和放置以及信号的路由通常在本领域人员的技能范围内。每个db组件135经由八个主数据链路dqp与存储器控制器110通信,将读取数据递送到读队列300并且将写入数据从写队列301接收到数据缓冲器302中。队列300和301以及控制器110的其他元件是常规的,因此省略了详细的讨论。

模块控制器118(0)包括缓冲器303、标记比较逻辑305、地址映射逻辑310、命令/地址多路复用器315、状态逻辑320、数据/地址选择逻辑324和标记块325。模块控制器118(0)从控制器110的读和写队列326和327接收命令和地址,并将状态信息传递回控制器110中的状态寄存器328。

结合图1介绍的模块半部115(0)的十个dram组件130d被统一描述为dram地址空间330。dram地址位ad[35]区分不同关联性和延迟的高速缓存。模块控制器118(0)将地址位ad[35]设置为零以存取32个64b高速缓存行(白色)的相对快速的直接高速缓存,并且设置为1以访问31个64b高速缓存行(阴影)的相对较慢的多设置高速缓存。特殊的高速缓存行条目tagsdm不高速缓存闪存数据,而是为每个直接和多设置高速缓存条目存储高速缓存标记和脏位。模块半部115(0)的十个闪存组件130f被共同描绘为闪存地址空间335中的64b闪存高速缓存行(白色方块)的阵列。闪存地址空间335存储高达dram空间330的高速缓存行的十六倍,因此使用比dram地址空间330多四个位(af[39:30]对比ad[35:30])来指定闪存地址。

如果闪存地址位af[34:30]与对应的dram地址位ad[34:30]匹配,则闪存空间335中的任意64b高速缓存行可以在dram地址空间330的直接高速缓存中具有对应的条目。多设置高速缓存对低阶地址位没有相同的限制;闪存地址空间335中的任意64b高速缓存行可以在dram地址空间330的三十一个多设置高速缓存行(阴影方块)中的任意一个中具有相应的条目。相对于直接高速缓存,这种多设置灵活性改进了高速缓存命中率但增加高速缓存延迟。

图4示出了根据一个实施例的图3的闪存空间335中的64b高速缓存行如何映射到dram存储器空间330中的64b高速缓存行。根据一个实施例,该页面的顶部描绘了闪存地址af[39:0]、dram地址ad[35:0]和控制器地址ac[39:0]的地址字段。闪存寻址可在一个堆叠中容纳多达64(2^6)个闪存器件,其中每个器件具有16k(2^14)个擦除块。每个擦除块进而包括64个页,每个页具有256(2^8)个64b高速缓存行。不使用六个字节地址位。dram寻址在一个堆叠中容纳多达八(2^3)个dram器件,其中每个器件具有十六(2^4)个存储体(“bank”)。每个dram存储体进而包括64k(2^16)排,每排具有128(2^7)64b高速缓存行。

转到图4的下部,闪存空间335被划分为由闪存地址位af[29:6]指定的16m(2^24)个逻辑切片。每个逻辑切片包括32排和32列64b高速缓存行,排和列分别使用闪存地址位af[39:30]指定。dram存储器空间330被划分为与闪存空间330相同的数量(2^24)的逻辑切片,其中每个dram切片由dram地址位ad[29:6]指定。但是,每个dram切片包括闪存中的十六分之一的高速缓存行。具体地,每个dram切片包括32排和2列64b高速缓存行,排和列分别使用dram地址位ad[35:30]指定。32dram高速缓存行(ad[35]=0)的左列用作相应闪存切片的直接高速缓存,而右列(ad[35]=1)用作多设置高速缓存。

首先考虑直接高速缓存,其条目使用大写字母示出,给定排的闪存条目中的任意高速缓存行可以高速缓存在针对对应排的直接dram条目中。例如第四排(af[34:30]=00100)中的闪存高速缓存行e映射到第四排(ad[34:30]=00100)的直接dram条目。闪存第四排中的任意其他闪存高速缓存行同样可以被映射到dram第四排的直接条目。尽管未示出,但是直接高速缓存中的每个高速缓存行还存储高速缓存标记以子指定dram高速缓存条目的闪存列。例如高速缓存行e将以直接标记tagd=00001存储在dram直接高速缓存中以标识闪存列一(af[39:35]=00001)。针对给定高速缓存行的读访问使用对应的高速缓存行读取该标记,并使用该标记快速确定所取回的高速缓存行是否是所寻求的数据。数字地,dram存储器空间330包括用于三十二个闪存高速缓存行的一个直接高速缓存行。然而,由于高速缓存局部性的原理,给定访问在直接dram高速缓存中找到数据的可能性-直接高速缓存“命中”-远远大于三十二分之一。

使用小写字母示出了多设置高速缓存行条目。闪存切片中的任意1,024(32x32)64b高速缓存行条目(地址af[39:30],闪存空间335)可以被高速缓存在31个多设置dram条目中的任意一个中(地址ad[35]=1,dram存储器空间330)。例如闪存第四排(af[34:30]=00100)中的闪存行f被映射到dram第五排(ad[34:30]=00101)的多设置条目,但可以映射到三十一个多个集合条目中的任意一个。在本实施例中,一些闪存行可以被高速缓存在直接和多设置高速缓存两者中,如使用条目g/g和k/m所指示的。

存储在dram地址ad[35:30]=11111处的高速缓存行tagsdm是64b(640b)高速缓存行,其被分成32个20b标记条目ta到tf,一个用于dram存储器空间330中的三十二个高速缓存排中的每一个。标记条目ta到tf中的每一个包括五个字段,如针对标记条目tf(第五排,或ad[34:30]=00101)所示。从右到左,十个低阶位tf[9:0]为对应的高速缓存第五排指定多设置标记;第十一位tf[10]是多设置脏位mf,指示第五排中多设置条目的内容是否脏;位tf[13:11]被保留;第十五位tf[14]是直接脏位df,指示第五排中直接条目的内容是否脏;并且五个高阶位tf[19:15]为对应的高速缓存第五排指定直接标记。剩余的标记条目中的每一个都是类似的,除了最后一个标记条目tf缺少多设置脏位和高速缓存标记字段;位tf[13:0]被保留。每个标记条目中的直接标记是冗余的,其中类似的直接标记与对应的高速缓存行一起被存储,并被用于检测直接读取命中。如下所述,包括具有多设置标记的冗余直接标记和公共地址处的脏位允许模块控制器118(0)最小化回写期间的数据传递。

图5是示出对模块半部115(0)的读访问的流程图500,并且参考图3中引入的信号和信号线。通常,信号及其相关联的节点具有相同的名称。从上下文中可以清楚地看出给定的名字对象是指信号还是对应的节点。

当外部控制器110在指定控制器地址ac[39:6]的主链路csp/cap上发布读取请求时,读事务开始(505)。模块控制器118(0)使用多路复用器315将该地址的一部分通过辅链路cs/ca引导到dram存储器空间330,作为指定dram地址ad[35:6]的直接地址adirect(510)。dram存储器空间330响应地在辅助数据链路dq上递送所寻址的直接高速缓存数据lined和对应的五位直接标记tagd(515)。数据lined经由主链路dqp被发送到控制器110,并且直接标记tagd被剥离并经由本地链路qt被传达到标记比较逻辑305。如果标记tagd匹配地址位ac[39:36],则从dram存储器空间330读取的高速缓存行路lined是所追求的数据;这种情况称为直接高速缓存命中(520)。模块控制器118(0)响应地指示状态逻辑320向状态寄存器328发布直接命中信号hitd(525),以使控制器110知道所递送的读数据lined是所请求的数据。从而结束了读取事务。

如果对直接高速缓存的尝试访问未命中,则模块控制器118(0)向状态寄存器328(530)发布直接未命中信号missd,使得控制器110忽略所递送的数据lined并试图找到多设置高速缓存中所请求的高速缓存行条目。模块控制器118(0)将db组件135[4:0]中的数据lined保留在缓冲器302中,使得lined可以被写入多设置高速缓存,并且由新的闪存高速缓存行覆盖的其dram高速缓存行应当是多设置的高速缓存也会导致未命中。

为了访问多设置高速缓存,模块控制器118(0)经由多路复用器315引导具有dram地址空间330的高速缓存行tagsdm的地址atag-blk的读取请求(535)。64b高速缓存行tagsdm经由链路qt(540)从所有五个db组件135[4:0]被传达到标记比较逻辑305。如上面结合图4所述,高速缓存行tagsdm包括用于31个多设置高速缓存行条目t[a-f’]中的每一个的多设置标记tagm[a-f’]。标记比较逻辑305将多设置标记tagm[a-f’]与地址位ac[39:30]进行比较,以确定哪个(如果有的话)多设置高速缓存行包括所请求的数据(545)。对于多设置高速缓存命中多设置高速缓存行tagm[x],模块控制器118(0)向与所标识的高速缓存行tagm[x](550)相关联的多设置地址amulti-set发布读请求。db组件135[4:0]将所请求的数据传达到控制器110,并且模块控制器118(0)传达来自状态寄存器320的多设置命中信号hitm(555),以让控制器110知道新的读取数据集合是所请求的数据。这结束了导致多设置命中的读取事务。

多设置命中使用三个连续的dram访问(读直接高速缓存,读高速缓存行tagsdm的多设置标记,并读标识为“命中”的多设置高速缓存行)返回所请求的数据。因此,多设置命中的读取延迟大约是直接高速缓存命中的读取延迟的三倍。这种速度损失被多设置映射灵活性提供的高速缓存命中的增加的可能性所抵消。通过将三个存储器访问与其他高速缓存访问交错,可以最小化对存储器带宽的影响。

从读延迟的角度来看,最坏的情况是在决策545处的多设置未命中。在那种情况下,模块控制器118(0)在多设置高速缓存中选择干净的条目tagm[y](560)。通过在高速缓存行tagsdm中包含多设置脏位来促进这种选择,该高速缓存行tagsdm是从dram读取的,以支持决策545,并且因此可以在没有另一个dram访问的情况下考虑。如果多设置条目都不是干净的,则模块控制器118(0)执行高速缓存回写(根据一个实施例在下面详述的过程)以获得干净的多设置高速缓存行。假设一个干净的多设置高速缓存行tagm[y]可用,从所请求的直接高速缓存行读取的数据lined被复制到干净多设置位置tagm[y],模块控制器118(0)将所请求的直接高速缓存行保留在db组件135[4:0]中(565)。

然后,模块控制器118(0)从闪存地址空间335读取所请求的数据linef,将数据linef传达到db组件135[4:0],并将数据linef和直接标记tagd写入由来自控制器110的原始读取请求指定的直接高速缓存地址(575和580)。为了完成到dram的该数据和标记传递,模块控制器118(0)从原始读取请求中导出闪存地址aflash,并使用该地址来启动闪存读操作。64b高速缓存行经由链路adqf被传达到模块控制器118(0)。标记块325将来自地址逻辑310的数据标记atag与闪存数据总线qf上的相关联的64b高速缓存行组合。模块控制器118(0)经由数据总线dqt和db组件135[4:0]将64b高速缓存行传达到控制器110,并将标记和高速缓存行两者写入dram地址空间330。模块控制器118(0)也更新高速缓存行tagsdm的值,以反映数据linef的新直接标记和数据lined的新多集标记。在一个实施例中,地址逻辑310将来自535的读请求的标记和脏位与新的直接和多设置标记以及对应的直接和多设置脏位组合,并将该信息传递到标记块325以经由db组件135[4:0](585和590)递送到dram地址空间330。该过程然后返回到510,其中模块控制器118(0)请求直接高速缓存中的更新的高速缓存行以递送到控制器110。替代地,可以将linef同时递送到控制器110和dram高速缓存,或者该过程可以在590结束以等待来自控制器110的后续请求,这次将导致直接高速缓存命中。

图6是说明根据一个实施例的直接高速缓存未命中/多设置高速缓存命中(missd/hitm)的时序图。从最左侧开始,控制器110在链路csp/cap[15:0]上发布使用粗体边框突出显示的读请求。模块控制器118(0)缓冲这些命令和地址信号,并在缓冲延迟tsuf之后,经由多路复用器315和辅助链路css/ca将它们传达到dram地址空间330。然后,在排到列读延迟trcd和列访问时间tcac之和之后dram地址空间330将所请求的高速缓存行的内容递送到辅助数据链路dqs[39:0]。在另一个缓冲延迟tbuf之后,所请求的数据经由主数据链路dqp[39:0]被传达到控制器110,并且直接标记tagd经由链路qt呈现给模块控制器118(0),以供标记比较逻辑305考虑。

如果标记比较逻辑305识别高速缓存命中,则模块控制器118(0)将直接命中信号hitd发送到控制器110以完成读访问。鉴于该示例中的定时,对于直接高速缓存命中,总读取延迟因此约为20纳秒。然而,对于直接标记未命中,模块控制器118(0)通过状态链接stat0发布missd信号并发布第二本地读取命令(粗体a2),该第二本地读命令从高速缓存行tagsdm寻找高速缓存标记,其在辅助数据链路dqs[39:0](粗体q2)上递送。此直接高速缓存未命中/多设置高速缓存命中(missdhitm)示例的第三个也是最后一个访问以第三个本地读命令(粗体a3)开始。因此,对于多设置高速缓存命中,总读取延迟大约为65纳秒。使用具有相对较薄边界的信号表示的存储器事务是可以交错的不相关事务。

图7是根据一个实施例的直接高速缓存未命中/多设置高速缓存未命中(missd/missm)的时序图。从最左侧开始,控制器110在链路csp/cap[15:0]上发布使用粗体边框突出显示的读请求。该流程如图6的示例中那样进行,直到标记比较逻辑305识别出多设置高速缓存未命中(粗体t2)。模块控制器118(0)从原始读取请求导出闪存地址aflash,并使用该地址来启动闪存读操作(链路adqf[15:0]上的粗体a1’)。在闪存读延迟trdf之后并且在传输时间ttrf之后,将64b高速缓存行q3被传达到模块控制器118(0)链路adqf[15:0]。模块控制器118(0)然后将该数据写入dram地址空间330并将其传达到控制器110。替代地,模块控制器118(0)可以简单地将闪存数据加载到dram高速缓存中以等待来自控制器110的后续重试。在该示例中,高速缓存未命中的总读取延迟约为1,100纳秒,其由1000纳秒(1μs)闪存读取延迟trdf支配。

图8是示出对模块半部115(0)的写访问的流程图800并且是指图3中引入的信号和信号线。当控制器110发布通过主链路dqp的64b的写数据linewd连同通过主链路csp/cap的对应写请求时,写事务开始(805)。db组件135[4:0]在模块控制器118(0)的方向上将写入数据linewd存储在缓冲器302中(810)。

来自控制器110的写请求指定地址ac[39:6],其可以在dram高速缓存中具有对应的直接或多设置条目。模块控制器118(0)首先考虑直接高速缓存,使用多路复用器315在辅链路cs/ca上传达地址amulti-set(810)。dram存储器空间330响应地通过辅助数据链路dq递送高速缓存行tagsdm,其中dq组件125[4:0]中的每一个经由链路qt将它们的贡献传达给模块控制器118(0)的标记比较逻辑305(815)。替代地,可以查询对应标记tagd的直接高速缓存行条目,如在读取情况中所做的那样;然而,高速缓存行tagsdm包含直接和多设置标记条目两者,使得模块控制器118(0)可以使用单个dram读访问来检测直接和多设置命中。

如果目标写的直接标记与位ac[39:36]匹配,则所考虑的高速缓存行是写请求的目标,直接高速缓存命中(820)。模块控制器118(0)向直接高速缓存行(825)发布写命令,这使得写数据linewd和对应的直接标记通过辅助链路dq从数据缓冲器302被写入指定的直接高速缓存行(830)。模块控制器118(0)然后更新高速缓存行tagsdm以设置所考虑的直接高速缓存行的脏位,从而指示直接高速缓存行条目与闪存地址空间335中的对应信息不匹配(835)。因此,对直接高速缓存行条目的高速缓存命中需要三次dram访问,一次读高速缓存行tagsdm,第二次写直接高速缓存,第三次更新高速缓存行tagsdm中的直接脏位。(如果高速缓存行tagsdm已将新写入的高速缓存行标识为脏,则最后一步是可选的。)

返回到决策820,如果对直接高速缓存的尝试访问是未命中,则模块控制器118(0)将高速缓存行tagsdm中的31个多设置标记tagma至tagme'与考虑的写地址的对应的地址位进行比较,以确定多设置高速缓存条目中的任意一个是否是要写入的数据的目标(840)。如果多设置地址m[x]中的一个是命中,则模块控制器118(0)向指定的多设置地址(845)发布写请求,并指示写数据linewd从db组件135[4:0]中的数据缓冲器302移动到dram地址空间330中的多设置位置(850)。模块控制器118(0)然后更新高速缓存行tagsdm以设置所考虑的多设置高速缓存行的脏位(835)。因此,多设置高速缓存命中需要三次dram访问,一次用于读取高速缓存行tagsdm,第二次用于写入多设置高速缓存,并且第三次用于更新高速缓存行tagsdm的脏位。与直接情况一样,如果覆盖的高速缓存行条目已标记为脏,则第三步是可选的。

返回到决策840,模块控制器118(0)通过查看高速缓存行tagsdm的多设置脏位ma-me'(标记条目ta-te'中的每一个的第十位)来查找干净的多设置高速缓存行(855)。如果没有干净的多设置高速缓存行,则模块控制器118(0)将来自脏多设置高速缓存行之一的数据写回闪存空间330-闪存回写-以创建干净的多设置高速缓存条目(860)。当干净的多设置高速缓存行m[y]可用时,模块控制器118(0)将来自缓冲器302的数据写入多设置高速缓存的地址ad[y](860和865)。模块控制器118(0)然后更新高速缓存行tagsdm以包括新高速缓存的数据的脏位和多设置标记条目(870)。因此,多设置高速缓存未命中需要三次dram存取,一次用于读取标记线tagsdm,第二次用于将高速缓存行从闪存写入多设置高速缓存,并且第三次用于更新高速缓存行tagsdm中的对应脏位。写事务可以以上面结合读访问讨论的方式进行交错。在820和840处进行的确定都基于输入地址和高速缓存行tagsdm,并且可以同时执行。如果请求的地址在直接和多设置高速缓存两者中,则模块控制器118(0)仅更新直接条目,以及高速缓存行tagsdm中的对应标记和脏位。可以清除相关的多设置脏位以指示多设置条目可用。

图9描绘了根据一个实施例的单个闪存器件900和dram高速缓存905的相关联部分。闪存器件900包括非易失性阵列910和易失性页寄存器915。模块控制器118(0)以均匀分布写操作并最小化与闪存器件900外部的器件传送数据的需要的方式在每个这样的闪存器件900中维护一个或多个数据结构。分配写入操作可延长闪存的使用寿命,并且最小化外部数据传输减少了对闪存总线adqf的需求,以提高了整体速度性能。

闪存器件900以“存取单元”的形式存储数据,“存取单元”可以被定义为作为单个数据块处理的最小存储区。在本示例中,每个非易失性存取单元是十六千字节(16kb)页920,并且每个页存储256个64b高速缓存行。对闪存阵列910的读和写一次一页地执行。擦除在64页擦除块925上执行。因此,闪存阵列910被分成擦除块925,有时称为“擦除单元”,每个擦除块被分成页920。页920一旦被写入,就不能被覆盖直到整个对应的擦除块925被擦除。虽然示出为5×5阵列,但实际的闪存器件将具有例如大约一百万个擦除块925。

页920被模块控制器118(0)在dram中维护的表中标记为已擦除、有效或无效。擦除页面920为空,准备接收写数据。有效页面920包括准确反映相关联物理页面地址的信息或者与包含这种数据的dram高速缓存行条目相关联的数据。当将本地和高速缓存的数据条目移动到新页面以允许有效地覆盖条目时,页面920被标记为“无效”。该移动由控制器118(0)引导,控制器118(0)在dram中维护表格,该表格将物理地址映射到闪存地址。

闪存阵列910在最小地址addrmin(左上)和最大地址addrmax(右下)之间延伸,并且包括连续有效和无效页面条目的页面阵列922。页面阵列922是模块控制器118(0)在头指针head和尾指针tail之间保持的数据结构,两者都保持在模块控制器118(0)内的寄存器(未示出)中。头指针head指向闪存页920的下一个空的闪存页的地址以接收数据写入。尾指针tail指向存储最旧数据条目的页920中的一个,即最近最少写入的数据条目。每个擦除块925中的无效闪存页920的数目趋于随时间增加,因此具有最旧条目的擦除块925因此倾向于在具有最多页标记为无效的擦除块中。

当头部和尾部指针的分离超过阈值时,垃圾收集过程被触发。模块控制器118(0)将具有最旧条目的擦除块中标记为有效的每个页面920复制到由头指针head标记的地址,为每个传递的页面920递增头部和尾部指针head和tail,直到来自最旧的擦除块的所有有效页面移动到页面阵列922的头部。然后擦除最旧的擦除块925,并且页面阵列922缩短与擦除的页面相关联的无效页面条目的数目。因此,数据结构以随着时间写入每个闪存页面相等的次数的方式蛇形通过闪存阵列,最大化闪存器件900的耐久性。在fredericka.ware和elyk.tsern的美国专利8,745,315中详细描述了类似的数据结构。

易失性页面寄存器915(在该实施例中本身存储16kb页)促进向闪存页面920传递数据和从闪存页面920传递数据。模块控制器118(0)利用该资源来最小化闪存器件900外部的数据流,从而释放数据和控制总线adqf以支持其他闪存器件的闪存读和写事务。在上述垃圾收集过程中,例如每个数据结构的头部和尾部位于同一闪存器件900内;因此,可以在没有外部数据连接的情况下完成从数据结构922的尾部到头部的移动页条目。

模块控制器118(0)还使用页寄存器915来减少高速缓存回写操作期间的外部数据流。例如如果从高速缓存905回写需要来自dram的一个高速缓存行来覆盖闪存页920的对应线,则将闪存页的未受影响的线读入页寄存器91,用来自dram的一个新条目更新,并且将得到的更新页面从页面寄存器915写入由头指针head标识的新的闪存页面920。然后将旧的闪存页面920标记为无效。以这种方式,回写需要数据和控制总线adqf以仅传送来自dram高速缓存的脏高速缓存行。

每个闪存页面920包括256个高速缓存行,并且闪存地址空间335中的1,024个高速缓存行表示这些页面中的四个。高速缓存行tagsdm包括这四个页面的所有直接和多设置脏位,因此可以通过读取对应的高速缓存行tagsdm来标识给定闪存页面920的所有脏条目。为了回写到目标页920,模块控制器118(0)将目标页中的256行传送到页面寄存器915;读取高速缓存行tagsdm以标识每个脏高速缓存条目;将脏高速缓存行从dram写入页寄存器915以覆盖陈旧数据;将合并后的数据复制到头指针head指示的页阵列922的页;标记原始闪存页面无效;并增加头指针head。因此,蛇形数据结构将在长度上增加,直到下一个垃圾收集过程将最旧的有效条目移动到页面阵列的头部并用最旧的条目擦除擦除块。

垃圾收集的频率和闪存器件900的磨损寿命将部分地取决于超出物理存储器所需的擦除块的擦除块925的数目。在根据一个实施例的模块中,闪存器件容量与物理存储器空间的比率是十比八(10/8),这使得头部和尾部指针head和tail之间的间隙高达约25%的闪存地址空间。相对于物理存储器空间增加闪存容量降低了垃圾收集的频率并因此增加了闪存器件的寿命。

图10描绘了地址映射1000的形式,该地址映射减少了模块控制器118(0)读取高速缓存行tagsdm以标识用于高速缓存回写操作的脏高速缓存行条目所需的时间。回想每个高速缓存行tagsdm是64b或640b,如果分布在切片125[4:0]的所有十个dram组件130d上以响应于相同的读请求同时且并行地被访问,则可以最快速地读取该信息。为实现这一点,将闪存页面地址映射到dram行地址。因此,模块控制器118(0)可以使用回写目标的闪存页地址以从10个dram器件的相同排和行读取以取回必需的高速缓存行tagsdm。因此,可以使用单个dram读取事务来读取整个闪存页的直接和多设置脏位。

图11描绘了根据实施例的闪存器件1100,其中模块控制器118(0)管理两个数据结构,每个数据结构同时通过闪存以它们的方式工作。相对长的页阵列1105在由尾部和头部指针tails和heads指示的闪存地址之间延伸,并且相对短的页面阵列1110在由尾部和头部指针tailf和headf指示的闪存地址之间延伸。模块控制器118(0)为每个闪存器件900维护这些和其他指针。对于每次写回闪存器件1100,根据源页面中的脏高速缓存行的数目,来自源页面的条目被写入由头指针heads或headf中的任一个指定的页面地址。相对脏的页面被写入指针headf,而相对干净的页面被写入指针heads。

由于高速缓存局部性的原理,相对干净的页面倾向于比相对脏的页面更慢地累积写。因此,期望页面阵列1105的擦除块925比页面阵列1110的擦除块925更慢地累积无效页条目。因此,慢速页面阵列1105被保持为比快速数据结构1110更长,使得垃圾收集趋于移动来自具有相对高百分比的无效页面条目的擦除块925的页面。可以选择用于在慢速和快速页面阵列1105和1110的头部之间进行选择的脏行的阈值数目和页面阵列的相对大小,以最大化恢复的闪存页的无效页面条目的平均数目。

图12描绘了当慢速和快速页面阵列1105和1110各自相对于图11的示例在它们各自的方向上前进时图11的闪存器件1100。在该实施例中,页阵列1105和1110在相同的闪存器件中共享相同的地址范围,并且因此随着时间彼此干扰。在该实施例中,这种干扰作为正面碰撞发生,其中慢速和快速页面阵列1105和1110在相反方向移动。在该示例中,每个页阵列被分成两部分,其中慢页面阵列1105被分成头部和尾部1105h和1105t,并且快速页面阵列1110被分成头部和尾部1110h和1110t。模块控制器118(0)维护闪存阵列910的状态信息,这里描述为快速和慢速链路linkf和links,其允许数据结构通过和围绕彼此跳跃。

图13描绘了当慢速和快速页面阵列1105和1110相对于图12的示例各自前进时的图11和12的闪存器件1100。垃圾收集具有快速页阵列1110的高级尾部指针tailf,以打开快速页面阵列的尾部1110t与慢速页面阵列的头部1105h之间的擦除页面的间隙。当发生这种情况时,模块控制器118(0)冻结用于慢页阵列1105的头指针heads并开始保持第二头指针heads0,其在相反方向上递增以填充间隙。一旦间隙被填充,模块控制器118(0)返回到写入头指针heads。间隙的大小与快速页面阵列1110的长度成比例。在擦除块925的数目比物理存储器所需的数目多大约25%的实施例中,快速页面阵列1110被维持为慢页面阵列1105的长度的大约十六分之一。

如果间隙变得太大,或者保持打开太长时间,则模块控制器118(0)可以移动来自快速或慢速页面阵列1105和1110中的任一个或两个的最旧条目,直到间隙被填充。同样可以对快速页面阵列1110进行分段和重组。因此,模块控制器118(0)将慢速和快速页面阵列1105和1110中的每一个保持为连续的地址范围(有时环绕),或两个地址子范围。其他实施例允许分段成更多子范围。

图14描绘了当快速页面阵列1110被重组并且到慢速页面阵列1105的头部处的子范围1105h向后前进以填充快速页面阵列1110留下的间隙时的图11-13的闪存器件1100。

虽然已经结合具体实施例描述了本主题,但是也可以设想其他实施例。其他变体对于本领域技术人员来说是显而易见的。因此,所附权利要求的精神和范围不应限于前面的描述。只有那些专门叙述“用于…的部件”或“用于…的步骤”的权利要求才应按照35u.s.c§112第6段要求的方式解释。

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