1. はじめに
この記事では Quartus® Prime の Platform Designer に、ユーザーが自作したカスタムロジックを追加する場合に使用する Component Editor を使用して、Avalon® インターフェイスと接続するポートを持ったカスタム・コンポーネントの作成方法を、実際のサンプルをベースにご紹介します。
参考資料: Avalon® インターフェイスの詳細は以下のドキュメントを参照ください。
- 1. Avalon® インターフェイスの仕様書の概要 (intel.co.jp) [日本語版]
- 1. Introduction to the Avalon® Interface Specifications (intel.com) [オリジナル(最新版)]
2. Avalon® インターフェイスの概要
最初に Avalon® インターフェイスの概要について【表1】に示します。
インターフェイス・タイプ | ポートの種類 | 概要 |
Avalon® メモリーマップド・ インターフェイス (以降 Avalon® - MM) |
マスター(Host) スレーブ(Agent) |
|
Avalon® ストリーミング・ インターフェイス (以降 Avalon® - ST) |
ソース(送信) シンク(受信) |
|
【図1】は Avalon®- MM と Avalon® - ST を使用した簡易的なシステム構成です。
【図1】Avalon® インターフェイスを使用したシステム例
3. Component Editor でのカスタム・コンポーネントの作成
次に、Component Editor を使用したカスタム・コンポーネントの作成方法について紹介します。
Component Editor では、カスタム・コンポーネントを記述した HDL ファイルをシステム内に取り込む方法と、ファイルを取り込まずに内部バスを外に出してラッパーを介して外部のコンポーネントと接続する手法があります。この記事で紹介する Avalon® インターフェイスのカスタム・コンポーネントでは、以下の 4 種類を作成しています。
メモ: この記事の手順でカスタム・コンポーネントの作成を試す際に利用可能な Verilog HDL ファイルを用意しています。記事の最後にあるリンクもしくは HDL_files.7z から HDL をダウンロードしてご使用ください。
ファイルの対応表を【表2】に示します。
コンポーネント名 | 対応ファイル |
Avalon®- MM スレーブ・コンポーネント | mm_slave ⇒ custom_ip ⇒ sample_slave_component
|
Avalon®- MM マスター・コンポーネント | mm_master ⇒ custom_ip ⇒ sample_master_component
|
Avalon®- ST ソース・コンポーネント | st_sink ⇒ custom_ip ⇒ st_sink_rtl
|
Avalon®- ST シンク・コンポーネント | st_source ⇒ custom_ip ⇒ st_source_rtl
|
ポイント: カスタム・コンポーネントでトップ階層で定義するポート(信号)は、Platform Designer がサポートする標準インターフェイスに適合させる必要があります。
Avalon® - MM / Avalon® - ST や AMBA® AXI4 / APB 等のバス・ インターフェイスや、Nios® II カスタム・インストラクション専用インターフェイスが該当します。該当しない場合は、Conduit インターフェイスとして、 Platform Designer システムの外部にエクスポートできます。
4. Avalon®- MM インターフェイスのカスタム・コンポーネント
この章では、Avalon®- MM インターフェイスを持ったカスタム・コンポーネントの作成方法を、GUI の画像とともに解説します。
はじめに、作成の流れを【表3】に示します。
工程 | 操作項目 |
基本情報の入力 | Component Editor ⇒ Component Type |
HDL ファイルの登録、Analyze Synthesis | Component Editor ⇒ Files |
Parameter の作成 | Component Editor ⇒ Parameters |
ポート、インターフェイスのマッピング、設定 | Component Editor ⇒ Signals & Interfaces |
Platform Designer のシステムへインスタンス | Platform Designer ⇒ IP Catalog |
大まかな作成の流れは、『4-1. Avalon®- MM スレーブ・コンポーネント』と『4-2. Avalon®- MM マスター・コンポーネント』のどちらも変わりません。
4-1. Avalon®- MM スレーブ・コンポーネント
この項では、Avalon®- MM スレーブのコンポーネントの作成方法を GUI の画像とともに【表3】に沿って解説します。
4-1-1. 基本情報の入力
まずは、基本情報の入力から説明します。
操作する GUI は、Component Editor ⇒ Component Type タブです。
まず、Platform Designer ⇒ File ⇒ New Component より Component Editor を開きます。
起動時に開かれているタブが Component Type タブのため、このタブより設定を行います。
【図2】Component Type タブの設定
設定内容は【表4】に従ってください。
パラメーター名 | 入力内容 | ||||
Name | sample_slave_component | ||||
Display name | FIR_Switcher | ||||
Version | 20.1 | ||||
Group | User_Logic | ||||
Description | Custom Component with Avalon® - MM Slave | ||||
Created by | Macnica | ||||
icon | ./custom_ip/our_icon.jpg | ||||
Documentaion |
|
4-1-2. HDL ファイルの登録、Analyze Synthesis
次にベースとなる HDL ファイルの登録を行います。
Files タブより【表5】のリストに記載されているファイルを登録後、『sample_slave_top.v』をトップ階層に登録し Analyze Synthesis Files を実行します。
【図3】Files タブの設定
登録ファイル名 | 備考 |
sample_slave_top.v | Top-level File に設定 |
diff16.v | ー |
tap37_fir.v | ー |
4-1-3. Parameter の作成
3番目に Platform Designer にインスタンス時に設定を行うパラメーターを定義します。
この記事で使用している HDL ファイルにすでにパラメーターを定義する記述(Verilog HDL の場合は parameter 、VHDL の場合は Generic が該当)が記載されているため、Analyze Synthesis File を実行したことにより、Parameters タブの Parameters テーブルに「G_TAP_NUM」が記載されている状態になっています。
こちらも【表6】に従い設定します。
【図4】Parameters タブの設定
パラメーター名 | 入力内容 |
Name | G_TAP_NU |
Default Value | 37 |
Editable | 無効(チェック無し) |
Type | natural |
Group | Tap Length |
Tooltip | Tap Length of FIR Filter |
4-1-4. ポート、インターフェイスのマッピング、設定
4番目に、Siganls & Interfaces タブにて HDL 内で宣言したポートとインターフェイスとのマッピングを行います。
マッピング自体は、HDL の記述により Component Editor が自動的に行いますが、その後、エラーやカスタマイズはユーザーが手作業で行う必要があります。
まず、インターフェイスの修正を行います。
【図5】からもわかる通り、external_port_xxx のインターフェイスが avalon_slave に割り当てられています。先述の通り HDL ファイルをインポートした時点で、誤ったインターフェイスをマッピングすることがあるため、ユーザーが修正する必要があります。
【図5】Siganls & Interfaces タブの設定
【図5】の設定が完了したら各ポートの設定を行います。
external_port_in を選択すると、【図6】の GUI が表示されるため、Signal Type を手動で ”export_0” に変更します。external_port_out に対しても、同様に "export_1" へ変更を行ってください。
【図6】Siganals の設定
conduit インターフェイスへの変更は以上です。
次に avms インターフェイスへの変更を行います。
avms インターフェイスについては、自動マッピングが正常に行われているため、Avalon Memory Mapped Slave からの変更は必要ありません。
変更点としては下記 2 点です。
- Associated Reset を Reset 、Associated Clock を Clock に変更
- Timing ブロックにて適したTiming に設定
この記事では Reed Wait に対して Default の 1 Cycle を適用しています。
【図7】Timing の設定
注記:
Timing については、事前にシュミレーションを実施するなどして動作確認が取れた値を設定してください。
4-1-5. Platform Designer のシステムへインスタンス
以上で、Avalon®- MM スレーブ・コンポーネントの設定は終了です。
Finish を押下し設定を保存した後、IP Catalog より作成したコンポーネントをシステムに組み込むことができるようになります。
【図8】作成コンポーネントの表示
4-2. Avalon®- MM マスター・コンポーネント
この項では、Avalon®- MM マスターのコンポーネントの作成方法を GUI の画像とともに【表3】に沿って解説します。
『 4-1. Avalon®- MM スレーブ・コンポーネント 』と基本的に使用する GUI は同じになるため、異なるオペレーションが追加されている部分のみ説明し、その他はリスト形式で設定項目を紹介します。
4-2-1. 基本情報の入力
はじめに基本情報の入力です。
【図9】Copmponetn Type タブの設定
パラメーター名 | 入力内容 | ||||
Name | sample_master_component | ||||
Display name | FIR_Switcher_Sequencer | ||||
Version | 20.1 | ||||
Group | User_Logic | ||||
Description | Custom Component with Avalon® - MM Master | ||||
Created by | Macnica | ||||
icon | ./custom_ip/our_icon.jpg | ||||
Documentaion |
|
4-2-2. HDL ファイルの登録、Analyze Synthesis
次に HDL ファイルの登録です。
登録後は Analyze Synthesis Files を行ってください。
【図10】Files タブの設定
登録ファイル名 | 備考 |
sample_master_top.v | Top-level File に設定 |
gray_16counter.v | ー |
bin_16counter.v | ー |
4-2-3. Parameter の作成
3番目に Parameters タブの設定です。
今回使用している HDL ファイルではパラメーターが 3 つ宣言されています。
また Editable を有効にすることにより、IP 生成後のユーザーによるパラメーターの変更を可能にしています。
設定値の詳細を【表9】に示します。
【図11】Parameters タブの設定
項目名/パラメーター名 | STET_IDLE | STET_WRITE | STET_READ |
Default Value | 0 | 1 | 2 |
Editable | 有効(チェック) | 有効(チェック) | 有効(チェック) |
Type | logic_vector | logic_vector | logic_vector |
Group | Idle State Value | Write State Value | Read State Value |
Tooltip | Show Idle State | Show WRITE State | Show Read State |
4-2-4. ポート、インターフェイスのマッピング、設定
4番目に、Siganals & Interfaces タブの設定です。
この項でも『 4-1. Avalon®- MM スレーブ・コンポーネント 』と同様に、誤認識しているインターフェイスの修正、タイミング設定、Associated Reset の設定を実施します。
【図12】avalon_master の設定
インターフェイス名 | 信号名 | 変更内容 |
avalon_slave_0 (変更後 avalon_master) |
ー | Name : Avalon Memory Mapped Master Associated Reset : Reset |
avalon_master | avmm_address | Signal Type : address |
avalon_master | avmm_byteenavle | Signal Type : byteenale |
avalon_master | avmm_read | Signal Type : read |
avalon_master | avmm_readdata | Signal Type : readdata |
avalon_master | avmm_waitreq | Signal Type : waitrequest Direction : input |
avalon_master | avmm_write | Signal Type : write_n |
avalon_master | avmm_writedata | Signal Type : writedata |
上記の他に、誤ったインターフェイスにマッピングされている信号があるため、インターフェイス作成方法と、信号の登録変更方法を【図13】と【図14】にて説明します。
【図13】Conduit インターフェイスの追加
【図14】Conduit インターフェイス信号の追加
上記の追加が完了したら、他の信号同様に各種設定を【表11】の通り実施してください。
項目/信号名 | external_port_in | external_port_dout | external_port_out |
Siganal Type | export_0 | export_1 | export_2 |
Width | 1 | 16 | 2 |
Direction | input | output | output |
4-2-5. Platform Designer のシステムへインスタンス
以上で Avalon®- MM マスター・コンポーネントの設定は完了です。
Finish を押下し設定を保存した後『4-1. Avalon®- MM スレーブ・コンポーネント』と同様に IP Catalog より選択することができるようになっています。
【図15】は生成したカスタム・コンポーネントの Parameters 画面です。
Component Editor の Parameters で設定したとおり、マスター・コンポーネントは値が編集可能となっています。
【図15】カスタム・コンポーネントの各種 Parameters
5. Avalon®- ST インターフェイスのカスタム・コンポーネント
この章では、Avalon®- ST インターフェイスのカスタム・コンポーネントの作成方法を、GUI の画像とともに説明します。
大部分のオペレーションが『4. Avalon®- MM インターフェイスのカスタム・コンポーネント』と同様のため、この章でも新たに追加されたオペレーションのみを説明し、その他の設定についてはリスト形式で紹介します。
カスタム・コンポーネントの作成の流れを【表12】に示します。
工程 | 操作項目 |
基本情報の入力 | Component Editor ⇒ Component Type |
HDL ファイルの登録、Analyze Synthesis | Component Editor ⇒ Files |
Parameter の作成 | Component Editor ⇒ Parameters |
ポート、インターフェイスのマッピング、設定 | Component Editor ⇒ Signals & Interfaces |
Platform Designer のシステムへインスタンス | Platform Designer ⇒ IP Catalog |
5-1. Avalon®- ST ソース・コンポーネント
この項では、Avalon®- ST ソース・コンポーネントの作成方法を、GUI の画像とともに解説します。『5. Avalon®- ST インターフェイスのカスタム・コンポーネント』の説明の通り、新たに追加されたオペレーション以外は画像と入力値をリスト形式での紹介とします。
5-1-1. 基本情報の入力
まずはじめに基本情報の入力です。
【図16】Component Type タブの設定
パラメーター名 | 入力内容 | ||||
Name | sample_st_source_Component | ||||
Display name | sample_st_src | ||||
Version | 20.1 | ||||
Group | User_Logic | ||||
Description | Custom Component with Avalon®- ST Source | ||||
Created by | Macnica | ||||
icon | ./custom_ip/our_icon.jpg | ||||
Documentaion |
|
5-1-2. HDL ファイルの登録、Analyze Synthesis
次に HDL ファイルの登録を行います。
登録後は Analyze Synthesis Files を行ってください。
【図17】Files タブの設定
登録ファイル名 | 備考 |
bin_16counter.v | ー |
gray_16counter.v | ー |
sample_st_src_top.v | Top-level File に設定 |
5-1-3. Parameter の作成
3番目に Parameters タブの設定です。
今回使用している HDL ファイルではパラメーターが 5 つ宣言されています。
また Editable を有効にすることにより、IP 生成後のユーザーによるパラメーターの変更を可能にしています。設定値の詳細を【表15】に示します。
【図18】Parameters タブの設定
項目名/ パラメーター名 |
MAX_LENG | STET_IDLE | STET_TRANSFFER | STET_WAIT | STET_ENB_CNT |
Default Value | 1023 | 0 | 1 | 2 | 3 |
Editable | 有効(チェック) | 有効(チェック) | 有効(チェック) | 有効(チェック) | 有効(チェック) |
Type | Iteger | logic_vector | logic_vector | logic_vector | logic_vector |
Group | Data Transfer Length | Set State Values | Set State Values | Set State Values | Set State Values |
Tooltip | Data Transfer Length | Monitor Idle State | Monitor Transfer State | Monitor Wait State | Monitor Count Enable State |
5-1-4. ポート、インターフェイスのマッピング、設定
4番目に Signals & Interfaces タブの設定です。
誤認識しているインターフェイスの修正、タイミング設定、Associated Reset の設定を実施します。
【図19】avalon_streaming_source の設定
【図20】conduit_end の設定
【図21】reset の設定
インターフェイス名 | 信号名 | 変更内容 |
avalon_slave_0 (変更後 avalon_streaming source) |
ー | Name : Avalon® - STreaming Source Associated Reset : Reset |
avalon_streaming source | avst_src_data | Signal Type : data |
avalon_streaming source | avst_src_eop | Signal Type : endofpacket |
avalon_streaming source | avst_src_ready | Signal Type : ready |
avalon_streaming source | avst_src_sop | Signal Type : startofpacket |
avalon_streaming source | avst_src_valid | Signal Type : valid |
ー | ー | Add interfaces : Conduit Associated Reset : Reset |
avalon_streaming source | extarnal_port_in | interface : Conduit へ移動 Signal Type : export_0 |
avalon_streaming source | extarnal_port_dout | interface : Conduit へ移動 Signal Type : export_1 Width : 16 Direction : output |
avalon_streaming source | extarnal_port_out | interface : Conduit へ移動 Signal Type : export_2 |
上記の設定が完了したら、各種 Timing の設定を行います。
まず Clock については 50Mhz に設定します。
【図22】の Clock インターフェイスから、Parameters の Clock rate を 50000000 に設定します。
【図22】Clock Parameters の設定
avalon_streaming_source の Timing についてはデフォルトの設定にします。
注記:
実際にカスタム・コンポーネントを作成する場合は、Ready がアサートされた最初のクロックの立ち上がりエッジで、データを出力していることをシュミレーションでご確認ください。
5-1-5. Platform Designer のシステムへインスタンス
以上で、Avalon®- ST ソース・コンポーネントの設定は終了です。
Finish を押下し設定を保存した後、IP Catalog より作成したコンポーネントをシステムに組み込むことができるようになります。
5-2. Avalon®- ST シンク・コンポーネント
この項では、Avalon®- ST シンク・コンポーネントの作成方法を説明します。
新規のオペレーションはないため、設定値については全てリスト形式での紹介とします。
5-2-1. 基本情報の入力
まずはじめに基本情報の入力です。
【図23】Component Type タブの設定
パラメーター名 | 入力内容 | ||||
Name | sample_st_sink_Component | ||||
Display name | sample_st_sink | ||||
Version | 20.1 | ||||
Group | User_Logic | ||||
Description | Custom Component with Avalon®- ST Sink | ||||
Created by | Macnica | ||||
icon | ./custom_ip/our_icon.jpg | ||||
Documentaion |
|
5-2-2. HDL ファイルの登録、Analyze Synthesis
次に Files タブより sample_st_sink_top.v を登録し、Analyze Synthesis Files を実施します。
【図24】Files タブの設定
5-2-3. Parameter の作成
3番目に Parameters タブの設定です。
今回使用している HDL ファイルではパラメーターが 5 つ宣言されています。
また、Editale を有効にすることにより、IP 生成後のユーザーによるパラメーターの変更を可能にしています。
設定値の詳細を【表18】に示します。
【図25】Parameters タブの設定
項目名 | 入力値 |
Name | MAX_LENG |
Default Value | 7000 |
Editable | 無効(チェック無し) |
Type | Integer |
Group | Allowable Maximum Data Receive Threshold |
Tooltip | Allowable Maximum Data Receive Threshold |
5-2-4. ポート、インターフェイスのマッピング、設定
4番目に Siganals & Interface タブの設定です。
誤認識しているインターフェイスの修正、タイミング設定、Associated Reset の設定を実施します。
【図26】avalon_streaming_sink の設定
【図27】conduit 、reset の設定
インターフェイス名 | 信号名 | 変更内容 |
avalon_slave_0 (変更後 avalon_streaming sink) |
ー | Name : Avalon® - STreaming Sink Associated Reset : Reset |
avalon_streaming source | avst_sink_data | Signal Type : data |
avalon_streaming source | avst_sink_eop | Signal Type : endofpacket |
avalon_streaming source | avst_sink_ready | Signal Type : ready |
avalon_streaming source | avst_sink_sop | Signal Type : startofpacket |
avalon_streaming source | avst_sink_valid | Signal Type : valid |
ー | ー | Add interfaces : Conduit Associated Reset : Reset |
avalon_streaming source | extarnal_port_dout | interface : Conduit へ移動 Signal Type : export_0 Width : 16 Direction : output |
上記の設定が完了したら、各種 Timing の設定を行います。
まず Clock については 50Mhz に設定します。
『5-1. Avalon® - ST ソース・コンポーネント』の【図22】同様に Clock インターフェイスから、Parameters の Clock rate を 50000000 に設定します。
avalon_streaming_sink の Timing についてもデフォルトの設定にします。
注記:
実際にカスタム・コンポーネントを作成する場合は、Ready がアサートされたクロックサイクルで、有効データ転送されていることををシュミレーションで確認し、Valid の遅延をご確認ください。
5-2-5. Platform Designer のシステムへインスタンス
以上で Avalon®- ST シンク・コンポーネントの設定は完了です。
Finish を押下し設定を保存した後、IP Catalog よりコンポーネントをご確認ください。
6. おわりに
この記事では Quartus® Prime の Platform Designer にて、Avalon® インターフェイスと接続するポートを持ったカスタム・コンポーネントの作成方法をご紹介しました。ツールに予め用意されている IP コンポーネントとは異なり、カスタム・コンポーネントの場合は、新規作成した時点では動作確認が全く行われていない状態です。実際に使用するにあたってはシミュレーションでの確認も確実に実施いただくようにご注意ください。