用于控制流水线中寄存器的方法和装置与流程

文档序号:13882542阅读:410来源:国知局
本发明涉及通信
技术领域
:,具体地涉及用于控制流水线中寄存器的方法和装置。
背景技术
::在进行数据交换(例如,以太网数据交换)时,需要对数据报文进行处理。为了提高处理效率,可以采用流水线方式对多个报文进行并行处理。例如,在转发报文的过程中,由流水线上的各级寄存器对报文进行逐级处理。流水线上的各级寄存器对当前报文处理完成后,将该报文送入下一级寄存器进行处理,并从上一级寄存器接收新的报文进行处理。报文从进入流水线到输出,可能会经过上百级的寄存器,在最大吞吐率的情况下,可能会有上百个报文同时在芯片内部被处理,他们分散在的流水线各级的寄存器上,进行当前级的寄存器所对应的处理。流水线中各级的寄存器进行处理时,可能会出现处理失败的情况,例如需要读表的寄存器在共享查表冲突时读失败,如此导致寄存处无法完成对当前报文的处理。相关技术中,采用队列存储的方式,将在此阶段到达寄存器的报文存储到队列(例如,fifo先入先出队列)中。待此寄存器处理正常后,再从队列中依次取出报文进行处理。相关技术的缺陷在于,流水线中级数过多,对于各级寄存器均分配用于缓存的队列,则会消耗大量的存储资源。技术实现要素:本发明实施例的目的是提供用于控制流水线中寄存器的方法和装置,以解决上述技术问题或者至少部分地解决上述技术问题。为了实现上述目的,本发明实施例提供一种用于控制流水线中寄存器的方法,所述方法包括:当寄存器从流水线的下一级寄存器接收到用于指示暂停的反压时,暂停向所述下一级寄存器发送报文;在反压未被撤销的期间,判断所述寄存器中是否具有数据;当所述寄存器中不具有数据时,不向流水线中上一级寄存器传递所述反压;当所述寄存器中具有数据时,向流水线中上一级寄存器传递所述反压。可选的,所述暂停向所述下一级寄存器发送报文包括:在所述寄存器接收的反压未被撤销时,将所述寄存器的环回通路打开;所述方法还包括:在所述寄存器接收的反压被撤销时,将所述寄存器的环回通路关闭。可选的,所述方法还包括:在寄存器用于读多个表的情况下,将针对各个表的读请求进行优先级排序;按优先级顺序发送读请求至对应表;在当前发送的读请求成功的情况下,发送下一优先级的读请求;在当前发送的读请求失败的情况下,将优先级排序中在当前发送的读请求之后的读请求取消;在接收到将所在流水线阻塞的指示时,将所在流水线阻塞;其中,当共享查表冲突时,取得较高优先级的表的访问权的流水线取得针对各个表的访问权,其他流水线被指示进行阻塞直至访问权被释放。可选的,所述方法还包括:在寄存器用于取多拍表的情况下,当针对所述多拍表的读请求成功时,将对应报文存入队列中;在多拍之后从所述多拍表取得数据后,判断所述寄存器是否从流水线的下一级寄存器接收到反压;在所述寄存器没有从流水线的下一级寄存器接收到反压的情况下,从队列中取出所述报文发送至流水线下一级寄存器。可选的,所述方法还包括:当用于存储报文的队列空间被占满时,判断所述寄存器是否具有数据;当所述寄存器具有数据时,产生指示暂停的反压并传递到流水线的上一级寄存器。可选的,所述方法还包括:在寄存器用于读表的情况下,判断发送的读请求是否成功;在当前发送的读请求失败的情况下,产生指示暂停的反压并传递到流水线的上一级寄存器。根据本发明的另一方面,公开了一种用于控制流水线中寄存器的装置,所述装置包括:暂停模块,用于当寄存器从流水线的下一级寄存器接收到用于指示暂停的反压时,暂停向所述下一级寄存器发送报文;传递模块,用于在反压未被撤销的期间,判断所述寄存器中是否具有数据;当所述寄存器中不具有数据时,不向流水线中上一级寄存器传递所述反压;当所述寄存器中具有数据时,向流水线中上一级寄存器传递所述反压。可选的,所述暂停模块用于在所述寄存器接收的反压未被撤销时,将所述寄存器的环回通路打开;所述暂停模块还用于在所述寄存器接收的反压被撤销时,将所述寄存器的环回通路关闭。可选的,所述装置还包括:调度模块,用于在寄存器用于读多个表的情况下,将针对各个表的读请求进行优先级排序;按优先级顺序发送读请求至对应表;在当前发送的读请求成功的情况下,发送下一优先级的读请求;在当前发送的读请求失败的情况下,将优先级排序中在当前发送的读请求之后的读请求取消;暂停模块还用于在接收到将所在流水线阻塞的指示时,将所在流水线阻塞;其中,当共享查表冲突时,取得较高优先级的表的访问权的流水线取得针对各个表的访问权,其他流水线被指示进行阻塞直至访问权被释放。可选的,所述装置还包括:存储模块,用于在寄存器用于取多拍表的情况下,当针对所述多拍表的读请求成功时,将对应报文存入队列中;在多拍之后从所述多拍表取得数据后,判断所述寄存器是否从流水线的下一级寄存器接收到反压;在所述寄存器没有从流水线的下一级寄存器接收到反压的情况下,从队列中取出所述报文发送至流水线下一级寄存器。可选的,所述传递模块还用于当用于存储报文的队列空间被占满时,判断所述寄存器是否具有数据;当所述寄存器具有数据时,产生指示暂停的反压并传递到流水线的上一级寄存器。可选的,所述传递模块还用于在寄存器用于读表的情况下,判断发送的读请求是否成功;在当前发送的读请求失败的情况下,产生指示暂停的反压并传递到流水线的上一级寄存器。根据本发明的又一方面,提供了一种控制器可读存储介质,该控制器可读存储介质上存储指令,该指令用于使得控制器执行前述任一项用于控制流水线中寄存器的方法。通过上述技术方案,利用反压来使得流水线中上一级寄存器暂停对下一级寄存器发送报文,并利用不具有数据的寄存器进行反压传递的中断,如此,能够在减少缓存资源消耗的同时,提高报文的处理效率。本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。附图说明附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:图1是根据本发明实施例的用于控制流水线中寄存器的方法的流程图;图2是根据本发明实施例的使用本发明方法的信息传递示意图;图3是根据本发明实施例的用于控制流水线中寄存器的方法的流程图;图4是根据本发明实施例的读多表情况下的信息传递示意图;图5是根据本发明实施例的用于控制流水线中寄存器的方法的流程图;图6是根据本发明实施例的读多拍表情况下的信息传递示意图;图7是根据本发明实施例的读多张多拍表情况下的信息传递示意图;图8a是根据本发明实施例的读单拍表场景的示意图,图8b为在图8a的处理之后下一时钟中读单拍表场景的示意图;图9是根据本发明实施例的读多拍表场景的示意图;图10是根据本发明实施例的用于控制流水线中寄存器的装置的结构图;图11是根据本发明实施例的用于控制流水线中寄存器的装置的结构图;以及图12是根据本发明实施例的用于控制流水线中寄存器的装置的结构图。具体实施方式以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。图1是根据本发明实施例的用于控制流水线中寄存器的方法的流程图,该方法可用于网络交换设备,例如支持三层交换的以太网交换芯片中,如图1所示,该方法可包括如下步骤。在步骤s110中,当寄存器从流水线的下一级寄存器接收到用于指示暂停的反压时,暂停向下一级寄存器发送报文。在步骤s120中,在反压未被撤销的期间,判断寄存器中是否具有数据,如果不具有,则执行步骤s130;如果具有,则执行步骤s140。在步骤s130中,当寄存器中不具有数据时,不向流水线中上一级寄存器传递所述反压。在步骤s140中,当寄存器中具有数据时,向流水线中上一级寄存器传递所述反压。在一实施例中,所述暂停向所述下一级寄存器发送报文包括:在寄存器接收的反压未被撤销时,将寄存器的环回通路打开。所述方法还可包括:在寄存器接收的反压被撤销时,将寄存器的环回通路关闭。其中,当寄存器对报文的处理无法在限时内完成时,例如无法在时钟的一拍内完成时,寄存器向流水线的上一级发送反压以暂停报文传递。例如,可以通过管线忙信号(pipeline_busy==1)来发送反压。寄存器接收到反压后,暂停向下一级寄存器发送报文,并判断是否将反压传递至上一级寄存器。当寄存器对报文的处理完成后,寄存器则会撤销反压,例如通过管线闲信号(pipeline_busy==0)来撤销反压。举例而言,针对流水线的每一级寄存器可以配置对应的控制器,控制器针对对应的寄存器执行本发明中方法。如图2所示,处于模式0的寄存器从流水线的下一级模式1寄存器接收到反压(即管线忙)。模式0是指没有因寄存器自身处理问题产生反压,而仅是传递从下一级寄存器接收的反压。针对模式0寄存器,当其没有数据时,被称为“气泡”,此时,模式0寄存器不会向流水线中的上一级寄存器传递反压。模式0寄存器可以继续接收报文进行处理,当接收到新报文时,“气泡”被填满。如果此时接收的反压未被撤销,模式0寄存器向流水线中的上一级寄存器传递反压。按上述方法反压在流水线中从下至上被逐级传递。在反压被撤销后,流水线恢复正常。在寄存器接收到的反压有效时,暂停向下一级寄存器发送报文,此时,可利用寄存器的时序特性缓存寄存器中当前报文。为寄存器提供环回通路,如图2所示,在反压有效时,将环回通路打开,使得寄存器采样原有值,即缓存当前报文。当反压被撤销时,关闭环回通路,使得寄存器采样到新值,即获得新报文。在共享查表时,可能会发生冲突。例如,两条流水线p0和p1同时运行,多个共享表被此两条流水线共享。共享表还可能同时被单条流水线的多个级共享。共享表本身是独立仲裁,互相不知道对方选择了流水线p0还是流水线p1。如果一个共享表选择了流水线p0,它会指示流水线p1进行阻塞,而另外一个共享表可能选择了流水线p1,它会指示流水线p0进行阻塞。此时两个共享表阻塞了两条流水线,导致死锁。为解决该问题,本发明还提出如下技术方案,如图3所示,该方案可包括如下步骤。在步骤s302中,在寄存器用于读多个表的情况下,将针对各个表的读请求进行优先级排序。在步骤s304中,按优先级顺序发送读请求至对应表。在步骤s306中,在当前发送的读请求成功的情况下,发送下一优先级的读请求。在步骤s308中,在当前发送的读请求失败的情况下,将优先级排序中在当前发送的读请求之后的读请求取消。在步骤s310中,在接收到将所在流水线阻塞的指示时,将所在流水线阻塞。其中,当共享查表冲突时,取得较高优先级的表的访问权的流水线取得针对各个表的访问权,其他流水线被指示进行阻塞直至访问权被释放。在一实施例中,本发明中方法还可包括:在寄存器用于读表的情况下,判断发送的读请求是否成功;在当前发送的读请求失败的情况下,产生指示暂停的反压并传递到流水线的上一级寄存器。举例而言,对应于图2中模式1,在控制器对应于的寄存器用于读表的情况下,当针对表发送的读请求失败时,产生指示暂停的反压并传递到流水线的上一级寄存器。例如,如果本级寄存器只查一张表,无论表是否被共享,都可直接将反压汇入总反压(pipeline_busy==1)。如果同时需要查多张表,为了解决上面提到的死锁问题,控制器首先将针对各个表的所有读请求按优先级串联,如图4所示;根据表读一侧的指示是否读成功的反馈信号(例如,表忙(table_busy)),在读请求失败后逐级取消读请求。当共享查表冲突时,抢占到较高优先级表的流水线,可以读所有表,其他流水线则由表侧指示阻塞,直到等待至表项权限释放。这样可以保证抢占到最高优先级表项的流水线,可以使用全部共享表,取得全部表的访问权,另一条流水线全部阻塞直至访问权被释放。如此,不会出现两条流水线相互反压造成死锁的情况。在一实施例中,如图5所示,方法还可包括如下步骤。在步骤s502中,在寄存器用于取多拍表的情况下,当针对多拍表的读请求成功时,将对应报文存入队列中。在步骤s504中,在多拍之后从多拍表取得数据后,判断寄存器是否从流水线的下一级寄存器接收到反压。在步骤s506中,在寄存器没有从流水线的下一级寄存器接收到反压的情况下,从队列中取出报文发送至流水线下一级寄存器。如果寄存器从流水线的下一级寄存器接收到反压,则报文继续保持在队列中。在一实施例中,当用于存储报文的队列空间被占满时,判断所述寄存器是否具有数据;当寄存器具有数据时,产生指示暂停的反压并传递到流水线的上一级寄存器。举例而言,对应于图2中模式2,当控制器对应的寄存器用于取多拍表时,其接收到数据的过程会具有延时。在此延时期间,报文可以存储到寄存次对应的队列中,例如存储到fifo队列中,如图6所示。如图7所示,还可以存在模式3,其为模式1和模式2的混合。解决方案如上所述,在用于读表的寄存器处,将针对各个表的读请求进行优先级排序,按优先级顺序发送读请求至对应表,在当前发送的读请求成功的情况下,发送下一优先级的读请求,在当前发送的读请求失败的情况下,将优先级排序中在当前发送的读请求之后的读请求取消,在接收到将所在流水线阻塞的指示时,将所在流水线阻塞。其中,当共享查表冲突时,取得较高优先级的表的访问权的流水线取得针对各个表的访问权,其他流水线被指示进行阻塞直至访问权被释放。在发送读请求后,等待获取数据时,将对应报文存入队列中;在用于取表的寄存器处,在多拍之后从多拍表获得数据后,判断寄存器是否从流水线的下一级寄存器接收到反压;在寄存器没有从流水线的下一级寄存器接收到反压的情况下,从队列中取出报文发送至流水线下一级寄存器。通过上述技术方案,能够在减少缓存资源消耗的同时,提高报文的处理效率;在多条流水线共享表的情况下,可以避免死锁;针对多拍表情况,可以进行报文缓存,等待取得数据后进行下一级处理,减少多拍表数据获取对流水线中整体效率的影响。如图8a和图8b所示,示出流水线中的两级寄存器,从左向右分别用于读表和取表,每个寄存器分别对应一控制器。该流水线处理2个报文,进行单拍表查表操作。在此,可将一个流水线的级(例如,包含控制器和寄存器以及其他逻辑)称为一个栈。如图8a所示,报文1先一步到达读表的栈级,此时该栈级的下一级已经产生了反压(pipeline_busy==1(管线忙==1))。但是,对于取表的栈级来说,它的寄存器还没有真正采样到报文1,现在是“气泡”的状态,反压信号不会向上传递。报文1向表发起请求被接受,报文1进入取表栈级,报文2进入读表栈级。如图8b所示,当下一个时钟到来的时候,报文1和报文2都被下一栈采样,此时报文1填满了取表栈级的“气泡”。但是因为反压未撤销,控制器通过环回路径将报文1缓存在此栈的寄存器。报文1和报文2之间没有“气泡”,反压会继续向前一级传递。报文2此时正在读表栈级,由于接受到了反压,报文2同样会被控制器环回存储在当前寄存器,其产生的读请求会一直保持。因为表在取数据处被拥塞,多的读请求会被表自动忽略。报文1和报文2会保持这种暂停状态,直到反压撤销。如图9所示,多拍表的反压与图8a和图8b所示类似。区别在于报文读表完成后需要放入fifo进行等待,直到数据经过一定延迟输出(table_valid==1)并且没有反压(pl_busy==0),控制器会取出报文向下一级传递。如果有反压,报文即使读到了数据,也会被暂停在fifo中。形成和图8b类似的顺序暂停场景。因为多拍表使用了fifo,可以停留多个报文,图9中以fifo深度为3为例,此时有3个读表报文因为反压被缓存在了fifo中,当fifo满以后,会将报文4缓存在读表栈。此时,在取表栈的寄存器处产生反压,发送给上一级的读表栈寄存器。上述实施例旨在对本发明进行示例性说明,不用于限制本发明的保护范围。本发明还提供了一种控制器可读存储介质,该控制器可读存储介质上存储指令,该指令用于使得控制器执行前述任一项用于控制流水线中寄存器的方法。图10是根据本发明实施例的用于控制流水线中寄存器的装置的结构图;如图10所示,该装置包括如下模块。暂停模块1010,用于当寄存器从流水线的下一级寄存器接收到用于指示暂停的反压时,暂停向所述下一级寄存器发送报文;传递模块1020,用于在反压未被撤销的期间,判断所述寄存器中是否具有数据;当所述寄存器中不具有数据时,不向流水线中上一级寄存器传递所述反压;当所述寄存器中具有数据时,向流水线中上一级寄存器传递所述反压。在一实施例中,暂停模块1010用于在所述寄存器接收的反压未被撤销时,将所述寄存器的环回通路打开;暂停模块1010还用于在所述寄存器接收的反压被撤销时,将所述寄存器的环回通路关闭。在一实施例中,如图11所示,所述装置还包括:调度模块1110,用于在寄存器用于读多个表的情况下,将针对各个表的读请求进行优先级排序;按优先级顺序发送读请求至对应表;在当前发送的读请求成功的情况下,发送下一优先级的读请求;在当前发送的读请求失败的情况下,将优先级排序中在当前发送的读请求之后的读请求取消;暂停模块1010还用于在接收到将所在流水线阻塞的指示时,将所在流水线阻塞;其中,当共享查表冲突时,取得较高优先级的表的访问权的流水线取得针对各个表的访问权,其他流水线被指示进行阻塞直至访问权被释放。在一实施例中,如图12所示,所述装置还包括:存储模块1210,用于在寄存器用于取多拍表的情况下,当针对所述多拍表的读请求成功时,将对应报文存入队列中;在多拍之后从所述多拍表取得数据后,判断所述寄存器是否从流水线的下一级寄存器接收到反压;在所述寄存器没有从流水线的下一级寄存器接收到反压的情况下,从队列中取出所述报文发送至流水线下一级寄存器。在一实施例中,传递模块1020还用于当用于存储报文的队列空间被占满时,判断所述寄存器是否具有数据;当所述寄存器具有数据时,产生指示暂停的反压并传递到流水线的上一级寄存器。在一实施例中,传递模块1020还用于在寄存器用于读表的情况下,判断发送的读请求是否成功;在当前发送的读请求失败的情况下,产生指示暂停的反压并传递到流水线的上一级寄存器。上述装置与前述方法相对应,具体实施方式可参见前述方法中详细描述,在此不再赘述。以上结合附图详细描述了本发明实施例的可选实施方式,但是,本发明实施例并不限于上述实施方式中的具体细节,在本发明实施例的技术构思范围内,可以对本发明实施例的技术方案进行多种简单变型,这些简单变型均属于本发明实施例的保护范围。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施例对各种可能的组合方式不再另行说明。本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。此外,本发明实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施例的思想,其同样应当视为本发明实施例所公开的内容。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1