向混合可编程多核器件映射网络应用的制作方法

文档序号:6540390阅读:159来源:国知局
向混合可编程多核器件映射网络应用的制作方法
【专利摘要】本发明的各实施例涉及向混合可编程多核器件映射网络应用。描述了一种混合可编程逻辑,其在接收的数据包上使用可编程逻辑元件以及与可编程逻辑元件交错的处理器执行包处理功能。报头数据可以由可编程逻辑元件调度以用于向与处理器关联的处理线程分配。处理器可以在报头数据上使用由可编程逻辑元件提供的处理线程和硬件加速功能来执行包处理功能。
【专利说明】向混合可编程多核器件映射网络应用

【技术领域】
[0001]本发明涉及将包处理功能映射到混合可编程逻辑器件上,混合可编程逻辑器件包含许多可编程处理器、专用功能块和可编程FPGA结构。

【背景技术】
[0002]包处理器可以从物理接口接受入口包,在包上执行分类和过滤操作,并且然后向流量管理器转发包。流量管理器与切换结构对接以将包切换到出口包处理器和物理接口上。虽然没有明确定义的“包处理”功能,但包处理可包括但不限于:MAC捕获和包的组帧(framing)、包解析、将包分类成流、路由统计和计数器的维护、IP转译、IP表查找或者包封装和解封装。包处理器的最终应用可以针对协议栈的OSI传输层、网络层或应用层中的一个或多个层。


【发明内容】

[0003]本发明提供了一种混合可编程逻辑器件,其包括可编程现场可编程门阵列逻辑结构(例如,可编程逻辑元件)和多核分布式处理子系统(例如,多核处理器)。注意,术语“混合”指的是在相同器件(即,相同芯片)中集成可编程逻辑元件的结构和处理器的器件。在所提供的架构中,可编程逻辑元件可以提供“后期绑定”的硬件加速功能,这意味着可以在制造器件之后定义用于形成硬件加速功能的具体功能和逻辑架构。例如,通过在运行时编程混合可编程逻辑器件的软件,可编程逻辑元件可以被划分或分组为硬件加速器。还注意,术语“器件”指的是在此描述的混合可编程逻辑器件的任何实施例或者组合或者多个实施例。
[0004]本发明处理包含控制数据、报头数据和有效载荷数据的数据包。注意,“报头数据”指的是与包关联的管理信息,比如关于包的源和目的地的信息,包的数据加密或者是与包本身的消息分离的任何其他信息。此外,注意,“有效载荷数据”指的是给予包的消息的实际数据。此外,注意,“控制数据”指的是有效载荷数据的子集,其包括对指示或重新编程混合可重编程逻辑器件功能而言必要的信息。
[0005]在某些实施例中,混合可编程逻辑器件可以接收包括报头数据和有效载荷数据的数据包。器件可以包括可编程逻辑元件以及在可编程逻辑元件之间瓷砖式平铺的处理器。注意,术语“瓷砖式平铺”指的是排列处理器以使得它们在可编程逻辑元件之间交错或散布。例如,处理器可以在具有可编程逻辑元件的二维平面中被连续地排列以使得在连续的处理器之间没有其他的可编程逻辑元件。报头数据可以由可编程逻辑元件调度以用于向与处理器关联的处理线程分配。处理器可以在报头数据上使用由可编程逻辑元件提供的处理线程和硬件加速功能来执行包处理功能。
[0006]在某些实施例中,可以按照一种速度接收数据包,而处理器可以按照不同速度操作。调度电路可以在器件的输入和处理器之间以关于时钟速度异步的速率传输报头数据。

【专利附图】

【附图说明】
[0007]当结合附图考虑以下详细描述时,本发明的上述和其他优点将显而易见,贯穿附图中,相同的参考符号指的是相同的部件,其中:
[0008]图1A是根据本发明的实施例的具有硬化数据总线和入口 /出口的混合可编程逻辑器件;
[0009]图1B是根据本发明的实施例的包含邻接可编程逻辑元件的处理器的混合可编程逻辑器件的扩展视图;
[0010]图1C是根据本发明的实施例的包含在处理器和可编程逻辑元件之间的接口的混合可编程逻辑器件的扩展视图;
[0011]图2是根据本发明的实施例的到混合可编程逻辑器件上的包分类功能的图解映射;
[0012]图3是根据本发明的实施例的包分类功能的调度块的更详细视图;
[0013]图4是根据本发明的实施例的包分类功能的存储器接口的图解视图;
[0014]图5是根据本发明的实施例的调度电路;
[0015]图6是根据本发明的实施例的用于重新配置混合可编程逻辑器件的电路;
[0016]图7是根据本发明的实施例的包分类功能的出口块的更详细的视图;
[0017]图8是根据本发明的实施例的用于向混合可编程逻辑器件中的处理器路由数据包的例示性过程。

【具体实施方式】
[0018]典型地在专用硬件(比如ASIC功能块)中实现包处理功能。然而,必须灵活编程包处理功能,因为联网协议不断改变。因此,在允许用专用处理器的速度容易地重新配置的器件上实现包处理将是希望的。
[0019]图1A是根据本发明的实施例的混合可编程逻辑器件100。器件100包括可编程逻辑元件130和处理器150的区域。通用输入/输出电路110可以包括在运行时可以由外部软件控制或者编程的一个或多个普通管脚。在某些实施例中,通用输入/输出电路110可以被配置为输入或者输出数据,可以读取或写入数据,可以被用作用于唤醒事件的IRQ,或者可以用于从器件100外围的源传送数据。高速串行接口 120可以有助于在数据的外部源(未示出)、可编程逻辑元件130和使用高速收发器块的处理器150之间的信息的传送。例如,高速串行接口 120可以与以太网连接对接以接收信息包,用可编程逻辑元件130和处理器150处理这些包,并且将包切换到不同物理接口。在某些实施例中,高速串行接口 120可以按照比通用输入/输出电路110高得多的速度传送数据。例如,高速串行接口 120可以按照每秒数十千兆比特的速率读取和写入数据,而通用输入/输出电路110可以按照数百兆比特的速率写入数据。在某些实施例中,高速串行接口 120可以按照线速率操作,这意味着器件100的总吞吐率(例如,在多个串行信道上每秒100千兆比特),而处理器150和可编程逻辑元件130按照分配的速率操作,这意味着处理线程(以及在那些处理线程期间使用的对应的存储器和硬件加速块)的总吞吐量不逊于用于器件100的目标应用的最小吞吐量。
[0020]可编程逻辑元件130可以包括逻辑门和存储器的任何组合。在某些实施例中,这些可编程逻辑元件可以被分组为逻辑阵列块(“LAB”),这指的是在由加利福尼亚的圣何塞的Altera公司所提供器件中的可编程逻辑资源的单元。然而,本发明适用于来自任何源的可编程逻辑元件。在某些实施例中,可编程逻辑元件可以被分组为硬件加速块。每个硬件加速块可以被指明为在所接收的数据上执行某一类型的硬件事件。在某些实施例中,硬件加速块可以可配置,从而使得该事件被定制到该特定情况。例如,硬件加速块可以接受参数,这些参数进一步定义将在所接收的数据包上执行的硬件事件。例如,用于配置硬件加速块的参数可以由处理器150生成。可以通过数据总线160、水平和竖直连接器167 (下面关于图1C描述)或者这两者向硬件加速块传输参数。在某些实施例中,可编程逻辑元件130可以包括任何合适的存储器群集,比如M20K存储器群集。
[0021]在某些实施例中,硬件加速块被配置为执行专用包处理功能。这些功能可包括使用循环冗余校验或者计算校验和的错误检测、使用多协议标签交换(MPLS)或者VLAN标记的标记掩蔽、使用外部存储器访问的IP查找、加密、数据压缩或者任何其他软件低效的包处理功能。
[0022]在某些实施例中,在已经制造和部署了器件100之后(例如,在器件100的运行时期间或者通过远程更新过程),可编程逻辑元件130可以可配置成不同硬件加速块。因此,由可编程逻辑元件130组成的硬件加速块可以是后期绑定的,这允许器件100在任何数量的域中的任何数量的应用中是通用的。例如,器件100可以被更新以考虑最新的误差校正、视频和图像处理或者数据管理标准。这不同于商业网络处理单元、流水线处理器以及具有处理器和固定硬件加速块二者的ASIC器件,因为这些器件不允许在部署之后定义硬件加速器。
[0023]在某些实施例中,可编程逻辑元件130可以基本上类似于由加利福尼亚的圣何塞的Altera公司所售的Stratix_ V FPGA的可编程逻辑元件。然而,应当理解,适合于FPGA或者PLD的任何可编程逻辑元件可以被用作可编程逻辑元件130。
[0024]处理器150可以包括具有多核设计的任何合适数量的处理器。这些多核设计可以基于厂商(比如arm、MIPS、Intel或Tensilica)的微处理器IP。这一微处理器IP允许创建定制的嵌入式处理器(例如,移除浮点单元)和定制的指令集架构的能力。在某些实施例中,处理器可以被“硬化”,这意味着它们由固定逻辑元件而不是可编程逻辑元件组成。这一特征提供将功能强大的多核处理器集成到可编程逻辑结构中。在某些实施例中,处理器可以是多线程的。
[0025]如图1中示意性地描绘的,处理器150被瓷砖式平铺在不存在可编程逻辑元件130的器件100的部分中的四列装配结构中。在其他实施例中,可以使用更少或者更多列的处理器。在某些实施例中,列或者处理器的数量以及每一列中处理器的数量可以比图1A中描绘的更多或者更少。列数量和每一列中处理器150的数量可以取决于用于每个处理器的处理器架构。例如,当减少每个处理器的指令高速缓存和数据高速缓存时,更多的处理器可以被瓷砖式平铺在器件100上。在一个示例中,使用具有16KB的指令高速缓存和数据高速缓存的MIPS34K多线程处理器。在这一示例中,当缩小到28nm的设计目标时,每个处理器消耗器件上小于0.25平方mm (毫米)的硅面积,这相当于30个Stratix? V LAB。应该理解的是,处理器150备选地可以在器件100上以行布置。
[0026]在某些实施例中,处理器150是多线程的。多线程处理器向如下应用提供优势,在应用中通常需要与片外存储器或查找对接,这可能花费多个时钟周期的处理时间并且因此增加延时,或者隐藏加速器处理的延时。例如,通过阻止处理器中的一个线程到这一查找任务,处理器能够继续执行其他功能。在某些实施例中,多线程可以通过对由处理器150接收的数据的时间分片操作来实现。在其他实施例中,多线程可以由公知的操作系统机制来实现。
[0027]器件上的处理器150的瓷片式平铺布局允许高效制造和提供用于器件的处理器、可编程逻辑元件和I/O接口之间的通信的互连网络。这是因为可编程逻辑元件130和器件100的其他元件(比如存储器(未示出))与处理器150分离。此外,处理器150的瓷片式平铺布局允许在器件100中的相同金属层中的处理器150和可编程逻辑元件130的结构,以及包含数据总线的互连堆叠的结构。
[0028]器件100还包括外部存储器135和嵌入式三态内容可寻址存储器(TCAM)存储器137。硬化的数据总线160可以由专用电路组件组成,专用电路组件传送数据到处理器150、可编程逻辑元件130、入口 /出口处理块136、外部存储器135和嵌入式TCAM存储器137并且从处理器150、可编程逻辑元件130、入口 /出口处理块136、外部存储器135和嵌入式TCAM存储器137传送数据,而不是被保留作器件上的其他用途。在某些实施例中,硬化的数据总线160可以被称为芯片互连上的网络。在这样的实施例中,硬化的数据总线160可以专用于寻路由和/或携带去往和来自入口/出口处理块的数据到器件的其他元件。硬化的数据总线160可以允许在器件内部和外部二者的高性能数据传送。在某些实施例中,硬化的数据总线160可以包括水平和竖直连接器167 (图1C)的一部分。在其他实施例中,硬化的数据总线160可以完全从水平和竖直连接器167分离。
[0029]硬化的数据总线160可以具有各种各样的拓扑。例如,硬化的数据总线160可以具有环形拓扑、共享的总线协议(比如由英国剑桥的ARM控股设计的AXI ),来自Sonics、Arteris或其他第三方公司的互连技术或者由加利福尼亚的圣何塞的Altera公司设计的Avalon?互连。在某些实施例中,硬化的数据总线160可以是分层的。例如,硬化的数据总线160可以是4路划分。在另一示例(未示出)中,硬化的数据总线160可以是整体的。在又一示例(未示出)中,硬化的数据总线可以被分段。
[0030]在某些实施例(未示出)中,器件100可以不包括硬化的数据总线160。在这样的实施例中,可以在器件100的组件之间使用可编程逻辑100来路由信号。关于美国专利申请的图1A图示并讨论这样的实施例,该美国专利申请的申请号为_,名称为
“Hybrid Programmable Many-Core Device with On-chip Interconnect,,(代理人案卷号000174-0767-101/A03939),与此同时提交,在此通过引用将其全部并入。
[0031]在某些实施例中,硬化的数据总线160的部分可以通过可以对器件300编程的软件分级连接或断开。这一软件可以包括由加利福尼亚的圣何塞的Altera公司设计的
Quartus?软件或者任何其他合适的软件。在某些实施例中,硬化的数据总线160的带宽被设计用于实现特定应用的线速率。例如,如果硬化的数据总线160是64位,并且以IGHz运行并具有80%的效率,则它可以提供51Gbps的带宽并且用于以50Gbps流视频应用为目标。在另一示例中,如果硬化的数据总线160是64位并且以1.5GHz运行并具有80%的效率,则它可以提供150Gbps的带宽并且以10Gb的流量切换应用为目标。在某些实施例中,可以添加单独的硬化的数据总线以携带用于处理器输入和输出的数据作为LAB输入和输出。
[0032]在某些实施例中,硬化的数据总线160可以被放置在处理器150和可编程逻辑元件130上(例如,在上文的金属层中)或与处理器150和可编程逻辑元件130相邻。以这一方式,硬化的数据总线160对器件100的组件的侵略性最小。
[0033]外部存储器135可以包括到外部存储器(比如DDR存储器)的任何合适的接口。夕卜部存储器135可以缓冲应用中的数据,其中器件300处理视频数据或者包数据。在某些实施例中,嵌入式TCAM存储器137可以包括对联网应用有用的内容可寻址存储器的任何合适的块。在某些实施例中,嵌入式TCAM存储器137可以使用和接口电路161 (图1C)基本上类似的电路来与可编程逻辑元件130和处理器150对接。在某些实施例中,TCAM存储器137可以由SRAM或者嵌入式SRAM包缓冲存储器替换。
[0034]入口 /出口处理块136可以接收数据并且向器件300的其他元件转发该数据。例如,入口 /出口处理块136可以接收数据包并且向器件300提供协议终止或包组帧服务。在某些实施例中,入口 /出口处理块136可以向硬化的数据总线160转发接收的数据。在某些实施例中,入口 /出口处理块可以包括硬化的ASIC块。可以根据在序列号为8,314,636的美国专利中所公开的ASIC块构成这些块,本文通过引用将该美国专利全部并入。在某些实施例中,入口 /出口处理块可以由可编程逻辑元件130构建。
[0035]图1B是根据本发明的实施例的包含邻近于可编程逻辑元件130的处理器150的混合可编程逻辑器件100的扩展视图。两个处理器在图1B中被示意性地描绘为包含三个组件(处理器核170、指令高速缓存180和数据高速缓存190)的正方形。图1B中还示意性地描绘了被分组为LAB132的可编程逻辑元件130。在某些实施例中,处理器150的尺寸(例如,长度、高度或宽度)的物理大小是可编程逻辑元件150或由可编程逻辑元件150组成的LAB的相同尺寸的倍数。例如,如图1B中所描绘的,两个处理器中的每个处理器的宽度等于3个LAB132。这允许向可编程逻辑元件或其他逻辑块高效组装具有不同尺寸、,具有处理器的不同比率的器件。
[0036]图1C是根据本发明的实施例的包含在处理器150和可编程逻辑元件130之间的接口 161的混合可编程逻辑器件100的扩展视图。可以在每个LAB或LAB的行和处理器150之间包括接口 161。接口 161可以包括UM/LE頂电路162、接口逻辑164和接口端口 166。LIM/LEIM电路162指的是可编程输入复用器“LAB输入复用器”和“逻辑元件输入复用器”的汇集,并且可以包括任何合适数量的LIM和LEIM多路复用器,正如在加利福尼亚的圣何塞的Altera公司所售的器件中常见的UM和LEM多路复用器。接口逻辑164可以包括用于向接口端口 166缓冲数据的任何合适的电路组件。接口端口 166可以包括用于向处理器150中的一个处理器物理地传送信号的任何合适的电路。
[0037]在某些实施例中,在器件100上也可以包括水平和竖直连接器167。水平和竖直连接器167可以在处理器150、可编程逻辑元件130、通用输入/输出接口以及片上和片外存储器之间传送数据。在某些实施例中,水平和竖直连接器可以连接到接口电路161以使得来自任何可编程逻辑元件130的任何信号可以通过UM/LEM电路162和接口逻辑164而被递送到接口端口 166。例如,LIM/LEIM电路162内的多路复用器可以选择哪个信号驱动水平/竖直连接器167中的任何全局线以将任何可编程逻辑元件130与处理器150连接。
[0038]图2是根据本发明的实施例的到混合可编程逻辑器件上的包分类功能200的图解映射。包分类功能200包括从外部源(比如以太网端口的传入数据管脚)接收数据并将其传输到入口块210的高速收发器212。包分类功能200还包括将数据从出口块220传输到外部源(比如以太网端口的传出数据管脚)的高速收发器214。在某些实施例中,数据包可以由收发器212接收。这些包可以包含按照任何合适的包帧格式的控制数据、报头数据和有效载荷数据。通过确定包的格式(比如标识包的组帧和报头),入口块210可以预处理接收的数据包。通过确定与接收的包关联的路由协议(比如TCP/IP),入口块210也可以预处理接收的数据。在某些实施例中,入口块210可以为包分类功能200提供介质访问控制(MAC)层功能。
[0039]在某些实施例中,入口块210的功能可以由器件100 (图1A)的入口 /出口处理块136实现。可以使用硬化的ASIC块或后期绑定的可编程逻辑(例如,FPGA结构250的可编程逻辑元件)来实现入口块210。在其中在FPGA结构250中实现入口块210的实施例中,MAC层可以被定制以使得包分类功能200适于宽泛范围的各种应用。例如,路由端口、信道或两者的数量可以被增加。
[0040]一旦入口处理块210预处理接收的数据,则使用数据总线260将其发送到调度块230、包缓冲器块240或处理器270中的一个或多个。数据总线260可以基本上类似于硬化的数据总线160 (图1A)。调度块230可以基于处理器270的资源调度接收的数据包的处理。在某些实施例中,调度块230可以在FPGA结构250的可编程逻辑元件中被实现。在某些实施例中,调度块230可以将接收的数据包的报头数据传输到处理器270,并且将接收的数据包的有效载荷数据传输到包缓冲器块240。在其中一个或多个处理器270是多线程的实施例中,调度块230可以将接收的包的报头数据传输到处理器270的可用线程。
[0041]处理器270可以使用FPGA结构250在数据上执行一个或者多个包处理任务。这样的包处理任务可以包括MAC捕捉、包组帧、包解析、包分类、路由表和路由统计的维护、控制包的维护、包加密和解密、路由地址转换、IP表查找、包分段和分裂、包封装和解封装、包修改(即包复制和标记)、包服务质量维护(访问控制列表的维护、包监管(policing)和包整形)、工业标准缓冲和延时要求的维护以及任何用户优选的包处理模式的维护中的一个或多个。在某些实施例中,调度块230可以使用数据总线260发送控制信号到一个或者多个处理器270以便协调到可用处理器线程的数据的分配。在这样的实施例中,一旦控制信号的关联的报头数据已由处理器270处理,则它们还可以被发送到出口块220以协调包的重排序。
[0042]包缓冲器块240可以在任何合适的储存存储器中存储接收的数据包的有效载荷数据。在某些实施例中,储存存储器可以在实现包分类功能200的器件(比如器件100 (图1A))的内部。例如,储存存储器可以包括连接到数据总线260的本地SRAM存储器。这一本地存储器可以在处理器270的片上,通过2.硅中介层或真实的3D连接而连接到处理器,或者通过裸片的通用或者串行管脚连接到处理器270。
[0043]一旦被处理,则可以用在包缓冲器270中存储的对应的有效载荷数据重新组装报头数据,并且然后通过出口块220和收发器214路由到外部目的地。在某些实施例中,基于与在入口块210接收的数据包的格式关联的协议(例如,TCP流ID),出口块220可以缓冲和重排序包。出口块220可以使用硬化的ASIC块或后期绑定的可编程逻辑来被实现。在某些实施例中,出口块220可以在FPGA结构250的可编程逻辑元件中被实现。
[0044]FPGA结构250可以包含任何合适数量的可编程逻辑元件130(图1A)。在某些实施例中,FPGA结构250内的可编程逻辑元件的分组可以被配置成不同的硬件加速块。可以在已经制造或部署(例如,在包分类功能200的运行时期间)器件100后出现这种配置。因此,包分类功能200的包分类能力可以是后期绑定的,这允许数据包的更通用的路由。例如,在用最新的路由协议、错误控制、数据加密、IP查找、IP地址转译或任何其他合适的包处理功能部署后,可以重新配置包分类功能200。以下关于图5描述这一重新配置过程。
[0045]处理器270可以基本上类似于处理器150 (图1A)。处理器270可以通过数据总线260向和从FPGA结构250中的一个或者多个硬件加速块传输包数据。这些硬件加速块可以执行与以上关于处理器270讨论的包处理任务关联的任何例程或者子例程。在某些实施例中,处理器270和FPGA结构250中的硬件加速块可以访问提供直接存储器访问(DMA)的硬件加速器互连(未示出)。此外,这一硬件加速器互连可以提供到片外存储器的访问或者查找。在某些实施例中,片外存储器可以包括嵌入式TCAM存储器137 (图1A)。
[0046]在某些实施例中,包分类功能200可以按照“运行到完成”模式操作。在这种模式中,处理器270和FPGA结构250的资源可用或者不可用。当调度块230接收包时,其被指派为在处理器270之一的可用线程中被处理。指派的线程然后在包的寿命期间被占用,即,直到与包关联的数据由处理器270和FPGA结构250处理并且由出口块220重新组装。
[0047]在某些实施例中,入口块210、出口块220和调度块230可以按照线速率操作,这意味着实现包分类功能200的器件(例如,器件100(图1A))的总吞吐率,而处理器270可以按照分布式速率操作,这意味着处理线程(以及与那些处理线程一起使用的FPGA结构250的对应的存储器和硬件加速块)的总吞吐量不逊于用于目标路由应用的最小吞吐量。在这样的实施例中,出口块220重排序来自相同TCP流的包,因此传出包的顺序和传入包的相同。
[0048]图3是根据本发明的实施例的包分类功能200 (图2)的调度块230的更详细视图。调度块230组帧(frame)包数据,并将其分配到处理器270 (图2)的可用线程。此外,当在处理器270之间没有可用的线程时,调度块230管理包数据的流(即,执行包流控制操作)。
[0049]调度块230在输入MAC310处接收包数据。输入MAC310可以是来自包分类功能200 (图2)的介质访问控制层的任何合适的数据流。在某些实施例中,输入MAC310可以从入口块210接收数据。输入MAC310然后将数据转发到预处理块320。在某些实施例中,输入MAC310可以加密或解密接收的数据。在其他实施例中,加密或解密可以由处理器270执行。通过确定包内信息的格式(比如例如包的哪部分包含有效载荷数据并且包的哪部分包含报头数据),预处理块320组帧包。一旦包被组帧,则预处理块320分配报头数据到分派互连330,并分配有效载荷数据到包缓冲器340。在某些实施例中,预处理块320可以与调度分派330通信以检查处理器270之间是否有任何可用线程。如果有可用线程,则报头数据和有效载荷数据可以被如上所述地分配。如果没有可用的线程,则预处理块320可以背压(back-pressure)输入MAC310,传输包有效载荷数据到包缓冲器340以用于存储,或二者。备选地,预处理块320可以丢弃与包关联的数据。
[0050]在某些实施例中,通过比较包的报头和有效载荷中的一个或多个与已知控制包标准,预处理块320可以确定接收的包是否是控制包。在这样的实施例中,预处理块320可以通过分派互连330截取并路由这些控制包到处理器270中的一个或者多个处理器,处理器270被指派为管家处理器。这些管家处理器可以实现功能,比如电源和时钟管理。在某些实施例中,这些管家处理器可以由地点或路由工具的用户指明。在其他实施例中,管家处理器可以由在运行时期间实现包分类功能200的器件(例如,器件100)指明。在其他实施例中,控制包可以由驻留在预处理块320中的硬件子例程处理。在这样的实施例中,预处理块320可以将控制包转译成指令并路由到处理线程350。
[0051]包缓冲器340可以基本上类似于包缓冲器块240。包缓冲器块240可以存储有效载荷数据,直到与该有效载荷数据关联的包准备好用于重新组装。在某些实施例中,当包的关联的报头数据已经由处理器270处理时,重新组装包。在某些实施例中,包缓冲器340可以包括实现包分类功能200的器件(例如,器件100)内部的存储器。这一存储器可以包括关于包缓冲器240 (图2)所讨论的存储器。在其他实施例中,包缓冲器340可以包括位于实现包分类功能的器件外的存储器。
[0052]分派互连330从预处理块320接收包报头数据,并将其分发到处理线程350。在某些实施例中,可以使用硬化的数据总线160 (图1)来实现分派互连330。在某些实施例中,通过定期因特网包探索(pinging) —个或者多个处理器270,分派互连330可以确定是否有任何可用处理线程350。分派互连330可以用唯一处理器地址或者处理线程地址标记报头数据。这一地址可以由处理器270使用,确定它们是否应该处理到达数据总线160的特定报头数据,以及使用什么特定处理线程,或者它们是否应该忽略特定报头数据。处理线程350可以包括处理器270的任何处理线程。
[0053]在某些实施例中,分派互连330可以将与相同TCP流中的包关联的报头数据分配到相关的处理器群集,比如被指明执行相同包处理任务(例如,包加密和解密、路由地址转译、IP表查找等)的那些处理器270。以这一方式,由分派互连330使用的数据总线的负载以及重排序的包中的出口块220的负载可以被减小。在某些实施例中,调度块230可以被简化为只包含分派互连330。在此类实施例中,分派互连330可以接收报头数据和与处理线程可用性关联的数据,而且连同特定处理器或者处理线程的地址一起输出报头数据。
[0054]图4是根据本发明的实施例的包分类功能200的存储器接口的示意图。如图4中所示,分派互连330通过存储器接口 420和本地存储器410而将包数据分配到处理器270(图2)。处理器270然后使用消息传递互连430将这一包数据传输到硬件加速器440以便硬件加速器440执行与包处理任务关联的任何例程或者子例程。此外,处理器270可以使用包互连405访问外部存储器,比如包缓冲器340的存储器。在某些实施例中,可以通过数据总线160 (图1)来实现分派互连330、包互连405和消息传递互连430中的一个或者多个。
[0055]处理器270包括存储器接口 410、本地存储器420和处理器线程350。虽然处理器270被图示为具有用于每个处理器线程的单个存储器接口和本地存储器,但可能有在单个处理器上运行的多个处理线程之间共享的单个存储器接口和本地存储器。存储器接口 410从分派互连330接收报头数据,并在本地存储器420或者外部存储器(未示出)中的一个或多个中将其存储并取回。在某些实施例中,存储器接口 410可以使用并行直接存储器访问(DMA)引擎以仅从本地存储器420中存储和取回报头数据。在这样的实施例中,来自包的报头数据被存储在其中正处理它的特定处理器的本地存储器中,完全由该特定处理器的代码管理,并且没有与处理器270的任何其他存储器一致地或与处理器270的任何其他存储器保持一致地被索引。换句话说,在处理期间,没有虚拟存储器或页表操作用于存储和取回报头数据。这提高了包处理任务的效率,因为针对数据访问不需要高速缓存管理。在某些实施例中,报头数据可以包含指向位置的指针,所附的报头数据被存储在该位置,比如像缓冲器块240的外部存储器。在这样的实施例中,存储器接口 410可以通过包互连405来使用指针以从存储库请求有效载荷数据。在其他实施例中,报头数据可以被本地存储到特定处理器。
[0056]在某些实施例中,处理器270可以从广播流中的调度块230接收数据。当空闲时,与每个处理器关联的存储器接口 410中的每个存储器接口的DMA引擎监听被寻址到该处理器的处理线程的报头数据。该地址可以是在报头数据之前在分派互连330上发送的控制字,或者被路由到存储器接口 410的另一信号。这一通信方案为分派互连330提供近乎完美的利用(即接近零的控制开销)。下面关于图5进一步描述这一过程。
[0057]消息传递互连430可以将数据从处理器270的处理器线程350传输到一个或多个硬件加速器440。硬件加速器440可以是FPGA结构250内的可编程逻辑元件的分组,FPGA结构250执行与包处理任务关联的例程或者子例程。一旦硬件加速器440根据特定例程或者子例程处理报头数据,它就可以使用消息传递互连430将该报头数据传输回处理器线程350的它的关联的处理线程。一旦根据特定的包处理任务完成了处理报头数据的处理器线程350,它们就可以将处理的报头数据存储在本地存储器420中并将指示该报头数据已被处理的信号传输到调度块230。调度块230然后可以向出口块220指示与处理的报头数据关联的包准备好和它的关联的有效载荷数据一起重新组装。经重新组装的包然后可以与相同TCP流中的其他包一起被重排序并且被传输到它们的最终路由目的地。
[0058]用于包处理任务加速的FPGA结构250的使用可能是有益的,因为它允许包处理算法的部分被卸载到FPGA中的硬件,同时使用用于大量指令的易于编程的软件代码。此外,当任务对于硬件实现方式来说算法过于复杂时,软件代码的使用可以是有利的。
[0059]在某些实施例中,处理器270可以被划分成不同的类。处理器的每个不同的类可以执行不同的处理任务。例如,第一组处理器可以预处理包以标识流ID,而第二组处理器可以基于流id而将包分配到不同处理以帮助维持顺序。关于如下美国专利申请的图7A讨论这种将处理器划分成类,所述美国专利申请的序列号为_,名称为
“Hybrid Programmable Many-Core Device with On-chip Interconnect,,(代理人案卷号000174-0767-101/A03939),与此同时提交,本文通过引用将其全部并入。
[0060]在某些实施例中,不同类的处理器270和FPGA结构250的可编程逻辑元件可以用于管理实现包处理功能200的器件(例如,器件100 (图1A))的功率使用。例如,可以基于和每个分区关联的处理器和逻辑元件的处理能力需求而动态地上电或断电与器件100的分区关联的处理器和可编程逻辑元件。关于如下美国专利申请的图7B描述该处理,所述美国专利申请的序列号为_,名称为“Hybrid Programmable Many-Core Device with
On-chip Interconnect代理人案卷号000174-0767-101/A03939),与此同时提交,本文通过引用将其全部并入。
[0061]虽然处理器270已经被讨论为以分布式模型运行,但是在某些实施例中,处理器的分组可以执行流水线功能。在这样的实施例中,处理器的不同分组可以通过消息传递互连430而具有不同的代码基和加速器连接。此外,消息传递互连430将提供处理器之间的通信路径。这些路径允许处理器的分组在分组之间传递包。
[0062]图5是根据本发明的实施例的调度电路500。调度电路500包括按照水平和竖直连接器505形式的数据总线,其可以基本上类似于水平和竖直连接器167(图1C)、硬化的数据总线160 (图1A)或者数据总线260 (图2)。调度电路500可以调度水平和竖直连接器或硬化的数据总线上的、调度块230和处理器270 (图2)之间的数据传输。处理器530可以是处理器270之一。在某些实施例中,处理器530可以是一列瓷砖式平铺的处理器中的部分,比如关于处理器150 (图1A)所述的那些处理器。在这样的实施例中,调度电路500的副本可与处理器150中的每个处理器集成。
[0063]在某些实施例中,在调度块230和处理器270之间的数据传输速率可以与处理器530的时钟速率不同或异步。例如,处理器的操作速度可以快于或者慢于入口块210的操作速度。因此,在调度块230和处理器530之间使用水平和竖直连接器505传输数据的速率可以不同于处理器530的时钟的速度。
[0064]在这样的实施例中,总线接口 510可以提供如下机制,该机制允许在水平和竖直连接器505上以与关于处理器530的时钟速度异步的速率传输数据。在某些实施例中,总线接口 510可以通过水平和竖直连接器505接收寻址数据。在这样的实施例中,这一寻址数据可以包含如下信息,该信息指示与该消息关联的报头数据是指由特定的一个或者多个处理器内的处理线程处理。总线接口电路510可以只传输寻址到处理器530内的处理线程的报头数据,并且忽略未寻址到处理器530内的处理线程的其他数据。例如,总线接口电路510可以包含预定的或硬编码的值,在软件中或者在与总线电路510关联的硬件中,预定的或硬编码的值是处理器530内的处理线程的地址。总线接口电路510可以定期地或不断地监视通过用于地址的水平和竖直连接器505传输的数据。当检测到地址时,总线接口电路510可以将与地址关联的报头数据缓冲到处理器530,并且使用线程电路520将数据从缓冲器传输到处理器530。线程电路520维护与执行处理器530中的各种任务关联的一个或多个程序计数器。在某些实施例中,线程电路520从总线接口电路510接收数据,并且基于它维护的程序计数器中的一个或者多个程序计数器确定适当的时间以发送该数据到处理器530。以这种方式,调度电路500可以允许器件的处理器、可编程逻辑元件以及数据总线按照不同时钟速度操作,因此打破在与网络总线关联的组件和处理器时钟速度之间的任何定时或时钟依赖。
[0065]在某些实施例中,可以使用异步通信的任何合适的方法来在器件的可编程逻辑元件和处理器530之间发送数据。在某些实施例中,调度电路500的功能可以由两个或者更多个处理器的分组而非调度电路500来实现。处理器的这些分组可以标识哪个处理器发送从器件的水平和竖直导体接收(即从可编程逻辑元件传输)的数据,并将数据分配到所标识的处理器。可以类似于监视以上关于总线接口电路510描述的程序而确定这种识别。
[0066]在某些实施例中,调度电路500可以包括程序指令存储器(未示出),其可以包括外部存储器的任何合适的组合。在某些实施例中,可以在操作期间修改器件上的处理器(比如处理器530)的指令集以使得它们被重新配置具有新指令集。根据新的或者根据正则表达式(regex)的更新的规则,这一新指令集可以允许器件实现新的或者不同的功能,比如检查数据。
[0067]在这样的实施例中,程序指令存储器可以检测用于处理器中的一个或者多个处理器的新操作模式。例如,程序指令存储器可以包含用于在水平和竖直连接器505上监视数据包的指令。可以通过数据包的包报头标识的某些数据包可以包含控制包,该控制包包含用于重新配置具有新功能或者更新的功能的处理器530的指令。通过定期或连续监视水平和竖直连接器以匹配控制包报头,总线接口电路510可以监视这些控制包。响应于检测到新操作模式,处理器530的操作可以被停止。例如,一旦总线接口电路510检测到控制包报头,则它可以缓冲该包的有效载荷数据并将有效载荷数据传送到线程电路520。线程电路520然后可以执行处理器530的线程或者流水线的创建、执行或者插入指令中的一个或者多个指令,这使得处理器530停止操作并冲掉所有未决指令。线程电路520然后可以从总线接口电路510中的缓冲器向处理器530传送控制包的有效载荷,该控制包包含用于重新配置处理器530的指令。在某些实施例中,控制包的报头中信息可以针对处理器的分组,比如器件上的一列或者多列中的处理器的分组。在这样的实施例中,对于器件上的使用每个处理器的关联的总线接口电路的每个针对的处理器,上述过程可以基本上并行发生。
[0068]在某些实施例中,可以处理接收的包以增强网络安全性。例如,含有用于HTTP协议的URL的TCP流的第一部分可能需要被阻止以防止垃圾邮件或病毒。为了实现这种增强的安全性,可以使用深度包检查。深度包检查操作检查包本身的有效载荷。基于存储在TCAM存储器137 (图1A)中、编码到本地存储器、或者作为器件100 (例如,可编程逻辑元件130)本身的硬件中编译的正则表达式的规则,深度数据包检查操作可以包括正则表达式。在其他实施例中,基于在器件的输入(例如,入口块210 (图2))处接收的编程文件,调度块230 (图2)可以重新配置该器件。一旦接收了编程文件,则与正则表达式处理关联的处理器270的一个或者多个分组可以被关闭、重新配置和重新启动。
[0069]图6是根据本发明的实施例的用于重新配置混合可编程逻辑器件100 (图1)的电路。图6是图1的增强的剪切视图。外部快闪存储器控制器610可以使用任何合适的外部设备或者软件(比如由加利福尼亚的圣何塞的Altera公司所提供的MAX? II器件)由编程文件填充。外部快闪存储器控制器310可以使用任何合适的传输协议将这些文件传输到管脚605。一旦调度块230检测到已经接收到编程文件,它就将它们传输到将被重新配置具有新的或者更新的正则表达式的处理器150 (或者处理器270)。在某些实施例中,控制区域块620可以通过发送控制信号到针对重新配置的处理器来有助于处理器的重新配置。
[0070]图7是根据本发明的实施例的包分类功能200 (图2)的出口块220的更详细视图。出口块220可以从基本上类似于包互连405 (图4)的包互连705接收数据,并将其传输到重排序块710。重排序块710重新组装具有对应的有效载荷数据的报头数据以形成处理的包。在某些实施例中,重排序块710可以从处理器270 (图2)接收指示该特定报头数据已经被处理的控制信号。重排序块710然后可以请求对应于来自包缓冲器340 (图3)的特定报头数据的有效载荷数据。一旦报头数据与相应的有效载荷数据匹配,则完整的包被重排序以跟随与到达入口块210的包相同的TCP流。重排序的包然后被发送到后处理块720。在后处理块720处,可以使用错误控制算法或任何其他合适的后处理算法来加密、处理重排序的包。该包然后由FIF0730复用以输出MAC740,并被路由到它们的最终目的地。
[0071]在某些实施例中,处理器150 (图1A)或者270 (图2)可以与流量管理电路(比如排队网络或队列管理器)通信,以便将数据馈送到入口块210。这样的流量管理电路可以包括由加利福尼亚的圣何塞的Altera公司的Stratix?系列FPGA中实现和由Altera公司所售的Altera流量管理参考设计。
[0072]图8是根据本发明实施例的用于路由数据包到混合可编程逻辑器件(比如器件100 (图1A))中的处理器的例示性过程。过程800开始于步骤810。在步骤810,数据包被接收。这些包可包含按照任何合适的包帧格式的控制数据、报头数据和有效载荷数据。在某些实施例中,可以在器件的收发器处接收数据包,比如关于高速收发器212 (图2)描述的那些。过程800进行到步骤820。在步骤820,用唯一地址标记每个包的报头数据。唯一地址可以标识处理器270 (图2)和在处理器270中的特定处理器上运行的处理线程之间的特定处理器。这一地址然后可以由处理器270使用以确定它们是否应该处理它们接收的特定报头数据,使用什么特定处理线程,或者它们是否应该忽略特定报头数据。在某些实施例中,可基于哪些处理线程可用于处理数据来指派唯一地址。例如,唯一地址可以标识当前未处理数据的处理线程的列表中的第一个处理线程。在某些实施例中,处理线程的这一列表可以由器件100维护。过程800进行到步骤830。
[0073]在步骤830,可通过共享的互连将报头数据和关联的唯一地址传输到处理器270。这一共享的互连可以是到相同数据总线上的处理器270中的每个处理器的广播数据。在某些实施例中,共享的互连可以在关于图5所讨论的水平和竖直连接器505中实现。因此,处理器270中的每个处理器可以接收通过共享的互连传输的报头数据。过程800进行到步骤840。在步骤840,每个处理器可以监视在共享的互连上接收的报头数据以确定它是否被用处理器或者在该处理器上运行的特定处理器线程的唯一地址标记。如果特定的报头数据被用匹配处理器或者在该处理器上运行的特定处理器线程的地址的唯一地址标记,则过程800进行到步骤850。否则,处理器可以忽略(即不存储)特定的报头数据并且步骤840可以由处理器重复直到检测到匹配。在步骤850,如果报头被用和该处理器或者在该处理器上运行的特定处理器线程的地址匹配的唯一地址标记,则在特定处理器的本地存储器中存储报头数据。根据一个或者多个包处理任务,报头数据然后可以由与特定处理器关联的可编程逻辑元件处理。在某些实施例中,这些可编程逻辑元件可包括关于FPGA结构250 (图2)所讨论的硬件加速块。此外,这些包处理任务可以类似于关于处理器270所描述的那些包处理任务。过程800然后结束。
[0074]将理解的是,前述仅仅例示了本发明的原理,并且可以由本领域技术人员做出各种修改而不脱离本发明的范围和精神。本领域技术人员将领会到本发明可以由除了所描述实施例以外的实施例实现,提出所述实施例是为了例示的目的而非限制,并且本发明仅由所附的权利要求限制。
【权利要求】
1.一种混合可编程逻辑器件,包括: 收发器,所述收发器接收数据包,其中所述数据包包括报头数据和有效载荷数据; 可编程逻辑元件,其中所述可编程逻辑元件的第一部分提供硬件加速功能; 处理器,所述处理器与可编程逻辑元件交错,其中所述处理器中的每个处理器使用所述硬件加速功能和处理线程来处理接收的所述报头数据,并且所述可编程逻辑元件的第二部分调度报头数据向所述处理线程的分配。
2.根据权利要求1所述的器件,还包括本地存储器,所述本地存储器存储所述有效载荷数据,并且其中可编程逻辑的所述第二部分还被配置为: 将接收的所述数据包组帧为报头数据和有效载荷数据; 将所述有效载荷数据缓冲到所述本地存储器中; 确定哪些处理线程可用;以及 基于所述确定,向可用处理线程路由所述有效载荷数据。
3.根据权利要求1所述的器件,其中可编程逻辑的所述第二部分还被配置为: 确定是否不存在可用处理线程;以及 响应于所述确定,丢弃接收的所述数据包中的一个或者多个所述数据包。
4.根据权利要求1所述的器件,其中所述硬件加速功能包括路由表的维护、有效载荷数据的加密、有效载荷数据的压缩和IP表查找中的一个或者多个。
5.根据权利要求1所述的器件,其中所述可编程逻辑元件的第三部分: 重新组装经处理的报头数据与关联的有效载荷数据以形成重新组装的包;以及 基于接收的所述包的TCP流ID,维护所述重新组装的包的顺序。
6.根据权利要求1所述的器件,其中所述处理器中的每个处理器还包括: 本地存储器; 存储器接口,所述存储器接口: 从可编程逻辑元件的所述第二部分接收报头数据; 使用直接存储器访问将接收的所述报头数据存储在所述本地存储器中,其中所述处理器直接从所述本地存储器访问存储的所述报头数据以执行至少一个包处理任务。
7.根据权利要求6所述的器件,其中所述处理器的每个处理器线程与地址关联,并且所述存储器接口: 针对与该处理线程关联的附带地址,监视接收的所述报头数据;以及仅当所述附带地址和与该处理线程关联的所述地址相匹配时,将接收的所述报头数据存储在本地存储器中。
8.根据权利要求1所述的器件,其中可编程逻辑元件的所述第二部分为每个报头数据指派与可用处理线程关联的唯一地址。
9.根据权利要求1所述的器件,还包括水平和竖直连接器,所述水平和竖直连接器包括固定逻辑元件。
10.根据权利要求9所述的器件,其中所述水平和竖直连接器在所述可编程逻辑元件的所述第二部分和所述处理器之间传输数据。
11.根据权利要求1所述的器件,其中所述处理器被物理地调节大小以使得所述处理器中的每个处理器的长度、宽度或者高度中的至少一个等于所述可编程逻辑元件的相同物理尺寸的倍数。
12.根据权利要求1所述的器件,其中所述处理器中的每个处理器包括固定逻辑元件。
13.根据权利要求1所述的器件,其中可编程逻辑元件的所述第二部分向所述处理器的分组分配与相同TCP流关联的报头数据。
14.根据权利要求1所述的器件,还包括由所述处理器中的每个处理器共享的互连,所述互连在所述可编程逻辑元件的所述第二部分和所述处理器之间传输报头数据,其中所述处理器通过所述互连在广播流中接收所述报头数据。
15.一种混合可编程逻辑器件,包括: 收发器,所述收发器以第一速度接收数据包,其中所述数据包包括报头数据和有效载荷数据; 可编程逻辑元件,其中所述可编程逻辑元件的第一部分提供硬件加速功能; 处理器,所述处理器与所述可编程逻辑元件交错,所述处理器以不同于所述第一速度的时钟速度可操作;以及 调度电路,所述调度电路以关于所述时钟速度异步的速率在所述收发器和处理器之间传输报头数据。
16.根据权利要求15所述的器件,其中所述调度电路监视接收的数据以检测控制包,所述控制包包含用于重新配置所述处理器中的一个或者多个处理器的指令。
17.根据权利要求16所述的器件,其中所述处理器基于所述控制包中的所述指令来执行深度包检查。
18.一种用于在混合可编程逻辑器件中向处理器路由数据包的方法,其中所述处理器中的每个处理器包括本地存储器并运行处理线程,所述方法包括: 在收发器处接收包括报头数据和有效载荷数据的数据包; 用与所述处理器中的一个处理器中的可用处理线程关联的唯一地址来标记每个报头数据; 在由所述处理器中的每个处理器共享的互连上,向所述处理器广播所述报头数据和唯一地址;以及 在每个处理器处: 针对与在所述处理器上运行的处理线程关联的唯一地址,监视在共享的所述互连上接收的所述报头数据;以及 如果所述报头被用与在所述处理器上运行的处理线程关联的所述唯一地址标记,则将所述报头数据存储在所述处理器的所述本地存储器中。
19.根据权利要求18所述的方法,其中所述混合可编程逻辑器件包括可编程逻辑元件和所述处理器,所述处理器和所述可编程逻辑元件交错,还包括: 在每个处理器处,向执行至少一个包处理功能的所述可编程逻辑元件的分组传输存储的报头数据。
20.根据权利要求19所述的方法,其中所述处理器和所述可编程逻辑元件直接从所述本地存储器访问存储的所述报头数据。
【文档编号】G06F15/173GK104050143SQ201410093242
【公开日】2014年9月17日 申请日期:2014年3月13日 优先权日:2013年3月14日
【发明者】M·D·赫顿, A·基尔科里斯 申请人:阿尔特拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1