記事 ID: 000076343 コンテンツタイプ: トラブルシューティング 最終改訂日: 2015/10/05

ネイティブ固定小数点 DSP ブロックがシミュレーションで予期しないレイテンシーを示しているのはなぜですか?

環境

  • インテル® Quartus® II サブスクリプション・エディション
  • DSP
  • シミュレーション
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    パラメーター、シミュレーター、RTL コーディング・スタイルの組み合わせによっては、シミュレーションにおけるこのブロックのレイテンシーは、予想されるレイテンシー (1 クロック) とは異なります。実際のハードウェアでは、予想されるレイテンシーが示されます。

    この動作が見られます(例えば、DSP ブロックを駆動するクロックが入力データを生成するクロックの遅延バージョンの場合、入力データよりも入力クロックにシミュレーション遅延が多くなります。

    解決方法

    この問題を回避するには、DSP ブロックに入力データを生成するクロックと DSP ブロックの入力クロックの間の遅延が、入力データの遅延によってバランスを取られるようにする必要があります。または、DSP ブロックの入力クロックと比較して、入力データが後の絶対時間または後のシミュレーションデルタ遅延時間で到着することを確認します。

    クロックパス上の代入ステートメントが多いほど、データパスとデータパスの間でシミュレーションデルタ遅延の違いが生じることに注意してください。

    これを行うには、テストベンチを以下に変更します。

    1. ネイティブ DSP ブロックへのクロック生成入力が、ネイティブ DSP ブロックへのクロック入力と全く同じ信号であることを確認します。
    2. #1 が実現不可能な場合は、入力データをクロックに対して 遅延 させます。

    たとえば、次の元の RTL コードを考えてみましょう。

    元の RTL:

    clk_gen: プロセス
    開始
    clk_orig <= \'0\';
    5ns 待ちます。
    clk_orig <= \'1\';
    5ns 待ちます。
    エンドプロセス。

    ...

    if (rising_edge(clk_orig)) してから
    ax <= ax 1;
    ay <= ay - 1;
    end if

    mac_test_bad_style: mult_acc
    ポートマップ (
    ...
    ax => std_logic_vector(ax)、-- [in]
    ay => std_logic_vector(ay)、-- [in]
    clk => ("00" & clk_orig)、-- [in]
    resulta => resulta2、-- [out]
    ...
    );

    が予想より 1 クロック低いレイテンシーで表示されます。なお、マルチプライヤー\の clk ポート割り当てに「00 & clk」を連結すると、入力データを生成する「clk_orig」からのシミュレーションデルタ遅延が追加されます。

    考えられる回避策は次のとおりです。

    例 1、推奨事項: 全体で 3 ビット・クロックを使用

    マルチプライヤー\の 3ビットクロックを直接生成し、アクティブなビットを使用して入力データをクロックできます。

    clk_gen: プロセス
    開始
    clk3bit <= \'000\';
    5ns 待ちます。
    clk3bit <= \'001\';
    5ns 待ちます。
    エンドプロセス。

    ...

    if (rising_edge(clk3bit(0)) ) してから
    ax <= ax 1;
    ay <= ay - 1;
    end if

    mac_test_bad_style: mult_acc
    ポートマップ (
    ...
    ax => std_logic_vector(ax)、-- [in]
    ay => std_logic_vector(ay)、-- [in]
    clk => (clk_3bit)、-- [in]
    resulta => resulta2、-- [out]
    ...
    );

    例 2、代替推奨事項: 入力データに対応する遅延を追加する

    \'clk => ("00" &clk_orig)\' ステートメントは、\'clk" ポートにデータを駆動している \'clk_orig\' からの追加のシミュレーションデルタ遅延を発生させます。これを克服するために、元のclk_genプロセスを使用し、割り当てステートメントを使用してシミュレーションデルタ遅延をデータに追加するだけです。

    clk_gen: プロセス (オリジナルと同じ)

    ax_del <= ax;
    ay_del<=ay;

    mac_test_bad_style: mult_acc
    ポートマップ (
    ...
    ax => std_logic_vector(ax_del)、-- [in]
    ay => std_logic_vector (ay_del)、-- [in]
    clk => ("00" & clk_orig)、-- [in]
    resulta => resulta2、-- [out]
    ...
    );

    関連製品

    本記事の適用対象: 1 製品

    インテル® Arria® 10 GX FPGA

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。