💡 彼女が FPGA を使用して学士論文を完成させるため、この記事を書いて HDL コーダーの使い方を迅速に理解できるようにし、初期の学習の難易度を下げる手助けをします。
HDL コード生成をサポートする Simulink ライブラリ#
名前に HDL が含まれるライブラリのモジュールは一般的に HDL コードを生成するために使用できます。モジュール名を直接検索します。例えば、fir を検索すると、
隣にどのライブラリにあるかが表示されます。モジュールは複数のライブラリに存在する可能性がありますが、いずれかのライブラリ名に HDL が含まれていれば、そのモジュールは HDL コードを生成するために使用できます。
一部の一般的な操作#
サブシステムの作成#
ライブラリからモジュールをメインインターフェースにドラッグして組み合わせると、大きなスペースを占有する可能性があります。プロジェクトが大きく、モジュールがどんどん増えると特に煩雑になります。そのため、特定の機能が完了したら、その部分のモジュールをすべて選択できます。このとき、右下に 3 つの点が表示され、マウスを上に移動すると展開され、さまざまな機能が表示されます。下の図は AM 変調のプロセスで、関連するすべてのモジュールを選択した後、サブシステムを作成をクリックすると、右の図のサブシステムが得られます。生成されたサブシステムの名前は subsystem で、より明確で理解しやすい名前に変更できます。
ノードの信号波形を観察#
特定の接続線を選択すると、同様に 3 つの点が表示され、マウスを上に移動すると展開され、WiFi 形状のオプションを選択することで、その接続線上の信号を記録できます。シミュレーションを実行した後、再度 WiFi アイコンをクリックするとロジックアナライザが開き、その接続線上の信号を確認できます。
ロジックアナライザ内部で特定の信号を選択すると、波形内で数制や高さなどの設定を調整できます。
スコープテンプレートを使用してノード信号を見ることもできます。
スペクトル分析#
Spectrum Analyzer モジュールを使用してスペクトル分析を行います。
サンプル点が少ない場合は、推定方法を welch に変更できます。
信号データ形式の表示#
モジュールの入力出力信号のデータ型と小数位数を表示できます。
サンプリング時間の欄の時間の凡例を選択すると、異なるサンプリングレートのモジュールが異なる色で表示され、多速率システム設計に非常に役立ちます。
HDL コード生成#
前期準備#
診断タイプの設定#
モデル設定で診断 / サンプリング時間を選択します。
単一タスクとマルチタスクのデータ転送はエラーに設定する必要があります。
互換性チェック#
コード生成のターゲットフォルダを選択し、互換性チェッカーを実行します。プロジェクトに問題がなければ、以下の画面が表示されます。
ターゲットプラットフォームの選択#
使用する FPGA に基づいて合成ツールと FPGA のシリーズを選択します。
モジュール設定#
コードを生成するサブシステムを右クリックし、HDL モジュールプロパティを選択します。
パイプライン、乗算器などのパラメータを設定できます。
生成されたコードが EDA ツールでコンパイル後にタイミング制約を満たさない場合は、入力と出力のパイプラインを追加できます。
💡 モジュールの出力が前のモジュールにフィードバック信号を持つ場合、パイプラインを追加することはできません。詳細は
bookmark
[bookmark](https://blog.sawenmoerjie.top/article/ec96aebc-b5a5-4059-bbef-02f0003e7a45)
コード生成#
サブシステムの HDL コードを生成するをクリックすると、自動的にコンパイルが行われ、コマンドラインウィンドウに以下の情報が表示されます。
同時にレポートが生成されます。
エラーがなければ、上記で選択したフォルダ内に生成された Verilog コードファイルが表示されます。
これらのファイルを EDA ツールにインポートすれば、直接インスタンス化して使用できます。
💡 すべてのファイルをインポートする必要があり、必要な特定の名前のモジュールだけをインポートすることはできません!
💡 EDA ソフトウェアのコンパイル後のレポートを必ず確認してください。特に大規模な設計では、タイミング要件を満たさないことが非常に多いです。この場合、Simulink に戻って設計を最適化する必要があります。タイミングレポートに A モジュールの特定の場所でタイミングが満たされていない場合は、Simulink の A モジュールにパイプラインを追加する必要があります。(注:Quartus ではタイミングエラーに遭遇したことはありませんが、大規模なプロジェクトを Quartus で開発していない可能性があります。)