8.2isp2-EDK / XPS- DMA自检示例不适用于使用创建/导入外设向导生成的PLB / OPB基于IPIF的自定义IP-Altera-Intel社区-FPGA CPLD-ChipDebug

8.2isp2-EDK / XPS- DMA自检示例不适用于使用创建/导入外设向导生成的PLB / OPB基于IPIF的自定义IP

问题描述

我在EDK 8.2i SP#2中使用创建/导入外设向导创建了一个支持DMA的自定义IP(my_custom_ip)。

当我运行XPS向导创建的自测试示例时,DMA自检代码失败。

PLB和OPB基于IPIF的自定义IP都会出现此问题。

解决/修复方法

问题出在“my_custom_ip_selftest.c”中,与简单DMA源和目标缓冲区的缓冲区分配有关。

通常,这些缓冲区应与总线大小对齐(即,对于PLB IPIF,它们应与64位对齐)。但是,在代码中,它们不会被强制为64位对齐,而是留给编译器在编译时分配它们。

要解决基于PLB IPIF的IP的问题,应使用Compiler属性对这些缓冲区进行64位对齐。

以下代码由向导在“my_custom_ip_selftest.c”中生成:

static Xuint8 SrcBuffer [DMA_TEST_HW_SELFTEST_BUFSIZE]; / *源缓冲区* /

static Xuint8 DstBuffer [DMA_TEST_HW_SELFTEST_BUFSIZE]; / *目标缓冲区* /

应该使用Compiler属性,如下所示,强制缓冲区为64位对齐:

static Xuint8 __attribute __((aligned(64)))SrcBuffer [DMA_TEST_HW_SELFTEST_BUFSIZE]; / *源缓冲区* /

static Xuint8 __attribute __((aligned(64)))DstBuffer [DMA_TEST_HW_SELFTEST_BUFSIZE]; / *目标缓冲区* /

对于基于OPB IPIF的自定义IP,必须使用相同的方法将对齐强制为32位:

static Xuint8 __attribute __((aligned(32)))SrcBuffer [DMA_TEST_HW_SELFTEST_BUFSIZE]; / *源缓冲区* /

static Xuint8 __attribute __((aligned(32)))DstBuffer [DMA_TEST_HW_SELFTEST_BUFSIZE]; / *目标缓冲区* /

此问题将在EDK工具的未来版本中修复。

请登录后发表评论

    没有回复内容