インテル® 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 での信号波形