闪存访问系统及方法与流程
未命名
08-15
阅读:135
评论:0
1.本发明涉及闪存技术领域,尤其是涉及一种闪存访问系统及方法。
背景技术:
2.在传统的nand flash控制器设计中,cpu通过直接配置寄存器的方式来控制和驱动硬件对nand flash颗粒的访问操作,比如通过nand io发送命令、地址以及进行数据读写操作,并指挥控制器的dma模块往系统缓存搬移数据等。软件几乎参与了nand flash控制器每一个具体任务的控制和指挥,需要对大量寄存器进行繁琐的配置,给cpu带来较重的负载和开销,成为进一步提升性能和能效的阻碍。
技术实现要素:
3.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出了一种闪存访问系统及方法,能够降低cpu的负载和开销。
4.一方面,根据本发明实施例的闪存访问系统,包括:
5.cpu,用于创建描述符,并将所述描述符写入系统缓存;多条所述描述符形成描述符链;所述描述符包括opcode指针、ce/lun信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;
6.描述符读取器,包括进入寄存器和获取模块,所述描述符链的首地址写入所述进入寄存器,所述获取模块用于根据所述首地址将所述描述符链中的多条所述描述符读出,并发送给闪存控制器;
7.闪存控制器,包括描述符队列、任务调度器、任务解析器、执行单元和挂起等待区;所述描述符队列用于获取和存储所述描述符链的多条描述符;所述任务调度器用于将所述描述符队列中符合调度条件的所述描述符调度出来;所述任务解析器用于对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;所述执行单元用于根据所述多个控制指令,执行对闪存颗粒的访问操作;所述挂起等待区用于在所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描述符存放在所述挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他ce/lun的描述符。
8.根据本发明的一些实施例,所述执行单元包括:
9.内部缓存;
10.fcu,用于通过nand io执行对闪存颗粒的访问操作;
11.rdma,用于将指定数量的数据从系统缓存中的指定地址读取出来,并发送到所述内部缓存;
12.wdma,用于将所述内部缓存内指定数量的数据或者描述符的状态信息,写入到所述系统缓存的指定地址。
13.根据本发明的一些实施例,所述执行单元还包括纠错引擎,所述纠错引擎用于对
数据进行纠错。
14.根据本发明的一些实施例,所述闪存控制器还包括寄存器模块,所述cpu能够通过配置所述寄存器模块内的寄存器,实现对所述闪存颗粒的访问操作。
15.另一方面,根据本发明实施例的闪存访问方法,包括以下步骤:
16.cpu创建描述符,并将所述描述符写入系统缓存,并将多条所述描述符所形成的描述符链的首地址写入描述符读取器的进入寄存器;所述描述符包括opcode指针、ce/lun信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;
17.所述描述符读取器的获取模块根据所述首地址,将所述描述符链中的多条所述描述符从所述系统缓存读出,并发送给闪存控制器的描述符队列;
18.所述闪存控制器的任务调度器将所述描述符队列中符合调度条件的所述描述符调度出来;
19.所述闪存控制器的任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;
20.所述闪存控制器的执行单元根据所述多个控制指令,执行对闪存颗粒的访问操作;
21.当所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描述符存放在挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他ce/lun的描述符,然后返回任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的这一步骤。
22.根据本发明的一些实施例,所述描述符队列包括头指针和尾指针,当有描述符进入所述描述符队列时,所述尾指针加1,当有描述符离开所述描述符队列时,所述头指针加1;当所述描述符处于所述头指针指向的单元,且所述描述符完成所有的调度和解析任务后,所述描述符离开所述描述符队列。
23.根据本发明的一些实施例,所述闪存控制器的任务调度器将所述描述符队列中符合条件的所述描述符调度出来的步骤之后,还包括以下步骤:
24.所述任务调度器根据调度出来的所述描述符的所述opcode指针,从opcode表中查找对应的任务序列,并将所述任务序列及所述描述符发送给所述任务解析器。
25.根据本发明的一些实施例,所述任务序列包括dma启动类型、挂起等待类型、fcu指令类型和结束类型这四种类型的任务中的一种或多种;所述闪存控制器的任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的步骤,包括:
26.若任务的类型为dma启动类型,所述任务解析器解析所述描述符,产生rdma或者wdma启动指令;
27.或者,若任务的类型为挂起等待类型,所述任务解析器将所述描述符存放到所述挂起等待区,并暂停所述描述符的后续解析动作;
28.或者,若任务的类型为fcu指令类型,所述任务解析器根据所述任务读取命令表中的参数和命令集,并根据所述参数和命令集产生访问闪存颗粒的指令;
29.或者,若任务的类型为结束类型,所述任务解析器产生用于更新描述符状态到系统缓存的指定位置的指令,并结束整个描述符的解析任务。
30.根据本发明的一些实施例,所述挂起等待区记载了存放在所述挂起等待区的所述
描述符对应的ce/lun的挂起状态、所述描述符的挂起退出条件、以及所述opcode表中的所述任务序列挂起时的位置。
31.根据本发明的一些实施例,所述方法还包括以下步骤:
32.当所述执行单元反馈满足挂起退出条件的信号时,所述任务调度器在空闲时将所述挂起等待区的所述描述符调度出来,并发送至所述任务解析器,进行后续的解析工作。
33.根据本发明实施例的闪存访问系统及方法,至少具有如下有益效果:采用了基于描述符来实现nand flash访问的方式,描述符的任务调度和解析工作全部由硬件模块来执行,从而可以大幅降低软件的开销和cpu负担。同时,通过设置挂起等待区,提升了nand flash颗粒多ce/lun下同时访问的并行度和nand io的利用率。
34.本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
35.本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
36.图1为本发明实施例的闪存访问系统的结构示意图;
37.图2为本发明实施例的描述符的结构示意图;
38.图3为本发明实施例的描述符链的结构示意图;
39.图4为本发明实施例的闪存控制器的结构示意图;
40.图5为本发明实施例的rom和sram的结构示意图;
41.图6为本发明实施例的闪存访问方法的步骤流程图。
具体实施方式
42.本部分将详细描述本发明的具体实施例,本发明之较佳实施例在附图中示出,附图的作用在于用图形补充说明书文字部分的描述,使人能够直观地、形象地理解本发明的每个技术特征和整体技术方案,但其不能理解为对本发明保护范围的限制。
43.在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
44.本发明的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
45.nand flash:flash指闪存,是一种可用电快速擦除和编程的非易失性存储器,flash从芯片工艺上可以分为nor flash和nand flash两大类。nand flash存储器是flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。nand flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、mp3随身听记忆卡、体积小巧的u盘等。
46.dma:direct memory access,直接内存访问,是一些计算机总线架构提供的功能,它能使数据从附加设备直接发送到计算机主板的内存上。
47.opcode:operation code,操作码,被用于描述机器语言指令中,指定要执行某种操作的那部分机器码,构成opcode的指令格式和规范由处理器指定。
48.emmc:embedded multi media card,嵌入式多媒体卡,是mmc协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。emmc是一种嵌入式、非易失的存储系统,它主要由闪存、闪存访问系统和emmc协议接口等组成,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具有体积小、功耗低、容量大等优点,非常适合作为智能手机、平板电脑、移动互联网设备等电子设备的存储介质。
49.ufs:universal flash storage,通用闪存存储,是一种设计用于数码相机、智能手机等消费电子产品使用的闪存存储规范。它的设计目标是发展一套统一的快闪存储卡格式,在提供高数据传输速度和稳定性的同时,也可以减少消费者对于市面上各种存储卡格式的混淆和不同存储卡转接器的使用。
50.ssd:solid state disk,固态硬盘,又称固态驱动器,是用固态电子存储芯片阵列制成的硬盘。
51.sram:static random-access memory,静态随机存取存储器,是随机存取存储器的一种。这种存储器只要保持通电,里面储存的数据就可以恒常保持。
52.ddr:double data rate,双倍速率同步动态随机存储器。
53.在传统的nand flash控制器的设计中,cpu通过直接配置寄存器的方式来控制和驱动硬件对nand flash颗粒的访问操作,比如通过nand io发送命令、地址以及进行数据读写操作,并指挥控制器的dma模块往系统缓存搬移数据等。软件几乎参与了nand flash控制器每一个具体任务的控制和指挥,需要对大量寄存器进行繁琐的配置,给cpu带来较重的负载和开销,成为进一步提升性能和能效的阻碍。
54.为此,我们采用了基于描述符来实现nand flash访问的方式,能够大幅降低软件的开销和cpu的负担;在nand flash控制器(下称闪存控制器)的设计中,描述符的调度和解析工作,全部由硬件模块执行,相较于传统的通过cpu直接配置闪存访问系统的内部寄存器来驱动硬件对nand flash颗粒(下称闪存颗粒)的访问方式,在此方式中,软件层只需要在很高的抽象层级来构建描述符,基本无需过多关心闪存访问系统内部的硬件实现细节,大幅降低了软件的开销和cpu的负担;同时,还能够提升nand flash颗粒多ce/lun下同时访问的并行度和nand io的利用率。其中,每个nand flash可以有多个ce(独立片选单元),每个ce下可以有多个lun(logical unit number,逻辑单元号),lun是闪存内可执行命令并回报自身状态的最小独立单元。
55.下面参照图1至图5,详细阐述本发明实施例的闪存访问系统。
56.根据本发明实施例的闪存访问系统,包括cpu、描述符读取器、闪存控制器和系统缓存;其中,cpu用于创建描述符,并将所述描述符写入系统缓存;多条所述描述符形成描述符链;所述描述符包括opcode指针、ce/lun信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;描述符读取器包括进入寄存器(entry)和获取模块(fetch),所述描述符链的首地址写入所述进入寄存器,所述获取模块用于根据所述首地址将所述描述符链中的多条所述描述符从系统缓存读出,并发送给闪存控制器;闪存控制器包括描述符队列、
任务调度器、任务解析器、执行单元和挂起等待区;所述描述符队列用于获取和存储所述描述符链的多条描述符;所述任务调度器用于将所述描述符队列中符合调度条件的所述描述符调度出来;所述任务解析器用于对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;所述执行单元用于根据所述多个控制指令,执行对闪存颗粒的访问操作;所述挂起等待区用于在所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描述符存放在所述挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他ce/lun的描述符。
57.具体地,描述符是软件层通过cpu构建的数据结构,用来描述对闪存(nand flash)的访问任务,比如block的擦除(block:块,闪存的最小擦除单元,闪存由多个block构成)和nand page的读写等(page:页,闪存中能够读取和写入的最小单位,一个block包含多个page),可以由一个描述符或者多个描述符来实现任意一种常见的访问操作,软件通过灵活的方式来创建不同的描述符适配各种场景需要。
58.如图2所示,在本发明的一些实施例中,一个描述符由多个域构成,分别为opcode指针、ce/lun信息、闪存颗粒地址信息(nand flash地址)、系统缓存地址、硬件控制信息和下条描述符地址。其中,opcode指针是下文要介绍的opcode表的索引号,闪存控制器的任务调度器将根据此指针从opcode表中查找对应的任务序列来调度并发送到后续模块进行解析和执行。ce/lun信息指的是描述符里面需要指定被访问的闪存颗粒的ce、lun信息,每个nand flash可以有多个ce,每个ce下可以有多个lun。nand flash地址是指描述符还需要指定被访问的闪存颗粒的地址(block、page地址等)。系统缓存地址指描述符需要指定系统缓存地址,比如对于nand flash的读操作,硬件需要把数据从nand flash颗粒的某个page读出后搬移到系统缓存的目的地址。此外,描述符中还可以增加硬件控制信息,用于指导硬件按照软件要求的方式去灵活执行,以满足不同应用场景的需要。最后,如图3所示,描述符通常以链的形式出现,因此描述符里面还指定了下条描述符在系统缓存中所在的位置。
59.如图1所示,根据本发明实施例的闪存访问系统,软件通过cpu创建描述符后,将描述符写入系统缓存中(emmc和ufs类型的控制器芯片可以用sram来做系统缓存,ssd也可用ddr来做系统缓存),并把多个描述符所组成的描述符链的首地址写入描述符读取器的entry寄存器,fetch模块按照这个首地址把描述符链的描述符一个个读出并送到闪存控制器的描述符队列中。需要说明的是,本设计支持一到多个nand flash通道方案,每个通道对应一个闪存控制器,在图1中只示出了两个闪存控制器。闪存控制器将描述符队列中的描述符调度并解析,从而实现对闪存颗粒的访问操作以及和系统缓存间的数据搬移工作。闪存控制器通过nand io实现对闪存颗粒的访问,并通过dma访问总线和系统缓存。
60.如图4所示,在本发明的一些实施例中,闪存控制器由前级模块和后级模块构成,其中前级模块用于对描述符进行任务调度和解析,然后将控制指令发往后级模块执行,可以理解为前级模块为控制中枢,后级模块即为执行单元,前级模块发送控制指令来控制和指挥后级模块的运行。
61.其中,前级模块包括描述符队列、任务调度器、任务解析器和挂起等待区。描述符读取器从系统缓存中读取描述符后,首先送往描述符队列中等待,这个队列可以存储多条描述符,给任务调度器实现多ce/lun并行访问提供发挥的空间。任务调度器在空闲的时候从描述符队列中选择符合调度条件的候选描述符,并将其调度出来,送往任务解析器进行
解析,解析后生成的控制指令发往后级模块/执行单元对应的硬件单元(fcu,wdma,rdma)来执行。其中,fcu是指flash control unit,闪存控制单元;wdma是指write dma,写dma;rdma是指read dma,读dma。
62.任务调度器依赖opcode表来完成工作,opcode表存储了大量不同的任务序列组合来提供给软件创建描述符时来使用,每个描述符中的opcode指针指向opcode表中特定的任务序列,用来实现对闪存的不同访问操作。
63.任务解析器在解析产生发往执行单元的控制指令时,通常需要在命令表的协助下完成工作,解析生成的指令包括通过fcu和nand io对nand颗粒的访问操作(如发送命令、地址以及执行数据读写操作、擦除和状态查询等)、rdma和wdma的启动指令、以及更新描述符状态到系统缓存的指令等。
64.对于描述符而言,一条描述符解析之后会产生多个控制指令,并不是每个控制指令都可以马上执行完成的,有些控制指令需要执行的时间较久,比如某个控制指令要求rdma从系统缓存读取足够数量的数据到后级模块的内部缓存,如果一直等待这条描述符解析并执行完成后,再去解析和执行其他的描述符,nand io的利用率不高。为了提升nand io的利用率和访问效率,在本发明示例中,前级模块中还设计了挂起等待区,充分利用nand flash颗粒不同ce/lun可以并行访问的特性,让需要长时间等待执行结果的控制指令发往后级模块后,暂停本描述符后续的任务解析动作,任务解析器通知挂起等待区记下当前ce/lun的执行状态、挂起退出等待条件、任务序列在opcode表中的当前位置等后,把资源让出来执行其他ce/lun下的描述符的调度和解析工作,从而实现了对nand flash颗粒不同ce/lun的并行访问,提升了nand io的利用效率。当后级模块反馈满足挂起退出条件的信号到挂起等待区后,对应ce/lun下挂起的描述符任务可以接着被再次调度出来送往任务解析器继续解析和执行。
65.如图1所示,在本示例中,执行单元包括内部缓存、fcu、rdma、wdma和纠错引擎,其中:
66.fcu在获取来自前级模块的任务解析器的控制指令后,通过nand io执行对nand flash颗粒的访问,任务解析器发送给fcu的指令需要提供足够的信息,包括具体的命令、block/page地址等。
67.rdma收到前级模块的任务解析器送来的控制指令后,把指定数量的数据从系统缓存中的指定地址读取后送到后级模块的内部缓存;wdma则根据控制指令把后级模块的内部缓存内指定数量的数据或者描述符的状态信息写入到系统缓存的指定地址。
68.纠错引擎用于实现bch(bch码是用于校正多个随机错误模式的多级、循环、错误校正、变长数字编码)或者ldpc(一种奇偶校验码,是一种增加二进制传输系统最小距离的简单和广泛采用的方法,一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法)数据纠错的编解码,解决nand flash颗粒中数据存储的可靠性问题。
69.此外,在本设计的闪存控制器中,还包括寄存器模块,因此该闪存访问系统依然可以通过cpu配置寄存器模块的方式绕过前级模块来产生指令控制fcu、wdma和rdma工作,从而实现传统的非描述符方式的操作,可以用于调试等用途。
70.根据本发明实施例的闪存访问系统,采用了基于描述符来实现nand flash访问的方式,描述符的任务调度和解析工作全部由硬件模块来执行,从而可以大幅降低软件的开
销和cpu负担。同时,通过设置挂起等待区,提升了nand flash颗粒多ce/lun下同时访问的并行度和nand io的利用率。
71.在前级模块中,有一块缓存(即描述符队列)用来接收来自描述符读取器送来的描述符,这个队列可以存储多条描述符,给任务调度器实现多个ce/lun并行访问提供发挥的空间。
[0072][0073]
表1描述符队列案例
[0074]
请参见表1,其示出了其中一种描述符队列的案例。用于存储描述符的描述符队列可以采用循环队列的设计方案来实现描述符队列的push(入列)和pop(出列)操作、以及队列管理,比如通过head/tail指针指向的缓存单元物理位置的关系来判断队列的空满。当新的描述符push进来后tail指针(尾指针)自动加1,当一条描述符pop出去后head指针(头指针)自动加1。需要注意的是,如果某个位置的描述符已经完成了全部的调度和解析(即状态为done),但它不处于head指针指向的单元,不符合pop的条件,必须等待前面的描述符被全部pop出去自身才能被pop。比如表1的案例中,物理位置为5的描述符已经是done的状态,但由于head指针指向的单元的物理位置为3,因此该描述符不符合被pop的条件。
[0075]
描述符队列大体上按照从head到tail即先来都到的顺序被任务调度器调度执行,但是某些情况下可以实现乱序调度执行。各ce下的每个lun属于执行nand flash访问操作的最小存储单元,属于同一ce/lun下的存储单元不能被乱序访问只能顺序执行,但是访问不同ce/lun下存储单元的描述符可以被乱序调度以实现并行访问,从而提升nand io的利用率。比如表1中head指针指向的描述符(物理位置为3)此时处于running状态(调度中),在解析和执行中遇到需要长时间等待后级模块的反馈结果,因此该描述符会被注册到前级模块的挂起等待区并暂停后续的解析动作,这时任务调度器有空闲从描述符队列中的下一单元(物理位置为4)查找是否存在符合调度条件的候选者(pending状态),但是案例中物理位置4的描述符和head指针指向的描述符的访问对象都属于同一ce/lun,不符合调度条件,任务调度器继续往下查找,物理位置为5的描述符是done的状态,继续往下找,物理位置为6的描述符为pending状态,且访问对象的ce/lun不同于前面的描述符,可以被调度出来进行解析。
[0076]
前面提到每个描述符都有opcode指针,在前级模块的描述符队列中某候选描述符被调度出来后,任务调度器会根据这个指针去opcode表中对应的位置读取一串任务序列来解析执行。
[0077][0078]
表2..opcode表虚拟案例
[0079]
表2是一个opcode表的虚拟案例,每个单元或者多个单元可以构建一个完整的任务序列,比如指针为3和4指向的位置各有一个任务序列,长度不同。opcode指针为5的位置的任务序列则占据了两个单元。
[0080]
我们以opcode指针为3为例来说明一个描述符是怎么被调度执行的,其存储的任务序列假设为aa-》bb-》20-》cc-》ff,在这个虚拟案例中aa代表rdma需要从系统缓存读取数据到后级模块的内部缓存,因为这个时间需要等待比较久,bb代表当前描述符的任务序列需要注册到挂起等待区直到后级模块反馈rdma已经读取了足够数量的数据到内部缓存,而这等待期间任务调度器可以去调度别的描述符来执行,从而提高并行度。当数据读取完成后,任务调度器把20代表的任务继续接着读取出来送给任务解析器来解析,假设这个任务代表需要控制后级模块的fcu通过nand io访问nand flash颗粒,任务解析器通过查找命令表中20指向位置的内容并结合当前描述符内容来解析产生控制指令后发送给fcu,这条指令代表需要把内部缓存的数据通过命令表中指定的命令方式发往nand flash的某个page,cc表示再次注册到挂起等待区直到nand flash颗粒返回完成信号,因为这个等待时间会很长,中间会再次允许执行其它描述符的调度和解析,ff代表该描述符的任务全部结束,并发控制指令给后级模块的wdma,wdma需要把描述符的状态写入到系统缓存的指定位置。
[0081][0082]
表3挂起等待区数据结构案例
[0083]
表3为挂起等待区的一个数据结构案例,每个ce/lun组合下的存储单元记录是否处于挂起的状态,挂起后退出条件(等待事件),退出条件是否满足,opcode表中挂起时暂停的位置。当任务解析器遇到任务调度器发送过来表示挂起动作的任务时,根据ce/lun值在挂起等待区找到对应单元后把“状态”置为“挂起”,并记录“挂起后的退出条件”,比如是等待rb信号ready,还是等待rdma读取足够数量的数据到内部缓存,或者别的条件,“退出条件是否满足”设置为“no”,并记录opcode表中任务序列挂起时的位置,包括opcode指针和当前单元内的偏移量。
[0084]
经过一段时间的等待,后级模块返回表示等待挂起后退出条件满足的标准信号,挂起等待区对应单元的“退出条件是否满足”设置为“yes”,任务调度器将在空闲时将暂停的描述符任务重新调度出来,并根据挂起等待区记录的位置接着继续执行。
[0085][0086]
表4命令表示意图
[0087]
表4是命令表示意图,用于产生发往执行单元的fcu的指令,如果任务调度器送来的任务为解析生成fcu指令,该任务此时为cmd指针,将在cmd表中读取该指针对应位置的数据内容,后者为各种参数和cmd(command,命令)set。任务解析器按照以下几种类型进行解析:
[0088]
1)dma启动类型:读取描述符中的系统缓存地址等内容解析产生rdma或者wdma启动指令;
[0089]
2)挂起等待类型:不产生指令,根据ce/lun找到挂起等待区相应单元注册挂起状态,记录退出等待条件和任务序列暂停位置;
[0090]
3)fcu指令类型:任务本身为命令表指针,根据指针读取命令表中相应的参数和命令集,同时读取描述符内容,按照寄存器的配置产生fcu指令;
[0091]
4)结束类型:产生用于更新描述符状态到系统缓存指定地址的指令,并结束整个描述符的任务。
[0092]
为了支持不同厂家不同类型的nand flash颗粒,前级模块中用于任务调度和解析的opcode表和命令表需要储存大量的数量内容,为了节省存储模块面积和大量初始化时间,通常用较大容量的rom(read-only memory,只读存储器)来存储这些内容。但是在实际芯片产品生命周期中,可能出现新的应用需求,比如新的颗粒类型支持,或者发现表中某些条目存在错误,而修改芯片设计代价很大;因此,本发明实施例采用了小容量的sram来进行扩展或者替换,如图5所示,sram中写入三条新的条目,其中两条用于功能和应用场景的扩展,一条用于替换rom中出错的条目,因为这种新的条目数量通常较少,需用初始化加载的时间很短。在实现上,软件只需要配置寄存器告知rom中存放的opcode和命令的条目数量,当opcode指针或者命令指针超过指定的数量时,任务调度器和解析器模块将从扩展用sram中去读取新的条目。
[0093]
另一方面,如图6所示,本发明实施例还提出了一种闪存访问方法,包括以下的步骤:
[0094]
步骤s100:cpu创建描述符,并将所述描述符写入系统缓存,并将多条所述描述符所形成的描述符链的首地址写入描述符读取器的进入寄存器;所述描述符包括opcode指针、ce/lun信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;
[0095]
步骤s200:所述描述符读取器的获取模块根据所述首地址,将所述描述符链中的多条所述描述符从所述系统缓存读出,并发送给闪存控制器的描述符队列;
[0096]
步骤s300:所述闪存控制器的任务调度器将所述描述符队列中符合调度条件的所述描述符调度出来;
[0097]
步骤s400:所述闪存控制器的任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;
[0098]
步骤s500:所述闪存控制器的执行单元根据所述多个控制指令,执行对闪存颗粒的访问操作;
[0099]
步骤s600:当所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描述符存放在挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他ce/lun的描述符,然后返回步骤s400。
[0100]
具体地,如图2所示,在本发明的一些实施例中,一个描述符由多个域构成,分别为opcode指针、ce/lun信息、nand flash地址、系统缓存地址、硬件控制信息和下条描述符地址。如图3所示,描述符通常以链的形式出现,因此描述符里面指定了下条描述符在系统缓存中所在的位置。软件通过cpu创建描述符后,将描述符写入系统缓存中,并把多个描述符所组成的描述符链的首地址写入描述符读取器的进入寄存器(entry),获取模块(fetch)按照这个首地址把描述符链的描述符一个个读出并送到闪存控制器的描述符队列中。
[0101]
闪存控制器通过描述符队列接收来自描述符读取器送来的描述符,这个队列可以存储多条描述符,给任务调度器实现多个ce/lun并行访问提供发挥的空间。
[0102][0103]
表5描述符队列案例
[0104]
请参见表5,其示出了其中一种描述符队列的案例。用于存储描述符的描述符队列可以采用循环队列的设计方案来实现描述符队列的push(入列)和pop(出列)操作、以及队列管理,比如通过head/tail指针指向的缓存单元物理位置的关系来判断队列的空满。当新的描述符push进来后tail指针(尾指针)自动加1,当一条描述符pop出去后head指针(头指针)自动加1。需要注意的是,如果某个位置的描述符已经完成了全部的调度和解析(即状态为done),但它不处于head指针指向的单元,不符合pop的条件,必须等待前面的描述符被全部pop出去自身才能被pop。比如表5的案例中,物理位置为5的描述符已经是done的状态,但由于head指针指向的单元的物理位置为2,因此该描述符不符合被pop的条件。
[0105]
对于上述的步骤s300,任务调度器在调度描述符队列中的描述符时,大体上按照从head到tail即先来都到的顺序调度执行,但是某些情况下可以实现乱序调度执行。各ce下的每个lun属于执行nand flash访问操作的最小存储单元,属于同一ce/lun下的存储单元不能被乱序访问只能顺序执行,但是访问不同ce/lun下存储单元的描述符可以被乱序调度以实现并行访问,从而提升nand io的利用率。比如表5中head指针指向的描述符(物理位置为3)此时处于running状态(调度中),在解析和执行中遇到需要长时间等待后级模块反馈结果,因此该描述符会被存放到挂起等待区并暂停后续的解析动作,这时任务调度器有空闲从描述符队列中的下一单元(物理位置为4)查找是否存在符合调度条件的候选者(pending状态),但是案例中物理位置4的描述符和head指针指向的描述符的访问对象都属
于同一ce/lun,不符合调度条件,任务调度器继续往下查找,物理位置为5的描述符是done的状态,继续往下找,物理位置为6的描述符为pending状态,且访问对象的ce/lun不同于前面的描述符,可以被调度出来进行解析。
[0106]
任务调度器在调度出描述符后,会根据描述符的opcode指针,从opcode表中查找对应的任务序列,并将任务序列及描述符发送给任务解析器,进行解析。
[0107][0108]
表6..opcode表虚拟案例
[0109]
表6是一个opcode表的虚拟案例,每个单元或者多个单元可以构建一个完整的任务序列,比如指针为3和4指向的位置各有一个任务序列,长度不同。opcode指针为5的位置的任务序列则占据了两个单元。我们以opcode指针为3为例来说明一个描述符是怎么被调度执行的,其存储的任务序列假设为aa-》bb-》20-》cc-》ff,在这个虚拟案例中aa代表rdma需要从系统缓存读取数据到后级模块的内部缓存,因为这个时间需要等待比较久,bb代表当前描述符的任务序列需要注册到挂起等待区直到后级模块反馈rdma已经读取了足够数量的数据到内部缓存,而这等待期间任务调度器可以去调度别的描述符来执行,从而提高并行度。当数据读取完成后,任务调度器把20代表的任务继续接着读取出来送给任务解析器来解析,假设这个任务代表需要控制后级模块的fcu通过nand io访问nand flash颗粒,任务解析器通过查找命令表中20指向位置的内容并结合当前描述符内容来解析产生控制指令后发送给fcu,这条指令代表需要把内部缓存的数据通过命令表中指定的命令方式发往nand flash的某个page,cc表示再次注册到挂起等待区直到nand flash颗粒返回满足挂起退出条件的信号,因为这个等待时间会很长,中间会再次允许执行其它描述符的调度和解析,ff代表该描述符的任务全部结束,并发控制指令给后级模块的wdma,wdma需要把描述符的状态写入到系统缓存的指定位置。
[0110][0111]
表7挂起等待区数据结构案例
[0112]
表7为挂起等待区的一个数据结构案例,每个ce/lun组合下的存储单元记录是否处于挂起的状态,挂起后退出条件(等待事件),退出条件是否满足,opcode表中挂起时暂停的位置。当任务解析器遇到任务调度器发送过来表示挂起动作的任务时,根据ce/lun值在挂起等待区找到对应单元后把“状态”置为“挂起”,并记录“挂起后的退出条件”,比如是等待rb信号ready,还是等待rdma读取足够数量的数据到内部缓存,或者别的条件,“退出条件是否满足”设置为“no”,并记录opcode表中任务序列挂起时的位置,包括opcode指针和当前
单元内的偏移量。
[0113]
经过一段时间的等待,后级模块返回满足挂起退出条件的信号时,挂起等待区对应单元的“退出条件是否满足”设置为“yes”,任务调度器将在空闲时将暂停的描述符任务重新调度出来,并根据挂起等待区记录的位置接着继续执行。
[0114][0115]
表8命令表示意图
[0116]
表8是命令表示意图,用于产生发往执行单元的fcu的指令,如果任务调度器送来的任务为解析生成fcu指令,该任务此时为cmd指针,将在cmd表中读取该指针对应位置的数据内容,后者为各种参数和cmd set。任务解析器按照以下几种类型进行解析:
[0117]
1)dma启动类型:读取描述符中的系统缓存地址等内容解析产生rdma或者wdma启动指令;
[0118]
2)挂起等待类型:不产生指令,根据ce/lun找到挂起等待区相应单元注册挂起状态,记录退出等待条件和任务序列暂停位置;
[0119]
3)fcu指令类型:任务本身为命令表指针,根据指针读取命令表中相应的参数和命令集,同时读取描述符内容,按照寄存器的配置产生fcu指令;
[0120]
4)结束类型:产生用于更新描述符状态到系统缓存指定地址的指令,并结束整个描述符的任务。
[0121]
根据本发明实施例的闪存访问方法,采用了基于描述符来实现nand flash访问的方式,描述符的任务调度和解析工作全部由硬件模块来执行,从而可以大幅降低软件的开销和cpu负担。同时,通过设置挂起等待区,提升了nand flash颗粒多ce/lun下同时访问的并行度和nand io的利用率。
[0122]
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种示例性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的示例性具体实施和架构的许多其它修改也处于本公开的范围内。
[0123]
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
[0124]
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用
硬件计算机系统或者专用硬件和计算机指令的组合来实现。
[0125]
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
[0126]
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
[0127]
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
[0128]
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
技术特征:
1.一种闪存访问系统,其特征在于,包括:cpu,用于创建描述符,并将所述描述符写入系统缓存;多条所述描述符形成描述符链;所述描述符包括opcode指针、ce/lun信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;描述符读取器,包括进入寄存器和获取模块,所述描述符链的首地址写入所述进入寄存器,所述获取模块用于根据所述首地址将所述描述符链中的多条所述描述符从所述系统缓存读出,并发送给闪存控制器;闪存控制器,包括描述符队列、任务调度器、任务解析器、执行单元和挂起等待区;所述描述符队列用于获取和存储所述描述符链的多条描述符;所述任务调度器用于将所述描述符队列中符合调度条件的所述描述符调度出来;所述任务解析器用于对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;所述执行单元用于根据所述多个控制指令,执行对闪存颗粒的访问操作;所述挂起等待区用于在所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描述符存放在所述挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他ce/lun的描述符。2.根据权利要求1所述的闪存访问系统,其特征在于,所述执行单元包括:内部缓存;fcu,用于通过nandio执行对闪存颗粒的访问操作;rdma,用于将指定数量的数据从系统缓存中的指定地址读取出来,并发送到所述内部缓存;wdma,用于将所述内部缓存内指定数量的数据或者描述符的状态信息,写入到所述系统缓存的指定地址。3.根据权利要求2所述的闪存访问系统,其特征在于,所述执行单元还包括纠错引擎,所述纠错引擎用于对数据进行纠错。4.根据权利要求1所述的闪存访问系统,其特征在于,所述闪存控制器还包括寄存器模块,所述cpu能够通过配置所述寄存器模块内的寄存器,实现对所述闪存颗粒的访问操作。5.一种闪存访问方法,基于如权利要求1至4任一项所述的闪存访问系统,其特征在于,包括以下步骤:cpu创建描述符,并将所述描述符写入系统缓存,并将多条所述描述符所形成的描述符链的首地址写入描述符读取器的进入寄存器;所述描述符包括opcode指针、ce/lun信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;所述描述符读取器的获取模块根据所述首地址,将所述描述符链中的多条所述描述符从所述系统缓存读出,并发送给闪存控制器的描述符队列;所述闪存控制器的任务调度器将所述描述符队列中符合调度条件的所述描述符调度出来;所述闪存控制器的任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;所述闪存控制器的执行单元根据所述多个控制指令,执行对闪存颗粒的访问操作;当所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描
述符存放在挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他ce/lun的描述符,然后返回任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的这一步骤。6.根据权利要求5所述的闪存访问方法,其特征在于,所述描述符队列包括头指针和尾指针,当有描述符进入所述描述符队列时,所述尾指针加1,当有描述符离开所述描述符队列时,所述头指针加1;当所述描述符处于所述头指针指向的单元,且所述描述符完成所有的调度和解析任务后,所述描述符离开所述描述符队列。7.根据权利要求5所述的闪存访问方法,其特征在于,所述闪存控制器的任务调度器将所述描述符队列中符合条件的所述描述符调度出来的步骤之后,还包括以下步骤:所述任务调度器根据调度出来的所述描述符的所述opcode指针,从opcode表中查找对应的任务序列,并将所述任务序列及所述描述符发送给所述任务解析器。8.根据权利要求7所述的闪存访问方法,其特征在于,所述任务序列包括dma启动类型、挂起等待类型、fcu指令类型和结束类型这四种类型的任务中的一种或多种;所述闪存控制器的任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的步骤,包括:若任务的类型为dma启动类型,所述任务解析器解析所述描述符,产生rdma或者wdma启动指令;或者,若任务的类型为挂起等待类型,所述任务解析器将所述描述符存放到所述挂起等待区,并暂停所述描述符的后续解析动作;或者,若任务的类型为fcu指令类型,所述任务解析器根据所述任务读取命令表中的参数和命令集,并根据所述参数和命令集产生访问闪存颗粒的指令;或者,若任务的类型为结束类型,所述任务解析器产生用于更新描述符状态到系统缓存的指定位置的指令,并结束整个描述符的解析任务。9.根据权利要求8所述的闪存访问方法,其特征在于,所述挂起等待区记载了存放在所述挂起等待区的所述描述符对应的ce/lun的挂起状态、所述描述符的挂起退出条件、以及所述opcode表中的所述任务序列挂起时的位置。10.根据权利要求5所述的闪存访问方法,其特征在于,所述方法还包括以下步骤:当所述执行单元反馈满足挂起退出条件的信号时,所述任务调度器在空闲时将所述挂起等待区的所述描述符调度出来,并发送至所述任务解析器,进行后续的解析工作。
技术总结
本发明公开了一种闪存访问系统及方法,涉及闪存技术领域。闪存访问系统包括CPU、描述符读取器、闪存控制器和系统缓存;描述符读取器包括进入寄存器和获取模块;闪存控制器包括描述符队列、任务调度器、任务解析器、执行单元和挂起等待区。根据本发明的闪存访问系统,采用了基于描述符来实现Nand Flash访问的方式,描述符的任务调度和解析工作全部由硬件模块来执行,从而可以大幅降低软件的开销和CPU负担。同时,通过设置挂起等待区,提升了Nand Flash颗粒多CE/LUN下同时访问的并行度和Nand IO的利用率。利用率。利用率。
技术研发人员:刘弋波 温佳强 付本涛 曾文胜
受保护的技术使用者:珠海妙存科技有限公司
技术研发日:2023.04.27
技术公布日:2023/8/14
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:伸缩型血管介入导丝控制装置的制作方法 下一篇:光学模组采集设备的制作方法
