CN103746940B - 一种网络设备以及解包输出报文的方法 - Google Patents
一种网络设备以及解包输出报文的方法 Download PDFInfo
- Publication number
- CN103746940B CN103746940B CN201310746676.0A CN201310746676A CN103746940B CN 103746940 B CN103746940 B CN 103746940B CN 201310746676 A CN201310746676 A CN 201310746676A CN 103746940 B CN103746940 B CN 103746940B
- Authority
- CN
- China
- Prior art keywords
- address
- ring
- read
- starting
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Transfer Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种网络设备,包括:环状缓存,写指针寄存器,第一加法器,读指针寄存器,第二加法器,由于在网络设备中采用环状缓存保存写指针寄存器写入的报文段,读指针寄存器保存起始读地址,写指针寄存器保存起始写地址,加法器根据读或写指针寄存器读或写出的报文段的组数量更新起始读或写地址,因此,可以根据读指针寄存器以及写指针寄存器所保存的起始地址找到正确的写入位置以及读出位置,无需在缓存中移动报文段去确保正确的读/写位置,实现了网络设备在解包输出报文时无需进行数据移动操作,提高效率的目的。另外,本发明实施例还公开了一种解包输出报文的方法。
Description
技术领域
本发明涉及计算机网络领域,特别涉及一种网络设备以及解包输出报文的方法。
背景技术
随着网络芯片的带宽不断增加,很多外部端口使用多组数据总线拼包的模式进行数据传输。因此,网络芯片通常会同时收到多组报文段,同时收到的多组报文段可能属于同一个报文,也可能属于不同的多个报文。然而,由于网络芯片不支持同时对多个报文进行处理,因此,需要将所收到的多组报文段进行解包,每次输出属于同一个报文的1个或多个报文段。
目前,主要采用队列式缓存对报文段进行缓存,通过流水推送的机制进行报文段的解包和输出。所谓流水推送的机制是指,总是从队列式缓存的保存有有效报文段的最后一组寄存器后开始写入所收到的报文段,其中,一组报文段写入一组寄存器,相当于解包,总是从队列式缓存的第一组寄存器开始输出属于同一报文的报文段,当有报文被输出后,需要将其他未输出的报文段向第一组寄存器方向顺序移动,从而使得最后一个有效报文段向前移动以增加新的空闲存储空间去接受新写入的报文段,保证输出时可以简单地遵循地址顺序输出正确的报文,同时可以根据第一组寄存器以及最后一组有效报文段简单地找到正确的读/写位置。
但是,由于这种流水推送的机制需要在队列式缓存中进行大量的移动操作,因此,效率较低。
发明内容
有鉴于此,本发明实施例的主要目的在于提供一种网络设备以及解包输出报文的方法以实现网络设备在解包输出报文时无需进行数据移动操作,从而提高效率的目的。
为了解决以上技术问题,本发明实施例采取的技术方案是:
第一方面,本发明实施例提供了一种网络设备,所述网络设备包括:
环状缓存,用于保存写指针寄存器写入的报文段;
写指针寄存器,用于保存环状缓存的起始写地址,当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存,其中,一个地址写入一组报文段;根据第一加法器计算出的更新的起始写地址,对保存的起始写地址进行更新;
第一加法器,用于根据写指针寄存器写入所述环状缓存的报文段的组数量计算出更新的起始写地址;
读指针寄存器,用于保存环状缓存的起始读地址,当需要输出报文时,从所述环状缓存的起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段,输出所读出的报文段,根据第二加法器计算出的更新的起始读地址,对保存的起始读地址进行更新;
第二加法器,用于根据读指针寄存器所读出的报文段的组数量计算出更新的起始读地址。
在第一方面的第一种可能的实现方式中,所述写指针寄存器,具体用于当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述第一加法器,用于根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址;
且还包括:
第一比较器,用于判断所述当前时钟周期之前,所述环状缓存所保存的一个报文段是否包含报文尾标志;
第二比较器,用于每当读指针寄存器从一个地址读出报文段时,判断该地址的报文段是否包含报文尾标志;
其中,所述读指针寄存器,具体用于如果第一比较器判断出所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果第二比较器判断出该地址的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述第二加法器,具体用于根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递增M个地址,计算出更新的起始读地址,所述M为所述读指针寄存器在所述当前时钟周期内所读出的报文段的组数量。
在第一方面的第二种可能的实现方式中,所述写指针寄存器,具体用于当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递减的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述第一加法器,具体用于根据所述更新的起始写地址等于所述环状缓存的起始写地址开始递减N个地址,计算出更新的起始写地址;
且,还包括:
第一比较器,用于判断所述当前时钟周期之前,所述环状缓存所保存的还未被输出的一个报文段是否包含报文尾标志;
第二比较器,用于判断所述读指针寄存器所读出的报文段是否包含报文尾标志;
其中,所述读指针寄存器,具体用于如果第一比较器判断出所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,则在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递减地址读出报文段,每当从一个地址读出报文段时,如果第二比较器判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述第二加法器,具体用于根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递减M个地址,计算出更新的起始读地址,所述M为所读出的报文段的组数量。
结合第一方面的第一种可能的实现方式到第二种可能的实现方式中的任一种,在第三种可能的实现方式中,还包括:
第三加法器,用于当所述写指针寄存器将所接收的报文段写入所述环状缓存时,将有效数据数量加上写入的报文段的组数量,当所述读指针寄存器从所述环状缓存读出报文段时,将有效数据量减去读出的报文段的组数量;
第三比较器,用于判断所述有效数据数量是否达到缓存阈值;
其中,所述写指针寄存器,用于当所述第三比较器判断为是时,禁止向所述环状缓存进行写入操作,当所述第三比较器判断为否时,允许向所述环状缓存进行写入操作。
结合第一方面的第一种可能的实现方式到第二种可能的实现方式中的任一种,在第四种可能的实现方式中,还包括:第四比较器,用于每当所述读指针寄存器从所述环状缓存读出属于同一报文的一个报文段时,判断所述读指针寄存器在当前时钟周期内所读出的报文段的总位宽是否达到输出位宽阈值;所述读指针寄存器,用于当第四比较器判断为是时结束当前时钟周期的读操作;
或者,
第五比较器,用于判断所述环状缓存中所有未输出的报文段是否不包含报文尾标志且所述未输出的报文段的总位数达到输出位宽阈值;
所述读指针寄存器,用于当第五比较器判断为是时确定需要输出报文。
第二方面,本发明实施例提供了一种解包输出报文的方法,所述方法包括:
保存环状缓存的起始写地址以及起始读地址,其中,所述环状缓存用于保存所写入的报文段;
当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存,其中,一个地址写入一组报文段;根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址;根据计算出的更新的起始写地址,对保存的起始写地址进行更新;
当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段;输出所读出的报文段;根据所读出的报文段的组数量计算出更新的起始读地址;根据计算出的更新的起始读地址,对保存的起始读地址进行更新。
在第二方面的第一种可能的实现方式中,所述当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存包括:当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址包括:根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址;
所述当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段包括:如果在所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述根据所读出的报文段的组数量计算出更新的起始读地址包括:根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递增M个地址,计算出更新的起始读地址,所述M为在所述当前时钟周期内所读出的报文段的组数量。
在第二方面的第二种可能的实现方式中,所述当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存包括:当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递减的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址包括:根据所述更新的起始写地址等于所述环状缓存的起始写地址开始递减N个地址,计算出更新的起始写地址;
所述当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段包括:如果在所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,则在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递减地址读出报文段,每当从一个地址读出报文段时,如果判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述根据所读出的报文段的组数量计算出更新的起始读地址包括:根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递减M个地址,计算出更新的起始读地址,所述M为所读出的报文段的组数量。
结合第二方面的第一种可能的实现方式到第二种可能的实现方式中的任一种,在第三种可能的实现方式中,当将所接收的报文段写入所述环状缓存时,还包括:将有效数据数量加上写入的报文段的组数量;
当从所述环状缓存读出报文段时,还包括:将有效数据量减去读出的报文段的组数量;
且还包括:
判断所述有效数据数量是否达到缓存阈值;
当判断为是时,禁止向所述环状缓存进行写入操作;
当判断为否时,允许向所述环状缓存进行写入操作。
结合第二方面的第一种可能的实现方式到第二种可能的实现方式中的任一种,在第四种可能的实现方式中,还包括:
每当从所述环状缓存读出属于同一报文的一个报文段时,判断在当前时钟周期内所读出的报文段的总位宽是否达到输出位宽阈值;当判断为是时结束当前时钟周期的读操作;
或者,
判断所述环状缓存中所有未输出的报文段是否不包含报文尾标志且所述未输出的报文段的总位数达到输出位宽阈值;当判断为是时确定需要输出报文。
可见本发明实施例具有如下有益效果:
由于本发明实施例采用环状缓存保存写指针寄存器写入的报文段,读指针寄存器与写指针寄存在环状缓存中采用一致的地址顺序进行读或者写报文段操作,因此,在读指针寄存器从环状缓存读出报文段的同时,被释放的存储位置就成为了最后一个存有有效报文段的位置之后的新的空闲存储位置,无需在缓存中移动报文段去释放存储空间,在输出时可以简单地遵循地址顺序输出正确的报文,而且,由于读指针寄存器保存起始读地址,写指针寄存器保存起始写地址,当写指针寄存器从起始写地址开始将所接收的报文段逐组顺序地写入所述环状缓存后,根据写指针寄存器写入所述环状缓存的报文段的组数量更新起始写地址,当读指针寄存器从起始读地址开始读出属于同一报文的报文段后,根据读指针寄存器读出的报文段的组数量更新起始读地址,因此,可以根据读指针寄存器以及写指针寄存器所保存的起始地址找到正确的写入位置以及读出位置,无需在缓存中移动报文段去确保正确的读/写位置,实现了网络设备在解包输出报文时无需进行数据移动操作,提高效率的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的网络设备结构示意图之一;
图2是本发明实施例提供的网络设备结构示意图之二;
图3是本发明实施例提供的网络设备结构示意图之三;
图4是本发明实施例提供的解包输出报文的方法流程示意图之一;
图5是本发明实施例提供的解包输出报文的方法流程示意图之二;
图6是本发明实施例提供的解包输出报文的方法流程示意图之三;
图7是本发明实施例提供的解包输出报文的方法流程示意图之四;
图8是本发明实施例提供的解包输出报文的方法流程示意图之五。
具体实施方式
为使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明实施例作进一步详细的说明。
目前,例如Interlaken(芯片间高速数据传输协议)等接口的发展趋势是使用多组数据总线拼接构成一个宽的数据总线,在Interlaken等接口与内部模块连接时,由于内部模块不支持同时对多个报文进行处理,必然需要解包输出功能,本发明实施例适用于这类应用场景,能够提高解包输出效率。
例如,请参阅图1所示的本发明实施例提供的网络设备结构示意图之一。其中,本实施例所述的网络设备可以为网络芯片等任意需要解包输出报文的网络设备。如图所示,所述网络设备可以包括:
环状缓存110,可以用于保存写指针寄存器写入的报文段;
写指针寄存器120,可以用于保存环状缓存的起始写地址,当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存,其中,一个地址写入一组报文段;根据第一加法器130计算出的更新的起始写地址,对保存的起始写地址进行更新;
需要说明的是,所述将网络设备所接收到的至少一组报文段进行缓存的时机可以根据实施需要,在满足预设写入条件时确定,例如,可以在当前时钟周期内接收到报文段之后,确定需要将网络设备所接收到的报文段进行缓存。或者,也可以有其他实现方式,在本发明中并不进行限制。
第一加法器130,可以用于根据写指针寄存器120写入所述环状缓存110的报文段的组数量计算出更新的起始写地址;
读指针寄存器140,可以用于保存环状缓存的起始读地址,当需要输出报文时,从所述环状缓存的起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段,输出所读出的报文段,根据第二加法器计算出的更新的起始读地址,对保存的起始读地址进行更新;
需要说明的是,可以根据实际需要,设置满足预设读出条件时确定需要输出报文。例如,可以在环状缓存中至少有一个未输出的报文段有报文尾标志时,或者环状缓存中未输出的属于同一报文的报文段超出一定阈值时,确定需要输出报文,或者,也可以有其他实现方式,在本发明中并不进行限制。
其中,当读出的报文段为多组时,可以拼包后输出。相当于将输入端口的多个数据总线传输的报文段按照输出端的位宽输出,实现接口位宽转换和解拼包功能。
第二加法器150,可以用于根据读指针寄存器140所读出的报文段的组数量计算出更新的起始读地址。
可见,在本实施例中,当网络设备输入端同时接收到多组数据总线输入的多组报文段时,由于在网络设备中采用环状缓存110保存写指针寄存器120写入的报文段,因此,在读指针寄存器140从环状缓存110读出报文段的同时,被释放的存储位置就成为了最后一个存有有效报文段的位置之后的新的空闲存储位置,无需在缓存中移动报文段去释放存储空间,在输出时可以简单地遵循地址顺序输出正确的报文,而且,由于读指针寄存器保存起始读地址,写指针寄存器保存起始写地址,根据读或写指针寄存器读或写出的报文段的组数量更新起始读或写地址,因此,可以根据读指针寄存器以及写指针寄存器所保存的起始地址找到正确的写入位置以及读出位置,无需在缓存中移动报文段去确保正确的读/写位置,实现了网络设备在解包输出报文时无需进行数据移动操作,提高效率的目的。
需要说明的是,本发明实施例所述的环状缓存110可以使用若干组寄存器或者静态随机存储器(SRAM,Static RAM)搭建构成,具体可以根据应用场景需要搭建。例如,由于寄存器读写速度较快,可以使用寄存器搭建环状缓存。具体地,例如,可以使用若干组寄存器搭建成线性缓存,再由最后一组寄存器记录第一组寄存器的地址,从而形成环状缓存。其中,一组寄存器对应环状缓存的一个地址。在本发明实施例中,由于环状缓存的一个地址写入一组报文段,因此,可以根据报文段的位宽以及缓存深度确定需要使用的寄存器的数量。例如,在一种可能的应用场景下,如果一组报文段的位宽是134bit,那么环状缓存的一个地址就需要134bit的寄存器,换句话说,在一个寄存器为1bit的情况下,一组寄存器要有134个寄存器,如果环状缓存的缓存深度或称环状缓存的地址个数为8,那么总共需要134*8个寄存器就能够搭建出该场景下所需要的环状缓存。
可以理解的是,所述环状缓存110能够存储的有效报文段的数量是由缓存深度决定的。因此,为了避免写入的报文段的数量超过环状缓存110的缓存深度而导致数据溢出,可以预先设置缓存阈值,在读/写报文段的过程中,利用第三加法器111对环状缓存中所存储的有效报文段的数量进行计算,再利用第三比较器112对有效报文段的数量与缓存阈值进行比较以确定是否禁止或允许写入。具体地,例如,参见图2所示本发明实施例提供的网络设备结构示意图之二,所述网络设备还可以包括:
第三加法器111,可以用于当所述写指针寄存器120将所接收的报文段写入所述环状缓存110时,将有效数据数量加上写入的报文段的组数量,当所述读指针寄存器120从所述环状缓存110读出报文段时,将有效数据量减去读出的报文段的组数量;
第三比较器112,可以用于判断所述有效数据数量是否达到缓存阈值;
所述写指针寄存器140,可以用于当所述第三比较器112判断为是时,禁止向所述环状缓存110进行写入操作,当所述第三比较器112判断为否时,允许向所述环状缓存110进行写入操作。
另外,利用有效数据数量还可以用来判断是否需要进行读操作,例如,当有效数据数量为零时,所述读指针寄存器不需要进行是否输出报文的判断,当有效数据数量大于零时,所述读指针寄存器需要进行是否输出报文的判断。
在一些可能的实施方式中,由于读指针寄存器140在一个时钟周期内所读出以及输出的报文段的总位宽需要与输出端的数据总线的位宽相适应,因此,为了一个时钟周期内所输出的报文段的总位宽不超出输出端的数据总线的位宽,可以预先根据输出端的数据总线的位宽设置输出位宽阈值,利用该输出位宽阈值去限制读指针寄存器140在一个时钟周期内所输出的报文段的总位宽。具体地,如图2所示,所述网络设备还可以包括:
第四比较器141,可以用于每当所述读指针寄存器140从所述环状缓存110读出属于同一报文的一个报文段时,判断所述读指针寄存器140在当前时钟周期内所读出的报文段的总位宽是否达到输出位宽阈值;
其中,所述读指针寄存器140,可以用于当第四比较器141判断为是时结束当前时钟周期的读操作。
可见,该实施例可以在读指针寄存器读报文段的过程中对当前时钟周期内读出的报文段的总位宽进行限制。
另外,在某些应用场景下可能会根据收到包含报文尾标志的报文段确定需要输出报文,在这些应用场景下,当收到属于同一报文的较多报文段却未收到报文尾标志时,可能会需要一直等待报文尾标志而无法输出报文,同时也无法及时释放环状缓存的存储空间,造成效率低下。为了避免这一问题,如图2所示,所述网络设备还可以包括:
第五比较器142,可以用于判断所述环状缓存中所有未输出的报文段是否不包含报文尾标志且所述未输出的报文段的总位数达到输出位宽阈值;
其中,所述读指针寄存器140,可以用于当第五比较器判断为是时确定需要输出报文。
可见,在该实施例中,如果收到属于同一报文的较多报文段却未收到报文尾标志,可以根据未输出的报文段的总位数达到输出位宽阈值及时确定需要输出报文,进而提高效率。
可以理解的是,由于本发明实施例中写指针寄存器以及读指针寄存器按环状缓存的地址顺序将报文段逐组写入或读出,因此,所述地址顺序具体可以为递增的顺序,也可以为递减的顺序。例如:
在本发明实施例一种可能的实现方式中,写指针寄存器120和读指针寄存器140可以按照地址递增的顺序写或者读。具体地,例如:
所述写指针寄存器120,具体可以用于当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述第一加法器130,具体可以用于根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址;
且,如图3所示,还可以包括:
第一比较器160,可以用于判断所述当前时钟周期之前,所述环状缓存所保存的一个报文段是否包含报文尾标志;
第二比较器170,可以用于每当读指针寄存器从一个地址读出报文段时,判断该地址的报文段是否包含报文尾标志;
其中,所述读指针寄存器140,具体可以用于如果第一比较器160判断出所述当前时钟周期之前,所述环状缓存110所保存的一个报文段包含报文尾标志,则在所述当前时钟周期内从环状缓存110的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果第二比较器170判断出该地址的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述第二加法器150,具体可以用于根据所述更新的起始读地址等于所述起始读地址递增M个地址,计算出更新的起始读地址,其中,所述M为所述读指针寄存器在所述当前时钟周期内所读出的报文段的组数量。
需要说明的是,由于该实施例采用地址递增的顺序读写,因此,读指针寄存器保存的起始读地址以及写指针寄存器保存的起始写地址在复位后初始状态时,均可以为0。
下面,结合以下两个示例,对该实施例进行详细说明。
例如,在一种可能的应用场景下,假设输入为2组数据总线输入,每组总线都有相应的VLD(valid,报文有效标志)/SOP(start of packet,报文头标志)/EOP(end ofpacket,报文尾标志),其中,每组总线在一个时钟周期内输入128bit的报文段数据,需要解包输出到384bit位宽的数据总线上,输出总线上只有一组VLD/SOP/EOP标志和384bit数据。针对该应用场景,至少需要搭建缓存深度为4的环状缓存,例如,可以搭建缓存深度为5的环状缓存,每个缓存地址可以存储128bit数据和一些报文信息的环状缓存。另外,还需要一个至少为log2(4)bit的写指针寄存器去记录起始写地址,一个至少为log2(4)bit的读指针寄存器去记录起始读地址。当复位完成后,写指针寄存器记录的起始写地址以及读指针寄存器记录的起始读地址均为0。下面,对本发明实施例提供的网络设备在以下几个时钟周期内的解包输出报文的过程进行介绍:
第1时钟周期:写指针寄存器从环状缓存的地址0开始,写入2组报文段,都没有EOP标志;
第2时钟周期,写指针寄存器记录的起始写地址更新为2,读指针寄存器的起始读地址为0,第一比较器判断出第2时钟周期之前环状缓存内没有任何一个报文段包含EOP标志,因此,在该第2时钟周期内,不能输出报文,在该第2时钟周期内写入1组报文段,拥有EOP标志;
第3时钟周期,写指针寄存器记录的起始写地址更新为3,读指针寄存器记录的起始读地址仍为0,由于第一比较器判断出该第3时钟周期之前,环状缓存保存的一个报文段包含EOP标志,因此,读指针寄存器从地址0开始,逐个递增地址读出报文段,直到遇到EOP标志,当前时钟周期的读操作结束,共读出3组报文段,将该3组报文段拼接起来输出;在该第3时钟周期内写入2组报文段,都拥有EOP标志;
第4时钟周期,写指针寄存器记录的起始写地址更新为0(由于上一时钟周期写入2组报文段,从地址3递增2个地址,由于缓存深度为5,即该环状缓存的地址包括0,1,2,3,4,因此,从第3个地址递增到第5个地址,第5个地址为地址0),读指针寄存器记录的起始读地址为3,由于第一比较器判断出该第4时钟周期之前,环状缓存保存的一个报文段包含EOP标志,因此,读指针寄存器从地址3开始,逐个递增地址读出报文段,直到遇到EOP标志,当前时钟周期的读操作结束,共读出1组报文段输出;在该第4时钟周期内写入2组报文段,第1组报文段有EOP标志;
第5时钟周期,写指针寄存器记录的起始写地址更新为2,读指针寄存器记录的起始读地址为4,由于第一比较器判断出该第5时钟周期之前,环状缓存保存的一个报文段包含EOP标志,因此,读指针寄存器从地址4开始,逐个递增地址读出报文段,直到遇到EOP标志,当前时钟周期的读操作结束,共读出1组报文段输出;
第6时钟周期,写指针寄存器…(以此类推,在此不再赘述)。
再例如,在另一种可能的应用场景下,假设输入为3组数据总线输入,每组总线都有相应的VLD/SOP/EOP标志,其中,每组总线在一个时钟周期内输入128bit的报文段数据,需要解包输出到512bit位宽的数据总线上,输出总线上只有一组VLD/SOP/EOP标志和512bit数据。针对该应用场景,至少需要搭建缓存深度为6的环状缓存,例如,可以搭建缓存深度为8的环状缓存,每个缓存地址可以存储128bit数据和一些报文信息的环状缓存。另外,还需要一个至少为log2(6)bit的写指针寄存器去记录起始写地址,一个至少为log2(6)bit的读指针寄存器去记录起始读地址。当复位完成后,写指针寄存器记录的起始写地址以及读指针寄存器记录的起始读地址均为0。下面,对本发明实施例提供的网络设备在以下几个时钟周期内的解包输出报文的过程进行介绍:
第1时钟周期:写指针寄存器从环状缓存的地址0开始,写入1组报文段,有EOP标志;
第2时钟周期,写指针寄存器记录的起始写地址更新为1,读指针寄存器记录的起始读地址为0,第一比较器判断出第2时钟周期之前环状缓存内有一个报文段包含EOP标志,因此,在该第2时钟周期内,输出地址0保存的1组报文段,在该第2时钟周期内写入3组报文,均无EOP标志;
第3时钟周期,写指针寄存器记录的起始写地址更新为4,读指针寄存器记录的起始读地址为1,第一比较器判断出第3时钟周期之前环状缓存内没有报文段包含EOP标志,因此,该第3时钟周期不输出报文,在该第3时钟周期内写入3组报文,无EOP标志;
第4时钟周期,写指针寄存器记录的起始写地址更新为0,读指针寄存器记录的起始读地址为1,第一比较器判断出第4时钟周期之前环状缓存内没有EOP标志,但是,由于第五比较器判断出环状缓存中未输出的报文段的总位数达到输出位宽阈值(512bit),读指针寄存器根据第五比较器判断为是,确定需要输出报文,因此,读指针寄存器从地址1开始读出4组报文段(4组报文段的总位宽达到输出位宽阈值),输出所读出的4组报文段,本周期写入2组报文,第二组有EOP标志;
第5时钟周期,写指针寄存器记录的起始写地址更新为2,读指针寄存器记录的起始读地址为5,第一比较器判断出第5时钟周期之前环状缓存内有EOP标志,从读指针位置取出4组报文输出;
第6时钟周期,...(以此类推,不再赘述)。
在本发明实施例另一种可能的实现方式中,写指针寄存器120和读指针寄存器140可以按照地址递减的顺序写或者读。具体地,例如:
所述写指针寄存器120,具体可以用于当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递减的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述第一加法器130,具体可以用于根据所述更新的起始写地址等于所述环状缓存的起始写地址开始递减N个地址,计算出更新的起始写地址;
且,还包括:
第一比较器160,可以用于判断所述当前时钟周期之前,所述环状缓存所保存的还未被输出的一个报文段是否包含报文尾标志;
第二比较器170,可以用于判断所述读指针寄存器所读出的报文段是否包含报文尾标志;
其中,所述读指针寄存器140,具体可以用于如果第一比较器160判断出所述当前时钟周期之前,所述环状缓存110所保存的一个报文段包含报文尾标志,则在所述当前时钟周期内从环状缓存110的所述起始读地址开始逐个递减地址读出报文段,每当从一个地址读出报文段时,如果第二比较器170判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述第二加法器150,具体可以用于根据所述更新的起始读地址等于所述环状缓存110的起始读地址开始递减M个地址,计算出更新的起始读地址,所述M为所读出的报文段的组数量。
需要说明的是,由于该实施例采用地址递减的顺序读写,因此,读指针寄存器保存的起始读地址以及写指针寄存器保存的起始写地址在复位后初始状态时,均可以为所述环状缓存的存储地址中的最大值。
与上述本发明实施例提供的网络设备相对应的,本发明实施例还提供一种解包输出报文的方法。
请例如,请参阅图4所示的本发明实施例提供的解包输出报文的方法流程示意图之一。其中,本实施例所述的方法可以应用于任何需要解包输出报文的网络设备,例如网络芯片等。如图所示,所述方法可以包括:
S410、保存环状缓存的起始写地址以及起始读地址,其中,所述环状缓存用于保存所写入的报文段;
S420、当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存,其中,一个地址写入一组报文段;
S430、根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址;
S440、根据计算出的更新的起始写地址,对保存的起始写地址进行更新;
S450、当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段;
S460、输出所读出的报文段;
S470、根据所读出的报文段的组数量计算出更新的起始读地址;
S480、根据计算出的更新的起始读地址,对保存的起始读地址进行更新。
可见,在本实施例中,当网络设备输入端同时接收到多组数据总线输入的多组报文段时,由于在网络设备中采用环状缓存110保存写入的报文段,因此,在从环状缓存读出报文段的同时,被释放的存储位置就成为了最后一个存有有效报文段的位置之后的新的空闲存储位置,无需在缓存中移动报文段去释放存储空间,在输出时可以简单地遵循地址顺序输出正确的报文,而且,由于保存了起始读地址,写指针寄存器保存了起始写地址,根据读或写出的报文段的组数量更新起始读或写地址,因此,可以根据所保存的起始地址找到正确的写入位置以及读出位置,无需在缓存中移动报文段去确保正确的读/写位置,实现了网络设备在解包输出报文时无需进行数据移动操作,提高效率的目的。
需要说明的是,本发明实施例所述的环状缓存110可以使用若干组寄存器或者静态随机存储器(SRAM,Static RAM)搭建构成,具体可以根据应用场景需要搭建。例如,由于寄存器读写速度较快,可以使用寄存器搭建环状缓存。具体地,例如,可以使用若干组寄存器搭建成线性缓存,再由最后一组寄存器记录第一组寄存器的地址,从而形成环状缓存。其中,一组寄存器对应环状缓存的一个地址。在本发明实施例中,由于环状缓存的一个地址写入一组报文段,因此,可以根据报文段的位宽以及缓存深度确定需要使用的寄存器的数量。例如,在一种可能的应用场景下,如果一组报文段的位宽是134bit,那么环状缓存的一个地址就需要134bit的寄存器,换句话说,一组寄存器要有134个寄存器,如果环状缓存的缓存深度或称环状缓存的地址个数为8,那么总共需要134*8个寄存器就能够搭建出该场景下所需要的环状缓存。
可以理解的是,所述环状缓存能够存储的有效报文段的数量是由缓存深度决定的。因此,为了避免写入的报文段的数量超过环状缓存的缓存深度而导致数据溢出,可以预先设置缓存阈值,在读/写报文段的过程中,对环状缓存中所存储的有效报文段的数量进行计算,再对有效报文段的数量与缓存阈值进行比较以确定是否禁止或允许写入。具体地,例如,参见图5所示本发明实施例提供的解包输出报文的方法流程示意图之二,当将所接收的报文段写入所述环状缓存时,还可以包括:S421、将有效数据数量加上写入的报文段的组数量;
当从所述环状缓存读出报文段时,还可以包括:S451、将有效数据量减去读出的报文段的组数量;
且还可以包括:
S481、判断所述有效数据数量是否达到缓存阈值;
S482、当判断为是时,禁止向所述环状缓存进行写入操作;
S483、当判断为否时,允许向所述环状缓存进行写入操作。
另外,由于在一个时钟周期内所读出以及输出的报文段的总位宽需要与输出端的数据总线的位宽相适应,因此,为了一个时钟周期内所输出的报文段的总位宽不超出输出端的数据总线的位宽,可以预先根据输出端的数据总线的位宽设置输出位宽阈值,利用该输出位宽阈值去限制一个时钟周期内所输出的报文段的总位宽。具体地,如图6所示,所述方法还可以包括:
S452、每当从所述环状缓存读出属于同一报文的一个报文段时,判断在当前时钟周期内所读出的报文段的总位宽是否达到输出位宽阈值;
S453、当判断为是时结束当前时钟周期的读操作;
可见,该实施例可以在读指针寄存器读报文段的过程中对当前时钟周期内读出的报文段的总位宽进行限制。
另外,在某些应用场景下可能会根据收到包含报文尾标志的报文段确定需要输出报文,在这些应用场景下,当收到属于同一报文的较多报文段却未收到报文尾标志时,可能会需要一直等待报文尾标志而无法输出报文,同时也无法及时释放环状缓存的存储空间,造成效率低下。为了避免这一问题,如图6所示,所述方法还可以包括:
S411、判断所述环状缓存中所有未输出的报文段是否不包含报文尾标志且所述未输出的报文段的总位数达到输出位宽阈值;
S412、当判断为是时确定需要输出报文。
可见,在该实施例中,如果收到属于同一报文的较多报文段却未收到报文尾标志,可以根据未输出的报文段的总位数达到输出位宽阈值及时确定需要输出报文,进而提高效率。
可以理解的是,由于本发明实施例中按环状缓存的地址顺序将报文段逐组写入或读出,因此,所述地址顺序具体可以为递增的顺序,也可以为递减的顺序。例如:
在本发明实施例一种可能的实现方式中,可以按照地址递增的顺序写或者读。具体地,例如,如图7所示:
步骤S420所述当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存可以包括:
S421、当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
步骤S430所述根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址可以包括:
根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址;
步骤S450所述当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段可以包括:
如果在所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
步骤S470所述根据所读出的报文段的组数量计算出更新的起始读地址可以包括:
根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递增M个地址,计算出更新的起始读地址,所述M为在所述当前时钟周期内所读出的报文段的组数量。
需要说明的是,由于该实施例采用地址递增的顺序读写,因此,读指针寄存器保存的起始读地址以及写指针寄存器保存的起始写地址在复位后初始状态时,均可以为0。
在本发明实施例另一种可能的实现方式中,可以按照地址递减的顺序写或者读。具体地,例如:如图8所示,步骤S420所述当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存可以包括:
当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递减的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
步骤S430所述根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址可以包括:
根据更新的起始写地址等于所述环状缓存的起始写地址开始递减N个地址,计算出所述更新的起始写地址;
步骤S450所述当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段可以包括:
如果在所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,则在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递减地址读出报文段,每当从一个地址读出报文段时,如果判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
步骤S470所述根据所读出的报文段的组数量计算出更新的起始读地址可以包括:
根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递减M个地址,计算出更新的起始读地址,所述M为所读出的报文段的组数量。
需要说明的是,由于该实施例采用地址递增的顺序读写,因此,读指针寄存器保存的起始读地址以及写指针寄存器保存的起始写地址在复位后初始状态时,均可以为所述环状缓存的存储地址中的最大值。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
而且,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种网络设备,其特征在于,包括:
环状缓存,用于保存写指针寄存器写入的报文段;
写指针寄存器,用于保存环状缓存的起始写地址,当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存,其中,一个地址写入一组报文段;根据第一加法器计算出的更新的起始写地址,对保存的起始写地址进行更新,其中所述写指针寄存器,具体用于当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
第一加法器,用于根据写指针寄存器写入所述环状缓存的报文段的组数量计算出更新的起始写地址,其中所述第一加法器,用于根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址;读指针寄存器,用于保存环状缓存的起始读地址,当需要输出报文时,从所述环状缓存的起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段,输出所读出的报文段,根据第二加法器计算出的更新的起始读地址,对保存的起始读地址进行更新;
第二加法器,用于根据读指针寄存器所读出的报文段的组数量计算出更新的起始读地址;
第一比较器,用于判断所述当前时钟周期之前,所述环状缓存所保存的一个报文段是否包含报文尾标志;
第二比较器,用于每当读指针寄存器从一个地址读出报文段时,判断该地址的报文段是否包含报文尾标志;
其中,所述读指针寄存器,具体用于如果第一比较器判断出所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果第二比较器判断出该地址的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述第二加法器,具体用于根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递增M个地址,计算出更新的起始读地址,所述M为所述读指针寄存器在所述当前时钟周期内所读出的报文段的组数量。
2.根据权利要求1所述的网络设备,其特征在于,所述写指针寄存器,具体用于当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1替换成:所述写指针寄存器,具体用于当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递减的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述第一加法器,用于根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址替换成:所述第一加法器,具体用于根据所述更新的起始写地址等于所述环状缓存的起始写地址开始递减N个地址,计算出更新的起始写地址;
所述第一比较器,用于判断所述当前时钟周期之前,所述环状缓存所保存的一个报文段是否包含报文尾标志替换成:所述第一比较器,用于判断所述当前时钟周期之前,所述环状缓存所保存的还未被输出的一个报文段是否包含报文尾标志;
其中,所述读指针寄存器,具体用于如果第一比较器判断出所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果第二比较器判断出该地址的报文段包含报文尾标志,当前时钟周期的读操作结束替换成:所述读指针寄存器,具体用于如果第一比较器判断出所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,则在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递减地址读出报文段,每当从一个地址读出报文段时,如果第二比较器判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述第二加法器,具体用于根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递增M个地址,计算出更新的起始读地址,所述M为所述读指针寄存器在所述当前时钟周期内所读出的报文段的组数量替换成:所述第二加法器,具体用于根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递减M个地址,计算出更新的起始读地址,所述M为所读出的报文段的组数量。
3.根据权利要求1或2所述的网络设备,其特征在于,还包括:
第三加法器,用于当所述写指针寄存器将所接收的报文段写入所述环状缓存时,将有效数据数量加上写入的报文段的组数量,当所述读指针寄存器从所述环状缓存读出报文段时,将有效数据数量减去读出的报文段的组数量;
第三比较器,用于判断所述有效数据数量是否达到缓存阈值;
其中,所述写指针寄存器,用于当所述第三比较器判断为是时,禁止向所述环状缓存进行写入操作,当所述第三比较器判断为否时,允许向所述环状缓存进行写入操作。
4.根据权利要求1或2所述的网络设备,其特征在于,还包括:第四比较器,用于每当所述读指针寄存器从所述环状缓存读出属于同一报文的一个报文段时,判断所述读指针寄存器在当前时钟周期内所读出的报文段的总位宽是否达到输出位宽阈值;所述读指针寄存器,用于当第四比较器判断为是时结束当前时钟周期的读操作;
或者,
第五比较器,用于判断所述环状缓存中所有未输出的报文段是否不包含报文尾标志且所述未输出的报文段的总位数达到输出位宽阈值;
所述读指针寄存器,用于当第五比较器判断为是时确定需要输出报文。
5.一种解包输出报文的方法,其特征在于,包括:
保存环状缓存的起始写地址以及起始读地址,其中,所述环状缓存用于保存所写入的报文段;
当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存,其中,一个地址写入一组报文段;根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址;根据计算出的更新的起始写地址,对保存的起始写地址进行更新;
当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段;输出所读出的报文段;根据所读出的报文段的组数量计算出更新的起始读地址;根据计算出的更新的起始读地址,对保存的起始读地址进行更新;
其中,所述当需要将网络设备所接收到的至少一组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址顺序将所接收的报文段逐组写入所述环状缓存包括:当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
所述根据写入所述环状缓存的报文段的组数量计算出更新的起始写地址包括:根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址;
所述当需要输出报文时,从所述环状缓存的所述起始读地址开始按所述地址顺序,从所述环状缓存读出属于同一报文的报文段包括:如果在所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述根据所读出的报文段的组数量计算出更新的起始读地址包括:根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递增M个地址,计算出更新的起始读地址,所述M为在所述当前时钟周期内所读出的报文段的组数量。
6.根据权利要求5所述的方法,其特征在于,当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递增的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1替换成:当需要在当前时钟周期内将网络设备在当前时钟周期所接收到的N组报文段进行缓存时,从所述起始写地址开始,按所述环状缓存的地址递减的顺序将所接收的N组报文段逐组写入所述环状缓存,其中,N大于等于1;
根据更新的起始写地址等于所述环状缓存的起始写地址开始递增N个地址,计算出所述更新的起始写地址替换成:根据所述更新的起始写地址等于所述环状缓存的起始写地址开始递减N个地址,计算出更新的起始写地址;
所述如果在所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递增地址读出报文段,每当从一个地址读出报文段时,如果判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束替换成:如果在所述当前时钟周期之前,所述环状缓存所保存的一个报文段包含报文尾标志,则在所述当前时钟周期内从环状缓存的所述起始读地址开始逐个递减地址读出报文段,每当从一个地址读出报文段时,如果判断出所读出的报文段包含报文尾标志,当前时钟周期的读操作结束;
所述根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递增M个地址,计算出更新的起始读地址,所述M为在所述当前时钟周期内所读出的报文段的组数量替换成:根据所述更新的起始读地址等于所述环状缓存的起始读地址开始递减M个地址,计算出更新的起始读地址,所述M为所读出的报文段的组数量。
7.根据权利要求5或6所述的方法,其特征在于,当将所接收的报文段写入所述环状缓存时,还包括:将有效数据数量加上写入的报文段的组数量;
当从所述环状缓存读出报文段时,还包括:将有效数据数量减去读出的报文段的组数量;
且还包括:
判断所述有效数据数量是否达到缓存阈值;
当判断为是时,禁止向所述环状缓存进行写入操作;
当判断为否时,允许向所述环状缓存进行写入操作。
8.根据权利要求5或6所述的方法,其特征在于,还包括:
每当从所述环状缓存读出属于同一报文的一个报文段时,判断在当前时钟周期内所读出的报文段的总位宽是否达到输出位宽阈值;当判断为是时结束当前时钟周期的读操作;
或者,
判断所述环状缓存中所有未输出的报文段是否不包含报文尾标志且所述未输出的报文段的总位数达到输出位宽阈值;当判断为是时确定需要输出报文。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746676.0A CN103746940B (zh) | 2013-12-30 | 2013-12-30 | 一种网络设备以及解包输出报文的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746676.0A CN103746940B (zh) | 2013-12-30 | 2013-12-30 | 一种网络设备以及解包输出报文的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103746940A CN103746940A (zh) | 2014-04-23 |
CN103746940B true CN103746940B (zh) | 2018-03-06 |
Family
ID=50503929
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310746676.0A Active CN103746940B (zh) | 2013-12-30 | 2013-12-30 | 一种网络设备以及解包输出报文的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103746940B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110321301B (zh) * | 2018-03-30 | 2023-09-22 | 华为技术有限公司 | 一种数据处理的方法及装置 |
CN111865831B (zh) * | 2019-04-30 | 2022-05-13 | 华为技术有限公司 | 数据处理的方法、网络设备、计算节点和系统 |
CN112787955B (zh) * | 2020-12-31 | 2022-08-26 | 苏州盛科通信股份有限公司 | Mac层数据报文的处理方法、设备和存储介质 |
CN114598620B (zh) * | 2022-02-17 | 2024-01-30 | 杭州晨晓科技股份有限公司 | 一种运算电路 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6956848B1 (en) * | 1999-06-15 | 2005-10-18 | Altigen Communications, Inc. | Computer network-based auto-attendant method and apparatus |
CN101834978A (zh) * | 2009-12-23 | 2010-09-15 | 福建新大陆通信科技有限公司 | 一种数字机顶盒epg系统的优化方法 |
CN102200945A (zh) * | 2010-03-25 | 2011-09-28 | 宋健 | 一种ram存储器及其使用方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6928078B2 (en) * | 2000-06-13 | 2005-08-09 | Altigen Communications, Inc. | Packetized communications apparatus and method |
-
2013
- 2013-12-30 CN CN201310746676.0A patent/CN103746940B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6956848B1 (en) * | 1999-06-15 | 2005-10-18 | Altigen Communications, Inc. | Computer network-based auto-attendant method and apparatus |
CN101834978A (zh) * | 2009-12-23 | 2010-09-15 | 福建新大陆通信科技有限公司 | 一种数字机顶盒epg系统的优化方法 |
CN102200945A (zh) * | 2010-03-25 | 2011-09-28 | 宋健 | 一种ram存储器及其使用方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103746940A (zh) | 2014-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103746940B (zh) | 一种网络设备以及解包输出报文的方法 | |
CN101605100B (zh) | 队列存储空间的管理方法和设备 | |
US8930593B2 (en) | Method for setting parameters and determining latency in a chained device system | |
CN104407809A (zh) | 多通道fifo缓冲器及其控制方法 | |
CN102521151A (zh) | 数据缓存方法和装置 | |
CN107800644A (zh) | 一种可动态配置的流水化令牌桶限速方法与装置 | |
CN107590278A (zh) | 一种基于ceph的文件预读方法及相关装置 | |
EP2543157A1 (en) | System and method for multiple concurrent virtual networks | |
CN108462652B (zh) | 一种报文处理方法、装置和网络设备 | |
US10205673B2 (en) | Data caching method and device, and storage medium | |
CN112948295B (zh) | 一种基于axi4总线的fpga与ddr高速数据包传输系统及方法 | |
CN103019987A (zh) | 一种基于usb接口的数据传输方法和系统 | |
CN101866277B (zh) | 数据排序方法和装置 | |
CN106254270A (zh) | 一种队列管理方法及装置 | |
CN106330741A (zh) | 一种报文传输方法和装置 | |
CN110232029B (zh) | 一种基于索引的fpga中ddr4包缓存的实现方法 | |
CN109902000B (zh) | 变速多通道调试追踪系统、方法、设备及存储介质 | |
US20030172242A1 (en) | Self-synchronous FIFO memory device having high access efficiency, and system provided with interface for data transfer using the same | |
CN101661429A (zh) | 一种统计信息的存储方法及设备 | |
CN103309981A (zh) | 一种具有高存储效率的adc数据组织系统及其方法 | |
CN103794244B (zh) | 一种基于spi接口的相变存储器读出电路及方法 | |
CN105577985A (zh) | 一种数字图像处理系统 | |
CN103488597B (zh) | 一种先进先出缓存器及其读写数据的方法 | |
CN102469007A (zh) | Onu计算上行队列的上报长度的方法 | |
CN103701450A (zh) | 一种支持多值逻辑的三稳态rs触发器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |