DATAFLOW および DEPENDENCE の検証 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

C/RTL 協調シミュレーションでは、DATAFLOW および DEPENDENCE 指示子が自動的に検証されます。

DATAFLOW 指示子を使用してタスクをパイプライン処理すると、タスク間のデータフローを円滑にするため、タスク間にチャネルが挿入されます。データフロー設定 に示すように、通常チャネルは FIFO を使用してインプリメントされ、FIFO の深さは STREAM 指示子または syn.dataflow.fifo_depth コンフィギュレーション コマンドで指定されます。

FIFO の深さが小さすぎると、RTL シミュレーションが停止することがあります。たとえば、FIFO の深さ 2 に指定されている場合、コンシューマー タスクでデータ値が読み出される前にプロデューサー タスクが 3 つの値を書き込むと、FIFO がプロデューサーをブロックします。協調シミュレーションのデッドロック検出 に説明されているように、状況によってはこれによりデザイン全体が停止することがあります。

この場合、C/RTL 協調シミュレーションにより、DATAFLOW 領域のチャネルにより RTL シミュレーションが停止したことを示すメッセージが表示されます。


//////////////////////////////////////////////////////////////////////////////
// ERROR!!! DEADLOCK DETECTED at 1292000 ns! SIMULATION WILL BE STOPPED! //
//////////////////////////////////////////////////////////////////////////////
/////////////////////////
// Dependence cycle 1:
// (1): Process: hls_fft_1kxburst.fft_rank_rad2_nr_man_9_U0
//      Channel: hls_fft_1kxburst.stage_chan_in1_0_V_s_U, FULL
//      Channel: hls_fft_1kxburst.stage_chan_in1_1_V_s_U, FULL
//      Channel: hls_fft_1kxburst.stage_chan_in1_0_V_1_U, FULL
//      Channel: hls_fft_1kxburst.stage_chan_in1_1_V_1_U, FULL
// (2): Process: hls_fft_1kxburst.fft_rank_rad2_nr_man_6_U0
//      Channel: hls_fft_1kxburst.stage_chan_in1_2_V_s_U, EMPTY
//      Channel: hls_fft_1kxburst.stage_chan_in1_2_V_1_U, EMPTY
/////////////////////////////////
// Total 1 cycles detected!
/////////////////////////////////////////////////////////////

[Dataflow Viewer] は、デッドロックに関与しているプロセスを赤で表示します。フルのチャネル (赤) と空のチャネル (白) も示されます。この場合、タスク間のチャネルのインプリメンテーションを確認し、FIFO が生成されるデータを保持できるのに十分な大きさであることを確認してください。

同様に、RTL テストベンチも、DEPENDENCE 指示子を使用して指定された偽依存を自動的に確認するよう設定されています。協調シミュレーションの警告メッセージは、偽依存ではなく、機能的に有効なデザインを達成するために対応する指示子を削除する必要があることを示します。

ヒント: cosim.disable_deadlock_detection=true コンフィギュレーション コマンドは、これらのチェックをオフにします。