簡體   English   中英

VIVADO HLS:如何為2D數組聲明任意精度(或位精度)的整數數據類型?

[英]VIVADO HLS:How to declare arbitrary precision (or bit-accurate) integer data types for 2D array?

我正在Vivado HLS中使用較大尺寸的矩陣。 作為常規的“ int”,其占用大量內存空間並減慢了硬件速度。

因此,為了獲得更好的優化和性能,最好使用任意精度(或位精度)的整數數據類型。 我不清楚VIVADO用戶指南。 但是,我不知道如何為二維數組初始化“ ap_int.h”或“ ap_cin.h”。 誰能告訴我如何為以下源代碼應用“ ap_int.h”或“ ap_cin.h”

#define ROWS 102  //k
#define COLS 204
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
int Generator[ROWS][COLS]= {0};
int G[ROWS][COLS] = {0};
int i,j,k,r,c,n;
k = ROWS;
r = ROWS;
c = COLS;
n = COLS;
static int H[ROWS][COLS];
int Codeword[COLS]= {0};
int 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];
 }
}
  • ap_int.h適用於C ++
  • ap_cint.h僅適用於C
  • 根據ug902-高級綜合C庫,可以將任意整數精度類型與C或C ++一起使用。 (請參閱第208頁。)

基於C的10位int示例:

#include <ap_cint.h>

int10 foo; 

基於C ++的10位整數示例:

#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];
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM