最近のインテル® FPGA では、当然のように DDRx などの外部メモリ・インタフェース(External Memory Interface / EMIF)をサポートしていますよね。ちなみに、EMIF を「いーみふ」とインテル® FPGA 関係者では呼んでいます。
インテル® FPGA にメモリ・コントローラを実装しようと思った時に、まずどんなことを考えますか?
- どの FPGA デバイスがサポートしているのか?
- どのメモリ規格をサポートしているのか?
- どの程度の転送レートをサポートしているのか?
などなど、いろいろ気になることがあると思います。
このページでは、初めてインテル® FPGA で EMIF を実現する人向けに、DDRx SDRAM コントローラを例に、簡単に選定から動作確認までの流れを紹介します。
EMIF サポート状況の確認
インテル® FPGA の EMIF サポート状況を確認するための便利なページを紹介します。
- 外部メモリ・インタフェース (インテルのサイト 日本語版)
- External Memory Interface (インテルのサイト 英語版)
このページ内にある『外部メモリ・インタフェース・スペック・エスティメータ』を使用すると、インテル® FPGA の EMIF サポート状況を確認することができます。デバイス・ファミリやスピード・グレード、インタフェースの種類、メモリ規格、周波数など、いろいろな条件を入れて検索することができます。(2019年10月現在、日本語版のページから外部メモリ・インタフェース・スペック・エスティメータへのリンクが切れていますので、英語版のページからアクセスしてください。)
「検索条件と項目を設定」をクリックすると、以下の設定画面が現れます。
最初はあまりガッツリ設定せず、ざっくりわかる範囲で指定して、徐々に条件を追加して絞り込んでいけば良いと思います。
ファミリ
使用する、もしく候補に挙がっているデバイス・ファミリにチェックを入れます。複数のデバイス・ファミリにチェックすることもできます。
全くチェックしなかった場合は、すべてのデバイス・ファミリが対象となります。
温度範囲 & スピード・グレード
デバイスの温度範囲やスピード・グレードにチェックを入れます。
<温度範囲>
下記の温度範囲が存在します。ただし、デバイスによって存在する温度範囲と存在しない温度範囲がありますので、詳しくは各デバイスのドキュメントをご覧ください。
- コマーシャル温度範囲(C 品):ジャンクション温度 0~85℃
- インダストリアル温度範囲(I 品):ジャンクション温度 -40~100℃
- オートモーティブ温度範囲(A 品):ジャンクション温度 -40~125℃
- 拡張温度範囲(E 品)::ジャンクション温度 0~100℃
- ミリタリー温度範囲(M 品):ジャンクション温度 -55~125℃
<スピード・グレード>
デバイス・ファミリによって、ある程度存在するスピード・グレードが決まっています。詳しくは各デバイスのドキュメントをご覧ください。
インタフェースの種類
- ソフト
ロジックや内部メモリなどの FPGA のリソースを消費してメモリ・コントローラを実装します。ソフト・メモリ・コントローラ(SMC)とよく呼ばれます。
- ハード
予めデバイス内部にハード・マクロとして搭載されているメモリ・コントローラを使用します。ハード・メモリ・コントローラ(HMC)とよく呼ばれます。
- ハード HPS
ARM* コア内蔵の SoC FPGA のハード・プロセッサ・システム(HPS)に搭載されたメモリ・コントローラを使用します。
メモリ規格
外部メモリ規格を選択します。
ローカル・インタフェースのクロック・レート
予め、指定がある場合は、選択してください。
イメージは、下図の通りです。(イメージしやすくするため、コントローラ ~ メモリ間を 400MHz(800Mbps)のダブル・データ・レートを例にしています。)
簡単に言うと、コントローラ ~ メモリ間は高速、かつダブル・データ・レートでデータ伝送されますが、FPGA 内はダブル・データ・レートのままではデータ処理できないので、まず同周波数でシングル・データ・レートに変換します。でも、この時、データ幅が倍になります。これが、フル・レートです。
次に、フル・レートで周波数が高すぎて FPGA 内でデータ処理できない場合は、更に周波数を半分にします。でも、この時、データ幅が更に倍になります。これが、ハーフ・レートです。
更に、ハーフ・レートでも周波数が高すぎて FPGA 内でデータ処理できない場合は、更に周波数を半分にします。でも、この時、データ幅が更に倍になります。これが、クォーター・レートです。
メモリ・トポロジー & ランク
この項目は、まずメモリ・トポロジー選択します。大きくはコンポーネント(メモリ・デバイス)かモジュール(DIMM)かを選び、DIMM の場合は更にどのタイプの DIMM かを選択します。
DIMM の場合は、どのランクの DIMM かを選択します。
コンポーネントの場合は、チップ・セレクトの数を指定します。
インタフェース I/O の位置
この項目では、FPGA のどのバンクに EMIF 関連のピンを配置するかを指定します。FPGA によっては、I/O バンクの位置によってサポートする転送レートが異なるものがあります。
I/O 規格
メモリ・インタフェースの I/O 規格(I/O Standard)を選択します。
最大周波数 (MHz)
メモリ・インタフェース(メモリ・コントローラ ~ メモリ間)の周波数の上限と下限を指定します。
検索結果
「条件を確定し、検索」をクリックすると、指定した条件を満たした結果が表示されます。結果が表示された後も、更に条件を指定して絞り込むことができます。
この結果から、外部メモリ・インタフェース部については採用する FPGA の候補がわかりましたので、他のインタフェースや条件、仕様などを加味して、使用する FPGA を検討してください。
詳細な情報
- 外部メモリ・インタフェース (インテルのサイト)
======================================
実践編
実践編として、インテル® FPGA に実装するメモリ・コントローラの生成やシミュレーション方法、開発キットを使用した動作確認の方法を紹介します。
DDR4
DDR3
デザイン&デバッグ・ガイドライン
外部メモリ・インタフェース(External Memory Interface/EMIF)の高速化に伴い、データ・バリッド・ウインドウ(データの有効なウィンドウ)の縮小や信号品質の悪化が課題として挙げられています。
要求仕様を満たすための検証やデバッグに費やす時間が増加傾向にあるため、適切な手順でデバイス・ボードの設計を行い、かつ、設計段階であらかじめデバッグするための手段を実装することが重要です。
本資料はデザイン・フローとデバッグ・フローを示し、適切な手順で設計することにより、不具合の混入を防ぐこととデバッグに必要な仕組みを実装することにより、速やかに問題を解決することを目的として作成されたものです。
FPGA の EMIF デザイン & デバッグ・ガイドライン
おすすめ記事/資料はこちら
インテル® FPGA で DDR3 動作!(実践編)[1/2]
インテル® FPGA で DDR3 動作!(実践編)[2/2]
インテル® FPGA で DDR4 動作!(実践編)
FPGA の EMIF デザイン & デバッグ・ガイドライン
インテル® FPGA の開発フロー/トップページ