下面的代码应该从 DDR 读取一个值,递减它,将结果写回相同的地址,然后读取下一个值,重复 256 次。
相反,在第一次运行时,它会递减前 2 个值(axi_ddr[0] 和 [1]),而在连续运行时,它只会递减第一个值(axi_ddr[0])。
#include "ap_cint.h"
#include <stdio.h>
#include "string.h"
void hls_test(volatile int256 axi_ddr[256], uint32 *axi_lite_status_control){
#pragma HLS INTERFACE s_axilite port=axi_lite_status_control register bundle=BUS_A
#pragma HLS INTERFACE s_axilite port=return bundle=BUS_A
#pragma HLS INTERFACE m_axi depth=256 port=axi_ddr bundle=DDR
int256 axi_ddr_reg;
int256 diff = 1;
uint9 i = 0;
if (*axi_lite_status_control == 1){
for(i = 0; i < 256; i++){
axi_ddr_reg = axi_ddr[i];
axi_ddr[i] = axi_ddr_reg -diff;
}
*axi_lite_status_control = 2;
}
}
仿真和协同仿真都按预期通过,并且无法找出导致问题的原因。
还尝试了 C++,但它以相同的行为结束。唯一不同的是,当我忘记为变量 diff 赋予初始值时,所有 256 个 DDR 位置的值都变为 0x0。
有人可以指出我错过了什么吗?