一种存储装置、数据存储方法及相关设备与流程

专利检索2022-05-11  9



1.本发明涉及大数据技术领域,尤其涉及一种存储装置、数据存储方法及相关设备。


背景技术:

2.现有技术中的循环缓冲区(circular buffer)是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。在通信程序中,经常使用循环缓冲器作为数据结构来存放通信中发送和接收的数据。循环缓冲区是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。
3.循环缓冲区(也称为环形缓冲区),其工作原理就像内存是连续的且可循环的一样。在生成和使用内存时,不需将原来的数据全部重新清理掉,只要调整头指针head/尾指针tail 即可。当添加(写入)数据时,head指针前进;当使用(读取)数据时,tail 指针向前移动;当到达缓冲区的尾部时,指针又回到缓冲区的起始位置。
4.在循环缓冲区中,当一个数据元素被用掉后,其余数据元素不需要移动其存储位置。相反,一个非循环缓冲区(例如一个普通的队列)在用掉一个数据元素后,其余数据元素需要向前搬移。换句话说,循环缓冲区适合实现先进先出缓冲区,而非循环缓冲区适合后进先出缓冲区。
5.目前,现有技术中循环缓冲区只能实现对单个数据的先进先出,也就是当读指针位置的数据被读取后,读指针必须移位,来保证先进先出的数据结构。然而,在实际应用中,有些情况是这些被读取的数据会在后续的读操作中被复用。此时,现有的循环缓冲区的先进先出模式无法实现该功能,也无法适用于该场景。


技术实现要素:

6.本发明实施例提供一种存储装置、数据存储方法及相关设备,以提升循环缓冲区功能的灵活性。
7.第一方面,本发明实施例提供了一种存储装置,可包括:控制逻辑、寄存器组和循环缓冲区;所述寄存器组包括一个或多个配置寄存器;所述循环缓冲器与主机设备耦合;所述控制逻辑可用于:接收所述主机设备发送的读数据指令,所述读数据指令包括待读取的目标数据的大小信息;根据所述待读取的目标数据的大小信息和所述寄存器组中的至少一个配置寄存器的值,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址;其中,当所述至少一个配置寄存器的值满足预设条件时,所述循环缓冲区中的部分或全部已读地址处于可读状态,所述已读地址为所存储的数据被至少读取过一次的地址;控制从所述循环缓冲区的所述一个或多个目标地址读取所述目标数据。
8.由于在现有技术中,环形缓冲器只能实现对单个数据的先进先出,也就是当读指针指向的地址的数据被读取后,读指针必须移位,来保证先进先出的数据结构。若在一些应用场景中某些被读取过的数据可能在后续需要复用,那么现有技术中的上述先进先出模式则无法实现数据复用。本发明实施例,提供了一种可重复读取数据的存储装置,具体包括针
对硬件以及软件的设计,其中,从硬件角度,是通过在存储装置中增加一个或多个配置寄存器用来存储循环缓冲区的相关配置值;从软件角度,基于上述增加的配置寄存器,使得该存储装置在接收到主机设备侧发送过来的读数据指令后,根据待读取数据的相关大小信息,以及结合至少一个配置寄存器中的值,来确定待读取数据在循环缓冲区中所对应的具体地址,从而最终从相应地址处读取目标数据。其中,在确定目标地址的过程中,由于依据了至少一个配置寄存器的值,且本发明实施例进一步设计了当该配置寄存器的值满足一定预设条件的情况下,则可以将循环缓冲区中的部分或者全部已读地址配置为处于可读状态(也即是,在该可读状态下,可以重复读取该循环缓冲区中的部分或全部已读地址中的内容),因此,当待读取的目标数据对应的一个或多个目标地址中包含上述处于可读状态的地址时,则可以实现在环形缓冲区中进行数据复用(即重复读取)的功能,从而实现了在一些应用场景中复用已经读取过的数据的目的。综上,本技术中的存储装置既保留了现有技术中的循环缓冲区的功能,又可以支持数据复用的功能。
9.在一种可能的实现方式中,所述至少一个配置寄存器包括滑窗寄存器和读指针寄存器;所述滑窗寄存器的值为滑窗值,所述读指针寄存器的值为读指针值;所述目标数据的大小信息包括所述待读取的单个数据大小、读取间隔以及总数据大小中的一种或多种;所述控制逻辑,具体用于:当所述读指针值与所述滑窗值不同时,将所述读指针值更新为所述滑窗值;基于更新后的所述读指针值和所述目标数据的大小信息,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址。
10.本发明实施例中,当参与确定目标地址的至少一个配置寄存器中包括滑窗寄存器时,则该滑窗寄存器的作用是用于重置读指针,也即是本发明实施例支持通过滑窗寄存器中的值来重置读指针的值,当发现读指针寄存器的值与滑窗寄存器的值不同时,则需要基于滑窗寄存器的值更新读指针寄存器的值,更新后,则可以基于该更新后的读指针的值作为起始地址,并根据读数据指令中的关于目标数据的大小信息,最终确定待读取的目标数据对应的一个或多个目标地址,从而使得可从该一个或多个目标地址读取该目标数据。
11.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器;所述预设条件包括所述模式寄存器的值用于指示非阻塞模式;其中,在所述非阻塞模式下,所述循环缓冲区中的所述已读地址均处于可读状态。
12.本发明实施例中,用于确定待读取数据对应的一个或多个地址的配置寄存器,至少包括模式寄存器,且相应的预设条件包括该模式寄存器当前的值指向非阻塞模式。即本发明实施例,通过设计在非阻塞模式下,循环缓冲区中的已读地址均可处于可读状态,也即是循环缓冲区中所存储的数据被至少读取过一次的地址均处于可重新读取的状态,如此一来,当待读取的数据所对应的一个或多个地址中包含了上述处于可读状态的地址时,则可以实现数据复用功能。
13.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于可读状态。
14.本发明实施例中,还进一步设计了在上述非阻塞模式下,循环缓冲区中的除了已读地址均可处于可读状态,且循环缓冲区中的暂未被写入数据的地址也处于可读状态,也即是循环缓冲区中当前为空的地址也处于可读状态。也即是在该非阻塞模式下,读操作不受循环缓冲区空的限制。本发明实施例中的循环缓冲区不仅支持数据复用功能,而且还支
持读空的地址,以灵活地满足各类场景。
15.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于可写状态。
16.本发明实施例中,还进一步设计了在上述非阻塞模式下,循环缓冲区中的除了已读地址均可处于可读状态,还可以将已经被写入数据但当前还未被读取的地址配置为可写状态(也即是,在该可写状态下,可以向该循环缓冲区中已经被写入数据但还未被读取过的地址中重新写入内容),从而实现可以覆盖掉之前写入的数据,支持数据覆盖的功能。也即是在该非阻塞模式下,写操作不受循环缓冲区满的限制。本发明实施例中的循环缓冲区不仅支持数据复用功能,还可以支持数据覆盖写入功能,以灵活地满足各类场景。
17.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器和滑窗寄存器;所述预设条件包括所述模式寄存器的值用于指示阻塞模式、且所述滑窗寄存器的值指向所述循环缓冲区中的目标已读地址,所述目标已读地址为所述循环缓冲区中的其中一个所述已读地址;其中,在所述阻塞模式下,所述循环缓冲区中从所述目标已读地址开始至写操作的地址之间的地址均处于可读状态。
18.本发明实施例中,用于确定待读取数据对应的一个或多个地址的配置寄存器,至少包括模式寄存器和滑窗寄存器,且相应的预设条件包括:该模式寄存器当前的值指向阻塞模式、以及滑窗寄存器的值指向所述循环缓冲区中的某个已读地址。即本发明实施例,通过设计在阻塞模式下,利用滑窗寄存器的值指向循环缓冲区中的某个已读地址的方式,来实现循环缓冲区中的部分地址处于可读状态的功能。也即是循环缓冲区中,从滑窗寄存器所指向的已读地址开始至写操作的地址之间的地址,又重新处于可读取的状态。且在该情况下,由于读指针需要按照滑窗指针的所指向的地址进行重置,由于读指针是从滑窗寄存器所指向的地址开始读取数据的,如此一来,当滑窗寄存器的值是指向已读地址的话,则显然读指针会从已经被至少读取过一次的地址开始读起,也即是实现了数据复用功能。
19.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于不可读状态。
20.本发明实施例中,还进一步设计了在上述阻塞模式下,循环缓冲区中的暂未被写入数据的地址处于不可读状态(也即是,在该不可读状态下,无法读取该循环缓冲区中的暂未被写入数据的地址)。换句话说,当循环缓冲区中的某个地址中还未被写入数据的地址即空地址,是不能被读取的。也即是在该阻塞模式下,读操作是会受到循环缓冲区空的限制的。
21.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于不可写状态。
22.本发明实施例中,还进一步设计了在上述阻塞模式下,循环缓冲区中已经被写入数据但还未被读取过的地址处于不可写状态(也即是,在该不可写状态下,无法向该循环缓冲区中的已经被写入数据但还未被读取过的地址重复写入数据)。换句话说,当循环缓冲区中的某个地址中已经被写入数据但是当前还未被读取过的地址,则处于不可写状态,即无法覆盖已经写入但还未读取的地址。也即是在该阻塞模式下,写操作是会受到循环缓冲区满的限制的。
23.在一种可能的实现方式中,所述控制逻辑,还用于:检测所述循环缓冲区中有效数
据的数量;当所述有效数据的数量达到或超过高水位阈值时,生成上溢标志位并向所述主机设备发送所述上溢标志位。
24.本发明实施例中,通过检测循环缓冲区中有效数据的数量,若当前存储的有效数据的数量达到或超过预设的高水位阈值时,则生成上溢标志位并向所述主机设备发送所述上溢标志位,以便于后续主机设备根据该上溢标志位,来决定是否还要继续向循环缓冲区中写入数据,或者说是等一段时间再向循环缓冲区中写入数据。
25.在一种可能的实现方式中,所述控制逻辑,还用于:当所述有效数据的数量少于低水位阈值时,生成下溢标志位并向所述主机设备发送所述下溢标志位。
26.本发明实施例中,通过检测循环缓冲区中有效数据的数量,若当前存储的有效数据的数量少于预设的低水位阈值时,则生成下溢标志位并向所述主机设备发送所述下溢标志位,以便于后续主机设备根据该下溢标志位,来决定是否还要继续从循环缓冲区中读取数据,或者说是等一段时间再从循环缓冲区中读取数据。
27.在一种可能的实现方式中,所述主机设备包括处理器cpu、处理器核和直接存储器访问dma中的一种或多种。
28.本发明实施例中的存储装置可以与各类主机设备耦合,接收各类主机设备的读/写操作指令,其中主机设备可以包括处理器(central processing unit,cpu)、处理器核、直接存储器访问(direct memory access,dma)等。例如,当主机设备为cpu时,存储装置可以作为cpu外部的内存(memory)与其耦合;当主机设备为处理器核时,则本技术中的存储装置可以在cpu内部与处理器核耦合,作为处理器中的缓存,也可以在处理器核的内部,作为处理器核内部的缓存。也即是本发明实施例中对存储装置与cpu之间的关系不作具体限定。
29.在一种可能的实现方式中,所述主机设备包括处理器cpu;所述控制逻辑,还用于:接收所述cpu发送的初始化配置指令,所述初始化配置指令包括所述循环缓冲区的初始地址、所述循环缓冲区的长度;响应于所述初始化配置指令,配置所述循环缓冲区。
30.本发明实施例中,在初始状态下可以通过主机设备中的处理器来对循环缓冲区的一些初始参数进行配置,例如循环缓冲区的初始地址、长度等等,则循环缓冲区中的控制逻辑可以根据这些指令读循环缓冲区进行配置,以满足不同场景下对循环缓冲区的不同需求。
31.第二方面,本技术提供一种数据存储方法,可应用于存储装置,所述存储装置可包括:寄存器组和循环缓冲区;所述寄存器组包括一个或多个配置寄存器;所述存储装置与主机设备耦合;所述方法可包括:接收所述主机设备发送的读数据指令,所述读数据指令包括待读取的目标数据的大小信息;根据所述待读取的目标数据的大小信息和所述寄存器组中的至少一个配置寄存器的值,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址;其中,当所述至少一个配置寄存器的值满足预设条件时,所述循环缓冲区中的部分或全部已读地址处于可读状态,所述已读地址为所存储的数据被至少读取过一次的地址;控制从所述循环缓冲区的所述一个或多个目标地址读取所述目标数据。
32.在一种可能的实现方式中,所述至少一个配置寄存器包括滑窗寄存器和读指针寄存器;所述滑窗寄存器的值为滑窗值,所述读指针寄存器的值为读指针值;所述目标数据的大小信息包括所述待读取的单个数据大小、读取间隔以及总数据大小中的一种或多种;所述根据所述待读取的目标数据的大小信息和所述寄存器组中的至少一个配置寄存器的值,
确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址,包括:当所述读指针值与所述滑窗值不同时,将所述读指针值更新为所述滑窗值;基于更新后的所述读指针值和所述目标数据的大小信息,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址。
33.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器;所述预设条件包括所述模式寄存器的值用于指示非阻塞模式;其中,在所述非阻塞模式下,所述循环缓冲区中的所述已读地址均处于可读状态。
34.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于可读状态。
35.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于可写状态。
36.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器和滑窗寄存器;所述预设条件包括所述模式寄存器的值用于指示阻塞模式、且所述滑窗寄存器的值指向所述循环缓冲区中的目标已读地址,所述目标已读地址为所述循环缓冲区中的其中一个所述已读地址;其中,在所述阻塞模式下,所述循环缓冲区中从所述目标已读地址开始至写操作的地址之间的地址均处于可读状态。
37.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于不可读状态。
38.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于不可写状态。
39.在一种可能的实现方式中,所述方法,还包括:检测所述循环缓冲区中有效数据的数量;当所述有效数据的数量达到或超过高水位阈值时,生成上溢标志位并向所述主机设备发送所述上溢标志位。
40.在一种可能的实现方式中,所述方法,还包括:当所述有效数据的数量少于低水位阈值时,生成下溢标志位并向所述主机设备发送所述下溢标志位。
41.在一种可能的实现方式中,所述主机设备包括处理器cpu、处理器核和直接存储器访问dma中的一种或多种。
42.在一种可能的实现方式中,所述主机设备包括处理器cpu;所述方法,还包括:接收所述cpu发送的初始化配置指令,所述初始化配置指令包括所述循环缓冲区的初始地址、所述循环缓冲区的长度;响应于所述初始化配置指令,配置所述循环缓冲区。
43.第三方面,本技术提供一种半导体芯片,可包括上述第一方面中的任意一种实现方式所提供的存储装置。
44.第四方面,本技术提供一种半导体芯片,可包括:上述第一方面中的任意一种实现方式所提供的存储装置、耦合于所述存储装置的处理器或直接存储器访问dma。
45.第五方面,本技术提供一种片上系统soc芯片,该soc芯片包括上述第一方面中的
任意一种实现方式所提供的存储装置、耦合于所述存储装置的主机设备。该soc芯片,可以由芯片构成,也可以包含芯片和其他分立器件。
46.第六方面,本技术提供一种处理器,该处理器包括上述第一方面中的任意一种实现方式所提供的存储装置、耦合于所述存储装置的处理器核。该soc芯片,可以由芯片构成,也可以包含芯片和其他分立器件。
47.第七方面,本技术提供了一种芯片系统,该芯片系统包括上述第一方面中的任意一种实现方式所提供的存储装置。在一种可能的设计中,所述芯片系统还包括处理器,所述存储装置,用于保存所述处理器在运行过程中所必要或相关的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
48.第八方面,本技术提供一种存储器,该存储器具有实现上述第二方面中的任意一种数据存储方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
49.第九方面,本技术提供一种终端,该终端包括存储装置,该存储装置为上述第一方面中的任意一种实现方式所提供的存储装置。该终端还可以包括处理器或直接存储器访问dma,存储装置用于与处理器或直接存储器访问dma耦合,其保存终端必要的程序指令和数据。该终端还可以包括通信接口,用于该终端与其它设备或通信网络通信。
50.第十方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,该计算机程序被控制逻辑或控制器执行时实现上述第二方面中任意一项所述的数据存储流程。
51.第十一方面,本发明实施例提供了一种计算机程序,该计算机程序包括指令,当该计算机程序被控制逻辑或控制器执行时,使得控制逻辑或控制器可以执行上述第二方面中任意一项所述的数据存储流程。
附图说明
52.图1是本发明实施例提供的一种存储装置的结构示意图。
53.图2是本发明实施例提供的另一种存储装置的结构示意图。
54.图3是本发明实施例提供的又一种存储装置的结构示意图。
55.图4是本发明实施例提供的一种存储装置、处理器和直接存储器访问dma之间的连接关系的结构示意图。
56.图5为本发明实施例中提供的一种对循环缓冲区进行操作的流程示意图。
57.图6为本发明实施例提供的一种循环缓冲区首尾指针的示意图。
58.图7为本发明实施例提供的另一种循环缓冲区首尾指针的示意图。
59.图8是本发明实施例提供的一种数据存储方法的流程示意图。
具体实施方式
60.下面将结合本发明实施例中的附图,对本发明实施例进行描述。
61.本技术的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系
统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
62.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
63.在本说明书中使用的术语“部件”、“模块”、“系统”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件、或执行中的软件。例如,部件可以是但不限于,在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。通过图示,在计算设备上运行的应用和计算设备都可以是部件。一个或多个部件可驻留在进程和/或执行线程中,部件可位于一个计算机上和/或分布在2个或更多个计算机之间。此外,这些部件可从在上面存储有各种数据结构的各种计算机可读介质执行。部件可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一部件交互的二个部件的数据,例如通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
64.首先,对本技术中的部分用语进行解释说明,以便于本领域技术人员理解。
65.(1)循环缓冲区(circular buffer,cb),在本技术中cb是一种用于表示一个尺寸可配、头尾相连的缓冲区的数据结构,可适用于缓存数据流。
66.(2)寄存器(control and status register,csr),最常见的有“指令指针寄存器”,“标志寄存器”,“机器状态字”,“程序计数器”等等,各种处理器/微机上的叫法有些差别,而且控制的功能也不一定相同,但都是用于控制处理器的操作。需要说明的是,在本技术中,cbcsr则是指循环缓冲区寄存器(circular buffer control and status register),后续不再赘述。
67.(3)数据选择器(multiplexer),在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。
68.(4)多核处理器是一个芯片内含有两个或两个以上的“执行内核”。多核处理器在进行体系结构的技术研究时,比单核处理器,要面临更多的挑战,诸如核间通讯、存储器体系、低功耗、软硬件协调等。如何实现多核内核之间相互协作和通信,确保提高处理速度、提高芯片处理器性能,是核间通讯结构研究的主要内容。
69.(5)直接存储器访问(direct memory access,dma),是一种高速的数据传输操作,允许在外部设备和存储器之间,或者存储器与存储器之间直接读写数据,不需要cpu干预。整个数据传输在dma控制器控制下进行。cpu除了在数据传输开始和结束时做一些处理外,在传输过程中cpu可以进行其他的工作。这样,在大部分时间里,cpu和输入输出都处于并行操作。
70.(6)时钟周期,将一个机器周期分成若干个时间相等的时间段,这样的时间段称为节拍或者时钟周期,一个cpu时钟周期也称为一个节拍或一拍。
71.(7)计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。指令集(instruction set),就是cpu中用来计算和控制计算机系统的一套指令的集合,每款cpu在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是cpu的重要指标,指令集是提高微处理器效率的
最有效的工具之一。
72.(8)集成电路(integrated circuit,ic),是一种微型电子器件或部件。采用一定的工艺,把一个电路中所需的晶体管、电阻、电容和电感等元件及布线互连一起,制作在一小块或几小块半导体晶片或介质基片上,然后封装在一个管壳内,成为具有所需电路功能的微型结构;即ic芯片是将大量的微电子元器件(晶体管、电阻、电容等)形成的集成电路放在一块塑基上,做成一块芯片。
73.(9)静态随机存取存储器(staticrandom-accessmemory,sram)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取存储器(dram)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,sram储存的数据还是会消失(被称为volatile memory),这与在断电后还能储存资料的rom或闪存是不同的。
74.基于上述,下面对本发明实施例提供的存储装置以及相关设备进行描述。
75.本技术提供一种处理器。请参见图1-图3,图1-图3是本发明实施例提供的一些存储装置的结构示意图,该存储装置10可以位于处理器内部或者处理器外部,也可以位于任意一个电子设备中,如电脑、计算机、手机、平板、耳机、助听器、音响、智能穿戴设备等各类设备中。该存储装置10具体可以是芯片或芯片组或搭载有芯片或者芯片组的电路板。该芯片或芯片组或搭载有芯片或芯片组的电路板可在必要的软件驱动下工作。以下示例性示出本技术中的处理结构的几种实现方式。
76.请参见图1,图1是本发明实施例提供的一种存储装置的结构示意图,该存储装置10可以以循环存储的方式存储数据。如图1所示,存储装置10可以包括控制逻辑101、耦合于所述控制逻辑101的寄存器组102、和循环缓冲区103,该寄存器102包括一个或多个配置寄存器。其中,该循环缓冲区103最初为空并有预定的长度。例如,图1中所示是一个具有八个元素空间的循环缓冲区,其中图1中的环行表示“头尾相接”形成一个循环地址。可选的,存储装置10还可以包含其他功能模块。
77.在一种可能的实现方式中,请参见图2,图2是本发明实施例提供的另一种存储装置的结构示意图,该存储装置10中的寄存器组102可以包括起始地址寄存器_base(start address)、缓冲区长度寄存器len(length)、滑窗指针寄存器_ws(window start)、头指针寄存器_head、尾指针寄存器_tail、高水位阈值寄存器cbcsr_thhi(后续也可简称为thhi)、低水位阈值寄存器cbcsr_thlo(后续也可简称为thlo)、缓冲区标志cbcsr_flags(后续也可简称为flags)、模式寄存器mode。
78.在一种可能的实现方式中,请参见图3,图3是本发明实施例提供的又一种存储装置的结构示意图,该存储装置10中的寄存器组102同样包括起始地址寄存器cbcsr_base(start address)、缓冲区长度寄存器cbcsr_len、滑窗指针寄存器cbcsr_ws、头指针寄存器cbcsr_head、尾指针寄存器cbcsr_tail、高水位阈值寄存器cbcsr_thhi、低水位阈值寄存器cbcsr_thlo、缓冲区标志cbcsr_flags、模式寄存器cbcsr_mode。可以理解的是,为了便于后续描述,上述寄存器的名称也可以简称为去掉cbcsr后的名称,如滑窗指针寄存器cbcsr_ws可以简称为滑窗指针寄存器ws,以此类推,其它寄存器不再赘述。进一步地,控制逻辑101具体可以包括控制模块1和控制模块2、以及比较模块1和比较模块2。其中,控制模块1可以根据起始地址寄存器_base、缓冲区长度寄存器len、滑窗指针ws和模式寄存器mode的值,对头
指针寄存器_head进行控制;控制模块1可以根据起始地址寄存器_base、缓冲区长度寄存器len、滑窗指针ws和模式寄存器mode的值,对尾指针寄存器_tail进行控制;而比较模块1则可以根据高水位阈值寄存器cbcsr_thhi、头指针寄存器_head和尾指针寄存器_tail的值生成缓冲区标志cbcsr_flags;而比较模块2则可以根据低水位阈值寄存器cbcsr_thlo、头指针寄存器_head和尾指针寄存器_tail的值生成缓冲区标志cbcsr_flags;最终,循环缓冲区103根据头指针寄存器_head和尾指针寄存器_tail输出寄存器内容或者是缓冲区内容,而缓冲区标志cbcsr_flags则可以直接向主机设备输出该存储装置10的标志位。
79.在一种可能的实现方式中,请参见图4,图4是本发明实施例提供的一种存储装置、处理器和直接存储器访问dma之间的连接关系的结构示意图。该存储装置(cbuf)10与主机设备如处理器cpu、处理器核(core)20或直接访问存储器(dma)30通过处理器片上网络(cpunoc)总线架构形成耦合关系,可选的,静态随机存取存储器sram也可以通过cpu noc耦合到该系统中。存储装置(cbuf)10可通过cpu noc接收这些cpu、cpu核或者是dma发送的读(rd)写(wr)指令,并由存储装置(cbuf)10中的读写请求多路选择器(multiplexer,mux)来维护,以顺序的发送对cbuf10的读写请求,从而进行数据的读操作或者是写操作。
80.需要说明的是,图1-图4中的存储装置内部的各个功能模块之间可通过处理器内部的总线方式或其他连接方式通信,图中所示意的连接关系并不对其之间的连接关系构成限制。后续实施例中将对存储装置中各个功能模块进行进一步说明,此处不作详述。可以理解的是,上述图1-图4中存储装置的结构只是本发明实施例提供的一些示例性的实施方式,本发明实施例中的存储装置的结构包括但不仅限于以上实现方式。
81.基于上述图1-图4中存储装置10多种可能的实现结构,下面对存储装置10中各个部件进行说明。
82.控制逻辑101,也可以称之为控制器,是用于控制整个存储装置10的工作,包括分析指令并发出相应的控制信号,从而协调存储装置10中的各个部件按照指令的功能要求协调工作。例如,其主要功能具体可包括读寄存器指令、写寄存器指令、读循环缓冲区指令、写循环缓冲区指令的分析等。又例如,控制逻辑101可以根据寄存器组102中各个寄存器的值,来决定从循环缓冲区103的哪些地址进行数据的读操作、或者写操作等。例如,如上述图3中所示控制逻辑101可包括控制模块1、控制模块2、比较模块1和比较模块2。
83.寄存器组102,是存储装置10中暂时存放数据的地方,例如暂存着等待处理的数据、或已经处理过的数据。在本发明实施例中,寄存器组102是存储装置10中多个寄存器组成的阵列,可以由快速的静态随机读写存储器(sram)实现,此种ram具有专门的读端口与写端口,可以多路并发访问不同的寄存器。
84.例如,如上述图2或图3中所示,寄存器组102具体可以包括如下寄存器中的部分或全部:1、cbcsr_base(start address):用于存储circular buffer的起始地址;2、cbcsr_len:用于存储循环缓冲区(circular buffer)的长度;3、cbcsr_ws:滑窗(window start)的指针,即用于存储滑窗操作的起始地址。可以配合重置头指针。每次写这个寄存器时,头指针被重置,内容和window start一样。
85.4、cbcsr_head:头指针,用于存储读操作的地址,每次读都是从头指针开始读数据,读数据的大小在接口信号中体现;
5、cbcsr_tail:尾指针,用于存储写操作的地址,每次写都是从头指针开始读数据,写数据的大小在接口信号中体现;6、cbcsr_thhi:用于存储高水位阈值,当循环缓冲区(circular buffer)中的有效数据达到这个值时,可以发请求给cpu,cpu可以开始读;7、cbcsr_thlo:用于存储低水位阈值,当循环缓冲区(circular buffer)中的有效数据达到这个值时,可以发请求给dma,dma可以开始写流程;8、cbcsr_flags:用于存储循环缓冲区(circular buffer)的标志位。其中的标志位可以包括如下标志位:(1)overflow:上溢标志位,当循环缓冲区(circular buffer)已经满了,但是依然有写请求,发送上溢标识;(2)underflow:下溢标志位,当循环缓冲区(circular buffer)已空,但是依然有读请求,发送下溢标识;(3)almost full:超过了高水位(cbcsr_thlo)标志位;(4)almost empty:低于低水位(cbcsr_thhi)标志位;9、cbcsr_mode:模式寄存器,用于存储循环缓冲区(circular buffer)当前的工作模式。根据是否需要判断下溢,循环缓冲区(circular buffer)的工作模式分为两种,即循环缓冲区非阻塞模式cb_non_blocking(0)、循环缓冲区阻塞模式cb_blocking(1),其中,(1)cb_non_blocking(0):

读数据时,循环缓冲区(circular buffer)的读操作不会被tail阻塞。如果header读已经超过了tail,即circular buffer已经空了,但当前还是有读请求,则可以向主机侧发出underflow标志位,同时给出相应地址的数据,也即是说,读的操作可以继续。underflow给到主机侧(如cpu)后,cpu可以mask、也可以响应。
86.②
写数据时,循环缓冲区(circular buffer)的写操作不会被header阻塞。如果tail写已经超过了ws,即circular buffer已经满了,但当前还是有写请求,则可以向主机侧发出overflow标志位,但是可以不给出写相应地址,也即是说,写的操作可以不继续。overflow给到主机(如cpu)后,cpu可以mask、也可以响应。
87.(2)cb_blocking(1):

读数据时,需要判断下溢,即循环缓冲区(circular buffer)的读操作不能超过tail的位置,会被tail阻塞。当阻塞超过一定的时间(timeout)时,给出underflow标志位,此时,circular buffer会等待进一步的处理。underflow给到主机侧(如cpu)后,cpu可以mask、也可以响应。
88.②
写数据时,需要判断上溢,即circular buffer的写操作不能超过ws的位置,会被ws阻塞。此时,circular buffer可以等待进一步的处理。当阻塞超过一定的时间(timeout)时,则给出overflow标志位,overflow给到主机侧(如cpu)后,cpu可以mask、也可以响应。
89.循环缓冲区103,环形缓冲区的存储空间在逻辑上首位相连,在物理存储上是一维的长度可配置的连续线性结构。如图4所示,在应用中,环形缓冲区的大小尺寸可以进行配置。通过定义读取指针和读写指针来分别指向当前可读和可写数据的位置;初始状态下,读写指针指向同一个位置,假设当前环形缓冲区中存储的数据个数n为0;当写入一个数据,n
1写指针移动到下一个可写的位置;当读取一个数据,n-1读指针移到下一个可读的位置;当写入数据的个数达到缓冲区最大容量时,表示环形缓冲区被写满,读指针和写指针指向同一个位置。而在申请中的实施例中,循环缓冲区103除了支持上述基本功能,还支持数据的复用、读空、写满等功能。例如,缓冲区中某个地址的数据已经被读取,且还未写入,仍然可以处于可读状态;一些空的地址当前还未有数据写入,也可以进行读取;又例如一些已经被写入数据但还未被读取的地址,仍然可以处于可写状态,即可以覆盖掉尚未读取的数据(覆盖写入)。
90.即基于循环缓冲区的读指针和写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读写用户访问环形缓冲区,那么则需要添加互斥保护机制来确保多个用户互斥访问环形缓冲区。
91.基于上述存储装置的软硬件架构,在本发明实施例中,该存储装置10具体所实现的功能可包括如下:该存储装置10中的控制逻辑101用于:接收所述主机设备发送的读数据指令,所述读数据指令包括待读取的目标数据的大小信息;根据所述待读取的目标数据的大小信息和所述寄存器组102中的至少一个配置寄存器的值,确定在所述循环缓冲区103中所述目标数据对应的一个或多个目标地址;其中,当所述至少一个配置寄存器的值满足预设条件时,所述循环缓冲区中的部分或全部已读地址处于可读状态,所述已读地址为所存储的数据被至少读取过一次的地址;控制从所述循环缓冲区的所述一个或多个目标地址读取所述目标数据。
92.由于在现有技术中,环形缓冲器只能实现对单个数据的先进先出,也就是当读指针指向的地址的数据被读取后,读指针必须移位,来保证先进先出的数据结构。若在一些应用场景中某些被读取过的数据可能在后续需要复用,那么现有技术中的上述先进先出模式则无法实现数据复用。本发明实施例,提供了一种可重复读取数据的存储装置,具体包括针对硬件以及软件的设计,其中,从硬件角度,是通过在存储装置中增加一个或多个配置寄存器用来存储循环缓冲区的相关配置值;从软件角度,基于上述增加的配置寄存器,使得该存储装置在接收到主机设备侧发送过来的读数据指令后,根据待读取数据的相关大小信息,以及结合至少一个配置寄存器中的值,来确定待读取数据在循环缓冲区中所对应的具体地址,从而最终从相应地址处读取目标数据。其中,在确定目标地址的过程中,由于依据了至少一个配置寄存器的值,且本发明实施例进一步设计了当该配置寄存器的值满足一定预设条件的情况下,则可以将循环缓冲区中的部分或者全部已读地址配置为处于可读状态(也即是,在该可读状态下,可以重复读取该循环缓冲区中的部分或全部已读地址中的内容),因此,当待读取的目标数据对应的一个或多个目标地址中包含上述处于可读状态的地址时,则可以实现在环形缓冲区中进行数据复用(即重复读取)的功能,从而实现了在一些应用场景中复用已经读取过的数据的目的。综上,本技术中的存储装置既保留了现有技术中的循环缓冲区的功能,又可以支持数据复用的功能。
93.在一种可能的实现方式中,所述至少一个配置寄存器包括滑窗寄存器和读指针寄
存器;所述滑窗寄存器的值为滑窗值,所述读指针寄存器的值为读指针值;所述目标数据的大小信息包括所述待读取的单个数据大小、读取间隔以及总数据大小中的一种或多种;所述控制逻辑,具体用于:当所述读指针值与所述滑窗值不同时,将所述读指针值更新为所述滑窗值;基于更新后的所述读指针值和所述目标数据的大小信息,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址。例如有些数据,被读取一次之后,后续可能还需要重新读:滑窗指针ws重新设置读指针,使得可以进行滑窗的操作。比如第一次读0-4,第二次读1-5,如果是现有技术则无法实现读指针往回读,而本发明实施例则可以将读指针设计成可以往回读,当然本发明实施例中的读指针也可以实现其向另一个方向移动,即往前往后移动都可以。本发明实施例中,当参与确定目标地址的至少一个配置寄存器中包括滑窗寄存器时,则该滑窗寄存器的作用是用于重置读指针,也即是本发明实施例支持通过滑窗寄存器中的值来重置读指针的值,当发现读指针寄存器的值与滑窗寄存器的值不同时,则需要基于滑窗寄存器的值更新读指针寄存器的值,更新后,则可以基于该更新后的读指针的值作为起始地址,并根据读数据指令中的关于目标数据的大小信息,最终确定待读取的目标数据对应的一个或多个目标地址,从而使得可从该一个或多个目标地址读取该目标数据。
94.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器;所述预设条件包括所述模式寄存器的值用于指示非阻塞模式;其中,在所述非阻塞模式下,所述循环缓冲区中的所述已读地址均处于可读状态。本发明实施例中,用于确定待读取数据对应的一个或多个地址的配置寄存器,至少包括模式寄存器,且相应的预设条件包括该模式寄存器当前的值指向非阻塞模式。即本发明实施例,通过设计在非阻塞模式下,循环缓冲区中的已读地址均可处于可读状态,也即是循环缓冲区中所存储的数据被至少读取过一次的地址均处于可重新读取的状态,如此一来,当待读取的数据所对应的一个或多个地址中包含了上述处于可读状态的地址时,则可以实现数据复用功能。
95.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于可读状态。本发明实施例中,还进一步设计了在上述非阻塞模式下,循环缓冲区中的除了已读地址均可处于可读状态,且循环缓冲区中的暂未被写入数据的地址也处于可读状态,也即是循环缓冲区中当前为空的地址也处于可读状态。也即是在该非阻塞模式下,读操作不受循环缓冲区空的限制。本发明实施例中的循环缓冲区不仅支持数据复用功能,而且还支持读空的地址,以灵活地满足各类场景。
96.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于可写状态。本发明实施例中,还进一步设计了在上述非阻塞模式下,循环缓冲区中的除了已读地址均可处于可读状态,还可以将已经被写入数据但当前还未被读取的地址配置为可写状态(也即是,在该可写状态下,可以向该循环缓冲区中已经被写入数据但还未被读取过的地址中重新写入内容),从而实现可以覆盖掉之前写入的数据,支持数据覆盖的功能。也即是在该非阻塞模式下,写操作不受循环缓冲区满的限制。本发明实施例中的循环缓冲区不仅支持数据复用功能,还可以支持数据覆盖写入功能,以灵活地满足各类场景。
97.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器和滑窗寄存器;所述预设条件包括所述模式寄存器的值用于指示阻塞模式、且所述滑窗寄存器的值指
向所述循环缓冲区中的目标已读地址,所述目标已读地址为所述循环缓冲区中的其中一个所述已读地址;其中,在所述阻塞模式下,所述循环缓冲区中从所述目标已读地址开始至写操作的地址之间的地址均处于可读状态。本发明实施例中,用于确定待读取数据对应的一个或多个地址的配置寄存器,至少包括模式寄存器和滑窗寄存器,且相应的预设条件包括:该模式寄存器当前的值指向阻塞模式、以及滑窗寄存器的值指向所述循环缓冲区中的某个已读地址。即本发明实施例,通过设计在阻塞模式下,利用滑窗寄存器的值指向循环缓冲区中的某个已读地址的方式,来实现循环缓冲区中的部分地址处于可读状态的功能。也即是循环缓冲区中,从滑窗寄存器所指向的已读地址开始至写操作的地址之间的地址,又重新处于可读取的状态。且在该情况下,由于读指针需要按照滑窗指针的所指向的地址进行重置,由于读指针是从滑窗寄存器所指向的地址开始读取数据的,如此一来,当滑窗寄存器的值是指向已读地址的话,则显然读指针会从已经被至少读取过一次的地址开始读起,也即是实现了数据复用功能。
98.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于不可读状态。本发明实施例中,还进一步设计了在上述阻塞模式下,循环缓冲区中的暂未被写入数据的地址处于不可读状态(也即是,在该不可读状态下,无法读取该循环缓冲区中的暂未被写入数据的地址)。换句话说,当循环缓冲区中的某个地址中还未被写入数据的地址,即空地址,是不能被读取的。也即是在该阻塞模式下,读操作是会受到循环缓冲区空的限制的。
99.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于不可写状态。本发明实施例中,还进一步设计了在上述阻塞模式下,循环缓冲区中已经被写入数据但还未被读取过的地址处于不可写状态(也即是,在该不可写状态下,无法向该循环缓冲区中的已经被写入数据但还未被读取过的地址重复写入数据)。换句话说,当循环缓冲区中的某个地址中已经被写入数据但是当前还未被读取过的地址,则处于不可写状态,即无法覆盖已经写入但还未读取的地址。也即是在该阻塞模式下,写操作是会受到循环缓冲区满的限制的。
100.在一种可能的实现方式中,所述控制逻辑,还用于:检测所述循环缓冲区中有效数据的数量;当所述有效数据的数量达到或超过高水位阈值时,生成上溢标志位并向所述主机设备发送所述上溢标志位。本发明实施例中,通过检测循环缓冲区中有效数据的数量,若当前存储的有效数据的数量达到或超过预设的高水位阈值时,则生成上溢标志位并向所述主机设备发送所述上溢标志位,以便于后续主机设备根据该上溢标志位,来决定是否还要继续向循环缓冲区中写入数据,或者说是等一段时间再向循环缓冲区中写入数据。
101.在一种可能的实现方式中,所述控制逻辑,还用于:当所述有效数据的数量少于低水位阈值时,生成下溢标志位并向所述主机设备发送所述下溢标志位。本发明实施例中,通过检测循环缓冲区中有效数据的数量,若当前存储的有效数据的数量少于预设的低水位阈值时,则生成下溢标志位并向所述主机设备发送所述下溢标志位,以便于后续主机设备根据该下溢标志位,来决定是否还要继续从循环缓冲区中读取数据,或者说是等一段时间再从循环缓冲区中读取数据。
102.在一种可能的实现方式中,所述主机设备包括处理器cpu、处理器核和直接存储器访问dma中的一种或多种。本发明实施例中的存储装置可以与各类主机设备耦合,接收各类
主机设备的读/写操作指令,其中主机设备可以包括处理器(central processing unit,cpu)、处理器核、直接存储器访问(direct memory access,dma)等。例如,当主机设备为cpu时,存储装置可以作为cpu外部的内存(memory)与其耦合;当主机设备为处理器核时,则本技术中的存储装置可以在cpu内部与处理器核耦合,作为处理器中的缓存,也可以在处理器核的内部,作为处理器核内部的缓存。也即是本发明实施例中对存储装置与cpu之间的关系不作具体限定。
103.在一种可能的实现方式中,所述主机设备包括处理器cpu;所述控制逻辑,还用于:接收所述cpu发送的初始化配置指令,所述初始化配置指令包括所述循环缓冲区的初始地址、所述循环缓冲区的长度;响应于所述初始化配置指令,配置所述循环缓冲区。例如,初始配置包括循环缓冲区103在内存中实际开始位置、在内存中实际结束位置,也可以用缓冲区长度代替;以及存储在缓冲区中的有效数据的开始位置(读指针);以及存储在缓冲区中的有效数据的结尾位置(写指针)等。本发明实施例中,在初始状态下可以通过主机设备中的处理器来对循环缓冲区的一些初始参数进行配置,例如循环缓冲区的初始地址、长度等等,则循环缓冲区中的控制逻辑可以根据这些指令读循环缓冲区进行配置,以满足不同场景下对循环缓冲区的不同需求。
104.为了便于理解本技术,下面基于上述图1-图4中的存储装置10的具体结构和功能,并结合具体示例,对本技术中的存储装置10在进行读数据操作或者是写数据操作的过程进行具体描述,如图5所示,图5为本发明实施例中提供的一种对循环缓冲区进行操作的流程示意图,具体可包括s1、s2和s3。其中,s1:初始化配置寄存器cbcsr_base、cbcsr_len、cbcsr_thhi、cbcsr_thlo、cbcsr_mode、cbcsr_ws。通过寄存器读写使能。
105.s2:根据初始化的结果,计算配置寄存器overflow、underflow、almost full、almost empty、cbcsr_head、cbcsr_tail的值。
106.s3:对circular buffer进行读写操作。设置循环缓冲区(circular buffer)读写地址,只要是读这个地址,就是读circular buffer,只要写这个地址,就是写circular buffer。读操作用vector的load指令。写操作用vector的store指令。
107.具体地,可以通过配置寄存器指令来修改cbcsr_ws的值,指令中的值是offset,要更改的cbcsr_ws在原有cbcsr_ws的基础上加上offset。其中,offset是无符号数。
108.其中,当循环缓冲区(circular buffer)的功能结束后,即不需要循环缓冲区(circular buffer)的时候,只需不再读写循环缓冲区(circular buffer)的读写地址。
109.开始设置一个circular buffer时,先初始化配置寄存器cbcsr_base、cbcsr_len、cbcsr_ws、cbcsr_thlo、cbcsr_thhi、cbcsr_mode。同时配置寄存器cbcsr_flags、cbcsr_head、cbcsr_tail通过计算得到。此时设置cbcsr_head = cbcsr_tail = cbcsr_ws。
110.基本操作:push—circular buffer写操作,push是写入循环缓冲区(circular buffer)的尾部(cbcsr_tail)。写入一个byte的数据后,cbcsr_tail 。如果circular buffer已满,即cbcsr_tail追上cbcsr_head(cbcsr_tail 1 == cbcsr_head)。设置overflow。vector写操作通过vstcb(n)in0.v/vstcb(n)in1.v来写。scalar通过判断地址空间是否在circular buffer内,用写指令来写。
111.peek—circular buffer读操作,peek操作是以cbcsr_head为基地址。根据len的值,读len个byte。一次请求读数据的个数不会超过256bit。根据cbcsr_mode的值,确定是否在读操作时判断下溢。该操作只是对header pointer进行移位,并没有真正的弹出操作。直到push操作用新数据覆盖该数据之前,原来的数据还是在的。(例如,目前peek操作可以是连续读数据的,还没有带offset的读数据)。vector读操作通过vldcb(n)in0.v/vldcb(n)in1.v来读。scalar通过判断地址空间是否在circular buffer内,用读指令来读。
112.pop—circular buffer重置cbcsr_ws和cb,将csr_head重置,使cbcsr_head==cbcsr_ws。通过scalar写寄存器指令改写cbcsr_ws,同时对cbcsr_head进行重置。
113.空满判断:满的判断依据cbcsr_tail和cbcsr_ws。如果cbcsr_tail追上cbcsr_ws,circular buffer为满。空的判断依据cbcsr_tail和cbcsr_head。如果cbcsr_head追上cbcsr_tail,circular buffer为空。
114.工作模式:cb_blocking:读操作,需要判断circular buffer是否为空。以cbcsr_head为基地址,从循环缓冲区(circular buffer)的有效数据中读len个byte。该模式需要判断循环缓冲区(circular buffer)是否为空。如果循环缓冲区(circular buffer)中有效数据不能满足一次peek所需要的数据(len),则上报一个下溢标识(underflow),如图6所示,图6为本发明实施例提供的一种循环缓冲区首尾指针的示意图。其中,cheader是指头指针即读操作的地址,ctail是指尾指针即写操作的地址,灰色部分表示有可用数据的地址,白色部分表示目前没有数据的地址。例如,针对图6中的d来说,在该阻塞模式下,此时,循环缓冲区(circular buffer)进入等待状态,直到cpu把underflow清零。标识可以被mask。
115.cb_blocking:写操作,需要判断循环缓冲区(circular buffer)是否为满。以cbcsr_tail为基地址,向循环缓冲区(circular buffer)中写len个byte。该模式需要判断循环缓冲区(circular buffer)是否为满。如果循环缓冲区(circular buffer)中没有足够的空间写入所需要的数据(len),则上报一个上溢标识(overflow)。此时,circular buffer进入等待状态,直到cpu把overflow清零。标识可以被mask。
116.cb_non_blocking:读操作,以cbcsr_head为基地址,从循环缓冲区(circular buffer)中读len个byte。该模式不会被cbcsr_tail阻塞。如图7所示,图7为本发明实施例提供的另一种循环缓冲区首尾指针的示意图,在该图7中,cheader是指头指针即读操作的地址,ctail是指尾指针即写操作的地址,灰色部分表示有可用数据的地址,在该非阻塞模式下,每次peek操作都以cbcsr_head为基地址,顺序的读取循环缓冲区(circular buffer)的len个byte。当循环缓冲区(circular buffer)的有效数据不够len个byte时,即循环缓冲区(circular buffer)已经读空时,上报一个下溢标识(underflow),同时读取该数据。标识可以被mask。
117.cb_non_blocking:写操作,以cbcsr_tail为基地址,向循环缓冲区(circular buffer)中写len个byte。该模式不会被cbcsr_ws阻塞。每次push操作都以cbcsr_tail为基地址,顺序的将数据
写入循环缓冲区(circular buffer)的len个byte。当circular buf初始化fer的无效数据空间不够len个byte时,即循环缓冲区(circular buffer)已经写满时,上报一个上溢标识(overflow),同时不写入该数据。标识可以被mask。
118.请参见图8,图8是本发明实施例提供的一种数据存储方法的流程示意图,该数据存储方法应用于存储装置,该存储装置包括:寄存器组和循环缓冲区;所述寄存器组包括一个或多个配置寄存器;所述存储装置与主机设备耦合;且该数据存储方法适用于上述图1-图4中的任意一种存储装置以及包含所述存储装置的设备(如处理器、存储器、手机、电脑、智能耳机、智能穿戴设备、服务器等)。该方法可以包括以下步骤s201-步骤s203,其中,步骤s201:接收所述主机设备发送的读数据指令,所述读数据指令包括待读取的目标数据的大小信息;步骤s202:根据所述待读取的目标数据的大小信息和所述寄存器组中的至少一个配置寄存器的值,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址;其中,当所述至少一个配置寄存器的值满足预设条件时,所述循环缓冲区中的部分或全部已读地址处于可读状态,所述已读地址为所存储的数据被至少读取过一次的地址;步骤s203:控制从所述循环缓冲区的所述一个或多个目标地址读取所述目标数据。
119.在一种可能的实现方式中,所述至少一个配置寄存器包括滑窗寄存器和读指针寄存器;所述滑窗寄存器的值为滑窗值,所述读指针寄存器的值为读指针值;所述目标数据的大小信息包括所述待读取的单个数据大小、读取间隔以及总数据大小中的一种或多种;所述根据所述待读取的目标数据的大小信息和所述寄存器组中的至少一个配置寄存器的值,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址,包括:当所述读指针值与所述滑窗值不同时,将所述读指针值更新为所述滑窗值;基于更新后的所述读指针值和所述目标数据的大小信息,确定在所述循环缓冲区中所述目标数据对应的一个或多个目标地址。
120.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器;所述预设条件包括所述模式寄存器的值用于指示非阻塞模式;其中,在所述非阻塞模式下,所述循环缓冲区中的所述已读地址均处于可读状态。
121.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于可读状态。
122.在一种可能的实现方式中,在所述非阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于可写状态。
123.在一种可能的实现方式中,所述至少一个配置寄存器包括模式寄存器和滑窗寄存器;所述预设条件包括所述模式寄存器的值用于指示阻塞模式、且所述滑窗寄存器的值指向所述循环缓冲区中的目标已读地址,所述目标已读地址为所述循环缓冲区中的其中一个所述已读地址;其中,在所述阻塞模式下,所述循环缓冲区中从所述目标已读地址开始至写操作的地址之间的地址均处于可读状态。
124.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的暂未被写入数据的地址处于不可读状态。
125.在一种可能的实现方式中,在所述阻塞模式下,所述循环缓冲区中的已经被写入数据但还未被读取过的地址处于不可写状态。
126.在一种可能的实现方式中,所述方法,还包括:检测所述循环缓冲区中有效数据的数量;当所述有效数据的数量达到或超过高水位阈值时,生成上溢标志位并向所述主机设备发送所述上溢标志位。
127.在一种可能的实现方式中,所述方法,还包括:当所述有效数据的数量少于低水位阈值时,生成下溢标志位并向所述主机设备发送所述下溢标志位。
128.在一种可能的实现方式中,所述主机设备包括处理器cpu、处理器核、和直接存储器访问dma中的一种或多种。
129.在一种可能的实现方式中,所述主机设备包括处理器cpu;所述方法,还包括:接收所述cpu发送的初始化配置指令,所述初始化配置指令包括所述循环缓冲区的初始地址、所述循环缓冲区的长度;响应于所述初始化配置指令,配置所述循环缓冲区。
130.需要说明的是,本发明实施例中所描述的数据存储方法的具体流程,可参见上述图1-图4中所述的发明实施例中的相关描述,此处不再赘述。
131.本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质可存储有程序,该程序被控制逻辑或控制器执行时,使得所述控制逻辑或控制器可以执行上述方法实施例中记载的任意一种的部分或全部步骤。
132.本发明实施例还提供一种计算机程序,该计算机程序包括指令,当该计算机程序被控制逻辑或控制器执行时,使得所述控制逻辑或控制器可以执行上述方法实施例中记载的任意一种的部分或全部步骤。
133.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
134.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可能可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本技术所必须的。
135.在本技术所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
136.上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
137.另外,在本技术各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
138.上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务器或者网络设备等,具体可以是计算机设备中的处理器)执行本技术各个实施例上述方法的全部或部分步骤。其中,而前述的存储介质可包括:u盘、移动硬盘、磁碟、光盘、只读存储器(read-only memory,缩写:rom)或者随机存取存储器(random access memory,缩写:ram)等各种可以存储程序代码的介质。
139.以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
转载请注明原文地址:https://win.8miu.com/read-950075.html

最新回复(0)