片上网络 (NoC) 是一种用于组织位于同一芯片上的操作模块之间的通信的方案。它旨在结合各种用途的计算核心(执行、图形、物理等)、设备控制器、ROM 和 RAM 模块、独立设备、传感器以及更多可以放置在硅晶体上的东西。目前,NoC 是一般微处理器技术特别是单芯片系统发展最有前途的领域之一。
接下来会首先分析一下NoC的特点,然后说明一下目前FPGA领域在这个硬件架构下的应用,最后简单分析未来这一架构的前景。
NoC
开头已经介绍了几个概念,这里在简单介绍一下:
R为路由节点,Core为计算节点。
首先,让我们弄清楚开发的片上网络架构的典型特征是什么。与在模块之间建立直接链接或将所有模块连接到一个或多个公共总线(其中信号通过相同的线路但在不同的时间传输)的传统方案不同,这种架构意味着每个模块都连接到一个内部网络建立在交换机上,它将路由它们与操作块之间的信号。
每个交换机都是一个网络节点,类似于传统数据网络中的类似物——LAN 和 WAN。交换机将数据拆分为更小的部分(数据包),并以这种形式通过一系列后续交换机将它们发送给接收者。每个中间节点浏览接收到的数据包的报头以搜索目的地,并根据路由表将它们转发到下一个。需要注意的是,数据包可以通过不同的方式到达最终交换机,因为中间节点可以根据特定连接的负载(动态路由)改变它们的路由。最终交换机从数据包中收集原始消息并将其传输给接收者。此外,这样的交换系统允许为不同的流量设置优先级(例如,服务质量单芯片系统中的算法)。
当前概念中的片上网络拓扑基于三种类型的元素:
- 开关(路由);
- 通道;
- 资源网络接口。
交换机根据所选拓扑采用在网络节点之间路由信号的任务。请注意,NoC 的架构假设使用了一个相当强大的开关,这将提供最低水平的延迟(最多纳秒)。但是由于它的实现,除了提高处理能力之外,还可以实现集成不同供应商的 IP 内核(包括图形内核、控制器和信号微处理器)提供的灵活性(前提是它们配备了兼容的网络接口),以及可能的网络拓扑的选择(因为可以通过各种方式建立各个功能块之间的通信)。
通道提供交换机和网络接口之间的物理连接。一些变体甚至会包括通信缓冲区。
最后,资源网络接口。这些 NoC 元素将确保各个 SoC 元素与公共内部网络的连接。
NoC和SoC有什么区别?
现代半导体是真正的科学奇迹,微处理器架构的微妙之处可能会让初学者感到困惑。让我们简要回顾一下片上网络和片上系统概念之间的区别。
片上网络是一种特殊方案,用于在 SoC 或处理器内的有限组件之间建立链接。它确保了最大的数据传输速度并减少了必要的物理连接总数。此外,正如我们已经指出的那样,它允许将来自不同供应商的不同目的的多个 IP 放置在同一个晶体中。
片上系统 (SoC) 是包含一整套多样化和互连单元的单芯片,旨在解决一定范围的任务。传统上,SoC 包括几个计算内核、内存控制器、I/O 子系统、它们之间的连接以及切换方式(总线、交叉开关、NoC 元件)。
是什么让 NoC 的理念栩栩如生:处理器性能提升的问题
仅在十几年前,提高处理器性能的主要方法是提高其时钟频率(广泛的方法)。然而,在达到 2 GHz 之后,工程师们遇到了第一个问题,包括所用材料的物理限制(二氧化硅层太薄,无法保证晶体管的精确切换:存在“漏电流”,导致晶体过热、功耗过大,甚至操作不当)和技术工艺(可以通过减小逻辑元件的物理尺寸来降低能耗,这是现有光刻方法和半导体材料难以实现的)。因此,开始寻找替代解决方案。一系列创新技术使现代 CPU 能够在 3.8-4 GHz 下稳定工作。
主要是基于在单个封装中集成多个处理器内核的计算并行化。并行计算本身并不是一个新话题:任务并行化的第一个理论论证是由 Gaspard de Prony 在 18 世纪末为法国地籍计算对数和三角表时提出的。在现代计算机技术的应用中,自 1950 年代“大型”计算机出现以来,并行计算得到了发展。在这里,几个独立处理器的联合工作用于计算——在某些情况下多达数千个。然而,直到 1980 年代中期,这种方法仍然是大型机的特权——直到第一台基于桌面处理器(英特尔 8086)的超级计算机在加州理工学院并发计算项目.
事实上,多核处理器不是专注于单个执行线程中每秒可能执行的最大操作数,而是允许同时执行多个线程,每个核心最多两个线程。这个想法本身很好,除了一点:并行计算的性能在很大程度上取决于特定任务的并行化程度以及开发人员应对它的能力。
还有一个问题。从一开始,这些单元(内核)之间的连接元素就是处理器总线——单核处理器的传统。它的主要缺点是一次只有一个处理器块可以传输数据。所有其他单位只能是当时的收件人。当需要从 N 个块传输信号时,在每个给定的时间片内,N-1 个块必须“等待”轮到它们。这种等待会导致延迟,这对于承担高负载的系统来说是一个严重的缺点。特别是,这一特性开始阻碍处理器公司的进一步发展,这些公司寻求增加其产品中的内核数量。毕竟,如果有很多强制碰撞,那么大量的核心没有任何优势。总线结构发展的下一个阶段是矩阵方案,也称为交叉开关。但实际上,这只是增加了各个块之间的链接数量。这就是为什么交叉开关也不是问题的明确解决方案。这样的连接方案只是允许通过组织更多的交叉链接将问题推迟一段时间。
不幸的是,这两个因素严重制约了软件开发人员。他们必须寻找解决方法来执行他们的任务。
在这里,我们找到了问题的根源。解决它的三个组成部分和可能的途径:
- 时钟频率增加。在没有昂贵的冷却系统的情况下,目前的科学状态几乎无法允许将时钟频率提高到 5 GHz 以上。研究正在进行中,但结果不会很快出来。
- 运算核心的倍增和专业化。仅通过增加核心来提高处理器的性能,如果后者之间的相互通信基于总线架构及其衍生产品,则在每个晶体 16 个核心的点上会耗尽自己。
- 编程中的并行方法。并行编程的方法相当成熟,但是:
首先,并非每个任务都可以并行化。有很多问题需要依次解决;
其次,这里的一切都取决于程序员:他们的技能和工具。芯片制造商无能为力,尽管英特尔,超微, 和高通– 所有领先的供应商 – 尽其所能提供帮助。
最近,在寻找第二条路线的解决方案时,工程师们提出了实现基于数据包的交换/路由系统的想法(如现代通信系统中所见——TCP/IP、蜂窝网络、Wi-Fi、蓝牙等)。通过路由数据包在处理器块之间建立关系的整个想法称为片上网络(NoC)。
3D-NoC
上面介绍的是目前常用的2D-NoC架构,其实NoC还有一种3D架构,如下图所示:
这种架构和2D-NoC差不多,只不过路由部分复杂一些。
FPGA在NoC架构上的应用
FPGA从Xilinx公司1985年推出世界首款FPGA芯片“XC2064”经历过数十年发展,目前在各大领域大放异彩,下面是其大致的发展历程。
其实目前FPGA厂家都在大容量FPGA设计上费尽心力,其中NoC硬件架构也是其探索的一个方向。
Achronix Speedster7t FPGA
2020年上半年,Achronix 公司推出了基于台积电(TSMC)的 7nm FinFET 工艺的 Speedster7t FPGA 器件,该器件包含了革命性的新型二维片上网络(2D-NoC)。该2D-NoC 如同在 FPGA 可编程逻辑结构上运行的高速公路网络一样,为 FPGA 外部高速接口和内部可编程逻辑的数据传输提供了超高带宽(~27Tbps)。
图 1 Speedster 7t FPGA 结构图
据介绍,该FPGA不仅在架构上使用NoC,通道上也是使用了标准AXi通道(每一行或每一列都有两个 256 位的、单向的、行业标准的 AXI 通道),该通道可以在每个方向上以 512Gbps(256bit x 2GHz)的传输速率运行。
下面以三重数据加密解密算法(3DES)为例介绍一下NoC架构的特点,在传统FPGA上实现该算法后端布局如下:
3DES 设计(没有用 NoC)后端布局布线图从上图中可以看出来很多问题:
- 总线之间有交叉
这会大大增加布局布线时间。
- 加密和解密模块中间的连线太长,导致延时很长。
该问题可以通过增加缓存寄存器或者流水操作解决,但是这样带来的问题:一是性能受限;二是总线宽度过大,增加相关寄存器占用的寄存器资源很大。
这种问题,应该很多厂商都会遇到,似乎使用NoC该问题就可以迎刃而解,下图是使用2D-NoC的综合结果。
利用 2D NoC 进行内部逻辑互连在 NoC 的每个交叉点上都有两个网络接入点(NAP),用户只要简单地通过例化原语或者宏定义就可以将自己的逻辑接入到 NoC 并进行互连。
网络接入点 NAP例化 NAP 宏定义示例通过例化等操作,下图是后端布局布线完成后的示意图:
3DES 设计(利用 NoC)后端布局布线图通过上面的操作,不仅仅简化了用户的设计(优化时间),而且性能也提高了(理论上,从260MHz 提高到了 750MHz),后续的优化也就简化了很多。
这次Achronix 新一代的 Speedster7t FPGA 来简化和加速用户的设计,不仅仅是一种尝试,更能看出未来在大型设计时,NoC总线在FPGA中的应用。
如果说Achronix是在国内比较“小众”的公司,那么Xilinx在NoC方向上的使用更能说明问题。
Xilinx AI 引擎技术(AIE)
这部分参考:
❝https://china.xilinx.com/content/dam/xilinx/support/documentation/architecture-manuals/am009-versal-ai-engine.pdf
❝https://china.xilinx.com/content/dam/xilinx/support/documentation/white_papers/c_wp506-ai-engine.pdf
❝https://china.xilinx.com/content/dam/xilinx/support/documentation/application_notes/xapp1352-beamforming-ai-engine.pdf
❝https://china.xilinx.com/content/dam/xilinx/support/documentation/white_papers/EW2020-Deep-Learning-Inference-AICore.pdf
详细的信息在上面链接文档中都有介绍,下面简单介绍一下:
在Versal ACAP系列中,Xilinx(现在叫AMD了)FPGA中集成了AI 引擎,如下图中AI Engine(下简称AIE)。
为了这下AIE高效有序的工作,AMD采用了“ 2D 阵列架构”的方式,下图就是示意图:
这就是我们说的2D-NoC架构,官网上详细介绍了这种架构的优点:
同时,AMD的架构也是和上面介绍的Achronix架构一样,采用NoC架构和AXI总线,下图就是AXI总线在Versal ACAP中的示意图:
整个系统其实比我描述的要复杂的多,这里只是简单介绍一下,详细的设计可以参考上面的链接。
通过这两FPGA厂家的一些架构分析,我们也能简单看到一些未来FPGA的微架构可能会大量采用NoC硬件架构以适应更加复杂的应用,尤其现在FPGA对于一些嵌入式内核、AI内核的需求越来越大。
NoC在FPGA应用上的发展前景
目前,NoC 应用的主要领域仍然是超级计算机的创造(例如,基于 260 核的神威中国江南计算实验室公司的处理器系列)。然而,所有领先的芯片制造商已经在桌面和服务器芯片的开发中实现了单独的 NoC 元素。例如,Infinity Fabric来自 AMD - 最新 Zen (CPU) 和 Vega (GPU) 处理器系列的基础 - 或 AMD 和英特尔的联合开发:Kaby Lake-G。
至于在FPGA应用上,我们也能看出来:
NoC 为 FPGA 设计提供了几项重要优势,包括:
- 提高设计的性能。
减少逻辑资源闲置,在高资源占用设计中降低布局布线拥塞的风险。
-
减小功耗。
-
简化逻辑设计,由 NoC 去替代传统的逻辑去做高速接口和总线管理。
-
实现真正的模块化设计。
目前短期内,这项技术还需要解决自己的一些短板,比如虚拟旁路和低摆幅信号。这些技术可以进一步降低功耗并最大限度地减少传输延迟,从而可以根据需要扩展系统规模并增加内核数量(而不影响其功能)。
最后在介绍几个NoC 系统的领先开发商:
最著名的 NoC 系统和元件开发商是NetSpeed Systems(http://netspeedsystems.com/), Arteris, Sonics和Aims Technology Inc。他们为高通和英特尔等世界知名芯片供应商创建理论和硬件解决方案。
以上就是本人的个人见解,如有不同见解,欢迎后台留言指正。