0

我正在使用 Vitis HLS 为我的项目运行 C++ 模拟。我的程序是为信号处理中的似然计算进行矩阵计算。我写了我的矩阵库,因为它应该是静态数组的定点。Vitis HLS 编译器(MingGW 64 位)一直在编译代码,这很奇怪。下面是导致我的程序问题的代码。

    for(int j =0; j < 2048;j++)
    {
        getColMat_L2S(particle,j,&temp_X);
        printf("sth\n");
//      show_mat(particle);
        Mat_S temp_X4 = ObsJacobian(&temp_X,index,&msmtinfo);
//      showmat_S(&temp_X2);
        Mat_S temp_X5 = GISobs_model(&temp_X,index,&msmtinfo);
//      showmat_S(&temp_X5);
//      showmat_S(&msmtinfo.z);
        FP::fixed pzx = GISPzx(&msmtinfo,&Pxx_,&temp_X4,&temp_X5);
        pzx_du = pzx;
        printf("%f_%d\t",pzx_du,j);
        new_wt.entries[j] = wt->entries[j]*pzx;
    }
    show_mat(&new_wt);
    return new_wt;

目前,我有 2 种数据类型,Mat并且Mat_S. Mat是一个13x2048定点元素数组(32 位),Mat_S是一个13x13定点元素数组。我的大部分函数都用于Mat_S计算,除了getColMat_L2S,它返回一个选定的输入列Mat particles并将其保存到Mat_S temp_X.

我很确定我的函数 , getColMat_L2S, ObsJacobian,GISobs_modelGISPzx, 都经过了很好的测试,它们应该没有问题。我有我的功能show_matshowmat_S用于打印出矩阵内的所有元素。

当我在循环内部评论所有内容时show_matshowmat_S编译器在它应该在循环结束时打印一些值时花了很长时间进行编译。取消注释其中一个show_matshowmat_S功能后。这次模拟打印矩阵值和最终值。但是,它最多只能打印超过 2048 个值的 118 个。然后模拟再次永远运行(我已经测试过,即使在 1 小时后,也没有发生任何事情!)

show_mat当我评论和取消评论或showmat_S函数时,我确实使用调试器检查是否有任何事情发生。但是,在 10 次迭代期间,它在这两种情况下都运行良好。唯一的问题是它不会在控制台上打印任何内容。我认为这可能是 Vitis HLS 调试器的错误。

你对这个错误可能来自哪里有任何想法吗?这一刻我非常绝望。

4

0 回答 0