SDAccel shell 中同时处理的DDR请求数量有限制。

0

【以下的问题经过翻译处理】 你好,

我正在为SDAccel 2019.1开发一个RTL内核,它对所有DDR4通道执行单个读请求(无爆发)。由于我得到的带宽要比预期低得多(在所有四个通道的情况下,每个周期只有约0.7个内存请求),我开发了一个简单的内核,执行单个顺序访问以基准测试四个存储器通道的理想性能。令我惊讶的是,看起来通道0的性能与通道1、2和3不同,这与规格中所说的相矛盾:https://github.com/aws/aws-fpga/blob/master/hdk/docs/AWS_Shell_Interface_Specification.md#ddr4axi“注意:无论DRAM控制器位于CL还是Shell逻辑中,四个DRAM控制器之间没有性能或频率差异”。

尤其是:

*通道0的延迟在250 MHz时为80-140个周期,而其他通道为10-20个周期 *通道0只支持18个未完成的内存请求,而其他通道则限制为3

由于未完成的内存请求的最大数量在两种情况下都低于延迟,因此可以通过单个请求获得的最大带宽非常低,通道0约为理想带宽的19%,其他通道约为17%。

考虑到规格中说“DRAM接口使用Xilinx DDR-4接口控制器”,我预计接口的行为类似于MIG DDR3控制器,其中访问可以完全管道化,并且即使是 单个请求也可以实现接近理想带宽的接近100%。

如果DDR4控制器也是如此,那么我认为内核和MIG之间路径中的某些块的缓冲空间低于内存延迟。我尝试编辑由SDAccel生成的Vivado框图并且发现在内核和内存端口之间的一个名为"SDx Memory Subsystem"的块中存在一些AXI SmartConnects,但是是允许只读的。请问是否有什么方式可以编辑这些块,或者配置SDAccel,使其生成时没有会限制内存中兵法请求数量的缓冲空间

profile picture
专家
已提问 5 个月前14 查看次数
1 回答
0

【以下的回答经过翻译处理】 SDAccel平台针对大块数据传输进出DDR存储器进行了优化。当内核或主机请求非常短(1-4数据节拍)的访问时,我们预计内存带宽会下降。正如您指出的那样,这是往返延迟和命令流水线之间关系的直接结果。这就是为什么Xilinx建议内存访问接近每个访问的4kB AXI协议限制,如此文档链接中所述:https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/Chunk2020182740.html#ghz1504034325224。最好的方法是增加您内核的突发长度,按需添加内部BRAM缓冲区,以支持非连续数据访问模式。尝试增加命令流水线可能在一定程度上有所帮助,但对单个或4节拍突发访问这样短的访问不会有效利用AXI带宽,因此会限制整体带宽。

此外,发布的结果表明SDAccel和HDK设计方法之间的延迟存在显着差异。请记住,SDAccel解决方案始终提供从主机PCIe桥到每个DDR存储器的路径,导致内核到存储器的流量也通过AXI互连开关。其中一些延迟周期在内核到存储器路径中存在的时钟域交叉中消耗。您可以控制内核时钟来可能消除这些CDC周期。

如果您仍然遇到问题或有其他问题,请告诉我们。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则