CN109921995A - 一种配置地址表的方法、fpga和应用该fpga的网络设备 - Google Patents

一种配置地址表的方法、fpga和应用该fpga的网络设备 Download PDF

Info

Publication number
CN109921995A
CN109921995A CN201711329166.8A CN201711329166A CN109921995A CN 109921995 A CN109921995 A CN 109921995A CN 201711329166 A CN201711329166 A CN 201711329166A CN 109921995 A CN109921995 A CN 109921995A
Authority
CN
China
Prior art keywords
keyword
address
fpga
sub
memory block
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.)
Granted
Application number
CN201711329166.8A
Other languages
English (en)
Other versions
CN109921995B (zh
Inventor
尤科剑
熊卫波
孔超
吴彬彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201711329166.8A priority Critical patent/CN109921995B/zh
Priority to EP18211793.7A priority patent/EP3499816B1/en
Priority to US16/218,879 priority patent/US10606798B2/en
Publication of CN109921995A publication Critical patent/CN109921995A/zh
Application granted granted Critical
Publication of CN109921995B publication Critical patent/CN109921995B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • G06F15/7871Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/02Input arrangements using manually operated switches, e.g. using keyboards or dials
    • G06F3/023Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/54Organization of routing tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供了一种在FPGA中配置地址表的方法、FPGA和应用该FPGA的网络设备。该FPGA包括k个存储块,k大于等于2。该FPGA获取关键字,该关键字是根据第一数据流的第一报文生成的,该关键字的长度等于该FPGA的关键字位宽。该FPGA获取该关键字对应的索引号,该索引号用于查找该第一数据流的转发表项。该FPGA将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块。该FPGA确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。通过本发明,可以在FPGA中为大位宽的关键字生成较小的地址表,节约了FPGA的地址空间。

Description

一种配置地址表的方法、FPGA和应用该FPGA的网络设备
技术领域
本发明涉及网络通信技术,尤其涉及一种配置地址表的方法、现场可编程门阵列(field-programmable gate array,FPGA)及应用该FPGA的网络设备。
背景技术
网络通信中,在实现许多网络协议时,需要根据输入的数据(称为关键字)在地址表中找到对应的存储地址,然后获取该存储地址中的目标数据。例如,当交换机从某个接口接收到数据帧时,该交换机提取该数据帧的目的媒体访问控制(media access control,MAC)地址,然后根据该目的MAC地址查找地址表,得到对应的存储地址,然后读取该存储地址对应的转发表项,得到对应的端口,并向该端口转发该数据帧。
当前,通常使用交换机中的FPGA执行上述查找地址表的功能。当该地址表的规格较大时,该地址表被存储在与该FPGA连接的支持并行查找的内容可寻址存储器(contentaddressable memory,CAM)中。然而由于CAM具有大功耗,高成本的特点,对于一些地址表的规格较小(例如表项数量小于1k),但是带宽较大的场景(即单位时间内需要处理的报文数较多的场景),需要FPGA在单位时间内频繁访问CAM。在这种情况下,使用在FPGA之外设置CAM的方式成本较高且不能实现快速查找。
发明内容
本发明提供了一种在FPGA中配置地址表的方法、FPGA和应用该FPGA的网络设备,能够将地址表存储在FPGA上,并减少FPGA上的地址表的表项数,提高FPGA的查找效率。
本发明第一方面提供了一种配置地址表的方法,该方法应用于现场可编程门阵列FPGA中,该FPGA包括k个存储块,k大于等于2。该FPGA获取关键字,该关键字是根据第一数据流的第一报文生成的,该关键字的长度等于该FPGA的关键字位宽。该FPGA获取该关键字对应的索引号,该索引号用于查找该第一数据流的转发表项。该FPGA将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块。该FPGA确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。
本发明上述方法中,FPGA在配置地址表的过程中,将一个大位宽的关键字分为k个小位宽的子关键字,并根据该关键字对应的数据流的转发表项的索引号和该k个子关键字,在k个较小的存储块中写入相应的存储地址,使最终生成的地址表只有较少的表项数,因此可以被存储在FPGA内部,能够避免为大位宽的关键字生成地址表时导致的表项数过多的问题,节约了FPGA的存储空间。
可选地,获取该关键字之前,该FPGA还用于获取该FPGA的该关键字位宽以及获取该FPGA的地址位宽,该地址位宽用于确定该FPGA的每个存储块中的地址表的最大表项数。该FPGA根据该关键字位宽和该地址位宽,确定该k个存储块。
可选地,该FPGA确定对应该关键字位宽和该地址位宽的存储块的数量k;根据该地址位宽和该存储块的数量k,从该FPGA的存储区域中确定该k个存储块。
其中,FPGA根据自己的关键字位宽和地址位宽确定存储块的数量,能够充分利用FPGA的存储空间。
可选地,每个存储块的数据位宽为该FPGA能够提供的最大数据位宽,这样可以使该FPGA所在的网络设备的转发表可以包括该最大数据位宽个转发表项,并能充分利用该FPGA的查找性能。
可选地,在根据该索引号在该地址表项中写入存储地址时,该FPGA确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项;将该地址表项中该索引号对应的比特置1,保持该地址表项中的其他比特的值不变。
上述编码方式称为独热码。通过独热码的编码方式,使得每个子关键字在对应的存储块的地址表项中只占用一个比特。这样,其他关键字的子关键字可以占用该地址表项的其他比特,提高了地址表项的复用率,保证了该FPGA可以用于查找的转发表的转发表项数等于该FPGA的最大数据位宽。
可选地,该FPGA接收查找请求,该查找请求是根据该第一数据流的第二报文生成的,该查找请求包括该关键字,该关键字的长度等于该FPGA的关键字位宽。该FPGA将该关键字分为该k个子关键字。该FPGA分别以该k个子关键字中的每个子关键字为地址,读取该子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址。该FPGA对该k个存储地址执行与操作,得到目标存储地址,并根据该目标存储地址生成该索引号。
上述过程中,FPGA将接收的关键字分为k个子关键字,并根据该k个子关键字并行读取k个存储块,得到该k个存储块中的k个存储地址,并根据该k个存储地址得到目标存储地址,根据该目标存储地址生成索引号。由于FPGA是根据k个子关键字并行读取k个较小的地址表,可以很快得到k个存储地址进而得到该索引号。因此,提高了FPGA的查找效率。
本发明第一方面的方法以及各种可选方式可以按照合理方式自由组合,各种组合都在本发明的保护范围之内。
本发明第二方面提供了一种现场可编程门阵列FPGA,该FPGA包括:计算电路和k个存储块,k大于等于2。该计算电路用于:获取关键字,该关键字是根据第一数据流的第一报文生成的;该关键字的长度等于该FPGA的关键字位宽;获取该关键字对应的索引号,该索引号用于查找该第一数据流的转发表项;将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块;确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。该k个存储块中的每个存储块用于:存储该计算电路写入的存储地址。
可选地,获取关键字之前,该计算电路还获取该关键字位宽和该FPGA的地址位宽,该地址位宽用于确定该FPGA的每个存储块中的地址表的最大表项数,并根据该关键字位宽和该地址位宽,确定该k个存储块。
可选地,当确定该k个存储块时,该计算电路确定对应该关键字位宽和该地址位宽的存储块的数量k,并根据该地址位宽和该存储块的数量k,从该FPGA的存储区域中确定该k个存储块。
可选地,当根据该索引号在该地址表项中写入存储地址时,该计算电路确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,将该地址表项中该索引号对应的比特置1,并保持该地址表项中的其他比特的值不变。
可选地,该计算电路还接收查找请求,该查找请求是根据该第一数据流的第二报文生成的,该查找请求包括该关键字。该计算电路将该关键字分为k个子关键字,每个子关键字对应该k个存储块中的一个存储块。该计算电路分别以该k个子关键字中的每个子关键字为地址,读取该子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址。该计算电路对该k个存储地址执行与操作得到目标存储地址,并根据该目标存储地址生成该索引号。
本发明第二方面的FPGA以及各种可选方式可以按照合理方式自由组合,各种组合都在本发明的保护范围之内。
本发明实施例第二方面的FPGA及其各实现方式是第一方面的方法及其各实现方式对应的装置,其有益效果可参考第一方面的方法及其各实现方式。
本发明第三方面提供了一种网络设备,该网络设备包括处理器和现场可编程门阵列FPGA,该FPGA包括k个存储块。该处理器接收第一数据流的第一报文,根据该第一报文生成关键字和索引号,该关键字的长度等于该FPGA的关键字位宽,该索引号用于查找该第一数据流的转发表项;向该FPGA发送该关键字和该索引号。该FPGA接收该关键字和该索引号,将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块。该FPGA确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。
可选地,该FPGA还获取该FPGA的该关键字位宽,并获取该FPGA的地址位宽,该地址位宽用于确定该FPGA的每个存储块中的地址表的最大表项数。该FPGA还根据该关键字位宽和该地址位宽,确定该k个存储块。
可选地,当确定该k个存储块时,该FPGA确定对应该关键字位宽和该地址位宽的存储块的数量k,根据该地址位宽和该存储块的数量k,从该FPGA的存储区域中确定该k个存储块。
可选地,当根据该索引号在该地址表项中写入存储地址时,该FPGA确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,将该地址表项中该索引号对应的比特置1,并保持该地址表项中的其他比特的值不变。
可选地,当根据该第一报文生成索引号时,该处理器根据该第一报文为该数据流生成该转发表项,将该转发表项写入转发表,将该转发表项在该转发表中的序号作为该索引号。
可选地,该处理器还接收该第一数据流的第二报文,该第二报文为该第一报文的后续报文;根据该第二报文生成该关键字;向该FPGA发送查找请求,该查找请求包括该关键字。该FPGA还接收该查找请求;将该关键字分为该k个子关键字;分别以该k个子关键字中的每个子关键字为地址,读取该子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址;对该k个存储地址执行与操作,得到目标存储地址;根据该目标存储地址生成该索引号。该FPGA还将该索引号发送给该处理器;该处理器还接收该索引号,根据该索引号获取该转发表项,根据该转发表项转发该第二报文。
本发明第三方面的网络设备以及各种可选方式可以按照合理方式自由组合,各种组合都在本发明的保护范围之内。
本发明实施例提供的网络设备的处理器在接收到新的数据流的报文时,为该数据流建立转发表项,并使该网络设备的FPGA在地址表中存储根据该转发表项的索引号得到的存储地址。处理器在接收到该数据流的后续报文时,可以通过该FPGA中的地址表获取到该转发表项对应的索引号,并根据该索引号查找到该转发表项,然后根据该转发表项转发该后续报文。由于该地址表是根据第一方面的方法配置的,该FPGA中的地址表的规格较小,查找速度较快。因此,本发明可以提高网络设备的转发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为现有技术中使用FPGA内部的RAM存储地址表时的查找地址表的过程示意图;
图2为现有技术中使用FPGA内部的RAM实现CAM的功能时的查找地址表的过程示意图;
图3为本发明实施例提供的FPGA的结构示意图;
图4为本发明实施例提供的在FPGA中配置地址表的方法流程示意图;
图5a和图5b为本发明实施例提供的在FPGA中配置地址表的过程示意图;
图6为本发明实施例中提供的在FPGA中查找地址表的方法流程示意图;
图7a和图7b为本发明实施例提供的在FPGA中查找地址表的过程示意图;
图8为本发明实施例提供的包括FPGA的装置的结构示意图。
具体实施方式
当前,为了避免地址表的规格较小时使用在FPGA之外设置CAM的方式导致的高成本,通常在地址表的规格较小时,使用FPGA内部的随机访问存储器(random accessmemory,RAM)来存储该地址表。
如图1所示,为现有技术中使用FPGA内部的RAM存储地址表时的查找地址表的过程示意图。当网络设备收到报文后,该网络设备的处理器提取该报文的关键字(key),并将该关键字发送给该网络设备的FPGA。该关键字例如可以是源因特网协议(InternetProtocol,IP)地址,目的IP地址,源媒体访问控制(media access control,MAC)地址,目的MAC地址、虚拟局域网标识(virtual local area network identifier,VLAN ID)、传输协议、源端口号和目的端口号中的至少一种。如图1所示,假设该地址表包括n个表项,每个表项包括一个预设关键字,例如,key 0到key(n-1)。FPGA依次比较该关键字与该地址表中的每个预设关键字,当某个预设关键字(假设key 1)与该关键字匹配时,将该预设关键字的存储地址(例如key1对应的address 1)作为查找到的存储地址。该预设关键字的存储地址,可以是该预设关键字所在的表项的编号或者该表项在该RAM中的硬件地址。此后,FPGA可以根据该存储地址从转发表中读取数据并将该数据发送给该处理器,或者FPGA可以将该存储地址发送给该处理器,由该处理器根据该存储地址从转发表中读取数据。其中,上述网络设备例如可以是交换机、路由器、具有虚拟网络功能的服务器或主机等。其中,预设关键字与该关键字匹配,可以是指该预设关键字与该关键字相同,或者该预设关键字与该关键字的指定比特位相同。
上述方案采用了串行查找的方式,每时钟周期(cycle)只能访问一次RAM,当RAM中的地址表的表项数为n时,最坏情况下,需要n个时钟周期才能找到关键字对应的存储地址,查找效率较低。
在另一种方式中,用FPGA内部的RAM实现CAM的功能。当用RAM实现CAM时,首先根据该FPGA能够处理的关键字位宽(即该关键字长度)在RAM中生成地址表,假设关键字位宽为N,则该地址表的表项数为2N个,且该地址表的每个表项中存储有存储地址,即存储地址是作为表项的数据写入表项中的。其中,一个表项中写入的存储地址可以为空,也可以不为空。
如图2所示,当FPGA收到关键字时,FPGA以该关键字为地址,直接读取该地址表中该地址对应的表项中的存储地址。例如,当关键字的位宽为8比特,且该关键字为00000010时,以00000010为地址读地址表中的表项,得到该表项中的存储地址为address2,address2即为目标数据的存储地址。
图2所示的方法不需要逐个匹配地址表中的每个表项,FPGA通过一次查找就可以获取到关键字对应的存储地址。但是当关键字位宽比较大时,需要的地址表的表项数呈指数级增长,会浪费FPGA的存储空间。
本发明实施例提供了一种改进的FPGA,能够快速获取大位宽的关键字对应的存储地址,且能够节约FPGA的存储空间。在一个实施方式中,该FPGA用于存储网络设备的转发表。其中,转发表通常用于网络桥接、路由和类似的功能以找到用于转发报文的接口。转发表例如可以是路由表或者MAC表。如图3所示,为本发明实施例提供的FPGA300的结构示意图。该FPGA 300包括计算电路310和存储区域320,所述存储区域320可根据需要被分为k个存储块,k大于等于2。当所述存储区域320被分为k个存储块时,每个存储块都有对应的编号或硬件地址,该编号或硬件地址用于识别该存储块。示例性地,该k个存储块为k个RAM。每个存储块包括多个存储子块,每个存储子块可以存储一个存储地址。由于存储块用于写入存储地址,本申请中将存储块对应的存储空间称为地址表,将存储子块对应的存储空间称为地址表项。
计算电路310用于配置该n个存储块中的地址表。当配置该地址表时,计算电路310执行图4所示的配置地址表的方法。
在步骤401中,计算电路310获取所述FPGA的关键字位宽A。
所述FPGA的关键字位宽A即FPGA能够处理的关键字的最大比特长度,由为该FPGA规划的功能决定。例如,当FPGA根据五元组查找存储地址时,该关键字位宽A包括32比特的源IPv4地址,32比特的目的IPv4地址,16比特的源端口号,16比特的目的端口号以及8比特的协议号,共104比特;当FPGA根据包括源IPv4地址,目的IPv4地址和协议号的三元组查找存储地址时,该关键字位宽A为72比特;当FPGA根据VLAN ID(长12比特)和目的MAC地址(长48比特)查找存储地址时,该关键字位宽A为60比特。
后续以关键字位宽A为12比特为例说明本发明实施例。
在步骤402中,计算电路310获取地址位宽B。
其中,地址位宽B用于确定每个存储块中可以存储的地址表项的数量(即地址表的最大表项数),并可以表示地址表项的硬件地址的长度。所述存储块可以为图3中的RAM。每个存储块相当于一个地址表,该地址表中最多可以存储2B个地址表项。后续以地址位宽为6比特,每个存储块中包括26=64个地址表项为例来说明本发明实施例。地址位宽B还可以是其他长度,例如,当地址位宽为5比特时,每个存储块中包括32个地址表项,当地址位宽为7比特时,每个存储块中包括128个地址表项。
在一个实施方式中,地址位宽B是根据FPGA中的随机访问存储块(block randomaccess memory,BRAM)的最大位宽决定的,这样可以提高FPGA中存储资源的利用率。
在步骤403中,计算电路310确定对应所述关键字位宽A和地址位宽B的存储块的数量k。
在一个实施方式中,计算电路310根据所述关键字位宽A和所述地址位宽B确定所需的存储块的数量k。具体地,计算电路310根据如下公式1确定所需的存储块的数量:
k=A/B 公式1
例如,当关键字位宽为12比特,地址位宽为6比特时,需要2个存储块。由于地址位宽为6比特,每个存储块相当于一个包括26=64个地址表项的地址表。
通过上述步骤401-403,计算电路310确定了实现特定位宽的关键字查找时需要的存储块的数量k。
在另一个实施方式中,还可以直接配置上述关键字位宽A,地址位宽B和存储块的数量k并将该配置在FPGA上电时加载到FPGA中,因此,上述步骤410-430为本发明实施例的可选实施方式。
进一步地,本发明实施例还可以设置存储块的数据位宽,即存储块中存储的地址表中存储地址的长度。
以下结合图5a和图5b来说明计算电路310生成地址表的过程,该生成地址表的过程即计算电路310在存储块中写入存储地址的过程。
在步骤404中,计算电路310根据所述地址位宽B和所述存储块的数量k,从存储区域中确定k个存储块。
例如,当地址位宽B为6比特,存储块的数量k为2时,计算电路310从FPGA的没有被占用的存储区域中确定2个存储块,每个存储块可以存储64个存储地址。
步骤404只需要在生成关键字之前执行一次。所述k个存储块具有相同的规格,即所述k个存储块具有相同的地址表项数。
在步骤405中,计算电路310获取关键字,该关键字的长度为A。
计算电路310可以接收处理器发送的根据第一数据流的第一报文生成的关键字,该关键字的长度为A。示例性地,图5a中,A为12比特,第一关键字为000010111100;图5b中,A为12比特,第二关键字为000010111101。具体地,该关键字是处理器根据该第一报文和FPGA的关键字位宽A生成的,该第一报文可以是以太帧、IPv4报文或IPv6报文等。该第一数据流可以是任意数据流。
在步骤406中,计算电路310获取所述关键字对应的索引号。
处理器在第一次收到属于第一数据流的第一报文时,发现转发表中没有存储该第一数据流对应的转发表项,则处理器根据该第一报文中的信息(例如包括第一报文的源IP地址、源MAC地址、目的IP地址、目的MAC地址和传输层协议的标识的五元组,或包括第一报文的源IP地址、目的IP地址和传输层协议的标识的三元组)为该第一数据流生成对应的转发表项,将该转发表项写入转发表中,并确定该转发表项的索引号,将该索引号发送给FPGA的计算电路310。该索引号用于从转发表中查找该第一数据流的转发表项。其中,该索引号不超过FPGA中的存储块的数据位宽。
例如图5a和图5b中,存储块的数据位宽(即存储地址的长度或比特数)为8,则索引号可以为0-7中的任意一个。在图5a所示的实施方式中,索引号为3;在图5b所示的实施方式中,索引号为4。在实际的部署中,所述存储块的数据位宽可以做到数百bit到上千bit,相应的,所述转发表的表项也可以达到上千个。例如,当存储块的数据位宽为1024bit时,所述索引号可以为0-1023中的任意一个。
其中,处理器可以将该关键字和该索引号同时或者分别发送给计算电路310,即步骤405和406可以同时执行,也可以分别执行,并且本发明实施例不限制分别执行时的顺序。在步骤407中,计算电路310将该关键字分为k个子关键字。
计算电路310根据存储块的数量k将该关键字平均分为k个子关键字,所述k个子关键字中的每个子关键字对应所述k个存储块一一对应。例如,子关键字ki对应存储块i,其中i∈(0,1,……(k-1))。再例如,图5a中,第一关键字000010111100被分为子关键字10(000010)和子关键字11(111100),子关键字10对应存储块0,子关键字11对应存储块1。图5b中,第二关键字000010111101被分为子关键字20(000010)和子关键字21(111101),子关键字20对应存储块0,子关键字21对应存储块1。
在步骤408中,对于每个子关键字,计算电路310确定该子关键字在对应的存储块中的地址表项,根据所述索引号在所述地址表项中写入存储地址。
在一个实施方式中,计算电路310确定每个子关键字在对应的存储块中的地址表项,并将所述地址表项中所述索引号对应的比特置1,保持所述地址表项中的其他比特的值不变。其他比特的值可以为0或者预先设定的其他值。
例如,图5a中,子关键字10(即子关键字000010)对应存储块0,以子关键字000010为地址,访问到存储块0中的编号为2的地址表项,将所述地址表项的中索引号对应的比特(即bit 3)置为1,其他比特的值不变(假设初始值为0),得到的存储地址为00001000,将该存储地址00001000写入存储块0的编号为2的地址表项中。类似地,子关键字11(即子关键字111100)对应存储块1,以子关键字111100为地址,访问存储块1中的编号为60的地址表项,将所述地址表项中索引号对应的比特(即bit 3)置为1,其他比特的值不变(假设初始值为0),得到的存储地址同样为00001000,将该存储地址00001000写入存储块1的编号为60的地址表项中。
进一步地,在图5a得到的地址表的基础上,执行图5b所示的配置地址表的过程。图5a中,第二关键字000010111101的子关键字20(即子关键字000010)对应存储块0,以子关键字000010为地址,访问到存储块0中的编号为2的地址表项,将所述地址表项的中索引号对应的比特(即bit 4)置为1,其他比特的值不变(假设初始值为0),得到的存储地址为00010000,将该存储地址00010000写入存储块0的编号为2的地址表项中,这样,编号为2的地址表项中的内容变成了00011000。类似地,子关键字21(即子关键字111101)对应存储块1,以子关键字111101为地址,访问存储块1中的编号为61的地址表项,将所述地址表项中索引号对应的比特(即bit 4)置为1,其他比特的值不变(假设初始值为0),得到的存储地址同样为00010000,将该存储地址00010000写入存储块1的编号为61的地址表项中。经过图5a和图5b的配置过程,存储块1中共写入了两个存储地址。
上述根据索引号生成存储地址时采用了独热码(one-hot code)的编码方式。其中,独热码是指有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。
通过独热码的编码方式,使得每个子关键字在对应的存储块的地址表项中只占用一个比特。这样,其他关键字的子关键字可以占用该地址表项的其他比特,提高了地址表项的复用率,保证了该FPGA可以用于查找的转发表的转发表项数等于该FPGA的最大数据位宽。例如图5a和图5b中,每个存储块中的地址表的数据位宽为8比特,则每个地址表项可以写入8个索引号不同的子关键字,该8个不同的索引号可以查找到8个转发表项,则网络设备的转发表中最多可以存储8个转发表项。
通过图4所示的方法根据FPGA的关键字位宽A和地址位宽B生成k个地址表,k=A/B。每个地址表包括2B个地址表项,则FPGA中共需要k*2B个地址表项即可实现对位宽为A的关键字的查找。以关键字位宽A=12,地址位宽B=6,k=2为例,采用现有的技术,需要的地址表项为212=4096个,而采用本发明实施例的方案,需要的地址表项为2*26=128个。以关键字位宽A=12,地址位宽B=4,k=3为例,采用现有的技术,需要的地址表项为212=4096个,而采用本发明实施例的方案,需要的地址表项为3*24=48个。可见,本发明实施例可以极大减少FPGA需要存储的地址表项数,进而节约FPGA的存储空间。
进一步地,本发明实施例还提供了一种查找地址表的方法。所述被查找的地址表是根据图4所示的方法配置的,因此,所述查找地址表的方法可以认为是图4所示的配置地址表的方法的延续。以下结合图6、图7a和图7b,对所述查找地址表的方法予以说明。其中,图6为所述查找地址表的方法的流程示意图,图7a和图7b为查找地址表的过程示意图。
在步骤601中,计算电路310接收查找请求,所述查找请求包括目标关键字,所述目标关键字的长度为A。
其中,所述查找请求可以是由处理器发送给FPGA的或者由FPGA中的其他组件生成的。
具体来说,当网络设备接收到所述第一数据流的第二报文时,所述网络设备的处理器根据所述FPGA的关键字位宽A和所述第二报文生成所述目标关键字。所述第二报文为所述第一报文之后的属于所述第一数据流的任意报文。由于第一报文和第二报文都是属于第一数据流的报文,因此第一报文用于生成关键字的流标识,例如第一数据流的五元组或者三元组,和第二报文用于生成关键字的流标识是相同的。因此根据第二报文生成的关键字,即目标关键字,和根据第一报文生成的关键字应该也是相同的。为了便于说明,在图7a中,使用图5a中的关键字000010111100为目标关键字;在图7b中,使用图5b中的关键字000010111101为目标关键字。
在步骤602中,计算电路310将所述目标关键字分为k个子目标关键字。
在一个实施方式中,计算电路310根据所述FPGA的地址位宽B将所述目标关键字分为k个子目标关键字。
例如,在图7a中,由于所述FPGA的地址位宽B为6比特,目标关键字000010111100被分为两个子目标关键字,即子目标关键字10(000010)和子目标关键字11(111100);类似地,图7b中,目标关键字000010111101被分为两个子目标关键字,即子目标关键字20(000010)和子目标关键字21(111101)。
在步骤603中,计算电路310分别以所述k个子目标关键字中的每个子目标关键字为地址,读取该子目标关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址。
本步骤中,计算电路310读取的是根据图4的配置地址表的方法得到的地址表,例如,图7a中,计算电路310以子目标关键字000010为地址读存储块0中编号为2的地址表项中的存储地址,得到存储地址00011000,并且,计算电路310以子目标关键字111100为地址读取存储块1中编号为60的地址表项中的存储地址,得到存储地址00001000;图7b中,计算电路310以子目标关键字000010为地址读存储块0中编号为2的地址表项中的存储地址,得到存储地址00011000,并且,计算电路310以子目标关键字111100为地址读取存储块1中编号为61的地址表项中的存储地址,得到存储地址00010000。
本申请中,计算电路并不需要逐个比较某个子目标关键字是否存储在某个存储块中,而是以该子目标关键字为地址直接读取对应的存储块中的存储地址,并且,由于k个子目标关键字对应不同的存储块,计算电路310可以根据该k个子目标关键字并行读取该k个存储块,因此,计算电路310可以快速获取到不同的存储地址,提高了查找速度。
在步骤604中,计算电路310对所述k个存储地址执行与操作,得到目标存储地址。
其中,目标存储地址即为目标数据的存储地址。
例如,图7a中,计算电路310对存储地址00011000和存储地址00001000执行与操作,得到目标存储地址00001000;图7b中,计算电路310对存储地址00011000和存储地址00010000执行与操作,得到目标存储地址00010000。
在上述查找地址表的过程中,计算电路310只需要并行读取与k个子关键字对应k个地址表项,得到k个存储地址,并对该k个存储地址执行与操作即可得到目标存储地址,极大提升了查找效率。此外,对根据目标关键字得到的k个存储地址执行与操作,能够保证每个目标关键字能得到唯一对应的目标存储地址,避免了地址冲突。
在步骤605中,计算电路310根据所述目标存储地址生成索引号。
如前所述,转发表项是存储在转发表中的,在转发报文时,需要查找到该报文的关键字对应的转发表项,而该转发表项通过索引号才能查找到。因此,在本发明中,需要将获取到的目标存储地址再转换成对应的索引号。当图6中的目标关键字和图4中的关键字对应相同的数据流时,步骤605中得到的索引号即为步骤406中的索引号。
在一个实施方式中,采用独热码的解码方式将所述目标存储地址转换成对应的索引号。例如,目标存储地址00001000的第三位为1,则根据独热码的解码方式得到的索引号为3;目标存储地址00010000的第四位为1,则根据独热码的解码方式得到的索引号为4。
进一步地,计算电路310还可以将所述索引号发送给处理器,以使处理器根据该索引号获取所述目标关键字对应的数据。所述目标关键字对应的数据可以为出接口、操作方式等,所述操作方式可以为封装报文,丢弃报文等。
基于本发明实施例提供的FPGA,如图8所示,本发明实施例还提供了一种网络设备800,该网络设备800例如可以是交换机、路由器、具有虚拟网络功能的服务器或主机等。该网络设备800包括处理器810以及图3所示的FPGA 300。其中,处理器810用于:接收第一数据流的第一报文;根据该第一报文生成关键字和索引号,其中该关键字的长度等于该FPGA300的关键字位宽,该索引号用于查找该第一数据流的转发表项;向该FPGA 300发送该关键字和该索引号。其中,该处理器810可以通过内部接口或内部总线向FPGA 300发送该关键字和该索引号。该FPGA 300用于:接收该关键字和该索引号,将该关键字分为k个子关键字,该k个子关键字中的每个子关键字对应该k个存储块中的一个存储块;确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据该索引号在该地址表项中写入存储地址。
在本发明的一个实施方式中,该FPGA 300还用于:获取该FPGA 300的该关键字位宽A;获取该FPGA的地址位宽B,该地址位宽B用于确定该FPGA的每个存储块中的地址表的最大表项数;根据该关键字位宽A和该地址位宽B,确定该k个存储块。
在本发明的一个实施方式中,当确定该k个存储块时,该FPGA 300用于:确定对应该关键字位宽A和该地址位宽B的存储块的数量k;根据该地址位宽B和该存储块的数量k,从该FPGA300的存储区域中确定该k个存储块。
在本发明的一个实施方式中,当根据该索引号在该地址表项中写入存储地址时,该FPGA300用于:确定该k个子关键字中的每个子关键字在对应的存储块中的地址表项;将该地址表项中该索引号对应的比特置1,保持该地址表项中的其他比特的值不变。
在本发明的一个实施方式中,当根据该第一报文生成索引号时,该处理器810用于:根据该第一报文为该数据流生成该转发表项,将该转发表项写入转发表,将该转发表项在该转发表中的序号作为该索引号。通常情况下,转发表的序号从0开始,这样,当该转发表项为该转发表的第20个选项时,该索引号为19。
在本发明的一个实施方式中,该处理器810还用于:接收该第一数据流的第二报文,该第二报文为该第一报文的后续报文;根据该第二报文生成该关键字;向该FPGA发送查找请求,该查找请求包括该关键字。可选地,该查找请求为该关键字本身。该FPGA300还用于:接收该查找请求;将该关键字分为该k个子关键字;分别以该k个子目标关键字中的每个子目标关键字为地址,读取该子目标关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址;对该k个存储地址执行与操作,得到目标存储地址;根据该目标存储地址生成该索引号。
进一步地,该FPGA 300还将该索引号发送给该处理器810;该处理器810还用于接收该索引号,根据该索引号获取该转发表项,根据该转发表项转发该第二报文。
图8所示的处理器810的功能可以通过处理器810中的硬件的集成逻辑电路、软件形式的指令、或者通过处理器810中的硬件及软件模块组合完成。其中,该软件模块可以位于存储介质中。该存储介质位于存储器820,处理器810读取存储器820中的信息,结合其硬件完成上述由处理器810实现的功能。
可以理解,上述存储器820可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasablePROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。应注意,本申请旨在包括但不限于这些和任意其它适合类型的存储器。
通过本发明实施例提供的网络设备,处理器810能够为接收的第一数据流建立转发表项,并使FPGA 300在地址表中存储根据该转发表项的索引号得到的存储地址。处理器810在接收到该第一数据流的后续报文时,可以通过该FPGA 300中的地址表获取到该转发表项对应的索引号,并根据该索引号查找到所述转发表项,然后根据所述转发表项转发所述后续报文。由于FPGA 300采用了图4所示的方法配置地址表,并采用图6所示的方法查找地址表,因此FPGA 300中的地址表的规格较小,查找速度较快。因此,本发明可以提高网络设备的转发效率。
本申请各部分的内容属于同一个发明构思,对某一附图描述不充分的地方,可参考其他部分的描述。
以上该仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (17)

1.一种配置地址表的方法,应用于现场可编程门阵列FPGA中,所述FPGA包括k个存储块,k大于等于2,所述方法包括:
获取关键字,所述关键字是根据第一数据流的第一报文生成的,所述关键字的长度等于所述FPGA的关键字位宽;
获取所述关键字对应的索引号,所述索引号用于查找所述第一数据流的转发表项;
将所述关键字分为k个子关键字,所述k个子关键字中的每个子关键字对应所述k个存储块中的一个存储块;
确定所述k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据所述索引号在所述地址表项中写入存储地址。
2.根据权利要求1所述的方法,其特征在于,所述获取关键字之前,所述方法还包括:
获取所述FPGA的所述关键字位宽;
获取所述FPGA的地址位宽,所述地址位宽用于确定所述FPGA的每个存储块中的地址表的最大表项数;
根据所述关键字位宽和所述地址位宽,确定所述k个存储块。
3.根据权利要求2所述的方法,其特征在于,所述根据所述关键字位宽和所述地址位宽,确定所述k个存储块包括:
确定对应所述关键字位宽和所述地址位宽的存储块的数量k;
根据所述地址位宽和所述存储块的数量k,从所述FPGA的存储区域中确定所述k个存储块。
4.根据权利要求1-3中任意一项所述的方法,其特征在于,确定所述k个子关键字中的每个子关键字在对应的存储块中的地址表项,根据所述索引号在所述地址表项中写入存储地址包括:
确定所述k个子关键字中的每个子关键字在对应的存储块中的地址表项;
将所述地址表项中所述索引号对应的比特置1,保持所述地址表项中的其他比特的值不变。
5.根据权利要求1-4中任意一项所述的方法,其特征在于,所述方法还包括:
接收查找请求,所述查找请求是根据所述第一数据流的第二报文生成的,所述查找请求包括所述关键字;
将所述关键字分为所述k个子关键字;
分别以所述k个子关键字中的每个子关键字为地址,读取所述子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址;
对所述k个存储地址执行与操作,得到目标存储地址;
根据所述目标存储地址生成所述索引号。
6.一种现场可编程门阵列FPGA,其特征在于,包括:计算电路和k个存储块,k大于等于2,其中:
所述计算电路用于:
获取关键字,所述关键字是根据第一数据流的第一报文生成的,所述关键字的长度等于所述FPGA的关键字位宽;
获取所述关键字对应的索引号,所述索引号用于查找所述第一数据流的转发表项;
将所述关键字分为k个子关键字,所述k个子关键字中的每个子关键字对应所述k个存储块中的一个存储块;
确定所述k个子关键字中的每个子关键字在对应的存储块中的地址表项;
根据所述索引号在所述地址表项中写入存储地址;
所述k个存储块中的每个存储块用于:
存储所述计算电路写入的存储地址。
7.根据权利要求6所述的FPGA,其特征在于,所述获取关键字之前,所述计算电路还用于:
获取所述关键字位宽;
获取所述FPGA的地址位宽,所述地址位宽用于确定所述FPGA的每个存储块中的地址表的最大表项数;
根据所述关键字位宽和所述地址位宽,确定所述k个存储块。
8.根据权利要求7所述的FPGA,其特征在于,当确定所述k个存储块时,所述计算电路用于:
确定对应所述关键字位宽和所述地址位宽的存储块的数量k;
根据所述地址位宽和所述存储块的数量k,从所述FPGA的存储区域中确定所述k个存储块。
9.根据权利要求6-8中任意一项所述的FPGA,其特征在于,当根据所述索引号在所述地址表项中写入存储地址时,所述计算电路用于:
确定所述k个子关键字中的每个子关键字在对应的存储块中的地址表项;
将所述地址表项中所述索引号对应的比特置1,保持所述地址表项中的其他比特的值不变。
10.根据权利要求6-9中任意一项所述的FPGA,其特征在于,所述计算电路还用于:
接收查找请求,所述查找请求是根据所述第一数据流的第二报文生成的,所述查找请求包括所述关键字;
将所述关键字分为所述k个子关键字;
分别以所述k个子关键字中的每个子关键字为地址,读取所述子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址;
对所述k个存储地址执行与操作,得到目标存储地址;
根据所述目标存储地址生成所述索引号。
11.一种网络设备,其特征在于,包括处理器和现场可编程门阵列FPGA,所述FPGA包括k个存储块,其中:
所述处理器用于:
接收第一数据流的第一报文;
根据所述第一报文生成关键字和索引号,其中所述关键字的长度等于所述FPGA的关键字位宽,所述索引号用于查找所述第一数据流的转发表项;
向所述FPGA发送所述关键字和所述索引号;
所述FPGA用于:
接收所述关键字和所述索引号;
将所述关键字分为k个子关键字,所述k个子关键字中的每个子关键字对应所述k个存储块中的一个存储块;
确定所述k个子关键字中的每个子关键字在对应的存储块中的地址表项;
根据所述索引号在所述地址表项中写入存储地址。
12.根据权利要求11所述的网络设备,其特征在于,所述FPGA还用于:
获取所述FPGA的所述关键字位宽;
获取所述FPGA的地址位宽,所述地址位宽用于确定所述FPGA的每个存储块中的地址表的最大表项数;
根据所述关键字位宽和所述地址位宽,确定所述k个存储块。
13.根据权利要求12所述的网络设备,其特征在于,当确定所述k个存储块时,所述FPGA用于:
确定对应所述关键字位宽和所述地址位宽的存储块的数量k;
根据所述地址位宽和所述存储块的数量k,从所述FPGA的存储区域中确定所述k个存储块。
14.根据权利要求11-13中任意一项所述的网络设备,其特征在于,当根据所述索引号在所述地址表项中写入存储地址时,所述FPGA用于:
确定所述k个子关键字中的每个子关键字在对应的存储块中的地址表项;
将所述地址表项中所述索引号对应的比特置1,保持所述地址表项中的其他比特的值不变。
15.根据权利要求11-14中任意一项所述的网络设备,其特征在于,当根据所述第一报文生成索引号时,所述处理器用于:根据所述第一报文为所述数据流生成所述转发表项,将所述转发表项写入转发表,将所述转发表项在所述转发表中的序号作为所述索引号。
16.根据权利要求11-15中任意一项所述的网络设备,其特征在于,
所述处理器还用于:
接收所述第一数据流的第二报文,所述第二报文为所述第一报文的后续报文;
根据所述第二报文生成所述关键字;
向所述FPGA发送查找请求,所述查找请求包括所述关键字;
所述FPGA还用于:
接收所述查找请求;
将所述关键字分为所述k个子关键字;
分别以所述k个子关键字中的每个子关键字为地址,读取所述子关键字对应的存储块中的地址表项中的存储地址,得到k个存储地址;
对所述k个存储地址执行与操作,得到目标存储地址;
根据所述目标存储地址生成所述索引号。
17.根据权利要求16所述的网络设备,其特征在于,
所述FPGA还用于:
将所述索引号发送给所述处理器;
所述处理器还用于:
接收所述索引号;
根据所述索引号获取所述转发表项;
根据所述转发表项转发所述第二报文。
CN201711329166.8A 2017-12-13 2017-12-13 一种配置地址表的方法、fpga和应用该fpga的网络设备 Active CN109921995B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201711329166.8A CN109921995B (zh) 2017-12-13 2017-12-13 一种配置地址表的方法、fpga和应用该fpga的网络设备
EP18211793.7A EP3499816B1 (en) 2017-12-13 2018-12-11 Method for configuring address table, fpga, and network device applying fpga
US16/218,879 US10606798B2 (en) 2017-12-13 2018-12-13 Method for configuring address table, FPGA, and network device applying FPGA

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711329166.8A CN109921995B (zh) 2017-12-13 2017-12-13 一种配置地址表的方法、fpga和应用该fpga的网络设备

Publications (2)

Publication Number Publication Date
CN109921995A true CN109921995A (zh) 2019-06-21
CN109921995B CN109921995B (zh) 2021-08-13

Family

ID=64900748

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711329166.8A Active CN109921995B (zh) 2017-12-13 2017-12-13 一种配置地址表的方法、fpga和应用该fpga的网络设备

Country Status (3)

Country Link
US (1) US10606798B2 (zh)
EP (1) EP3499816B1 (zh)
CN (1) CN109921995B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112637070A (zh) * 2020-12-21 2021-04-09 杭州迪普信息技术有限公司 一种表项查找的方法和设备
WO2021212770A1 (zh) * 2020-04-22 2021-10-28 上海御渡半导体科技有限公司 一种基于fpga的以太网交换机的mac地址管理装置及方法
CN113688410A (zh) * 2021-08-20 2021-11-23 山东云海国创云计算装备产业创新中心有限公司 一种数据检索方法、装置、fpga及介质
CN114615195A (zh) * 2022-02-25 2022-06-10 阳光凯讯(北京)科技有限公司 用于fpga的以太网五元组快速匹配查找方法及装置
CN116721684A (zh) * 2023-08-11 2023-09-08 深圳云豹智能有限公司 三态内容寻址存储器及其寻址方法、芯片
CN116743357A (zh) * 2022-09-30 2023-09-12 荣耀终端有限公司 密钥存储方法和装置

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1441579A (zh) * 2003-03-28 2003-09-10 清华大学 支持多nexthop的TCAM高速查找方法及其系统
CN1561047A (zh) * 2004-02-20 2005-01-05 清华大学 基于tcam的分布式并行ip路由查找方法
CN1870564A (zh) * 2006-05-08 2006-11-29 国家数字交换系统工程技术研究中心 基于三态地址关联存储器实现组播查表的方法及系统
CN1980180A (zh) * 2005-11-24 2007-06-13 武汉烽火网络有限责任公司 线速率学习和查找二层转发表项的方法和系统
US20070204170A1 (en) * 2006-02-01 2007-08-30 Oren Joseph E Securely Coupling an FPGA to a Security IC
CN101692209A (zh) * 2009-11-09 2010-04-07 盛科网络(苏州)有限公司 一种采用fpga内嵌sram仿真tcam的电路设计方法及装置
CN102025643A (zh) * 2010-12-30 2011-04-20 华为技术有限公司 一种流表查找方法和装置
US20110292943A1 (en) * 2010-05-26 2011-12-01 Huawei Technologies Co., Ltd. Method and apparatus for forwarding packets
US20110320693A1 (en) * 2010-06-28 2011-12-29 Avaya Inc. Method For Paramaterized Application Specific Integrated Circuit (ASIC)/Field Programmable Gate Array (FPGA) Memory-Based Ternary Content Addressable Memory (TCAM)
CN102437937A (zh) * 2011-12-29 2012-05-02 北京锐安科技有限公司 一种深度包检测方法
US8547136B1 (en) * 2011-11-11 2013-10-01 Altera Corporation Logic block protection system
CN103475584A (zh) * 2012-06-07 2013-12-25 中兴通讯股份有限公司 三态内容寻址存储器(tcam)查询方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8495093B2 (en) * 2010-08-18 2013-07-23 International Business Machines Corporation Multiway trie data structure that dynamically adjusts node sizes in a manner that reduces memory footprint and improves access speed
US9967187B2 (en) * 2013-04-11 2018-05-08 Marvell Israel (M.I.S.L) Ltd. Exact match lookup with variable key sizes

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1441579A (zh) * 2003-03-28 2003-09-10 清华大学 支持多nexthop的TCAM高速查找方法及其系统
CN1561047A (zh) * 2004-02-20 2005-01-05 清华大学 基于tcam的分布式并行ip路由查找方法
CN1980180A (zh) * 2005-11-24 2007-06-13 武汉烽火网络有限责任公司 线速率学习和查找二层转发表项的方法和系统
US20070204170A1 (en) * 2006-02-01 2007-08-30 Oren Joseph E Securely Coupling an FPGA to a Security IC
CN1870564A (zh) * 2006-05-08 2006-11-29 国家数字交换系统工程技术研究中心 基于三态地址关联存储器实现组播查表的方法及系统
CN101692209A (zh) * 2009-11-09 2010-04-07 盛科网络(苏州)有限公司 一种采用fpga内嵌sram仿真tcam的电路设计方法及装置
US20110292943A1 (en) * 2010-05-26 2011-12-01 Huawei Technologies Co., Ltd. Method and apparatus for forwarding packets
US20110320693A1 (en) * 2010-06-28 2011-12-29 Avaya Inc. Method For Paramaterized Application Specific Integrated Circuit (ASIC)/Field Programmable Gate Array (FPGA) Memory-Based Ternary Content Addressable Memory (TCAM)
CN102025643A (zh) * 2010-12-30 2011-04-20 华为技术有限公司 一种流表查找方法和装置
US8547136B1 (en) * 2011-11-11 2013-10-01 Altera Corporation Logic block protection system
CN102437937A (zh) * 2011-12-29 2012-05-02 北京锐安科技有限公司 一种深度包检测方法
CN103475584A (zh) * 2012-06-07 2013-12-25 中兴通讯股份有限公司 三态内容寻址存储器(tcam)查询方法和装置

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021212770A1 (zh) * 2020-04-22 2021-10-28 上海御渡半导体科技有限公司 一种基于fpga的以太网交换机的mac地址管理装置及方法
CN112637070A (zh) * 2020-12-21 2021-04-09 杭州迪普信息技术有限公司 一种表项查找的方法和设备
CN112637070B (zh) * 2020-12-21 2022-07-01 杭州迪普信息技术有限公司 一种表项查找的方法和设备
CN113688410A (zh) * 2021-08-20 2021-11-23 山东云海国创云计算装备产业创新中心有限公司 一种数据检索方法、装置、fpga及介质
CN114615195A (zh) * 2022-02-25 2022-06-10 阳光凯讯(北京)科技有限公司 用于fpga的以太网五元组快速匹配查找方法及装置
CN116743357A (zh) * 2022-09-30 2023-09-12 荣耀终端有限公司 密钥存储方法和装置
CN116743357B (zh) * 2022-09-30 2024-03-12 荣耀终端有限公司 密钥存储方法和装置
CN116721684A (zh) * 2023-08-11 2023-09-08 深圳云豹智能有限公司 三态内容寻址存储器及其寻址方法、芯片
CN116721684B (zh) * 2023-08-11 2023-12-01 深圳云豹智能有限公司 三态内容寻址存储器及其寻址方法、芯片

Also Published As

Publication number Publication date
US10606798B2 (en) 2020-03-31
EP3499816A1 (en) 2019-06-19
EP3499816B1 (en) 2022-02-02
CN109921995B (zh) 2021-08-13
US20190179797A1 (en) 2019-06-13

Similar Documents

Publication Publication Date Title
CN109921995A (zh) 一种配置地址表的方法、fpga和应用该fpga的网络设备
US9627063B2 (en) Ternary content addressable memory utilizing common masks and hash lookups
US9269411B2 (en) Organizing data in a hybrid memory for search operations
Meiners et al. Topological transformation approaches to TCAM-based packet classification
Banerjee et al. Tag-in-tag: Efficient flow table management in sdn switches
US9704574B1 (en) Method and apparatus for pattern matching
CN101834802B (zh) 转发数据包的方法及装置
US10348603B1 (en) Adaptive forwarding tables
CA2422439A1 (en) Selective routing of data flows using a tcam
JP2016502370A (ja) フローテーブルをマッチングするための方法及び装置、並びにスイッチ
US8923298B2 (en) Optimized trie-based address lookup
CN108377262A (zh) 管理网络设备处的服务链的方法、对应的网络设备
CN112965824A (zh) 报文的转发方法及装置、存储介质、电子设备
CN105791455B (zh) 三态内容寻址存储器tcam空间的处理方法及装置
CN113519144A (zh) 用于网络设备的精确匹配和三元内容可寻址存储器(tcam)混合查找
CN107547407A (zh) 报文传输方法、装置和实现装置
US10193804B2 (en) Method of forwarding data packets, method of creating merged FIB key entry and method of creating a search key
Ren et al. Routing and addressing with length variable ip address
Li et al. 5G with B-MaFIB based named data networking
US11140078B1 (en) Multi-stage prefix matching enhancements
CN103457855B (zh) 无类域间路由表建立、以及报文转发的方法和装置
Hsieh et al. A classified multisuffix trie for IP lookup and update
WO2020248690A1 (zh) 报文匹配查表方法、系统、存储介质和终端
Veeramani et al. Efficient IP lookup using hybrid trie-based partitioning of TCAM-based open flow switches
CN107547690A (zh) Nat中的端口分配方法、装置、nat设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant