使用 NoC 可以大大简化 SoC的开发,但这在很大程度上取决于谁在开发NoC
除了最简单的产品以外,几乎所有的现代系统级芯片 (SoC) 设备都将利用片上网络 (NoC) 来实现其片上通信。有些人质疑是否有必要使用 NoC,或者采用更基本的方法是否能足够满足需要。
SoC中有什么?
SoC 是一种集成电路 (IC),它集成了计算机或其他电子系统的大部分或全部组件。SoC 由称为知识产权 (IP) 模块的多个功能单元组成。其中有许多模块将来自第三方供应商;剩下的部分 - 那些提供“秘密武器”,将此SoC与竞争产品区分开来 - 将由自己内部开发创建。
这些 IP 模块可以包括处理器内核,如微处理器单元 (MPU)、图形处理单元 (GPU) 和神经处理单元 (NPU)。除了各种类型的存储器 IP 外,其他 IP 模块还可以执行通信、实用程序、外设和加速功能。
总线、crossbar switch和NoC
每个 IP 块都表示在系统内存空间中的某个位置。术语“事务” (transaction) 是指从系统内存空间的地址中写入或读取数据字节的操作。为了使SoC发挥其魔力,IP块必须使用事务通过某种形式的互连来相互“交谈”。术语“启动器” (initiator) 和“目标” (target) 是指生成或响应事务的 IP 块。
1990年代SoC上使用的主要互连机制是总线 (bus)。高度简化的表示如图 1 所示。请注意,标记为“总线”的线路将包括多条实现数据总线、地址总线和相关控制信号的线路。
图1:简化的总线互连结构。
在许多早期的SoC设计中,只有一个中央处理器 (CPU) 形式的启动器IP块。当启动器在地址总线上放置一个地址时,所有的目标 IP 块都会看到它,其中一个会对自己说:“这是我”。当启动器随后发出读取命令时,或者当它将数据放在数据总线上并发出写命令时,相应的目标将做出响应。
有一些早期的 SoC 可能会使用多个启动器。例如,CPU 可能附带直接内存访问 (DMA) 功能,该功能可用于在不同内存区域和外围设备之间快速传输大型数据块。随着设计中启动器数量的增加,有必要实施某种形式的仲裁方案,允许它们协商总线的控制。
在 2000 年代初期,随着 SoC 设计变得越来越复杂 (包含越来越多的 IP 模块并采用多个启动器),使用基于 crossbar switch交叉开关的互连架构变得很普遍 (图 2)。同样,此图中的每一条线代表一条包含数据、地址和控制信号的多线总线。
图2:简化的 crossbar switch互连架构。
在这种情况下,任何启动器都可以与任何目标通信。当事务从启动器传递到目标并再次返回时,switch交叉开关对事务进行路由,并且多个事务可以随时在“进行中”。每个switch都具有缓冲事务的能力,因此如果许多事务同时到达,它可以决定哪个事务具有更高的优先级。
SoC 设计的规模和复杂性持续增长。大约在 1990 年代初期,SoC 可能只包含几十个 IP 模块,整个设备可能只包含 20,000 到 50,000 个逻辑门和寄存器。相比之下,如今,SoC 可以包含数百个 IP 模块,每个模块包含数十万甚至数百万个逻辑门和寄存器。
在同一时期,数据总线的宽度从8位增加到16位,32位,64位,甚至更高。事实上,目前数据传输的典型大小是 64 字节 (512 位) 缓存行,这很快就会导致路由拥塞问题。尽管硅芯片工艺的发展已经使晶体管缩小了几个数量级,但由于芯片上导线的宽度没有以同样的速度减小,这些问题变得更加严重。
为了解决这些问题,今天的设计人员采用了片上网络 (NoC) 的概念。图 3 是一个简单的 NoC 示例。在这种情况下,事务就由传递的信息包承担。每个数据包包含一个反映目标地址的标头和一个包含数据、指令、请求类型等的正文。
图3:简化的片上网络(NoC)互连架构。
多个信息包可以在任何特定时间“传输”,并且switch再次具有缓冲事务并确定事务优先级的能力。由于每个启动器不需要能够与每个目标通信,这可以反映在架构中,从而进一步降低了互连要求。
使用成品还是“自己动手”?
从一个角度来看,使用 NoC 极大地简化了 SoC 的设计,但这在很大程度上取决于谁在开发 NoC。术语“套接字” (socket) 是指IP块与NoC之间的物理接口 (例如,数据宽度) 和通信协议。SoC行业已经定义并采用了几种socket协议 (OCP,APB,AHB,AXI,STBus,DTL等)。
除了不同的数据宽度外,同一设计中的IP模块可能以不同的频率计时。由于 SoC 设计可能涉及数百个 IP 块,其中许多来自其他第三方供应商,因此 IP 可能使用不同的socket协议。为了适应这种多样性,可能需要在启动器和目标socket之间转换事务。
支持多个 SoC 项目的内部 NoC 需要多个维度的可配置性和灵活性。因此,从头开始开发 NoC 可能与设计 SoC 的其余部分一样复杂和耗时。此外,开发人员现在有两件事需要验证和调试 - NoC和设计的其余部分。
解决措施是使用现成的NoC解决方案,例如 Arteris的FlexNoC。在这种情况下,FlexNoC直观的界面使设计人员能够识别构成架构的IP模块以及每个模块的socket特性 (宽度、协议、频率等)。开发人员还可以指定哪些启动器需要与哪些目标通信。此时,生成NoC实际上是一个“按钮”操作。
SoC 到底有多复杂?
回到SoC设计何时需要片上网络的问题。直觉的答案可能是较小的设计可能被豁免。但是,在最近与Semico Research的Rich Wawrzyniak的讨论中,他证实我们已经在客户那里看到的情况是:即使在工业和物联网领域的较小设计中,用户也经常面临数十到数百个必须组装和协调的IP块。
如图 4 所示,Semico 定义了四类 SoC。其中三种 - 具有100-200个离散模块和1+互连的基本SoC,具有200-275个模块和4+复杂互连的特定价值多核SoC,以及具有>275模块和5+复杂互连的高性能SoC - 是NoC自动化的明确靶心目标。但是除此之外,即使是最简单的商用控制器,设计人员也要面临着10到100个需要交互的离散模块。
对于较小的设计,工程师倾向于“自己做NoC”。但通常情况下,他们很快就会意识到:他们应该打电话给Arteris来利用NoC自动化。
图4:Semico根据复杂性将SoC分为四类。
审核编辑:刘清
-
soc
+关注
关注
38文章
4165浏览量
218265 -
片上网络
+关注
关注
0文章
33浏览量
11808 -
OCP
+关注
关注
0文章
79浏览量
16431 -
NoC
+关注
关注
0文章
38浏览量
11736
原文标题:我的SoC设计何时需要NoC ?
文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论