为片上系统 SoC 添加缓存
扫描二维码
随时随地手机看文章
当今片上系统 (SoC) 的设计人员对中央处理器 (CPU) 中处理器核心的缓存非常熟悉。对主外部存储器的读取或写入访问可能非常耗时,可能需要数百个 CPU 时钟周期,同时处理器处于空闲状态。尽管单个存储器访问所消耗的功率很小,但当每秒执行数十亿次事务时,功率就会迅速增加。
举例来说,假设每笔交易为 64 字节,以 1.5 GHz 运行的单个 256 位宽数据通道每秒将产生约 7.5 亿笔交易。多个数据通道通常会并行活动,执行片外 DRAM 访问。
当程序访问一个内存位置的数据时,它通常需要访问附近的其他位置。此外,程序通常具有循环和嵌套循环,在这些循环中,程序在执行下一个任务之前对同一数据块执行多个操作。
了解 SoC 中的缓存内存
鉴于内存访问耗时、功耗高以及程序中典型的数据访问和处理模式等挑战,采取战略性方法至关重要。解决方案是在靠近处理器的地方实现小型、快速的缓存。
当程序从主内存请求新的数据时,系统会自动检索一个数据块并将其加载到缓存中。随后,处理器会对本地存储的数据执行多项操作。最终,这些操作产生的新数据被复制回主内存。
第一级缓存(即 1 级或 L1 缓存)之后,随着时间的推移,陆续添加了 L2 和 L3 缓存。每个后续级别都比前一个级别更大且更慢,但比访问主内存要快得多(图 1)。
阿特里斯
1. 多个缓存存储器通常与一个或多个 CPU 一起使用。
另一个趋势是使用具有不同缓存配置的 CPU 集群。例如,在四核集群中,通常每个核心都有自己的 L1 缓存,成对的核心共享一个 L2 缓存,所有四个核心共享一个 L3 缓存(如图 1b 所示)。或者,每个核心可能都有专用的 L1 和 L2 缓存,而所有四个核心只共享 L3 缓存。
关于缓存的一个考虑因素是管理共享数据的多个副本。例如,在图 1b所示的场景中,假设 CPU0 从主内存中检索并修改数据,然后将更改后的版本存储在其 L1 缓存中。现在,假设 CPU3 希望访问相同的数据。它应该使用哪个副本——主内存中的原始副本还是 CPU0 的 L1 缓存中的修改副本?
这种困境导致了对缓存一致性的需求,这意味着当一个数据副本发生更改时,必须修改所有其他副本。这可以通过更新其他缓存中的数据或将其他缓存中的副本标记为无效来实现。
缓存一致性可以通过软件进行管理。但是,现在更常用的是使用特殊硬件来确保图 1a中所示的缓存和图 1b中所示的集群内能够高效、透明地实现这一点。
现代 SoC 除了 CPU 之外,还包含大量知识产权 (IP) 块。一些 IP 可能配备自己的缓存,这些缓存可能需要或不需要与 CPU 保持缓存一致性。
如果任何 IP 块都不需要与 CPU 保持一致,则可以使用 AMBA AXI 协议采用非一致性片上网络 (NoC)互连。或者,如果 SoC 有多个需要保持群集间一致性的 CPU 群集,或者带有缓存的 IP 需要保持一致性,则可以使用 AMBA ACE 或更现代的 AMBA CHI 协议采用缓存一致性 NoC 互连。
还有第三类一致性,称为 IO 一致性,其中设备可能希望参与访问共享内存,但不支持完全一致性。这种 IP 的一个例子是 GPU 以与系统其余部分一致的方式访问共享内存,但不能直接窥探 CPU 的缓存。IO 一致性设备依靠一致性 NoC 来代表它们维护数据一致性。
如何利用缓存提高 SoC 性能
其他 IP 功能(例如硬件加速器 IP)也可能受益于使用类似上述 CPU 示例的缓存。这些以 IP 为中心的缓存通常不需要与 CPU 保持一致性;但是,它们可以使用非一致性 NoC 互连进行连接。
或者,添加暂存器 (SRAM) 可能会使某些 IP 受益。这种高速存储器直接连接到 IP,用于临时存储少量数据,以便快速访问和检索。
设计缓存或暂存器是一项复杂的任务,即使该缓存不需要与其他缓存保持一致性。开发人员希望花费宝贵的时间来构建 SoC 并设计其专有 IP 功能,以使其创作与竞争产品区分开来。他们通常试图避免投入资源来开发缓存。
实现 CodaCache
一种解决方案是使用Arteris的 CodaCache 。它是一种可配置的独立非一致性缓存 IP。CodaCache 在使用 16 纳米工艺技术实现的 SoC 上以高达 1.2 GHz 的速度运行,可与 AMBA AXI 互操作,每个 AXI 端口提供高达 8 MB 的容量。CodaCache 提供可配置的 1 到 16 路关联性,具有路分区、缓存刷新、纠错码保护等高级功能,并支持 ISO 26262 功能安全应用。
有许多潜在的实现场景,其中两种如图2所示。第一种是向单个 IP 添加专用的 CodaCache,从而提高 IP 性能(图 2a)。第二种是添加 CodaCache 作为最后一级缓存,从而提高 SoC 性能(图 2b)。
阿特里斯
2. 最后级别的 CodaCache 实现位于互连和缓存与主存储器之间。
CodaCache 还可用于各种场景,包括用作暂存器。以这种方式使用缓存可带来诸多好处,例如增强性能,其特点是提高数据吞吐量和减少延迟。它还通过降低功耗和发热量来提高能源效率。此外,它还提供设计灵活性和可扩展性等好处。