インテル® HLS コンパイラー: ユーザーガイド

ID 683456
日付 12/22/2017
Public
ドキュメント目次

6.3.2. 明示的な比較およびエンキュー関数コール

エンキュー関数は、コンポオーネントがコンポーネントのイニシエーション・インターバル (II) が 1 でパイプライン化できる場合、各サイクルを開始するためにコンポーネントの新しい呼び出しが可能です。コンポーネント II が 1 より大きい場合、コンポーネント呼び出しは II サイクル後ごとに開始します。

図 2 ( 図 -2 ) はコンポーネントdutでの信号波形を示します。この例の抜粋したコードで示すように、テストベンチにはエンキュー関数コールが含まれていません。

#include "HLS/hls.h"
#include <stdio.h>

component int dut(int a, int b) {
    return a*b;
}

int main (void) {

    int x1, x2, x3;
    x1 = dut(1, 2);
    x2 = dut(3, 4);
    x3 = dut(5, 6);

    printf("x1 = %d, x2 = %d, x3 = %d\n", x1, x2, x3);

    return 0;
}
図 2. エンキュー関数コールを使用しないコンポーネント dut での信号波形
図 3 ( 図 -3 ) はコンポーネントdutでの信号波形を示します。この例の抜粋したコードで示すように、テストベンチにはエンキュー関数コールが含まれています。コンポーネントがどのように各クロックサイクルで新しいデータを渡すのかを前の波形と比較します。
#include "HLS/hls.h"
      #include <stdio.h>
      
      component int dut(int a, int b) {
      return a*b;
      }
      
      int main (void) {
      
      int x1, x2, x3;
      ihs_hls_enqueue(&x1, &dut, 1, 2);
      ihs_hls_enqueue(&x2, &dut, 3, 4);
      ihs_hls_enqueue(&x3, &dut, 5, 6);
      
      ihs_hls_component_run_all(&dut);
      
      printf("x1 = %d, x2 = %d, x3 = %d\n", x1, x2, x3);
      
      return 0;
      }
図 3. エンキュー関数コールを使用したコンポーネント dut での信号波形