UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

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
作成日 02/01/2012
最終更新日 10/10/2013
ステータス アクティブ
タイプ ソリューション センター
ツール
  • AutoESL - 2010.b
  • AutoESL - 2011.1
  • AutoESL - 2011.3
  • More
  • AutoESL - 2011.4
  • AutoESL
  • Vivado Design Suite - 2012.2
  • Less