AN 886: Intel® Agilex™ SoC器件设计指南

ID 683634
日期 1/22/2021
Public
文档目录

5.1.8.2.4. 从FPGA进行可高速缓存和不可高速缓存数据访问的实例

实例1:FPGA直接从HPS EMIF读取非高速缓存一致性数据

本实例中,FPGA需要访问HPS EMIF中存储的数据。为了使FPGA访问到的数据副本与MPU能够访问的数据副本相同,如果L1数据高速缓存和L2高速缓存中已具有一个数据副本,则需要将他们刷新。一旦HPS EMIF中包含数据的最新副本,FPGA的最佳数据访问路径是FPGA主控通过直接针对SDRAM的FPGA-to-SoC桥接来读取数据。

图 9. FPGA读取Non-Cache Coherent数据

可根据系统要求设置桥接宽度来优化FPGA-to-SoC桥接,以最大化读取吞吐量。Intel建议使用FPGA中可突发的主控读取SDRAM中的数据,并且能够发布4拍(beat)或更长的突发长度。

实例2:FPGA将Non-Cache Coherent数据直接写入HPS EMIF

本实列中HPS MPU需要访问源自FPGA内部的数据。数据写入后,为了MPU能访问到一致的数据,软件需要先刷新或者让高速缓存行无效才开始传输,从而确保在写入SDRAM后,其包含的是最新数据。如果高速缓存操作执行失败,会导致一个或多个cache line最终放弃覆盖由FPGA主控写入的数据。

图 10. FPGA写入Non-Cache Coherent数据
注: 如同“实例1:FPGA直接从HPS EMIF读取非高速缓存一致性数据”,可根据系统要求设置桥接宽度优化FPGA-to-SoC桥接,以最大化写入吞吐量。

实例3:FPGA从HPS读取高速缓存一致性数据

本实例中,FPGA需要访问源自HPS的数据。被HPS中的MPU最近访问的数据可能还保留在高速缓存中,因而其可能正是FPGA需要访问的最佳高速缓存数据。为避免因软件必须清除dirty cache lines而产生的开销,可通过FPGA-to-SoC桥接执行FPGA高速缓存一致性读取。这样被读取缓冲区的尺寸就需要相对小一些。否则,L2高速缓存可能会在大多数传输中阻碍从SDRAM读取数据。而对于较大的缓冲器传输,让FPGA通过FPGA-to-SoC桥接直接访问SDRAM来读取数据会更加适合,如“实例1:FPGA直接从HPS EMIF读取非高速缓存一致性数据”所示。

指南:执行针对FPGA-to-SoC桥接的全面访问。

FPGA主控必须从FPGA-to-SoC桥接读取并使用ACE-Lite协议的高速缓存扩展信令来处理可高速缓存的事务。有关使用ACE-Lite协议信令扩展进行高速缓存一致性访问的更多信息,请参阅 Intel® Agilex™ Hard Processor System Technical Reference Manual中的Cache Coherency Unit部分。

图 11. FPGA读取Cache Coherent数据

指南:执行针对FPGA-to-SoC桥接的64字节对齐高速缓存访问。

已优化HPS的CCU以用于cache line(64字节 )同等大小的事务。因此,应尝试将数据对齐到64字节边界,并确保数据宽度适配后,进入512-bit FPGA-to-SoC桥接的突发长度实现最大化。例如,128-bit FPGA主控应将数据64字节对齐并执行突发长度为4的完整128-bit (16-byte)访问。

指南:每个可高速缓存事务访问64个字节。

请确保每个突发事务访问64个字节。每个事务必须从64-byte边界开始。

表 27.  64字节对齐的突发长度
FPGA主接口宽度(比特) 访问大小(字节) 突发长度
32 4 16
64 8 8
128 16 4
256 32 2
512 64 1

实例4:FPGA将高速缓存一致性数据写入HPS

本实例中,HPS MPU需要访问源自FPGA的数据。与MPU共享小型数据模块的最有效机制是让FPGA中的逻辑来执行对HPS的高速缓存写入。并且重要的是,要写入HPS的数据量应采用相对较小块的形式,因为大块数据写入会引起L2 cache抖动,进而导致大部分传输中的高速缓存均被写入SDRAM。对于大型缓冲区传输,则更适合由FPGA将数据直接写入针对SDRAM的FPGA-to-SoC桥接,(如实例2所示)。

指南:执行针对FPGA-to-SoC桥接的全面访问。

对于可高速缓存的事务,FPGA主控必须写入FPGA-to-SoC桥接,并利用ACE-Lite protocol协议的高速缓存扩展信令。有关使用ACE-Lite协议信令扩展进行高速缓存一致性访问的更多信息,请参阅 Intel® Agilex™ Hard Processor System Technical Reference Manual中的Cache Coherency Unit部分。

图 12. FPGA写入Cache Coherent数据有关缩写,请参阅HPS存储器映射接口概述中的图示。

指南:启用L2 ECC时,请确保对FPGA-to-SoC桥接的高速缓存访问对齐到8-byte边界。

如果在L2 cache中启用纠错码(ECC),则还必须确保每个8-byte的数据组都已完全写入。由于L2 cache在64-bit边界上执行ECC操作,所以在执行高速缓存访问时,必须始终将访问对齐到8-byte边界,并一次写入8个数据通路(lane)。若不遵守这些规则将会导致无法修复的双比特错误。

如论是否使能或禁用ECC,都能实现64字节cache事务最佳性能。有关64字节cache事务的更多信息,请参阅“实例3:FPGA从HPS读取Cache Coherent数据"部分中的指南:每个高速缓存事务访问64个字节

指南:启用L2 ECC时,确保对FPGA-to-SoC桥接的高速缓存访问中存在已使能8个写选通的组。

  • 从32-bit FPGA主控处的FPGA-to-SoC访问,突发长度必须为2,4,8或16,同时启用所有写字节选通。
  • 从64-bit FPGA主控处的FPGA-to-SoC访问,必须启用所有写字节选通。
  • 从128-bit FPGA 主控处的FPGA-to-SoC访问,就必须使能高8或低8(或两者)写字节选通。