FPGA 外部のメモリをアバロン・MM・インタフェースへ接続する方法
ver. 8.1 2009 年 3 月
1. はじめに
Nios® II 開発ボードに実装されているメモリ用のコンポーネントは、SOPC Builder の中にあらかじめ用意されています。 しかし、実際に基板を作成した場合には、Nios II 開発ボードに実装されているメモリと同じ仕様の製品でない限り、SOPC Builder であらかじめ用意されたメモリ用のコンポーネントを使用することはできません。
この場合、新たに使うメモリ用のコンポーネントを作成する必要があります。
この資料では、Nios II システムをはじめとする アバロン・MM(メモリ・マップド)・インタフェース (SOPC Builder によって生 成されるアルテラオリジナルのバス) のシステムへ FPGA 外部の汎用メモリを接続する方法の一例を示します。
メモリ用のコンポーネントを作成する際に、Component Editor という機能を使用します。
Component Editor の詳細は、アルテラ社の資料 Quartus® II Handbook Volume 4 : SOPC Builder の chapter 6 Component Editor をご覧ください。
資料URL : http://www.altera.com/literature/hb/qts/qts_qii54005.pdf
この資料は、Quartus II 8.1、Nios II 8.1 に対応しています。
2. 概要
SOPC Builder に登録されていない新たなコンポーネントを作成する場合、Component Editor という ウィザードを使用します。 このComponent Editor を用いることで下記のコンポーネント化が行えます。 a) 新たに追加したいハードウェアのファイル(VHDL、Verilog-HDL)のコンポーネント化 b) 新たに追加したいハードウェアとの接続部分のみのコンポーネント化 この資料では新たにシステムへ追加したいハードウェアを FPGA の外部メモリと想定していますので、メモリとの接続部分 のハードウェアのみのコンポーネント化を行います。 アバロン・インターコネクト・ファブリックは、リード用とライト用でデータバスが独立していますが、FPGA の外部メモリは、通 常、リード用とライト用でデータバスが共通です。 したがって、アバロン・MM・インタフェースと FPGA の外部メモリのバスを接続するためには、トライステートの機能を設け、 双方向ポートを用意する必要があります。
SOPC Builder 内のコンポーネントとして提供されている Avalon® Tri-State Bridge (アバロン・トライステート・ブリッジ)を使 用することでトライステートの機能を設けます。 この資料で紹介する例では、外部に接続するメモリを SRAM とし、想定しているポートを以下に示します。 表1 のポート名は、アバロン・インターコネクト・ファブリックとメモリの接続部分のポートに定義した名前です。 表1 ポート仕様 ポート名 役割 ビット幅 メモリから見た方向 ext_address アドレス 18 入力 ext_data データ 32 双方向 sram_cs_n チップ・セレクト 1 入力 sram_we_n ライト・イネーブル 1 入力 sram_oe_n アウトプット・イネーブル 1 入力 sram_be_n バイト・イネーブル 4 入力
3. 操作方法
3-1. コンポーネントの作成(Component Editor の設定)
1. SOPC Builder を開きます。(Quartus II の Tools メニュー > SOPC Builder または ボタンをクリック) 2. SOPC システムの名前をタイプし、生成させる言語を選択します。
3. File メニューから New Component 、もしくは New ボタンをクリックすると Component Editor ウィンドウが表示されま す。
5. 表1 で示したポートを順番に設定していきます。
まず、アドレス・ポート(ext_address) の設定をします。Name 欄にポート名、 “ext_address” をタイプします。
Interface 欄はプルダウンメニューより “new_Avalon_Memory_Mapped_Tristate_Slave…” を選択します。Interface 欄 に avalon_tristate_slave が表示されます。
Signal Type は、プルダウンメニューより “address” を選択します。 Width 欄には、18 を入力します。 Direction は input を選択します。 Signals タブで用意されている入力項目の説明を、表 2 よりご確認ください。 表2 入力欄の説明 入力欄 説明 Name ポート名を入力 Interface このポートと接続されるインタフェースの規格を選択(アバロン・MM・インタフェースの マスタ、スレーブ、アバロン・トライステート・ブリッジ、もしくはグローバル信号など) Signal Type Interface で選択した規格に定義されている中のどのポートと接続するのかを選択
Width このポートの幅を定義
Direction 追加するメモリやハードウェア側から見たポートの向きを定義
6. 残りのポートも 5 と同じ手順で追加します。
データ・ポート(ext_data) の Direction の設定は “bidir” になりますのでご注意ください。 表1(1 ページ)通りにポートを追加すると、以下のようになります。
7. Interfaces タブを選択し、Name 欄は、アバロン・トライステート・スレーブの名前を定義します。
Type 欄は “Avalon _Memory_Mapped_Tristate _Slave” を選択します。 Associate Clock 欄はインタフェースに入力す るクロックを選択します。
8. Timing で各メモリが要求する Setup、Read Wait、Write Wait、Hold の時間を調節します。 Unit で設定するタイミングの単位として “Cycles” 、“ns” のどちらかを選択します。
Units を “ns” として “1 ns” 等細かい単位でタイミングの入力することが可能ですが、実際にシフトできるタイミングの 最小単位は、入力された周波数に依存した時間のサイクル数になります。50 MHz のクロックを入力している場合“1 ns” と設定していても、実際のシフトは “20 ns” となります。
Show deprecated parameters にチェックを入れ、Deprecated の設定を表示させます。Deprecated の Memory device にチ ェックを入れます。
9. Component Wizard タブを選択し、Class Name 、Display Name にコンポーネント名、Component Group にグループ名を 入力します。
ここで登録したグループ名、コンポーネント名で SOPC Builder 上の “System Contents” タブに追加されます。
10. Component Wizard の Finish ボタンをクリックすると、Save Change のウィンドウが表示されますので、“Yes, Save” をク リックします。
Class Name : System Contents タブの左枠のペリフェラ ル一覧に表示される名前。 Display Name : システムに追加されたとき使用される 名前。HDL ファイルへの記述にはこの名 前が使用されます。 ペリフェラル一覧の中の作成したコンポーネントを 追加するグループを選択します。 User_logic のように任意のグループ名を入力する と新しいグループが作成されます。
11. SOPC Builder の System Contents タブに 9 項で入力した名前のグループ内に、作成したメモリ・インタフェースのコン ポーネントが登録されます。
3-2. コンポーネントを SOPC Builder システムに追加
(ここでは、Nios II のマスタ・コンポーネントがあらかじめ用意されていることを想定しています。)
1. 新たに作成したメモリ・インタフェースのコンポーネントを SOPC Builder のシステムへ追加します。
2. System Contents タブの Bridges and Adapters グループの Memory Mapped カテゴリより “Avalon-MM Tristate Bridge” を選択し Add… ボタンをクリックします。
3. Avalon-MM Tristate Bridge ウィンドウで Registered へチェックを入れ、Finish ボタンをクリックします。
4. Avalon Tri-State Bridge のマスタと、追加したメモリ・インタフェースのコンポーネントを接続します。
5. Nios II のコンポーネントのウィザードを開くと、Reset Vector の項目と Exception Vector の項目があり、システムへ追加 したメモリ・インタフェースのコンポーネントが選択できるようになります。
6. SOPC Builder 上の各コンポーネントのベースアドレスが他のコンポーネントと重なっていれば、重ならないようにアドレ スを配置してください。
7. システムの設定が完了したら、SOPC Builder の Generate ボタンをクリックし、システム生成します。
3-3. Quartus II でハードウェア・デザインを作成
1. SOPC Builder でシステムの生成が終了すると、シンボル(システムのトップ・デザイン・ファイル)にメモリ用に定義したポ ートが生成されているのが確認できます。
3-4. Nios II IDE の設定
Nios II IDE でアプリケーション・プログラムをビルドする際に、プログラム・メモリとして、システムへ追加したメモリ・インタフェ ースのコンポーネントが選択できるようになります。
※ Nios II IDE の使用方法の詳細は