一种数据存储方法、装置、终端及存储介质

文档序号:1849654 发布日期:2021-11-16 浏览:8次 >En<

阅读说明:本技术 一种数据存储方法、装置、终端及存储介质 (Data storage method, device, terminal and storage medium ) 是由 黄仁芳 汪漪 崔春来 成剑 李伟超 于 2021-07-30 设计创作,主要内容包括:本发明公开了一种数据存储方法、装置、终端及存储介质。由于本发明中的共享缓存模块可以存储不同类型的报文数据,不用为每一种报文数据分别配置一个单独的RAM,因此可以解决现有技术中为eMAC和pMAC两个数据通道分别配备一个最大带宽容量的RAM,导致存储资源浪费的问题。(The invention discloses a data storage method, a data storage device, a terminal and a storage medium. The shared cache module in the invention can store different types of message data without configuring a separate RAM for each type of message data, thereby solving the problem of storage resource waste caused by configuring a RAM with the maximum bandwidth capacity for the eMAC and pMAC data channels respectively in the prior art.)

一种数据存储方法、装置、终端及存储介质

技术领域

本发明涉及数据处理领域,尤其涉及的是一种数据存储方法、装置、终端及存储介质。

背景技术

现有的IEEE802.3br协议中,由于设备无法预知抢占帧和非抢占帧的业务比例,因此会为eMAC和pMAC两个独立的数据接收通道的分别配备一个最大带宽容量的随机存取存储器(RAM),从而导致存储资源浪费的现象。

因此,现有技术还有待改进和发展。

发明内容

本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种数据存储方法、装置、终端及存储介质,旨在解决现有技术中为eMAC和pMAC两个数据通道分别配备一个最大带宽容量的RAM,导致存储资源浪费的问题。

本发明解决问题所采用的技术方案如下:

第一方面,本发明实施例提供一种数据存储方法,其中,所述方法包括:

获取待写入报文数据,确定所述待写入报文数据对应的报文类型;

获取历史存储器选择信息,所述历史存储器选择信息用于反映目标历史报文数据中最后一个数据块所落存的存储器,其中,所述目标历史报文数据为最近一次写入所述报文类型的报文数据;

根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,其中,所述共享缓存模块由若干存储器构成;

将每一所述数据块存储至每一所述数据块对应的目标存储器中。

在一种实施方式中,所述获取历史存储器选择信息,包括:

确定所述报文类型的数量;

根据所述报文类型的数量,获取所述历史存储器选择信息。

在一种实施方式中,所述根据所述报文类型的数量,获取所述历史存储器选择信息,包括:

当所述报文类型的数量等于1时,将与所述报文类型对应的最近一次单帧写数据操作作为目标单帧写数据操作;

确定所述目标单帧写数据操作中最后一个数据块所落存的存储器,得到所述历史存储器选择信息。

在一种实施方式中,所述报文类型包括若干报文类型,所述根据所述报文类型的数量,从所述历史空间分配记录中确定目标历史空间分配记录,包括:

当所述报文类型的数量大于1时,将最近一次多帧写数据操作作为目标多帧写数据操作,其中,所述目标多帧写数据操作所写入的报文数据的报文类型与所述待写入报文数据的报文类型相同;

确定所述目标多帧写数据操作中每一所述报文类型对应的最后一个数据块所落存的存储器,得到若干所述历史存储器选择信息。

在一种实施方式中,若干所述存储器包括第一存储器和第二存储器,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,包括:

当所述历史存储器选择信息为所述第一存储器时,确定所述待写入报文数据中单数数据块对应的目标存储器为所述第二存储器,确定所述待写入报文数据中双数数据块对应的目标存储器为所述第一存储器。

在一种实施方式中,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,包括:

当所述历史存储器选择信息为所述第二存储器时,确定所述待写入报文数据中单数数据块对应的目标存储器为所述第一存储器,确定所述待写入报文数据中双数数据块对应的目标存储器为所述第二存储器。

在一种实施方式中,所述待写入报文数据包括若干子报文数据,且每一所述子报文数据与一种所述报文类型对应,若干所述存储器包括第一存储器和第二存储器,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,包括:

针对每一所述历史存储器选择信息,将与该历史存储器选择信息对应于同一报文类型的子报文数据作为目标子报文数据;

当该历史存储器选择信息为所述第一存储器时,确定所述目标子报文数据中单数数据块对应的目标存储器为所述第二存储器,确定所述目标子报文数据中双数数据块对应的目标存储器为所述第一存储器。

在一种实施方式中,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,包括:

当该历史存储器选择信息为所述第二存储器时,确定所述目标子报文数据中单数数据块对应的目标存储器为所述第一存储器,确定所述目标子报文数据中双数数据块对应的目标存储器为所述第二存储器。

在一种实施方式中,所述将每一所述数据块存储至每一所述数据块对应的目标存储器中,包括:

针对每一所述数据块,通过该数据块对应的目标存储器的存储器空间账簿,获取该数据块在该目标存储器中的目标存储位置;

将该数据块写入所述目标存储位置。

在一种实施方式中,所述将该数据块写入所述目标存储位置之后还包括:

获取预先构建的报文链表;

根据该数据块与所述目标存储位置对所述报文链表进行更新,得到更新报文链表,其中,所述报文链表用于反映数据块与存储位置的对应关系。

在一种实施方式中,所述根据该数据块与所述目标存储位置对所述报文链表进行更新,包括:

针对每一所述数据块,根据该数据块与所述目标存储位置生成更新地址指针;

根据所述更新地址指针对所述报文链表进行更新。

第二方面,本发明实施例还提供一种数据存储装置,其中,所述装置包括:

数据获取模块,用于获取待写入报文数据,确定所述待写入报文数据对应的报文类型;

信息获取模块,用于所述历史存储器选择信息用于反映目标历史报文数据中最后一个数据块所落存的存储器,其中,所述目标历史报文数据为最近一次写入所述报文类型的报文数据;

存储器选择模块,用于根据所述历史存储器选择信息,从所述共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,其中,所述共享缓存模块由若干存储器构成;

数据写入模块,用于将每一所述数据块存储至每一所述数据块对应的目标存储器中。

第三方面,本发明实施例还提供一种终端,其中,所述终端包括有存储器和一个或者一个以上处理器;所述存储器存储有一个或者一个以上的程序;所述程序包含用于执行如上述任一所述的数据存储方法的指令;所述处理器用于执行所述程序。

第四方面,本发明实施例还提供一种计算机可读存储介质,其上存储有多条指令,其特征在于,所述指令适用于由处理器加载并执行,以实现上述任一所述的数据存储方法的步骤。

本发明的有益效果:由于本发明中的共享缓存模块可以存储不同类型的报文数据,不用为每一种报文数据分别配置一个单独的RAM,因此可以解决现有技术中为eMAC和pMAC两个数据通道分别配备一个最大带宽容量的RAM,导致存储资源浪费的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的数据存储方法的流程示意图。

图2是本发明实施例提供的802.3br抢占式MAC传输机制的示意图。

图3是本发明实施例提供的基于本发明的数据存储方法改进后的802.3br抢占式MAC传输机制的示意图。

图4是本发明实施例提供的Tx MAC共享缓存模块的设计框图。

图5是本发明实施例提供的报文数据的存储位置和报文链表的对应关系的示意图。

图6是本发明实施例提供的共享缓存模块内部实现电路的示意图。

图7是本发明实施例提供的共享缓存模块的ram_wea控制信号的计算算法。

图8是本发明实施例提供的共享缓存模块的xmac_sel控制信号的计算算法。

图9是本发明实施例提供的Tx MAC共享缓存模块的写数据操作的完整流程图。

图10是本发明实施例提供的Tx MAC共享缓存模块的读数据操作的完整流程图。

图11是本发明实施例提供的数据存储装置的内部模块连接示意图。

图12是本发明实施例提供的终端的原理框图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

IEEE802.3br协议中定义了一套以太网帧抢占机制,可使高优先级报文抢占低优先级报文优先获得传输,同时被“中断”的低优先级报文仍可以按照一定的机制进行报文重组。IEEE802.3br主要为那些时间严苛型的应用而设计,使网络数据传输具有更优的确定性延时。协议定义了eMAC和pMAC两个通道,其中eMAC对应高优先级的抢占报文通道,pMAC对应低优先级的可被抢占报文通道,eMAC和pMAC作为两个通道发送报文数据,eMAC和pMAC内部的缓存分别用于接收高优先级报文(eMAC报文)和低优先级报文(pMAC报文),最后由MACMerge Sublayer实现eMAC和pMAC的“融合”,实现相应的帧抢占功能。接收侧再根据802.3br的协议规则,完成对分片帧的重组。举例说明,如图2所示,虚线以上部分为802.3br MAC的上游模块,常见为TAS(Time Aware Shaper)队列控制器,虚线以下(PHY除外)为MAC模块。一个完整的802.3br MAC模块由MAC control、eMAC、pMAC、MAC Merge Sublayer等各组件构成。其中,MAC control主要用于实现对eMAC、pMAC的控制,eMAC、pMAC分别用于接收和转发对应通道的报文数据,MAC Merge Sublay主要用于实现eMAC对pMAC的抢占功能。其中,点划线箭头(标号101)代表协议中pMAC hold的控制信号,其余箭头分粗箭头和细箭头两种连接线显示。细箭头代表数据流,粗箭头(如标号102,标号103)代表既有控制流又有数据流。

由于eMAC和pMAC是两个具有独立功能的通道,彼此独立接收上层报文数据,因此传统的IEEE802.3br协议的设计是将eMAC和pMAC作为两个子功能模块分离设计,在每个SubMAC(指eMAC和pMAC,下文同)内部均例化一buffer空间(图1),通过MAC Merge Sublayer将两个MAC“融合”在一起,最后实现eMAC对pMAC的帧抢占功能。这样做的一个好处是设计简单,eMAC和pMAC的耦合关系小,便于实现和维护。但同时也存在一个不容忽视的弊端,容易造成存储资源“浪费”,推高了芯片的面积和功耗。

以GE接口为例,由于设备无法预知抢占帧和非抢占帧的业务比例,每个Sub MAC均有可能独占1G的业务流量,这就需要我们在eMAC和pMAC内部均需放置一个可支撑起1G流量带宽的buffer,也即每个Sub MAC均需要按物理接口的最大带宽容量进行设计。

假设eMAC独占1G流量时所需要的buffer大小为256Kb(buffer的深度取决于MACcontroller数据发送间隔、数据块的大小以及MAC controller和MAC的时钟域的频率比等)。但是,由于两个Sub MAC之间为时分复用的关系,对于GE接口而言,若eMAC发送400M流量,则pMAC最多只能发送1G-400M=600M流量。因此上述256Kb的RAM资源并不能得到充分利用。Sub MAC间的业务比例无论如何调整,任何时刻总会有256Kb*50%=128Kb的RAM处于空闲状态。

简言之,现有的IEEE802.3br协议中,由于设备无法预知抢占帧和非抢占帧的业务比例,因此会为eMAC和pMAC两个独立的数据接收通道的分别配备一个最大带宽容量的随机存取存储器(RAM),从而导致存储资源浪费的现象。

针对现有技术的上述缺陷,本发明提供一种数据存储方法,所述方法包括:获取待写入报文数据,确定所述待写入报文数据对应的报文类型;获取历史存储器选择信息,所述历史存储器选择信息用于反映目标历史报文数据中最后一个数据块所落存的存储器,其中,所述目标历史报文数据为最近一次写入所述报文类型的报文数据;根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,其中,所述共享缓存模块由若干存储器构成;将每一所述数据块存储至每一所述数据块对应的目标存储器中。于本发明中的共享缓存模块可以同时存储不同类型的报文数据,不用为每一种报文数据分别配置一个单独的RAM,因此可以有效解决现有的IEEE802.3br协议中,为eMAC和pMAC两个独立的数据接收通道的分别配备一个最大带宽容量的随机存取存储器(RAM),从而导致存储资源浪费的问题。

如图1所述,所述方法包括如下步骤:

步骤S100、获取待写入报文数据,确定所述待写入报文数据对应的报文类型。

本实施例的目标是在一个共享缓存模块中存储不同类型的报文数据,例如同时存储eMAC报文和pMAC报文。具体地,本实施例将需要进行存储报文数据定义为待写入的报文数据,当设备获取到待写入的报文数据以后,需要判断该报文数据对应的报文类型。其中,不同数据通道接收的报文数据的报文类型是不同的。例如通过eMAC通道接收的报文数据,其对应的报文类型就是eMAC报文;而通过pMAC通道接收的报文数据,其报文类型就是pMAC报文。为了更好地说明本实施例中共享缓存模块的功能,如图3所示,图3中的sharingbuffer即为本实施例建立的共享缓存模块。可以看到,本实施例将两个Sub MAC中的缓存模块(buffer)剥离出来,作为独立的子模块桥接于两个Sub MAC之间,通过共享缓存模块对两个Sub MAC接收的报文数据完成数据存储操作。其中,标号201、202分别对应eMAC和pMAC写入共享缓存模块的数据流,标号203代表MAC Merge Sublayer输出至共享缓存模块的控制流,标号204代表读取共享缓存模块中存储的报文的数据流。在eMAC和pMAC出口的数据流改流向共享缓存模块后,图2中标号102、103的两条数据与控制的叠加流在图2中就变成了纯控制流(标注205、206的点划线箭头表示)。

如图1所示,所述方法还包括如下步骤:

步骤S200、获取历史存储器选择信息,所述历史存储器选择信息用于反映目标历史报文数据中最后一个数据块所落存的存储器,其中,所述目标历史报文数据为最近一次写入所述报文类型的报文数据。

具体地,由于本实施例是通过一个共享缓存模块来存储各种报文类型的报文数据,由于共享缓存模块中包含多个存储器,因此为了每个存储器的存储空间均匀使用,本实施例在每次存储完一种报文类型的报文数据后,会基于该报文数据的最后一个数据块所落存的存储器的编号、ICD或者名称等身份识别信息生成历史存储器选择信息,并将历史存储器选择信息存储在一个寄存器中,当下一次再存储相同报文类型的报文数据时,获取该寄存器中的历史存储器选择信息,用于进行当前报文数据的存储器选择。

在一种实现方式中,所述获取历史存储器选择信息,包括如下步骤:

步骤S201、确定所述报文类型的数量;

步骤S202、根据所述报文类型的数量,获取所述历史存储器选择信息。

具体地,当待写入报文数据是单个数据通道接收的报文时,该报文数据对应的报文类型为一个,例如待写入报文数据是由eMAC通道接收的报文,则该报文数据对应的报文类型只有一个,就是eMAC报文类型。当待写入报文数据是多个数据通道接收的报文时,该报文数据对应的报文类型为多个,例如待写入报文数据是由eMAC通道和pMAC通道并发接收的报文,则该报文数据对应的报文类型为两个,分别是eMAC报文类型和pMAC报文类型。由于单个数据通道接收的报文和多个通道接收的报文对应的写数据操作是不相同的,因此本实施例需要结合报文类型的数量,确定需要查找的寄存器的数量,进而获取每一报文类型分别对应的历史存储器选择信息。

在一种实现方式中,所述步骤S202具体包括如下步骤:

步骤S2021、当所述报文类型的数量等于1时,将与所述报文类型对应的最近一次单帧写数据操作作为目标单帧写数据操作;

步骤S2022、确定所述目标单帧写数据操作中最后一个数据块所落存的存储器,得到所述历史存储器选择信息。

具体地,当报文类型的数量等于1时,表示待写入报文数据是由单个数据通道接收的,因此对待写入报文数据进行存储的操作为单帧写数据操作,则与所述报文类型对应的最近一次单帧写数据操作,得到目标单帧写数据操作,并查找用于存储目标单帧写数据操作中最后一个数据块的存储器选择的寄存器,从该寄存器中获取最后一个数据块的存储器选择,得到历史存储器选择。举例说明,当报文类型为eMAC报文类型时,表示待写入报文数据是由eMAC通道接收的,则查找用于存储最近一次eMAC报文的单帧写数据操作中最后一个数据块的存储器选择的寄存器,根据该存储器中存储的历史存储器选择,确定前一次eMAC报文的单帧写数据操作中最后一个数据块落存的存储器为共享缓存模块中的第一存储器。

在另一种实现方式中,所述步骤步骤S202具体包括如下步骤:

步骤S2023、当所述报文类型的数量大于1时,将最近一次多帧写数据操作作为目标多帧写数据操作,其中,所述目标多帧写数据操作所写入的报文数据的报文类型与所述待写入报文数据的报文类型相同;

步骤S2024、确定所述目标多帧写数据操作中每一所述报文类型对应的最后一个数据块所落存的存储器,得到若干所述历史存储器选择信息。

具体地,当所述报文类型的数量大于1时,则表示有若干报文类型,即待写入报文数据是由多个数据通道并发接收的。因此对待写入报文数据进行存储的操作为多帧写数据操作,需要查找最近一次多帧写数据操作的所写入的历史报文数据,其中,该历史报文数据所对应的若干报文类型与待写入报文数据所对应的若干报文类型一一对应。然后,针对每一种报文类型,查找该报文类型对应的寄存器,该寄存器中存储了该报文类型对应的历史报文数据中最后一个数据块的存储器选择,从而得到该报文类型对应的历史存储器选择信息。举例说明,假设报文类型为eMAC报文类型和pMAC报文类型,则表示待写入报文数据是由eMAC通道和pMAC通道并发接收的,因此当前将待写入报文数据存储至共享缓存模块的操作为多帧写数据操作,需要从历史空间分配记录中查找最近一次多帧写数据操作的历史空间分配记录,且查找出来的历史空间分配记录中所写入的报文数据为eMAC报文和pMAC报文,然后,获取eMAC报文对应的历史存储器选择信息和pMAC报文对应的历史存储器选择信息。

如图1所示,所述方法还包括如下步骤:

步骤S300、根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,其中,所述共享缓存模块由若干存储器构成。

具体地,由于本实施例的共享缓存模块是由多个存储器构建成的,因此为了实现各存储器的存储空间的均衡利用,针对每一中报文类型,本实施例都需要参考前一次存储该报文类型时最后一个数据块的存储器选择,即历史存储器选择信息,确定当前待写入报文数据中每一数据块的存储器选择,以实现报文数据交织存储,进而实现各存储器的负载动态平衡。

在一种实现方式中,若干所述存储器包括第一存储器和第二存储器,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,具体包括如下步骤:

步骤S301、当所述历史存储器选择信息为所述第一存储器时,确定所述待写入报文数据中单数数据块对应的目标存储器为所述第二存储器,确定所述待写入报文数据中双数数据块对应的目标存储器为所述第一存储器。

简言之,如图7中506、图8中604的计算方法可以看出,本实施例需要通过交织存储的原则,将相邻两个数据块的存储位置位于不同的存储器中。从而实现在共享缓存模块中均匀存储待写入报文数据,最大化利用共享缓存模块的存储资源,使得第一存储器和第二存储器的负载达到动态平衡。举例说明,假设第一存储器为RAM0,第二存储器为RAM1。若历史存储器选择信息为RAM0,则待写入报文数据找那个第一个block块所落存的存储器为RAM1,第二块block块所落存的存储器为RAM0,第三个block块所落存的存储器为RAM1,第四个block块所落存的存储器为RAM0,第五个block块的所落存的存储器为RAM1...,直至确定最后一个block块所落存的存储器。从而实现交织存储,使得RAM0和RAM1的负载达到动态平衡。

在另一种实现方式中,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,包括:

步骤S302、当所述历史存储器选择信息为所述第二存储器时,确定所述待写入报文数据中单数数据块对应的目标存储器为所述第一存储器,确定所述待写入报文数据中双数数据块对应的目标存储器为所述第二存储器。

在一种实现方式中,如图7所示,本实施例针对写数据操作提供一种算法,用于确定待写入报文数据中每一数据块对应的所述存储器选择:

步骤501:判断当前时刻是否处于复位阶段。若是,则跳到步骤502;若否,则跳到步骤503。步骤502:初始化变量ram_wea_single=2’b00,并跳回到步骤501。步骤503:判断当前eMAC和pMAC通道是否均发起了传输。若是,则跳到步骤504;若否,则跳到步骤505。步骤504:将RAM0和RAM1的选通信号同时生效,即置位ram_wea=2’b11,并跳回到步骤501。步骤505:判断当前时刻是否仅eMAC或pMAC发起了传输。若是,则跳到步骤506;若否,则跳回到步骤501。步骤506:根据公式ram_wea[1:0]=ram_wea_single[1:0]+{ram_wea_single[1],1'b1}完成ram_wea控制信号的计算,并跳到步骤507。步骤507:锁定当前ram_wea的计算结果到ram_wea_single(即记录“上一次已完成的”单帧写数据操作的eMAC或pMAC报文与共享缓存模块之间的存储位置映射关系),并跳回到步骤501。其中,RAM0表示第一存储器,RAM1表示第二存储器;变量ram_wea_single是用于记录“上一次已完成的”单帧写数据操作的eMAC或pMAC报文与共享缓存模块之间的存储位置映射关系,这样当下一次再有单帧写数据操作时,可以计算出当前待写入报文数据的存储位置,以满足构成共享缓存模块的第一存储器和第二存储器的负载平衡。ram_wea[1:0]=2’b01表明占用RAM0,ram_wea[1:0]=2’b10表明占用RAM1,ram_wea[1:0]=2’b11表明占用RAM0和RAM1)。

在一种实现方式中,所述待写入报文数据包括若干子报文数据,且每一所述子报文数据与一种所述报文类型对应,若干所述存储器包括第一存储器和第二存储器,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,包括:

步骤S303、针对每一所述历史存储器选择信息,将与该历史存储器选择信息对应于同一报文类型的子报文数据作为目标子报文数据;

步骤S304、当该历史存储器选择信息为所述第一存储器时,确定所述目标子报文数据中单数数据块对应的目标存储器为所述第二存储器,确定所述目标子报文数据中双数数据块对应的目标存储器为所述第一存储器。

当待写入报文数据中对应多种报文类型时,需要将待写入报文数据拆分成多个子报文数据进行存储。具体地,针对每一种报文类型,如图7中506、图8中604的计算方法可以看出,本实施例需要通过交织存储的原则,将相邻两个数据块的存储位置位于不同的存储器中。从而实现在共享缓存模块中均匀存储待写入报文数据,最大化利用共享缓存模块的存储资源,使得第一存储器和第二存储器的负载达到动态平衡。举例说明,假设将待写入报文数据拆分为eMAC报文数据和pMAC报文数据。针对eMAC报文数据,若首块eMAC报文数据块的存储位置位于RAM1中,则第二块eMAC报文数据块的存储位置位于RAM0中,第三块eMAC报文数据块的存储位置位于RAM1中,第四块eMAC报文数据块的存储位置位于RAM0中,第五块eMAC报文数据块的存储位置位于RAM1中......;针对pMAC报文数据,若首块pMAC报文数据块的存储位置位于RAM1中,则第二块pMAC报文数据块的存储位置位于RAM0中,第三块pMAC报文数据块的存储位置位于RAM1中,第四块pMAC报文数据块的存储位置位于RAM0中,第五块pMAC报文数据块的存储位置位于RAM1中......。

在另一种实现方式中,所述根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,具体包括如下步骤:

步骤S305、当该历史存储器选择信息为所述第二存储器时,确定所述目标子报文数据中单数数据块对应的目标存储器为所述第一存储器,确定所述目标子报文数据中双数数据块对应的目标存储器为所述第二存储器。

由于本实施例将eMAC报文和pMAC报文的存储空间分配是根据实际接收的报文确定的,因此相比于传统802.3br的实现方案(即预先给eMAC报文和pMAC报文分配等额的最大带宽容量),本实施例可节省一半RAM资源。

在一种实现方式中,如图8所示,本实施例针对写数据操作提供一种算法,用于确定待写入报文数据类型与所述存储器之间的交织存储映射(所述存储器由图7算法所确定的ram_wea[1:0]选择得到,其每bit控制一个存储器,当ram_wea[0]为高电平时表示第一存储器被选中写入,当ram_wea[1]为高电平时表示第二存储器被选中写入):步骤601:判断当前时刻是否处于复位阶段。若是,则跳到步骤602;否则,跳到步骤603。步骤602:初始化变量xmac_sel_dual=2’b00,并跳回到步骤601。步骤603:判断当前eMAC和pMAC通道是否均发起了传输。若是,则跳到步骤604;若否,则跳到步骤606。步骤604:根据公式xmac_sel[1:0]=xmac_sel_dual[1:0]+{xmac_sel_dual[1],1'b1}完成xmac_sel控制信号的计算,并跳到步骤605。步骤605:锁定当前xmac_sel的计算结果到xmac_sel_dual(即记录“上一次已完成的”双帧写数据操作的eMAC、pMAC报文与共享缓存模块之间的存储位置映射关系),并跳回到步骤601。步骤606:判断当前时刻是否pMAC通道发起了传输。若是,则跳到步骤607;若否,跳到步骤608。步骤607:将xmac_sel控制信号切换成选中pMAC通道,即xmac_sel=2’b11,并跳回到步骤601。步骤608:将xmac_sel控制信号切换成选中eMAC通道,即xmac_sel=2’b00,并跳回到步骤601。

其中,RAM0表示第一存储器,RAM1表示第二存储器;变量xmac_sel_dual是用于记录“上一次已完成的”双帧写数据操作的eMAC、pMAC报文与共享缓存模块之间的存储位置映射关系,这样当下一次再有双帧写数据操作时,就可以计算出当前待写入报文数据中的eMAC、pMAC报文在共享缓存模块中的存储位置,以满足构成共享缓存模块的第一存储器和第二存储器的负载平衡。

如图1所示,所述方法还包括如下步骤:

步骤S400、将每一所述数据块存储至每一所述数据块对应的目标存储器中。

为了实现将待写入报文数据存储至共享缓存模块中,在确定待写入报文数据每一数据块对应的目标存储器以后,还需要将每一数据块写入其对应的目标存储器,即完成一次报文数据的存储过程。

在一种实现方式中,所述步骤S400具体包括如下步骤:

步骤S401、针对每一所述数据块,通过该数据块对应的目标存储器的存储器空间账簿,获取该数据块在该目标存储器中的目标存储位置;

步骤S402、将该数据块写入所述目标存储位置。

具体地,本实施例中用于构建共享缓存模块的每一个存储器均具有一个存储器空间账簿,用于管理和记录该存储器内的存储位置的使用情况。针对每一数据块,需要通过该数据块对应的目标存储器的存储器空间账簿为其支出一个空间存储位置,则该空闲存储位置即为该数据块的目标存储位置,将该数据块写入其对应的目标存储位置,即完成该数据块的存储。

在一种实现方式中,所述步骤S402之后还包括如下步骤:

步骤S403、获取预先构建的报文链表;

步骤S404、根据该数据块与所述目标存储位置对所述报文链表进行更新,得到更新报文链表,其中,所述报文链表用于反映数据块与存储位置的对应关系。

具体地,为了方便后续读取报文数据,本实施例将待写入报文数据存储完毕后,还需要更新原始的报文链表,得到更新报文链表。其中,该报文链表用于反映每一数据块与其存储位置之间的对应关系(如图5所示)。

在一种实现方式中,所述根据该数据块与所述目标存储位置对所述报文链表进行更新,具体包括如下步骤:

步骤S501、针对每一所述数据块,根据该数据块与所述目标存储位置生成更新地址指针;

步骤S502、根据所述更新地址指针对所述报文链表进行更新。

具体地,本实施例中的报文链表是以地址指针的方式反映数据块与存储位置之间的对应关系的。当需要读取该数据块时,通过查找该数据块对应的地址指针即可直接访问该数据块的存储位置,并成功读取该数据块。因此通过报文链表,可以准确地从共享缓存模块中索引出任意完整的报文。

在一种实现方式中,本实施例还提供一种数据读取方法,所述数据读取方法包括:

获取读数据操作指令;

根据所述读数据操作指令从历史空间分配记录中确定目标存储器及其地址指针;

根据所述目标地址指针从所述目标存储器中获取目标报文数据。

在一种实现方式中,所述数据读取方法还包括:

当获取到目标报文数据后,将所述目标存储器中与所述目标地址指针所对应的存储位置标记为空闲位置。

具体地,为了对共享缓存模块的存储空间进行统一管理,本实施例设置了一个控制器模块,该控制器模块主要用于实现两方面的功能:1、管理共享缓存模块中的空闲存储空间。2、构建和维护历史空间分配记录。其中,管理共享缓存模块中的空闲存储空间主要包含对存储位置的分配和回收,即在写数据操作时,对空闲存储位置进行分配;在读数据操作以后,对被取出报文数据的存储位置进行回收,让回收的存储位置参与再分配。通过这种“分配-回收”的循环机制让共享缓存模块的存储空间得到最大程度的利用。

因此,在一种实现方式中,针对每一存储器对应的存储器空间账簿,当支出一个空闲存储位置后,需要在该存储器空间账簿中将分配出去的空闲存储位置对应的地址指针删除;当回收一个可用存储位置以后,需要在对应的空间账簿中录入该可用存储位置对应的地址指针。此外,系统复位的初始时刻,由需要对每一存储器空间账簿完成初始化,将每一存储器空间账簿对应的所有地址指针都录入该存储器空间账簿中。

在一种实现方式中,每一报文链表也具有其对应的链表管理模块。其中,针对每一报文链表,该报文链表对应的链表管理模块用于管理和记录该报文链表对应的报文类型的报文数据。例如,eMAC链表管理模块用于管理和记录eMAC报文。如图5所示,报文链表由一个或多个表项组成的数据链,其本质是一串地址指针,即每一个表项所存储的内容均为与之相对应的报文体的存储地址,用链表可以记录和维持报文数据在物理存储空间上的先后顺序关系。具体地,报文链表中表项的最高位为第一存储器(RAM0)和第二存储器(RAM1)指示信号,1’b0表示映射到第一存储器,1’b1表示映射到第二存储器;其余位则为与之对应的存储器的地址指针。举例说明,以16深度的RAM举例说明,图5左侧中的RAM0和RAM1中的字符内容标示了报文的存储详情(以圆括弧中的数值标示报文数据的先后顺序关系,借助箭头指向图形化示意)。右侧emac_chain、pmac_chain则为与左侧报文存储实例相对应的eMAC、pMAC的报文链表。在报文数据存入共享缓存模块时,eMAC链表管理模块和pMAC链表管理模块随即就记录了各自的报文链表。从图5中可以看出,报文数据并不是连续存储的,而是杂散分布在RAM0和RAM1中的各个存储位置。当需要取出报文时,必须借助各报文链表的指引,才能准确恢复存放于共享缓存模块中的eMAC和pMAC的报文数据。

在一种实现方式中,由于实际使用过程中,某时间段内报文数据的写入和读出数据可能出现非对称的现象,因此当所述第一存储器和所述第二存储器中任意一个存储器的存储空间耗尽时,将另一个存储器作为目标存储器,并将目标存储器设置为仅接受单帧写数据操作。在一种实现方式中,考虑到不同数据通道接收的报文数据的优先级不同,因此将所述目标存储器设置为仅接受单帧写数据操作,且所述单帧写数据操作所写入的报文数据为预设报文类型。举例说明,考虑到eMAC的优先级较高,当只有目标存储器还有存储空间时,向pMAC的前级模块发出数据流反压信号,阻断pMAC的报文数据写入目标存储器,将目标存储器的剩余存储空间留给eMAC使用。在一种实现方式中,当第一存储器和第二存储器的存储空间均耗尽时,向各个数据通道的前级模块共同发出流反压信号,阻断任何报文数据写入。具体地,由于第一存储器和第二存储器的存储空间均耗尽,共享缓存模块已经没有任何存储位置了,防止上游模块持续以超过物理接口的带宽的速率超发报文,造成报文的丢失,本实施例需要阻断任何报文数据写入。

在一种实现方式中,如图9所示,本实施例提供一种完整的写数据操作对应的流程控制,用于存储报文数据:步骤701:系统复位,复位结束后,跳到步骤702。步骤702:判断共享缓存中的两块RAM是否都被写满。若是,则跳到步骤703;否则,跳到步骤704。步骤703:向eMAC和pMAC通道的前级模块发出数据流反压信号,阻断任何报文数据的写入,并返回到步骤702。

步骤704:判断共享缓存中的两块RAM是否一块被写满,另一块未被写满。若是,则跳到步骤705;否则,跳到步骤706继续执行。步骤706:判断与前级模块相连的Sub MAC通道(含eMAC、pMAC)是否发起了报文传输。若是,则跳到步骤707继续执行;否则,则返回步骤702。步骤707:根据xmac_sel[1:0]、ram_sel[1:0]控制算法(上文步骤501至步骤507,步骤601至步骤608)计算得到当前三端口RAM的xmac_sel[1:0]、ram_sel[1:0]值,并跳到步骤708。步骤708:根据步骤707计算得到的xmac_sel[1:0]、ram_sel[1:0]写控制信息,从对应的ram(x)_space_account中取出待写空间的写地址指针。当逻辑表达式xmac_wea[0]&(xmac_wea[1]&xmax_sel[0]||!xmac_wea[1])等于1时,从ram1_space_account取出待写空间的写地址指针,反之从ram0_space_account取出待写空间的写地址指针(此处不对逻辑表达式与ram(x)_space_account的映射过程做详细的推理论证,可反向进行验证)。跳到步骤709。步骤709:根据步骤707计算得到的xmac_sel[1:0]写控制信息,以及步骤708获取的写地址指针,将Sub MAC报文数据(含data以及sop、eop、mod等随路控制信息)写入到步骤708获取的写地址指针指向的缓存空间,并跳到步骤710。步骤710:根据eMAC、pMAC报文类型分别将其地址指针和RAM bank指示拼成一个链表表项写入到emac_chain_manager/pmac_chain_manager中,并返回到步骤702。

在一种实现方式中,如图10所示,本实施例提供一种读数据操作对应的流程控制,用于读取报文数据:步骤801:系统复位。当复位结束后,跳到步骤802。步骤802:判断当前共享缓存的eMAC报文链表是否非空。若是,则跳到步骤803;否则,跳到步骤808。步骤803:判断当前pMAC通道是否正在传输。若是,则跳到步骤804;否则,跳到步骤807。步骤804:判断pMAC是否满足帧抢占条件,即当前切片帧的帧长和剩余切片帧的帧长均大于等于64byte。若是,则跳到步骤806;否则跳到步骤805。步骤805:继续当前pMAC的报文传输,并跳回到步骤804和步骤809。步骤806:暂停pMAC传输,根据eMAC共享链表,从共享缓存中读出eMAC报文数据,开始进行eMAC报文的传输,完成eMAC对pMAC的抢占。跳到步骤810继续执行。步骤807:根据eMAC共享链表,从共享缓存中读出eMAC报文数据,开始进行eMAC报文的传输,并跳到步骤810继续执行。步骤808:判断当前共享缓存的pMAC报文链表是否非空。若是,则跳到步骤809;否则,跳回到步骤801。步骤809:根据pMAC共享链表,从共享缓存中读出pMAC报文数据,开始进行pMAC报文的传输,并跳到步骤810。步骤810:根据链表中最高bit的RAM bank指示信息,将取出报文的地址指针回收至对应的ram(x)_space_account中(若最高bit指示为RAM0,则回收至ram0_space_account;若最高bit指示为RAM1,则回收至ram1_space_account),并跳回到步骤801。

基于上述实施例,本发明还提供一种数据存储装置,如图11所示,所述装置包括:数据获取模块01,用于获取待写入报文数据,确定所述待写入报文数据对应的报文类型;信息获取模块02,用于所述历史存储器选择信息用于反映目标历史报文数据中最后一个数据块所落存的存储器,其中,所述目标历史报文数据为最近一次写入所述报文类型的报文数据;存储器选择模块03,用于根据所述历史存储器选择信息,从所述共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,其中,所述共享缓存模块由若干存储器构成;数据写入模块04,用于将每一所述数据块存储至每一所述数据块对应的目标存储器中。

在一种实现方式中,所述共享缓存模块包括第一存储器和第二存储器,所述第一存储器和所述第二存储器的结构相同,均为双端口随机存取存储器。具体地,传统共享缓存的设计都是基于时分复用的方式实现,这种串行共享的机制,并不适用于802.3br eMAC和pMAC双路并发的应用场景。802.3br的eMAC和pMAC通道需并发接收上游的eMAC报文和pMAC报文,所以共享缓存模块至少需要两个独立的写接口。与此同时,共享缓存模块需要在MACMerge Sublayer给出的pmac_been_preempted控制信号的作用下,取出已有写入到共享buffer中的eMAC或pMAC的报文数据送给MAC Merge Sublayer,所以共享缓存模块还需要支持一个读操作接口。简言之,共享缓存模块必须要支持三端口(两写一读)操作。由于数字芯片设计中最多只能提供双端口RAM,因此本实施例需要对双端口RAM(Simple Dual PortRAM或True Dual Port RAM)进行一定的拼接和扩展,得到“Simple Tri Port”接口形态的共享缓存模块,使扩展后的共享缓存模块可以支持两写一读的数据操作。一个三端口RAM由两个双端口RAM扩充而来,本实施例将组成共享缓存模块的两个双端口RAM定义为第一存储器和第二存储器。

在一种实现方式中,如图4所示,本实施例提供一种共享缓存模块的设计框图,其中,标号301、302、303、304的接口信号分别与图2中的标号201、202、203、204的流信号对应。其接口信号说明如下表所示:

表1.接口信号说明

在一种实现方式中,所述共享缓存模块内部模块包含了2块双端口RAM,电路的详细设计如图6所示,其中,标号401、402、403为二选一MUX电路,MUX电路中的通道0,1的标识与选择信号的极性对应。举例说明,针对402MUX电路,当选择信号xmac_raddr[MSB](MSB:the most significant bit)为1时,MUX电路即选择从第二存储器(RAM1,标号404)的双端口输出;反之当xmac_raddr[MSB]为0时,MUX电路即选择从第一存储器(RAM0,标号405)的双端口输出。

此外,标号406为反相器,实现电平极性取反功能。标号404、405为简单双端口RAM,双端口RAM一共有A、B两个端口。其中,A端口为写数据端口(clka、addra、dina、wea、ena分别为时钟信号,写地址信号,写数据信号,写使能信号,端口使能信号),B端口为读数据端口(clkb,addrb,doubt,enb;接口信号的含义同port A写端口)。由于eMAC和pMAC的报文数据在经过MAC Merge Sublayer之后就变成了一个通道,该通道即为xMAC,其可能传输的是eMAC报文数据,也有可能传输的是pMAC报文数据。

标号407的信号{emac_waddr,emac_wdata}、{pmac_waddr,pmac_wdata}均为拼接信号,即用两个小位宽的信号拼接成一个大位宽的信号。举例说明,针对信号{emac_waddr,emac_wdata},emac_waddr为从图4中ram(x)_space_account中获取的eMAC报文的地址指针,emac_wdata为eMAC报文data和sop、eop、mod等随路控制信号的拼接。当标号402的MUX电路的选择控制信号xmac_sel[1](标号413)为0时,MUX的输出信号(标号409)即等于MUX 0通道的输入信号(标号408){emac_waddr,emac_wdata}。{emac_waddr,emac_wdata}的拼接信号按功能拆分成xmac_waddr(标号410)和xmac_wdata(标号411)分别送到RAM1(标号405)的addra和dina接口,即实现将emac_wdata所表示的报文数据写入到emac_waddr所指向的地址空间。

xmac_raddr为图4中emac_chain_manager或pmac_chain_manager(取决于当前MACMerge Sublayer是eMAC读还是pMAC读)读出的链表表项中的地址。xmac_raddr[MSB]表示xmac_raddr信号的最高位,xmac_raddr[MSB-1:0]表示xmac_raddr信号除最高位后的其余bit位。

标号412为xmac_raddr[MSB]和xmac_rd_en信号进行逻辑与操作后的结果。根据链表表项的定义,xmac_raddr[MSB]对应RAM0、RAM1的指示信号,即当xmac_raddr[MSB]为0时,从RAM0的xmac_raddr[MSB-1:0]地址空间读出数据,反之从RAM1的xmac_raddr[MSB-1:0]地址空间读出数据,记为xmac_rdata(标号413)。最后再根据写入时emac_wdata/pmac_wdata数据拼接格式,从读数据xmac_rdata(标号413)中以相同的格式分离出xmac_rd_data、xmac_rd_sop、xmac_rd_eop、xmac_rd_mod。xmac_rd_valid可由xmac_rd_en经寄存器打拍输出(寄存器的级数与RAM的读数据延时相等)。

基于上述实施例,本发明还提供了一种终端,其原理框图可以如图12所示。该终端包括通过系统总线连接的处理器、存储器、网络接口、显示屏。其中,该终端的处理器用于提供计算和控制能力。该终端的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该终端的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现数据存储方法。该终端的显示屏可以是液晶显示屏或者电子墨水显示屏。本领域技术人员可以理解,图12中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。在一种实现方式中,所述终端的存储器中存储有一个或者一个以上的程序,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行数据存储方法的指令。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(RAMbus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。需要强调的是,本发明的主要应用领域不仅包括终端,还包括交换机、路由器。

综上所述,本发明公开了一种数据存储方法、装置、终端及存储介质,通过获取待写入报文数据,确定所述待写入报文数据对应的报文类型;获取历史存储器选择信息,所述历史存储器选择信息用于反映目标历史报文数据中最后一个数据块所落存的存储器,其中,所述目标历史报文数据为最近一次写入所述报文类型的报文数据;根据所述历史存储器选择信息,从共享缓存模块中确定所述待写入报文数据中每一数据块对应的目标存储器,其中,所述共享缓存模块由若干存储器构成;将每一所述数据块存储至每一所述数据块对应的目标存储器中。由于本发明中的共享缓存模块可以存储不同类型的报文数据,不用为每一种报文数据分别配置一个单独的RAM,因此可以解决现有技术中为eMAC和pMAC两个数据通道分别配备一个最大带宽容量的RAM,导致存储资源浪费的问题。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

30页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:网络资源配置方法、装置、计算机设备和存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!