2

私はザイリンクス HLS の初心者です。チュートリアル ug871-vivado-high-level-synthesis-tutorial.pdf (77 ページ) に従っています。

コードは

#define N 32

void array_io (dout_t d_o[N], din_t d_i[N])     
{   
   //..do something
}

合成後、次のようなレポートを受け取りました

ここに画像の説明を入力

アドレス ポートの幅が、アクセスする必要があるアドレスの数 (32 アドレスの場合は 5 ビット) に自動的に一致するように設定されていることに混乱していますか?

助けてください。

4

2 に答える 2

0

作成した関数を合成するときも、変数を格納するためのいくつかのレジスタが必要です。これは、入力として入力したアドレスが、d_o または d_in で同時に書き込んでいるデータの 1 つであることを意味します。

あなたの場合、N=32 の場合、32 個の異なる変数があります(入力と出力の両方)。32 の異なる変数に対処するには、32 の異なるビットの組み合わせが必要です (あいまいさなしに特定の変数を指すため)。5 ビットの場合、アドレスの 2^5=32 の異なる組み合わせがあります:すべてのデータをアドレス指定する最小ビット数です。たとえば、32 の場合ここに画像の説明を入力

ビットのアドレス番号は、データのサイズとは無関係です (つまり、int、float、char、short、double、任意精度などの可能性があります)。

于 2016-07-12T10:56:01.643 に答える
0

UG871 を見ると、配列のサイズは 0 ~ 16 サンプルのように見えるため、すべての値にアクセスするには 32 個のアドレスが必要です (図 69 を参照)。数 N はどこかで 32 未満 (または正確に 16) に制限されていると思います。これは、Vivado がこの制限を認識しており、必要な数のアドレス ビットのみを生成することを意味します。ほとんどの合成ツールは、サイズの制約をチェックし、不要なコードを最適化して取り除きます。

于 2015-02-12T10:05:59.897 に答える