首页> 中国专利> 一种用于生成TCAM搜索关键字的硬件及实现方法

一种用于生成TCAM搜索关键字的硬件及实现方法

摘要

本发明公开了一种用于生成TCAM搜索关键字的硬件,包括顶层模块,顶层模块包括例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2,例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2的结构相同,例化子模块1u_sb_kgu_wrap1包括一个搜索缓存模块u_sb、两个秘钥生成模块u_kgu、八个范围编码模块u_range、一个范围编码规则存储器模块u_mem_range_prifile、四个秘钥生成规则存储器模块u_mem_kgu_profile、一个命令解码模块u_command_decoder_kgu。

著录项

  • 公开/公告号CN112994886A

    专利类型发明专利

  • 公开/公告日2021-06-18

    原文格式PDF

  • 申请/专利权人 芯启源(南京)半导体科技有限公司;

    申请/专利号CN202110557419.7

  • 发明设计人 闫其报;项禹;陈盈安;卢笙;

    申请日2021-05-21

  • 分类号H04L9/08(20060101);H04L9/14(20060101);

  • 代理机构32424 南京新慧恒诚知识产权代理有限公司;

  • 代理人王皎

  • 地址 210046 江苏省南京市经济技术开发区兴智路兴智科技园A栋7层

  • 入库时间 2023-06-19 11:27:38

说明书

技术领域

本发明涉及计算机领域,具体涉及一种用于生成TCAM搜索关键字的硬件及实现方法。

背景技术

报文分类是许多网络核心技术的基础,其分类速度的快慢将直接影响待下一代网络的发展。目前,行业内实现报文分类的主流硬件方法是使用三态内容寻址存储器(TCAM,ternary Content-Addressable Memory )。

TCAM又称网络搜索引擎(Network Search Engine,NSE),它在CAM的基础上演进而来,每个bit都可以设置为0,1和x(don’tcare),存储为x的位可以屏蔽查找,查找操作对匹配的结果没有影响,因此,可以很方便的存储带有不同长度的前缀表项。TCAM内存储的所有条目支持并行访问,因此查询周期固定,不受条目数量的影响。当前, TCAM市场正在经历从IPv4到IPv6的重大转变,这为那些具有显著更高效架构的新进入者创造了独特的市场机。

Stargate NSE采用一种独创性的架构,是一种全新的实现三态内容寻址功能的算法网络搜索引擎。它将传统的硬件复杂性转化为了专有软件算法,结合了简单的硬件实现和基于软件的搜索引擎。相比于传统的基于复杂硬件架构的TCAM,它具有极低的延迟、极高的吞吐量以及极低的功耗等显著优势。图1是Stargate NSE的一个典型的应用场景的高层次架构示意图。运行在Control CPU内的规则管理库的管理算法用于决定分类规则存储于NSE内的数据格式,并通过接口总线传输至核心处理器。分类规则经管理算法处理后,存储在NSE的条目内。另一方面,在Stargate NSE内执行搜索操作时,处理器接收报文信息,从中提取关键字,送入NSE内进行搜索。若搜索到匹配的分类规则,则在相关的SDRAM中读取规则对应的执行动作,处理器根据返回的执行动作对报文进行处理。

Stargate NSE IP提供160MB算法TCAM解决方案。Stargate NSE的主时钟频率可达600MHz,每个时钟周期都可以提交一个操作给Stargate NSE。在查找周期中,Stargate NSE可以通过Interlaken接口提供的查找秘钥Ukey和SADR输入寻址的32K Search Buffer内存位置的内容,生成最多4个独立的主查找秘钥master key。Stargate NSE规则数据库配置由Profile输入指定。每个查找最多生成4个结果,并通过Stargate NSE IP输出端口输出Priority,Match,Ready等信号。在双Bank Mode下,KGU0/1服务BANK 0, KGU2/3服务BANK1。

图2所示为Stargate NSE的详细的架构示意图,它主要由四个大模块组成:两个搜索缓存器(sb,search buffer)、四个关键字生成单元(kgu,key generation unit)、搜索数据库(Database)、关联数据存储器(Quartets)。在实际的应用中,来自网络处理器的查找关键字Ukey通过Interlaken接口输入到搜索缓存器。同时,sb缓存了先前的key, 它可以通过输入的SADR地址去寻址32k Search Buffer的内存位置而得到,而后,sb结合用户数据和寻址获得的缓存key产生主查找关键字masterkey。在简单搜索命令的情况下,可以绕过搜索缓冲区。接下来,秘钥生成单元从搜索缓冲区中读取640bits的master key,并通过范围匹配编码对读取的主查找密钥进行加密,生成多达4个640位宽的搜索关键字searchkeys,这些searchkeys将在搜索数据库中查找。密钥生成算法是通过存储在Profile Cntrl SRAM中的配置文件定义的,该配置文件最多可以存储128条密钥生成规则。用户通过Profile输入为每个查找操作发出配置文件来选择密钥生成规则。在这之后,通过sb-kgu unit处理生成的searchkeys将提供给Database进行查找。Database具有高度可配置结构,它由8个Octopus blocks组成,每个Octopus blocks又由8个modules组成。每个module都可以执行80bits查找,Octopus允许相连的module执行以80bits粒度的任何宽度的查找,并在一个周期内执行最多640bits查找。每个module还允许创建最多4个虚拟bank,以便在共享的Dtabase SRAM空间中容纳多个流表。bank的大小是可配置的。Database的配置以及对每个Octopus中module的key的分配都存储在Profile Cntrl SRAM中。用户通过发出Profile,为每个查找操作配置Database。在Database中的查找结果Priority comparator包含4个通道。每个通道接收128×24bits优先结果从所有模块和选择最高的入口作为获胜的优先。每个优先级通道由Pofile Cntrl SRAM配置,选择模块输出,参与每个通道的优先级编码。用户可通过配置文件输入选择多达128个优先级编码配置。同一模块在同一周期内最多可参与4个信道的优先级编码。

搜索密钥作为TCAM进行搜索的依据是进行准确有效搜索的前提,因此对产生searchkey的功能模块的设计显得尤为重要。

搜索缓存器用于加载和存储来自网络处理器(NPU)、FPGA或ASIC的主查找关键字,并按顺序将数据以特定比特位宽为单位传输至关键字处理单元。先前曾经有研究者采用异步FIFO(First In First Out)缓存器结构实现(如图3),采用这种设计结构的原因是为了防止由于报文信息写入的时钟信号与协处理器内部的时钟信号不同造成的数据在传输时受跨时钟域的影响而出现亚稳态情况。

关键字处理单元根据接受来的主查找关键字,通过编码、复制、剪贴等方式对主查找关键字进行范围匹配编码预处理,以适配分类规则存储在数据库阵列中的格式。该研究者通过以下方式来规定关键字处理单元对来自搜索缓存的主查找关键字进行处理进而生成最终的搜索关键字的过程(如图4):在kgu接收到主查找关键字后,将协议信息与端口信息进行位置调换,并对源端口和目的端口数据进行二进制反射格雷码编码和复制,最后将144 bits的关键字数据分割为四个36 bits的查找关键字,四个新的关键字用于在数据库阵列中进行搜索任务。

上述先前研究者给出的产生搜索关键字的硬件功能过于简单,这导致它可应用的场景单一,很难应对真实生活中复杂的应用场景。再者,该方案实现的产生搜索秘钥的方式不可配置,灵活性较小,比如,搜索缓存器只能对用户输入的密钥作简单的缓存,不能实现对先前输入的密钥的利用;搜索关键字的产生规则不可配置等。最后其运行速度也较低,不能满足日益增长的带宽需求。这些缺陷都进一步的限制了其应用在商业领域。

发明内容

为解决现有技术的不足,本发明提出的一种用于生成TCAM搜索关键字的硬件及实现方法可以通过简单,高效的硬件架构配合相应的规则配置算法,可以快速高效的产生TCAM搜索关键字的用于生成TCAM搜索关键字。

为了实现上述目标,本发明采用如下的技术方案:

一种用于生成TCAM搜索关键字的硬件,其特征在于,包括顶层模块,所述顶层模块包括例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2,所述例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2的结构相同,所述例化子模块1u_sb_kgu_wrap1包括一个搜索缓存模块u_sb、两个秘钥生成模块u_kgu、八个范围编码模块u_range、一个范围编码规则存储器模块u_mem_range_prifile、四个秘钥生成规则存储器模块u_mem_kgu_profile、一个命令解码模块u_command_decoder_kgu、一个错误校检模块u_ecc_handle_sb_kgu、打拍模块u_pipe_reg、复位模块u_rst_met和若干逻辑块;所述搜索缓存模块u_sb用于接收用户发送的Ukey并与先前存储的key结合生成新的masterkey;秘钥生成模块u_kgu根据其他子模块输送的数据,通过进一步处理产生最终用于在Database中进行查找的searchkey;范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile分别用于给范围编码模块u_range和秘钥生成模块u_kgu配置范围编码规则和秘钥生成规则;范围编码模块u_range用于对来自于搜索缓存模块u_sb模块的masterkey进行范围编码;命令解码模块u_command_decoder_kgu用于对输入的信号进行解码;错误校检模块u_ecc_handle_sb_kgu对生成的中间信号进行错误校检;所述打拍模块u_pipe_reg用于保证时序正确;所述复位模块u_rst_met用于为各个子模块进行同步复位;所述搜索缓存模块u_sb作为Stargate NSE接收来自NPU/FPGA/ASIC关键字的缓存单元包括八个存储单元u_mem_sb、错误校检模块u_ecc_handle_sb、一级寄存器和若干组合逻辑块;所述错误校检模块u_ecc_handle_sb用于对重要的中间数据进行错误校验;所述秘钥生成模块u_kgu包括字节选择模块u_kgu_byte_selector、字节组合模块u_mux_top、一级寄存器和若干组合逻辑块,所述字节选择模块u_kgu_byte_selector利用存储器模块u_mem_kgu_profile产生的配置信息config_in[164:0]产生一个7bits的字节选择信号data_in_byte_selector[6:0],所述字节组合模块u_mux_top利用字节选择模块u_kgu_byte_selector生成的字节选择信号data_in_byte_selector[6:0]作为索引在接受到的搜索密钥searchkey[895:0]中选择相应的字节组成最终的搜索秘钥key_out[639:0]。

一种用于生成TCAM搜索关键字的硬件实现方法,其特征在于,包括以下步骤:S1、通过UKey接口转换输入的数据信号,并将输入的数据信号均分后传输至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2;S2、输入的数据信号经过例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2的处理,分别输出一个1280bit的搜索关键字key_out;S3、两个1280bit的搜索关键字key_out经过拼接后形成一个作为搜索数据库Database的输入用于在其流表中执行查找操作的搜索关键字;S4、profile信号和opcode信号通过例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2传输后,进行拼接,生成opcode_out[5:0]、profile_out[13:0]。此外,为了简明扼要的说明关键数据流,该顶层模块只列出了几个关键的输出信号,除此之外还有一些校检和控制信号:sec_ded[3:0]、rd_rdy[1:0]、d_out[273:0],这些输出信号也均是由两个例化子模块的输出拼接而成后传输至搜索数据库Database。

所述步骤S1中,通过UKey接口转换输入的数据信号包括key_in信号、width 信号、profile信号、opcode信号和sb_addr信号;所述key_in信号为NPU的关键字,它的位宽是640bits,在双模块模式下,总共位宽是1280 bits,其中前640bits,即[639:0]输送至例化子模块1u_sb_kgu_wrap1,剩下640bits,即[1279:640]被输送至例化子模块2u_sb_kgu_wrap2,key_in信号被映射到UKey接口的数据字上;所述width 信号为Ukey接口输入的数据中关键字key_in信号的有效比特数,width 信号总共3bits,其中0,即3’b000,表示key_in信号有80bits有效,1,即3’b001,表示160bits有效;width 信号对应的十进制数每增加1,则有效比特数增加80bits,当width信号为3’b111时,key_in信号的有效位宽最大,为640bits;在双模块模式下,width信号总位宽为6 bits,其中width[2:0] 输送至例化子模块1u_sb_kgu_wrap1,width[3:5]输送至例化子模块2u_sb_kgu_wrap2,分别用于定义输入其中的key_in的有效比特数;所述profile信号用于定义搜索操作的每一步所需的配置文件,通过UKey接口转换输入的profile信号即是为了配置搜索密钥生成规则,位宽为6bit,被均分输送至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2,分别对其秘钥生成规则进行配置;所述opcode信号为NSE所要执行的操作,opcode信号包含3个bits,在双模块模式下,opcode信号总位宽为[5:0],共6bits均分的输送至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2;所述sb_addr信号用于在搜索缓存模块u_sb的存储单元中进行寻址以获取先前缓存的key,key将用于和用户输入的Ukey结合以生成主查找关键字masterkey;在双模块模式下,sb_addr信号共有30bits,按照从低位到高位的顺序被均分至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2,并被用作搜索缓存key的地址。

优选地,前述所述步骤S2中,输入的数据信号传输至例化子模块1u_sb_kgu_wrap1后,输入信号在例化子模块1u_sb_kgu_wrap1中的具体处理方法包括以下流程,来自于UKey接口的key_in[639:0]、sb_addr[14:0]、opcode[2:0]等数据输入到搜索缓存模块u_sb,搜索缓存模块u_sb利用sb_addr[14:0]和opcode[2:0]在其存储单元中寻址得到缓存key,并与key_in信号结合产生主查找秘钥sb_key_out[639:0];同时来自于UKey接口的key_in信号的前160 bits以及opcode[2:0]也将被输入至命令解码模块u_command_decoder_kgu,命令解码模块u_command_decoder_kgu将利用key_in信号的前160 bits以及opcode[2:0]产生profile_kgu_d_command[117:0]以及profile_kgu_adr_command[6:0] 信号,profile_kgu_d_command[117:0]以及profile_kgu_adr_command[6:0] 信号输入至范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile,范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile同时接受用户下的发配置信息profile[6:0],范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile利用配置信息profile[6:0]分别为范围编码模块u_range和秘钥生成模块u_kgu产生相应的规则配置信号:key_offset[7:0]和profile_q_int[109:0],秘钥生成模块u_kgu利用规则配置信号key_offset[7:0]和来自于命令解码模块u_command_decoder_kgu的输出range_adr_command[7:0]对搜索缓存模块u_sb产生的主查找秘钥sb_key_out[639:0]进行范围编码;范围编码后产生的输出key_range_segment[255:0]将进一步和主查找秘钥信号sb_key_out[639:0]拼接为masterkey[895:0]并输入至秘钥生成模块u_kgu;两个秘钥生成模块u_kgu都接收来自UKey接口的opcode[2:0]信号,并利用秘钥生成规则存储器模块u_mem_kgu_profile产生的配置信息config_in[164:0],将输入的masterkey[895:0]处理为key_out_kgu[639:0],生成的这两个数据被存储于数组key_out_kgu[1:0]中,经过进一步的拼接操作后得到能够在Database中执行搜索操作的搜索秘钥key_out[1279:0]。

再优选地,前述所述步骤S2中,输入的数据信号传输至搜索缓存模块u_sb后,输入信号在搜索缓存模块u_sb中的具体处理方法包括以下流程,接收Ukey接口发送来的key_in[639:0]、sb_addr[14:0]、oppcode[2:0]以及width[2:0];为了满足Interlaken协议要求,key_in_r[639:0]信号在高位补上1408d’0形成2048位的数据,之后将其存储于深度为16宽度为80的mem_din_bus[15:0]存储器中,mem_din_bus[15:0] 存储器中存储的前640bits按照粒度为80bits被分别输送至8个存储单元u_mem_sb中,同时,mem_din_bus[15:0] 存储器中存储的前1280bits被输送至一个组合逻辑块后,输出key_forward[639:0]信号;每个存储单元u_mem_sb都接收一个80bits的mem_din_sb[i] 数据,其中i=0~7,同时也接收地址信号sb_addr[14:0]的前12bits,即为addr_local[11:0]、经过组合逻辑块处理过后的操作码信号oppcode[2:0],即为Ic_cw_decode以及由另一组合逻辑块输出的使能信号sb_mem_we,存储单元u_mem_sb根据输入的数据寻址得到缓存密钥并存储于深度为8宽度为80的存储器sb_mem_dout_bus[7:0]中,并和640bits的key_in信号、使能信号sb_mem_we以及操作码信号Ic_decode信号一同输入一个组合逻辑块中,在操作码信号Ic_decode信号不使能,即Ic_decode=0时,该组合逻辑直接将用户输入的密钥作为输出赋给key_buff[639:0],在经过一级寄存器后得到最终的主搜索密钥key_out[639:0];在操作码信号Ic_decode信号使能时,该组合逻辑块将对使能信号sb_mem_we的使能进行判断,当使能信号sb_mem_we使能时,用sb_mem_dout_bus[i],其中i=0~7,去替换用户输入的640bits密钥中的8个80bits字段,当使能信号sb_mem_we不使能时,则不去替换用户输入的640bits密钥中的8个80bits字段,从而得到最终的主搜索密钥key_out[639:0];搜索缓存模块u_sb中8个存储单元u_mem_sb最多存储8×4k80bits的条目内容,640bits的Ukey被分为8个80bits的字段segment,最低有效位对应于最低有效地址位;搜索缓存模块u_sb使用sb_addr[14:0]总线进行寻址,该总线指向搜索缓存模块u_sb中存储单元u_mem_sb的80位秘钥位置;sb_addr[14:3]总线指向640bits的缓存key,忽略3位最低有效地址位;当写入的Ukey的位宽超过640bits的边界,则超过640bits的部分将被丢失;key以8bits(一个字节)为单位写入搜索缓存模块u_sb的存储单元,最高可达640bits,当准备写入的key的位宽不能匹配80bits的边界,则只有160bits将会被写入到sb的存储单元中,剩余的8bits将会被四舍五入到下一个准备写入的key中;在写操作期间,搜索缓存模块u_sb使用sb_addr[14:3]地址去产生一个640bits位宽的缓存key;搜索缓存模块u_sb使用来自于内存实例且没有被更新的现有数据结合用户输入的Ukey来生成一个新的masterkey。

更优选地,前述所述步骤S2中,为了保证时序,Ukey接口发送来的key_in[639:0]、sb_addr[14:0]、oppcode[2:0]以及width[2:0]通过一级寄存器后分别被输送至相应的组合逻辑块进行处理。

进一步优选地,前述所述步骤S2中,输入的数据信号传输至范围编码模块u_range后,输入信号在范围编码模块u_range中的具体处理方法包括以下流程,为了对支持搜索关键字的特定字段的编码,由搜索缓存模块u_sb产生的masterkey进一步被8个范围编码模块u_range处理,每一个范围编码模块u_range都通过将搜索密钥的16 bits字段和用户可编程的32bits寄存器阵列比较进而生成用于扩展masterkey的32bits的向量;每一个profile都分配唯一的segment用于范围比较;若向量中的位被设置,那么masterkey中的数据比寄存器中的数据要小;用户可以通过在寄存器阵列中编写掩码字段来排除比较中的任何位;之后kgu从640 bits的 masterkey和256bits的范围编码模块的输出构造出4个最多640bits的searchkey。每个配置文件profile都分配唯一的构造规则,秘钥生成模块u_kgu最多支持128个配置文件,存储于profile RAM中的偏移量指示在masterkey中16 bits字段的起始字节数;范围编码模块u_range将根据该偏移量选择搜索缓存模块u_sb输出的masterkey中的16bits字段,有效的范围是0-4Dh;之后16 bits的被选择字段和存储在寄存器阵列中的16 bits的掩码执行按位与操作,按位与操作的结果将进一步和寄存器阵列中存储的值进行比较,若该值小于寄存器阵列中存储的值,那么将产生一个被设置的位。

具体地,前述八个所述范围编码模块u_range执行8×32次,产生8×32bits的关键字范围编码向量。

再优选地,前述所述步骤S2中,输入的数据信号传输至秘钥生成模块u_kgu后,输入信号在秘钥生成模块u_kgu中的具体处理方法包括以下流程,秘钥生成规则存储器模块u_mem_kgu_profile的配置信息cogfig_in[164:0]经过一级寄存器后通过一个组合逻辑块分割为两个配置数据offset[104:0]和width[59:0],它们之后再次通过一个组合逻辑块产生accum[111:0],这三个信号都被输送到每一个字节选择模块u_kgu_byte_selector子模块;每一个字节选择模块u_kgu_byte_selector模块都将产生一个7bits的字节选择信号data_in_byte_sell[6:0]并输入到字节组合模块u_mux_top,同时字节组合模块u_mux_top也将接收由搜索缓存模块u_sb的输出和范围编码模块u_range的输出拼接形成的主搜索密钥master_key[895:0],在字节组合模块u_mux_top中包含80个u_kgu_mux模块,80个u_kgu_mux模块利用字节选择信号data_in_byte_sell[6:0]作为索引标志在master key[895:0]中选择相应的字节组成最终的搜索密钥key_out[639:0]。

更优选地,前述所述秘钥生成模块u_kgu生成搜索关键字的具体步骤:每个key由10个segments连接而成;对于每一个segment,用户必须指定segment在key中的偏移量offset以及segment的位宽width;其中offset作为segment在key中开始的字节数,范围在0-0x4Eh共7bits,segmentwidth标志组成segment的字节数,范围从1至16;segmentwidth是一个4bits的字段,segement中的字节数等于宽度字段的值+1;若在构造所有segments后生成的key的字节数少于640bits,那么为了将结果补到640bits,不足的部分将会直接复制输入kgu模块的640bits的masterkey;如果从0到9的所有segments的偏移量都被设置为7F,那么来自于搜索缓存器的masterkey将会被原样复制。

本发明的有益之处在于:1、Stargate NSE采用了独特的硬件架构,简单而高效;2、使用算法代替了部分硬件资源实现的功能,使得硬件结构更加简单;3、搜索关键字的产生方式可配置,更加灵活。

附图说明

图1是基于Stargate NSE的报文分类高层次架构图;

图2是Stargate NSE的详细的架构示意图;

图3是异步FIFO的原理图;

图4是关键字处理单元的工作示意图;

图5是本发明Stargate NSE中用于生成搜索密钥的顶层模块的设计架构图;

图6是图5中sb_kgu_wrap模块的设计架构图;

图7是搜索缓存模块的设计架构图;

图8是范围编码器的内部结构示意图;

图9是kgu模块的设计架构图;

图10是kgu模块在密钥生成规则作用下产生searchkey的原理图。

具体实施方式

以下结合附图和具体实施例对本发明作具体的介绍。

在Stargate NSE的设计中,将加载和缓存主查找关键字的sb模块和生成搜索关键字的kgu模块作为一个整体设计为sb_kgu_int顶层模块(图5)。这个顶层模块例化了两个相同的u_sb_kgu_wrap(以u_开始的模块名表示的是这个模块被例化时的名称,把u_去除时即为它们对应的模块名)模块。图2的顶层架构图中显示的数据流只包含了部分关键的数据信号,为了更加简明清晰地说明设计的数据流,一些控制信号未体现在其中。为了对StargateNSE执行复位,NSE的所有的输入信号必须被设置为低电平并保持时钟被激活至少10个周期;在复位信号被设置为高电平后,用户在执行NSE的搜索操作之前必须等待10个时钟周期。在实际的查找应用中。

根据图5,顶层模块,所述顶层模块包括例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2,通过UKey接口转换输入的数据信号,并将输入的数据信号均分后传输至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2;通过UKey接口转换输入的数据信号,并将输入的数据信号均分后传输至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2;输入的数据信号经过例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2的处理,分别输出一个1280bit的搜索关键字key_out;两个1280bit的搜索关键字key_out经过拼接后形成一个作为搜索数据库Database的输入用于在其流表中执行查找操作的搜索关键字;profile信号和opcode信号通过例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2传输后,进行拼接,生成opcode_out[5:0],profile_out[13:0],并传输至搜索数据库Database。

通过UKey接口转换输入的数据信号包括key_in信号、width 信号、profile信号、opcode信号和sb_addr信号;key_in信号为NPU的关键字,它的位宽是640bits,在双模块模式下,总共位宽是1280 bits,其中前640bits,即[639:0]输送至例化子模块1u_sb_kgu_wrap1,剩下640bits,即[1279:640]被输送至例化子模块2u_sb_kgu_wrap2,key_in信号被映射到UKey接口的数据字上;width 信号为Ukey接口输入的数据中关键字key_in信号的有效比特数,width 信号总共3bits,其中0,即3’b000,表示key_in信号有80bits有效,1,即3’b001,表示160bits有效;width 信号对应的十进制数每增加1,则有效比特数增加80bits,当width信号为3’b111时,key_in信号的有效位宽最大,为640bits;在双模块模式下,width信号总位宽为6 bits,其中width[2:0] 输送至例化子模块1u_sb_kgu_wrap1,width[3:5]输送至例化子模块2u_sb_kgu_wrap2,分别用于定义输入其中的key_in的有效比特数;profile信号用于定义搜索操作的每一步所需的配置文件,通过UKey接口转换输入的profile信号即是为了配置搜索密钥生成规则,位宽为6bit,被均分输送至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2,分别对其秘钥生成规则进行配置。

opcode信号为NSE所要执行的操作,opcode信号包含3个bits,表1为不同的数据表示的要执行的操作的列表;在双模块模式下,opcode信号总位宽为[5:0],共6bits均分的输送至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2;sb_addr信号用于在搜索缓存模块u_sb的存储单元中进行寻址以获取先前缓存的key,key将用于和用户输入的Ukey结合以生成主查找关键字masterkey;在双模块模式下,sb_addr信号共有30bits,按照从低位到高位的顺序被均分至例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2,并被用作搜索缓存key的地址。

表1 Stargate NSE IP 可执行的操作

根据图6,例化子模块1u_sb_kgu_wrap1和例化子模块2u_sb_kgu_wrap2的结构相同,例化子模块1u_sb_kgu_wrap1包括一个搜索缓存模块u_sb、两个秘钥生成模块u_kgu、八个范围编码模块u_range、一个范围编码规则存储器模块u_mem_range_prifile、四个秘钥生成规则存储器模块u_mem_kgu_profile、一个命令解码模块u_command_decoder_kgu、一个错误校检模块u_ecc_handle_sb_kgu、打拍模块u_pipe_reg、复位模块u_rst_met和若干逻辑块;所述搜索缓存模块u_sb用于接收用户发送的Ukey并与先前存储的key结合生成新的masterkey;秘钥生成模块u_kgu根据其他子模块输送的数据,通过进一步处理产生最终用于在Database中进行查找的searchkey;范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile分别用于给范围编码模块u_range和秘钥生成模块u_kgu配置范围编码规则和秘钥生成规则;范围编码模块u_range用于对来自于搜索缓存模块u_sb模块的masterkey进行范围编码;命令解码模块u_command_decoder_kgu用于对输入的信号进行解码;错误校检模块u_ecc_handle_sb_kgu对生成的中间信号进行错误校检;所述打拍模块u_pipe_reg用于保证时序正确;所述复位模块u_rst_met用于为各个子模块进行同步复位。

来自于UKey接口的key_in[639:0]、sb_addr[14:0]、opcode[2:0]等数据输入到搜索缓存模块u_sb,搜索缓存模块u_sb利用sb_addr[14:0]和opcode[2:0]在其存储单元中寻址得到缓存key,并与key_in信号结合产生主查找秘钥sb_key_out[639:0];同时来自于UKey接口的key_in信号的前160 bits以及opcode[2:0]也将被输入至命令解码模块u_command_decoder_kgu,命令解码模块u_command_decoder_kgu将利用key_in信号的前160bits以及opcode[2:0]产生profile_kgu_d_command[117:0]以及profile_kgu_adr_command[6:0] 信号,profile_kgu_d_command[117:0]以及profile_kgu_adr_command[6:0] 信号输入至范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile,范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile同时接受用户下的发配置信息profile[6:0],范围编码规则存储器模块u_mem_range_profile和秘钥生成规则存储器模块u_mem_kgu_profile利用配置信息profile[6:0]分别为范围编码模块u_range和秘钥生成模块u_kgu产生相应的规则配置信号:key_offset[7:0]和profile_q_int[109:0],秘钥生成模块u_kgu利用规则配置信号key_offset[7:0]和来自于命令解码模块u_command_decoder_kgu的输出range_adr_command[7:0]对搜索缓存模块u_sb产生的主查找秘钥sb_key_out[639:0]进行范围编码;范围编码后产生的输出key_range_segment[255:0]将进一步和主查找秘钥信号sb_key_out[639:0]拼接为masterkey[895:0]并输入至秘钥生成模块u_kgu;两个秘钥生成模块u_kgu都接收来自UKey接口的opcode[2:0]信号,并利用秘钥生成规则存储器模块u_mem_kgu_profile产生的配置信息config_in[164:0],将输入的masterkey[895:0]处理为key_out_kgu[639:0],生成的这两个数据被存储于数组key_out_kgu[1:0]中,经过进一步的拼接操作后得到能够在Database中执行搜索操作的搜索秘钥key_out[1279:0]。

根据图7,搜索缓存模块u_sb作为Stargate NSE接收来自NPU/FPGA/ASIC关键字的缓存单元包括八个存储单元u_mem_sb、错误校检模块u_ecc_handle_sb、一级寄存器和若干组合逻辑块;所述错误校检模块u_ecc_handle_sb用于对重要的中间数据进行错误校验。

接收Ukey接口发送来的key_in[639:0]、sb_addr[14:0]、oppcode[2:0]以及width[2:0];为了满足协议(什么协议)要求,key_in_r[639:0]信号在高位补上1408d’0形成2048位的数据,之后将其存储于深度为16宽度为80的mem_din_bus[15:0]存储器中,mem_din_bus[15:0]存储器中存储的前640bits按照粒度为80bits被分别输送至8个存储单元u_mem_sb中,同时,mem_din_bus[15:0]存储器中存储的前1280bits被输送至一个组合逻辑块后,输出key_forward[639:0]信号;每个存储单元u_mem_sb都接收一个80bits的mem_din_sb[i] 数据,其中i=0~7,同时也接收地址信号sb_addr[14:0]的前12bits,即为addr_local[11:0]、经过组合逻辑块处理过后的操作码信号oppcode[2:0],即为Ic_cw_decode以及由另一组合逻辑块输出的使能信号sb_mem_we,存储单元u_mem_sb根据输入的数据寻址得到缓存密钥并存储于深度为8宽度为80的存储器sb_mem_dout_bus[7:0]中,并和640bits的key_in信号、使能信号sb_mem_we以及操作码信号Ic_decode信号一同输入一个组合逻辑块中,在操作码信号Ic_decode信号不使能,即Ic_decode=0时,该组合逻辑直接将用户输入的密钥作为输出赋给key_buff[639:0],在经过一级寄存器后得到最终的主搜索密钥key_out[639:0];在操作码信号Ic_decode信号使能时,该组合逻辑块将对使能信号sb_mem_we的使能进行判断,当使能信号sb_mem_we使能时,用sb_mem_dout_bus[i],其中i=0~7,去替换用户输入的640bits密钥中的8个80bits字段,当使能信号sb_mem_we不使能时,则不去替换用户输入的640bits密钥中的8个80bits字段,从而得到最终的主搜索密钥key_out[639:0]。

搜索缓存模块u_sb中8个存储单元u_mem_sb最多存储8×4k80bits的条目内容,640bits的Ukey被分为8个80bits的字段segment,最低有效位对应于最低有效地址位;搜索缓存模块u_sb使用sb_addr[14:0]总线进行寻址,该总线指向搜索缓存模块u_sb中存储单元u_mem_sb的80位秘钥位置;sb_addr[14:3]总线指向640bits的缓存key,忽略3位最低有效地址位;当写入的Ukey的位宽超过640bits的边界,则超过640bits的部分将被丢失,例如,如果用户写入160bitsUkey进入sb_addr=7的地址,那么仅仅有80 bits的数据会被写入和用于masterkey的生成;key以8bits(一个字节)为单位写入搜索缓存模块u_sb的存储单元,最高可达640bits,当准备写入的key的位宽不能匹配80bits的边界,例如,写入的key的位宽为168bits,则只有160bits将会被写入到搜索缓存模块u_sb的存储单元中,剩余的8bits将会被四舍五入到下一个准备写入的key中;在写操作期间,搜索缓存模块u_sb使用sb_addr[14:3]地址去产生一个640bits位宽的缓存key;搜索缓存模块u_sb使用来自于内存实例且没有被更新的现有数据结合用户输入的Ukey来生成一个新的masterkey,例如,如果地址8-0包含数据ABCDEFGH(每一个字母对应于一个80bits的key),用户将KL写入到位置为5,那么搜索缓存器将会生成的masterkey为AKLDEFGH,这个新生成的masterkey也会成为sb中存储的新值。在此操作期间,数据将会从内存实例0、1、2、3、4、7中读取,用户输入的数据将会被写入的内存实例5和6。

为了保证时序,Ukey接口发送来的key_in[639:0]、sb_addr[14:0]、oppcode[2:0]以及width[2:0]通过一级寄存器后分别被输送至相应的组合逻辑块进行处理。

如果准备写入的key的位宽不能匹配80bits的边界,例如,写入的key的位宽为168bits,那么只有160bits将会被写入到sb的存储单元中,剩余的8bits将会被四舍五入到下一个准备写入的key中;

在写操作期间,sb使用sb_addr[14:3]地址去产生一个640bits位宽的缓存key。它使用来自于内存实例且没有被更新的现有数据结合用户输入的Ukey来生成一个新的masterkey。例如,如果地址8-0包含数据ABCDEFGH(每一个字母对应于一个80bits的key),用户将KL写入到位置为5,那么搜索缓存器将会生成的masterkey为AKLDEFGH,这个新生成的masterkey也会成为sb中存储的新值。在此操作期间,数据将会从内存实例0、1、2、3、4、7中读取,用户输入的数据将会被写入的内存实例5和6。

根据图8,输入信号在范围编码模块u_range中的具体处理方法包括以下流程,为了对支持搜索关键字的特定字段的编码,由搜索缓存模块u_sb产生的masterkey进一步被8个范围编码模块u_range处理,每一个范围编码模块u_range都通过将搜索密钥的16 bits字段和用户可编程的32bits寄存器阵列比较进而生成用于扩展masterkey的32bits的向量;每一个profile都分配唯一的segment用于范围比较;若向量中的位被设置,那么masterkey中的数据比寄存器中的数据要小;用户可以通过在寄存器阵列中编写掩码字段来排除比较中的任何位;之后kgu从640 bits的 masterkey和256bits的范围编码模块的输出构造出4个最多640bits的searchkey。每个配置文件profile都分配唯一的构造规则,秘钥生成模块u_kgu最多支持128个配置文件,存储于profile RAM中的偏移量指示在masterkey中16 bits字段的起始字节数;范围编码模块u_range将根据该偏移量选择搜索缓存模块u_sb输出的masterkey中的16bits字段,有效的范围是0-4Dh;之后16 bits的被选择字段和存储在寄存器阵列中的16 bits的掩码执行按位与操作,按位与操作的结果将进一步和寄存器阵列中存储的值进行比较,若该值小于寄存器阵列中存储的值,那么将产生一个被设置的位。

以上操作将会在8个范围编码模块u_range中执行8×32次,产生8×32bits的关键字范围编码向量。

根据图9,秘钥生成模块u_kgu包括字节选择模块u_kgu_byte_selector、字节组合模块u_mux_top、一级寄存器和若干组合逻辑块。

秘钥生成规则存储器模块u_mem_kgu_profile的配置信息cogfig_in[164:0]经过一级寄存器后通过一个组合逻辑块分割为两个配置数据offset[104:0]和width[59:0],它们之后再次通过一个组合逻辑块产生accum[111:0],这三个信号都被输送到每一个字节选择模块u_kgu_byte_selector子模块;每一个字节选择模块u_kgu_byte_selector模块都将产生一个7bits的字节选择信号data_in_byte_sell[6:0]并输入到字节组合模块u_mux_top,同时字节组合模块u_mux_top也将接收由搜索缓存模块u_sb的输出和范围编码模块u_range的输出拼接形成的主搜索密钥master_key[895:0],在字节组合模块u_mux_top中包含80个u_kgu_mux模块,80个u_kgu_mux模块利用字节选择信号data_in_byte_sell[6:0]作为索引标志在master key[895:0]中选择相应的字节组成最终的搜索密钥key_out[639:0]。

根据图10,秘钥生成模块u_kgu生成搜索关键字的具体步骤:每个key由10个segments连接而成;对于每一个segment,用户必须指定segment在key中的偏移量offset以及segment的位宽width;其中offset作为segment在key中开始的字节数,范围在0-0x4Eh共7bits,segmentwidth标志组成segment的字节数,范围从1至16;segmentwidth是一个4bits的字段,segement中的字节数等于宽度字段的值+1;若在构造所有segments后生成的key的字节数少于640bits,那么为了将结果补到640bits,不足的部分将会直接复制输入kgu模块的640bits的masterkey;如果从0到9的所有segments的偏移量都被设置为7F,那么来自于搜索缓存器的masterkey将会被原样复制。

本发明的有益之处在于:1、Stargate NSE采用了独特的硬件架构,简单而高效;2、使用算法代替了部分硬件资源实现的功能,使得硬件结构更加简单;3、搜索关键字的产生方式可配置,更加灵活。

以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,上述实施例不以任何形式限制本发明,凡采用等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号