基于P4语言实现的可编程硬件逻辑架构和逻辑实现方法与流程

文档序号:26003367发布日期:2021-07-23 21:21阅读:123来源:国知局
基于P4语言实现的可编程硬件逻辑架构和逻辑实现方法与流程

本公开涉及可编程硬件技术领域,具体涉及一种基于p4语言实现的可编程硬件逻辑架构和逻辑实现方法。



背景技术:

随着现代通信技术的发展,不同网络之间实现高速实时通信的需求越来越复杂。有时需要根据实际的互联网络对网络协议报文做控制平面处理,传统交换芯片流片后无法支持用户对网络协议控制平面定制化处理,即无法进行二次开发操作。

斯坦福大学的nickmckeown教授为了充分解放数据平面的编程能力,于2014年首次设计并提出了数据平面特定领域编程语言p4,经提出就得到了学术界和工业界的广泛关注和认可。工业界纷纷跟进并着手研制了一系列高性能的可编程硬件。一方面基于可编程硬件的可定制化特性能够快速实现和验证一些新型的网络架构、功能和协议,极大加速了网络演进和创新;另一方面基于可编程硬件的高性能特性,传统上由灵活但低性能的中间件实现的一些比如防火墙,负载均衡等较为简单的网络功能可以卸载到可编程数据平面上实现来获取可观的性能提升。



技术实现要素:

本发明主要解决的技术问题是,提供一种基于p4语言实现的可编程硬件逻辑架构,允许用户使用p4语言对采用该种架构的芯片进行二次开发,增加芯片的使用场景。本发明还提供一种可编程硬件的逻辑实现方法。

第一方面,本公开提供了一种基于p4语言实现的可编程硬件逻辑架构,包括:报文接收模块、数据缓存模块、报文发送模块和可编程逻辑单元;所述可编程逻辑单元包括:提取指令存储模块、提取数据模块、匹配模块、动作指令存储模块和动作模块;其中,所述报文接收模块,用于接收报文,识别报文是否有效,将有效的报文存入所述数据缓存模块,以及,根据接收的报文生成描述符并输出给所述可编程逻辑单元,所述描述符中包括约定的部分报文信息和提取指令的存储地址;所述数据缓存模块,用于缓存所述报文接收模块存入的报文,以及,将缓存的报文提供给所述报文发送模块;所述提取数据模块,用于根据所述描述符携带的存储地址,从所述提取指令存储模块中获取提取指令,根据获取的提取指令,从所述描述符中提取指定位置的数据,将得到的提取数据输出给所述匹配模块;所述匹配模块,用于将所述提取数据与存储的匹配数据进行比较,根据比较结果输出动作指令的存储地址给所述动作模块;所述动作模块,用于根据收到的存储地址,从所述动作指令存储模块中获取动作指令,根据获取的动作指令,对所述描述符进行相应的修改,将修改后的描述符输出给所述报文发送模块;所述报文发送模块,用于从所述数据缓存模块获取报文,从所述动作模块获取修改后的描述符,将修改后的描述符与报文进行拼包处理后输出。

在一些可选的实现方式中,所述报文接收模块具体用于:当同时接收到入口数据报文和环回数据报文时,对环回数据报文优先处理。

在一些可选的实现方式中,所述约定的部分报文信息是指报文头部信息。

在一些可选的实现方式中,所述报文发送模块,具体用于将拼包处理后的报文输出给下级模块,或者,作为环回数据报文重新输出给所述报文接收模块。

在一些可选的实现方式中,所述提取数据模块,具体采用寄存器提取方式和/或立即数提取方式,从所述描述符中提取指定位置的数据。

在一些可选的实现方式中,所述匹配模块采用二维数组结构的寄存器保存匹配数据。

在一些可选的实现方式中,所述动作模块具体用于通过赋值、移位或者算术逻辑单元alu操作对描述符进行修改。

在一些可选的实现方式中,所述报文接收模块、所述数据缓存模块和所述报文发送模块的位宽一致。

第二方面,本公开提供了一种可编程硬件的逻辑实现方法,用于如上所述的基于p4语言实现的可编程硬件逻辑架构,包括以下步骤:

s1、报文接收模块将接收的有效的报文存入数据缓存模块;

s2、所述报文接收模块根据接收的报文生成描述符,并将描述符输出给可编程逻辑单元,所述描述符中包括约定的部分报文信息和提取指令的存储地址;

s3、提取数据模块根据所述描述符携带的存储地址,从提取指令存储模块中获取提取指令,根据获取的提取指令,从所述描述符中提取指定位置的数据,将得到的提取数据输出给匹配模块;

s4、所述匹配模块将所述提取数据与存储的匹配数据进行比较,根据比较结果输出动作指令的存储地址给动作模块;

s5、所述动作模块根据收到的存储地址,从动作指令存储模块中获取动作指令,根据获取的动作指令,对所述描述符进行相应的修改,将修改后的描述符输出给报文发送模块;

s6、所述报文发送模块从所述数据缓存模块获取报文,从所述动作模块获取修改后的描述符,将修改后的描述符与报文进行拼包处理后输出。

在一些可选的实现方式中,所述方法还包括:如果所述报文需要修改的位域长度大于所述描述符的可携带长度,则将通过拼包处理修改后的报文作为环回数据报文,重新输出给所述报文接收模块。

从以上技术方案可以看出,本发明具有以下优点:

本发明提供的可编程硬件逻辑架构,允许用户使用p4语言对采用该架构的芯片进行二次开发,将任意网络报文进行识别,任意位域进行赋值、移位、常用alu操作,增加芯片的使用场景。

采用本发明的可编程硬件逻辑架构,不用为每个新项目整体重新编写代码,有利于提升硬件代码开发效率。软件可以基于p4语言,生成提取指令、匹配指令和动作指令,控制硬件逻辑对报文做相应的处理,增加芯片的适用场景。

本发明为支持可编程功能,可在硬件内部例化较多ram(randomaccessmemory,随机存取存储器)来存储可编程指令,以占用一些资源为代价,提供更丰富的应用。使用人员只需要熟悉可编程硬件逻辑架构和基于p4语言的编译器使用步骤,即可方便快捷的进行二次开发。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本公开的其它特征、目的和优点将会变得更明显:

图1是本发明一个实施例提供的基于p4语言实现的可编程硬件逻辑架构的结构框图;

图2是本发明一个应用场景实例中的基于p4语言实现的可编程硬件逻辑架构的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

下面通过具体实施例,进行详细的说明。

本发明实施例提供一种基于p4语言实现的可编程硬件逻辑架构(或者说可编程硬件装置)。p4语言具有可重配置性、协议无关性和平台无关性等语言特性,其处理基本流程是:提取、匹配、动作。本发明提供的可编程硬件逻辑架构,也采取提取、匹配、动作的处理流程,以支持p4语言对硬件逻辑进行再开发,增加采用该种可编程硬件逻辑架构的芯片(如交换芯片)的适用范围。

请参考图1所示的结构框图,本发明一个实施例中,所述可编程硬件逻辑架构包括:报文接收模块(rx_pkt)10、数据缓存模块(buffer)20、报文发送模块(tx_pkt)30、可编程逻辑单元(slice)40。

其中,作为核心部件的可编程逻辑单元(slice)40进一步包括:提取指令存储模块(extract_ram)41、提取数据模块(extract_key)42、匹配模块(cmp)43、动作指令存储模块(action_ram)44、动作模块(action)45等子模块。

下面,详细说明各个单元、模块。

所述报文接收模块(rx_pkt)10,用于接收报文并实现报文检错功能:识别有效报文,丢弃无效报文,将有效的报文完整存入数据缓存模块20。该模块10对接收的报文如入口数据报文(pkt_in)和环回数据报文(pkt_lp)进行调度时,采用环回数据报文优先调度的方式。环回数据报文是由报文发送模块重新输入到报文接收模块的报文。该模块10还用于根据接收的报文生成相应的描述符(mf),将约定的部分报文信息填充到描述符中输出给可编程逻辑单元40。其中,约定的部分报文信息具体可以是指报文的报文头部信息,可以完整的报文头部信息,也可以是报文头部信息中的一部分。

所述数据缓存模块(buffer)20,用于缓存报文接收模块10存入的报文,包括入口数据报文和/或环回数据报文,以及,将缓存的报文提供给报文发送模块(tx_pkt)30。

所述提取指令缓存模块(extract_ram)41,负责保存提取指令。报文接收模块10输出的描述符,还会携带所需要的提取指令的存储地址,可以用此地址去提取指令缓存模块的相应存储位置获取不同的提取指令,此地址由软件下发。

所述提取数据模块(extract_key)42,用于首先根据描述符携带的存储地址获取相应的提取指令,然后根据提取指令从描述符中提取指定位置的数据(字段),最后将得到的提取数据输出给匹配模块43。容易理解,通过不同的提取指令可以提取描述符中任意位置的数据(字段)。提取数据模块42可以支持寄存器提取和立即数提取两种方式来提取描述符中的字段,也可以支持两种方式混合提取。寄存器提取方式,是利用寄存器寻址,即依靠字段在描述符中的相对偏移位置进行提取。立即数提取方式,不依赖描述符字段,直接将提取指令里的立即数当做提取值。

所述匹配模块(cmp)43,存储有匹配数据,用于将提取数据模块42输出的提取数据作为待匹配数据,与匹配数据进行逐一比较,根据匹配比较的结果输出动作指令的存储地址给动作模块45,该地址用来查询动作指令。为保证全流水处理,不同的提取数据,需要保证在同一拍将数据匹配结果统计出来,若采用ram结构,读取ram次数不固定,故本发明优选采用一个二维数组结构的寄存器来保存匹配数据,以保证在同一拍获得匹配结果。

所述动作指令存储模块(action_ram)44,用于缓存动作指令集,匹配模块会输出动作查表地址(即动作指令的存储地址),可以用此地址去不同的存储位置获取不同动作指令。

所述动作模块(action)45,用于首先根据收到动作指令的存储地址,从所述动作指令存储模块中获取动作指令,然后根据获取的动作指令,对所述描述符进行相应的修改,最后将修改后的描述符输出给所述报文发送模块30。其中,所述的修改可以是对描述符进行赋值(即置位)、移位(即搬移)以及常用alu(arithmeticandlogicunit,算术逻辑单元)操作。

所述报文发送模块(tx_pkt)30,用于将修改后的描述符和数据缓存模块20里的报文进行拼包处理后输出,可以是输出给下级模块,或者,也可以是作为环回数据报文重新输出给报文接收模块10。所述的拼包处理,可以理解为根据修改后的描述符,对报文中的相应位域(字段)进行修改替换例如掩码处理。

进一步的,报文接收模块(rx_pkt)10、数据缓存模块(buffer)20、报文发送模块(tx_pkt)30,位宽保持一致,以避免反压场景,增加系统工作效率。

以上,对本发明提供的可编程硬件逻辑架构进行了详细描述。

本发明的一个实施例,还提供一种可编程硬件的逻辑实现方法,应用于如上所述的基于p4语言实现的可编程硬件逻辑架构以及采用该架构的芯片如可编程交换芯片等。该方法包括以下步骤:

s0:报文接收模块接收报文,进行报文调度处理。为保证报文间保序处理,环回报文优先级最高。当报文接收模块(rx_pkt)同时收到入口数据报文和环回数据报文时,优先处理环回数据报文。

s1:报文接收模块对接收的报文进行报文解析与检错,识别有效报文,丢弃无效报文,将有效报文存入数据缓存模块。

s2:报文接收模块生成描述符mf,例如1024bit描述符信息,描述符包含约定的部分报文信息和提取指令存储模块(extract_ram)的查表地址,该查表地址是所需要的提取指令的存储地址。可选的,若此报文只需要进行透传操作,则配置extract_ram查表地址为无效地址即可,并执行步骤s6。

s3:提取数据模块(extract_key)根据描述符携带的存储地址,从提取指令存储模块的相应存储位置获取提取指令,然后根据获取的提取指令,从描述符中提取指定位置的数据,具体的,可以提取5组8bit数据共40bit用来输出给匹配模块做匹配计算。该模块支持寄存器提取和立即数提取两种方式。

寄存器提取指令:1024bit的描述符mf被分成128组,每组8bit,将相邻两组拼接起来形成一个16bit数据。寄存器提取指令为10bit,高7bit用来选择128组的组号,低3bit用来选择16bit提取的起始bit位,这样可以实现提取任意位置的连续8bit数据。

立即数提取指令:将10bit的提取指令的高8bit作为立即数送给匹配模块。

s4:匹配模块(cmp)负责存储匹配数据,每个匹配数据对应一个存储地址,若提取数据和匹配数据一致,则将此存储地址作为动作指令存储模块(action_ram)的查表地址(即动作指令的存储地址)输出给动作模块;若匹配不一致,则输出约定的默认不处理查表地址给动作模块。

s5:动作模块(action)根据收到的存储地址,从动作指令存储模块的相应存储位置获取动作指令,然后根据获取的动作指令,对描述符进行修改,修改方式可包括置位(set)、移位(mov)以及常用alu操作,最后将修改后的描述符输出给报文发送模块(tx_pkt)。

set指令:该指令将1024bit描述符分为32组32bit数据,可以对32bit数据内的任意4bit进行置位,可以置1或0。

mov指令:该指令将1024bit描述符分为128组8bit数据,可以将任意一组数据搬移到另一组数据上,进行覆盖。

alu指令:可以支持加、减、异或、同或、与、或、非计算,操作数长度为1到32位有效长度。

s6:报文发送模块(tx_pkt)从动作模块获取修改后的描述符,将数据缓存模块(buffer)中缓存的报文用该修改后的描述符中的处理后的报文信息进行替换,实现对入口数据报文的修改功能,即所谓的拼包处理。可选的,若入口报文需要修改的位域长度大于描述符可携带长度,无法一次处理完,则需要将修改后的入口数据报文作为环回数据报文重新输入给报文发送模块(rx_pkt),再次处理,直至报文信息处理完成。

以上,对本发明提供的可编程硬件的逻辑实现方法进行了详细描述。

为便于深入理解本发明,下面结合具体应用场景的实际产品或系统为实例,进一步阐述本发明的具体实施方法和实际应用。

本实例在一个以太网安全芯片中使用了本发明的可编程硬件逻辑架构,以实现对以太网报文进行分类识别处理。

如图2所示,是该实例的可编程硬件逻辑架构的结构框图,包括报文接收模块(rx_pkt)、数据缓存模块(buffer)、报文发送模块(tx_pkt)、第一级可编程逻辑单元(slice0)和第二级可编程逻辑单元(slice1)。

该可编程硬件逻辑架构,用来实现对输入的以太网tcp(transmissioncontrolprotocol,传输控制协议)、udp(userdatagramprotocol,用户数据报协议)以及其他二层三层以太网报文进行分类掩码功能。

下面,以udp协议中的rip(routinginformationprotocol,路由信息协议)报文为例,描述可编程硬件逻辑架构识别rip报文的步骤。

该实例采取可编程架构主要是为了增加适用范围,若流片后,发现要支持的udp协议在应用上需要扩展,软件只需要增加对应协议的指令就可以支持应用扩展即可。

首先,介绍ipv4rip报文格式,如表1所示。

表1ipv4rip报文格式

下面介绍rip报文分类掩码实施步骤,包括:

1.报文接收模块(rx_pkt)模块将rip报文头部信息填充到描述符mf后,描述符送至第一级可编程逻辑单元(slice0),报文送至数据缓存模块(buffer)。

2.slice0,软件通过下发配置提取指令(extract_key),提取报文中的type[15:0]、version[3:0]、ihl[3:0]、protocol[7:0]字段,送到slice0中的第一级匹配模块(cmp)。

3.第一级匹配模块将输入的提取字段(即待比较字段)和软件下发的比较字段进行比对,若type[15:0]=0x0800、version[3:0]=0x4、ihl[3:0]=0x5、protocol[7:0]=0x11,则将匹配地址送给slice0中的动作指令存储模块(action_ram)提取动作指令。

4.slice0中的第一级动作模块(action)修改描述符中查询第二级提取指令查表地址,然后将修改后的描述符送至第二级可编程逻辑单元(slice1)。

5.slice1通过提取指令提取报文中的sourceport[15:0]字段,送到slice1中的第二级匹配模块(cmp)。

6.第二级匹配模块将输入的待比较字段和软件下发的比较字段进行比对,若sourceport[15:0]=16’h0208,则将匹配地址送给slice1中的动作指令存储模块(action_ram)提取动作指令。

7.slice1中的第二级动作模块(action)根据动作指令修改描述符,将checksum[15:0]字段的值全部置为0,然后将修改后的描述符送至报文发送模块(tx_pkt)。

8.报文发送模块模块将数据缓存模块(buffer)中的报文读出来,用描述符掩码后的报文头对原始报文进行覆盖,就实现了对以太网(ethnet,eth)报文的分类掩码功能。

进一步,若需要扩展支持其他udp报文,软件只需要在第二级可编程逻辑单元(slice1)的匹配模块增加匹配指令,使sourcport[15:0]=对应协议编号,就实现了对报文适用类型的扩展。

以上,对本发明提供的一个应用场景实例进行了详细描述。

综上,本发明公开了一种基于p4语言实现的可编程硬件逻辑架构,以及一种应用于该可编程硬件逻辑架构的逻辑实现方法。

本发明技术方案的有益效果在于:

本发明提供的基于p4语言实现的可编程硬件逻辑架构,允许用户使用p4语言对采用该架构的芯片进行二次开发,将任意网络报文进行识别,任意位域进行赋值、移位、常用alu操作,增加芯片的使用场景。

采用本发明的可编程硬件逻辑架构,不用为每个新项目整体重新编写代码,有利于提升硬件代码开发效率。软件可以基于p4语言,生成提取指令、匹配指令和动作指令,控制硬件逻辑对报文做相应的处理,增加芯片的适用场景。

本发明为支持可编程功能,可在硬件内部例化较多ram来存储可编程指令,以占用更多资源为代价,提供更丰富的应用。使用人员只需要熟悉可编程硬件逻辑架构和基于p4语言的编译器使用步骤,即可方便快捷的进行二次开发。

以上,通过具体实施例对本发明的技术方案进行了详细说明。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。

应当理解,上述各实施例仅用以说明本发明的技术方案,而非对其限制。本领域的普通技术人员,可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1