本申请要求于2011年7月14日提交的美国临时申请第61/507,665号和2011年12月21日提交的美国实用申请第13/332,849号的优先权,其全部内容结合于此作为参考。
具体实施方式
在一个实现方案中,根据本发明的系统可以被设计为通过各种大容量存储协议进行操作,包括SAS(“串行连接SCSI”)、FC(“光纤通道”)和FC-AL(“光纤通道仲裁环路”),所有这些都是基于小型计算机系统接口(“SCSI”)协议和串行ATA(“SATA”)协议的。本领域普通技术人员应当熟悉这些大容量存储协议,因此,这样的协议不会在本文中进一步讨论。除非在调用特定协议的情况下,本文所公开的系统和方法不依赖于正在使用的特定协议,并被设计为通过所有协议进行正确操作。此外,根据本发明实施方式的系统和方法可以适用于与目前在使用或将来开发的其他类似协议一起使用,这些协议包括用于企业级应用的协议以及用于诸如最终用户的其他应用协议。本文所述的系统包括用于实现闪存器件的闪存控制器硬件架构的新方法和/或装置。
参照图1,其示出了通过根据本发明实施方式的闪存介质控制器所实现的系统100的框图。在一个示例中,系统(或结构)100可包括块(或电路)102、多个块(或电路)104a至104n、多个块(或电路)106a至106n、块(或电路)18、块(或电路)110、块(或电路)112、块(或电路)114、块(或电路)116。电路102至116可以表示被实现为硬件、固件、软件、硬件、固件和/或软件的组合或者其他的模块和/或块。
在一个示例中,块102可以实现根据本发明实施方式的闪存介质控制器(FMC)。块104a至104n可以被实现为第一数量的闪存储器件或元件。块104a至块104n可以耦接至块102的第一闪存通道。块102的第一闪存通道可以被配置为对各个块104a至104n提供独立的芯片启用(CE)信号。块106a至块106n可以被实现为第二数量的闪存存储器件或部件。块106a至块106n可耦接至块102的第二闪存通道。块102的第二闪存通道可以被配置为对各个块106a至块106n提供独立的芯片启用(CE)信号。尽管FMC102以两个闪存通道的示例进行了说明,对本领域技术人员显而易见的是,可以相应地实现另外的闪存通道以满足特定实现的设计标准。闪存器件104a至104n和106a至106n可以被实现为包括一个或多个裸片的单个闪存组(flash package)。闪存器件104a至104n和106a至106n通过使用NAND和/或NOR闪存器件来实现。块102可以包括用于NAND闪存和/或NOR闪存的适当的物理层支持(PHY)。
块108可以实现可耦接至块102的外部FMC处理器(FARM)。块110可以实现可被配置为将静态随机存取存储器(SRAM)和/或动态随机存取存储器(DRAM)耦接至块102的存储器控制器。块112可以被实现为一个或多个SRAM器件。块114可以被实现为一个或多个DRAM装置。块116可以实现耦接块110和块114的双倍数据速率物理层(PHY)接口。在一个示例中,块102、108、110、112、114和116可以实现单芯片系统(SOC)结构。
块102可以实现为被配置为协助各种应用程序使用闪存器件104a至104n和闪存器件106a至106n的软IP块。正如本文使用的,术语“软IP块”通常是指可以以软件(例如,HDL代码、RTL代码等)提供的集成电路的构建块(building block)。块102通常支持与闪存器件的多个闪存接口。块102通常不包括处理器(例如ARM)。然而,在一个示例中,块102可以实现被配置为将块102耦接至外部处理器108的接口(例如32位的AHB等)。块102通常被配置为处理由块104a至104n和块106a至106n形成的闪存介质海量存储阵列的管理。在一个示例中,块102可以利用多例示(multiply-instantiated)闪存通道控制器(FLC),其能够执行与附接有多个独立闪存器件的单个闪存数据通道相关联的大部分管理功能。从块102可能对闪存访问了解甚少这个意义上说,块102的功能可能有点宽泛。块102通常更多地涉及将闪存感知(flash-aware)通道编织(weave)成单个硬件实体。在一个示例中,实现块102的软IP可以进行参数化以支持用于应用程序的最大可能通道。例如,在一个实现中,通道的数量可以为2。在另一实现中,数量可以为8。
在一个示例中,块102可以支持的特征包括:(i)两个闪存通道;(ii)在每个闪存通道上的高达八个芯片启用信号(CE);(ⅲ)闪存接口,包括异步正常模式、异步扩展模式、Toggle1.0、ONFI2.3、ONFI2.1、Toggle2.0;(iv)硬件可配置的多个通道之间的专用ECC或共享ECC(例如实现块102的软IP包的参数化特征);(v)闪存接口上的8位数据;(vi)Toggle2.0或ONFI2.3的闪存接口规范的闪存接口上的高达200MHz的DDR速率;(vii)部分读取命令,(viii)随机读取命令;(ix)关于闪存写入/读取的CRC删除/插入(strip/insert)选项;(x)对4K字节数据高达64位的校正;(xii)512、2K、4K字节数据上的可配置的n位校正(n最大值=64);(xii)用于寄存器编程的32位AHB接口;(xiii)上下文命令在外部存储器(如DRAM或SRAM)上的存储;(xiv)在闪存通道控制器中的直通缓冲器(cut-through buffer);(xv)提供更好性能的独立闪存读写数据路径;(xvi)对各个闪存单元号(FUN)报告的有序状态;(xvii)针对每个闪存通道的数据路径支持一个读取缓冲控制器(BC)接口和一个写入缓冲控制器接口;(xviii)支持用于上下文检索的读取BC接口;(xix)支持用于上下文更新的写入BC接口;(xx)支持用于空闲资源指针(CFRP)的读取/写入BC接口。
参考图2,图2示出了图1的块102的更详细的框图,该框图示出了根据本发明实施方式的示例闪存介质控制器(FMC)结构。在一个示例中,块102可以实现三个主要功能接口:缓冲控制器(BC)接口、闪存器件接口以及处理器接口(例如,32位AHB等)。在框图的左侧和左上侧示出了缓冲控制器(BC)接口。在一个示例中,可以实现七个缓冲控制器接口(例如,三个读取接口BC_RD_I/F、三个写入接口BC_WR_I/F和一个读取/写入接口BC_RD/WR_I/F)。在框图的右侧示出了闪存器件接口。在一个示例中,可以实现两个闪存通道接口(例如,FLASH_I/F_0和FLASH_I/F_1)。在框图的右上侧示出了32位AHB接口。在一个示例中,32位AHB接口可用于对块102中的寄存器进行编程、读取状态及使用诊断寄存器。
块102通常包括块(或电路)150、块(或电路)152、多个块(或电路)154a至154n、多个块(或电路)156a至156n、多个块(或电路)158a至158n、块(或电路)160、块(或电路)162、块(或电路)164、块(或电路)166、块(或电路)168、块(或电路)170、多个块(或电路)172a至172n以及多个块(或电路)174a至174n。电路150到174a至174n可以表示可实现为硬件、固件、软件、以及硬件、固件和/或软件的组合或者其他实施方式的模块和/或块。块150可以实现处理器接口逻辑(PIL)。块152可以实现数据DMA管理器(DDM)。块154a至154n可以实现闪存总线控制器(FBC)。块156a至156n可以实现闪存通道控制器(FLC)。块158a至158n可以实现数据传输路径(DTP)。块160可以实现上下文提取仲裁器(CA)。块162可以执行上下文空闲指针资源(CFPM)。块164可以实现消耗上下文管理器(CCM)。块166可以实现上下文检索端口(CRP)。块168可以实现上下文更新端口(CUP)。块170可以实现上下文指针列表端口(CPLP)。块170通常是可选的。块172a至172n可以实现数据DMA读取接口端口(DDRIP)。块174a至174n可以实现数据DMA写入接口端口(DDWIP)。并且,块172a至172n和块174a至174n通常形成数据DMA接口端口(DDIP)。
在一个示例中,块150可以提供从块108至102的可寻址资源(例如,经由AMBAAHB-Lite接口)的接口。块150可以向所有可寻址资源提供接口并且向块102中的不位于块156a至156n内的子模块的配置和状态寄存器提供直接接口。块150也可以向各个块156a至156n中的可寻址资源提供接口。此外,块150可以包含一个上下文构成缓冲器(CCB),其中,处理器固件可以将实际介质上下文写入块102以经由块168存储到系统缓冲器。在一个示例中,块150可以包括以下特征:至108的32位AMBAAHB-Lite从属接口;可以为输入时钟值(例如,HCLK)的一些划分值(或相同)的系统时钟(例如,SYS_CLK);对块102中的所有配置寄存器和状态寄存器以及处理器可寻址空间的访问;由处理器固件用于构建存储在系统缓冲器中的上下文的上下文构成缓冲器(CCB);分布到块156a至156n中的每一个的处理器接口,其中,对各个寻址资源的访问由处理器访问端口(PAP)处理,并且其包含可被块102中的多个子模块使用的寄存器。块150可以对没有逻辑地存储在块156a至156n中的可寻址资源执行所有寄存器解码和所有读取数据复用(multiplex)。
块152通常管理两个数据传输,一个用于闪存编程(例如,从缓冲器到闪存器件的数据交易),另一个用于闪存读取(例如,从闪存器件到缓冲器的数据交易)。DMA数据路径通常包括从块156a至156n到相应的块158a至158n、数据DMA接口端口(DDIP)块172a至172n以及块174a至174n的分离的32位读写数据总线。块158a至158n可以包含ECC功能。DMA数据传输通常包括一系列事件,该一序列事件可以包括通过块102的其他子块(或端口块)访问相应的上下文。在一个示例中,一个DMA传输可以包括FLC请求、检索上下文操作、数据传输和FLC完成阶段。
在FLC的请求步骤中,数据传输可以随着块156a至156n中的一个升高各自的请求线而开始。在检索上下文操作中,可以经由上下文检索端口(CRP)接口166从一个缓冲控制器检索相应的上下文。数据传输可以发生在DDIP、DTP和FLC块之间,在该过程中,上下文可以发送至DDIP并且可以被写回或不被写回。在FLC完成阶段,到选定块156a至156n的完成线可以升高以表示传输结束。DDM152可以执行检索上下文并向DTP块提供输入,以方便数据交易。
块154a至154n通常在相应的闪存通道上执行至一组NAND闪存器件的低级接口信令。通常对各个闪存通道控制器(FLC)156a至156n存在一个闪存总线控制器(FBC)154a至154n。块154a至154n通常管理用于几个接口类型的闪存接口协议的各个周期的时序以及给定类型的不同时序模式(例如,异步、ONFI2.0同步、ONFI2.3同步、三星Toggle1.0、三星Toggle2.0等)。在一个示例中,通过一组内部时序寄存器中存储的时序计数,可以控制周期的定时。块154a至154n的核心逻辑通常在与其余的块102不同的时钟域下操作。一般地,只有时序寄存器组(set)位于与其余的块156a至156n相同的时钟域中。通常在寄存器和FBC核心之间通常不需要同步逻辑,因为只有在FBC是静态(quiescent)时(例如,没有未完成(outstanding)操作)寄存器才被写入,所以寄存器被视为静态(static)的。
块156a至156n通常执行对各个裸片的命令的调度。块156a至156n管理各个相应闪存通道上的命令序列。块156a至156n提供控制寄存器和状态寄存器,通过它们,固件能够对裸片编程并观察状态。每个块156a至156n均包括上下文管理和裸片管理。块156a至156n通常负责处理上下文。
块158a至158n的每一个路由数据流量,并针对块154a至154n中的每一个、可选的内部ECC编码器/解码器以及相应的数据DMA接口端口(DDIP)之间的数据流启动每个接口的流控制。在一个示例中,可在块158a至158n内实现内部ECC编码器/解码器。可选地,块158a至158n中的每一个可被配置为共享单个ECC编码器/解码器模块。可以通过相应的数据DMA管理器(DDM)模块152和相应的数据DMA接口端口(DDIP)块172a至172n和块174a至174n针对每次传送对块158a至158n进行编程。各个块158a至158n可以包括可在全双工操作模式下工作的独立闪存读写路径。块158a至158n保持数据传输中的当前区域计数以及各个区域中的当前双字(dword)计数。块158a至158n通常执行DDIP、ECC编码器及解码器和FLC块之间的流控制转化。块158a至158n保持每次传输的运行可校正(running correctable)ECC错误和,并在传输结束后向块152提供该最终值。块158a至158n可以包含用于对ECC编码器及解码器编程的FMC寄存器。块150可以通过寄存器接口来访问寄存器。ECC模块通常能够进行4K字节数据上的64位校正。然而,可以相应地实现其他级别的校正以满足特定实现的设计标准。在一个示例中,解码器门计数可以为415K门,而编码器门计数可以为75K门。
块160通常负责从块156a至156n接收对上下文的请求,从系统缓冲器(例如,通过缓冲控制器进行访问的DRAM)中检索请求的上下文,然后将上下文分发给块156a至156n。检索实际上可以经由对上下文检索访问端口(CRP)166的请求来执行。上下文为FMC的基本控制单元。上下文通常包含FLC执行命令所需的、或者FMC执行到系统缓冲器或来自系统缓冲器的相关数据传输(DMA)所需的所有信息。FLC的动作完全自主;因此,FLC需要仲裁经由缓冲控制器对系统缓冲器的访问,其包含由固件构建的上下文的链接列表(linked list of context)。块160通常提供仲裁,以及发起对块166的请求。然后,块160将检索到的上下文清楚地路由到相应的FLC目的地。块162通常被实现为块102的子块以提供空闲指针在其中对固件可用的单点(single point)。
块164通常被实现为块102的子块以提供由固件可以在完成后检测已完成的上下文的单点。块164通常在多个FLC源之间执行仲裁。FLC提供与上下文指针相关联的PASS/FAILE CC状态。一旦获得上下文,块164更新上下文状态字段,然后将上下文提供给固件。在固件需要较长时间来读取已完成的上下文、以及块164内的内部存储器将变满的情况下,块164可以使用缓冲器来存储在当前报告的上下文之后进行排队的已完成的上下文。
块166至174n通常实现端口接口。端口接口可用于与缓冲控制器通信。在一个示例中,在端口接口内可以实现QBFIFO块。下面的端口接口也可以被实现为端口接口的一部分:上下文检索端口(CRP)166、上下文更新端口(CUP)168、上下文指针列表接口端口(CPLIP)170(可选)、数据DMA读取接口端口(DDRIP)172a至172n、数据DMA写入接口端口(DDWIP)174a至174n。在一个示例中,块102的信号接口可被分为4个主要接口:AHB接口、缓冲控制器接口、NAND和/或NOR闪存物理层(PHY)接口以及混杂(MISC)接口。缓冲控制器接口可以包括(i)用于通道0和通道1的DDIP BC写入接口,(ii)用于通道0和通道1的DDIP BC读取接口(iii)CRP BC读取接口,(iv)CUP BC写入接口,以及(v)CPLIP BC读取/写入接口。
在一个示例中,块102可以以三个时钟实现。块102中的大部分逻辑可以在被称为系统时钟(例如,SYS_CLK)的时钟域上工作。系统时钟可以为AHB时钟。系统时钟通常具有FMC处理器(FARM)112的工作频率的一半的频率。第二时钟可以为所谓的闪存时钟(例如,FBC_CLK)。闪存总线控制器(FBC)154A至154n可以完全工作在闪存时钟域。在一个示例中,可在块154a至154n的数据流管理器(DM)模块中实现先进先出缓冲器(FIFO),以管理时钟FBC_CLK和SYS_CLK之间的频率。第三时钟可以为缓冲控制器时钟(例如,BC_CLK)。所有带有BC的接口端口均工作在缓冲控制器时钟域。可以在缓冲控制器时钟BC_CLK和系统时钟SYS_CLK之间实现缓冲器元件(例如,QBFIFO)。
参考图3,其示出了图解根据本发明实施方式的示例闪存通道控制器结构的块200的示图。在一个示例中,块200可以用于实现图2中的块154a至154n和块156a至156n。在一个示例中,块(或电路)200可以包括块(或电路)202、块(或电路)204、块(或电路)206、块(或电路)208、块(或电路)210、块(或电路)212以及块(或电路)214。电路202至210可以表示被实现为硬件、固件、软件、以及硬件和固件和/或软件的组合或其他实施方式的模块和/或块。在一个示例中,块202可以实现上下文处理协调器(CPC)。在一个示例中,块204可以实现上下文管理器(CM)。在一个示例中,块206可以实现裸片管理模块(DMM)。在一个示例中,块208可以实现闪存操作管理器(FOM)。在一个示例中,块210可以实现处理器访问端口(PAP)。在一个示例中,块212可以实现闪存总线控制器(FBC)。在一个示例中,块214可以实现数据流管理器(DFM)。
块202可以帮助上下文信息流入和流出块200。上下文流可以由块204发起。块202主要涉及响应于提取或配置上下文的请求。为了获取上下文,块202响应块204对新的上下文的请求。首先,块202可以向在块200管理的裸片中进行仲裁并将选定的裸片或逻辑单元号(LUN)转发至块202的块206发起请求。然后,块202发出一个试图从系统缓冲器提取上下文的提取至上下文提取仲裁器(CFA)(例如,图2中的块160)。
一旦提取到上下文,将上下文提交给块202。块202对上下文执行一些解释并转发上下文至块204。如果块206没有可用的发起上下文执行的裸片(LUN),块206通知块202缺乏可用的裸片,然后块202通知(communicate)块204缺乏可用的裸片。块202还协助块200完成上下文的配置。此外,启动该流程的是块204,并且,向实现消耗上下文管理器(CCM)的块(例如,图2中块164)发出配置消息的是块202。当由CCM接收到配置消息并启动工作时,块202通知块204,然后块204可以继续处理上下文的执行。
块202通常执行上下文的一些解释。具体地,为了确定上下文是否为处理器控制模式(PCM)上下文,块202可以解释上下文。当接收到PCM上下文时,上下文的提取(追加)应当停止。然后,块202等待块204开始执行PCM上下文并且在处理器控制模式完成时继续(resume)“标准”操作。在处理器控制模式间隔期间,块202确定提取到的上下文是否是15个双字上下文,而不是4个双字闪存上下文,块202在“标准”操作下将其发送至块204。
在一个示例中,块204可以包括上下文状态机(CSM)、上下文提取管理器(CFM)、上下文配置引擎(CDE)、上下文解释器(CI)。块204通常负责管理正在由块200有效处理的上下文。块204通常执行有效上下文的簿记(bookkeeping)。上下文是向系统缓冲器提供闪存介质控制器(FMC)执行闪存交易和DMA所需的所有信息的数据结构。块204管理在闪存通道控制器级别上的上下文,由此主要涉及闪存交易有关的上下文管理。块204维持由块208执行对闪存通道上的闪存裸片执行命令和数据传输所用的信息。
块206通常负责维持块200的操作所需的基于裸片的信息。块206管理裸片管理表中的各个裸片的信息并且在裸片之间仲裁对上下文表排队的访问。在一个示例中,块206可以包括更新裸片状态的裸片状态机。块206可以执行/监控多裸片操作。块206通常负责闪存命令,包括但不仅限于:READ、COPYBACK READ/COPYBACK WRITE、BLOCK ERASE、PAGE PROGRAM,以及目标级命令,其中,目标级命令包括但不仅限于READ ID、READ PARAMETER PAGE、GET FEATURES、SETFEATURES、SYNCHRONOUS RESET、以及RESET。
块208通常处理应用到闪存通道的各个闪存操作序列。通常针对闪存介质控制器的每个闪存通道控制器(FLC)来实现一个块208。块208在块204的上下文表中的命令之间进行仲裁,并应用命令至块212。在一个示例中,块208本身支持来自ONFI2.0命令列表中的最常用的命令,以及在三星NAND闪存器件中出现的一些特定的(和类似的)命令。此外,可以通过纳米序列器(nano-sequencer)(在下面图9到图11中详细说明)支持其他现有和将来的命令。自身支持的命令可以无需处理器干预来操作,但其他命令通常使用一些级别的处理器支持。
闪存命令可以被分解成可串行地应用于由块208控制的实际闪存裸片的原子“周期”。因为闪存命令通常涉及漫长的等待时间(例如,在数据从芯片中有效读取之前,页读取可能需要25μs),“命令周期”可以经常针对闪存通道的不同裸片“一个接一个”地(back-to-back)操作,从而减少了有效的、累积的等待时间。块208通常通过随着应用每个闪存循环而更新裸片的状态来管理闪存裸片。然后块208读取更新的上下文表来确定接下来什么循环应该(或可以)执行。NAND闪存存储器操作通常包括一个或多个闪存周期。通常存在四种类型的闪存周期:命令、地址、数据输出(w.r.t闪存器件,例如,读取)、数据输入(w.r.t闪存器件,例如,写入)。周期类型大致转化为在块208和块212之间定义的操作类型。
块210通常实现提供了从FMC100的AHB-Lite从属接口至200的可寻址资源的处理器访问的接口块。在本文讨论的大部分资源主要用于诊断目的,正如所有配置信号采用全局级别(作为共享的配置寄存器块的一部分)。例如,可以通过块210实现闪存通道数据缓冲器的完全访问。访问可以单纯作为早期验证支架(scaffold)而提供。然而,对闪存通道数据缓冲器的访问,也可以支持需要直接访问内部表的固件补丁(pitch)。这样的访问可以通过块210提供。
块210的特点可以包括:简单的访问接口,符合AHB-Lite从属协议并且由FMC中的处理器接口逻辑(PIL)进行缓冲;提供对寄存器资源、上下文表、上下文高速缓存以及裸片管理表的读写访问;提供对位于块214中的闪存通道数据缓冲器存储器资源的读写访问。块210通常支持添加每通道配置寄存器的能力,尽管大部分配置寄存器通常被提供为块200的输入。类似地,可以支持状态寄存器和中断寄存器访问,尽管大多数状态寄存器和中断寄存器通常在块200以外产生。块210的主要逻辑组可以包括:界面管理器(IF_MGR)、数据流管理接口(DM_IF)、寄存器块解码器(REG_DEC)、寄存器块复用器(REG_MUX)、中断处理器(INT_HND)和FLC全局寄存器(GLOB_REGS)。
参照图4,示出了图解图3的上下文管理模块204的子模块的示图。在一个示例中,块204可以包括上下文表(CT)220、上下文状态机(CSM)222、上下文高速缓存(CC)224和上下文队列控制器(CQC)226。块204通常划分和执行闪存通道控制器上的操作的阶段,维持闪存通道上的所有有效上下文的优先级顺序,维持各个闪存通道上下文的状态,提供(例如,通过上下文高速缓存)执行完整交易所需的上下文的临时片上存储的最低量,维持正在执行的处理中的各个上下文的缓冲器指针,并通过使用上下文状态机(CSM)222确定下一状态的上下文以为各个上下文提供代理(agency)。可以在上下文表(CT)220中保持最小的上下文信息。表220通常提供了目前正在执行的上下文的优先级队列。上下文队列控制器(CQC)226可被配置为从上下文表220中移除已完成的上下文并压缩上下文表220,以消除间隙。
参照图5,示出了图解图3的裸片管理模块206的子模块的示图。在一个示例中、块206可以包括裸片状态机230、裸片服务仲裁器232以及裸片管理表234。
参照图6,示出了图解图3的闪存操作管理器(FOM)208的子模块的示图。在一个示例中,块208可被分为四个子模块:命令仲裁器(CA)240、数据传输仲裁器(DTA)242、闪存操作格式化器(FOF)244、纳米序列器246。命令仲裁器240通常扫描上下文表以得到要应用的命令,然后与闪存操作格式化器(FOF)244通信以发送信号至闪存缓冲控制器(FBC)。一旦所有的“命令”部分已经运行,闪存为“数据阶段”准备就绪,数据传输仲裁器242发起FBC和数据流管理(DM)214之间的传输。最后,纳米序列器246解释特殊的“软上下文”以应用任何闪存可能需要的命令序列,即使命令序列本身不支持。
参照图7,示出了图解图3的数据流管理子模块214的示图。数据流管理214通常提供闪存通道数据缓冲器存储器资源。在一个示例中,闪存通道数据缓冲器存储器资源可以包括直通缓冲器250和252。在一个示例中,直通缓冲器250和252可以被实现为其大小是可编程的。例如,缓冲器250和252的大小可以调整,以满足带宽指标。在一个示例中,缓冲器250和252可以包括静态随机存取存储器(SRAM)。然而,可以相应地实现其他类型的存储器以满足特定实施的设计标准。通常地,各个闪存通道实现两个直通缓冲器。
参照图8,示出了图3的上下文管理器(CM)204的示例实施的示图。上下文管理器(CM)204通常负责管理相应的闪存通道控制器(FLC)正在有效地处理的上下文。CM204通常执行有效上下文的簿记。如前所述,上下文是向系统缓冲器提供闪存介质控制器(FMC)102执行闪存交易和DMA所使用的所有信息的数据结构。CM 204管理FLC级别处的上下文,由此主要涉及与闪存交易有关的上下文管理。CM 204维持闪存操作管理器(FOM)对闪存通道上的闪存裸片执行命令和数据传输所用的信息。
CM 204通常被配置为:(ⅰ)发起并执行各自的闪存通道控制器上的操作的阶段,(ii)维持相应的闪存通道上的所有有效上下文的优先级顺序,(iii)维持相应的闪存通道上的各上下文的状态,(iv)提供用于执行交易的上下文的临时片上存储的最小量(或将该量最小化)(例如,通过上下文高速缓存224),(v)维持正在执行的处理中的各上下文的缓冲器指针,(vi)通过使用上下文状态机(CSM)222确定下一状态的上下文以为各上下文提供代理,(vii)维持目前正在执行的上下文的优先级队列(例如,上下文表220)中的最小的上下文信息。上下文队列控制器226通常被配置为从上下文表220中移除已完成的上下文并且压缩上下文表220,以消除间隙。
上下文队列控制器(CQC)226是对上下文表(CT)220执行修改的逻辑块。在一个示例中,CT220可以被实现为寄存器块,其针对每个排队上下文被组织成一个实体。CQC 226是对按照优先级队列组织的表执行操作的块。CQC 226通常启动和执行上下文处理,并负责对上下文表上执行处理。主要处理通常包括追加、等待、修改、配置和压缩。处理由CQC 226进行发起和执行。
追加阶段是FMC提取新上下文并将这些上下文的条目添加至上下文表220的阶段。CQC 226检查闪存上下文的内容以及由CPC 202提供的上下文信息,并且基于内容和上下文信息来追加和创建条目。在一个示例中、上下文表的条目可以包括表示上下文表的条目是否有效的位(或标志)、表示上下文的状态的值、表示上下文高速缓存索引的值、表示闪存操作值、表示闪存裸片的值、上下文指针、指示是否禁用数据传输的位(或标志)以及表示平面地址的值。新条目通常以“有效”位设置(例如,为“1”)以及被设置为“QUEUED”的“上下文状态”的值开始。如果闪存操作是非法的,初始状态可以被设置为值“ILLEGAL”,并且该上下文条目会在处理阶段被删除。通常,通过CQC226所提供的上下文和信息来确定其他字段。新的条目通常都附加到压缩的上下文表220的末尾。因此,CQC226通常知道220上下文表的深度。
当CQC226不再等待未完成的数据传输完成并且CQC226在给定的闪存操作周期内已经试图进行至少一次追加操作的时候,CQC226通常退出“追加”阶段。当上下文表220或上下文高速缓存224中不再有任何有效空间时,CQC226还可以离开“追加”阶段。
上下文管理器204在全闪存操作周期之间可以或可以不被强制等待。上下文管理器204通常能够强制(enforce)最低闪存操作时期(例如,通过闪存操作周期寄存器)。例如,在闪存里除了编程或擦除命令之后的轮询以外基本上是闲置的情况下,这样的最小周期是所期待的。在这种情况下,因为没有追加或配置,所以上下文阶段需要很短的时间来执行。因此,通道倾向于处于这样的状态,其中,通道为忙碌的连续轮询闪存裸片(continuously polling flash die),从而在不应该有能量消耗时在闪存接口上消耗能量。CQC226通常停留在等待阶段,直到预定的时间已经过期(例如,时间可在“闪存操作计时器”寄存器中指定)。当预定的时间已过期时,CQC226可以进入“修改”阶段。
CQC发起的下一阶段通常为“修改”阶段。在修改阶段,上下文表220基于由闪存操作管理器(FOM)执行的闪存操作以及通过来自数据路径传输的结果而被修改。更新通常涉及到上下文的状态并因此通常通过上下文状态机(CSM)222发起。当状态更新发生时,CSM222发送更新状态和上下文表索引至CQC226。然后,CQC226更新上下文表220中的条目。当FOM结束其闪存接口处理周期时,修改阶段结束。FOM可通过发出一个信号(例如,FOM_CM_FLASH_PROC_CMPLT)通知上下文管理器204闪存接口处理已完成。一旦修改阶段完成,CQC226可以对上下文表220上的上下文执行配置、压缩和追加。在此期间,上下文表220对FOM是不可访问的。CQC226可通过在特定的时钟周期内解除(de-assert)向FOM表示上下文表读取条目和上下文高速缓存读取数据有效的信号(例如,CM_FOM_CT_VALID)的方式,使上下文表220对FOM是不可访问的。
当修改阶段完成后,CPC202发起“配置”动作。配置动作将CQC226置入CQC226搜寻检索已完成执行的条目的上下文表220的模式。CQC226将条目是否已完成执行的确定建立在上下文状态上。在上下文处于“完成”状态时,上下文可由CQC226配置。在一个示例中,上下文可以处于这样的状态,其中CQC226正在等待来自数据路径的有关上下文完成状态的通知。例如,在读取操作的情况下,上下文可以处于DATA_TRANSFER_DONE状态中,并等待ECC校验的结果。在这种情况下,CQC226可以临时暂停配置处理并等待从数据路径返回的状态。在此期间,CQC226允许“追加”发生。然而,一旦等待状态返回,上下文可由CQC226配置,并且消耗的上下文记录可以转发给CPC202(并最终到消耗上下文管理器(CCM)164)。
当CQC226配置了上下文,CQC226清除上下文表220相应的条目的“有效”位。这个过程一直持续到CQC226已审阅了上下文表220中的每个上下文。当CQC226到达上下文表220中的有效上下文的末尾时,配置阶段完成。
已由CQC226配置的上下文清除各自的表条目中的“有效”位。在没有一个机制来移动该表以填满空位(hole)的情况下,有效条目会在上下文表220中变得分散(或分段)。分散的上下文将使得上下文表难以扫描以及“追加”阶段更为复杂。为了确保上下文表220维持其优先级队列的特征,上下文表220可以被压缩。在压缩过程中,当CQC226配置了上下文,CQC226立即将被释放的条目之后的所有条目上移一个位置。当该处理完成后,所有有效条目都在优先级顺序列表的前面并且所有的空位被移除。与其他动作的情况一样,当压缩过程完成时,CQC226维护“完成”信号(或位)。在最后压缩阶段结束之后,CQC226可以开始追加阶段。
CQC 226通常知道处理器的控制模式。在处理器控制模式中,整个CM 204暂停标准操作并且进入这样的模式,其中,FLC的操作本质上被闪存操作管理器208中的纳米序列器246执行的“软上下文”所驱动。软上下文具有与标准闪存上下文不同的尺寸。在一个示例中,软上下文可以包括全部的十五个32位双字,然而“闪存上下文”,即FLC执行的全部介质上下文的部分,通常仅包括四个32位双字。
通常,当处理器控制模式(PCM)的“闪存操作”字段被设置为PROCESSOR_CONTROL_MODE的上下文出现在上下文队列的顶部时,处理器控制模式(PCM)开始。通常,在上下文表220中,在PCM上下文后面应当没有有效条目,因为一旦CQC 226对PCM上下文排队,CQC226应当暂停标准上下文的检索。当PCM开始时,CQC 226可以经由信号(例如CM_CPC PROC_CNTL_MODE)通知CPC 202。响应于该通知,CPC 202可以取得在PCM上下文中的位置出现的“软上下文”。从提供给FOM的角度来看,FOM通常不知道在上下文表220中存在PCM上下文,而PCM上下文是在上下文表220中的其他有效条目的后面。上下文表220中的PCM上下文条目将其“有效”位作为0提供给FOM,直到CM 204为FOM做好开始执行软上下文的准备。
当FOM开始读取软上下文时,因为操作由存储软上下文的上下文高速缓存224提供给FOM 208,CQC 226监视(snoop)操作。当操作涉及DMA上下文(例如预取数据,设置读取数据缓冲器,或配置上下文指针)时,CQC 226在上下文表220中指定(co-opt)上下文表中现在未使用的存储,并在上下文表中放置指针以用于跟踪。在这些DMA上下文完成时,FOM 208通知上下文管理器204,其之后用标准方式配置上下文。
CQC 226在监视的同时,还寻找“取得下一软上下文”操作。当CQC226发现一个时,CQC 226维持至取得下一软上下文的CPC 202的信号(例如CM_CQCPCM_NEXT_CONTEXT)。在FOM 208通知CM 204软上下文执行已完成时,FOM 208在“FOM/CM”命令接口上通知CM 204。然后,CQC 226解除到CPC的信号(例如CM_CPC PROC_CNTL_MODE),然后,标准操作继续。在一个示例中,CM_CPC PROC_CNTL_MODE可以被维持为表示CM204已经进入处理器控制模式并且现在准备好接收软上下文的信号的级别。
CQC226的另一重要功能为监控超时情况。在一个示例中,CQC226可以包括计数器,其被配置为对系统时钟(SYS_CLK)周期的数量进行计数,使得同样的上下文表的条目位于上下文表220的顶部(即,在条目0)。如果计数值达到一个可编程“超时”计数器的值,上下文表220顶端的条目可以被认为已经超时。当条目被认为已经超时时,条目可以从上下文表220中移除,上下文指针返回到消耗上下文接口上的上下文处理协调器(CPC)202。
上下文的返回状态是两个可能的“超时”状态之一。在第一种情况中,超时会可能起因于这样的情形,其中,闪存通道上的另一裸片忙碌并且正在降低R/B线。在这种情况下,状态表示超时可能是起因于另一裸片的超时。在第二种情况中,上下文的裸片被视为事故原因(culprit)。在这里,可以返回表示裸片是事故原因的不同状态。
上下文表220本质上为条目的存储介质。上下文表的深度是参数化的。例如,在能支持每通道十六个裸片)的芯片的情况下,可以实现十六个条目。如果每个裸片(die)可以管理一个以上的操作,增加深度可以是有利的。上下文表220有最小函数(minimal function)。CQC226对上下文表220实现大部分更深入的处理。然而,可以通过多重读取接口以及各个读取接口的复用逻辑来实施上下文表220。在一个示例中,针对读取访问能力,可以通过FOM208的接口以及到上下文状态机(CSM)222的接口来实施上下文表220。上下文表220也可以具有到CQC226的读取接口。上下文表220也可以被处理器访问。
上下文表220还具有用于表的压缩阶段的“移动(shift)”能力。除此之外,CQC226可以使用简单的写入接口来更新上下文表220。在一个示例中,上下文表220可以在触发器(flip-flop)中实施。当上下文表220在触发器中实施时,不需要读取访问所需的仲裁。如果上下文表220的规模增加到超过大约1000个触发器,上下文表220可以在寄存器堆或SRAM中实现,但还应当实现额外的管理和访问仲裁。
上下文高速缓存224是类似于上下文表220的另一上下文数据存储元件。上下文高速缓存224通常包括参数化的条目数。在一个示例中,条目的数量可以为八个。然而,可以实现其他数量的条目以达到特定实施方式的设计标准。例如,条目的数量可以被设置为比实际上是全流水线操作所需的数量多一个或两个。数量通常应当被设置得足够大,以允许在处理器控制模式中用于全“软上下文”的足够空间。如上所述,一个完全的上下文可以包括十五个32位双字。全部介质上下文的子集称为“闪存上下文”。闪存上下文通常是全部介质上下文的前四个双字(或DWORD/双字)。闪存上下文的四个双字通常包含由FLC用来执行由固件指定的完整操作的所有信息。在标准操作(例如,当FLC不处于处理器控制模式)中,只有闪存上下文的前两个双字存储在上下文高速缓存224。闪存上下文的其余部分一般存储在上下文表220中。
上下文高速缓存224通常维持各个条目上的状态。在一个示例中,状态可以包括表示条目是空闲(FREE)还是已用(USED)的位。在一个示例中,可以在上下文高速缓存224中实现8个这样的位。当闪存上下文被写入到上下文高速缓存224的位置时,位置的状态变为USED。当CQC226在状态变换时接收到使位置清空的信息时,位置状态返回到FREE。在标准操作期间,上下文高速缓存224基于状态位通知CQC226上下文高速缓存224具有空闲条目的空间。如果存在空闲的位置,CQC226可自由地从CPC202请求上下文。在CPC202取得新的闪存上下文时,CPC202将闪存上下文作为一串(a burst)32位双字数据提供给上下文高速缓存数据224。当数据有效时,可以维持信号(例如CPC CM_ENQ_CTX_VALID)。上下文高速缓存224将数据写入空闲的位置。上下文高速缓存224预期CPC202将仅写入一个闪存上下文。
在上下文表220顶端处的条目被表示为PROCESSOR_CONTROL_MODE操作的处理器控制模式中,上下文高速缓存224应当是完全空闲的。在处理器控制模式中,上下文高速缓存224应当预期从CPC202接收软上下文。上下文高速缓存224也可以预期软上下文包括15个双字。实质上,上下文高速缓存224用作从属,接收由CPC202提供的任何数据。CPC202负责将适量数据写入上下文高速缓存224。上下文高速缓存224对FOM208是可访问的,其在对闪存单元实现实际的命令时使用全部的闪存上下文信息。FOM208向32位双字提供地址,并且上下文高速缓存224在后续时钟周期响应请求的双字。在处理器控制模式期间,来自上下文高速缓存224的读取响应被可以基于操作的内容实现行动的上下文队列控制器(CQC)226监控。正如上下文表220,上下文高速缓存224也可以通过处理机接口访问。
通常,上下文状态机(CSM)222被配置为,基于条目的当前状态以及或者由FOM208执行的操作或者数据路径操作状态而确定上下文表220中的各上下文的执行状态。在修改阶段中,每当FOM208应用命令或返回结果,CSM222被CQC226所调用。FOM命令通知接口和FOM上下文表读取接口的内容一般提供了CSM222确定下一状态所需的所有信息。
在处置阶段中,当CQC226扫描上下文表220并且遇到处于上下文表条目为等待动作(action)的状态的上下文表条目时,CQC226调用CSM222(例如,TRANSFER_DATA状态或PREFETCH_DATA状态)。当遇到TRANSFER_DATA状态或PREFETCH_DATA状态时,CQC226根据数据传输状态等待来自数据路径(例如,DM、DDM、或者DTP)的信息。无论哪种方式,通常调用CSM222以对所关注的(in question)的上下文表条目确定下一状态。当上下文表条目移动至完成状态时(例如,COMPLETED或COMPLETED WITH ERROR(完成或带错完成)),CSM的222还负责通知裸片管理模块206。
参照图9,示出了图6的闪存操作管理器208的示例实施方式的结构图。在一个示例中,块208可以实施五个子模块。例如,块208可以包括块(或电路)240、块(或电路)242、块(或电路)244、块(或电路)246、块(或电路)248。电路240到电路248可以表示可实施为硬件、固件、软件,硬件、固件和/或软件的组合,或其他的实施的模块和/或块。在一个示例中,块240可以实施命令仲裁器(CA)。在一个示例中,块242可以实施数据传输仲裁器(DTA)。在一个示例中,块244可以闪存操作格式化器(FOF)。在一个示例中,块246可以为纳米序列器(nano-sequencer)。在一个示例中,块248可以实施控制状态机(FOMCSM)。
数据传输仲裁器242一般连接闪存操作管理器208至数据流管理器214。闪存操作格式化器244一般耦接闪存操作管理器208至闪存总线控制器212。控制状态机248一般耦接闪存操作管理器208至上下文管理器204。命令仲裁器240一般连接在闪存操作格式化器(FOM)244与控制状态机248之间。数据传输仲裁器242一般耦接在闪存操作格式化器244和控制状态机248之间。纳米序列器246一般耦接在闪存操作格式化器244和控制状态机248。命令仲裁器240一般扫描上下文管理器中的上下文表以得到要应用的命令,然后与闪存操作格式化器(FOF)244通信以发送信号至闪存缓冲器控制器(FBC)。
闪存介质控制器(FMC)的硬件自动化特征,可以只对那些需要达到最高性能的命令进行优化。该优化的目的是为了简化硬件自动化和简化固件设计,同时提供与现有的闪存器件的互操作性。然而,硬件不局限于只发行那些需要达到最高性能的命令。相反,硬件可以被固件指示以执行几乎所有可以对闪存执行的原子操作,固件可以直接控制FMC中内嵌的硬件资源,以方便闪存的控制和数据的运动。固件采取直接控制FMC中内嵌的硬件资源的模式一般称为处理器控制模式(PCM)。
处理器控制模式(PCM)可用于应用“软”命令(例如,硬件本身不支持的命令)至闪存。通常,处理器控制模式只对闪存通道控制器(FLC)是可见的。FLC之外的逻辑对操作的处理器控制模式是完全忽视(oblivious)的,并且以同样的方式支持FLC,而无论是否已经进入处理器控制模式。
可应用“软”命令的方式是通过建立和提供“软”上下文。此处使用的软上下文,一般是指其“闪存操作”字段被设置为与处理器控制模式相关的值(例如,PROCESSOR_CONTROL_MODE)的上下文。设置闪存操作字段为PROCESSOR_CONTROL_MODE的值一般将FLC置入这样的模式,其中,FLC尝试存储整个上下文(而非通常所做的只有“闪存上下文”子集)以及完成FLC的上下文表中的任何未完成的上下文的执行。然后FLC暂停FLC的正常硬件自动化,并且发布来自上下文的其余部分中的双字的指令,其中,每个双字表示要被例如纳米序列器246执行的操作。
一个用于PCM命令的基本流程可以如下:
1.初始地,FMC处于普通操作模式。在普通的运作模式,每个FLC可以具有对它支持的各个芯片的进行排队的多个上下文。对各个芯片的这些上下文的前1到2个可以被预提取入FLC以执行。
2.对由特定的闪存通道控制器所支持的芯片的一个,固件可以在链表的末端插入PCM上下文。固件可以在芯片的链表中的PCM上下文之后或者在此FLC或任何FLC所支持的其他芯片的各自的列表中继续插入其他上下文。PCM上下文具有设置为PROCESSOR_CONTROL_MODE的闪存操作代码以及上下文的闪存行地址字段,其提供了16位的上下文指针至第一个“软”上下文。在一个示例中,PCM上下文的其他所有的双字(dword)可以视为保留字段。
3.PCM上下文最终被提取至FLC中。在此时,各自的FLC进入PCM模式,并停止提取新上下文入FLC。所有其他FLC不受影响,继续普通地提取并执行各自的芯片列表。
4.带有PCM上下文的FLC现在等待,直到所有先前对被FLC所支持的芯片提取的上下文已完成执行,所以只有PCM上下文留在各自FLC中。
5.PCM上下文的闪存行地址字段用作提取第一个“软”上下文至FLC的上下文指针。“软”上下文与普通上下文大小相同,但是15个双字的每一个可以包含可以被纳米序列器256以从双字0到双字15的顺序执行的“软”命令。
6.有些“软”命令可以引用在缓冲器中准备的其他“PCM DMA”上下文。“PCM DMA”上下文由“软”命令加载入FMC中,使FLC和系统缓冲器之间产生数据传输。其他“软”命令可以定义闪存通道上的命令和地址周期,和/或发送/接收闪存通道上的字节。如果需要,最后的15个“软”命令可以加载带有15个额外的“软”命令的新的“软”上下文。在一个示例中,“软”命令指定芯片能够使用,所并不在乎哪个链表被用于原始PCM上下文。
7.当“软”的闪存操作完成后,最后的“软”命令表明PCM模式已完成。在此时,原始PCM上下文已完成并被送至消耗上下文管理器以通知固件。然后,FLC可以返回普通模式,并开始再次从FLC支持的链表中提取上下文。
参照图10,示出了说明一组示例纳米指令的表300的示图。在一个示例中,纳米序列器246可以包括一个简单的序列器,其支持被特别适用于驱动FLC硬件资源以用于访问闪存器件以及移动数据到数据路径和从数据路径移动数据的操作。纳米序列器246可以被配置为取得“软”上下文并使控制器固件设立任意闪存命令来作为上下文链表的一部分而运行。通过建立带有完成命令所需的周期序列的上下文,固件负责命令的低等级时序和特性。软上下文(结合图11在下面说明)可添加至上下文的链表,并可以以类似于普通上下文的方式运行和处置。软上下文也可用于适应任何未来可能增加的闪存命令。纳米序列器246一般从上下文缓存中读取纳米指令。在处理器控制模式中,上下文缓存通常包含32位纳米指令,而非FLC上下文。图10中示出的示例说明如下。
最常见的处理器控制模式操作是FLASH_BUS_OPERATION操作。当软上下文双字的前2位为多个1(例如,11),表示处理器控制模式FLASH_BUS_OPERATION指令。FLASH_BUS_OPERATION指令通常允许应用任何8位的闪存总线指令。在FLASH_BUS_OPERATION指令中,低30位(例如,第0位到第29位)表示到闪存总线控制器(FBC)块212的操作。低30位可编码多个闪存总线操作字段,包括例如:闪存器件或芯片启用字段(例如,第26位到第29位)、操作类型字段(例如,第23位到第25位)、操作选项目字段(例如,第20位到第22位)、操作命令字段(例如,第12位到第19位)、操作长度字段(例如,第9位到第11位)和操作数据长度字段(例如,第0位到第8位)。在一个示例中,芯片启用字段可以用8个启用信号中的一个来选择16个闪存器件中要应用闪存操作的那一个。操作类型字段可以传至闪存总线控制器。操作类型字段通常表示操作的类型。例如,操作类型字段可以确定操作是否为命令(例如,用0表示)、地址(例如,用为1的值表示)、读取(例如,用2表示)或写入(例如,用3表示)。操作类型字段的其余可能值一般都保留。
操作选项字段通常确定各种操作相组合。例如,操作选项字段允许命令周期包括地址周期。操作选项字段的解释可以根据上述OpType字段而不同。对于命令操作和地址操作,位定义可以如下:
位22:当设置时,在所有其他周期添加命令周期。使用用于命令的命令操作字段(例如,OPCOMMAND)。仅用于地址操作;
位21:当设置时,在初始指令周期之后添加地址周期。仅用于命令操作;
位20:地址意义。当设置时,选择地址字段的最低有效字节以发送。
对于读取和写入操作,位可以定义如下:
位22:当设置时,使用立即数据(immediate data)。仅用于读取状态。状态数据在逻辑中直接使用,不发送至数据流管理器。
位21:当设置时,在数据周期之后添加命令周期。操作命令字段用于命令。
位20:重复字节传输。当设置时,在使用同步闪存时,在时钟的上升沿和下降沿重复数据。
操作命令字段通常为命令类型操作提供命令类型。操作地址长度字段(例如,ADDRLEN)通常提供了随着命令发送的地址的长度(例如,地址的字节数)。操作数据长度字段(例如,DATALENGTH)通常提供了随着命令而发送/读取的数据的长度(例如,数据的字节数)。操作数据长度字段一般用于长度少于512字节的操作。对于长度大于512字节的操作,该字段一般被设置为全0并且PCM数据长度寄存器可以用来确定数据长度,其通常会是完整页。通常,在FBC中通常具有操作寄存器,其含有用于交易的40位的地址,并且其不被设置为使用该操作,但可以被设置为使用SET_FLASH_ADDRESS操作码或SET DATA TRANSFERLENGTH操作码。
在一个示例中,除了前面提到的FLASH_BUS_OPERATION操作,纳米序列器的操作码可以实施为8位(bit)的长度。纳米序列器的操作码可以位于每个软命令的第24位到第31位。除了对闪存总线控制器(例如,闪存总线操作指令)的闪存总线寄存器执行指定的操作,纳米序列器指令可以包括:等待指定的时钟周期数(例如,等待周期)、等待就绪(ready)/忙碌线以前往R/B字段中定义的某个状态(例如,等待R/B)、在轮询状态寄存器的同时等待一定的条件(例如,等待状态)、等待数据流管理器缓冲器达到特定的状态(例如,等待缓冲器状态)、在连续状态轮询尝试之间设置数个时钟周期(例如,设置轮询期间)、设定用于数据传输的缺省的字节数(例如,设置数据传输长度)、设定用于闪存交易的40位的闪存地址的三个最高有效位(例如,设置闪存行地址)、设置用于闪存交易的40位的闪存地址的两个最低有效字节(例如,设定闪存列地址)、设置等待状态操作所用的状态轮询命令的格式(例如,设置状态命令格式)、使用最近获得的状态寄存器读取操作的内容获得操作的通过(pass)/失败(fail)的状态(例如,取得通过/失败状态)、使用本地缓冲器中的两个数据流管理器之一为程序交易发起数据预提取操作(例如,预提取数据)、设置下一个读取传输所指向到的本地数据缓冲器并使DMA上下文指针与缓冲器传输相关联(例如,设置读取数据缓冲器)、对给定的操作除去DMA上下文指针(例如,上下文指针的处置)、维持对处理器的中断并在中断寄存器中放置一参数从而其可以由固件唯一识别(例如,维持中断)、在处理器控制模式中获取下一个软上下文指针(例如,获取下一个软上下文)、从处理器控制模式退出(例如,处理器控制模式完成)。
在对缓冲器状态指令的等待中,可以设置掩码字段以用于比较,其中第4位为完成位(第2位)的掩码,第3位是用于就绪位(第1位)的掩码。对数据缓冲器的状态,完成意味着完整的传输已完成(例如,数据已被从DMA管理器中检索到并被发送至闪存器件,或者数据已从闪存器件中读取并且DMA管理器已将数据移出数据流管理器)。就绪意味着数据是在数据流管理器中(例如,数据已经从DMA管理器中检索到并准备好发送到闪存器件,或数据已经从闪存器件中读取并准备好被DMA管理器移出)。BN字段一般定义了数据流管理中的哪个缓冲器将被使用。在设置状态命令格式指令中,位图字段一般用于确定地址的哪些字节被发送用于读取状态命令,命令字节字段一般定义了读取状态命令是什么。取得通过/失败状态指令通常使用比较值和掩码字段来获得“字段”,然后,缺省地,对所有的位求逻辑和(“AND”)以获得发送回上下文管理器的单一位(single-bit)。如果设置了“OR”(“逻辑或”)位,纳米序列器对字段求逻辑或而非对自对求逻辑和以获得结果。如果设置了NE位,纳米序列器反转被发送到上下文管理器的位。
在预取数据指令中,当WI位被清除时,数据流管理器使用8位的数据。当设置了WI位时,数据流管理器使用闪存总线宽度寄存器位的值来确定传输的宽度。BN位通常确定数据流管理器中的两个直通(cut-through)缓冲器的哪一个将被使用。上下文指针字段包含发送到数据流管理器的上下文指针。在上下文指针指令的处置中,如果设置了W位,序列器拖延(或等待)直到上下文管理器报告上下文已被处置。如果没有设置W位,序列器简单地继续。当提取下一软上下文指令正在执行时,提取动作发生在上下文管理器中。上下文管理器通常表示上下文表是无效的,直到新的序列已被提取并在上下文缓存中。
通常,操作的处理器控制模式至少根据硬件范围而受限于闪存通道控制器(FLC)。FLC实例以外的闪存介质控制器(FMC)逻辑一般是不知道控制是如何在闪存通道控制器内发生的。所以,FMC的DMA资源可以继续提供基本服务,DMA资源仍利用固件来创建上下文的传统的“硬件自动化”形式,其然后可以与FLC中的软上下文所发出的数据传输相关联。可以利用PREFETCH_DATA和SET_READ_DATA_BUFFER操作来产生该关联,他们两者都装载上下文指针至数据流管理器。然后,正如它在硬件自动化模式中所做的,当使DMA请求数据DMA管理器(DDM)时,数据流管理器使用上下文指针。DDM提取上下文,其提供了块描述符位置、数据缓冲器地址、跳过掩码和其他配置信息上的用于执行DMA的指令。
参考图11,软上下文400的示图被示出,其示出了简单的闪存编程命令是如何使用根据本发明实施方式的处理器控制模式和软上下文来执行的。每个编号的步骤,一般对应于软上下文400中的双字。
0.以被设置为0的本地数据缓冲器数量和被设置到“普通”DMA上下文的位置的上下文的指针来应用PREFETCH_DATA操作。双字0中的指令通常使数据流管理器断言请求至数据DMA管理器,其将使用上下文指针获取DMA上下文并移动数据至数据流管理器中的本地数据缓冲器。
1.以参数中指定的行地址应用SET_FLASH_ROW_ADDRESS操作。这将设置FBC(例如,op_addr)中用于编程操作的内部行地址寄存器。通常,假设先前寄存器的值是可以接受的,并非一定需要应用SET_FLASH_COLUMN_ADDRESS操作。(因为通常对于页读取和写入,闪存列地址是全0,所以在这个示例中闪存列地址将被假定是全0)。
2.使用参数4320来应用SET_DATA_TRANSFER_LENGTH操作,其设置传输长度为完整页。通常,寄存器的值被保持直到被覆写,所以并不需要对每个事物设置传输长度。
3.以被设置为1(等待满)的第1位以及被设置为0(等待缓冲器0)的第0位来应用WAIT_FOR_BUFFER_STATE操作。这导致在应用实际的编程命令之前,执行等待直到数据是在缓冲器中。
4.FLASH_BUS_OPERATION操作以以下的参数来应用:
—芯片启用=0
—操作类型=COMMAND
—操作选项=0
—操作命令=0x80
—操作地址长度=X
—操作数据长度=X
在芯片启用为0时,双字4中的指令告诉闪存总线控制器将程序命令周期应用至闪存。
5.A FLASH_BUS_OPERATION操作以以下参数来应用:
—芯片启用=0
—操作类型=ADDRESS
—操作选项=0
—操作命令=X
—操作地址长度=5
—操作数据长度=X
在芯片启用为0时,双字5中的指令应用闪存总线控制器中的op_addr寄存器中的5个地址周期至闪存器件。
6.A FLASH_BUS_OPERATION操作以以下的参数来应用:
—芯片启用=0
—操作类型=WRITE
—操作选项=0
—操作命令=0
—操作地址长度=X
—操作数据长度=0
在芯片启用为0时,双字6中的指令使闪存总线控制器将数据从闪存通道数据缓冲器移动至闪存。因为操作数据长度字段被设置为0,闪存总线控制器将移动所有4320字节(如数据传输长度寄存器所指定)。(请注意,作为优化,闪存总线控制器允许以WRITE操作来应用命令周期。在下面的步骤中应用的0x10命令可以在这里可选地应用以保存一个操作。)
7.FLASH_BUS_OPERATION操作以以下的参数来应用:
—芯片启用=0
—操作类型=COMMAND
—操作选项=0
—操作命令=0x10
—操作地址长度=X
—操作数据长度=X
在芯片启用为0时,双字7中的指令告诉闪存总线控制器应用第二个和最后一个命令周期(0x10)至闪存器件。
8.WAIT_RB操作以参数1来应用。
双字8中的指令,使纳米序列器在应用另一命令等待,直到闪存总线就绪(R/B=1)。
9.FLASH_BUS_OPERATION操作以以下的参数来应用:
—芯片启用=0
—操作类型=COMMAND
—操作选项=0
—操作命令=0x70
—操作地址长度=X
—操作数据长度=X
在芯片启用为0时,双字9中指令使闪存总线控制器应用READ_STATUS命令至闪存单元。
10.FLASH_BUS_OPERATION操作以以下的参数来应用:
—芯片启用=0
—操作类型=READ
—操作选项=‘010’
—操作命令=0x00
—操作地址长度=X
—操作数据长度=1
双字10中的指令,使闪存总线控制器切换读取启用并捕捉闪存单元的状态。选项位1被设置(并且操作数据长度被设置为1),从而数据被置于闪存总线控制器的立即数据寄存器内,而非闪存总线控制器存储器内。(请注意,闪存总线控制器允许一个命令周期被应用于作为一优化的读取操作。在上一步中的应用的0x70命令已在这里可选地应用以保存一个操作。)
11.GET_PASS/FAIL_STATUS操作以以下的参数来应用:
Negate或Or-reduce=0
—比较值(Compare Value)=“00000001”
—掩码(Mask)=“11111110”
双字11中的命令,使纳米序列器将闪存总线控制器中的立即数据寄存器的未被掩码的位即第0位的值与比较值的为1的第0位相比较。如果比较值匹配,结果是1,这意味着该状态寄存器第0位的确是1,表示失败。如果比较值不匹配,结果是0,表示该命令没有失败。当上下文指针被处置时,结果可以随着消耗的上下文指针传到CCM。
12.以上下文指针0xABCD作为参数应用DISPOSE_OF_CONTEXT_POINTER操作。
双字12的指令使纳米序列器发送指针(以及相关的通过/失败位)至CCM。这基本上完成了对闪存的编程操作以及闪存总线控制器的参与。
13.应用DONE操作,从而使闪存总线控制器离开处理器控制模式并返回到“普通”硬件自动化模式。
在这一点,FOM通知上下文表软上下文处理完成了。这使“闪存操作”字段被设置为PROCESSOR_CONTROL_MODE的“原始”的PCM上下文被从上下文表中删除,并转发到CCM,其中,上下文以“普通”(或自动)上下文同样的方式被消耗。如果操作数超过15,将应用FETCH_NEXT_SOFT_CONTEXT操作,并且序列器在接收新的软上下文后将继续立即执行。这种运作模式可以无限地持续下去。
正如相关领域技术人员所显而易见的,图1到图11的程序执行的功能可以使用一个或多个传统的通用处理器、数字式计算机、微处理器、微控制器、RISC(精简指令集计算机)处理器、CISC(复杂指令集计算机)处理器、SIMD(单指令多数据)处理器、数字信号处理器、中央处理单元(CPU)、算术逻辑单元(ALU)、视频数字信号处理器(VDSP)和/或类似计算机来实现,并且可以根据本说明书的教导进行编程。还正如相关领域技术人员所显而易见的,熟练的编程员可以基于本发明的说明来编制合适的软件、固件、编码、编程、指令、操作码、微码、和/或编程模块。软件通常从一个中等或多个介质中由机器实施的一个或多个处理器来执行。
本发明也可以通过ASIC(专用集成电路)、平台ASIC、FPGA(现场可编程门阵列)、PLD(可编程逻辑器件)、CPLD(复杂可编程逻辑器件)、海量门(sea-of-gates)、RFIC(射频集成电路)、ASSP(特定应用标准产品)、一个或多个单片集成电路、排列为倒装芯片(flip-chip)模块和/或多芯片模块的一个或多个芯片或裸片、或与常规部件电路网络适当互连的芯片的准备方式而实现,如本文所描述的,其修改对于本领域技术人员是显而易见的。
因此,本发明还可以包括计算机产品,其可以是包括指令的存储介质和/或传输介质,其中,该指令可用于对机器编程以执行一个或多个根据本发明的处理或方法。由机器进行的计算机产品中所含指令的执行,随着周围电路的操作,可以将输入数据转换成存储介质上的一个或多个文件,和/或转换成表示物理对象或物质的诸如音频和/或视觉描述(depiction)的一个或多个输出信号。存储介质可以包括但不仅限于软盘、硬盘、磁盘、光盘、CD-ROM DVD和磁光盘的任何类型的圆盘,诸如ROM(只读取存储器)、RAM(随机存取存储器)、EPROM(可擦除可编程ROM)、EEPROM(电可擦除可编程ROM)、UVPROM(紫外线可擦除可编程ROM)、闪存、磁卡、光卡的电路,和/或任何合适的用于存储电子指令的介质类型。
本发明的元件可以形成一个或多个装置、单元、部件、系统、机器和/或装置的一部分或全部。这些装置可以包括但不限于服务器、工作站、存储阵列控制器、存储系统、单个电脑、笔记本电脑、笔记本电脑、掌上电脑、单个数字助理、便携式电子器件、电池供电器件、机顶盒编码器、解码器、转码器、压缩机、解压缩、预处理器、后处理器、发射器、接收器、收发器、密码电路、蜂窝电话、数码相机、定位和/或导航系统、医疗器件、头戴式显示器、无线器件、录音、音频存储和/或音频播放器件、录像、视频存储和/或视频播放器件、游戏平台、外围器件和/或多芯片模块。相关领域技术人员应当了解,本发明的元件可以在其他类型的装置中实现,以满足特定应用的标准。
尽管本发明已参考其优选实施方式进行了特别说明和描述,但是相关领域技术人员应当理解,在不背离本发明的范围的前提下可以在形式和细节上进行各种变化。