【问题标题】:What is wrong with the following code in vivado hls?vivado hls中的以下代码有什么问题?
【发布时间】:2021-01-03 20:07:46
【问题描述】:

下面的代码应该从 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。

有人可以指出我缺少什么吗?

【问题讨论】:

    标签: vivado vivado-hls


    【解决方案1】:

    代码对我来说看起来不错,它应该可以流畅地运行。但是,如果您说仿真和协同仿真都通过了,那么您的测试代码或硬件实现都可能有问题。 此外,对于 C++ 版本的代码,您应该使用在 ap_int.h 中定义的 ap_uint&lt;N&gt; 类型,而不是 ap_cint.h

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2011-02-28
      相关资源
      最近更新 更多