可编程集成电路中的片上网络的制作方法

文档序号:28951961发布日期:2022-02-19 10:51阅读:329来源:国知局
可编程集成电路中的片上网络的制作方法
可编程集成电路中的片上网络
1.优先权申请
2.本技术是2019年5月10日提交的美国专利申请序列号16/409,146的继续并要求其优先权,该美国专利申请的内容通过引用整体并入本文。
技术领域
3.本文公开的主题总体上涉及用于在现场可编程门阵列(fpga)内提供片上联网的方法、系统和机器可读存储介质。


背景技术:

4.fpga越来越多地用于需要高速数据通信的应用,例如机器学习、联网加速和存储加速。fpga可以包括高频和高吞吐量接口,但是由于fpga核中用户逻辑的较低操作频率,因此fpga的内部功能无法处理高吞吐量。
5.例如,外围部件互连快速(pcie)可以以每秒500吉比特操作,并且图形双倍数据速率类型六同步动态随机存取(gddr6)存储器可以具有支持每秒4太比特的接口。另一方面,fpga可以以700兆赫兹操作,因此使得难以在fpga上提供针对pcie和gddr6存储器的功能。
附图说明
6.附图中的各个附图仅示出了本公开内容的示例实施方式并且不可以被视为限制其范围。
7.图1示出了根据一些示例实施方式的具有片上联网能力的fpga的架构。
8.图2示出了根据一些示例实施方式的用户逻辑与存储器模块之间的数据流。
9.图3示出了根据一些示例实施方式的利用内部片上网络(inoc)和外部片上网络(enoc)的逻辑与存储器模块之间的数据流。
10.图4示出了根据一些示例实施方式的用户逻辑与外围部件互连快速(pcie)模块之间的数据流。
11.图5示出了根据一些示例实施方式的pcie模块与存储器模块之间的数据流。
12.图6示出了根据一些示例实施方式的到用户逻辑的以太网连接。
13.图7示出了根据一些示例实施方式的使用inoc的用户逻辑模块之间的数据流。
14.图8示出了根据一些示例实施方式的用户逻辑主设备(user-logic master)与用户逻辑从设备(user-logic slave)之间的数据流。
15.图9a示出了根据一些示例实施方式的fpga的动态配置。
16.图9b示出了根据一些示例实施方式的inoc接口时序。
17.图10示出了根据一些示例实施方式的在inoc内的广播和多播。
18.图11示出了根据一些示例实施方式的在传输期间流控制单元(微片(flit))的交错。
19.图12a示出了根据一些示例实施方式的用以避免通信死锁的针对命令和响应的单
独队列的使用。
20.图12b示出了根据一些示例实施方式的ew inoc路由器的架构。
21.图12c是根据一些示例实施方式的输入管线级(input pipeline stage)的图。
22.图12d示出了根据一些示例实施方式的输出管线级的传出先进先出(fifo)级。
23.图12e示出了根据一些示例实施方式的输出管线级。
24.图13示出了根据一些示例实施方式的用于使用伪随机数发生器和可配置阈值的每个路由器处的流控制器的仲裁(arbitration)。
25.图14是根据一些示例实施方式的实现片上网络(noc)的方法的流程图。
26.图15是根据一些示例实施方式的用于对fpga进行编程的方法的流程图。
27.图16是示出机器的示例的框图,在该机器上或通过该机器可以实现或控制本文描述的一个或更多个示例过程实施方式。
具体实施方式
28.示例方法、系统和计算机程序旨在为诸如fpga的可编程集成电路提供片上联网。示例仅代表可能的变型。除非另有明确说明,否则部件和功能是可选的并且可以被组合或细分,并且操作的顺序可以不同或者可以被组合或细分。在以下描述中,出于说明的目的,阐述了许多具体细节以提供对示例实施方式的透彻理解。然而,对于本领域技术人员来说将明显的是,可以在没有这些具体细节的情况下实践本主题。
29.在传统的fpga中,支持高速接口和存储器的知识产权(intellectual property,ip)核位于fpga核的边界处,并且fpga开发工程师必须开发提供从fpga逻辑内的加速核到与接口ip核相邻的fpga边界的路径的逻辑。如果加速分布在fpga核内的不同位置,则fpga设计者必须实现分布或收集来自芯片的不同部分的数据的逻辑,包括可能需要的目的地解码和仲裁。在典型设计中,fpga设计的这部分占用了fpga逻辑的很大一部分。随着现代数据加速要求,进出ip核的数据路径的路由和逻辑拥塞使得在一些要求苛刻的情况下无法实现令人满意的设计。
30.在此描述的fpga中网络实现方式(也称为片上网络(noc))提供对设备上的高速ip接口的低延迟和高吞吐量访问。noc提供对位于fpga核中任何位置的fpga设计逻辑(例如,用户逻辑)的访问,并且提供对地址解码、数据路由、仲裁和流控制的特征的优化支持,而无需消耗fpga逻辑资源。由于不消耗fpga资源来支持数据通信,因此用户逻辑与高速模块之间的通信不导致fpga核的拥塞。另外地,与通常使用fpga核逻辑可以实现的网络相比,专用片上网络以更低的延迟提供外部访问。
31.在一些实现方式中,inoc包括二维网状网络,其中网状网络中的任何节点向fpga逻辑提供向设备中的任何位置发出读取和写入命令的能力,而不管节点本身的地理位置。例如,fpga可以向asic实现的从设备、例如存储器接口ip(ddr、gddr、hbm等)、以太网接口、pci express等发出网络事务。另外地,设备上的主设备、例如pci express、fpga控制单元(fcu)配置主设备和联合测试行动组(jtag)调试主设备可以向fpga中的任何位置发出网络事务。此外,fpga中的任何位置都可以向fpga中的任何其他位置发出网络事务,而无需使用fpga ip资源。
32.noc支持多种并发网络协议,例如高级可扩展接口(axi)、以太网、用于加速的高速
缓存一致性互连(ccix)、高级外围设备总线(apb)、高级微控制器总线架构(amba)高性能总线(ahb)、开放核协议(ocp)、wishbone、ccix流接口(cxs)协议以及其他任意打包或解包的数据流。
33.在一些实现方式中,inoc包括使用用于主设备到fpga事务的垂直连接性和用于fpga到从设备事务的水平连接性,但是其他配置也是可能的。
34.noc上的网络链路被优化以允许主设备和从设备请求业务以及响应业务,以共享相同的物理链路。例如,提供每列和每行写入事务重组缓冲器以实现交错和延迟最小化。
35.在一些实现方式中,fpga核驱动fpga配置逻辑并且能够访问设备上任何ip的控制和状态(csr)接口。
36.此外,在noc内提供广播和多播能力并且使用专门的业务类别避免可能的死锁。例如,在一个节点处存在命令请求拥塞的情况下,事务响应可以被保证向前推进。
37.此外,noc为节点内的业务提供可配置的仲裁公平算法。此外,提供了一种用于保证在不同方向上行进的流控制单元(微片)的事务排序(transaction ordering)的机制。
38.一个总体方面包括可编程集成电路,该可编程集成电路包括多个集群、内部片上网络(inoc)以及在多个集群外部的外部片上网络(enoc)。多个集群设置在多个集群行和多个集群列上,每个集群包括可编程逻辑。此外,inoc包括inoc行和inoc列。每个inoc行被配置成用于传输数据并且包括到集群行中的集群和enoc的连接,并且每个inoc列被配置成用于传输数据并且包括到集群列中的集群和enoc的连接。
39.一个总体方面包括可编程集成电路,该可编程集成电路包括多个集群、包括inoc行和inoc列的inoc、连接至inoc行和inoc列的enoc以及fcu。多个集群设置在多个集群行和多个集群列上,每个集群包括可编程逻辑。fcu用于基于由fcu接收到的第一配置来配置多个集群中的可编程逻辑,fcu连接至enoc。fcu经由inoc和enoc与多个集群进行通信,其中fcu被配置成用于从多个集群中的可编程逻辑接收第二配置,以用于重新配置可编程集成电路的部件。
40.图1示出了根据一些示例实施方式的具有片上联网能力的fpga 102的架构。fpga 102包括外部noc(enoc)104和内部noc(inoc)120,它们提供外围设备与fpga核122之间的高吞吐量和易于使用的访问。inoc 120和enoc 104的组合在本文中被称为noc。fpga核122被enoc 104包围并且包括集群118,集群118是可由用户配置的可编程逻辑单元。
41.在典型的fpga中,可能难以快速移动数据,因为fpga逻辑比典型的专用处理器运行得更慢。noc实现了网络层次结构,该网络层次结构允许在fpga内部的快速数据移动和高吞吐量。
42.存在与fpga外部交换数据的多个外部接口,例如以太网控制器114、pcie控制器116和gddr6控制器112。在传统的fpga中,外部接口直接连接至集群118并且于是传送数据的能力受到集群118的速度的限制。此外,数据交换可能需要配置大量集群118。例如,如果pcie控制器116想要与ddr-4控制器124对话,则用户必须将fpga设计成在整个架构中在两个方向上递送(carry)读取和写入请求,这将需要使用可能不会用于其他目的的大量用户逻辑。此外,当与由外部接口支持的速度相比时,传送会是慢的。
43.在一些示例实施方式中,enoc 104和inoc 120支持主设备与从设备之间的读取/写入事务。主设备/从设备是一种通信模型,其中一个设备或进程可以控制一个或更多个其
他设备。在fpga中,主设备能够发起事务,即发送请求,而从设备则等待任何主设备发送请求。enoc 104还支持直通和存储转发通信。
44.主设备至少包括pcie控制器116、fpga核122中的用户实现的主设备和fpga控制单元(fcu)(允许比特流命令读取和写入外围控制和状态(csr)接口)。从设备至少包括gddr6控制器112、ddr4/5控制器124、fpga核122中用户实现的从设备、pcie控制器116、fcu(允许例如pcie的子系统中的主设备如下面参照图9a所讨论的那样配置fpga)、以及集群118的csr接口(例如,包括锁相环(pll)、输入/输出、顶级时钟/复位)。
45.在一些示例实施方式中,inoc 120在fpga核122中以规则间隔的元件实现,并且inoc 120包括多个列和多个行。图1中所示出的示例包括七列和八行,但是其他实施方式可以使用不同数量的列和行(例如,在从1到50或更多的范围内,尽管其他值也是可能的)。
46.在一些示例实施方式中,每行包括向东和向西方向上的快速数据路径(例如,512gbps,但其他速度也是可能的),并且每列包括向北和向南方向上的快速数据路径。
47.inoc 120和enoc 104使用noc传输分组并且向模块提供分组传送接口。在一些示例实施方式中,分组接口支持高级可扩展接口(axi)读取和写入事务。axi是高级微控制器总线架构(amba)的一部分,amba是一种用于片上系统(soc)设计中功能块的连接和管理的开放标准的片上互连规范。
48.集群118中的用户逻辑可以向集群118中的本地网络接入点(nap)发出axi读取或写入事务。基于路由逻辑,inoc 120将事务递送到fpga核122的东边界或西边界处的enoc 104。在一些示例实施方式中,inoc 120将由用户fpga逻辑发出的事务传输至东侧或西侧,并且去往fpga用户逻辑的事务从北侧或南侧到达,但其他业务模式也可以得到支持。
49.在inoc 120上具有512gbps传输的一个实施方式中,假设4循环突发(burst),每个inoc行能够支持409gbps的写入数据吞吐量,因为写入命令是作为每个事务的第一循环发送的。较大尺寸的突发将引起较高的吞吐量,而较小尺寸的突发将引起较低的吞吐量。每行或每列上的事务与同一行或同一列上的其他事务共享可用带宽。
50.除了分组数据在向北或向南方向上被递送之外,inoc 120的每列类似于行进行操作。在一些示例实施方式中,inoc 120的水平部件使得集群118中的用户逻辑能够发出读取/写入事务(例如,axi事务),并且inoc 120的垂直部件使得fpga核122之外的ip部件能够向集群118发出事务。换言之,fpga主设备106连接至inoc 120的行,而fpga从设备108连接至inoc 120的列。
51.inoc 120支持多种业务类型,包括事务数据和分组数据流。事务数据包括读取和写入命令、数据和响应。命令传送通常是单个循环,并且数据传送通常是短的,其中4个循环的事务非常常见。
52.业务类型包括用于加速器的高速缓存一致性互连(ccix)数据、分组数据和原始用户数据。在一些示例实施方式中,inoc 120在以ccix模式工作时递送来自pcie控制器116的ccix数据。这作为csx协议格式的数据流提供给用户,它实际上是用户解包的分段接口。
53.分组数据可以被捆绑为更长的数据流。在一些示例实施方式中,inoc 120对分组大小没有施加上限。此外,关于原始用户数据传输,inoc 120在同一列或同一行内的nap之间传输微片,并且微片被组合以形成分组。
54.在一些示例实施方式中,inoc 120的每行向fpga核122西侧的enoc 104提供
(present)主设备106,以及向fpga核122东侧的enoc 104提供另一主设备106。inoc 120的每列向北侧的inoc 120提供从设备108,并且向南侧的inoc 120提供另一从设备108。这使得用户逻辑能够读取或写入任何外部ip或csr接口,并且使得具有主接口的任何外部ip能够访问带有附加用户逻辑的任何nap。
55.在一些示例实施方式中,enoc 104是围绕fpga核122的环,该环将事务从enoc 104的外部递送至集群118,以及将事务从集群118递送至enoc 104的外部,以及在集群118之间递送事务。在一些示例实施方式中,enoc 104提供地址解码、事务命令和响应路由、消息宽度适配、频率适配(例如,时钟域交叉)、突发适配和协议转换。
56.enoc 104递送读取和写入事务。在一些示例实施方式中,enoc 104不递送以太网分组、serdes数据或ccix数据,并且不递送中断信息。然而,其他实施方式可以传输以太网分组、serdes数据、ccix数据中的一个或更多个,并且递送中断信息。
57.inoc 120和enoc 104的组合使得fpga中的任何接入点都具有访问包括gddr6控制器112、ddr-4控制器124和pcie控制器116接口中的任一个的任意接口ip从设备接口的权限。
58.在一些示例实施方式中,每个存储器接口向noc提供从设备(例如,具有256b的数据路径宽度)并接受读取和写入事务。此外,pcie主设备106和从设备108直接连接至enoc 104。
59.noc节点(或在本文中简称为节点)是与其他节点连接并与其他节点进行通信的网络的部件。对于每个业务方向,每个节点包括路由器和nap。nap具有到集群118中的本地用户逻辑的连接,并且路由器将分组(例如,微片)递送至其他节点中的其他路由器。因此,用户逻辑通过与和路由器对接的nap进行通信来访问noc。
60.路由器为在网络上行进的微片做出路由策略,并且nap将来自高速noc网络的数据的传送“减慢”到集群118中用户逻辑的较低速度。nap还将数据格式化为相应的协议,例如以太网或axi。ew(东-西)路由器是东西方向上的路由器,即inoc的行中的路由器。ns(南-北)路由器是南北方向上的路由器,即inoc的列中的路由器。
61.cxs或cxs接口是指ccix流接口。图形双倍数据速率存储器(gddr)或gddr6是存储器单元(除非另有说明,否则推断为jedec标准6.0)。双倍数据速率存储器(ddr)或ddr4是存储器单元(除非另有说明,否则推断为jedec标准4.0)。waw微片是一种特殊种类的微片,其将写入数据通道和写入地址通道封装在同一微片中,从而实现更高效的数据传输。以太网接口单元(eiu)是将以太网数据发送至inoc 120列的接口。此外,ccix接口单元(cxiu)是将cxs数据发送至inoc列的接口。
62.每个节点具有两组路由器和nap组合:ew路由器和nap,以及ns路由器和nap。此外,每个节点处的路由器独立于其他路由器,并且将传入的微片驱动到下一个节点(下一个路由器)或将传入的微片向相应的本地nap驱动。每个路由器基于微片中的目的地id字段决定是在节点中消耗微片还是将微片转发至下一个节点。在一些示例实施方式中,微片具有12位传输信息和291位有效载荷(payload),但其他格式也是可能的。微片有效载荷用于承载各种类型的数据,并且在axi事务的情况下,291位有效载荷承载axi信号。在非axi微片中,微片被配置成封装原始数据、以太网分组或cxs流。针对不同类型的载荷,支持多种微片格式。
63.在axi事务的情况下,ew路由器附接至ew nap,该ew nap充当针对用户逻辑的axi从设备。ns路由器连接至ns nap,该ns nap充当用户逻辑上的axi主设备。因此,ew方向生成请求并接收响应,而ns方向接收命令并生成响应。
64.在原始数据传送的情况下,ew nap生成由另一个ew nap接收的原始数据微片。传送通过ew inoc发生。类似地,ns nap生成原始数据微片并由另一个ns nap接收。
65.在cxs微片的情况下,ns nap接收并生成cxs微片,其中每个cxs微片封装cxs流并通过ns inoc基础架构向cxiu递送,cxiu与pcie或ccix对接。
66.在以太网微片的情况下,ns nap接收并生成以太网分组。每个以太网微片全部或部分封装以太网分组。inoc基础架构将数据递送至eiu,eiu处理与以太网mac的对接。这样,inoc 120支持存储器映射数据传输基础架构以及纯数据流传输基础架构两者。
67.因此,noc使用数千位宽的非常快的链路(例如,2ghz)提供在用户逻辑外部周围运行的高速网络,引起到该存储器的低得多的延迟和高得多的吞吐量路径,而用户不必针对通信设计任何中间集群118。因此,fpga可以不被编程并且pcie控制器116能够在没有任何配置的情况下与ddr-4控制器124对话。这允许更好地将用户逻辑用于用户的可编程功能。
68.在一些示例实施方式中,noc是支持读取和写入的事务网络。可以从任何地址请求读取,并且可以对任何地址执行写入。
69.为了受益于noc功能,用户在他们的设计中实例化nap。为了访问通过noc可见的各种ip,用户配置nap。此外,为了使用noc来在fpga上的集群118之间进行通信,用户在每个节点处实例化nap块,并且使用标准接口,例如axi或分组接口,甚至使用用户自己的接口。总之,noc同时递送多种类型的业务。
70.例如,用户在他们的设计中实例化256位nap,以获得对inoc 120的访问。假设用户的设计能够满足600mhz的频率,单个nap提供153.6 gbps的读取吞吐量和153.6gbps的写入吞吐量。
71.图2示出了根据一些示例实施方式的用户逻辑202与存储器模块gddr6控制器112之间的数据流。在所示出的示例中,设备的东侧存在四个gddr6控制器112,并且设备的西侧存在四个gddr6控制器112。在一些示例实施方式中,假设存在支持18gbps通道的gddr6部件,则这些gddr6控制器112中的每一个均支持高达576gbps的存储器吞吐量。gddr6控制器112提供两个axi接口,每个接口代表288gbps的存储器带宽,在设备的东侧和西侧各有总共八个axi接口。inoc 120也有八行,因此每个支持512gbps的axi接口有一个inoc行。
72.inoc行不专用于特定的gddr6存储器控制器;任何inoc行都具有访问任何gddr6控制器的权限,并且一个inoc行的业务将通常分布在多个存储器控制器上。因此,单个inoc行比单个gddr6控制器具有更多可用带宽是有益的。为了增加复杂性,inoc 120上的每个写入事务都需要inoc时钟循环来在传送数据之前传送命令。这意味着4个循环写入突发使用五个inoc循环(80%效率),而单个循环axi写入突发使用两个inoc循环(50%效率)。
73.在图2所示出的示例中,用户逻辑202向本地nap发出事务,本地nap将事务传送至路由器208,并且inoc行将该事务递送至fpga核122的东边缘或西边缘,在fpga核122的东边缘或西边缘,事务被提供给enoc 104。从那里开始,enoc 104将事务递送至正确的gddr6控制器112接口。响应反向遵循相同的路径。在该示例中,本地inoc 120将用户请求从路由器208(主设备)递送至路由器206。enoc 104将请求从路由器206递送至gddr6接口204(从设
备)。响应将遵循相反的路径。
74.在一些示例实施方式中,使用axi接口,其中请求是读取命令并且响应将数据递送回用户逻辑202。
75.图3示出了根据一些示例实施方式的利用inoc 120和enoc 104的用户逻辑302与存储器模块ddr-4控制器124之间的数据流。用户逻辑302向本地nap发出事务304,本地nap将事务传送至路由器306,路由器306将事务递送至在fpga核122的西边缘处的路由器308,在fpga核122的西边缘处事务被提供给enoc 104。enoc 104将请求递送至正确的ddr 4/5接口310,正确的ddr 4/5接口310在该示例中是ddr-4控制器124。响应沿相反方向遵循相同的路径。注意,一些实施方式描述使用节点路由器的事务,这意味着使用本地nap来访问用户逻辑,并且为了描述简单,可以描述为路由器传送或接收来自用户逻辑的数据,这意味着使用本地nap,尽管它可能会从描述中省略。
76.图4示出了根据一些示例实施方式的用户逻辑402与pcie控制器116之间的数据流。inoc的垂直连接性使得fpga核122外部的主设备106能够向fpga核122内部的从设备108发出事务。inoc的垂直连接性还使得以太网分组能够从以太网控制器直接沿inoc 120的列向下被驱动进入fpga核122。
77.在一些示例实施方式中,pcie控制器116支持高达512gbps的吞吐量,这是与由inoc列所支持的额定吞吐量相同的额定吞吐量。如果pcie控制器116主设备向多于一个的列中的路由器发出事务,则垂直inoc中存在充足的吞吐量。
78.在所示出的示例中,pcie接口410(主设备)连接至enoc 104,enoc 104将请求递送至inoc列中的从设备406。inoc列然后将请求递送至路由器408,路由器408经由相应的nap将请求递送至用户逻辑402。反向通信沿相反方向遵循相同的路径。inoc列基于由主设备(例如接口410)提供的地址来选择。
79.图5示出了根据一些示例实施方式的pcie控制器116与gddr6控制器112之间的数据流。pcie控制器116在接口410上作为主设备106发出事务,并且enoc 104将该事务递送至gddr6控制器112的接口502(从设备)。在这种情况下,fpga核122不参与pcie控制器116与gddr6控制器112之间的通信,并且enoc 104传输命令和响应。
80.图6示出了根据一些示例实施方式的到用户逻辑的以太网连接。在一些示例实施方式中,以太网控制器114支持高达400gbps的吞吐量,但也可以支持其他速度。
81.在一些示例实施方式中,以太网控制器114直接连接至inoc 120的一个或更多个列,这使得以太网控制器114能够直接向inoc列之一发出分组而不必经过enoc 104。在其他示例实施方式中,以太网分组可以通过enoc 104传送并且可以传送至任何列。
82.在图6所示出的示例中,以太网分组从接口604发送至inoc列顶部的路由器606,其中路由器606支持以太网分组的传送。inoc列将分组递送至正确的行,在正确的行,分组被递送至被配置成用于分组传输的路由器608。路由器608然后经由本地nap将分组传送至用户逻辑602。反向数据传送沿相反方向遵循相同的路径。
83.在一些示例实施方式中,对于以太网分组传送,在每个微片中传送288位。288位数据将数据递送至微片中指定的单个路由器608。为了在以太网模式下与用户逻辑对接,路由器608重新使用axi数据信号以及32位附加信号。以太网数据在由cxs和原始数据传输使用的相同的288位接口上提供给用户逻辑。此外,以太网分组可以利用附加信息封装在微片
中。
84.在一些示例实施方式中,nap能够将以太网格式和协议转换为axi格式和协议。例如,nap可以接收以太网分组,将数据转换为axi,并且将转换后的数据存储在存储器位置。因此,inoc列支持两种不同类型协议、例如以太网和axi的传输。
85.此外,如图11所示,这两种类型的业务可以交错。然而,ip核内的分组的最终目的地对于以太网和axi将是不同的。
86.图7示出了根据一些示例实施方式的使用inoc 120的用户逻辑模块之间的数据流。除了传输读取和写入事务之外,每个nap可被配置成绕过分组中事务封装功能,以便inoc 120传输原始分组。这用于在fpga内的不同区域之间移动数据。
87.在一些示例实施方式中,inoc 120的水平部件和垂直部件是独立的,并且可以将分组发送至同一行或同一列上的节点。如果无法直接经由行或列发送分组,则将分组发送至enoc 104以进行传送(如图8所示),或者用户逻辑将被配置成充当网关以将分组从行发送至列,或将分组从列发送至行。
88.在一些示例实施方式中,路由器被配置为主设备并在东向或西向上转发分组,而被配置为从设备的路由器在北向或南向上转发分组。inoc 120将分组沿垂直或水平路径转发至正确的目的地。
89.在所示出的示例中,用户逻辑702通过使用一个inoc列与用户逻辑704进行通信。用户逻辑702经由本地nap使用路由器714,路由器714将分组转发710到路由器716,路由器716将分组递送至nap和用户逻辑704,反之亦然。
90.在水平传送中,用户逻辑706利用inoc行与用户逻辑708进行通信。用户逻辑706将分组传送至路由器718(经由本地nap),路由器718将分组传送至路由器720,路由器720将分组传送至用户逻辑708(经由本地nap),反之亦然。注意,由于行和列是独立的,因此水平传输和垂直传输两者都可以以最大传输速度(例如,512gbps)进行操作。
91.在该模式下,用户逻辑利用任何类型的通信协议与另一用户逻辑进行通信,并且inoc 120提供数据的原始传送。
92.图8示出了根据一些示例实施方式的用户逻辑主设备与用户逻辑从设备之间的数据流。充当主设备的用户逻辑802向充当从设备的路由器发出分组以将数据递送至另一用户逻辑。始发路由器将事务发送至位于fpga核122的东边缘或西边缘处的enoc接口,然后enoc 104将事务递送至inoc 120的顶部或底部处的正确列,并且inoc列将事务沿列向下递送至接收路由器。
93.在所示出的示例中,用户逻辑802经由路由器808(主设备)发送请求806,路由器808将事务向西转发至与enoc 104对接的路由器810。enoc 104将请求传送至路由器812(从设备),路由器812将数据沿列向下传送至路由器814,路由器814将请求递送至用户逻辑804(充当从设备)。
94.图9a示出了根据一些示例实施方式的fpga的动态配置。通常,配置902被发送至fcu 924以配置fpga 102的部件。这通常在fpga 102用于其预期目的之前完成一次。
95.然而,有时期望在fpga 102开始操作之后(在fpga 102已经被配置的情况下)重新配置fpga 102的一部分,例如用于改变存储器控制器906中的一些参数。部分重新配置对于fpga制造者而言是困难的问题。改变逻辑的一些部分而不改变逻辑的另一部分的任务相对
简单。然而,当系统级约束使部分重新配置不可能时就会出现问题;例如,由于被重新配置的块之间的信号的关系,在正在使用相邻逻辑的同时重新配置逻辑区域特别困难。
96.例如,如果第一用户逻辑正在与第二用户逻辑对话并且通信通过第三用户逻辑,则尝试重新配置第三用户逻辑将中断第一用户逻辑与第二用户逻辑之间的通信。
97.一些现有解决方案实现用户逻辑连接至的“外壳”。然而,这减少了fpga中可用于核的部分区域(例如,在一种情况下为44%),并且并给用户带来了一些问题,例如通过非矩形区域进行路由、跟踪打开的事务(open transaction)以及仔细放置表示用户逻辑与“外壳”之间的边界的信号。
98.在一些示例实施方式中,noc可以用于用户逻辑的部分重新配置,并且用户逻辑也可以发出命令以在fpga上执行部分重新配置。假设每个逻辑块都需要与例如pcie、以太网、ddr等的接口进行通信,则用户设计他们的系统,使得每个逻辑块都经由noc进行通信。在这种情况下,在不影响相邻区域的业务的情况下重新配置noc(集群)内的逻辑区域。此外,可以在相邻区域正在操作时实现真正的部分可重新配置性。
99.在一些示例实施方式中,fcu 924能够向noc发出事务,允许配置逻辑设置设备上的任何csr接口或进行例如用户逻辑922的任何用户逻辑的部分配置。
100.例如,与fpga 102通信的计算机904使用pcie控制器116向fcu 924发送请求。该请求可以是重新配置pcie控制器116本身,并且fcu 924将重新配置位发送至pcie控制器116以改变其配置。
101.在另一示例中,用户逻辑914向fcu 924发送请求916(例如,经由enoc 104)以重新配置pcie控制器116的配置位908。
102.此外,例如pcie控制器116和用户逻辑914的fpga 102上的其他元件向fcu 924发出命令,允许使用noc进行部分重新配置。这意味着fpga 102能够在不接收用于重新配置的外部命令的情况下重新配置自身。
103.在一些示例实施方式中,fpga 102的部件还可以发出命令以重新配置fpga 102的其他部件,而不通过fcu 924。例如,用户逻辑912经由路由器920向存储器控制器906发送请求918,以改变调节存储器控制器906的行为的配置位910。请求通过inoc 120的行,并且然后enoc 104将请求传送至存储器控制器906。
104.在另一示例中,部分重新配置可以用于改变noc路由器和nap的配置。例如,路由器/nap可以被配置成使用以太网分组,具有特定地址,改变地址转换表,设置优先级别,设置安全级别等。
105.通过使用部分重新配置,可以改变一个集群的这些参数中的任何,并且这是从内部用户或从外部用户完成的。
106.图9b示出了根据一些示例实施方式的inoc接口时序。noc接口时序类似于axi信令,但信号属性有一些变化。
107.在一些示例实施方式中,存在两个有效信号(valid signal)954和两个就绪信号(ready signal)958;也就是说,存在两个有效-就绪对(valid-ready pair),它们形成共享递送ew inoc中的301位微片956和ns inoc中的306位微片的相同物理线路的两个虚拟通道。一个有效-就绪对用于命令虚拟通道,并且另一有效-就绪对用于响应虚拟通道。另外,在inoc接口中,任何时候都只有一个有效信号生效(assert)。
108.有效信号和就绪信号可以在路由器接口上和在节点内的内部握手中独立地生效。此外,有效信号954和就绪信号958符合nap接口处的axi协议要求,包括时钟信号952。
109.这种对接在有效与就绪之间没有依赖性,允许可以在非常高的频率下运行的实现方式。另外地,这种实现方式还允许高速信号传输所需的距离(例如,集群的宽度)而无需管线级;因此,将延迟保持为最小值。
110.此外,具有共享相同物理接口的两个虚拟通道使得路由器能够选择通过的业务。此外,如下面参照图12a更详细地讨论的,配备有这种选择的路由器通过使响应优先于命令来避免死锁。
111.图10示出了根据一些示例实施方式的inoc 120内的广播和多播。除了支持事务之外,inoc列递送以太网数据。每个inoc以太网接口单元(eiu)(节点路由器的一部分)(例如,1004-1011)接受来自以太网mac的一个或更多个以太网业务流。eiu基于设备配置(例如,用户将物理mac映射到列中的目的地节点)来利用正确的目的地d标记以太网数据,将该数据与来自其他mac的数据交错,并且然后将分组沿列向下发送。
112.具有与inoc列微片中的目的地字段相等的本地地址的eiu捕获该微片,将微片复制到其本地缓冲器中。绕过axi封装/解封装,并且将接收到的微片提供给用户逻辑。将分组开始、分组结束和分组结束模指示、以及其他以太网控制信号作为微片有效载荷的一部分递送。对于出站以太网分组(从用户逻辑到以太网控制器114),过程是相反的:用户逻辑将数据推到本地eiu中,本地eiu附加在列的顶部处的“北终端”目的地id和源id,并且将数据与其他向北微片交错。源id指示哪个以太网mac目的地。
113.在一些示例实施方式中,当以太网控制器114以400gbps操作时,以太网控制器114向eiu提供以约800mhz运行的1024位宽的接口。通过在四分段接口中递送数据或作为随着时间流式传输的分组递送数据,该数据量适合单个inoc列的吞吐量包络。然而,该数据量超过了单个eiu可以提供给fpga逻辑的数据量。为了支持400gbps,使用了多nap数据提供。例如,四个eiu协同工作,每个提供/接收256位数据,以为客户提供以约500mhz运行的1024位的组合数据路径。在另一示例实施方式中,四个以太网帧被单独缓冲并单独发送至单独的eiu,其中每个在约500mhz的256位数据路径中流式传输。
114.为了支持多nap数据提供,eiu从400gbps mac核获取1024位接口并将其分成每个为256位的四个并行流。这些流中的每一个都在2ghz域中操作,具有所附加的唯一目的地id,并且彼此交错以沿列向下发送,其中它们由相应的eiu拾取。在其他实施方式中,为了支持较慢的布速(fabric speed),以这种方式提供的以太网分组被四分段,使得任何目的地/源nap获得分组的开始或末端。这增加了复杂性,但允许设计以较慢的速度运行。
115.当以太网控制器114以200gbps操作时,以太网控制器114提供以约400mhz运行的1024位宽接口(替选地,以约800mhz运行,其中超过一半的循环是空闲的)。当转换为四分段接口时,该数据量适合单个inoc列的吞吐量包络。然而,该数据量超过了单个eiu可以提供给fpga逻辑的数据量。根据配置,200gbps流作为四分段接口向四个nap提供,或者作为分组流式接口向四个nap或两个nap提供。
116.对于以100gbps或更低进行操作的以太网,以太网控制器114向eiu提供256位接口。eiu将该数据交叉到2ghz inoc时钟域并进入小型交换网络,以发送至两个目的地列之一。另外地,每个quad mac还有一个缓冲分组的100g接口。
117.如同在其他网络中一样,noc中的通信使用地址来标识网络中的节点。因此,noc的不同节点(例如以太网、pcie、ddr、nap)被分配了地址,并且noc负责地址解码以确定请求的去向并将请求发送至正确的位置。
118.在一些示例实施方式中,每个路由器包括地址转换表,该地址转换表允许每个端点(路由器/nap或ip核)的基础地址(base address)(也称为本地地址)独立于其物理位置。因此,当路由器接收到具有路由器的本地地址之一作为目的地地址的分组时,路由器将分组(或微片)递送至本地nap。
119.地址转换表将目的地地址转换为noc中元件的物理地址。虽然物理地址是唯一的,但相同的目的地地址可能被映射到多于一个的节点(例如,nap),所述多于一个的节点使用该目的地地址作为本地地址。因此,noc的地址空间是完全可配置的,因为nap的地址转换表也是可配置的。
120.每个nap中的地址转换表允许针对每个事务问题根据地址来查找每个节点或ip核的目的地位置。地址转换表允许由每个nap查看的存储器映射独立于由其他nap查看的存储器映射。例如,这使得一个加速器(用户逻辑)能够在给定基础地址处查看其私有存储器,并且使得不同的加速器能够在同一基础地址处查看其存储器,而系统实际上已经为每个加速器独立分配了存储器。
121.该地址转换表还用于提供安全性,使得如果耦接至给定nap的用户逻辑的一些部分不能访问某个其他nap、ip核、fcu或某个其他地址空间,则对于该给定nap,地址空间的禁用部分将在地址转换表中标记为不可访问。
122.可配置地址转换表的灵活性使得能够实现多播和广播寻址方案,因为每个nap同时支持多个本地地址。例如,可以通过为列中的每个nap分配相同的本地地址作为它们的地址之一来实现列中的广播,使得如果微片带着广播地址到达nap,则nap将在本地递送微片。
123.在现有的fpga广播实现方式中,广播分组必须单独发送至广播的每个接收者,这意味着发送两个或更多个分组,而不是仅仅一个分组。
124.类似地,可以将广播地址分配给连接至enoc 104的列的顶部处的所有nap。于是可以在所有列中广播包。此外,可以跨inoc 120的一行或跨inoc 120的多行实现广播。
125.多播与广播一样,但只有nap的子集共享给定的本地地址。在图10所示出的示例中,同一列中的多个nap被分配相同的本地地址4,即nap 1004、1006、1007和1010。注意,这些nap可以具有不同于其他nap的附加地址。
126.当具有目的地地址4的分组1002沿inoc列向下发送时,nap 1004、1006、1007和1010将确定该分组被寻址到其本地地址之一并且将该分组递送1002到本地nap。因此,一个数据分组用于多播到网络上的多个节点。
127.注意,可以针对多种传输机制,例如以太网和axi,实现广播和多播。此外,因为网络地址表是可重新配置的,如上所述,可以在fpga正在操作时添加、修改或删除广播和多播地址。
128.一个使用示例是在与机器学习相关的应用中。在机器学习中,经常使用矩阵乘法,并且使用权重来识别机器学习中使用的训练和推理的优化函数。用于矩阵乘法的权重可以用于多个用户逻辑区域中;因此,使用多播是一种将权重参数传输至多个用户逻辑区域的好方法。
129.图11示出了根据一些示例实施方式的在传输期间流控制单元(微片)的交错。如上所述,在一些示例实施方式中,针对每个方向都有一个路由器1113、1114,并且每个路由器1113、1114具有2:1多路复用器(mux)1106以将来自本地节点(例如,用户逻辑1102)的业务1110与已经在相应方向上的水平总线上的业务1108合并。当每个分组到达路由器1113、1114时,分组中的字段用于确定分组是否被转发或其是否被递送至相应的nap 1111、1112。
130.mux 1106用于将来自水平业务的微片与来自用户逻辑1102的微片混合,该过程被称为交错。结果是业务1104,其包括来自本地节点的混合(例如,交错)微片和通过路由器1114的来自其他节点的业务。
131.可以交错不同种类的微片,例如读取请求和写入响应(单循环微片)、写入请求以及读取响应。关于写入请求,axi不支持交错的写入。对于inoc,至nap的axi接口具有相同的限制,但在高速noc接口上传送的数据允许微片的完全交错。当用户逻辑是主设备时,构成写入事务的微片在向enoc发出之前在fpga核的边缘处被重组。这也意味着在发送事务之前不需要在路由器1114内部缓冲事务,因为事务从低速nap被“运载”(例如,在单独的微片中传输)到高速enoc上而不阻挡到其他节点/来自其他节点的业务。在行端点nap处所需的总缓冲是在其他情况下路由器1114内部所需的总缓冲。此外,由于重组缓冲器存在于东端点和西端点两者处,因此所需的总存储器加倍,但该方案更高效,因为存储器是大尺寸的单个存储器,而不必在行中的所有路由器处添加存储器。
132.关于读取响应,axi支持交错的读取响应。这简化了inoc的实现方式,因为它在fpga作为主设备和fpga作为从设备的两种情况下自由交错。在这两种情况下,axi事务id足以在目的地处重组响应。此外,在来自不同方向的读取响应的情况下,响应可能会交错返回,但必须按照事务id的顺序返回。
133.如果两个分组在noc中共享一条链路,但是目的地是不同的端点,则期望这两个分组尽可能少地彼此影响。在这种情况下,逐循环交错可能是理想的,因为每个流都将以最小的抖动看到其可用吞吐量的份额。这也使得fifo存储器要求能够最小化。
134.利用axi,对具有给定事务id的多个读取请求的响应必须以相同的顺序返回。同样,对具有给定事务id的多个写入请求的响应必须以相同的顺序返回。通常,具有相同事务id的读取事务与写入事务之间没有顺序要求。
135.对于去往西侧的请求流,inoc 120保持从给定用户逻辑发出点开始的请求微片排序,直到事务被发送至向西的enoc 104。然后,西侧enoc在返回响应时保证保持正确的排序。对于向东的请求流也是如此。
136.每个路由器1114具有路由算法来确定传入的微片或流将被传送至哪里。在一些示例实施方式中,路由算法支持多个业务类别。图11示出了与mux 1106相关联的一个队列,但其他队列也可用于不同的业务类别(未示出),其中每个业务类别具有其自己的队列并将交错来自相应队列的数据。这使得路由器能够支持业务的服务质量(qos)。
137.路由器处的仲裁逻辑决定接下来从哪个队列向下一个路由器传送哪个分组。在一些示例实施方式中,路由器利用虫洞路由,虫洞路由是基于已知固定链路的计算机联网中的流控制系统。通常,第一微片(称为头部微片)保存有关分组路由的信息(例如,目的地地址),并且为与分组相关联的所有后续微片设置路由行为。头部微片后跟随包含实际数据有效载荷的零个或更多个主体微片。一些最终的微片(称为尾部微片)执行一些簿记以关闭两
个节点之间的连接。
138.在虫洞交换中,每个缓冲器或者空闲,或者分配给一个分组。如果缓冲器空闲,则将头部微片转发至该缓冲器。这将缓冲器分配给分组。如果缓冲器被分配给其分组并且未满,则将主体微片或尾部微片转发至该缓冲器。最后的微片释放缓冲器。如果头部微片在网络中被阻挡,则缓冲器就会填满,并且一旦满了,就不能再发送微片。这种效应称为“背压”,并且传播回源。
139.名称“虫洞”来自分组通过链路发送的方式,因为给定分组的头部在尾部到达之前已经离开路由器。这意味着路由器快速设置实际消息的路由。由于分组是按微片传输的,因此它可能会沿其路径占用若干微片缓冲器,从而创建虫状图像。
140.因此,与存储和转发机制不同,从路由器的微片传输甚至可以在完整的分组(其可以包括若干微片)已经到达路由器之前开始。
141.由于交错,来自分组的微片可能不会一起到达目的地。然而,noc实现方式保证了微片按顺序到达目的地,因为所有的微片都遵循相同的路径。一旦微片到达,目的地重组微片以形成分组。
142.图12a示出了根据一些示例实施方式的用以避免通信死锁的针对命令和响应的单独队列的使用。死锁是包括fpganoc的任何网络的重要考虑因素。如果没有建立用以避免死锁的机制,则noc在一些情况下可能会出现死锁情况。
143.例如,节点1206向ddr 1202发送读取请求1211,ddr 1202发送响应1210,并且节点1204向ddr 1208发送读取请求1212,ddr 1208发送响应1213。这些通信的业务通过节点1205。在请求和响应在没有优先级别的情况下排队并且在大量业务下的情况下,节点1205中的缓冲器可能变满。响应可能无法通过,因为缓冲器已满并且缓冲器上存在附加请求。存在针对响应的缓冲器的部分分配,但由于拥塞而未完成响应。可能会发生资源的部分分配的循环依赖性,从而导致死锁。
144.在一些示例实施方式中,为了避免死锁情况,在路由器处实现不同的队列1214、1215,其中一个队列1214用于对命令排队而另一个队列1215用于对响应排队。因此,传入的业务被分成命令和响应,并且然后在离开路由器的路上再次合并。
145.响应队列1215被赋予比命令队列1214更高的优先级别,使得命令可以被暂时阻挡但响应继续通过;也就是说,响应在命令之前传输。发起这些响应的命令将完成,随后进行释放资源,这破坏会导致死锁的部分分配和循环依赖性。
146.图12b示出了根据一些示例实施方式的ew inoc路由器的架构。在一些示例实施方式中,在路由器中,传入的数据直接进入寄存器并且传出的数据被直接驱动出寄存器。因此,路由器被构建为在输出级处会聚的两个单独的通道,在输出级处寄存的输出在高速接口上被驱动出。
147.inoc路由器1114决定传入的微片(从东侧或西侧传入)是在节点处被消耗(例如,发送至本地nap)还是转发至下一个节点。
148.此外,如上所述,inoc路由器1114在每个方向上具有用于命令微片和响应微片的单独路径。这些路径称为通道并且避免死锁状况。两个通道在输出管线级1220处会聚。
149.注意,在一些示例实施方式中,ns noc具有与ew noc类似的架构,但用于向北或向南而不是向东或向西行进的微片。
150.图12c是根据一些示例实施方式的输入管线级1230的图。在一些示例实施方式中,ew noc路由器的实现方式的目标频率为2ghz,并且ns inoc的目标频率为2.027ghz,以支持以太网分组传送。
151.在ew noc中,从一个路由器到下一个路由器的距离等于核结构集群118的宽度,这意味着输入管线级和输出管线级必须满足输入/输出(io)时序约束。
152.在ns noc中,从一个路由器到下一个路由器的距离是集群的高度(例如,从北边界到南边界)。这意味着输入管线级和输出管线级也必须满足ns noc中的时序约束。
153.输入管线级1230包括用于两个微片的空间,并且就绪信号直接从计数器(counter)驱动。输入管线级1230充当乒乓缓冲器(ping-pong buffer),其中基于写入指针将数据接受到任一级中。此外,与写入指针和读取指针一起,还使用计数器,在一些示例实施方式中该计数器被实现为格雷编码计数器。
154.此外,输入管线级1230针对每个通道单独实现,这是inoc微片具有两个有效信号、例如两个虚拟通道的原因之一。
155.具有两个单独的有效信号和就绪信号使这种设计选择成为可能并减少用作控制信号的有效信号上的扇出。在输入管线级中,有效信号扇出到控制逻辑,该控制逻辑包括四个或更少的触发器(flop)。在一些示例实施方式中,就绪控制信号直接从触发器生成,并且每个数据信号(例如,微片信号)扇出到四个4触发器。
156.在一些示例实施方式中,输入管线级1230实现方式将仅在传入的微片有效信号上具有扇出。然而,综合工具可以生成不使用具有同步使能信号的触发器的逻辑。
157.图12d示出了根据一些示例实施方式的输出管线级的传出先进先出(fifo)级1240。在输出管线级中,存在两个fifo级形式的用于四个微片的空间和用于驱动传出微片接口的级。一个fifo级保存两个命令微片并且一个fifo级保存两个响应通道微片。图12d示出了fifo级1240之一。
158.图12e示出了根据一些示例实施方式的输出管线级1250。为了避免在传出微片路径中需要多路复用器和仲裁器(arbiter)(这会恶化io时序要求),输出管线级1250具有与输入管线级不同的设计。
159.为了满足io时序要求,输出管线级1250直接从触发器驱动微片。此外,命令有效信号和响应有效信号以尽可能小的扇出和逻辑从触发器驱动出。传入的控制信号就绪还必须具有尽可能小的扇出以及尽可能少的组合逻辑。输出管线级也满足所有这些要求,并且不会在路径中增加延迟。
160.输出管线级1250直接从触发器驱动微片,并且在输出微片级中填充微片类型的控制逻辑通过触发器对out_flit_type[0]和out_flit_type[1]来指示。这两个触发器由内部逻辑用于扇出并驱动组合逻辑。
[0161]
另一个触发器对用于驱动有效回复repl_out_flit_type[0]和repl_out_flit_type[1]。在一些示例实施方式中,两对触发器具有相同的结构。两个触发器对中的触发器不会同时设置为值“1”,并且两个触发器对被实现以避免可能会降低时序的额外扇出。此外,out_flit_type和repl_out_flit_type的位0表示有效命令并且位1表示有效响应。
[0162]
在一些示例实施方式中,填充输出管线级1250的控制逻辑被定义如下:
[0163]
如果响应fifo已满,则out_flit级被填充有来自响应fifo的微片,并且out_flit_
type被设置为“10”;
[0164]
否则,如果命令fifo已满,响应fifo为空,并且不存在传入响应微片,则out_flit级被填充有来自命令fifo的微片并且out_flit_type被设置为“01”;
[0165]
否则,如果响应fifo为空并且存在传入响应微片,则out_flit级被填充有传入响应微片并且out_flit_type被设置为“10”;
[0166]
否则,如果响应fifo为空并且不存在传入响应微片且存在传入命令微片,则out_flit级被填充有传入命令微片并且out_flit_type被设置为“01”。
[0167]
当fifo级中的任一个已满时,这意味着下一个路由器不能再接受任何微片。此时,直到相应的fifo级清空后,fifo级才会接受新数据。此外,当下一级不接受微片时,微片会被记录到fifo级中,这避免了在fifo级被填充有微片的情况下产生的任何额外延迟。
[0168]
out_flit_type触发器和repl_out_flit_type触发器是自由流动触发器并且不需要清除,因为fifo基于相应的就绪状态来维护。
[0169]
此外,在一些示例实施方式中,如果命令在out_flit触发器中但就绪未生效,并且如果响应微片可用,则命令fifo仍保存该命令但out_flit微片被传入响应替换。当不存在响应传入且响应fifo为空时,该命令再次呈现在输出端处。
[0170]
此外,当响应不频繁并且命令已经填充在命令fifo中时,只要响应可用,响应就会占用out_flit触发器并被允许通过,这允许可用带宽的最佳使用。
[0171]
在与在输出级处具有多路复用器-仲裁器结构的常规机构相比时,该架构允许显著更好的结果(例如,路由器的更高性能)。
[0172]
图13示出了根据一些示例实施方式的使用伪随机数发生器1306和可配置阈值的每个路由器处的流控制器的仲裁。图13示出了包括四个节点1301至1304的网络的一部分。示出向东方向上的业务,其中从节点向左的业务与节点内产生的本地业务交错。
[0173]
如果使用简单的50-50分配来合并经过的业务与本地业务,则从节点向东的吞吐量将在每个路由器处分成两半,这意味着对于向西流动的业务,向东的节点将获得比西侧的节点更少的带宽。
[0174]
在一些示例实施方式中,在每个节点处使用加权轮循仲裁(weighted round robin arbitration)来实现用于行进微片的公平仲裁方案。每个循环中,行中的每个路由器均在来自链中前一个路由器的业务与来自其本地nap的业务之间具有仲裁选择。为了公平地将业务从最远的源分配到端点(例如,行最东侧的路由器将业务发送至西侧的端点),沿路由的每个顺序路由器都给予来自其邻居的业务更高的优先级别。
[0175]
例如,对于来自最靠东的路由器的向西业务,最靠东的路由器给予其本地nap一半带宽,并且给予从东端点流出的业务一半带宽。向西的下一个路由器给予其路由器1/3带宽,并且给予向西向业务2/3带宽。并且对于向西的路由器,分配给本地nap的带宽继续减少。通过行的更西侧的路由器流向西端点的业务将1/9的带宽分配给其本地nap并且将9/10的带宽分配给来自东侧的传入业务(当inoc的水平行上存在9个节点时)。
[0176]
这种分配可以被公式化为:将1/(1+n)的业务分配给本地nap并且将其余的业务分配给流经的业务,其中n是行中的路由器的序号。在西向业务的示例中,东边缘的路由器具有n=1,向西的下一个路由器具有n=2,依此类推,直到西边缘的路由器,其具有n=9。
[0177]
在一些示例实施方式中,带宽分配对于每个节点是可配置的。例如,节点1301将部
分p1(例如80%)分配给通过业务并且将(1-p1)(例如20%)分配给本地业务,节点1302将部分p2(例如70%)分配给通过业务并且将(1-p2)(例如30%)分配给本地业务,等等。
[0178]
于是,可以配置每个节点处的概率pi,以在由用户选择的配置中为预期业务模式提供最佳分配。
[0179]
在一些示例实施方式中,pi的实现方式通过将pi百分比的分组分配给通过业务,而其余分配给本地业务来完成。例如,如果pi为30%,则在10个分组中,前3个分组分配给通过业务并且接下来的7个分组分配给本地业务。这种分配也可以在十分组循环内交替分组。
[0180]
然而,固定分配可能导致一些不期望的业务模式,例如循环模式。为了避免这种情况,使用伪随机数发生器1306生成随机数rn 1308,并且使用随机数rn 1308在路由器处分配分组。由于分配基于看似随机的模式,因此消除了在数据中产生循环或共振的可能性。
[0181]
在一些示例实施方式中,伪随机数发生器1306利用线性反馈移位寄存器(lfsr)以硬件实现。lfsr是其输入位是其先前状态的线性函数的移位寄存器。除了使位移位之外,使用线性函数来基于lfsr中多个位的值计算一端的输入位。线性函数可以对所选择的位使用异或(xor)运算。因此,lfsr最通常是其输入位由整个移位寄存器值的一些位的xor驱动的移位寄存器。
[0182]
lfsr的初始值称为种子,并且因为寄存器的操作是确定性的,所以由寄存器产生的值流由其状态确定。此外,因为寄存器具有有限数量的可能状态,因此它最终必须重复输出的循环。具有良好选择的反馈函数的lfsr产生看起来随机且具有非常长的循环的一系列位。
[0183]
在一些示例实施方式中,选择32位lfsr,但其他寄存器大小也是可能的。可以使用寄存器的整个值或lfsr中的位的子集。在一些示例实施方式中,使用十个最低有效位(或十位的某个其他子集)来生成rn 1308。
[0184]
每个路由器包括用于确定路由器处的分组分配的可配置阈值参数ti。对于每个队列选择循环,进行检查(操作1310)以确定rn是否大于或等于ti。如果rn大于或等于ti,则选择用于本地业务的第二队列q2(操作1314),以及如果rn小于ti,则选择用于吞吐量业务的第一队列q1(操作1312)。
[0185]
10位rn具有从0到1023的值。ti与pi相关,使得ti确定分配给吞吐量业务的分组的百分比。例如,如果ti设置为409,则约409/1024次或约40%的时间选择q1,并且约60%的时间选择q2。因此,每个路由器的ti可以被配置成确定从每个队列中选择的业务的百分比。
[0186]
在另一示例实施方式中,寄存器上的固定位被配置成确定轮换调度(rotating schedule)中的队列选择。例如,在每个循环基于寄存器中一位的值选择队列:如果该位为0,则选择q1,以及如果值为1,则选择q2。对于下一个循环,使用寄存器中的下一位选择队列,然后每32位循环将重复。值为0的位数决定了从q1中选择的分组的百分比。
[0187]
通过配置寄存器中位的值,可以控制分组分配。例如,通过将三分之一的位设置为0,则q1将有三分之一的时间被选中。此外,通过在不同节点中设置不同的位值分布,可以使不期望的循环性或同步的业务模式的发生最小化。
[0188]
图14是根据一些示例实施方式的实现片上网络(noc)的方法1400的流程图。虽然该流程图中的各种操作是按顺序呈现和描述的,但普通技术人员将理解,可以以不同顺序执行、组合或省略或并行执行这些操作中的一些或全部。
[0189]
在操作1402处,可编程集成电路接收可编程集成电路的配置,可编程集成电路包括:设置在多个集群行和多个集群列上的多个集群,每个集群包括可编程逻辑;内部片上网络(noc),其包括inoc行和inoc列;以及在多个集群外部的外部片上网络(enoc)。每个inoc行被配置成用于传输数据并且包括到集群行中的集群和enoc的连接,并且每个inoc列被配置成用于传输数据并且包括到集群列中的集群和enoc的连接。
[0190]
从操作1402,方法1400流向操作1404,用于基于配置来配置可编程集成电路。
[0191]
从操作1404,方法1400流向操作1406,用于利用inoc通信和enoc通信的组合提供通信,以使任何集群能够与任何其他集群以及具有耦接至enoc的外部接口的通信模块进行通信。
[0192]
在一个示例中,可编程集成电路还包括具有用于与外部实体交换数据的外部接口的多个通信模块。通信模块连接至enoc并且被配置成用于经由enoc与多个集群进行通信。
[0193]
在一个示例中,inoc行包括到集群和到enoc的主连接,并且inoc列包括到集群和到enoc的从连接。
[0194]
在一个示例中,对于inoc行业务的每个方向,每个集群包括连接至集群中的用户逻辑的网络接入点(nap)和路由器。
[0195]
在一个示例中,inoc被配置成用于包括分组传送、数据流和原始用户数据的多种业务类型的通信。
[0196]
在一个示例中,方法1400还包括由inoc通过将分组划分为一个或更多个微片来传送分组。
[0197]
在一个示例中,方法1400还包括从处于主模式的第一用户逻辑向处于从模式的从存储器控制器发送读取请求。读取请求通过连接至第一用户逻辑的inoc行发送至enoc,并且从enoc发送至从存储器控制器。
[0198]
在一个示例中,以太网控制器耦接至至少一个inoc列,其中,用于上述至少一个inoc列中的通信的微片对以太网分组进行封装。
[0199]
另一个总体方面关于可编程集成电路,该可编程集成电路包括多个集群、内部片上网络(inoc)和在多个集群外部的外部片上网络(enoc)。多个集群设置在多个集群行和多个集群列上,每个集群包括可编程逻辑。此外,inoc包括inoc行和inoc列。每个inoc行被配置成用于传输数据并且包括到集群行中的集群和enoc的连接,并且每个inoc列被配置成用于传输数据并且包括到集群列中的集群和enoc的连接。
[0200]
在一个示例中,可编程集成电路还包括具有用于与外部实体交换数据的外部接口的多个通信模块。多个通信模块连接至enoc并且被配置成用于经由enoc与多个集群进行通信。
[0201]
在一个示例中,inoc行包括到集群和到enoc的主连接,并且inoc列包括到集群和到enoc的从连接。
[0202]
在一个示例中,对于inoc行业务的每个方向,每个集群包括连接至集群中的用户逻辑的网络接入点(nap)和路由器。
[0203]
在一个示例中,inoc被配置成用于包括分组传送、数据流和原始用户数据的多种业务类型的通信。
[0204]
在一个示例中,inoc被配置成用于传送被划分为一个或更多个微片的分组。
[0205]
在一个示例中,处于主模式的第一用户逻辑被配置成用于将读取请求发送至处于从模式的从存储器控制器,读取请求通过连接至第一用户逻辑的inoc行发送至enoc,并且从enoc发送至从存储器控制器。
[0206]
在一个示例中,inoc通信和enoc通信的组合使得任意集群能够与任意任何其他集群以及具有耦接至enoc的外部接口的通信模块进行通信。
[0207]
在一个示例中,以太网控制器耦接至至少一个inoc列,其中,用于上述至少一个inoc列中的通信的微片对以太网分组进行封装。
[0208]
在一个示例中,连接至enoc的pcie控制器被配置成用于将请求发送至处于从模式的第二用户逻辑,该请求通过enoc发送至连接至第二用户逻辑的inoc列,inoc列将请求转发至第二用户逻辑。
[0209]
在一个示例中,连接至enoc的pcie控制器经由enoc与连接至enoc的存储器控制器进行通信,而不利用多个集群中的任意集群。
[0210]
在又一个总体方面,一种机器可读存储介质(例如,非暂态存储介质)包括指令,所述指令在由机器执行时使机器执行包括下述的操作:在可编程集成电路处接收用于可编程集成电路的配置。可编程集成电路包括:设置在多个集群行和多个集群列上的多个集群,每个集群包括可编程逻辑;内部片上网络(inoc),其包括inoc行和inoc列;以及在多个集群外部的外部片上网络(enoc),每个inoc行被配置成用于传输数据并且包括到集群行中的集群和enoc的连接,每个inoc列被配置成用于传输数据并且包括到集群列中的集群和enoc的连接。此外,机器执行包括下述的操作:基于配置来配置可编程集成电路;以及利用inoc通信和enoc通信的组合提供通信,以使任意集群能够与任意其他集群以及具有耦接至enoc的外部接口的通信模块进行通信。
[0211]
图15是根据一些示例实施方式的用于对fpga进行编程的方法1500的流程图。虽然该流程图中的各种操作是按顺序呈现和描述的,但普通技术人员将理解,可以以不同顺序执行、组合或省略或并行执行这些操作中的一些或全部。
[0212]
在操作1502处,可编程集成电路中的fcu接收用于配置可编程集成电路的第一配置,其中可编程集成电路还包括:设置在多个集群行和多个集群列上的多个集群,每个集群包括可编程逻辑;包括inoc行和inoc列的inoc;以及连接至inoc行和inoc列的enoc。fcu连接至enoc,并且fcu经由inoc和enoc与多个集群进行通信。
[0213]
从操作1502,方法1500流向操作1504,用于利用第一配置来配置可编程集成电路。
[0214]
从操作1504,方法1500流向操作1506,用于由fcu从多个集群中的可编程逻辑接收第二配置。
[0215]
在操作1508处,基于第二配置来重新配置可编程集成电路的部件。
[0216]
在一个示例中,在可编程集成电路利用第一配置被配置之后正在进行操作时接收第二配置。此外,在可编程集成电路正在进行操作时重新配置可编程集成电路的部件,而不影响多个集群中的未被重新配置的可编程逻辑的操作。
[0217]
在一个示例中,方法1500还包括:由fcu从可编程集成电路外部的计算设备接收第三配置,以用于在可编程集成电路正在进行操作时重新配置可编程集成电路的另一部件。
[0218]
在一个示例中,被重新配置的部件选自由多个集群中的可编程逻辑的一部分、通信控制器和存储器控制器组成的组。
[0219]
在一个示例中,对于inoc行业务的每个方向,每个集群包括连接至集群中的用户逻辑的nap和路由器,其中,每个路由器被配置成用于支持一个或更多个本地地址。
[0220]
在一个示例中,向inoc行之一上的路由器的广播通过为inoc行上的路由器分配相同的广播地址作为本地地址来实现。向inoc行之一上的两个或更多个路由器的多播通过为inoc行上的两个或更多个路由器分配相同的多播地址作为本地地址来实现。
[0221]
在一个示例中,每个路由器被配置成将从其他路由器传入的微片与从多个集群中的可编程逻辑传送的微片进行交错。
[0222]
另一个总体方面关于可编程集成电路,该可编程集成电路包括多个集群、包括inoc行和inoc列的inoc、连接至inoc行和inoc列的enoc、以及fcu。多个集群设置在多个集群行和多个集群列上,每个集群包括可编程逻辑。fcu用于基于由fcu接收到的第一配置来配置多个集群中的可编程逻辑,fcu连接至enoc。fcu经由inoc和enoc与多个集群进行通信,其中,fcu被配置成用于从多个集群中的可编程逻辑接收第二配置,以用于重新配置可编程集成电路的部件。
[0223]
在一个示例中,在可编程集成电路利用第一配置被配置之后正在进行操作时接收第二配置。在可编程集成电路正在进行操作时重新配置可编程集成电路的部件,而不影响多个集群中的未被重新配置的可编程逻辑的操作。
[0224]
在一个示例中,fcu被配置成用于从可编程集成电路外部的计算设备接收第三配置,以用于在可编程集成电路正在进行操作时重新配置可编程集成电路的另一部件。
[0225]
在一个示例中,第三配置经由连接至enoc的pcie控制器传送至fcu。
[0226]
在一个示例中,被重新配置的部件选自由多个集群中的可编程逻辑的一部分、通信控制器和存储器控制器组成的组。
[0227]
在一个示例中,对于inoc行业务的每个方向,每个集群包括连接至集群中的用户逻辑的nap和路由器,并且每个路由器被配置成用于支持一个或更多个本地地址。
[0228]
在一个示例中,向inoc行之一上的路由器的广播通过为inoc行上的路由器分配相同的广播地址作为本地地址来实现。此外,向inoc行之一上的两个或更多个路由器的多播通过为inoc行上的两个或更多个路由器分配相同的多播地址作为本地地址来实现。
[0229]
在一个示例中,每个路由器被配置成将从其他路由器传入的微片与从多个集群中的可编程逻辑传送的微片进行交错。
[0230]
在一个示例中,路由器处的微片的交错基于伪随机数和与伪随机数相关联的阈值,以在从其他路由器传入的一个微片与从多个集群中的可编程逻辑传送的一个微片之间进行选择。
[0231]
在一个示例中,每个路由器包括针对命令的命令队列和针对响应的响应队列,其中,响应队列中的微片在命令队列中的微片之前传送。
[0232]
在又一个总体方面,一种机器可读存储介质(例如,非暂态存储介质)包括指令,所述指令在由机器执行时使机器执行包括下述的操作:由可编程集成电路中的fcu接收用于配置可编程集成电路的第一配置。可编程集成电路还包括:设置在多个集群行和多个集群列上的多个集群,每个集群包括可编程逻辑;包括inoc行和inoc列的inoc;以及连接至inoc行和inoc列的enoc。fcu连接至enoc,并且fcu经由inoc和enoc与多个集群进行通信。该机器还执行包括下述的操作:利用第一配置来配置可编程集成电路;由fcu从多个集群中的可编
程逻辑接收第二配置;以及基于第二配置来重新配置可编程集成电路的部件。
[0233]
图16是示出机器1600的示例的框图,在该机器1600上或通过该机器1600可以实现或控制本文描述的一个或更多个示例过程实施方式。在替选实施方式中,机器1600可以作为独立设备操作或者可以连接(例如,联网)至其他机器。在联网部署中,机器1600可以在服务器-客户端网络环境中以服务器机器、客户端机器或两者的能力操作。在示例中,机器1600可以充当对等(p2p)(或其他分布式)网络环境中的对等机器。此外,虽然仅示出了单个机器1600,但术语“机器”也应被视为包括单独或联合执行一组(或多组)指令以执行本文所讨论的任意一种或更多种方法的机器的任意集合,例如经由云计算、软件即服务(saas)或其他计算机集群配置。
[0234]
如本文所述,示例可以包括逻辑、多个部件或机制,或者可以由逻辑、多个部件或机制操作。电路系统是在包括硬件(例如,简单电路、门、逻辑等)的有形实体中实现的电路集合。电路系统构件可以随着时间和潜在硬件可变性而灵活。电路系统包括在操作时可以单独或组合执行特定操作的构件。在示例中,电路系统的硬件可以被不变地设计成执行特定操作(例如,硬连线)。在示例中,电路系统的硬件可以包括可变连接的物理部件(例如,执行单元、晶体管、简单电路等)以对特定操作的指令进行编码,所述可变连接的物理部件包括物理修改(例如,磁性地、电地、通过不变质量粒子的可移动放置等)的计算机可读介质。在连接物理部件时,硬件部件的基本电气特性发生了变化(例如,从绝缘体变为导体,或从导体变为绝缘体)。指令使嵌入式硬件(例如,执行单元或加载机制)能够经由可变连接在硬件中创建电路系统的构件,以在操作时执行特定操作的一部分。因此,当设备操作时,计算机可读介质通信地耦接至电路系统的其他部件。在示例中,任何物理部件都可以在多于一个电路系统的多于一个构件中使用。例如,在操作中,执行单元可以在一个时间点处在第一电路系统的第一电路中使用,并且在不同的时间处由第一电路系统中的第二电路或由第二电路系统中的第三电路重新使用。
[0235]
机器(例如,计算机系统)1600可以包括硬件处理器1602(例如,中央处理单元(cpu)、硬件处理器核或它们的任意组合)、图形处理单元(gpu)1603、主存储器1604和静态存储器1606,其中它们中的一些或全部可以经由互连(例如,总线)1608彼此通信。机器1600还可以包括显示设备1610、字母数字输入设备1612(例如,键盘)和用户界面(ui)导航设备1614(例如,鼠标)。在示例中,显示设备1610、字母数字输入设备1612和ui导航设备1614可以是触摸屏显示器。机器1600可以另外包括大容量存储设备(例如,驱动单元)1616、信号生成设备1618(例如,扬声器)、网络接口设备1620以及诸如全球定位系统(gps)传感器、指南针、加速度计或其他传感器的一个或更多个传感器1621。机器1600可以包括输出控制器1628,例如串行(例如,通用串行总线(usb))、并行或其他有线或无线(例如,红外线(ir)、近场通信(nfc)等)连接,以与一个或更多个外围设备(例如打印机、读卡器等)进行通信或控制一个或更多个外围设备(例如打印机、读卡器等)。
[0236]
大容量存储设备1616可以包括机器可读介质1622,在机器可读介质1622上存储一组或更多组数据结构或指令1624(例如,软件),这些数据结构或指令1624(例如,软件)实现本文描述的技术或功能中的任意一个或更多个或者被本文描述的技术或功能中的任意一个或更多个利用。指令1624在由机器1600执行期间还可以完全或至少部分地驻留在主存储器1604内、静态存储器1606内、硬件处理器1602内或gpu 1603内。在示例中,硬件处理器
1602、gpu 1603、主存储器1604、静态存储器1606或大容量存储设备1616中的一个或它们的任意组合可以构成机器可读介质。
[0237]
虽然机器可读介质1622被示出为单个介质,但术语“机器可读介质”可以包括被配置成存储一个或更多个指令1624的单个介质或多个介质(例如,集中式或分布式数据库,和/或相关联的缓存和服务器)。
[0238]
术语“机器可读介质”可以包括能够存储、编码或承载由机器1600执行并且使机器1600执行本公开内容的技术中的任意一个或更多个的指令1624的任意介质,或者可以包括能够存储、编码或承载由这样的指令1624使用的数据结构或者与这样的指令1624相关联的数据结构的任意介质。非限制性机器可读介质示例可以包括固态存储器以及光和磁介质。在示例中,大容量机器可读介质包括具有多个粒子的机器可读介质1622,所述粒子具有不变(例如,静止)质量。因此,大容量机器可读介质不是暂态传播信号。大容量机器可读介质的具体示例可以包括:非易失性存储器,例如半导体存储器设备(例如,电可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom))和闪速存储器设备;磁盘,例如内部硬盘和可移除盘;磁光盘;以及cd-rom和dvd-rom盘。
[0239]
指令1624还可以经由网络接口设备1620使用传输介质在通信网络1626上传送或接收。
[0240]
在整个说明书中,多个实例可以实现被描述为单个实例的部件、操作或结构。虽然一种或更多种方法的各个操作被示出和描述为单独的操作,但是各个操作中的一个或更多个可以同时执行并且不要求以所示出的顺序执行操作。在示例配置中被呈现为单独部件的结构和功能可以被实现为组合的结构或部件。类似地,作为单个部件呈现的结构和功能可以被实现为单独的部件。这些和其他变型、修改、添加和改进落入本文中的主题的范围内。
[0241]
本文中示出的实施方式被足够详细地描述,以使得本领域技术人员能够实践所公开的教导。其他实施方式可以被使用并且从其中得到,使得可以在不偏离本公开内容的范围的情况下进行结构和逻辑替代和改变。因此,具体实施方式不应被认为具有限制意义,并且各种实施方式的范围仅由所附权利要求以及这些权利要求被赋予的等同物的全部范围来限定。
[0242]
如本文中使用的,术语“或”可以被解释为包含性或排他性意义。此外,可以为在本文中描述为单个实例的资源、操作或结构提供多个实例。另外,各种资源、操作、模块、引擎和数据存储之间的边界在某种程度上是任意的,并且特定操作在特定说明性配置的上下文中示出。功能的其他分配被预见并且可以落入本公开内容的各种实施方式的范围内。通常,在示例配置中作为单独的资源呈现的结构和功能可以被实现为组合的结构或资源。类似地,作为单个资源呈现的结构和功能可以被实现为单独的资源。这些和其他变型、修改、添加和改进落入如由所附权利要求表示的本公开内容的实施方式的范围内。因此,说明书和附图应被认为是说明性的而不是限制性意义的。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1