1. Address Span Extender の概要
Address Span Extender は、アドレス幅に上限があるマスターのアドレス空間を拡張する際に使用する IP です。Platform Designer のアドレス幅は 1~64 bit までサポートしていますので、Address Span Extender IP も 1~64 bit のアドレス幅をサポートしています。
例えば、Nios® II のアドレス空間はデフォルトで 2GB までです。外部に 4GB などの SDRAM がある場合、Nios® II のデフォルトアドレス空間では足りず、このままでは 2GB を超える SDRAM 領域にアクセスできません。
そこで、Address Span Extender を使用して Nios® II のアドレス空間を拡張することで、Nios® II のアドレス空間はそのままに 外部 SDRAM にアクセスできるようになります。
図1 に Address Span Extender を使用した際の Nios® II アドレス空間のイメージを示します。
Address Span Extender のパラメーター設定値と、ソフトウェアで設定する CSR Slave のアドレス値を元に、アクセスされる拡張先アドレスが決まります。
(この CSR Salve に登録可能なアドレス値の数は Sub-Window の数で決まります)
従って、リニアに 拡張先にアクセスできる訳でなく、アクセスする前に CSR Slave で Sub-Window のアドレス設定が必要になります。
この記事では上記のように、確保されている Nios® II のアドレス空間より、広いメモリー空間へのアクセスを実現する構成を題材に、Address Span Extender の使用方法について紹介します。
その他各種資料に関しましては下記の FAQ を参照ください。
・Platform Designer の Address Span Extender の使い方についての資料はありますか?
図1: Address Span Extender イメージ図
2. パラメーターの紹介
図2 はこの記事で紹介する構成のアドレス空間と Address Span Extender のパラメーター設定との関係性を示しています。表 1 は各種パラメーターの解説とサンプルの設定値を記載しています。
パラメーターの名称だけではどこの設定なのかイメージしづらいですので、図2 も合わせて参照ください。各図の中では、Expanded Master ポートからのアクセス先(4MB Slave Memory)を便宜上 Expanded Master と記載しています。
図2: Address Span Extender パラメーター設定
表1:パラメーター設定概要表
パラメーター | サンプル設定値 | 解説 |
Datapath Width | 32 bits | データバスの幅を設定します。 |
Expanded Master Byte Address Width | 22 bits | 拡張先(Expanded Master)のアドレス空間のアドレス幅を設定します。 |
Slave Word Address Width | 18 bits | Master (ex. Nios® II) のアドレス空間に、構築する Address Span Extender の Slave Area のアドレス幅を設定します。 |
Burstcount Width | 1 bits | バースト転送をする際に必要なバーストカウント値を設定します。 |
Number of sub-windows |
2 |
Slave Area のアドレス空間を分割する Sub-Window 数を指定します。 |
Enable Slave Control Port | true | CSR Slave にアクセスできるかどうか設定します。 |
Maximum Pending Reads |
1 |
バーストカウントと同じ値を設定します。 |
3. Address Span Extender の使用方法
Address Span Extender は、Master Address Map (ex. Nios® II Address Map) にある Slave Area にアクセスされた処理のアドレス値を、計算式通りに拡張して Expanded Master に出力するモジュールです。
下記がその計算式です。
Expand Address = (Control レジスターのアドレス値 + アクセスした Slave Area のアドレス)
Sub-Window ① を使用して、Expanded Master の 0x0000_4000 にアクセスする際のイメージを 図3 に示します。
Control レジスターの Sub-Windows ① に 0x0000_0000 を格納しておき、Slave Area の 0x0000_4000 にデータ 0xAABB_CCDD を書き込むと、 Expanded Master の 0x0000_4000 にデータ 0xAABB_CCDD が書き込まれます。
図3:Sub-Windows ① 使用アクセス時のイメージ
Sub-Window が複数個ある場合、Master がアクセスする Address Span Extender の Slave Area の上位 bitを切り替えることで、CSR レジスターに 設定したアドレスを切り替えてアクセスすることができます。
(例:Sub-Window 2個:上位 1 bit , Sub-Window 4個:上位 2 bit)
上位ビットを変更して 0x0010_4000 にアクセスするイメージを 図4 に示します。
Sub-Window ② に 0x0010_0000 を格納しておき、Slave Area の 0x008_4000 にデータ 0xEEFF_0011 を書き込むと、 Expanded Master の 0x0010_4000 にデータ 0xEEFF_0011 が書き込まれます。
図4:Sub-Window ② 使用アクセス時のイメージ
4. シミュレーションにおける動作確認
実際に 図3 と 図4 の動作を シミュレーションで確認してみましょう。
- 図3 のシミュレーション結果
図5:Sub-Window ① 使用アクセスのシミュレーション結果
- 図4 のシミュレーション結果
図6:Sub-Window ② 使用アクセスのシミュレーション結果
*補足
図5、図6 のシミュレーション結果は、extender が Expanded Maseter に対する Address Span Extender の Master ポート波形 、Expanded_mem が Expanded Maseter の Slave ポート波形です。
extender と Expanded_mem から出力される address 信号の値が異なっていますが、この違いは、Platform Designer における Master と Slave のアドレッシング・モードの違いによるものです。
Master は バイト・アドレッシング(8bit)、Slave はワード・アドレッシング(32bit)ですので、
Platform Designer の内部配線にて Datapath Width のバイト数 で割り算 されて Expanded Master にアクセスされます。
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。