AR# 46111

Vivado HLS - pragmas で #define を使用する方法

説明

ソースでハードコードされた値を使用しようとしていますが、意図どおりには機能しません。

/*Code begins*/
#include <hls_stream.h>
using namespace hls;
define STREAM_IN_DEPTH 8
void foo (stream<int> &InStream, stream<int> &OutStream) {

// Illegal pragma
#pragma HLS stream depth=STREAM_IN_DEPTH variable=InStream
// Legal pragma
#pragma HLS stream depth=8 variable=OutStream
/* Source Code */
}
/*Code ends*/

ソリューション

このソリューションは規格からのもので、C99 では Pragma 演算子が導入されています。#pragma は指示子なのでマクロが拡張すると使用できませんが、_Pragma は演算子なので、sizeof や defined のようにマクロに埋め込むことができます。

次の回避策を使用して #pragma で #define を使用できるはずです。

/*Code begins*/
#include <hls_stream.h>
using namespace hls;
#define PRAGMA_SUB(x) _Pragma (#x)
#define DO_PRAGMA(x) PRAGMA_SUB(x)
#define STREAM_IN_DEPTH 8
void foo (stream<int> &InStream, stream<int> &OutStream) {

// Legal pragmas
DO_PRAGMA(HLS stream depth=STREAM_IN_DEPTH variable=InStream)
#pragma HLS stream depth=8 variable=OutStream

/* Source Code */
}
/*Code ends*/
AR# 46111
日付 10/10/2013
ステータス アクティブ
種類 ソリューション センター
ツール 詳細 概略