链表初始化装置、方法、系统、计算机设备和存储介质转让专利

申请号 : CN202210914094.8

文献号 : CN114968130B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高崇兴

申请人 : 深圳云豹智能有限公司

摘要 :

本申请涉及一种链表初始化装置、方法、系统、计算机设备和存储介质。所述装置包括:控制器、寄存器和至少一个链表;其中,寄存器,用于存储至少一个链表的状态值,状态值用于表示对应的链表是否已经进行初始化;控制器,用于接收写命令和写数据,并解析写命令获得对应的写地址,根据写地址确定对应的目标链表,从寄存器中读取目标链表的状态值,根据目标链表的状态值确定目标链表是否已经进行初始化,在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化。采用本装置,能够有效降低芯片功耗。

权利要求 :

1.一种链表初始化装置,其特征在于,所述装置包括:控制器、寄存器和至少一个链表;

其中,

所述寄存器,用于存储所述至少一个链表的状态值,所述状态值用于表示对应的链表未进行初始化;

所述控制器,用于接收写命令和写数据,并解析所述写命令获得对应的写地址,根据所述写地址确定对应的目标链表,从所述寄存器中读取所述目标链表的状态值,在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化;所述初始化是指将所述目标链表中的每个节点所存储的地址信息更新为下一个节点的地址信息。

2.根据权利要求1所述的装置,其特征在于,所述目标链表包括数据存储器和地址存储器,所述控制器具体用于:在所述目标链表未进行初始化的情况下,根据所述写数据中的当前写数据的写地址,将所述当前写数据写入所述数据存储器中的对应位置,并在所述地址存储器中写入所述当前写数据的下一写数据的写地址,所述下一写数据的写地址为所述当前写数据的写地址加

1,将所述下一写数据写入所述数据存储器中的对应位置,直至完成所述写数据中的最后一个写数据的写操作。

3.根据权利要求1所述的装置,其特征在于,所述控制器,还用于在根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化之后,更新所述寄存器中所述目标链表的状态值,所述目标链表的更新后的状态值用于表示所述目标链表已经进行初始化。

4.根据权利要求1所述的装置,其特征在于,所述控制器,还用于接收复位命令,响应于所述复位命令,控制完成自身的复位操作、控制完成所述链表的复位操作以及复位所述寄存器中保存的所述链表的状态值;所述链表的复位后的状态值用于表示所述链表未进行初始化。

5.一种应用于如权利要求1至4中任一项所述的链表初始化装置的链表初始化方法,其特征在于,所述方法包括:接收写命令和写数据,并解析所述写命令获得对应的写地址;

根据所述写地址确定对应的目标链表,从寄存器中读取所述目标链表的状态值,根据所述目标链表的状态值确定所述目标链表未进行初始化;

在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化;所述初始化是指将所述目标链表中的每个节点所存储的地址信息更新为下一个节点的地址信息。

6.根据权利要求5所述的方法,其特征在于,所述在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化,具体包括:在所述目标链表未进行初始化的情况下,根据所述写数据中的当前写数据的写地址,将所述当前写数据写入数据存储器中的对应位置,并在地址存储器中写入所述当前写数据的下一写数据的写地址,所述下一写数据的写地址为所述当前写数据的写地址加1;

将所述下一写数据写入所述数据存储器中的对应位置,直至完成所述写数据中的最后一个写数据的写操作。

7.根据权利要求6所述的方法,其特征在于,所述方法还包括:

在根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化之后,更新所述寄存器中所述目标链表的状态值;所述目标链表的更新后的状态值用于表示所述目标链表已经进行初始化。

8.一种链表初始化系统,其特征在于,所述系统包括:输入模块以及如权利要求1至4中任一项所述的链表初始化装置;

所述输入模块,用于向所述链表初始化装置输入写命令和写数据。

9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求5至7中任一项所述的方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求5至7中任一项所述的方法的步骤。

说明书 :

链表初始化装置、方法、系统、计算机设备和存储介质

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种链表初始化装置、方法、系统、计算机设备、存储介质和计算机程序产品。

背景技术

[0002] 链表是指物理存储单元上非连续和非顺序的存储结构。现有技术中,在对链表进行初始化之后,才能对链表进行使用。如图1所示,首先,软件控制模块向硬件控制模块发送rst信号(复位信号),硬件控制模块根据接收到的rst信号,控制硬件控制模块和链表完成复位操作;在复位完成后,软件控制模块向硬件控制模块发送init信号(初始化信号),硬件控制模块根据接收到的init信号,对链表进行初始化,在链表初始化完成之后,硬件控制模块向软件控制模块发送done信号(初始化完成的信号),软件控制模块根据接收到的done信号,向输入模块发送命令;输入模块响应于软件控制模块发送的命令,将接收到的写命令和对应的写数据输入给硬件控制模块,硬件控制模块根据接收到的命令,对链表进行对应的操作。具体地,在链表memory中,其复位释放后,如果检测到链表memory的ini_start(初始化信号)的上升沿,则链表memory进行初始化,向每个地址写入初始化值,执行完成之后会输出initial_done信号(初始化完成的信号),initial_done的电平一直为高电平,直到重新检测到ini_start的上升沿。
[0003] 由此可见,在芯片有很多链表memory的情况下,会同时有很多memory进行初始化,会产生很多逻辑同时跳变,导致芯片的某些区域的电压下降很多,从而影响芯片的工作。此外,由于软件过度参与链表的初始化过程,从而增加了软件的控制逻辑,导致链表的初始化时间较长,从而造成芯片功耗较大。

发明内容

[0004] 基于此,有必要针对上述技术问题,提供一种能够降低芯片功耗的链表初始化装置、方法、系统、计算机设备、计算机可读存储介质和计算机程序产品。
[0005] 第一方面,本申请提供了一种链表初始化装置。所述装置包括:控制器、寄存器和至少一个链表;其中,
[0006] 所述寄存器,用于存储所述至少一个链表的状态值,所述状态值用于表示对应的链表未进行初始化;
[0007] 所述控制器,用于接收写命令和写数据,并解析所述写命令获得对应的写地址,根据所述写地址确定对应的目标链表,从所述寄存器中读取所述目标链表的状态值,在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化。
[0008] 优选地,所述目标链表包括数据存储器和地址存储器,所述控制器具体用于:
[0009] 在所述目标链表未进行初始化的情况下,根据所述写数据中的当前写数据的写地址,将所述当前写数据写入所述数据存储器中的对应位置,并在所述地址存储器中写入所述当前写数据的下一写数据的写地址,所述下一写数据的写地址为所述当前写数据的写地址加1,将所述下一写数据写入所述数据存储器中的对应位置,直至完成所述写数据中的最后一个写数据的写操作。
[0010] 优选地,所述控制器,还用于在根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化之后,更新所述寄存器中所述目标链表的状态值,所述目标链表的更新后的状态值用于表示所述目标链表已经进行初始化。
[0011] 优选地,所述控制器,还用于接收复位命令,响应于所述复位命令,控制完成自身的复位操作、控制完成所述链表的复位操作以及复位所述寄存器中保存的所述链表的状态值;所述链表的复位后的状态值用于表示所述链表未进行初始化。
[0012] 本发明第二方面提供一种应用于前述的链表初始化装置的链表初始化方法,所述方法包括:
[0013] 接收写命令和写数据,并解析所述写命令获得对应的写地址;
[0014] 根据所述写地址确定对应的目标链表,从寄存器中读取所述目标链表的状态值,根据所述目标链表的状态值确定所述目标链表未进行初始化;
[0015] 在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化。
[0016] 优选地,所述在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化,具体包括:
[0017] 在所述目标链表未进行初始化的情况下,根据所述写数据中的当前写数据的写地址,将所述当前写数据写入数据存储器中的对应位置,并在所述地址存储器中写入所述当前写数据的下一写数据的写地址,所述下一写数据的写地址为所述当前写数据的写地址加1;
[0018] 将所述下一写数据写入所述数据存储器中的对应位置,直至完成所述写数据中的最后一个写数据的写操作。
[0019] 优选地,所述方法还包括:
[0020] 在根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化之后,更新所述寄存器中所述目标链表的状态值;所述目标链表的更新后的状态值用于表示所述目标链表已经进行初始化。
[0021] 第四方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0022] 接收写命令和写数据,并解析所述写命令获得对应的写地址;
[0023] 根据所述写地址确定对应的目标链表,从寄存器中读取所述目标链表的状态值,根据所述目标链表的状态值确定所述目标链表是否已经进行初始化;
[0024] 在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化,在所述目标链表已经进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置。
[0025] 第五方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
[0026] 接收写命令和写数据,并解析所述写命令获得对应的写地址;
[0027] 根据所述写地址确定对应的目标链表,从寄存器中读取所述目标链表的状态值,根据所述目标链表的状态值确定所述目标链表是否已经进行初始化;
[0028] 在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化,在所述目标链表已经进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置。
[0029] 第六方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
[0030] 接收写命令和写数据,并解析所述写命令获得对应的写地址;
[0031] 根据所述写地址确定对应的目标链表,从寄存器中读取所述目标链表的状态值,根据所述目标链表的状态值确定所述目标链表是否已经进行初始化;
[0032] 在所述目标链表未进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置,并同时完成所述目标链表的初始化,在所述目标链表已经进行初始化的情况下,根据所述写地址将所述写数据写入所述目标链表中的对应位置。
[0033] 上述链表初始化装置、方法、系统、计算机设备、存储介质和计算机程序产品,该装置包括:控制器、寄存器和至少一个链表;其中,寄存器,用于存储至少一个链表的状态值,状态值用于表示对应的链表是否已经进行初始化;控制器,用于接收写命令和写数据,并解析写命令获得对应的写地址,根据写地址确定对应的目标链表,从寄存器中读取目标链表的状态值,根据目标链表的状态值确定目标链表是否已经进行初始化,在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,在目标链表已经进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置。这样,通过链表初始化装置中的控制器在接收到针对目标链表的写命令和写数据,且目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,即将对目标链表进行第一次写操作的流程和对目标链表进行初始化操作的流程结合在一起,实现了在对目标链表进行第一次写操作的同时,对目标链表进行初始化操作的目的,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,能够有效降低芯片功耗;同时,整个过程中无需软件参与链表的初始化过程,从而降低了软件的控制逻辑,避免了软件控制逻辑较多,导致链表的初始化时间较长,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。此外,将对目标链表的第一次写操作和对目标链表的初始化操作结合在一起,无需单独对目标链表进行初始化操作,从而避免了同时对芯片中的多个链表进行初始化操作,导致芯片的某些区域的电压下降很多,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。

附图说明

[0034] 图1为现有技术中的链表初始化装置的结构框图;
[0035] 图2为一个实施例中链表初始化装置的结构框图;
[0036] 图3为一个实施例中链表的结构框图;
[0037] 图4为一个实施例中链表初始化方法的流程示意图;
[0038] 图5为另一个实施例中链表初始化方法的流程示意图;
[0039] 图6为一个实施例中链表初始化系统的结构框图;
[0040] 图7为另一个实施例中链表初始化系统的结构框图;
[0041] 图8为一个实施例中计算机设备的内部结构图。

具体实施方式

[0042] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0043] 需要说明的是,针对图1、图2、图6和图7,wr‑vld和WR均是指写命令,rd‑vld和RD均是指读命令,RAM是一种链表类的存储器。
[0044] 在一个实施例中,如图2所示,提供了一种链表初始化装置,该装置包括:控制器、寄存器和至少一个链表;其中,寄存器,用于存储至少一个链表的状态值,状态值用于表示对应的链表是否已经进行初始化;控制器,用于接收写命令和写数据,并解析写命令获得对应的写地址,根据写地址确定对应的目标链表,从寄存器中读取目标链表的状态值,根据目标链表的状态值确定目标链表是否已经进行初始化,在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,在目标链表已经进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置。
[0045] 其中,控制器是指用于接收写命令和写数据,并根据接收到的写命令和写数据,对链表进行对应操作的控制电路,比如门级电路。需要说明的是,该控制器是指硬件控制器。
[0046] 其中,寄存器是指用于记录至少一个链表的状态值的状态寄存器,包括多个数据位(bit),其位数等于链表初始化装置所包括的链表的数量总和,且每个数据位对应记录一个链表的状态值。在实际场景中,寄存器用于存储多个链表的状态值;比如,寄存器包括4个数据位,分别记录链表L1、链表L2、链表L3、链表L4的状态值。
[0047] 其中,链表是指物理存储单元上非连续和非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。在实际场景中,链表是指链表类的存储器,比如RAM(Random Access Memory,随机存储器)。举例说明,参考图3,链表包括n个节点,每个节点包括两个部分:一个部分是存储当前节点对应的数据元素的数据域,另一个部分是存储下一个节点对应的节点地址的指针域。需要说明的是,图3中,第n个节点所存储的信息为无效值。
[0048] 其中,写命令是指输入模块发送的针对链表的命令,用于向链表中写入数据。写数据是指输入模块发送的需要向链表中写入的数据,可以是各种类型的数据,具体本申请不做限定。写命令中包括写数据对应的写地址,写地址是指写数据在链表中的写入位置。目标链表是指写命令所针对的链表,比如与写命令对应的链表,具体是指写地址对应的链表,比如包含写地址的链表。
[0049] 其中,每个链表的状态值都有两种,分别表示链表未进行初始化和链表已经进行初始化。目标链表未进行初始化,是指没有将目标链表中的每个节点所存储的地址信息更新为下一个节点的地址信息,即每个节点所存储的地址信息是随机值。目标链表已经进行初始化,是指已经将目标链表中的每个节点所存储的地址信息更新为下一个节点的地址信息,比如图3中第一个节点所存储的地址信息“1”指向第二个节点,第二个节点所存储的地址信息“2”指向第三个节点。
[0050] 其中,针对目标链表的命令为写命令,且目标链表未进行初始化,说明该写命令为第一次写命令,那么在对目标链表进行第一次写操作的过程中,可以同时对目标链表进行初始化,无需额外增加初始化目标链表的流程,从而降低了初始化链表的时间,进而降低了芯片功耗。其中,第一次写操作是指将数据写入到目标链表中的对应节点,初始化操作是指将目标链表中的每个节点所存储的地址信息更新为下一个节点的地址信息。
[0051] 其中,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,是指将写数据写入目标链表中与写地址对应的位置,并同时写入该写数据的下一写数据的写地址;比如,参考图3,将写数据写入第1个节点中,并同时将第1个节点所存储的地址信息更新为第2个节点的地址信息“1”。
[0052] 需要说明的是,在图2中,寄存器可以包含在控制器中,也可以不包含在控制器中。
[0053] 具体地,参考图2,控制器接收输入模块发送的写命令和写数据;对该写命令进行解析,得到对应的写地址;从至少一个链表中,筛选出与写地址对应的链表,作为目标链表;从寄存器中读取出目标链表的状态值,并对目标链表的状态值进行识别,以判断目标链表是否已经进行初始化;在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中与该写地址对应的位置,并同时完成目标链表的初始化。
[0054] 进一步地,在目标链表已经进行初始化的情况下,控制器根据写地址将写数据写入目标链表中与该写地址对应的位置,而不对目标链表进行初始化。
[0055] 进一步地,在接收到读命令之后,控制器若识别到读命令所针对的目标链表已经进行初始化,则直接根据读命令对目标链表进行读操作;若识别到读命令所针对的目标链表未进行初始化,则拒绝响应该读命令。
[0056] 此外,参考图1和图2,可知道本申请跟现有技术存在以下3个区别点:第一,现有技术中,对链表进行初始化的流程和对链表进行第一次写操作的流程是分开进行的,而本申请是将对链表进行初始化的流程和对链表进行第一次写操作的流程结合在一起,即在对链表进行第一次写操作时,同时完成链表的初始化;这样,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,能够有效降低芯片功耗。第二,现有技术中,在链表初始化过程中,需要软件参与,造成软件过度参与链表的初始化过程,而本申请中,通过硬件控制器完成链表的初始化过程,无需软件参与链表的初始化过程,从而降低了软件的控制逻辑,避免了软件控制逻辑较多,导致链表的初始化时间较长,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。第三,现有技术中,对链表进行初始化的流程和对链表进行第一次写操作的流程是分开进行的,若芯片有很多链表的情况下,会同时有很多链表进行初始化,会产生很多逻辑同时跳变,导致芯片的某些区域的电压下降很多,造成芯片功耗较大;而本申请中,是将对链表进行初始化的流程和对链表进行第一次写操作的流程结合在一起,即在需要对链表进行第一次写操作时,才同时完成链表的初始化,无需单独对目标链表进行初始化,从而避免了同时对芯片中的多个链表进行初始化操作,导致芯片的某些区域的电压下降很多,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。
[0057] 上述链表初始化装置,包括:控制器、寄存器和至少一个链表;其中,寄存器,用于存储至少一个链表的状态值,状态值用于表示对应的链表是否已经进行初始化;控制器,用于接收写命令和写数据,并解析写命令获得对应的写地址,根据写地址确定对应的目标链表,从寄存器中读取目标链表的状态值,根据目标链表的状态值确定目标链表是否已经进行初始化,在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,在目标链表已经进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置。这样,通过链表初始化装置中的控制器在接收到针对目标链表的写命令和写数据,且目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,即将对目标链表进行第一次写操作的流程和对目标链表进行初始化操作的流程,实现了在对目标链表进行第一次写操作的同时,对目标链表进行初始化操作的目的,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,能够有效降低芯片功耗;同时,整个过程中无需软件参与链表的初始化过程,从而降低了软件的控制逻辑,避免了软件控制逻辑较多,导致链表的初始化时间较长,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。此外,将对目标链表的第一次写操作和对目标链表的初始化操作结合在一起,无需单独对目标链表进行初始化操作,从而避免了同时对芯片中的多个链表进行初始化操作,导致芯片的某些区域的电压下降很多,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。
[0058] 在一个实施例中,目标链表包括数据存储器和地址存储器,控制器具体用于:在目标链表未进行初始化的情况下,根据写数据中的当前写数据的写地址,将当前写数据写入数据存储器中的对应位置,并在地址存储器中写入当前写数据的下一写数据的写地址,下一写数据的写地址为当前写数据的写地址加1,将下一写数据写入数据存储器中的对应位置,直至完成写数据中的最后一个写数据的写操作。
[0059] 其中,数据存储器是指用于存储数据的存储器,地址存储器是指用于存储地址信息的存储器。
[0060] 其中,将当前写数据写入数据存储器中的对应位置,是指将当前写数据写入数据存储器中与当前写数据的写地址对应的位置。比如,参考图3,将数据a存储至第1个节点中的对应位置。
[0061] 其中,在地址存储器中写入当前写数据的下一写数据的写地址,是指在地址存储器中与当前写数据关联的位置中,写入当前写数据的下一写数据的写地址,便于将地址信息不连续的数据串联起来。比如,参考图3,在第1个节点中,写入第2个节点的地址信息“1”。
[0062] 其中,下一写数据的写地址为当前写数据的写地址加1;比如,参考图3,当前写数据的写地址为0,则下一写数据的写地址为1。
[0063] 具体地,参考图2,在目标链表未进行初始化的情况下,控制器根据写数据中的当前写数据的写地址,将当前写数据写入数据存储器中与当前写数据的写地址对应的位置,并在地址存储器中与当前写数据关联的位置中,写入当前写数据的下一写数据的写地址(即当前写数据的写地址加1);接着,控制器根据下一写数据的写地址,将下一写数据写入数据存储器中与下一写数据的写地址对应的位置,并在地址存储器中与下一写数据关联的位置中,写入下一写数据的下一写数据的写地址,直至完成写数据中的最后一个写数据的写操作。
[0064] 举例说明,参考图3,控制器101根据接收到的写命令,分别将写数据D1、D2、D3……Dn‑1、Dn写入目标链表中的第1个节点、第2个节点、第3个节点……第n‑1个节点、第n个节点,同时将目标链表中的第1个节点所存储的地址信息更新为第2个节点的地址信息“1”、将目标链表中的第2个节点所存储的地址信息更新为第3个节点的地址信息“2”……将目标链表中的第n‑1个节点所存储的地址信息更新为第n个节点的地址信息“n‑1”。
[0065] 需要说明的是,现有技术中,对目标链表的第一次写操作的流程和对目标链表的初始化操作的流程是分开进行的;在单独对目标链表进行写操作时,是直接将当前写数据写入数据存储器中与当前写数据的写地址对应的位置,并根据当前写数据的下一写数据的写地址,将下一写数据写入数据存储器中与下一写数据的写地址对应的位置,直至完成写数据中的最后一个写数据的写操作,整个过程中并不会向地址存储器中写入地址信息。
[0066] 在本实施例中,在目标链表未进行初始化的情况下,根据写数据中的当前写数据的写地址,将当前写数据写入数据存储器中的对应位置,并在地址存储器中写入当前写数据的下一写数据的写地址,将下一写数据写入数据存储器中的对应位置,直至完成写数据中的最后一个写数据的写操作;这样,实现了在接收到写命令,且目标链表未初始化的情况下,同时对目标链表进行第一次写操作和初始化操作的目的,将对目标链表的第一次写操作的流程和对目标链表的初始化操作的流程结合在一起,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,进一步降低了芯片功耗。
[0067] 在一个实施例中,控制器具体用于:在目标链表的状态值为0的情况下,确认目标链表未进行初始化;在目标链表的状态值为1的情况下,确认目标链表已经进行初始化。
[0068] 需要说明的是,本申请也可以通过其他数值来表示目标链表未进行初始化和目标链表已经进行初始化。
[0069] 其中,寄存器中与目标链表对应的数据位的数值为0,表示目标链表的状态值为0;寄存器中与目标链表对应的数据位的数值为1,表示目标链表的状态值为1。
[0070] 具体地,参考图2,控制器从寄存器中读取出目标链表的状态值,并对目标链表的状态值进行识别,以判断目标链表是否已经进行初始化;在目标链表的状态值为0的情况下,确认目标链表未进行初始化;在目标链表的状态值为1的情况下,确认目标链表已经进行初始化。
[0071] 举例说明,参考图2,控制器若识别到寄存器中与目标链表L3对应的数据位的数值为0,说明目标链表L3的状态值为0,则确认目标链表L3未进行初始化。
[0072] 在本实施例中,在目标链表的状态值为0的情况下,确认目标链表未进行初始化;在目标链表的状态值为1的情况下,确认目标链表已经进行初始化;这样,通过识别寄存器中所存储的目标链表的状态值,即可快速确认目标链表是否已经进行初始化,从而提高了链表的初始化状态的识别效率;同时,有利于后续在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,有利于节省链表初始化时间。
[0073] 在一个实施例中,控制器,还用于在根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化之后,在寄存器中更新目标链表的状态值,目标链表的更新后的状态值用于表示目标链表已经进行初始化。
[0074] 其中,在寄存器中更新目标链表的状态值,是指将寄存器中与目标链表对应的数据位的数值更新为1,使得目标链表的状态值为1。
[0075] 其中,目标链表的更新后的状态值为1,表示目标链表已经进行初始化。
[0076] 具体地,参考图2,在根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化之后,控制器将寄存器中与目标链表对应的数据位的数值更新为1,使得目标链表的更新后的状态值为1,以表示目标链表已经进行初始化。
[0077] 举例说明,参考图2,控制器在完成对目标链表的第一次写操作和初始化操作之后,将寄存器中所存储的目标链表L3的状态值更新为1,以表示目标链表已经进行初始化。
[0078] 在本实施例中,在根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化之后,在寄存器中更新目标链表的状态值,以表示目标链表已经进行初始化;这样,有利于及时更新寄存器中所存储的各个链表的状态值,避免了对链表进行重复初始化,导致芯片功耗较大的缺陷,进一步降低了芯片功耗。
[0079] 在一个实施例中,控制器,还用于接收复位命令,响应于复位命令,控制完成自身的复位操作、控制完成链表的复位操作以及复位寄存器中保存的链表的状态值;链表的复位后的状态值用于表示链表未进行初始化。
[0080] 其中,链表的复位操作是指将链表中每个节点所存储的数据删除,以及将每个节点所存储的地址信息更新为随机值。
[0081] 其中,链表的复位后的状态值为0,表示链表未进行初始化。
[0082] 其中,复位寄存器中保存的链表的状态值,是指将寄存器中与该链表对应的数据位的数值更新为0,使得该链表的状态值为0,表示该链表未进行初始化。
[0083] 具体地,参考图2,控制器接收软件控制模块发送的复位命令,比如rst命令;响应于复位命令,控制完成自身的复位操作、控制完成复位命令所针对的链表的复位操作以及将寄存器中存储的该链表的状态值更新为0,以表示该链表未进行初始化。
[0084] 举例说明,参考图2,控制器根据接收到的复位命令,控制完成自身的复位操作;同时,将与复位命令对应的链表L3中的每个节点所存储的数据删除,以及将每个节点所存储的地址信息更新为随机值;在对链表L3复位完成之后,将寄存器中与链表L3对应的数据位的数值更新为0,使得链表L3的状态值为0,以表示链表L3未进行初始化。
[0085] 在本实施例中,响应于复位命令,控制完成控制器自身的复位操作、控制完成链表的复位操作以及复位寄存器中保存的链表的状态值,以表示该链表未进行初始化;这样,实现了在寄存器中将复位完成的链表的状态值更新为0的目的,有利于后续通过读取寄存器,即可快速确认与接收到的写命令对应的目标链表的状态值,进而在目标链表未进行初始化的情况下,同时对目标链表进行写操作和初始化操作,无需额外对目标链表进行初始化操作,从而节省了对目标链表进行初始化操作的时间,进而降低了芯片功耗。
[0086] 在一个实施例中,如图4所示,提供了一种链表初始化方法,该方法可以应用于链表初始化装置中,包括以下步骤:
[0087] 步骤S401,接收写命令和写数据,并解析写命令获得对应的写地址。
[0088] 步骤S402,根据写地址确定对应的目标链表,从寄存器中读取目标链表的状态值,根据目标链表的状态值确定目标链表是否已经进行初始化。
[0089] 步骤S403,在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,在目标链表已经进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置。
[0090] 具体地,控制器接收输入模块发送的写命令和写数据;对该写命令进行解析,得到对应的写地址;从至少一个链表中,筛选出与写地址对应的链表,作为目标链表;从寄存器中读取出目标链表的状态值,并对目标链表的状态值进行识别,以判断目标链表是否已经进行初始化;在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中与该写地址对应的位置,并同时完成目标链表的初始化;在目标链表已经进行初始化的情况下,控制器根据写地址将写数据写入目标链表中与该写地址对应的位置。
[0091] 上述链表初始化方法中,在接收到针对目标链表的写命令和写数据,且目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,即将对目标链表进行第一次写操作的流程和对目标链表进行初始化操作的流程,实现了在对目标链表进行第一次写操作的同时,对目标链表进行初始化操作的目的,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,能够有效降低芯片功耗;同时,整个过程中无需软件参与链表的初始化过程,从而降低了软件的控制逻辑,避免了软件控制逻辑较多,导致链表的初始化时间较长,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。此外,将对目标链表的第一次写操作和对目标链表的初始化操作结合在一起,无需单独对目标链表进行初始化操作,从而避免了同时对芯片中的多个链表进行初始化操作,导致芯片的某些区域的电压下降很多,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。
[0092] 在一个实施例中,上述步骤S403,在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,具体包括:在目标链表未进行初始化的情况下,根据写数据中的当前写数据的写地址,将当前写数据写入数据存储器中的对应位置,并在地址存储器中写入当前写数据的下一写数据的写地址,下一写数据的写地址为当前写数据的写地址加1;将下一写数据写入数据存储器中的对应位置,直至完成写数据中的最后一个写数据的写操作。
[0093] 在本实施例中,在目标链表未进行初始化的情况下,根据写数据中的当前写数据的写地址,将当前写数据写入数据存储器中的对应位置,并在地址存储器中写入当前写数据的下一写数据的写地址,将下一写数据写入数据存储器中的对应位置,直至完成写数据中的最后一个写数据的写操作;这样,实现了在接收到写命令,且目标链表未初始化的情况下,同时对目标链表进行第一次写操作和初始化操作的目的,将对目标链表的第一次写操作的流程和对目标链表的初始化操作的流程结合在一起,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,进一步降低了芯片功耗。
[0094] 在一个实施例中,上述步骤S402,根据目标链表的状态值确定目标链表是否已经进行初始化,具体包括:在目标链表的状态值为0的情况下,确认目标链表未进行初始化;在目标链表的状态值为1的情况下,确认目标链表已经进行初始化。
[0095] 在本实施例中,在目标链表的状态值为0的情况下,确认目标链表未进行初始化;在目标链表的状态值为1的情况下,确认目标链表已经进行初始化;这样,通过识别寄存器中所存储的目标链表的状态值,即可快速确认目标链表是否已经进行初始化,从而提高了链表的初始化状态的识别效率;同时,有利于后续在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,有利于节省链表初始化时间。
[0096] 在一个实施例中,本申请提供的链表初始化方法,还包括更新目标链表的状态值的步骤,具体包括如下内容:在根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化之后,在寄存器中更新目标链表的状态值;目标链表的更新后的状态值用于表示目标链表已经进行初始化。
[0097] 在本实施例中,在根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化之后,在寄存器中更新目标链表的状态值,以表示目标链表已经进行初始化;这样,有利于及时更新寄存器中所存储的各个链表的状态值,避免了对链表进行重复初始化,导致芯片功耗较大的缺陷,进一步降低了芯片功耗。
[0098] 在一个实施例中,本申请提供的链表初始化方法,还包括完成链表的复位操作的步骤,具体包括如下内容:接收复位命令,响应于复位命令,控制完成自身的复位操作、控制完成链表的复位操作以及复位寄存器中保存的链表的状态值;链表的复位后的状态值用于表示链表未进行初始化。
[0099] 在本实施例中,响应于复位命令,控制完成控制器自身的复位操作、控制完成链表的复位操作以及复位寄存器中保存的链表的状态值,以表示该链表未进行初始化;这样,实现了在寄存器中将复位完成的链表的状态值更新为0的目的,有利于后续通过读取寄存器,即可快速确认与接收到的写命令对应的目标链表的状态值,进而在目标链表未进行初始化的情况下,同时对目标链表进行写操作和初始化操作,无需额外对目标链表进行初始化操作,从而节省了对目标链表进行初始化操作的时间,进而降低了芯片功耗。
[0100] 在一个实施例中,如图5所示,提供了另一种链表初始化方法,该方法可以应用于链表初始化装置中,包括以下步骤:
[0101] 步骤S501,接收复位命令。
[0102] 步骤S502,响应于复位命令,控制完成自身的复位操作、控制完成链表的复位操作以及复位寄存器中保存的链表的状态值;链表的复位后的状态值用于表示链表未进行初始化。
[0103] 步骤S503,接收写命令和写数据,并解析写命令获得对应的写地址。
[0104] 步骤S504,根据写地址确定对应的目标链表,从寄存器中读取目标链表的状态值;在目标链表的状态值为0的情况下,确认目标链表未进行初始化。
[0105] 步骤S505,在目标链表未进行初始化的情况下,根据写数据中的当前写数据的写地址,将当前写数据写入数据存储器中的对应位置,并在地址存储器中写入当前写数据的下一写数据的写地址,下一写数据的写地址为当前写数据的写地址加1。
[0106] 步骤S506,将下一写数据写入数据存储器中的对应位置,直至完成写数据中的最后一个写数据的写操作。
[0107] 步骤S507,在寄存器中更新目标链表的状态值;目标链表的更新后的状态值用于表示目标链表已经进行初始化。
[0108] 上述链表初始化方法中,在接收到针对目标链表的写命令和写数据,且目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,即将对目标链表进行第一次写操作的流程和对目标链表进行初始化操作的流程,实现了在对目标链表进行第一次写操作的同时,对目标链表进行初始化操作的目的,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,能够有效降低芯片功耗;同时,整个过程中无需软件参与链表的初始化过程,从而降低了软件的控制逻辑,避免了软件控制逻辑较多,导致链表的初始化时间较长,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。此外,将对目标链表的第一次写操作和对目标链表的初始化操作结合在一起,无需单独对目标链表进行初始化操作,从而避免了同时对芯片中的多个链表进行初始化操作,导致芯片的某些区域的电压下降很多,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。此外,在对目标链表的第一次写操作和初始化操作均完成的情况下,在寄存器中将目标链表的状态值更新为0,有利于及时更新寄存器中所存储的各个链表的状态值,避免了对链表进行重复初始化,导致芯片功耗较大的缺陷,进一步降低了芯片功耗。
[0109] 在一个实施例中,如图6所示,提供了一种链表初始化系统,该系统包括:输入模块以及链表初始化装置;输入模块,用于向链表初始化装置输入写命令和写数据。
[0110] 其中,输入模块是指用于向链表初始化装置输入写命令和写数据的模块。
[0111] 其中,链表初始化装置是指如图2所示的链表初始化装置。
[0112] 具体地,输入模块向链表初始化装置输入写命令和写数据;链表初始化装置接收输入模块发送的写命令和写数据;对该写命令进行解析,得到对应的写地址;从至少一个链表中,筛选出与写地址对应的链表,作为目标链表;从寄存器中读取出目标链表的状态值,并对目标链表的状态值进行识别,以判断目标链表是否已经进行初始化;在目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中与该写地址对应的位置,并同时完成目标链表的初始化。
[0113] 上述链表初始化系统,在接收到针对目标链表的写命令和写数据,且目标链表未进行初始化的情况下,根据写地址将写数据写入目标链表中的对应位置,并同时完成目标链表的初始化,即将对目标链表进行第一次写操作的流程和对目标链表进行初始化操作的流程,实现了在对目标链表进行第一次写操作的同时,对目标链表进行初始化操作的目的,无需额外增加初始化链表的流程,从而节省了初始化链表的时间,能够有效降低芯片功耗;同时,整个过程中无需软件参与链表的初始化过程,从而降低了软件的控制逻辑,避免了软件控制逻辑较多,导致链表的初始化时间较长,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。此外,将对目标链表的第一次写操作和对目标链表的初始化操作结合在一起,无需单独对目标链表进行初始化操作,从而避免了同时对芯片中的多个链表进行初始化操作,导致芯片的某些区域的电压下降很多,造成芯片功耗较大的缺陷,进一步降低了芯片功耗。
[0114] 在一个实施例中,为了更清晰阐明本申请实施例提供的链表初始化系统,以下以一个具体的实施例对该链表初始化系统进行具体说明。在一个实施例中,参考图7,本申请还提供了另一种链表初始化系统,通过在硬件控制模块中增加一个用于记录链表RAM的初始化状态initial_wr的状态寄存器,将链表的初始化流程和第一次写链表的流程结合在一起,即在第一次写链表的同时,完成链表的初始化流程。
[0115] 参考图7,软件控制模块向硬件控制模块发送复位信号rst,硬件控制模块接收到复位信号rst之后,对自身进行复位操作以及对链表RAM进行复位操作,同时将状态寄存器中用于记录链表RAM的初始化状态initial_wr的数据位的数值置为0。接着,当硬件控制模块接收到输入模块发送的写命令wr‑vld时,硬件控制模块从状态寄存器中读取出对应的链表RAM的初始化状态initial_wr,若initial_wr=0,说明该链表RAM未进行初始化,则对该链表RAM进行写操作,同时将链表RAM中对应存储的地址信息初始化为addr+1;若initial_wr=1,则按照实际工作状态读写链表RAM即可,比如根据读命令rd‑vld,从链表RAM中读取相应的数据,并将读取出的数据发送至输出模块。
[0116] 上述链表初始化系统,在增加少量的状态控制逻辑的情况下,在第一次写链表时顺便将链表的初始化完成,从而节省了初始化链表的时间,进而降低了功耗;同时,将链表初始化的时间和实际工作时间结合在一起,避免了同时对很多个链表进行初始化,会产生很多逻辑同时跳变,导致芯片某些区域的电压波动很快,造成芯片的功耗较大的缺陷,进一步降低了芯片功耗;此外,也不需要软件过度参与链表的初始化流程,从而降低了软件的控制逻辑。
[0117] 应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0118] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储至少一个链表的状态值等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种链表初始化方法。
[0119] 本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0120] 在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
[0121] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
[0122] 在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
[0123] 需要说明的是,本申请所涉及的数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
[0124] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑Only Memory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
[0125] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0126] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。