0
4

1 回答 1

0
  • ap_int.h 用于 C++
  • ap_cint.h 仅适用于 C
  • 根据 ug902 - High Level Synthesis C Libraries,您可以将任意整数精度类型与 C 或 C++ 一起使用。(参见第 208 页。)

基于 C 的 10 位 int 示例:

#include <ap_cint.h>

int10 foo; 

基于 C++ 的 10 位 int 示例:

#include <ap_int.h>

ap_int<10> foo;

重写您的示例以在 C 中使用大小为 10 位的任意精度整数数据类型,看起来像这样,它在 HLS 中很好地符合 :)

#include <ap_cint.h>

#define ROWS 102  //k
#define COLS 204

typedef int10 arbitraryInt;

void GeneratorM(int msg[ROWS], int dout[COLS])
{
#pragma HLS INTERFACE s_axilite port=msg bundle=a
#pragma HLS INTERFACE s_axilite port=dout bundle=a
#pragma HLS INTERFACE s_axilite port=return bundle=a
arbitraryInt Generator[ROWS][COLS]= {0};
arbitraryInt G[ROWS][COLS] = {0};
arbitraryInt i,j,k,r,c,n;
k = ROWS;
r = ROWS;
c = COLS;
n = COLS;
static arbitraryInt H[ROWS][COLS];
arbitraryInt Codeword[COLS]= {0};
arbitraryInt s = 0;
for (i=0;i<k;i++)
 for(j=0;j<k;j++)
    if(i == j)
    G[i][j] = 1;

for(i=0;i<r;i++)
 for(j=0;j<k;j++)
    G[j][k+i] = H[i][j];

for(i=0;i<r;i++)
 {
  for(j=0;j<c;j++)
    Generator[i][j]=G[i][j];
 }

for(j=0;j<n;j++)
{
 for(i=0;i<k;i++)
 {
    s = s + msg[i]*Generator[i][j];
 }
  Codeword[j] = s % 2;
  s = 0;
}
 for(i=0;i<n;i++)
 {
 dout[i]=Codeword[i];
 }
}
于 2018-04-19T12:46:20.103 回答