生成されたモデルと検証モデル
HDL Coder™ により、生成されたモデルでの HDL 最適化およびブロック設定の効果が表示されます。
生成されたモデル
コードを生成する前に、HDL Coder は HDL コードの動作モデルを作成します。このモデルを "生成されたモデル" といいます。生成されたモデルとは、HDL コード生成で作成されるモデルのことで、コード生成中の面積およびタイミングの最適化で生成されたコードのサイクル アキュレートでビットトゥルーな動作を取得するモデルです。生成されたモデルは、Simulink® テスト対象設計 (DUT) と生成される HDL コードでのレイテンシおよび数値の差を示します。HDL Coder によって挿入された遅延は、生成されたモデルでさまざまな色で強調表示されます。コード生成の各種遅延、対応する強調色、および生成されたモデルでの遅延の命名方法を次の表に示します。
遅延 | 強調色 | 命名規則 |
---|---|---|
| シアン | ブロックはシアンで強調表示されます。このブロック内の Delay ブロックは既定の名前 |
緑 | 制約付き出力パイプライン: rd_n | |
オレンジ |
|
タイミングおよび面積の最適化を使用すると、生成されたモデルは元のモデルとは大幅に異なります。たとえば、アルゴリズムの精度を維持するために最適化および追加の遅延の均衡化を要求する場合、ブロックの隣に追加の整数の遅延が含まれます。同じ演算が複数の演算全体で時間多重化される状態で、リソース共有またはストリーミング最適化を要求する場合、モデルに追加のレートが含まれます。元のモデルに最適化がない場合は、生成されたモデルは元のモデルと同じになります。生成されたモデルは、生成された HDL コードをシミュレートします。元のモデルからのレイテンシ、レート、およびデータフローの変更を可視化するには生成されたモデルを使用すると便利です。
シミュレーションの設定は元のモデルと生成されたモデルで同じになりますが、コード生成の設定はそれらのモデルで同じである必要はありません。たとえば、モデルで delay block の [ResetType] を none
に設定した場合、この設定はシミュレーションには影響しないため、生成されたモデルの対応する遅延ブロックには表示されないことがあります。[ResetType] が none
に設定された delay block の生成された HDL コードへのマッピングを確認するには、トレーサビリティを使用した Simulink モデルと HDL コード間の移動を参照してください。
生成されたモデルは、レジスタ転送レベル (RTL) テスト ベンチ生成で使用されます。生成されたモデルには最適化に必要なアルゴリズムのタイミングの変更が反映されるため、入力スティミュラスおよび出力応答が元のモデルではなく生成されたモデルから取得されます。モデル生成を無効にすると、HDL Coder ではテストベンチを生成できません。
コードの生成後、生成されたモデルがターゲット フォルダーに保存されます。生成されたモデルには、既定で gm_
という接頭辞が付加されます。たとえば、モデルの名前が myModel
の場合、生成されたモデルの名前は gm_
myModel
になります。
生成されたモデルのカスタマイズ
生成されたモデル名の接頭辞をカスタマイズするには、GeneratedModelNamePrefix
プロパティを関数 makehdl
または hdlset_param
と共に使用します。生成されたモデル名の接頭辞を参照してください。
生成されたモデルの命名とレイアウトのさまざまなオプションを指定することもできます。モデル生成の命名規則とレイアウトのオプションを参照してください。
検証モデル
生成されたモデルは元のモデルとは大幅に異なることが多いため、本製品で元のモデルと生成されたモデルを比較する "検証モデル" を作成することができます。検証モデルは元のモデルの出力に遅延を挿入してレイテンシの相違を補正し、2 つのモデルの出力を比較します。検証モデルをシミュレートする場合は、出力データに数値的相違があるとアサーションがトリガーされます。
検証モデルを使用して、最適化した DUT の出力が元の DUT で生成される結果に対してビットトゥルーであるかどうかを検証できます。
検証モデルには次のものが含まれます。
生成されたモデル
補正のための遅延を挿入した元のモデル
元のモデルと生成されたモデルに送られる元の入力
元のモデルと生成されたモデルの出力を比較および表示するスコープ
レイテンシの差
ブロックのアーキテクチャや最適化によっては、レイテンシが発生することがあります。たとえば、Reciprocal ブロックに、ニュートン・ラフソン法を実装する HDL ブロック アーキテクチャを指定できます。ニュートン・ラフソン法は反復法なので、この方法を使用するブロック アーキテクチャはマルチサイクルであり、ブロック レートでレイテンシが発生します。
同様に、リソースの共有による面積の最適化では、共有ハードウェア リソースでデータを時間多重化するので、ローカル マルチレートと、アップサンプルレートでレイテンシが発生します。
数値的な差
HDL ブロック アーキテクチャにより、元のモデルと生成されたモデルの間に数値的な差が導入されることがあります。以下に例を示します。
ブロックで指定されるInputPipelineなどの HDL ブロック プロパティ、もしくは特定の HDL アーキテクチャまたは遅延をブロックの入力に移動させる分散型パイプライン方式などの最適化です。
ニュートン・ラフソン法は近似法です。ニュートン・ラフソンのブロック実装を選択した場合、生成されたモデルの数値が変わります。
フィルターなどの信号処理用ブロックの HDL 実装で、数値が変化することがあります。
速度を最適化した後の数値的相違の検出も参照してください。
検証モデルの生成
[コンフィギュレーション パラメーター] ダイアログ ボックスの [HDL コード生成] 、 [グローバル設定] 、 [モデルの生成] ペインで、[検証モデル] を選択します。
HDL ワークフロー アドバイザーの [HDL コード生成] 、 [RTL コードとテスト ベンチを生成] ペインで、[検証モデルを生成] を有効にします。
関数
makehdl
またはhdlset_param
と共にGenerateValidationModel
プロパティを使用します。
検証モデルのカスタマイズ
生成された検証名の接尾辞をカスタマイズするには、ValidationModelNameSuffix
プロパティを関数 makehdl
または hdlset_param
と共に使用します。検証モデル名の接尾辞を参照してください。
制限
検証モデルを生成するには、DUT サブシステムの HDL コードを生成しなければなりません。DUT サブシステムではなくモデル全体のコードの生成ではモデル生成はサポートされません。
DUT サブシステムに未接続の出力端子がないことを確認します。未接続のブロック端子の終端とブロックのコメント化の使用を参照してください。