发明内容
根据第一方面,提供了一种包括通信单元集合的集成电路芯片,每个单元被配置为根据协议进行操作,在该协议中,由一个单元发送的数据分组仅由一个单元可接收,每个单元被配置为向至少一个其他单元发送具有多个层之一的至少一个分组并且被配置为针对每个层指定要向其发送该层的分组的目的地单元的子集,其中每个单元被配置为:接收具有多个层之一的分组;确定所接收的分组的层;以及将具有与所接收的分组的层不同的层的分组顺序地发送给针对不同的层的目的地单元的相应子集中的每个目的地单元。
每个单元可以被配置为向针对在所接收的分组的层之上的层的目的地单元的相应子集中的每个目的地单元顺序地发送分组。
每个单元还可以被配置为针对每个层指定要由该单元生成的该层的分组的数目,并且在接收到分组时,针对不同层生成所指定数目的分组。
多个单元中的第一单元可以被配置为向单元的第一子集顺序地发送具有第一层的分组,单元的第一子集中的每个单元被配置为随后向单元的第二子集中的每个单元顺序地发送具有第二层的分组,其中第一层低于第二层。
单元的第一子集中的每个单元还可以被配置为随后将具有第二层的分组顺序地发送给单元的第三子集中的每个单元。
单元的第二子集中的每个单元可以被配置为在从单元的第一子集中的一个单元接收到分组时,随后向单元的第四子集中的每个单元发送具有第三层的分组,其中第二层低于第三层。
每个通信单元可以被配置为在具有较高层的分组之前向目的地单元的其相应子集顺序地发送具有较低层的分组。
层的数目可以小于或等于4。可以存在更多数目的层。
多个通信单元可以包括网络,并且每个单元可以被配置为与网络外部的实体通信。
每个单元可以被配置为将在该单元处从其相应实体所接收的消息的格式从由实体使用的消息格式转换为由网络使用的消息格式。
多个单元中的每个单元可以包括消息接口,并且在接收到分组时,每个单元可以被配置为在其相应消息接口上显示包括分组的数据的元素。
分组可以包括指定分组的层的数据。
分组可以包括报头和有效载荷,报头包括指定分组的层的数据。
分组可以包括触发器。
分组可以包括AXI事务。
根据第二方面,提供了一种用于在包括通信单元集合的集成电路芯片上实现的方法,每个单元被配置为根据协议进行操作,在该协议中,由一个单元发送的数据分组仅由一个单元可接收,每个单元被配置为向至少一个其他单元发送具有多个层之一的至少一个分组并且被配置为针对每个层指定要向其发送该层的分组的目的地单元的子集,该方法包括:接收具有多个层之一的分组;确定所接收的分组的层;以及将具有与所接收的分组的层不同的层的分组顺序地发送给针对不同的层的目的地单元的相应子集中的每个目的地单元。
该方法可以包括向针对在所接收的分组的层之上的层的目的地单元的相应子集中的每个目的地单元顺序地发送分组。
该方法可以包括在具有较高层的分组之前向目的地单元的相应子集顺序地发送具有较低层的分组。
层的数目可以小于或等于4。可以存在更多数目的层。
多个通信单元可以包括网络,并且每个单元可以被配置为与网络外部的实体通信。
每个单元可以被配置为将在该单元处从其相应实体所接收的消息的格式从由实体使用的消息格式转换为由网络使用的消息格式。
分组可以包括指定分组的层的数据。
分组可以包括报头和有效载荷,报头包括指定分组的层的数据。
分组可以包括触发器。
分组可以包括AXI事务。
具体实施方式
以下公开内容描述了一种用于在集成电路芯片上的网络中模拟广播的系统和方法。集成电路芯片可以是SoC或多芯片模块(MCM)。
图1和图2是用于SoC的示例性监测架构以及监测架构内的组件的示意图。可以监测系统的诸如安全漏洞、错误和安全问题等情况。这些图以功能块的形式呈现了结构。这些图中已经适当地省略了用于执行本领域公知的功能的一些功能块。
图1示出了用于SoC 100的示例性监测架构的一般结构。监测电路系统101被布置为监测系统电路系统102。图2示出了包括本地子系统(其在该示例中是核心器件)和通信接口的示例性系统电路系统。SoC的核心器件201、202和203各自连接到监测电路系统101。尽管图2示出了三个核心器件,但是任何数目的核心器件可以被合适地集成到监测架构中。核心器件可以运行操作系统,例如RTOS(实时操作系统)、运行软件、或者可以存储数据。示例性核心器件包括DSP(数字信号处理器)、视频处理器、应用处理器、CPU、图形处理器、系统存储器、总线、系统互连、定制电路和数据引擎。但是,SoC的任何组件都适合于作为图2上的核心器件并入监测架构中。核心器件可以是芯片上的其他器件的模拟器或仿真器。例如,核心器件可以模拟处理器。
监测电路系统能够监测核心器件的操作,并且可选地还能够操纵核心器件的操作。监测电路系统连接到通信接口204。通信接口204可以被配置为与片外实体通信。例如,监测电路系统101可以经由通信接口204与芯片外分析器通信。通信接口204还可以被配置为与其他片上实体通信。例如,监测电路系统101可以经由通信接口204与片上分析器通信。尽管图2示出了一个通信接口,但是任何数目的通信接口可以集成到SoC上。所实现的通信接口根据要做出的连接的类型来选择。示例性通信接口包括:JTAG、并行跟踪输入/输出、和基于Aurora的高速串行接口;以及系统接口(诸如USB、以太网、RS232、PCIe和CAN)的重用。在监测电路系统101内,可以存在与每个核心器件相关联的不同的监测电路系统。备选地或另外地,一些监测电路系统可以与两个或更多个核心器件相关联。备选地或另外地,一个核心器件可以与多组监测电路系统相关联。在一个示例中,图2的核心器件是处理器,并且该处理器由监测电路系统101的跟踪电路监测。处理器可以是例如CPU、GPU或DSP。
集成电路芯片可以包括多个监测电路系统模块101。每组监测电路系统可以具有被监测的不同的本地子系统。备选地或另外地,一些监测电路系统可以与两个或更多个本地子系统相关联。备选地或另外地,两个或更多个本地子系统可以与一组监测电路系统相关联。
在某些情况下,例如,如果安全漏洞或错误由一组监测电路系统检测到,则可能有必要向其他监测电路系统模块分发触发器。在这种情况下,一旦接收到触发器,与每个监测电路系统模块相关联的本地子系统就可以被关闭或另外被修改以确保安全(safety)或安全(security)。在这种情况下,期望将事件尽快地传送给其他监测电路系统模块中的每个监测电路系统模块及其相关联的(多个)子系统。
在大型SoC设计中,通常期望使用NoC作为用于消息或事件在器件之间的传输机制。如果由SoC使用的协议不同,则可能有必要将SoC消息与NoC本机协议相互转换。NoC网桥单元提供一种将SoC消息与NoC本机协议相互转换的机制。NoC网桥经由消息接口连接每个SoC组件,并且还可以负责管理、解决和分发事件。
NoC网桥可以提供用于连接到NoC的接口。来自SoC的消息和/或事件可以被转换为要跨NoC传输到NoC网桥的另一实例的分组,在该另一实例处,这些分组被转换回SoC消息或事件。
在一个示例性实施例中,NoC网桥提供用于连接到基于AXI4的NoC的接口。AXI是NoC接口协议的示例。SoC消息和/或事件可以被转换为要跨NoC传输到NoC网桥的另一实例的AXI事务,在该另一实例处,这些AXI事务被转换回SoC消息或事件。网桥可以备选地促进不同类型的互连事务的传输。
以下描述涉及在不同的NoC网桥单元之间传输数据分组。对于AXI变量网桥中的事件分发,对“分组”的引用可以被替换为“AXI事务”。以下描述的示例也可以更普遍地应用于使用允许一对一通信的协议的任何网络。换言之,可以应用在通信单元根据如下协议进行操作的任何网络中:在该协议中,由一个单元发送的数据分组仅由一个单元可接收。
在图3的示例中,集成电路形成在单个半导体衬底上。集成电路包括16个网桥单元300-315。每个单元与SoC上的相应监测电路系统模块101及其本地子系统316通信。
每个单元300-315可以包括协议处理器,该协议处理器将消息数据封装成适当格式的分组并且通过远程接口将它们传输到预期目的地。在链路的相对端,在接收单元中,类似的协议处理引擎通过其远程接口接收分组,从分组中提取有效载荷或业务数据,并且通过其本地接口将有效载荷或业务数据提供给其主机。每个单元的处理引擎还可以处理辅助任务,诸如检查所接收的数据是否有错误、请求重传或者提供确认、以及链路同步。
NoC内的通信单元300-315经由数据分组交换根据网络的协议进行通信。图4示出了数据分组400的示例。分组400包括报头401和有效载荷402。有效载荷包括要被传送的数据。有效载荷可以包括消息或事件。报头包括用于指示分组的预期目的地的地址字段403。分组数据中还包括用于指示用于分发分组的数据分组的层的层号,这将在下面更详细地描述。报头可以包括层标识符字段404以用于指示数据分组的层。分组的层可以备选地在分组的有效载荷中被指示。报头中还可以具有其他字段405,例如,指示有效载荷的长度、数据的优先级、纠错位等的字段。
每个网桥单元300-315针对其所支持的每个层独立地指定:(i)要生成的分组的预定数目;以及(ii)要向其发送预定数目的分组的目的地单元的子集。在该示例中,使用两层方法(第0层和第1层)来在网桥单元300-315之间分发分组。当消息或事件Enum在第一单元(诸如308)的消息接口上被接收到时(尽管任何单元可以启动该事件),一系列分组被生成并且被顺序地发送给针对该单元的所有所配置的目的地。单元308被配置为生成第0层分组并且将其发送给单元300、304和312的子集,并且生成第1层分组并且将其发送给单元309、310和311的子集。第0层分组包含{0,Enum}作为其有效载荷,并且第1层分组携带{1,Enum}作为其有效载荷。
网桥单元312从单元308接收第0层分组。单元312被预先配置为生成第0层分组并且将其发送给单元0、4和8,并且生成第1层分组并且将其发送给单元13、14和15。单元312确定它已经收到第0层分组。它可以通过读取分组数据来做到这一点,例如通过读取分组的报头,其中分组的层号可以被指定。然后,单元312生成具有有效载荷{1,Enum}的三个第1层分组,并且将它们顺序地发送给单元313、314和315。换言之,单元312针对在所接收的分组的层之上的(多个)层生成分组并且将它们顺序地发送给目的地单元的其所配置的子集中的每个目的地单元。由于由单元312接收的分组是第0层分组,因此没有分组被发送给针对该单元而指定的第0层单元。换言之,分组不被发送给针对与所接收的分组的层相同的层(或者如果适用的话,在所接收的分组的层以下的层)的单元的所配置的子集。单元312还在其消息接口上向其本地子系统316发出编号事件Enum。
网桥单元300和304的行为类似于网桥单元312。网桥单元300将第1层分组发送给网桥单元301、302和303,并且网桥单元304将第1层分组发送给网桥单元305、306和307。
网桥单元309、310和311各自从网桥308接收第1层分组。在图3的示例中,没有更高层分组(即,具有高于第1层的层的分组)要发送。但是,如果这些单元被配置为将分组发送给更高层上的另外的单元,则网桥单元309、310和311随后将在第1层之上的所有层上的分组发送给其所配置的目的地单元,并且在其消息接口上发出编号事件。
类似地,单元313、314和315各自接收由单元312发送的第1层分组。每个单元在消息接口上发出编号事件。在图3的示例中,这些单元313、314和315没有另外的分组要发送给更高层。但是,例如,如果这些单元被预先配置为发送第2层或第3层分组,则在接收到第1层分组后,这些第2层或第3层分组将从这些单元被进一步分发。
因此,优选地,编号较低的层首先被提供服务,因为它们可能会触发器附加分组,从而有助于减少总体延迟。
如上所述,每个单元被配置为针对每个层指定要向其发送该层的分组的目的地单元的子集。下面针对图3的单元308、309、312和313示出了用于指定要针对每个层生成的分组的数目及其目的地单元的参数的示例。
网桥308:
event_tiers_p={0,0,3,3}
ust_event_tiers_ip={0,0,3,3}
ust_event_destinations_ip={{},{},{9,10,11},{0,4,12}}
网桥309:
event_tiers_p={0,0,3,3}
ust_event_tiers_ip={0,0,3,3}
ust_event_destinations_ip={{},{},{8,10,11},{1,5,13}}
网桥312:
event_tiers_p={0,0,3,3}
ust_event_tiers_ip={0,0,3,3}
ust_event_destinations_ip={{},{},{13,14,15},{0,4,8}}
网桥313:
event_tiers_p={0,0,3,3}
ust_event_tiers_ip={0,0,3,3}
ust_event_destinations_ip={{},{},{12,14,15},{1,5,9}}
在该示例中,每个单元使用event_tiers_p被配置有要在层中的每个层中生成的最大数目的分组,其中位[7:0]指定针对第0层的最大分组数,位[15:8]对应于第1层,等等。
要向其发送事件的目的地使用输入参数ust_event_destinations_ip来指定。该总线的大小基于参数event_tiers_p和hp_width_p。
要在每个层中生成的实际事件数可以使用ust_event_tiers_ip输入来修改,其中位[7:0]指定针对第0层的实际事件数,等等。这允许重用包含NoC网桥的子系统,例如,在其中子系统被合成、放置和路由一次的平铺设计中。
在上述示例中,满足以下约束可能很有用。
对于event_tiers_p,如果针对层而配置的最大事件数为0,则所有更高层应优选地也被配置有0个事件。例如,以下组合不是优选的,因为它针对第2层指定了0个事件并且针对第3层指定了非零(4)个事件:
event_tiers_p={0x04,0x00,0x10,0x1}
类似的约束可以应用于ust_event_tiers_ip,它指定每层要生成的实际事件数。每层要生成的实际事件数应当小于或等于所配置的最大值。这表示,按字节计,ust_event_tiers_ip应当小于或等于event_tiers_p。
事件目的地向量ust_event_destinations_ip可以被如下构造:ust_event_destinations_ip=
{最后的第3层目的地,…,第一第3层目的地,
最后的第2层目的地,…,第一第2层目的地,
最后的第1层目的地,…,第一第1层目的地,
最后的第0层目的地,…,第一第0层目的地}
对于给定层,每个单元可以从“第一”目的地开始,并且在进行到下一层之前,以“最后的”目的地(其由该层的“最大”和“实际”事件数中的较低者确定)结束。
在事件目的地向量中被指定的值的宽度应当为hp_width_p。
分组被顺序地发送给目的地的顺序可以被预先定义。它可以是集成商定义的。相应单元可以遍历目的地列表。可以在目的地列表中更早地指定已知引起跨NoC的更高延迟的目的地。发送分组的顺序可以被配置为导致用于处理多层事件的可能延迟最低。
图5总结了根据本发明的用于在包括通信单元集合的集成电路芯片上实现的方法的示例,每个单元被配置为根据协议进行操作,在该协议中,由一个单元发送的数据分组仅由一个单元可接收,每个单元被配置为向至少一个其他单元发送具有多个层之一的至少一个分组并且被配置为针对每个层指定要向其发送该层的分组的目的地单元的子集。该方法包括,在步骤501,接收具有多个层之一的分组。在步骤502,确定所接收的分组的层。在步骤503,将具有与所接收的分组的层不同的层的分组顺序地发送给针对不同的层的目的地单元的相应子集中的每个目的地单元。
因此,本发明的系统使用分布式层结构,将NoC中的至少一些单元作为将消息或事件传播到其他单元的子集的网桥。分组的层由接收单元确定,并且用于标识是否要通过生成附加分组来在其上路由消息或事件,并且如果是,要路由到哪些其他单元。
优选地,消息或事件应当被发送给系统中的所有单元,这意味着分组应当被发送给它们中的每个。在使用传统方法时,除非单元的数目很少,否则在首先在其消息接口上接收到该事件的单元中生成所有分组可能会导致显著的序列化延迟。它还可能需要NoC内的完全连接,潜在地增加大量资源。
因此,使用本发明的多层方法,首先接收到消息或事件的单元可以模拟广播,同时顺序地一次发送一个消息。消息的分层分发可以减少将消息发送给网络中每个其他单元所需要的时间。
在优选实施例中,存在多达四个等级的分层。但是,可以实现更多等级的分层。
在关于图3描述的示例中,每个单元被配置为向针对在所接收的分组的层之上的层的目的地单元的相应子集中的每个目的地单元顺序地发送分组。然而,这些单元可以向与所接收的分组的层不同的任何(多个)层中的目的地单元的子集发送分组。
在单元之间所发送的数据分组可以是单播分组或多播(例如,以太网)分组。
上述系统和方法可以在以下示例性情况下使用。当期望在启动时通过向单元中的每个单元发送可以包括“唤醒”消息的分组来初始化本地子系统中的器件的存储器时,可以使用该方法。当期望将消息分发给它们可以响应以指示其当前状态(诸如安全(security)或安全(safety)状态)的本地子系统中的单元或器件时,也可以使用该方法。此外,本地子系统中的单元或器件可以被配置为在它们接收到包含特定消息、指令集或触发器的分组时执行特定方法。该方法还可以用于向本地子系统中的器件发送包含用于配置器件的数据的上游消息。
图1至图3中所示的系统的每个组件可以以专用硬件来实现。备选地,图1至图3所示的系统的每个组件可以以软件来实现。某些组件可以用软件实现,而其他组件可以以专用硬件实现。
所描述的系统适当地并入基于计算的设备内。基于计算的设备可以是电子设备。合适地,基于计算的设备包括用于处理计算机可执行指令以控制该设备的操作以便实现本文中描述的方法的一个或多个处理器。计算机可执行指令可以使用任何计算机可读介质(诸如存储器)来提供。本文中描述的方法可以由软件以有机可读形式在有形存储介质上执行。可以在基于计算的设备处提供用于实现本文中描述的方法的软件。
申请人由此单独公开本文中描述的每个单独特征以及两个或更多个这样的特征的任何组合,以使得这样的特征或组合能够根据本领域技术人员的公知常识基于本说明书作为整体来执行,而不管这样的特征或特征组合是否解决了本文中所公开的任何问题,并且不限于权利要求的范围。申请人指出,本发明的各方面可以包括任何这样的单个特征或特征组合。鉴于以上描述,对于本领域技术人员很清楚的是,可以在本发明的范围内进行各种修改。