グローバル変数はコード内で自由に使用でき、完全に合成可能です。ただし、グローバル変数を最上位関数の引数として推論することはできませんが、RTL デザインのポートの引数として明示的に指定する必要があります。
次のコード例では、グローバル変数のデフォルトの合成ビヘイビアーが示され、3 つのグローバル変数 (idx
、Ain
、Aout
) が使用されています。この例では配列が使用されますが、Vitis HLS ではすべてのタイプのグローバル変数タイプがサポートされています。
- 値は配列
Ain
から読み出されます。 - 配列
Aint
はAin
からの値を変換してAout
に渡すために使用されます。 - 出力は配列
Aout
に書き込まれます。
重要: グローバル変数
Ain
および Aout
にアクセスするには、引数リストに明示的にリストされている必要があります。#include "top.h"
void top(const int idx, const int Ain[N], int Aout[Nhalf]) {
int Aint[N];
// Move elements in the input array
ILOOP: for (int i = 0; i < N; i++) {
int iadj = (i + idx) % N;
Aint[i] = Ain[i] + Ain[iadj];
} // end ILOOP
// sum the 1st and 2nd halves
OLOOP: for (int i = 0; i < Nhalf; i++) {
Aout[i] = (Aint[i] + Aint[Nhalf + i]);
} // end OLOOP
} // end top()