仅对英特尔可见 — GUID: zli1557328324421
Ixiasoft
仅对英特尔可见 — GUID: zli1557328324421
Ixiasoft
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桥接来读取数据。
可根据系统要求设置桥接宽度来优化FPGA-to-SoC桥接,以最大化读取吞吐量。Intel建议使用FPGA中可突发的主控读取SDRAM中的数据,并且能够发布4拍(beat)或更长的突发长度。
实例2:FPGA将Non-Cache Coherent数据直接写入HPS EMIF
本实列中HPS MPU需要访问源自FPGA内部的数据。数据写入后,为了MPU能访问到一致的数据,软件需要先刷新或者让高速缓存行无效才开始传输,从而确保在写入SDRAM后,其包含的是最新数据。如果高速缓存操作执行失败,会导致一个或多个cache line最终放弃覆盖由FPGA主控写入的数据。
实例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部分。
指南:执行针对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边界开始。
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部分。
指南:启用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(或两者)写字节选通。