SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用

SOPC Builder による高性能
DDR、DDR2、DDR3、
SDRAM の使用
Application Note 517
2008 年 3 月 ver. 1.0
はじめに
Altera® の DDR、DDR2、および DDR3 SDRAM 高性能コントローラ
MegaCore® ファンクションのバージョン 7.1 以降では、SOPC Builder をサ
ポートし、SOPC Builder システムで DDR、DDR2、または DDR3 SDRAM
高性能コントローラをインスタンス化することができます。このアプリ
ケーション・ノートでは、以下について説明します。
„
„
„
„
„
SOPC Builder のシステム・インタコネクト・ファブリックおよび性
能への影響の考慮
z
フル・レートまたはハーフ・レート SDRAM 高性能コントロー
ラ
z
システムおよびコンポーネントのクロック選択およびクロッ
ク・クロッシング・ブリッジ
z
バースト・リードおよびバースト・ライト
z
レイテンシおよびリードまたはライト・アドレス指定の最適化
方法
SOPC Builder における DDR2 SDRAM 高性能コントローラの実装
Nios® II プロセッサおよびその他のペリフェラルの組み込み
デザインのコンパイルおよびプログラミング・ファイルの生成
開発ボードへのデザインのダウンロードおよびデザイン上でリード
およびライト・トランザクションのテストのためのサンプル・コー
ド実行
f
SOPC Builder システムの機能シミュレーションについて詳しくは、
「AN
351: Nios II エンベデッド・プロセッサ・デザインのシミュレーション」
を参照してください。
f
SOPC Builder でのレガシー DDR または DDR2 SDRAM コントローラ
MegaCore ファンクションの使用について詳しくは、「AN 398: SOPC
Builder による DDR/DDR2 SDRAM の使用」を参照してください。
f
DDR、DDR2、および DDR3 SDRAM 高性能コントローラについて詳し
くは、「DDR および DDR2 SDRAM 高性能コントローラ・ユーザーガイ
ド」および「DDR3 SDRAM 高性能コントローラ・ユーザーガイド」を
参照してください。
Altera Corporation
AN-517-1.0
6.1
1
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
SOPC Builder
システムの
考慮事項
SOPC Builder で DDR、DDR2、または DDR3 SDRAM 高性能コントロー
ラを統合する場合は、以下の注意点および制約を常に考慮してください。
フル・レートまたはハーフ・レート SDRAM 高性能コント
ローラ
フル・レートまたはハーフ・レート SDRAM 高性能コントローラには、
以下の定義があります。
„
„
フル・レート・コントローラは、ローカル・インタフェースに対し
て実際の SDRAM インタフェースの 2 倍の幅で、フル SDRAM ク
ロック・レートでデータを供給します。
ハーフ・レート・コントローラは、ローカル・インタフェースに対
して実際の SDRAM インタフェースの 4 倍の幅で、SDRAM クロッ
ク・レートの 1/2 のクロック・レートでデータを供給します。
SDRAM 高性能コントローラをハーフ・レート・モードで実装すると、
可能な最高の SDRAM クロック周波数が得られ、より複雑なコア・ロ
ジックはこの周波数の 1/2 で動作させることが可能になります。ユーザー
は、Nios II プロセッサを低速のハーフ・レート・メモリ速度で動作させ
ながら、I/O ピンあたりに要求される SDRAM 帯域幅を達成することに
より、デザインの複雑さを軽減することができます。
ただし、可能な場合は、一般的に、使用している SOPC Builder システム
と同じクロック周波数でコアが動作するフル・レート・モードにコント
ローラをコンフィギュレーションするのが最適です。
フル・レートとハーフ・レートのコマンド動作
ハーフ・レート・コントローラを使用すると、コマンドは遅くなること
があります。例えば、DDR SDRAM デバイスでは多数のバンクを同時に
開いておくことができます。各バンクには現在選択されているロウがあ
ります。開いているバンクの選択されたロウ内で欄を変更するために、
追加のバンク管理コマンドを発行する必要はありません。アクティブ・
バンク内のロウの変更またはバンクの変更を行うと、プロトコル・ペナ
ルティが課せられ、プリチャージ(PCH)コマンドはアクティブ・ロウ
またはバンクを閉じて、次にアクティブ(ACT)コマンドが新しいロウ
またはバンクの組み合わせを開く(またはアクティブにする)必要があ
ります。
このペナルティの持続時間は、コントローラのクロック周波数、メモリ
のクロック周波数、およびメモリ・デバイスの特性の関数です。ある特
定のシステムでメモリおよびコントローラのコンフィギュレーション変
更の影響を計算することは、実行されるアクセスの性質に依存するため、
重要な作業です。
2
暫定サポート
6.1
Altera Corporation
SOPC Builder システムの 考慮事項
この例では、各コマンドは、フル・レート・コントローラでは 1 クロッ
ク・サイクルで実行されますが、ハーフ・レート・コントローラでは 2
クロック・サイクルが必要です。バンクは、PCH の後まで(tRP)後続
の ACT コマンドを受け入れることはできません。そのため、ハーフ・
レート・コントローラを使用すると、それぞれのメモリ・タイミング・
パラメータが同じであっても、コマンドの発行は遅くなることがありま
す。
時間指定メモリ・パラメータ
ハーフ・レート SDRAM 高性能コントローラでは、コントロール回路は
ハーフ・レートでクロックされるため、コントロール動作はフル・レー
ト・モードの場合よりも遅くなります。しかし、メモリのクロック周波
数および物理的特性は影響を受けません。
ハーフ・レート・モードを使用する場合、コントローラの時間指定メモ
リ・パラメータが変更されます。
例えば、次の場合です。
tRCDmin = 20 ns
133 MHz のコントローラの場合:
tCK = 7.5 ns
20/7.5 = 2.666 切り上げて 3 クロック・サイクル(22.5 ns)
ハーフ・レートの 66 MHz コントローラの場合:
tCK = 15 ns
20/15 = 1.33 切り上げて 2 クロック・サイクル(30 ns)
このように、ハーフ・レート・モードではバンクおよびロウの変更は遅
くなりますが、2 倍遅くなるわけではありません。選択されたメモリ・
デバイスおよびインタフェース・クロック速度についてこの影響を見積
もる最も容易な方法は、ハーフ・レートとフル・レートの両方のデザイ
ンをシミュレーションし、ロウを切り換えたときのレイテンシの増加を
記録することです。一般的に、バンク内のロウを切り換えたときにフル・
レート・コントローラは、効率が約 14% 高くなります。ハーフ・レー
ト・コントローラはリード・レイテンシが小さいため、システム内でマ
スタによるバンク切り換えが頻繁には発生しない場合、ハーフ・レート・
コントローラでも高い性能が得られます。SOPC Builder では、アービト
レーション・シェアを変えてマスタによるメモリ・バンク切り換えを防
止することで、より最適なシステムを作成することができます。
Altera Corporation
6.1
3
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
クロック選択およびクロック・クロッシング・ブリッジ
SOPC Builder が自動的にクロック・ドメイン・クロッシング・ロジック
を追加してレイテンシが増加することを防止するために、SOPC Builder
システム内のすべてのコンポーネントについて同じクロックを使用して
クロッキングするのが理想的です。SDRAM高性能コントローラにはPLL
が既に内蔵されているため、SOPC Builder のシステム・クロックを、コ
ントローラおよびローカル・インタフェース・ロジックが使用するクロッ
ク altmemddr.sysclk に設定してください。SOPC Builder には、コン
トローラ PLL への入力クロックが表示されるだけで、インタフェース・
クロックは表示されません。図 1 を参照してください。
図 1. SOPC Builder の Avalon-MM スレーブおよびマスタ・クロック選択の注(1)
Avalonࠬ࡟࡯ࡉs1ࠢࡠ࠶ࠢ
㧔⸥タߐࠇߡ޿߹ߖࠎ‫ޕ‬ᵈ2ࠍෳᾖ㧕
Avalonࡑࠬ࠲߅ࠃ߮
ࠬ࡟࡯ࡉ࡮ࠢࡠ࠶ࠢ
図 1 の注:
(1)
(2)
clk クロックは、コントローラ PLL への入力クロックです。
s1 クロックは記載されていませんが、clk ドメインではなく altmemddr.sysclk クロック・ドメイン上にあ
ります。
接続されているコンポーネントに対して異なる Avalon® メモリ・マップ
ド(Avalon-MM)クロックが指定されている場合、SOPC Builder は、使
用している SOPC Builder システムのデータ・マスタと SDRAM 高性能コ
ントローラ・スレーブ・インタフェースとの間に自動的にクロック・ク
4
暫定サポート
6.1
Altera Corporation
SOPC Builder システムの 考慮事項
ロッシング・アダプタを追加します。クロック・クロッシング・アダプ
タは、異なるクロック・ドメイン間で堅牢かつ安全なトランザクション
を提供しますが、これによってレイテンシが増加し、全帯域幅が制限さ
れます。
SOPC Builder によるクロック・アダプタの自動挿入を防止するには、以
下のようにします。
„
„
接続されている SOPC Builder のコンポーネントと SDRAM 高性能コ
ントローラが同じ周波数で動作している場合は、そのシステムの残
りの部分へのクロックとして altmemddr.sysclk を使用します。
SOPC Builder によってクロック・ドメイン・クロッシング・アダプ
タは追加されません。
接続されている SOPC Builder のコンポーネントと SDRAM 高性能コ
ントローラが異なる周波数で動作している場合、SDRAM 高性能コ
ントローラとその他の SOPC Builder コンポーネントの間に AvalonMM クロック・クロッシング・ブリッジを手動で挿入します。
Avalon-MM クロック・クロッシング・ブリッジを使用するには、スレー
ブ・クロックを使用中の SOPC Builder のシステム・クロックに、マス
タ・クロックを altmemddr.sysclk に設定します。このコンポーネン
トは、クロック・ドメインのデカップリングに FIFO を使用し、自動挿
入されたブリッジに比べて帯域幅効率がはるかに高くなります。このブ
リッジのサイズと構造は、低いレイテンシで、より最適化されたソリュー
ションを実装するようにパラメータ指定することができます。
f
詳しくは、「Quartus II ハンドブック」の「メモリ・マップド・インタ
フェース用システム・インタコネクト・ファブリック」の章および
「Avalon メモリ・マップド・ブリッジ」の章の「クロック・ドメイン・
クロッシング」の項を参照してください。
1
Avalon-MM クロック・クロッシング・ブリッジは、周波数が同
じで位相が異なる 2 つのクロックを使用している場合にも動作
します。
Avalon-MM クロック・クロッシング・ブリッジを使用して、フル・レー
ト・コントローラをハーフ・レートの SOPC Builder デザインに接続する
ことができます。その場合でも、メモリ・コントローラは Nios II の周波
数の 2 倍のフル・レートで動作できます。したがって、メモリ・インタ
フェース・コマンドは、より高速で動作します。図 2 にクロック・クロッ
シング・ブリッジの例を示します。
Altera Corporation
6.1
5
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
図 2. クロック・クロッシング・ブリッジ
Nios II
ࡊࡠ࠮࠶ࠨ
M M
JTAG
UART
S
M M
ࠕ࡯ࡆ࠲
ࠕ࡯ࡆ࠲
S
ࠝࡦ࠴࠶ࡊ
࡮ࡔࡕ࡝
DMA
ࠦࡦ࠻
ࡠ࡯࡜
S
PIO
S
ࠢࡠ࠶ࠢ࡮
ࠢࡠ࠶ࠪࡦࠣ
࡮ࡉ࡝࠶ࠫ
75 MHz
150 MHz
M
M Avalon-MMࡑࠬ࠲࡮
ࠗࡦ࠲ࡈࠚ࡯ࠬ
S
SDRAM
S Avalon-MMࠬ࡟࡯ࡉ࡮ ࠦࡦ࠻
ࡠ࡯࡜
ࠗࡦ࠲ࡈࠚ࡯ࠬ
バースト・リードおよびバースト・ライト
表 1 に、各タイプの SDRAM 高性能コントローラのバースト長サポート
を示します。
表 1. バースト長サポート
フル・レート・モード
ハーフ・レート・
モード
DDR3
—
8
DDR2
4
4
2 または 4
4
メモリ・タイプ
DDR
バースト・リードとバースト・ライトの違いは次のとおりです。
6
暫定サポート
6.1
Altera Corporation
SOPC Builder システムの 考慮事項
„
„
ハーフ・レート・モードの場合、Avalon-MM スレーブ・インタフェー
スは、SDRAM デバイスの 4 倍の幅です。したがって、1 つの AvalonMM トランザクションごとに SDRAM 上で 4 つのトランザクション
が実行されます。メモリ・インタフェースは既に、1 つの AvalonMM トランザクションごとにサポートされる最大のメモリ・バース
ト・サイズを使用しているため、ローカル・サイドでの Avalon-MM
バースト・リクエストは何の目的も果たしません。
フル・レート・モードの場合、各 Avalon-MM トランザクションによっ
て生じる SDRAM トランザクションは 2 つだけであるため、SDRAM
高性能コントローラで 1 つまたは 2 つの Avalon-MM バーストを使用
することができます。したがって、2 つの Avalon-MM バースト・ト
ランザクションを組み合わせて、SDRAM 高性能コントローラでサ
ポートされる 4 つのトランザクションをサポートすることができま
す。
1
バーストが可能なマスタがスレーブよりも大きいバースト
長をサポートしている場合、SOPC Builder は自動的にバー
スト長アダプタをパス内に挿入します。
高性能を実現するために、SOPC Builder の中でマスタ/スレーブ・ペア
のデータ幅が一致するようにしてください。マスタ・ポートが幅の異な
るスレーブ・ポートに接続されている場合は常に、SOPC Builder は、異
なるデータ幅を変換するアダプタ・ロジックを自動的に挿入します。
Nios II プロセッサでは、Avalon-MM インタフェースのデータ・サイズは
32 ビットとするのが理想的です。
„
„
フル・レート SDRAM 高性能コントローラの場合は、ダブル・デー
タ・レートのステージでデータ幅が 2 倍になるため、外部メモリ幅
は 16 ビットが最適です。
ハーフ・レート SDRAM 高性能コントローラの場合は、ダブル・デー
タ・レートとハーフ・レートの両方のステージでデータ幅が 2 倍に
なるため、外部メモリ幅は 8 ビットが最適です。
以下のようにデータ・キャッシュ・ライン・サイズをメモリ・コントロー
ラのバースト長と一致させるのが理想的です。
„
„
„
4 バイト・ライン=バースト 1(32 ビット・ワード)
16 バイト・ライン=バースト 4
32 バイト・ライン=バースト 8
バースト信号の使用を避けるために、データ・バス・アービトレーショ
ン・プライオリティを設定することができます。
Altera Corporation
6.1
7
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
マルチマスタ
SDRAM で最高のスループットとレイテンシを達成するには、コント
ローラを最小数のマスタに接続し、これらのマスタを最小数のスレーブ
で共有してください。接続が少ないほど、SOPC Builder で自動挿入され
るデータ・マルチプレクサの複雑さが低減され、Avalon-MMインタフェー
スの fMAX が高くなります。
1
Avalon-MM インタフェースの fMAX が制限要因になる場合は、パ
イプライン・ブリッジを挿入することで、レイテンシを犠牲に
して fMAX を向上させます。
マスタ/スレーブ・ペアは、バーストの全持続期間にわたりロックされ
るため、他のマスタはどれも、バーストが完了するまで、そのバースト
のスレーブ・ターゲットへのアクセスを許可されません。重要なメモリ
接続は、システムの残りの部分から分離する必要があります。
1 つのマスタは、ライト・バーストが完了するまで SDRAM 高性能コン
トローラをロックすることができます。これには数サイクルの時間がか
かり、この間、SDRAM 高性能コントローラは他のリクエストを受け入
れることができません。ライト・バースト・コマンドは、すべてのバー
スト・データが SDRAM 高性能コントローラに渡されたときに完了しま
す。リード・バーストの場合、コントローラはバースト全体を全帯域幅
で素早く逆転送し、直ちに新しいリクエストの受け入れが可能になりま
す。
リードおよびライト・アドレッシングとレイテンシ
確定的なアクセス・パターンを持ったシステムでは、バンクおよびロウ
の変更数を最小限に抑えることができます。例えば、このためにメモリ・
マップを適切に配置します。よりランダムなアクセス・パターンを持っ
たシステムでは(エンベデッド SOPC Builder タイプのシステムで一般
的)、バンクおよびロウの変更を最小限にすることは難しく、レイテンシ
の増大(常にアクティブ・バンク内のロウを変更、またはバンクを変更
することによる)が大きな影響を及ぼします。ハーフ・レート・コント
ローラでは、最適でないキャッシュ実装によってサイクルが浪費される
可能性があります。
以下の対処を常に検討する必要があります。
„
„
„
8
暫定サポート
コントローラの Avalon-MM インタフェース幅を Avalon-MM マスタ・
インタフェース幅と一致させる。
ロウのアドレス指定時間を低減するために、シーケンシャルでない
アドレッシングを最小限にする。
Nios II のキャッシュ・ライン・サイズをメモリのバースト長と一致
させる。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
„
„
„
アービトレーション・プライオリティを正しく設定する。
ブリッジを挿入することにより、レイテンシを犠牲にして fMAX を向
上させる。
アービトレーション停止が発生する可能性がある場合、マルチマス
タ・デザインを最小限にする。
1
マルチマスタ・デザインでは、メモリは、全マスタで同時
に利用可能ではありません。
アービトレーション・プライオリティを正しく設定すると、不要なメモ
リ・アクセスが防止されます。例えば、Nios II 命令のマスタ・アービト
レーション・プライオリティは常に 8 に設定してください。これは、Nios
II 命令は、常に 8 個のシーケンシャル・アドレスにアクセスを試みるた
めです。キャッシュ・ライン・サイズに応じてデータ・マスタ・アービ
トレーション・プライオリティを設定してください。アービトレーショ
ン・プライオリティ値をデフォルトのままにしないでください。
SOPC Builder
を使用した
DDR2 SDRAM
高性能コント
ローラの実習
このアプリケーション・ノートは、Quartus® II ソフトウェアおよび SOPC
Builder を理解している方を対象にしています。このアプリケーション・
ノートを使用するには、使用中のコンピュータに以下のソフトウェアが
インストールされていることを確認してください。
„
„
„
„
Quartus® II v7.2
ModelSim-Altera 6.1g 以降
DDR2 SDRAM 高性能コントローラ v7.2
Nios II エンベデッド・デザイン・スイート(EDS)v7.2
このデザインは、Cyclone® III FPGA 開発キットを対象にしています。そ
の他のサポートされているデバイス・ファミリや開発キットを対象にす
ることができます。
f
Cyclone III FPGA 開発キットについて詳しくは、
www.altera.com/products/devkits/altera/kit-cyc3.html を参照してください。
プロジェクト例の作成
この項では、新規の Quartus II プロジェクトおよび SOPC Builder システ
ムの作成方法を示します。
新規 Quartus II プロジェクトの作成
Quartus II ソフトウェアで、New Project Wizard を使用して新規プロジェク
トを作成します。このとき、デバイス・タイプが Cyclone III, EP3C120F780C7
に設定されていることを確認してください。
Altera Corporation
6.1
9
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
1
プロジェクトのパスにスペースや拡張文字を含めないでくださ
い。
SOPC Builder システムの作成
SOPC Builder システムを作成するには、以下のステップに従います。
1.
Tools メニューの SOPC Builder をクリックします。
2.
Create New System ダイアログ・ボックスの System Name に
sopc_top を入力します。Target HDL で Verilog を選択して、OK
をクリックします。
3.
System Contents タブで、Memories and Memory Controllers を展開し
ま す。SDRAM を 展 開します。DDR2 SDRAM High Performance
Controller を選択し、Add をクリックします。DDR2 SDRAM 高性能
コントローラのウィザードが開きます。
4.
Speed Grade で、7 を選択し、選択したデバイスと一致させます。
5.
PLL reference clock frequency に 50 MHz を入力し、CLKIN50 信号
と一致させます。
6.
Memory clock frequency に 150 MHz を入力します。
1
150 MHz は、DDR2、SSTL-18 class I、トップおよびボトム I/O、
C7 スピード・グレードの Cyclone III デバイスでサポートされる
最大周波数です。
7.
Local interface clock frequency では、Half を選択します。
8.
Memory vendor で、Micron を選択します。
9.
Memory format で、Discrete Device を選択します。
10. Memory Presets で、Micron MT47H32M16CC-3 x4 +
MT47H32M8BP-3 x1 を選択します(図 3 を参照)。
1
10
暫定サポート
このメモリ・プリセットは、Cyclone III 開発ボードおよび Stratix
II GX PCIe 開発キットの両方が使用するコンフィギュレーショ
ンと正確に一致するので、アルテラによって DDR2 SDRAM 高
性能コントローラに組み込み済みです。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 3. Memory Settings
11. Modify parameters をクリックし、以下のパラメータを変更します。
z
z
z
Altera Corporation
Output clock pairs from FPGA で、1 pairs を選択します。
Memory interface DQ width で、8 bits を選択し、Avalon-MM に
32 ビットの幅を与えます。これは Nios II プロセッサへの接続
に最適です。
Memory drive strength setting で、Reduced を選択します(DQ
は、低負荷のポイントツーポイント接続です)。
6.1
11
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
z
z
Memory on-die termination (ODT) setting で、Disabled を選択し
ます(ディスクリート Class I 終端は開発ボードに取り付け済
みです)。
Memory CAS latency setting で、3.0 cycles を選択します(この
DDR2 SDRAM は、200 MHz 以下の周波数に対して CAS = 3 を
サポートします)。
12. DDR2 SDRAM 高性能コントローラ・ウィザードで、OK をクリック
してから、Finish をクリックします。
図 4. Preset Editor
12
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
SOPC Builder コンポーネントの追加
System Contents タブからコンポーネントを追加するには、以下のステッ
プに従います。
1.
On-Chip Memory を展開し、On-Chip Memory を選択して、Add を
クリックします。Total memory sizeに64 KBytesを入力します。Finish
をクリックします。
2.
On-Chip Memory をもう一度選択し、Add をクリックします。
a.
Total memory size を 4096 Bytes に設定します。
b.
Finish を選択します。
c.
この 2 つ目の on-chip memory を右クリックし、Rename をクリッ
クして、dma_read_memory を入力し、Enter を押します。
3.
System メニューの Auto-Assign Base Addresses をクリックします。
4.
Nios II Processor を選択して、Add をクリックします。
a.
Nios II/s を選択します。
b.
Reset Vector および Exception Vector で、onchip_mem を選択し
ます。ローカルのオンチップ・メモリに Nios II 命令コードが保
持されている場合、SDRAM インタフェースに要求されるアー
ビトレーションは少なくなり、その結果、より最適な AvalonMM 構造が得られます。
c.
Reset Vector Offset を 0x20 に、Exception Vector Offset を 0x40
に変更します。
c
コントローラは、リセットされるごとにメモリ・インタフェー
ス・キャリブレーションを実行し、そのときにアドレス 0x0
~ 0x1f に書き込みます。システム・リセット中にメモリ内容
を元のまま保持したい場合は、0x20 以下のメモリ・アドレス
を使用しないようにします。リセットするたびにフラッシュか
ら SDRAM の内容をリロードする場合は、このステップは不
要です。
d.
5.
Altera Corporation
Finish をクリックします。
Interface Protocols を展開し、Serial を展開して、JTAG UART を選
択し、Add をクリックします。
6.1
13
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
6.
7.
a.
リードとライトの両方の FIFO について、Buffer Depth (bytes)
に 64 を選択し、IRQ threshold に 8 を入力します。
b.
Finish をクリックします。
Peripherals を展開し、Microcontroller Peripherals を展開して、PIO
(Parallel I/O) を選択し、Add をクリックします。
a.
Width に 8 bits を入力します。
b.
Direction で、Output ports only を選択します。
c.
Finish をクリックします。
Memories and Memory Controllersを展開し、DMAを展開して、DMA
Controller を選択し、Add をクリックします。
a.
Enable burst transfers をオンにし、Maximum burst size で、512
words を選択します。
b.
Advanced タブをクリックします。Advanced タブで、doubleword
および quadword をオフにします。
c.
Finish をクリックします。
1
8.
PLL コンポーネントは、DDR2 SDRAM 高性能コントローラに含
まれているため、SOPC Builder デザインに追加しないでくださ
い。
バス・リンクを設定します(図 5 を参照)。
a.
14
暫定サポート
altmemddr と dma_read_memory の両方に DMA read_master お
よび write_master を接続します。
1
アドレスのオーバーラップを警告するメッセージが表示さ
れる場合、System メニューで Auto-Assign Base Addresses
をクリックします。
1
IRQ のオーバーラップを警告するメッセージが表示される
場合、System メニューで Auto-Assign IRQs をクリックし
ます。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
f
b.
altmemddr が外部クロック clk でクロックされていること、お
よび周波数が外部オシレータと一致していること(Cyclone III
開発ボードの場合、50 MHz)を確認します。
c.
不要なクロック・ドメイン・クロッシング・ロジックを回避す
るために、他のすべてのモジュールが altmemddr_sysclk でク
ロックされるようにします。
SOPC Builder のシステム・インタコネクト・ファブリックについて詳し
くは、「Quartus II ハンドブック」の「メモリ・マップド・インタフェー
ス用システム・インタコネクト・ファブリック」の章を参照してくださ
い。
図 5. SOPC Builder の最終システム接続
SOPC Builder システムの生成
システムを生成するには、以下のステップに従います。
1.
Altera Corporation
SOPC Builder で、Next をクリックします。
6.1
15
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
2.
f
Simulation をオフにします。シミュレータのプロジェクト・ファイ
ルを作成します。
SOPC のシミュレーションおよびテストベンチ・オプションについて詳
しくは、「Quartus II ハンドブック Volume 4」の「SOPC Builder」の章、
および「AN351: Nios II システムのシミュレーション」を参照してくだ
さい。
3.
SOPC Builder で、Generate をクリックします。Save をクリックしま
す。生成が完了すると、以下のメッセージが表示されます。
SUCCESS: SYSTEM GENERATION COMPLETED.
4.
SOPC Builder で、Exit をクリックします。
トップレベル・デザイン・ファイルの作成
概念上、SOPC Builder システムはデザインのコンポーネントと見なすこ
とができます。これは、唯一のコンポーネントである場合も、多くのコ
ンポーネントの 1 つである場合もあります。したがって、SOPC Builder
システムが完成したときに、トップレベル・デザインに追加しなければ
なりません。
トップレベル・デザインは、ユーザーが希望する HDL 言語とするか、ま
たは単に .bdf 回路図デザインとすることもできます。
この実習では、トップレベル・デザインは、追加コンポーネントの無い
SOPC Builder システムを囲む単純なラッパー・ファイルです。トップレ
ベル・デザイン・ファイルは、単にピンの命名規則とポート接続を定義
するだけです。図 6 に、SOPC Builder のトップレベル・ブロック図を示
します。
16
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 6. SOPC Builder のトップレベル・ブロック図
࠻࠶ࡊ࡟ࡌ࡞࡮࠺ࠩࠗࡦ࡮ࡈࠔࠗ࡞
sopc_top
global_reset
reset
global_reset
clock_source
Nios II
ࡊࡠ࠮࠶ࠨ
JTAG
UART
ࠝࡦ࠴࠶ࡊ
࡮ࡔࡕ࡝
PIO
DMA
ࠦࡦ࠻
ࡠ࡯࡜
SDRAM
ࠗࡦ࠲ࡈࠚ࡯ࠬ
PIO
SDRAM
ࠦࡦ࠻
ࡠ࡯࡜
SDRAM 高性能コントローラは、トップレベルのメモリ・インタフェー
ス・ピンへのアサインメントを行う必要があります。これらのアサイン
メントは、自動生成されたスクリプトおよび制約ファイルを使用して適
用されます。制約を機能させるには、ピン名とピン・グループ・アサイ
ンメントが一致しなければなりません。一致しない場合は、デザインを
コンパイルするときに適合しません。デフォルトでは、ピン名は mem_*
で す。予 想 さ れ る デ フ ォ ル ト の ピ ン 名 は、生 成 さ れ た
altmemddr_example_top ファイルに記載されています。オプションで、
デフォルトのピン命名規則にプリフィックスを付けることができます。
すべての SDRAM 高性能コントローラで、独立のデザイン例 altmemddr_
example_top が生成されます。このファイルは、コントローラとサンプ
ル・ドライバだけを含んでいます(図 7 を参照)。このファイルは、SOPC
Builder システムをインスタンス化しませんが、以下のうちの 1 つに使用
することができます。
„
„
Altera Corporation
メモリ・コントローラのデフォルトのピン名を特定する
デザインの残りの部分に対する開始点として使用する
6.1
17
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
図 7. デザイン例
࠺ࠩࠗࡦ଀
ࠦࡦ࠻ࡠ࡯࡞࡮
ࡠࠫ࠶ࠢ
㧔ᥧภൻ㧕
ࠨࡦࡊ࡞࡮
࠼࡜ࠗࡃ
DDR2 SDRAM
ࠗࡦ࠲ࡈࠚ࡯ࠬ
ࡠ࡯ࠞ࡞࡮
ࠗࡦ࠲ࡈࠚ࡯ࠬ
ALTMEMPHY
ࡔࠟࡈࠔࡦࠢ
࡚ࠪࡦ
DDR2 SDRAM
㜞ᕈ⢻ࠦࡦ࠻ࡠ࡯࡜
altmemddr_example_top をテンプレートとして使用し、HDL トップレベ
ル・デ ザ イ ン を 作 成 す る こ と が で き ま す。必 要 に 応 じ て、
altmemddr_example_top ファイル内でプリフィックスを追加するだけで
ピン名を編集することができます。ユーザーは、サンプル・ドライバお
よび DDR2 SDRAM 高性能コントローラを置き換えて、SOPC Builder で
生成されたシステムをインスタンス化しなければなりません。
アルテラは、参照資料として正しいピン名が入った .bdf トップレベル・
デザインの例を提供しています(図 8 を参照)。mem_clk[0] および
mem_clk_n[0] ピンは、双方向です(ALTMEMPHY メガファンクショ
ンの模擬パスのため)。
18
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 8. Quartus II トップレベル・プロジェクト
Quartus II .bdf の回路図を使用して SOPC Builder システムのトップレベ
ル・デザインを作成するには、以下の手順に従います。
1.
Quartus II ソフトウェアで、File メニューの New をクリックします。
2.
Block Diagram/Schematic File を選択し、OK をクリックします。ブ
ランクの .bdf である Block1.bdf が開きます。
3.
File メニューの Save As をクリックします。Save As ダイアログ・
ウィンドウで、Save をクリックします。
1
Altera Corporation
Quartus II ソフトウェアは、自動的に .bdf のファイル名を
ユーザーのプロジェクト名に設定します。
4.
ブランクの .bdf を右クリックし、Insert をポイントして、Symbol を
クリックし、Symbol ダイアログ・ボックスを開きます。
5.
Libraries の下にある Project を展開し、sopc_top を選択して、OK
をクリックします。
6.
SOPC Builder システム・コンポーネントの外形を <project>.bdf の中
に置き、左クリックします。
6.1
19
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
7.
SOPC Builder システム・コンポーネントを右クリックし、Generate
Pins for Symbol Ports をクリックすると、回路図の記号にピンおよ
びネットが自動的に追加されます。
8.
自動生成されたピン名は、SOPC Builder システムのピン名と一致し
ます。altmemddr_example_top の中の対応するピン名と一致させる
ために、それぞれのピンを選択して、ピン名を手動で変更します。
1
•
•
•
•
•
1
•
•
•
•
•
•
9.
このデザイン例について、SOPC Builder システムでは、以
下の不要な信号が組み込まれますが、ユーザーはその接続
を切り離すことができます。
altmemddr_phy_clk_out
local_init_done_from_the_altmemddr
local_refresh_ack_from_the_altmemddr
local_wdata_req_from_the_altmemddr
reset_phy_clk_n_from_the_altmemddr
以下の単一ベクタ信号は [0] ベクタのピン名が必要です。
それ以外の場合、シミュレーションは失敗することがあり
ます。
mem_dm
mem_dqs
mem_clk
mem_cke
mem_cs_n
mem_odt
SOPC Builder システムには、reset_n と global_reset_n_to_
the_altmemddr の 2 つのリセット入力があります。この 2 つの信
号を 1 つのピン(global_reset_n)に接続します。
10. クロック信号は、必ず clock_source に名前を変更してください。
f
信号について詳しくは、「ALTMEMPHY メガファンクション・ユーザー
ガイド」を参照してください。
11. out_port_from_the_pio[7..0] の名前を pio[7..0] に変更し
ます。
12. File メニューの Save をクリックして、変更を保存します。
13. Project メニューの Set as Top-Level Entity をクリックします。
20
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
Quartus II プロジェクト設定の更新
Quartus II プロジェクトで最適な結果を得るには、以下の手順に従いま
す。
1.
Assignments メニューの Settings をクリックします。Category リスト
の Fitter Settings を選択します。Fitter effort で、Standard Fit (Highest
Effort) を選択します。
2.
Category リストの Analysis and Synthesis Settings を選択します。
Optimization Technique で、Speed を選択します。
3.
Category リストで、Device を選択します。Device and Pin Options を
クリックします。Unused Pins タブをクリックし、Reserve all unused
pins で、As input tri-stated with weak pull-up resistor を選択します。
4.
Voltage タブをクリックし、Default I/O standard で、選択した SDRAM
インタフェースと同じ VCCIO 電圧を選択します(DDR2 SDRAM の
場合、1.8 V を選択します)。OK をクリックします。
5.
Category リストの Timing Analysis Settings を選択し、TimeQuest
Timing Analyzer During Compilation を選択します。
6.
Category リストの Timing Analysis Settings を展開し、TimeQuest
Timing
Analyzer を選択します。自動生成された
altmemddr_phy_ddr_timing.sdc ファイルに移動し、Add をクリック
します。OK をクリックします。
トップレベル・デザインのピン配置の指定
どの DDR SDRAM インタフェースでも、信号は正しいピン・タイプおよ
びグループ上に配置する必要があります。トップレベル・デザインのピ
ン配置を指定するには、以下の手順に従います。
1.
Processing メニューの Start をポイントして、Start Analysis and
Synthesis をクリックします。
2.
ピンの I/O 規格アサインメントを追加します。
a.
デフォルトのピン名を使用している場合は、<variation_name>_
pin_assignments.tcl を実行します。Tools メニューの Tcl Scripts
をクリックし、<variation name>_pin_ssignments.tcl を選択して、
Run をクリックします。
または
Altera Corporation
6.1
21
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
b.
ピン名を変更する(プリフィックスの変更のみ)必要がある場
合は、Quartus II Pin Planner を使用して Import an existing custom
megafunction を実行します。
•
•
•
•
Assignment メニューで、Pin Planner をクリックします。
Node Name の下の任意の場所で右クリックして、
Create/Import Megafunction を選択します(図 9 を参照)。
Import an existing custom megafunction を選択して、
<variation name>.ppf ファイルを選択します。
使用したいプリフィックスを Instance name に入力します
(図 10 を参照)。
図 9. Pin Planner によるメガファンクションの作成/インポート
22
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 10. プリフィックスの追加
f
DDR、DDR2、および DDR3 SDRAM 高性能コントローラのピンの命名
について詳しくは、「DDR および DDR2 SDRAM 高性能コントローラ・
ユーザーガイド」および「DDR3 SDRAM 高性能コントローラ・ユー
ザーガイド」を参照してください。
3.
Quartus II ソフトウェアがユーザーのデザインに正しく適合し、正し
いタイミング解析が得られるようにするために、すべてのピンを割
り当ててください。Cyclone III 開発ボードでピン位置を割り当てる
には、アルテラが提供する c3_host_ddr2_sopc_pins.tcl ファイルを実
行するか、または Pin Planner または Assignment Editor のいずれかを
使用して、ピン位置を手動で割り当てます。
1
SDRAM 高性能コントローラで自動生成されたスクリプト
は、ピン位置の割り当てを行いません。
1
デザイン・サイクルの中のデザイン調査の段階にあって、
PCB でピン位置が定義されていない場合、最初のピン制
約のセットは手動で定義する必要がありますが、これは開
発プロセス中に、より具体的なものになる可能性がありま
す。
ピン位置を手動で割り当てるには、以下の手順に従います。
Altera Corporation
1.
Pin Planner を開きます。Assignments メニューで、Pin Planner をク
リックします。
2.
DQ および DQS ピンを割り当てます。
6.1
23
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
a.
デザインで使用するデバイスの DQS ピン・グループを選択する
には、デザインの中の各 DQS ピンを Pin Planner で要求される
DQS ピンに割り当てます。次に Quartus II Fitter は、対応する
DQ 信号を各グループ内の適切な DQ ピンに自動的に配置しま
す。Pin Planner の中で DQS グループを見るには、右クリック
し、Show DQ/DQS Pins を選択して、In x8/x9 Mode をクリック
します。Pin Planner で、各 DQS グループは異なる色で、異なる
凡例を付けて表示されます。S = DQS ピン、Sbar = DQSn ピン、
および Q = DQ ピン(図 11 を参照)。
1
b.
使用しているメモリ・デバイスの DQ グループ幅(DQ ピンの
数/ DQS ピンの数)と一致するように、DQ モードを選択して
ください。DQ モードはメモリ・インタフェースの幅とは無関
係です。
1
24
暫定サポート
ほとんどのDDR2 SDRAMデバイスはx8/x9モードで動作し
ますが、いくつかの DDR2 SDRAM デバイスは x4 モード
で動作します。使用している特定のメモリ・デバイスの
データシートを参照してください。
各グループ内のDQグループの順番およびDQピンの順番は
重要ではありません。しかし、DQ ピンはそれぞれ対応す
るストローブ・ピンと同じグループ内に配置する必要があ
ります。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 11. Quartus II Pin Planner、DQ/DQS ピンの表示、x8/x9 モード
Altera Corporation
3.
DM ピンをそれぞれの対応する DQ グループ内に配置します。
4.
アドレスおよび制御/コマンド・ピンを、理想的にはデバイスの
mem_clk ピンと同じバンク内または同じ側にある、予備 I/O ピンの
いずれかに配置します。
5.
mem_clk ピンは、隣接する通常の I/O ピンを使用するようにしてく
ださい。CK/CK# ピン・ペアのための差動 I/O ペアが理想的です。差
動 I/O ペアを確認するには、Pin Planner 内で右クリックし、Show
Differential Pin Pair Connections を選択します。ピン・ペアは、それ
ぞれペアとなるピンの間に赤線が表示されます。
6.1
25
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
6.
clock_source ピンは、SDRAM コントローラの PLL/DLL ペアへ
の直接接続により専用の PLL クロック入力ピン上に配置します。
PLL/DLL ペアは、通常、デバイスのメモリ・インタフェースと同じ
側にあります。この推奨事項によって、PLL のジッタが小さくなり、
グローバル・クロック・リソースが節約され、タイミングおよび
フィッタ・エフォートが緩和されます。
7.
global_reset_n ピンを(高ファンアウト信号と同様に)
、専用の
クロック・ピン上に配置します。
f
Quartus II Pin Planner の使い方について詳しくは、
「Quartus II ハンドブッ
ク Volume 2」の「I/O Management」の章を参照してください。
f
Cyclone III の外部メモリのピン選択について詳しくは、
「Cyclone III デバ
イス・ハンドブック」の「Cyclone III デバイスの外部メモリ・インタ
フェース」の章を参照してください。
差動 DQS モードを備えた Stratix III デバイスの DDR2 SDRAM は、
DIFFIO_RX が可能なピン・ペア上に mem_clk[0]/mem_clk_n[0] が
必 要で す。Stratix III デバイスの DDR3 SDRAM インタフェースは、
DIFFIO_RX 機 能 を 備えた DQ または DQS ピン・ペアに
mem_clk[0]/mem_clk_n[0] が必要です。
f
Stratix III の外部メモリのピン選択について詳しくは、「Stratix III デバイ
ス・ハンドブック」の「Stratix III デバイスの外部メモリ・インタ
フェース」の章を参照してください。
デザインのコンパイル
デザインをコンパイルするには、Processing メニューの Start Compilation
をクリックします。
メモリ・インタフェースのタイミング確認
メモリ・インタフェースのタイミングを確認するには、以下の手順に従
います。
26
暫定サポート
1.
Tools メニューの Tcl Scripts をクリックします。
2.
<variation name>_phy_report_timing.tcl を選択し、Run をクリックし
ます。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
開発プラットフォーム上でのデザインのテスト
開発プラットフォーム上でデザインをテストするには、以下の手順に従
います。
„
„
„
27 ページの「SignalTap II ロジック・アナライザの追加」
29 ページの「プロジェクトのコンパイル」
30 ページの「タイミング検証」
SignalTap II ロジック・アナライザの追加
SignalTap II ロジック・アナライザは、システム内のリードおよびライト
動作を表示します。
f
SignalTap II ロジック・アナライザの使用について詳しくは、以下の資料
を参照してください。
„ 「Quartus II ハンドブック」の「SignalTap II エンベデッド・ロジック・
„
„
アナライザを使用したデザインのデバッグ」の章
AN 323: SOPC Builder システムでの SignalTap II エンベデッド・ロジッ
ク・アナライザの使用
AN 446: SignalTap IIロジック・アナライザを使用したNios IIシステム
のデバッグ
SignalTap II ロジック・アナライザを追加するには、以下の手順に従いま
す。
1.
Tools メニューの SignalTap II Logic Analyzer をクリックします。
2.
Clock ボックスの横にある Signal Configuration ウィンドウで、をク
リックします(Node Finder を参照します)
。
3.
Named ボックスに *phy_clk を入力して、Filter で、SignalTap II:
pre-synthesis を選択して、List をクリックします。
4.
Nodes Foundの中で sopc_top:inst|altmemddr:the_altmemddr|phy_clk
を選択し、> をクリックして、信号を Selected Nodes に追加します。
5.
OK をクリックします。
6.
Signal Configuration の下で以下の設定を指定します。
z
z
z
Altera Corporation
Sample depth で、512 を選択する
RAM タイプで、Auto を選択する(Stratix III デバイスのみ)
Trigger flow control で、Sequential を選択する
6.1
27
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
z
z
Trigger position で、Center trigger position を選択する
Trigger conditions で、1 を選択する
7.
Edit メニューの Add Nodes をクリックします。
8.
Named ボックスに *local* を入力することによって特定のノード
を検索して、Filter で SignalTap II: pre-synthesis を選択して、List を
クリックします。
9.
Nodes
Found の中で以下のノードを選択し、> をクリックして
Selected Nodes に追加します。
local_address
local_rdata
z
local_rdata_valid(リード/ライト・データを比較するための
代替トリガ)
z
local_read_req
z
local_ready
z
local_wdata
z
local_wdata_req
z
local_write_req(トリガ)
1
DDR SDRAM インタフェース信号は、SignalTap II ロジッ
ク・アナライザに追加しないでください。これらの信号に
対する負荷が大きくなり、タイミング解析に悪影響を与え
ます。
z
z
10. OK をクリックします。
11. SignalTap II のロジック・サイズを小さくするために、以下のバス信
号に対して Trigger Enable をオフにします。
z
z
z
local_address
local_rdata
local_wdata
12. local_write_req 信号の Trigger
Rising Edge を選択します。
Conditions を右クリックし、
図 12 に、完成した SignalTap II ロジック・アナライザを示します。
28
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 12. SignalTap II ロジック・アナライザ
13. File メニューの Save をクリックして、SignalTap II の .stp ファイル
をユーザーのプロジェクトに保存します。
1
Do you want to enable SignalTap II file stp1.stp for the
current project というメッセージが表示されたら、Yes を
クリックします。
プロジェクトのコンパイル
SignalTap II ロジック・アナライザに信号を追加した後、デザインを再コ
ンパイルし、Processing メニューの Start Compilation をクリックします。
Altera Corporation
6.1
29
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
タイミング検証
デザインがコンパイルされた後、TimeQuest のタイミング解析が合格す
ることを確認します。この FPGA タイミング解析に加えて、PCB または
システムの SDRAM タイミングをチェックします。タイミング解析を実
行するには、*_phy_report_timing.tcl スクリプトを実行します。
1.
Tools メニューの Tcl Scripts をクリックします。
2.
<variation name>_phy_report_timing.tcl を選択して、Run をクリック
します。
開発ボードの接続
Cyclone III 開発ボードを、使用しているコンピュータに接続します。
Cyclone III 開発ボードについて詳しくは、
「Cyclone III 開発キット・ユー
ザーガイド」を参照してください。
オブジェクト・ファイルのダウンロード
Tools メニューの SignalTap II Logic Analyzer をクリックします。SignalTap
II ダイアログ・ボックスが表示されます。
SOF Manager には、< ユーザーのプロジェクト名 >.sof ファイルが入って
いるはずです。SOF Manager に正しいファイルを追加するには、以下の
手順に従います。
30
暫定サポート
1.
... をクリックして、Select Program Files ダイアログ・ボックスを開
きます(図 13 を参照)。
2.
< ユーザーのプロジェクト名 >.sof を選択します。
3.
Open をクリックします。
4.
Program Device ボタンをクリックして、ファイルをダウンロードし
ます(図 13 を参照)。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 13. SignalTap II ダイアログ・ボックスでの SRAM オブジェクト・ファイルのインストール
࠺ࡃࠗࠬࠍ
ࡊࡠࠣ࡜ࡓߔࠆ
ࡊࡠࠣ࡜ࡓ࡮ࡈࠔࠗ࡞
ࠍ⴫␜ߔࠆ
Nios II IDE の組み込み
プロジェクトの Nios II プロセッサにテスト・コードを追加し、このプロ
グラムを使用して簡単なテストを実行することができます。
メモリ・テストを行う場合、読み出しと書き込みは、キャッシュされた
メモリからではなく、外部 DDR SDRAM から行わなければなりません。
以下の 3 通りの方法によって、Nios II のキャッシュされたメモリを使用
しないようにします。
„
„
このプロジェクト例で使用している Nios II/s のように、キャッシュ・
メモリを搭載していない Nios II プロセッサを使用する。
alt_remap_uncached ファンクションを使用する。
Nios II IDE の起動
NiosII IDE を起動するには、以下の手順に従います。
1.
Tools メニューの SOPC Builder をクリックします。
2.
System Generation タブをクリックします。
3.
Nios II IDE をクリックします。
1
Altera Corporation
初めて IDE を実行する場合は、Workbench をクリックしま
す。
4.
File メニューの Switch Workspace をクリックして、ユーザーのプロ
ジェクト・ディレクトリを選択します。
5.
File メニューで、New をポイントして、Project をクリックします。
6.1
31
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
6.
Altera Nios II を展開して Nios II C/C++ Application を選択し、Next
をクリックします。
7.
Select Project Templates の下にある Blank Project を選択し、Next を
クリックします。
8.
SOPC Builder システムの .ptf が、< ユーザーのプロジェクト・パス
>/< ユーザーの SOPC トップ >.ptf になっていることを確認します。
9.
Next をクリックし、Finish をクリックします。
10. Windows Explorer で、アルテラが提供した main.c を blank_project_0
ディレクトリにドラッグします。
f
main.c のテスト・プログラム例を見るには、42 ページの「付録:main.c
テスト・プログラム・ファイルの例」を参照してください。
このプログラムは、JTAG UART からコマンドを取得して実行する単純
なループで構成されています。表 2 に、Nios II の C コードに送られるコ
マンドを示します。
1
コマンドは以下のフォーマットとする必要があり、スイッチ A、
B、C、D は大文字で入力しなければなりません。アドレスおよ
びデータの文字列は、どちらも必ず 8 桁でなければなりません。
表 2. コマンド
コマンド
Switch A
フォーマット
スイッチ | データ
説明
LED を制御します。
例
A000000FF。最後の 2 バ
イトによって 8 個の LED
すべてを制御します。LED
はボード上でアクティブ
Low です。
Switch B
スイッチ | アドレス | データ
メモリ内のアドレス・オフ
セット位置に 1 回の書き込
みを実行します。
B を入力し、その後に
00000000、続いて
00000001 を入力すると、
SDRAM のメモリ・アドレ
ス位置 00000000 に
00000001 が書き込まれま
す。
32
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
表 2. コマンド
コマンド
Switch C
Switch D
フォーマット
スイッチ | アドレス
スイッチ | 転送元アドレス | 転送先
アドレス
説明
例
メモリ内のアドレス・オフ
セット位置で 1 回の読み出
しを実行します。
C を入力し、その後に
00000000 を入力すると、
1 番目のアドレス位置への
インクリメンタル・ライト
を実行し、その後、1 番目
のアドレス位置から 2 番目
のアドレス位置への DMA
バースト転送を行います。
このバーストは、512 ワー
ド、つまり 2048 バイトの
固定長です。
SDRAM のアドレス・オフ
セット位置 00000000 の
メモリの内容が読み出され
ます。
D0200100000000000 は、
DMA リード・メモリにイ
ンクリメント・パターンを
ロードし、次に SDRAM 高
性能コントローラに DMA
バースト転送します。
SOPC Builder コンポーネントのアドレス位置は、SOPC Builder ウィンド
ウから直接読み出すことができます(図 14 を参照)。
Altera Corporation
6.1
33
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
図 14. SOPC Builder コンポーネントのアドレス
SDRAM
㐿ᆎࠕ࠼࡟ࠬ
ࡃ࡯ࠬ࠻DMA
㐿ᆎࠕ࠼࡟ࠬ
プロジェクト設定のセットアップ
Nios II プロジェクトの設定をセットアップするには、以下の手順に従い
ます。
34
暫定サポート
1.
Nios II C/C++ Projects タブで、blank_project_0 を右クリックして、
System Library Properties をクリックします。
2.
Properties ダイアログ・ボックスの左側のリストにある
Library をクリックします。
3.
ライブラリ・プロジェクトのフットプリント・サイズを最適化する
ために、System Library Contents の下にある Reduced device drivers
をオンにします。
4.
Linker Script の下にある、
すべてのメモリ・オプションで、
onchip_mem
を選択します。オンチップ・メモリが、実行可能ファイルに対する
ターゲット・メモリ空間になります。
6.1
System
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
5.
システム・ライブラリに割り当てられるメモリ・サイズを小さくす
るために、Max file descriptors に 4 を入力します。図 15 に、Properties
ダイアログ・ボックスを示します。
図 15. Nios II プロジェクトの設定
6.
OK をクリックします。
7.
blank_project_0 を右クリックし、Run As をポイントして、Nios II
Hardware をクリックします。
Nios II C/C++ IDE により、このテスト・プログラム例がコンパイルされ
ます。
使用しているコンピュータに 2 本以上の JTAG ダウンロード・ケーブル
が接続されている場合は、JTAG エラーが表示されることがあります。
JTAG エラーが表示された場合は、以下の手順に従います。
1.
Altera Corporation
Nios II IDE の Run メニューの RUN... をクリックします。Target
Connection タブをクリックして、JTAG cable connection を修正しま
す(図 16 を参照)。
6.1
35
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
2.
blank_project_0 を右クリックし、Run As をポイントして、Nios II
Hardware をクリックします。
図 16. JTAG ダウンロード・ターゲットの接続の設定
システムのテスト
システムの正常動作を確認するには、以下のテストを実行します。
SignalTap II Trigger を local_write_req に設定する
SignalTap II ロジック・アナライザを使用して、ライト動作をキャプチャ
します。ライト動作を表示するには、以下の手順に従います。
1.
36
暫定サポート
SignalTap II の Setup タブで、local_write_req の立ち上がりエッ
ジでのトリガを選択します(図 17 を参照)。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 17. local_write_req 信号に対するトリガの設定
2.
Run Once Analysis をクリックして、ライト要求をキャプチャしま
す。
3.
Nios II コマンド・コンソールで、以下のコマンドを入力します。
B0000000000000001
4.
SignalTap II ウィンドウに戻り、時間 0 のときに以下のようになって
いることを確認します(図 18 を参照)。
z
z
z
Altera Corporation
local_write_req 信号が 1 サイクル立ち上がる
local_wdata が 00000001h を示す
local_address が 000000h を示す
6.1
37
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
図 18. ライト要求の波形
SignalTap II のトリガを local_read_req に設定する
SignalTap II ロジック・アナライザを使用して、リード動作をキャプチャ
します。リード動作を表示するには、以下の手順に従います。
1.
SignalTap II の Setup タブで、local_read_req の立ち上がりエッ
ジでのトリガを選択します(図 19 を参照)。
図 19. local_read_req 信号に対するトリガ設定
2.
38
暫定サポート
Run Once Analysis をクリックして、リード要求をキャプチャしま
す。
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
3.
Nios II コマンド・コンソールで、以下のコマンドを入力します。
C00000000
4.
SignalTap II ウィンドウに戻り、時間 0 のときに以下のようになって
いることを確認します(図 15 を参照)。
„
local_read_req 信号が立ち上がる
local_address が 000000h を示す
„
数クロック・サイクル後(システムのリード・レイテンシにより異
なる)
„
„
local_rdata_valid が 1 サイクル High になるとともに
local_rdata が 00000001h を示す
図 20. リード要求の波形
バースト・ライト動作のテスト
SignalTap II ロジック・アナライザを使用して、ライト動作をキャプチャ
します。ライト動作を表示するには、以下の手順に従います。
1.
Altera Corporation
SignalTap II の Setup タブで、local_write_req の立ち上がりエッ
ジでのトリガを選択します(図 21 を参照)。
6.1
39
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
図 21. local_write_req 信号に対するトリガの設定
2.
Run Once Analysis をクリックして、ライト要求をキャプチャしま
す。
3.
Nios II コマンド・コンソールで、以下のコマンドを入力します。
D0200100000000000
4.
SignalTap II ウィンドウに戻り、時間 0 のときに以下のようになって
いることを確認します(図 15 を参照)。
local_write_req 信号が数サイクル立ち上がる
local_wdata が 03020100h を示し、
続いて 07060504h など
を示す
z
local_address が 000000h を示し、続いて 000001h などを
示す
1
ライト・データは、最初から最後へ、MSB から LSB へのカ
ウント・フォーマットになっています。例えば、カウント
00,01,02,03 = 03020100h。
z
z
40
暫定サポート
6.1
Altera Corporation
SOPC Builder を使用した DDR2 SDRAM 高性能コントローラの実習
図 22. バースト・ライト要求の波形
バースト・リード動作のテスト
バースト・リード動作の実行はバースト・ライト動作の実行と似ていま
すが(39 ページの「バースト・ライト動作のテスト」を参照)、メモリ
位置がスワップされる点が異なります。バースト・リード動作を実行す
るには、以下の手順に従います。
1. SignalTap II の Setup タブで、local_read_req の立ち上がりエッ
ジでのトリガを設定します。
2. Run Once Analysis をクリックして、リード要求をキャプチャしま
す。
3.
Nios II コマンド・コンソールで、以下のコマンドを入力します。
D0000000002001000
Altera Corporation
6.1
41
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
このアプリケーション・ノートでは、最適な SOPC Builder Avalon-MM
アーキテクチャを実現するためのデザイン決定について検討しました。
単純な Nios II C プログラムを SignalTap II ロジック・アナライザと組み
合わせることにより、ハードウェアとソフトウェアの両方の動作をどの
ように検証できるかを実際に示しました。
結論
SDRAM 高性能コントローラを SOPC Builder システム・インタコネクト・
ファブリックと組み合わせる場合、以下の推奨事項を十分に検討する必
要があります。
„
„
„
„
„
ロウのアドレス指定時間を低減するために、シーケンシャルでない
アドレッシングを最小限にする。
コントローラの Avalon-MM インタフェース幅を Avalon-MM マスタ・
インタフェース幅と一致させる。
データのキャッシュ・サイズをメモリのバースト長と一致させる。
アービトレーション停止が発生する可能性がある場合、マルチマス
タ・デザインを最小限にする。
クロック・ドメイン・クロッシング・アダプタを取り除くか、最適
化する。
付録:main.c
テスト・プロ
グラム・ファ
イルの例
#include<stdio.h>
#include"sys/alt_dma.h"
#include "sys/alt_cache.h"
#include "system.h"
#include "altera_avalon_dma_regs.h"
#define length 512
int to_hex(char* pkt)
{
unsigned int value[8];
unsigned int value1=0;
unsigned int q;
for (q=0;q<=7;q++)
{
value[q]=(pkt[q]>0x39)?(pkt[q]-0x37):(pkt[q]-0x30);
if (q==0)
{
value1=(value1+value[q]);
}
else
{
42
暫定サポート
6.1
Altera Corporation
付録:main.c テスト・プログラム・ファイルの例
value1=((value1<<4)+value[q]);
}
}
}
return value1;
/******************************************************************
* Function: Main_menu
*
* Purpose: Prints the main menu commands
*
******************************************************************/
static void Main_menu(void)
{
printf("\n\n");
printf(" \n Select One of the following Commands \n");
printf( "\n Use Upper case \n");
printf(" \n Enter 'A' : Controls the LEDS:\n");
printf(" \n Enter 'B' : Single Write to an address location in
Memory:\n");
printf(" \n Enter 'C' : Single Read to an address location in Memory:\n");
printf(" \n Enter 'D' : Performs DMA operation with burst length of 512
words:\n");
printf( "\n Enter your command now \n");
}
/******************************************************************
* Function: LED_Control
*
* Purpose: Controls the LEDs..
*
******************************************************************/
void LED_Control(void)
{
unsigned int led_value;
unsigned char led[8];
printf(" \n LED Test opertaion \n");
printf( "\n Enter the value in Hex you want to write to the LEDs:(i.e.
000000FF)\n");
printf(" \n The last two bytes control all eight LEDs. \n");
gets(led);
led_value=to_hex(&led[0]);
printf(" \n Value to be displayed on LEDs is: %08x \n",led_value);
IOWR_32DIRECT(LED_PIO_BASE,0, led_value);
}
/******************************************************************
* Function: Single_Write
*
* Purpose: Performs a single write to an address location in memory.
Altera Corporation
6.1
43
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
*
******************************************************************/
void Single_Write(void)
{
unsigned char write_offset[8];
unsigned char data[8];
unsigned int DDR_write_OFFSET_ADDRESS;
unsigned int write_data;
printf(" \n Single Write opertaion \n");
printf( "\n Enter the data you want to write to the Memory:(i.e. 44444444)
\n");
gets(data);
write_data=to_hex(&data[0]);
printf( "\n Enter the offset address where you want to write in the Memory:
(i.e. 00000010)\n");
gets(write_offset);
DDR_write_OFFSET_ADDRESS = to_hex(&write_offset[0]);
if
((DDR_write_OFFSET_ADDRESS<0)||(DDR_write_OFFSET_ADDRESS>=(ALTMEMDDR_SPAN
/4)))
{
printf(" \n Invalid Offset \n");
printf( "\n You have entered wrong offset address : \n");
return;
}
IOWR(ALTMEMDDR_BASE,DDR_write_OFFSET_ADDRESS,write_data);
if (IORD(ALTMEMDDR_BASE,DDR_write_OFFSET_ADDRESS)==write_data)
{
printf("\n Data: %08x is correctly written to memory offset: %08x \n",
write_data,DDR_write_OFFSET_ADDRESS);
printf("\n Write operation is done \n");
}
else
{
printf("\n Write operation is Failed \n");
}
}
/******************************************************************
* Function: Single_Read
*
* Purpose: Performs a single read to an address location in memory
*
******************************************************************/
void Single_Read(void)
{
unsigned char read_offset[8];
unsigned int DDR_read_OFFSET_ADDRESS;
unsigned int read_data;
printf(" \n Single Read opertaion \n");
printf( "\n Enter the offset address from where you want to read in the
Memory:(i.e. 00000010) \n");
gets(read_offset);
44
暫定サポート
6.1
Altera Corporation
付録:main.c テスト・プログラム・ファイルの例
DDR_read_OFFSET_ADDRESS = to_hex(&(read_offset[0]));
if ((DDR_read_OFFSET_ADDRESS<0) ||
(DDR_read_OFFSET_ADDRESS>=(ALTMEMDDR_SPAN/4)))
{
printf(" \n Invalid Offset \n");
}
else
{
read_data=IORD(ALTMEMDDR_BASE,DDR_read_OFFSET_ADDRESS);
printf("Read %08x from address %08x
\n",read_data,(ALTMEMDDR_BASE+DDR_read_OFFSET_ADDRESS));
}
}
/******************************************************************
* Function: Verify Operation
*
* Purpose: Compares the memory contents of the read data master and write
data master
*
******************************************************************/
void Call_verify(unsigned char* source, unsigned char* destination)
{
if (memcmp(source,destination,(length*4))==0)
{
printf("\n DMA operation successful \n");
}
else
{
printf("\n DMA operation failed \n");
printf( "\n Please check that DMA is correctly setup \n ");
}
}
/******************************************************************
* Function: DMA_Operation
*
* Purpose: Performs an incremental write to the first address
location, followed by a DMA burst transfer from the first address
location to the second address location.
The burst is a fixed length of 512 words or 2048 bytes.
*
******************************************************************/
Altera Corporation
6.1
45
暫定サポート
SOPC Builder による高性能 DDR、DDR2、DDR3、SDRAM の使用
改訂履歴
表 3 に、このアプリケーション・ノートの改訂履歴を示します。
表 3. 改訂履歴
日付およびドキュメント・
バージョン
2008 年 3 月 v1.0
101 Innovation Drive
San Jose, CA 95134
Technical Support:
www.altera.com/support/
Literature Services:
[email protected]
46
暫定サポート
変更内容
初版
概要
—
Copyright © 2008 Altera Corporation. All rights reserved. Altera, The Programmable Solutions Company, the stylized
Altera logo, specific device designations, and all other words and logos that are identified as trademarks and/or service
marks are, unless noted otherwise, the trademarks and service marks of Altera Corporation in the U.S. and other
countries. All other product or service names are the property of their respective holders. Altera products are protected
under numerous U.S. and foreign patents and pending applications, maskwork rights, and copyrights. Altera warrants
performance of its semiconductor products to current specifications in accordance with Altera's standard warranty, but
reserves the right to make changes to any products and services at any time without notice. Altera assumes no
responsibility or liability arising out of the application or use of any information, product, or service described herein
except as expressly agreed to in writing by Altera Corporation. Altera customers are advised to
obtain the latest version of device specifications before relying on any published information and
before placing orders for products or services.
6.1
Altera Corporation