下面的代码应该从DDR中读取一个值,将其递减,将结果写回同一地址,然后读取下一个值。重复256次。
相反,在第一次运行时,它会递减前两个值(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。
有人能指出我遗漏了什么吗?
代码对我来说很好,应该可以流畅地工作。然而,如果你说模拟和联合模拟都通过了,那么测试代码或硬件实现可能会出现问题。此外,对于C++版本的代码,您应该使用ap_int.h
中定义的ap_uint<N>
类型,而不是ap_cint.h
。