AN 763: インテル Arria 10 SoCデバイスのデザイン・ガイドライン
バージョン情報
更新対象: |
---|
インテル® Quartus® Prime デザインスイート 18.1 |
この翻訳版は参照用であり、翻訳版と英語版の内容に相違がある場合は、英語版が優先されるものとします。翻訳版は、資料によっては英語版の更新に対応していない場合があります。最新情報につきましては、必ず英語版の最新資料をご確認ください。 |
1. インテル Arria 10 SoC FPGAのデザイン・ガイドラインの概要
このデザイン・ガイドラインは、 インテル® Arria® 10 SoC FPGAデバイスを使用するデザインに向けた一連のガイドラインと推奨事項、および考慮すべき項目を提供しています。このガイドラインは、 インテル® Arria® 10 SoC FPGAデザイン、プラットフォーム・デザイナーのサブシステム・デザイン、ボードデザイン、ソフトウェア・アプリケーション・デザインのプランニングおよび初期設計段階をサポートします。
このアプリケーション・ノートには、 インテル® Arria® 10ハード・プロセッサー・システム (HPS) のデバイスの詳細、機能、ハードウェアまたはソフトウェア・システムのデザインに関する情報がすべて含まれているわけではありません。 インテル® Arria® 10 HPSの機能および各ペリフェラルについての詳細は、Intel Arria 10 Hard Processor System Technical Reference Manualを参照してください。
インテルでは、 インテル® Quartus® Primeプロ・エディションおよびSoC EDSプロ・エディションを使用して、 インテル® Arria® 10のデザインを開発することを推奨しています。 インテル® Quartus® Primeスタンダード・エディションおよびSoC EDSスタンダード・エディションは引き続き インテル® Arria® 10 SoCファミリーをメンテナンス・ベースでサポートしますが、今後の機能拡張に関しては、サポートされているソフトウェアである インテル® Quartus® Primeプロ・エディションおよびSoC EDSプロ・エディションを使用してください。
インテル® Quartus® Primeプロ・エディションで開発されたハードウェアは、SoC EDSプロ・エディションで開発されたソフトウェアのみをサポートします。 インテル® Quartus® Primeスタンダード・エディションで開発されたハードウェアは、SoC EDSスタンダード・エディションで開発されたソフトウェアのみをサポートします。
1.1. SoC FPGAの設計者に向けたチェックリスト
1.2. SoC FPGAデザインに向けたHPSのデザイン・ガイドラインの概要
HPSデザインフローの各段階 |
ガイドライン |
リンク |
---|---|---|
ハードウェアとソフトウェアの分割 |
使用するシステムトポロジーを決定し、それをHPSとFPGA間のインターフェイス・デザインの開始点として使用します。 |
インテル Arria 10 HPSとFPGAのインターコネクト接続に関するガイドライン |
HPSのピンの多重化とI/Oコンフィグレーションの設定 |
I/O多重化のオプション、FPGAおよびSDRAMへのインターフェイス、クロック、ペリフェラルの設定を含むHPSシステムのコンフィグレーション設定を計画します。 |
デバイスのI/OをHPSペリフェラルおよびメモリーに接続するためのデザインにおける考慮事項 |
HPSのクロックとリセットに関する考慮事項 |
HPSのクロックおよびコールドリセットまたはウォームリセットに関する考慮事項 |
HPSのクロックおよびリセットに関するデザインの考慮事項 |
HPS EMIFに関する考慮事項 |
HPS EMIFコントローラーの使用方法および関連する考慮事項 |
HPS EMIFに関するデザインの考慮事項 |
FPGAアクセラレーターに関するデザインの考慮事項 |
FPGAアクセラレーターとHPS間のコヒーレンシー管理に関するデザインの考慮事項 |
DMAに関する考慮事項 |
1.3. SoC FPGAデザインに向けたボード・デザイン・ガイドラインの概要
ボード・デザイン・フローの各段階 |
ガイドライン |
リンク |
---|---|---|
HPSの電源に関するデザインの考慮事項 |
オンボード電源の立ち上げ、早期消費電力見積もり、HPSとFPGAの電源に関するデザインの考慮事項、消費電力解析、および消費電力の最適化 |
HPSの消費電力に関するデザインの考慮事項 |
FPGAリコンフィグレーション |
HPSのリブートを伴うフラッシュ・アップデートまたはパーシャル・リコンフィグレーションを使用する際は、FPGAのリコンフィグレーションは応答しなくなります。 |
FPGAのリコンフィグレーション |
HPSインターフェイスに向けたボード・デザイン・ガイドライン |
EMAC、USB、QSPI、SD/MMC、NAND、UART、およびI2Cを含みます。 |
HPSインターフェイスのデザイン・ガイドライン |
1.4. SoC FPGAデザインに向けたエンベデッド・ソフトウェアのデザイン・ガイドラインの概要
エンベデッド・ソフトウェア・デザイン・フローの各段階 |
ガイドライン |
リンク |
---|---|---|
オペレーティング・システム (OS) に関する考慮事項 |
リアルタイム、ソフトウェアの再利用、サポート、使いやすさに関する考慮事項など、アプリケーションのニーズを満たすためのOSに関する考慮事項 |
アプリケーションに向けたオペレーティング・システムの選択 |
ブートローダーに関する考慮事項 |
GPLの要件や機能など、アプリケーションのニーズを満たすためのブートローダーに関する考慮事項 |
ブート・ローダー・ソフトウェアの選択 |
ブートおよびコンフィグレーションに関するデザインの考慮事項 | ブートソース、ブートクロック、ブートヒューズ、コンフィグレーション・フロー | ブートおよびコンフィグレーションに関するデザインの考慮事項 |
HPS ECCに関する考慮事項 |
外部SDRAMインターフェイス、L2キャッシュ・データ・メモリー、フラッシュメモリーのECC |
HPS ECCに関するデザインの考慮事項 |
セキュリティーに関するデザインの考慮事項 | セキュアブート、セキュアデザインIP、暗号化と認証 | セキュリティーに関するデザインの考慮事項 |
エンベデッド・ソフトウェアのデバッグとトレース | トレースおよびトレース・インターフェイスの種類 | エンベデッド・ソフトウェアのデバッグとトレース |
開発、デバッグおよびトレースに向けたソフトウェア・ツール |
ソフトウェア・ツールの選択に関するデザインの考慮事項 |
開発、デバッグおよびトレースに向けたソフトウェア・ツールの選択 |
1.5. インテル Arria 10 SoC FPGAのデザイン・ガイドラインの概要の改訂履歴
ドキュメント・バージョン | 変更内容 |
---|---|
2020.08.14 | メンテナンス・リリース |
2019.04.17 | メンテナンス・リリース |
2019.03.18 | メンテナンス・リリース |
2017.12.20 | メンテナンス・リリース |
2017.05.08 | インテル® Quartus® Primeプロ・エディション、 インテル® Quartus® Primeスタンダード・エディション、SoC EDSプロ・エディション使用時のガイダンスを追加しました。 |
2016.09.16 | 初版 |
2. インテル Arria 10 HPSとFPGAのインターコネクト接続に関するガイドライン
HPSとFPGAファブリック間のメモリーマップによる接続は、デザインの最良のパフォーマンスを実現するための重要なツールです。推奨されているトポロジーに関するこの章のガイドラインを使用し、システムのパフォーマンスを最適化します。
2.1. HPSメモリーマップド・インターフェイスの概要
HPSは、5つのArm* Advanced Microcontroller Bus Architecture 3 (AMBA*) 3 Advanced eXtensible Interface (AXI*) メモリー・マップド・インターフェイスをHPSとFPGAファブリック間のメモリー転送に公開します。各ポートには、異なる目的と関連付けられている方向があります。
プラットフォーム・デザイナーのHPSコンポーネントは、 Avalon® -MMインターフェイスを実装しているマスターおよびスレーブ、もしくは、 AMBA* 3 AXIや AMBA* 4 AXI4などのサポートされている AMBA* 3および4インターフェイスに接続することができます。プラットフォーム・デザイナーはインターコネクトを生成し、異なる性能を備える、もしくは異なるプロトコルを使用しているインターフェイス間の相互運用に対応します。
2.1.1. HPS-to-FPGAブリッジ
ガイドライン: HPS-to-FPGAブリッジを使用し、FPGAがホストとなるメモリーをHPSに接続します。
HPS-to-FPGAブリッジにより、マイクロプロセッサー・ユニット (MPU)、DMA、またはマスターが統合されているペリフェラルなどのHPS内のマスターは、SoCデバイスのFPGA部分がホストをするメモリーにアクセスすることができます。このブリッジは32、64、128ビットのデータパスをサポートするため、ブリッジに接続されるFPGAファブリックの最大スレーブデータ幅に合わせて幅を調整することができます。このブリッジは、バースト転送を実行するマスターで使用することを目的としており、FPGAファブリックのペリフェラル・レジスターへのアクセスに使用することは避けてください。コントロールおよびステータス・レジスター・アクセスは、Lightweight HPS-to-FPGAブリッジに送信します。
ガイドライン: HPS-to-FPGAブリッジに接続されているメモリーをHPSブートに使用する場合は、プラットフォーム・デザイナーでスレーブアドレスを0x0に設定していることを確認します。
HPS BSELピンがFPGAからブートするように設定されている場合 (BSEL = 1)、プロセッサーは、FPGAによってホストされるオフセット0x0にあるコードをHPS-to-FPGAブリッジから実行します。このブリッジは、ブート時にコードをホストするために使用できる唯一のブリッジです。
2.1.2. Lightweight HPS-to-FPGAブリッジ
ガイドライン: Lightweight HPS-to-FPGAブリッジを使用し、HPSで制御する必要があるIPを接続します。
Lightweight HPS-to-FPGAブリッジにより、HPSのマスターは、SoCデバイスのFPGA部分のメモリーマッピングされたコントロール・スレーブ・ポートにアクセスできます。通常、HPS内のMPUのみがこのブリッジにアクセスし、FPGA内のペリフェラルへのコントロールおよびステータス・レジスター・アクセスを実行します。
ガイドライン: Lightweight HPS-to-FPGAブリッジをFPGAメモリーに使用しないでください。代わりに、HPS-to-FPGAブリッジをメモリーに使用します。
MPUがペリフェラル内のコントロールおよびステータス・レジスターにアクセスする際は、これらのトランザクションは通常、厳密に順序付けられます (ポストされません)。Lightweight HPS-to-FPGAブリッジをレジスターアクセス専用にすることで、バースト・トラフィックがHPS-to-FPGAブリッジにルーティングされるため、アクセス時間が最小限に抑えられます。ほとんどのIPコアは32ビットのコントロールおよびステータスレジスターを実装しているため、Lightweight HPS-to-FPGAブリッジは、FPGAファブリックへの固定32ビット幅の接続を備えています。ただし、プラットフォーム・デザイナーは、FPGAで生成されるネットワーク・インターコネクト内において、トランザクションを32ビット以外の幅に適応させることができます。
2.1.3. FPGA-to-HPSブリッジ
ガイドライン: FPGA-to-HPSブリッジを、FPGAのマスターからHPSへのキャッシュ可能なアクセスに使用します。
FPGA-to-HPSブリッジにより、FPGAファブリックに実装されているマスターは、HPS内のメモリーおよびペリフェラルにアクセスできます。このブリッジは、32、64、128ビットのデータパスをサポートするため、FPGAに実装されているマスターの最大幅に合わせて幅を調整することができます。
ガイドライン: FPGA-to-HPSブリッジを使用し、FPGAのマスターからHPSのキャッシュ・コヒーレント・メモリー、ペリフェラル、オンチップRAMにアクセスします。
このブリッジでSDRAMサブシステムに直接接続することはできますが、このブリッジの主な目的は、ペリフェラルおよびオンチップメモリーへのアクセスを提供すること、また、MPUアクセラレーター・コヒーレンシー・ポート (ACP) への接続でキャッシュ・コヒーレンシーを提供することです。
コヒーレンシーを伴わずにHPS SDRAMに直接アクセスするには、FPGAのマスターをこのブリッジではなくFPGA-to-SDRAMポートに接続する必要があります。このポートは、より広い帯域幅と低レイテンシーなアクセスを提供します。
2.1.4. FPGA-to-SDRAMポート
ガイドライン: FPGAのマスターからHPS SDRAMへのキャッシュ不可能なアクセスには、FPGA-to-SDRAMポートを使用します。
FPGA-to-SDRAMポートにより、FPGAファブリックに実装されているマスターは、L3メイン・インターコネクトを経由するトランザクションを使用することなくHPS SDRAMに直接アクセスできるようになります。このインターフェイスはHPS SDRAMサブシステムにのみ接続するため、FPGAがHPS SDRAMへの高スループットで低レイテンシーなアクセスを必要とする場合に、このインターフェイスをデザインで使用します。FPGAでキャッシュ・コヒーレントなアクセスが必要な場合は、この推奨事項は当てはまりません。FPGA-to-SDRAMインターフェイスはMPU ACPスレーブにアクセスすることができないため、FPGAに実装されているマスターでキャッシュ・コヒーレントなデータにアクセスする必要がある場合は、代わりに、FPGA-to-HPSに接続するようにします。
FPGA-to-SDRAMポートは3つあります。FPGA-to-SDRAM0およびFPGA-to-SDRAM2は32、64、128ビットのデータパスをサポートし、FPGA-to-SDRAM1は32ビットおよび64ビットのデータパスをサポートします。ポート・コンフィグレーションの組み合わせは4つ利用可能であり、FPGA-to-SDRAM0およびFPGA-to-SDRAM2が128ビットのデータパスに設定されている場合に最大の総帯域幅を利用することができます。各FPGA-to-SDRAMポートは、L3メイン・インターコネクトおよびMPUに接続するポートを含め、個別に処理されます。次の表に、FPGA-to-SDRAMポートで可能な4つの組み合わせを示します。
ポート・コンフィグレーション |
FPGA-to-SDRAM0 |
FPGA-to-SDRAM1 |
FPGA-to-SDRAM2 |
---|---|---|---|
1 |
32ビット |
32ビット |
32ビット |
2 |
64ビット |
64ビット |
64ビット |
3 |
128ビット |
利用できません |
128ビット |
4 |
128ビット |
32ビット |
64ビット |
ガイドライン: FPGA-to-SDRAMポートを介してデータにアクセスする前に、FPGA-to-SDRAMポートを介してFPGAによってアクセスされるデータが、レベル1 (L1) キャッシュおよびレベル2 (L2) キャッシュからフラッシュされることを確認します。
これにより、FPGAがデータへのアクセスを試みる前に、データの最新のコピーがSDRAMに存在することを保証します。
2.1.5. インターフェイスの帯域幅
HPSとFPGAファブリック間のデータの移動に使用するインターフェイスを特定するには、各インターフェイスの帯域幅を理解する必要があります。次の図は、HPSとFPGAファブリック間で利用可能なピーク・スループットおよびHPSの内部帯域幅を表しています。この例では、FPGAファブリックは250MHz、MPUは1200MHz、そして64ビットの外部SDRAMは1067MHzで動作することを前提にしています。
FPGAからSDRAMへのインターフェイスには、ポート・コンフィグレーション3が使用されます (FPGA-to-SDRAM0およびFPGA-to-SDRAM2はどちらも128ビット幅)。
略語については、HPSメモリーマップド・インターフェイスの概要の図を参照してください。
各HPSインターフェイスの相対遅延とスループット
インターフェイス |
トランザクションの使用例 |
レイテンシー |
スループット |
使用モデルとして推奨される |
---|---|---|---|---|
HPS-to-FPGA |
MPUがFPGAのメモリーにアクセスする場合 |
中 |
中 |
はい |
HPS-to-FPGA |
MPUがFPGAのペリフェラルにアクセスする場合 |
中 |
非常に低い |
いいえ — ガイドライン: HPS-to-FPGAブリッジを使用してMPUからFPGAのペリフェラル・レジスターにアクセスすることは避けてください。 を参照してください。 |
Lightweight HPS-to-FPGA |
MPUがFPGAのレジスターにアクセスする場合 |
低 |
低 |
はい |
Lightweight HPS-to-FPGA |
MPUがFPGAのメモリーにアクセスする場合 |
低 |
非常に低い |
いいえ — ガイドライン: Lightweight HPS-to-FPGAブリッジを使用してMPUからFPGAのメモリーにアクセスすることは避けてください。 を参照してください。 |
FPGA-to-HPS |
FPGAマスターがキャッシュ・コヒーレントではないSDRAMにアクセスする場合 |
高 |
中 |
いいえ — ガイドライン: FPGA-to-HPSブリッジを使用して非キャッシュ・コヒーレントのSDRAMにFPGAのソフトロジックからアクセスすることは避けてください。 を参照してください。 |
FPGA-to-HPS |
FPGAマスターがHPSオンチップRAMにアクセスする場合 |
低 |
高 |
はい |
FPGA-to-HPS |
FPGAマスターがHPSペリフェラルにアクセスする場合 |
低 |
低 |
はい |
FPGA-to-HPS |
FPGAマスターがコヒーレント・メモリーにアクセスし、キャッシュミスになる場合 |
高 |
中 |
はい |
FPGA-to-HPS |
FPGAマスターがコヒーレント・メモリーにアクセスし、キャッシュヒットになる場合 |
低 |
中から高 |
はい |
FPGA-to-SDRAM |
FPGAマスターが単一のFPGA-to-SDRAMポートを介してSDRAMにアクセスする場合 |
中 |
高 |
はい |
FPGA-to-SDRAM |
FPGAマスターが複数のFPGA-to-SDRAMポートを介してSDRAMにアクセスする場合 |
中 |
非常に高い |
はい |
ガイドライン: HPS-to-FPGAブリッジを使用してMPUからFPGAのペリフェラル・レジスターにアクセスすることは避けてください。
HPS-to-FPGAブリッジはバースト・トラフィックに最適化されており、ペリフェラル・アクセスは通常、1ビートのみの短いワードサイズのアクセスです。そのため、HPS-to-FPGAブリッジを介してペリフェラルにアクセスした場合、すでにインフライト状態のほかのバースト・トラフィックによってトランザクションがストールする可能性があります。
ガイドライン: Lightweight HPS-to-FPGAブリッジを使用してMPUからFPGAのメモリーにアクセスすることは避けてください。
Lightweight HPS-to-FPGAブリッジは非バーストのトラフィックに最適化されており、メモリーアクセスは通常、バーストとして実行されます (キャッシュ操作のために多くの場合32バイト)。そのため、Lightweight HPS-to-FPGAブリッジを介してメモリーにアクセスすると、スループットが制限されます。
ガイドライン: FPGA-to-HPSブリッジを使用して非キャッシュ・コヒーレントのSDRAMにFPGAのソフトロジックからアクセスすることは避けてください。
FPGA-to-HPSブリッジは、SDRAM以外のアクセス (ペリフェラル、オンチップRAM、ACP) に最適化されています。そのため、非コヒーレントなアクセスを実行してSDRAMに直接アクセスすると、FPGA-to-SDRAMポートからのアクセスに比べてレイテンシーが増加し、スループットが制限されます。
ガイドライン: FPGAのソフトロジック (DMAコントローラーなど) を使用し、共有データをHPSとFPGA間で移動します。MPUおよびHPS DMAコントローラーをこの目的で使用することは避けてください。
HPSとFPGA間で共有データを移動する場合、インテルでは、MPUまたはHPS DMAコントローラーを使用してデータを移動するのではなく、FPGAから行うことを推奨しています。FPGAでキャッシュ・コヒーレントなデータにアクセスする必要がある場合は、FPGA-to-HPSブリッジにアクセスし、適切な信号でキャッシュ可能なトランザクションを発行する必要があります。キャッシュ・コヒーレントではないデータをFPGAまたはHPSに移動する必要がある場合は、FPGAロジックに実装されているDMAエンジンでデータを移動することにより、可能な限り最高のスループットを実現することができます。HPS内には、HPSとFPGAの間でデータを移動することができるDMAエンジンが含まれていますが、その目的は、メモリーのマスターになることがないペリフェラルの支援、またはメモリー間のデータ移動をMPUに代わって提供することです。
ガイドライン: HPS-to-FPGAブリッジもしくはFPGA-to-SDRAMポートを介してデータを移動する必要があるデザインの開始点として、HPS-to-FPGA Bridges Design Exampleを使用します。
インテルでは、Arria 10 SoC開発キットを所有しているユーザーに、FPGA-to-HPSブリッジおよびFPGA-to-SDRAMポートを介してデータを移動するデザイン例を提供しています。このデザインでは、さまざまなバーストサイズでの各インターフェイスのスループットを測定するため、さまざまな条件下でメモリーの帯域幅がどのように変化するかを確認することができます。
2.2. 推奨されるシステムトポロジー
適切なシステムトポロジーを選択することは、デザインで可能な限り最高のスループットを実現することにつながります。最適なパフォーマンスを実現するには、インテルが提供しているHPSとFPGA間でデータを移動するためのトポロジー・ガイドラインに従ってください。これらのガイドラインは、キャッシュ・コヒーレントおよび非キャッシュ・コヒーレントなデータ移動をどちらも網羅しています。
2.2.1. FPGAファブリックへのHPSのアクセス
HPSのマスターがFPGAファブリックにアクセスするために使用できるブリッジは2つあります。それぞれのブリッジは特定のトラフィック・パターンに最適化されているため、HPSマスターがFPGAファブリックにアクセスする必要がある場合、どちらのブリッジがシステムに適切かを決定する必要があります。
ガイドライン: Lightweight HPS-to-FPGAブリッジを介してHPSをFPGAのソフト・ロジック・ペリフェラルに接続します。
ハードウェア・デザインにHPSからアクセス可能なペリフェラルがある場合は、それらをLightweight HPS-to-FPGAブリッジに接続する必要があります。ペリフェラルは通常、厳密に順序付けられた (ポストされない) アクセスによってHPSのMPUから1レジスターずつアクセスされます。アクセスは厳密に順序付けられているため、MPUからのトランザクションはスレーブからの応答が返されるまで完了しません。そのため、厳密に順序付けられているアクセスはレイテンシーに影響されやすくなります。よって、Lightweight HPS-to-FPGAブリッジをHPSに含むことで、厳密に順序付けられているアクセスのレイテンシーを低減します。
ガイドライン: HPS-to-FPGAブリッジを介してHPSをFPGAメモリーに接続します。
ハードウェア・デザインにHPSからアクセス可能なメモリーがある場合は、それをHPS-to-FPGAブリッジに接続する必要があります。Lightweight HPS-to-FPGAブリッジとは異なり、HPS-to-FPGAブリッジは、DMA転送やFPGAメモリーからのMPUソフトウェアの実行などのバースト・トラフィックに使用することを目的としています。
ガイドライン: HPSがFPGAロジックのメモリーとペリフェラルの両方にアクセスする必要がある場合は、HPS-to-FPGAブリッジとLightweight HPS-to-FPGAブリッジを使用します。
FPGAロジックにHPSからアクセス可能なメモリーとペリフェラルが混在する場合は、HPS-to-FPGAブリッジとLightweight HPS-to-FPGAブリッジをどちらもデザインに含めることが重要です。一般的にペリフェラル・アクセスはレイテンシーに影響されやすいため、FPGAファブリックへのほかのバーストアクセスがHPS-to-FPGAブリッジを介して行われている際に、Lightweight HPS-to-FPGAブリッジをペリフェラル・アクセスに使用することで、スタベーションを防ぎます。複数のHPSマスターがFPGAファブリックに同時にアクセスしている場合、両方のブリッジには並行してアクセスすることが可能なため、両方のブリッジを含めることはシステムのパフォーマンスの向上にもつながります。
2.2.2. キャッシュ・コヒーレンシーの維持
キャッシュ・コヒーレンシーは、システム内の複数のマスター間で常にデータを共有する必要があることを理解する際の基本的な内容です。SoCデバイスにおけるこれらのマスターは、MPU、DMA、マスター・インターフェイスを備えるペリフェラル、およびHPSに接続されるFPGAのマスターになります。MPUにはレベル1およびレベル2のキャッシュ・コントローラーが含まれているため、システムのメインメモリーよりも多くの最新コンテンツを保持することができます。HPSは、システム内のマスターがメモリーの一貫したビューを得るための2つのメカニズムをサポートします。これらのメカニズムとは、メインメモリーに最新の値が含まれるようにするもの、もしくは、マスターによってHPSのACPスレーブにアクセスするものです。
MPUは、バッファーをキャッシュ不可になるように割り当てることで、L1およびL2キャッシュによってデータがキャッシュされないようにすることができます。MPUはまた、キャッシュ可能なデータにアクセスし、ほかのマスターがデータへのアクセスを試みる前にデータをメインメモリーにフラッシュする、もしくはキャッシュ不可のバッファーにコピーすることができます。オペレーティング・システムは通常、キャッシュ・コヒーレンシーを維持する上記の両方のメカニズムを提供します。
システム内のマスターは、MPUに依存してデータをキャッシュせずにメインメモリーに配置する、もしくは、システム内のマスターがACPスレーブを介してキャッシュ可能なアクセスを実行することにより、コヒーレントなデータにアクセスします。使用するメカニズムは、マスターがアクセスしているメモリーのバッファーサイズによって異なります。
ガイドライン: スラッシングのオーバーヘッドを回避するため、ACPスレーブを介してアクセスされるデータが512KBのL2キャッシュに収まるようにします。
L2キャッシュのサイズは512KBであるため、合計サイズが512KBを超えるバッファーにシステム内のマスターが頻繁にアクセスすると、スラッシングが発生します。
キャッシュのスラッシングは、データサイズがキャッシュサイズを超え、キャッシュで頻繁にエビクションとメインメモリーへのプリフェッチが引き起こされる状況です。スラッシングにより、データをキャッシュすることによるパフォーマンス上の利点が打ち消されます。
スラッシングの可能性がある状況では、マスターが非キャッシュ・コヒーレントなデータにアクセスし、MPUで実行されているソフトウェアでシステム全体のデータ・コヒーレンシーを維持する方法がより合理的です。
ガイドライン: MPUとシステムのマスターで共有されるデータの小さなバッファーの場合は、システムのマスターによってキャッシュ可能なアクセスを実行し、キャッシュのフラッシュ動作によるオーバーヘッドを回避することを検討します。
システム内のマスターがより小さなコヒーレント・データ・ブロックへのアクセスを必要とする場合は、MPUがキャッシュ可能なメモリーとしてバッファーにアクセスし、システム内のマスターがデータへのキャッシュ可能なアクセスを実行することを検討する必要があります。キャッシュ可能なアクセスは自動的にMPU ACPスレーブにルーティングされるため、マスターとMPUがデータの同じコピーにアクセスすることが保証されます。MPUがキャッシュ可能なバッファーを使用し、システムマスターがキャッシュ可能なアクセスを実行することにより、ソフトウェアでは、システム全体のコヒーレンシーを維持してMPUとシステムマスターがデータの同じコピーを認識することを保証する必要がなくなります。
2.2.2.1. ACPに関連するロックアップの回避
- CPUが、FPGAファブリックへのデバイス・メモリー・アクセスを開始します。CPUのパイプラインは、このタイプのアクセスが完了するまで停止している必要があります。
- FPGAファブリックのステートマシンでは、デバイス・メモリー・アクセスに応答する前に、HPSにコヒーレントにアクセスする必要があります。そのため、ACPを必要とするコヒーレント・アクセスを開始します。
- ACPでは、アクセスを完了する前に、キャッシュのメンテナンス操作を行う必要があります。ただし、CPUのパイプラインが停止しているため、キャッシュのメンテナンス操作を実行することができません。システムでデッドロックが発生します。
アクセスをより小さく分割することで、デッドロックを発生させることなく必要なアクセスを実装することができます。例えば、1つのアクセスで動作を開始し、2番目のアクセスで動作のステータスを特定することが可能です。
2.2.3. FPGAとデータを共有するMPU
データのスループットは、HPSとFPGA間においてデータを共有する正しい方法を選択することで最適化することができます。この章では、HPS SDRAMがデータソースであり、FPGAでそれにアクセスする必要があると仮定します。FPGAがHPS SDRAMを起源とするデータにアクセスする方法は、主に3つあります。
- FPGAがFPGA-to-SDRAMポートを介してデータに直接アクセスする
- FPGAがFPGA-to-HPSブリッジを介してデータに直接アクセスする
- FPGAがHPS DMAを介してFPGAに移されたデータのコピーにアクセスする (非推奨)
SDRAMのデータがデータの最新のコピー (ソフトウェアで管理されるコヒーレンシー) である場合、最高のスループットでデータにアクセスする方法は、FPGAのマスターがFPGA-to-SDRAMポートを介してデータに直接アクセスすることです。
SDRAMのデータがデータの最新のコピーではない可能性があり、ソフトウェアがMPUキャッシュをフラッシュしてシステム全体のコヒーレンシーを維持しない場合は、FPGAマスターでFPGA-to-HPSブリッジにキャッシュ可能なトランザクションを実行し、最新のデータがアクセスされるようにします。
ガイドライン: HPS DMAコントローラーを使用してFPGAとHPS間でデータを移動させることは避けてください。代わりに、FPGAファブリックのソフトDMAコントローラーを使用します。HPS DMAコントローラーは、HPS内でのメモリーコピーまたはペリフェラル・データの移動にのみ使用します。
HPS SDRAMへのDMA帯域幅は制限されているため、FPGAへのデータの移動にHPS DMAを使用しないでください。HPS DMAは、MPUに代わってバッファーを移動させるために使用する、もしくはペリフェラルとメモリー間の転送に使用することを目的としています。そのため、FPGAがHPSメモリーのバッファーにアクセスする必要がある場合、もしくはHPSがFPGAに保存されているデータにアクセスする必要がある場合は、HPSでこれらの転送を開始するのではなく、FPGAのマスターでこれらの転送を実行することが常に推奨されます。
2.2.4. FPGAからのキャッシュ可能およびキャッシュ不可能なデータアクセスの例
2.2.4.1. 例1: FPGAでHPS SDRAMから直接データを読み出す
この例では、FPGAはHPS SDRAMに保存されているデータへのアクセスを必要とします。MPUがアクセスするものと同じデータのコピーにFPGAがアクセスするには、L1データキャッシュとL2キャッシュにデータのコピーがすでにある場合は、それらをフラッシュする必要があります。HPS SDRAMにデータの最新のコピーが含まれた後に、FPGAでこのデータにアクセスする最適なパスは、FPGAのマスターがFPGA-to-SDRAMポートを介してデータを読み出すことです。
Arria 10 HPSは、SDRAMへの128ビット・ポートを2つ提供します。そのため、FPGAに2つのマスターを実装し、両方のポートを介してSDRAMのデータにアクセスすることにより、読み出しスループットを最大限まで引き上げることができます。FPGA-to-SDRAMポートを介してSDRAMへの複数のパスを実装する場合、各ポートはそれぞれ独立して処理されるため、システムレベルで同期を処理するようにしてください。1つのポートをもう一方のポートよりも優先する場合は、各ポートのQoS設定を調整し、アプリケーションでの必要性に応じてトラフィック・パターンを形成することができます。バースト対応可能なFPGAのマスターを使用し、4ビート以上のバースト長をポストできるFPGA-to-SDRAMポートから読み出すことが推奨されます。
2.2.4.2. 例 2: FPGAでHPS SDRAMにデータを直接書き込む
この例では、HPSのMPUはFPGA内を起源とするデータへのアクセスを必要とします。データの書き込み後にMPUがコヒーレンシーをもってデータにアクセスするためには、転送が開始する前にソフトウェアでキャッシュラインをフラッシュまたは無効化し、書き込み後にSDRAMに最新のデータが含まれるようにする必要があります。キャッシュ操作を実行しないと、1つまたは複数のキャッシュラインが最終的にエビクションされ、FPGAマスターによって書き込まれたデータが上書きされる可能性があります。
例1のような、FPGAがFPGA-to-SDRAMポートからデータを読み出す場合と同様に、HPS SDRAMへの書き込みスループットは、2つの128ビットFPGA-to-SDRAMポートを使用し、それぞれのポートに少なくともFPGAの1つのマスターを接続することにより最大化することができます。
2.2.4.3. 例3: FPGAでキャッシュ・コヒーレントなデータをHPSから読み出す
この例では、FPGAはHPSを起源とするデータへのアクセスを必要とします。HPSのMPUがこのデータに最近アクセスしたため、データがまだキャッシュに含まれている可能性があります。よって、キャッシュされたデータにFPGAでアクセスすることが最適だと考えられます。ダーティー・キャッシュ・ラインをフラッシュする必要があるソフトウェアのオーバーヘッドを回避するために、FPGAはFPGA-to-HPSブリッジへのキャッシュ・コヒーレントな読み出しを実行することができます。読み取られるバッファーのサイズは比較的小さいことが重要です。これに従わない場合、L2キャッシュでは、ほとんどの転送において、SDRAMからのデータの読み出しでスラッシングが発生する可能性があります。大規模なバッファーの転送には、例1で示されているように、FPGAがFPGA-to-SDRAMポートから直接データを読み出すほうがより適切です。
ガイドライン: FPGA-to-HPSブリッジをターゲットとするフルアクセスを実行します。
トランザクションをキャッシュ可能にするには、FPGAマスターでFPGA-to-HPSブリッジからの読み出しを行い、少なくとも、ARCACHE信号のキャッシュ可能ビットと読み出し割り当てビットを設定する必要があります。Avalon-MMマスターを使用してキャッシュ可能なデータにアクセスする場合は、ARCACHE信号を適切な値に強制するロジックを提供する必要があります。Avalon-MMのトランザクションをキャッシュ可能に強制する例は、FPGA-to-HPSブリッジのデザイン例で示されています。
ガイドライン: FPGA-to-HPSブリッジをターゲットとし、32バイトにアライメントされたキャッシュ可能なアクセスを実行します。
HPSのACPスレーブは、キャッシュラインと同じサイズ (32バイト) のトランザクションに最適化されています。そのため、データを32バイト境界に揃え、データ幅の調整後に、64ビットのACPスレーブへのバースト長が4ビート長になるようにする必要があります。例えば、FPGA-to-HPSブリッジが128ビットのトランザクションに設定されている場合は、データを32バイトに揃え、バースト長2で128ビット全体のアクセスを実行する必要があります。
ガイドライン: キャッシュ可能なトランザクションごとに32バイトにアクセスします。
各バースト・トランザクションでは、32バイトにアクセスするようにします。各トランザクションは、32バイト境界で開始する必要があります。
ブリッジ幅 (ビット) | アクセスサイズ (バイト) | バースト長 |
---|---|---|
32 | 4 | 8 |
64 | 8 | 4 |
128 | 16 | 2 |
2.2.4.4. 例4: FPGAでキャッシュ・コヒーレントなデータをHPSに書き込む
この例では、HPSのMPUはFPGAを起源とするデータへのアクセスを必要とします。小さなデータブロックをMPUと共有する最も効率的なメカニズムは、FPGA内のロジックでHPSへのキャッシュ可能な書き込みを実行することです。HPSに書き込まれるデータの量は、比較的小さなブロックの形式であることが重要です。大きなブロックの書き込みはL2キャッシュのスラッシングにつながり、ほとんどの転送でキャッシュがSDRAMに書き込まれるようになります。大規模なバッファー転送の場合は、例2に示すように、FPGAでFPGA-to-SDRAMポートに直接データを書き込むほうが適切です。
ガイドライン: FPGA-to-HPSブリッジをターゲットとするフルアクセスを実行します。
トランザクションをキャッシュ可能にするには、FPGAマスターでFPGA-to-HPSブリッジに書き込みを行い、少なくとも、AWCACHE信号のバッファー可能ビット、キャッシュ可能ビット、書き込み割り当てビットを設定する必要があります。Avalon-MMマスターを使用してキャッシュ可能なデータにアクセスする場合は、AWCACHE信号を適切な値に強制するロジックを提供する必要があります。Avalon-MMのトランザクションをキャッシュ可能に強制する例は、FPGA-to-HPSブリッジのデザイン例で示されています。
ガイドライン: FPGA-to-HPSブリッジをターゲットとし、32バイトにアライメントされたキャッシュ可能なアクセスを実行します。
HPSのACPスレーブは、キャッシュラインと同じサイズ (32バイト) のトランザクションに最適化されています。そのため、データを32バイト境界に揃え、データ幅の調整後に、64ビットのACPスレーブへのバースト長が4ビート長になるようにする必要があります。例えば、FPGA-to-HPSブリッジが128ビットのトランザクションに設定されている場合は、データを32バイトに揃え、バースト長2で128ビット全体のアクセスを実行する必要があります。
ガイドライン: L2でECCが有効になっている場合、FPGA-to-HPSブリッジへのキャッシュ可能なアクセスが8バイト境界でアライメントされていることを確認します。
L2キャッシュでエラー検出と訂正 (ECC) を有効にする場合はまた、8バイトの各データグループが完全に書き込まれるようにする必要があります。L2キャッシュは64ビット境界でECCの動作を実行するため、キャッシュ可能なアクセスを実行する際はかならず、アクセスを8バイト境界に揃え、一度に8つのレーンすべてに書き込む必要があります。これらの規則に従わない場合は、ダブル・ビット・エラーが発生します。これは回復することができません。
ECCが有効になっているか無効になっているかにかかわらず、32バイトのキャッシュ・トランザクション は最高のパフォーマンスをもたらします。32バイトのキャッシュ・トランザクションの詳細に関しては、例3の「キャッシュ可能なトランザクションごとに32バイトにアクセスします」のガイドラインを参照してください。
ガイドライン: L2でECCが有効になっている場合、FPGA-to-HPSブリッジへのキャッシュ可能なアクセスで8つの書き込みストローブのグループが有効になっていることを確認します。
- 32ビットのFPGA-to-HPSアクセスでは、バースト長を2、4、8または16にし、書き込みバイトストローブをすべて有効にする必要があります。
- 64ビットのFPGA-to-HPSアクセスでは、すべての書き込みバイトストローブを有効にする必要があります。
- 128ビットのFPGA-to-HPSアクセスでは、上位8つまたは下位8つ (もしくは両方) の書き込みバイトストローブを有効にする必要があります。
2.3. インテル Arria 10 HPSとFPGAのインターコネクト接続に関するガイドラインの改訂履歴
ドキュメント・バージョン | 変更内容 |
---|---|
2020.08.14 | ACPに関連するロックアップの回避の章を追加しました。 |
2019.04.17 | メンテナンス・リリース |
2019.03.18 | メンテナンス・リリース |
2017.12.20 | メンテナンス・リリース |
2017.05.08 | 初版 |
3. Arria 10 SoC FPGAのHPS部分に関するデザイン・ガイドライン
3.1. SoC FPGAデザインの開始
3.1.1. HPS-to-FPGAインターフェイスのデザインに推奨される開始点
ご利用のトポロジーに応じて、2つのハードウェア・リファレンス・デザインのいずれかをご自身のハードウェア・デザインの開始点として選択することができます。
ガイドライン: インテルでは、HPSをFPGAのソフトIPに接続する例として、ゴールデン・ハードウェア・リファレンス・デザイン (GHRD) を開始点として使用することを推奨しています。
ゴールデン・ハードウェア・リファレンス・デザイン (GHRD) は、システムを開始するためのベースとして使用するのに最適なデフォルトの設定とタイミングを備えています。初期評価の終了後に、Intel Arria 10 HPS-to-FPGA Bridge Design Exampleのリファレンス・デザインに進み、FPGAとHPS間のさまざまなインターフェイスのパフォーマンスを比較することができます。
詳細は、ゴールデン・ハードウェア・リファレンス・デザイン (GHRD) を参照してください。
ガイドライン: インテルでは、Intel Arria 10 HPS-to-FPGA Bridge Design Exampleのリファレンス・デザインを使用し、FPGAロジックとHPS間のアクセスに最適なバースト長とデータ幅を決定することを推奨しています。
FPGA-to-HPS Bridges Design Exampleでは、FPGAロジックにモジュラーSGDMAが含まれているため、FPGAロジックからHPSのデータアクセスのバースト長をプログラミングすることができます。
3.1.2. SoC FPGAトポロジーの決定
ガイドライン: Arm* Streamline Profilerのようなプロファイリング・ツールを使用し、お使いのソフトウェアをプロファイリングします。 Arm* Streamline Profilerは、 Arm* DS-5* for Intel® SoC FPGA Editionに含まれているツールであり、ハードウェアのアクセラレーションに適した機能を特定し、ソフトウェアに最適に実装されるそれらの機能を分離するのに役立ちます。
アプリケーションに最も適しているシステムトポロジーを決定するには、最初に、アプリケーションをハードウェアとソフトウェアに区分する最適な方法を決定する必要があります。
3.2. デバイスのI/OをHPSペリフェラルおよびメモリーに接続するためのデザインにおける考慮事項
HPSをコンフィグレーションする際の最も重要な考慮事項の1つは、 インテル® Arria® 10 SoCデバイスでのI/Oの構成を理解することです。
Intel Arria 10 GX, GT, and SX Device Family Pin Connection Guidelinesの「Intel Arria 10 SX Pin Connection Guidelines」の章で示されている インテル® Arria® 10 SoCデバイスに関するガイドラインに従います。
1. HPS専用I/O
これらの17のI/Oは物理的にHPS内に配置されており、HPSに専用です。主にHPSのブートフラッシュ、クロック、およびリセットに使用されます。他のI/Oはすべて、FPGAロジックのI/Oカラムに配置されています。
2. HPS共有I/O (FPGAと共有される)
HPSペリフェラル信号またはFPGA信号のいずれかに使用することができる48ピン (HPS共有I/O) のI/Oバンクは1つあります。HPS共有I/Oは、HPSのコールドリセットによってリセットされると、入力トライステート・モードになります。
詳細は、Intel Arria 10 Hard Processor System Technical Reference Manualの付録「Booting and Configuration」を参照してください。
3. HPS外部メモリー・インターフェイスI/O (FPGAと共有される)
SDRAMメモリーに接続可能なモジュラーI/Oバンクは、選択したデバイスとパッケージに応じて2つまたは3つあります。それらのI/Oバンクの1つを使用し、アドレス、コマンド、およびECCデータ信号を接続します。残りの1つまたは2つのバンクは、データ信号を接続するためのものです。
4. FPGA I/O
汎用I/Oは、FPGAロジック、FPGA外部メモリー・インターフェイス、および高速シリアル・インターフェイスに使用することができます。
HPS専用I/O | HPS外部メモリー・インターフェイスI/O | HPS-FPGA共有IO48 | FPGA I/O | |
---|---|---|---|---|
利用可能なI/O数 | 17 | 最大3つのIO48バンク | 48 | 他のデバイスI/Oすべて |
位置 | HPSブロック内の専用I/Oのバンク |
I/Oバンク2I、2J、2K (HPSに隣接) (バンクはすべて同じカラム内) |
FPGA I/Oバンク2L (HPSブロックに隣接) | FPGA I/Oバンク |
サポートされる電圧 | 1.8V、2.5Vおよび3.0V | DDR3およびDDR4プロトコルをサポートするLVDS I/O | 3V I/Oバッファータイプの電圧サポート1 | LVDS I/O、3V I/O、および高速シリアルI/O (HSIO) のバッファータイプの電圧サポート2 |
目的 |
クロック、リセット、ブートソース、UART |
HPSメインメモリー | 高速HPSペリフェラル | 汎用およびトランシーバーI/O |
タイミング制約 | 固定 | メモリー・コントローラーIPによって提供される3 | 正当な組み合わせに固定3 | ユーザー定義 |
推奨ペリフェラル |
QSPI、NANDx8、eMMC、SD/MMCカード、UART |
DDR3およびDDR4 SDRAM |
EMAC、USB (正当な組み合わせに関しては、HPSプラットフォーム・デザイナー・コンポーネントを参照してください。) |
低速ペリフェラル (I2C、SPI、EMAC-MII) |
3.2.1. HPSピンの多重化に関するデザインの考慮事項
HPSペリフェラル信号の合計は共有I/Oバンクの48ピンを超えるため、プラットフォーム・デザイナーのHPSコンポーネントは、ピンの多重化の設定と、ほとんどのペリフェラルをFPGAファブリックにルーティングするオプションを提供します。共有I/Oバンク内の未使用のピンは、12ピンのグループで汎用I/OとしてFPGAで使用することができます。HPS共有I/Oは、HPSに隣接するFPGA I/Oカラムの3V I/Oバンク2Lにあり、通常、3V I/Oバンクの全機能のセットをサポートします。ただし、HPSペリフェラルに共有I/Oを使用すると、電圧レベルのサポートが1.8V、2.5V、または3Vの動作のいずれかに制限され、他のFPGA I/Oバンクと同じI/O Standardの互換性とサポートに関する規則が適用されます。I/Oバンクに接続されるペリフェラルはすべて、選択した電圧をサポートしている必要があります。
FPGAに割り当てられている共有I/O (12ピンのグループ) は、デバイスがコンフィグレーションされると、HPSがまだリセット状態であっても、FPGAで使用することができます。ただし、共有I/OがHPSに割り当てられている場合は、HPSがリセットに入っている際にFPGAからアクセスすることはできません。これらのピンは、リセットの解除後にHPSによってのみ使用することができます。
ガイドライン: まず、USBを先頭に、USB、EMACおよびフラッシュ・インターフェイスをHPS専用I/Oと共有I/Oにルーティングします。
最初に、USB、イーサネット、およびフラッシュなどの高速インターフェイスをHPS専用I/OおよびHPS共有I/Oにルーティングすることから始めることが推奨されます。USB信号はFPGAファブリックで使用することができないため、共有I/Oにルーティングする必要があります。フラッシュ・ブートソースは、HPS専用I/Oにルーティングする必要があります。HPS専用I/Oは、HPS共有I/OとFPGA I/Oがコンフィグレーションされる前に機能している唯一のI/Oです。
ガイドライン: FPGAで使用する必要がある場合は、共有I/Oの1つの象限全体を確保する必要があります。
共有I/Oは、FPGAファブリックにあるデザインで使用することができますが、I/Oは象限ベース (12ピンのグループ) で利用可能にする必要があります。共有I/Oは4つの象限に分割され、各象限は、HPSペリフェラルまたはFPGAロジックのいずれかにルーティングされます。ただし、両方にルーティングはされません。そのため、HPSの共有I/OをFPGAで使用する場合は、象限の1つを予約し、HPSペリフェラルを共有I/Oバンクの残りの3つの象限にルーティングする必要があります。
ペリフェラルにI/Oセットを選択する際は、プラットフォーム・デザイナーのHPSコンフィグレーション・ダイアログ・ボックス の Peripheral Pin Multiplexingタブ を参照してください。ペリフェラルを追加する際は、発生するエラーに注意してください。HPSコンフィグレーション・ダイアログ・ボックスの下部にあるコンソールボックスは、競合の解決に役立ちます。
3.2.2. HPS I/Oの設定: 制約とドライブ強度
ガイドライン: HPS共有I/Oと専用I/OにI/O設定を正しくコンフィグレーションしていることを確認します。
HPSのピン位置の割り当ては、HPSを含むプラットフォーム・デザイナー・システムの生成時に自動的に管理されます。同様に、HPS SDRAMコントローラーのタイミングとI/Oの制約は、HPSに向けたArria 10外部メモリー・インターフェイスによって管理されます。管理する必要があるHPSのI/O制約は、HPS専用I/OとHPS共有I/Oに関する制約のみです。ドライブ強度、I/O Standard、ウィーク・プルアップ・イネーブルなどの制約が、FPGAの制約と同様にインテルQuartus Primeプロジェクトに追加され、第2ステージ・ブートローダーでI/Oをコンフィグレーションする際のブート時にHPSに適用されます。専用I/OのI/O制約は、ブート・ローダー・ソフトウェアのデバイスツリーに保存されます。HPS共有I/OおよびFPGA I/Oの場合は、I/O制約はFPGAコンフィグレーション・ファイルに適用されます。
3.3. HPSのクロックおよびリセットに関するデザインの考慮事項
HPSのメインクロックとリセットは、HPS_CLK1、HPS_nPOR、HPS_nRSTです。HPS_CLK1 (EOSC1とも呼ばれます) は、HPSのPLLの外部クロックソースです。HPSのPLLは、MPUシステム・コンプレックス、L3インターコネクト、HPSペリフェラル、およびHPS-to-FPGAユーザークロックのクロックを生成します。HPS_nPORは、コールドリセット入力を提供します。また、HPS_nRSTは、双方向のウォームリセット・ソースを提供します。
この章は、Arria 10 Device Design Guidelinesの「Pin Connection Considerations for Board Design」および「I/O and Clock Planning」の章を補足するものです。
3.3.1. HPSのクロックのプランニング
- HPS PLL
- MPUシステム・コンプレックス
- L3インターコネクト
- HPSペリフェラル
- HPS-to-FPGAユーザークロック
HPSのクロックのプランニングは、システムレベルのデザイン・プランニングに依存します。これには、ボードレベルのクロック・プランニング、デバイスのFPGA部分のクロック・プランニング、およびHPSペリフェラルの外部インターフェイスの領域が含まれます。よって、ボードデザインを確定する前に、HPSのクロックのコンフィグレーションを検証することが重要です。
ガイドライン: プラットフォーム・デザイナーを使用し、MPUとペリフェラルのクロックを検証します。
プラットフォーム・デザイナーを使用し、HPSコンポーネントのコンフィグレーションを最初に定義します。HPS入力クロック、ペリフェラル・ソース・クロックおよび周波数を設定します。プラットフォーム・デザイナーの警告またはエラーメッセージに注意し、クロックの設定を変更する、もしくはその警告がアプリケーションに悪影響を及ぼさないことを確認することで対応します。
3.3.2. 早期のピン・プランニングとI/O割り当ての解析
HPSのクロックとリセットのI/Oは、HPS専用I/Oバンクの固定ピン位置にあり、通常はブートフラッシュやUARTコンソールなどのHPSペリフェラルとバンクを共有します。
ガイドライン: HPS専用I/OのI/O電圧レベルを選択します。
HPS_CLK1、HPS_nPOR、HPS_nRSTは、HPS専用I/Oバンクの固定ピン位置にあります。HPSの専用I/Oは、1.8V、2.5V、および3Vの電圧レベルをサポートするLVCMOS/LVTTLです。このバンクのI/O信号電圧は、VCCIO_HPSに適用される1.8V、2.5V、または3Vの供給レベルによって確立されます。VCCIO_HPSに選択する供給レベルが、HPS専用I/Oバンクを使用するようにコンフィグレーションされたHPSペリフェラル・インターフェイス (ブートソース、UARTコンソールなど) や、ボードレベルのクロックおよびHPSのリセット回路と互換性があることを確認してください。
3.3.3. HPSのクロック、リセット、PoRのピンの機能と接続
HPSの外部リセットI/Oピンには、ボードレベルのリセットロジックと回路のプランニングおよび設計を行う際に考慮すべき特定の機能的な動作と要件があります。
ガイドライン: HPS_nRSTを使用し、HPSのウォームリセットを開始する、もしくは外部でボードにリセットを駆動します。
HPS_nRSTは、アクティブLowでオープンドレイン、かつ双方向のI/Oです。HPS_nRSTピンに外部からロジックLowをアサートすると、HPSのウォームリセットが開始します。HPSのウォームリセットおよびコールドリセットは、ソフトウェアが開始するリセットやFPGAファブリックからのリセット要求などの内部ソースからもアサートすることができます。HPSが内部でウォームリセットまたはコールドリセットに入る場合は、HPSコンポーネントがリセットソースとなり、HPS_nRSTピンをLowに駆動して、接続されているボードレベルのコンポーネントをリセットします。HPS_nPORピンを外部からアサートする場合もまた、HPSはHPS_nRSTピンでリセットをアサートします。
ガイドライン: HPS_nPORおよびHPS_nRSTの最小アサート時間の仕様に従います。
HPS_nPORピンおよびHPS_nRSTピンのリセット信号は、HPS_CLK1の特定のサイクル数の間アサートする必要があります。最小サイクル数は、Arria 10デバイス・データシートのHPSの章で指定されています。
3.3.4. 内部クロック
HPSのクロック・コンフィグレーションのプランニング・ガイドラインの説明に従いHPSのクロックのコンフィグレーションを検証後、ソフトウェアの制御下でHPSのクロックの設定を実装する必要があります。これは通常、ブート・ローダー・ソフトウェアによって行われます。また、HPSとFPGA間でリファレンス・クロックを転送するためのガイドラインにも従う必要があります。
ガイドライン: HPSとFPGA間でPLLをカスケード接続しないでください。
FPGAとHPS間でPLLをカスケード接続することは特性評価されていません。ジッター解析を行わない限り、FPGAとHPSのPLLをチェーン接続しないでください。HPSからの出力クロックは、FPGAのPLLに供給することを目的にしていません。
ソフトウェアの制御下でHPSのPLLおよびクロックを管理するには特定の要件があります。
SoC EDSによって提供されるブート・ローダー・ソフトウェアは、HPSのPLLおよびクロックを管理するための要件をすべて満たしています。独自のブート・ローダー・ソフトウェアを開発する場合は、関連するドキュメントを参照してください。
関連するドキュメント
詳細は、Intel Arria 10 Hard Processor System Technical Reference Manualの「Clock Manager」の章を参照してください。また、必要なソフトウェア・フローに関しては、特定のペリフェラルとサブシステムの章を参照してください。
HPSのPLLの周波数を最終的な値にランプするための要件に関しては、Intel Arria 10 SX Device Errata and Design Recommendationsの「Correct Sequence Required When Raising HPS PLL Frequency」の章を参照してください。
3.3.5. FPGAのリコンフィグレーションおよびFPGAのコンフィグレーション失敗時におけるHPSのリセット
FPGAのリコンフィグレーションおよびFPGAのコンフィグレーション失敗時に、デバイスのI/Oはトライステートになり、HPSはHPS共有I/OおよびHPS外部メモリー・インターフェイスI/Oへのアクセスを喪失します。
ガイドライン: HPSを介してFPGAのコンフィグレーションを開始する前に、ソフトウェアでFPGAコンフィグレーション・イメージの整合性チェックを行います。
ガイドライン: FPGAが外部ソースによって完全にコンフィグレーションされている間、HPSがリセットに入っていることを確認します。これにより、共有I/OおよびHPS SDRAM I/Oは、HPSでこれらのリソースが必要になるまでにコンフィグレーションされます。
ガイドライン: リコンフィグレーション中にHPSを動作させる場合は、リコンフィグレーション・ビットストリームをパーシャル・リコンフィグレーション・イメージとして設計します。
詳細は、Intel Arria 10 Hard Processor System Technical Reference Manualの「FPGA Manager」の章を参照してください。
3.3.6. HPSペリフェラルのリセット管理
HPSペリフェラルおよびサブシステムには、特定のリセットシーケンス要件があります。SoC EDSで提供されるブート・ローダー・ソフトウェアは、「Reset Manager」の章に記載されている要件に基づきリセット管理シーケンスを実装します。
ガイドライン: SoC EDSの最新のブート・ローダー・ソフトウェアを使用して、HPSのリセットを管理します。
詳細は、Intel Arria 10 Hard Processor System Technical Reference Manualの「Reset Manager」の章を参照してください。また、必要なソフトウェア・フローに関しては、特定のペリフェラルとサブシステムの章を参照してください。
3.4. HPS EMIFに関するデザインの考慮事項
HPSの重要なコンポーネントは、外部SDRAMメモリーです。以下に示すデザインに関する考慮事項は、SDRAMメモリーとHPS間のインターフェイスを適切にデザインするためのものです。
- インテル® Arria® 10コア・ファブリックおよび汎用I/Oハンドブック
- External Memory Interface Handbook, Volume 3: Reference Material
ガイドライン: 外部SDRAMをHPSに接続する際は、 インテル® Arria® 10コア・ファブリックおよび汎用I/Oハンドブックを参照します。
インテル® Arria® 10コア・ファブリックおよび汎用I/Oハンドブックには、ハード・メモリー・コントローラー (HMC) ブロックおよび、I/OエレメントのDDR SDRAMメモリーの強化された機能サポートに関する情報が含まれています。また、このハンドブックは、I/Oカラムのアーキテクチャー、HPSでアクセスすることのできるHMCブロックが属する位置、および利用可能なデバイスとパッケージの組み合わせにサポートされる特定のタイプのインターフェイスの数を示しています。このハンドブックは、SoCデバイスのFPGA部分に関する主要な資料です。
-
第5章: Arria 10デバイスにおけるI/Oと高速I/O - Arria
10デバイスにおけるI/Oリソースの項内の、Arria 10デバイスにおけるGPIOバンク、SERDES、およびDPAの位置
この項では、HPSとアクセス可能なバンクの相対的な位置を含む、 インテル® Arria® 10ファミリーバリアントすべてのデバイスとパッケージの組み合わせすべてのI/Oカラムとバンク位置を示しています。
-
第6章: Arria 10デバイスにおける外部メモリー・インターフェイス - Arria
10デバイスパッケージのメモリー・インターフェイスのサポート
この項では、Arria 10 SXのデバイスとパッケージの組み合わせでサポートされるメモリータイプの数とサポートされる幅を示しています。
ガイドライン: 外部SDRAMをHPSに接続する際は、External Memory Interface Handbook, Volume 3: Reference Materialを参照します。
External Memory Interface Handbook, Volume 3: Reference Materialには、HPS外部メモリー・インターフェイスに使用される特定のI/Oバンク、アドレスもしくはコマンド、ECCおよびデータ信号の位置を理解するための詳細が含まれています。このハンドブックにはまた、それらの外部メモリー・インターフェイス信号のバンク内での配置における制約や、デフォルトの配置から変更することができる柔軟性についての重要な情報も含まれます。 インテル® では、3巻で構成されるEMIF Handbookで提供されている内容をすべて十分に把握することを推奨していますが、アプリケーションでHPS IPに向けて インテル® Arria® 10 EMIFを適切にデザインするためには、第3巻の次の章を理解していることが前提になります。
-
第2章: Functional Description – Intel Arria 10 EMIF、Intel Arria 10 EMIF for Hard Processor Subsystemの項
この項では、 インテル® Arria® 10 SXデバイスのHPS外部メモリー・インターフェイスでサポートされる特定の外部SDRAMメモリーのタイプ、速度、幅、およびインターフェイスとデバイスのコンフィグレーションについて説明しています。また、アドレス、コマンド、ECC、およびデータ信号の特定のI/Oバンクとレーンの位置を示す図が提供されています。HPS IP向け インテル® Arria® 10 EMIFのデフォルトの位置から変更する場合は、「Restrictions on I/O Bank Usage for Arria 10 EMIF IP with HPS」の項で、メモリー・インターフェイス信号の配置に関する詳細情報を確認してください。
以降のデザイン・ガイドラインは、上記で参照されているドキュメントに記載されている情報を補足するものです。
3.4.1. HPSをSDRAMに接続するための考慮事項
インテル® Arria® 10 HPSのハード・メモリー・コントローラーは、ほかのハード・メモリー・コントローラーとともにFPGA I/Oカラムにあります。HPSは、1つのハード・メモリー・コントローラー・バンクのみを使用することができます。これは、アドレスまたはコマンド、およびECC信号が属するI/Oバンク2KのHPSブロックの最も近くに配置されています。I/Oバンク2Jは、16ビットおよび32ビット・インターフェイスのDQ/DQSデータグループ信号に使用します。I/Oバンク2IはKF40パッケージでのみ利用することができ、より広い64ビット・インターフェイスのDQ/DQSデータグループ信号に使用されます。バンク2Iは、64ビット・インターフェイスの上位32ビットに使用します。
インテル® Arria® 10 HPS EMIF IPのインスタンス化
外部SDRAMを インテル® Arria® 10 HPSに接続するには、HPSに固有のEMIF IPを使用する必要があります。以下のガイドラインに従い、正しいEMIF IPをHPSに適切にインスタンス化およびコンフィグレーションします。
ガイドライン: プラットフォーム・デザイナーで、「Intel Arria 10 External Memory Interfaces for HPS」 IPをインスタンス化します。
プラットフォーム・デザイナーで特定のEMIF IPを使用し、HPSを外部SDRAMに接続する必要があります。このプラットフォーム・デザイナーのコンポーネントは、「Intel Arria 10 External Memory Interfaces for HPS」と呼ばれ、プラットフォーム・デザイナーの「IP Catalog」ペイン、「Processors and Peripherals」グループ内の「Hard Processor Components」サブグループにあります。
コンパイル時に、 インテル® Quartus® PrimeはこのIPの設定 (メモリータイプ、幅、タイミングなど) を使用し、I/O AUXブロックのキャリブレーション・アルゴリズムを生成します。このコードはデバイスのコンフィグレーション中に実行され、HPS EMIFインターフェイスをセットアップおよびキャリブレーションします。
ガイドライン: hps_emifコンジットをHPSコンポーネントに接続します。
HPSに接続されるハード・メモリー・コントローラーには専用の接続があります。これは、プラットフォーム・デザイナーで接続する必要があります。HPS IPコンポーネント向け インテル® Arria® 10 EMIFは、この接続をhps_emifと呼ばれるコンジットを介して公開します。これは、HPSコンポーネントの「emif」コンジットに接続する必要があります。
ガイドライン: HPSが外部SDRAMまたはL3 SDRAMインターコネクトのリソースにアクセスしている際に、HPS EMIF IPブロックがリセットされないようにします。
アプリケーションがHPS EMIF IPのリセットアサートと連携してコンテキストを保存および回復できない限り、HPS EMIF IPブロックへのリセットのアサートは、HPSのリセットアサートに一致する必要があります。これは、HPS EMIFリセット入力を、リセットソースからのリセットの1つまたはリセットの組み合わせに接続することで実現することができます。リセットソースには、HPSリセット出力 (h2f_reset、 h2f_cold_resetなど)、HPSのコールドリセットまたはウォームリセット入力も提供するシステム内のほかのリセット (HPS_nPOR、HPS_nRST、FPGA-to-HPSコールドリセットまたはウォームリセット要求) があります。
上記で説明されている方法ではなく、HPSをリセットせずにHPS EMIF IPをリセットする場合、アプリケーションでは、HPS EMIF IPのリセットがアサートされる前に、リセット・マネージャーのbrgmodrstレジスターのビット6 (drsch) を使用して、L3 SDRAMインターコネクトがリセットに入るようにする必要があります。また、HPS EMIF IOPLLがロックされるまでそれを維持する必要があります。これに従わない場合は、外部SDRAM、またはL3 SDRAMインターコネクト内のリソースへのその後のアクセスにおいて、プロセッサーがロックアップする可能性があります。
ガイドライン: HPSメモリー・コントローラーのデータマスク (DM) ピンが有効になっていることを確認します。
プラットフォーム・デザイナーでメモリー・コントローラーをインスタンス化する際は、チェックボックスを選択し、データ・マスク・ピンを有効にする必要があります。この制御が有効になっていない場合は、マスターがメモリーのネイティブ・ワード・サイズよりも小さいSDRAMのデータにアクセスするたびに、データの破損が発生します。
ガイドライン: HPS IP向けArria 10 EMIFおよび、ご利用の特定のデバイスとパッケージの組み合わせでサポートされているコンフィグレーションのDDR3またはDDR4コンポーネント、もしくはモジュールのみを選択します。
外部メモリー・インターフェイス・スペック・エスティメーターの詳細に関しては、インテルFPGAのウェブサイトで提供されている外部メモリー・インターフェイスのページを参照してください。
詳細は、 インテル® Arria® 10コア・ファブリックおよび汎用I/Oハンドブック内の「Arria 10デバイスにおける外部メモリー・インターフェイス」の章を参照してください。
3.4.2. HPS SDRAM I/Oの位置
ガイドライン: これらの自動的に生成されるデフォルトのピン位置の割り当てを使用します。
HPS IP向けArria 10 EMIFは、すべての外部メモリー・インターフェイス信号に対するデフォルトのピン位置の割り当てを制約ファイル内に含みます。これはIP生成時に作成され、デザインのコンパイル時に インテル® Quartus® Primeによって読み取られます。
ガイドライン: ボードレイアウトを確定する前に、「output_files」サブフォルダーにあるQuartusプロジェクトのピンアウトファイルで、HPSメモリー・コントローラーI/Oの位置を確認します。
デフォルトで、 インテル® Quartus® Primeは、出力レポート、ログファイルおよびプログラミング・ファイルをプロジェクト・フォルダーの「output_files」サブフォルダーに生成します。HPS EMIFのピン位置を含むデザインのピンアウトは、コンパイル後に、.pinテキストファイルを確認します。
ガイドライン: 早期I/Oリリースのブートフローを使用する場合は、HPSメモリー・インターフェイスに関連するI/Oがすべて、次の表に示されているアクティブなHPS I/Oバンク内にあることを確認します。
早期I/Oリリースのブートフローを使用する際は、機能しているHPSメモリー・インターフェイスに必要なI/Oがすべて、次の表で示されているとおり、お使いのHPSのメモリー幅のアクティブなバンク内に位置していることを確認します。
インテル® Quartus® Primeのコンパイルでは通常、HPSメモリーのI/Oが、次の表に示されている特定のHPSメモリー幅に対するI/Oバンクおよびレーン位置に配置されていない場合に、エラーのフラグを立てます。
例外として、RZQピンは一般的に、I/Oカラムの任意のRZQピン位置に配置することができます。早期I/OリリースのブートフローでのHPSメモリー・インターフェイスのキャリブレーションを成功させるには、HPSメモリー・インターフェイスのRZQピンは、32または40ビットまでのメモリー幅の場合は、I/Oバンク2Kまたは2Jのいずれかに配置する必要があります。64または72ビット幅のHPSメモリー・インターフェイスの場合は、RZQをI/Oバンク2K、2Jまたは2Iにする必要があります。
さらに、早期I/Oリリースのフローを使用している場合は、EMIFリファレンス・クロックをバンク2Kに配置する必要があります。
HPS EMIFのI/Oのマッピングの詳細に関しては、次の表を参照してください。HPS EMIFコントローラーで使用されていないI/Oレーンは、汎用の入力専用 (GPI)、または汎用I/O (GPIO) としてFPGAファブリックで使用することができます。
EMIFの幅 | バンク2Kのレーン | バンク2Jのレーン | バンク2Iのレーン | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
3 | 2 | 1 | 0 | 3 | 2 | 1 | 0 | 3 | 2 | 1 | 0 | |
16ビット |
GPI | アドレス/コマンド | GPIO | データ[15:0] | GPIO | GPIO | GPIO | GPIO | ||||
16ビット + ECC |
ECC | アドレス/コマンド | GPIO | データ[15:0] | GPIO | GPIO | GPIO | GPIO | ||||
32ビット |
GPI | アドレス/コマンド | データ[31:0] | GPIO | GPIO | GPIO | GPIO | |||||
32ビット + ECC |
ECC | アドレス/コマンド | データ[31:0] | GPIO | GPIO | GPIO | GPIO | |||||
64ビット |
GPI | アドレス/コマンド | データ[31:0] | データ[63:32] | ||||||||
64ビット + ECC |
ECC | アドレス/コマンド | データ[31:0] | データ[63:32] |
ガイドライン: 自動的に作成されたデフォルトのピンの位置を変更する場合は、EMIF HandbookのVol 3、第2章の「Restrictions on I/O Bank Usage for Arria 10 EMIF IP with HPS」の内容を参照してください。
上の表に示すように、インターフェイスはほぼI/Oバンクとレーンに固定されていますが、ECCのないDQ/DQSデータ・グループ・レーンとDQ信号は、固定されているピンの位置内である程度柔軟に入れ替えることができます。 インテル® Quartus® Primeのコンパイルでは、デフォルト以外のピン位置を検証します。
ガイドライン: HPS IP向けArria 10 EMIFで使用されるI/O レーン内の未使用のピン位置は、FPGAファブリックでアクセスすることが可能です。
詳細は、以下に示されているそれぞれのI/Oバンクに固有の章を参照してください。
3.4.2.1. I/Oバンク2K、レーン0、1、2 (Addr/Cmd)
HPS IPコア向けArria 10外部メモリー・インターフェイス (EMIF) は、I/Oバンク2Kにあるハード・メモリー・コントローラー (HMC) を使用します。そのため、レーン0、1、および2は、アドレスおよびコマンド信号に使用されます。アドレス信号とコマンド信号は、これらのI/Oレーン内の固定された位置にあります。
ガイドライン: I/Oバンク2KのI/Oレーン0、1、2の未使用ピンは、FPGA GPIOとして使用することができます。
HPS IPコア向けArria 10 EMIFがアドレスとコマンドに使用していないI/Oバンク2K、レーン0、1、2のピンは、FPGAファブリックで汎用I/Oとして使用することができます。これらのレーンの未使用のピン位置に割り当てられるFPGA GPIO信号は、I/Oバンク2KのVCCIOおよびVREFの供給レベルと互換性のあるI/O規格をサポートします。これらの供給レベルは、外部SDRAMの信号規格によって規定されます。
3.4.2.2. I/Oバンク2K、レーン3 (ECC)
HPS IPコア向けArria 10 EMIFでは、ECCに関連するDQ/DQSデータグループ信号の位置をI/Oバンク2KのI/Oレーン3に固定しています。
ガイドライン: I/Oバンク2Kのレーン3は、HPS IPコア向けArria 10 EMIFによってECCデータに排他的に使用されます。
HPS EMIFでECCを使用する場合は、ECCデータに対応するDQ/DQSデータレーン信号をこの特定のI/Oレーンに配置する必要があります。ECCを使用しない場合に、一般的なHPS EMIFデータをこのI/Oレーンに配置することはできません。
ガイドライン: I/Oバンク2K、I/Oレーン3の未使用ピンは、FPGA GPIとして使用することができます。
HPS IPコア向けArria 10 EMIFがECCに使用していないI/Oバンク2K、I/Oレーン3のピンは、FPGAファブリックで汎用入力 (入力専用) として使用することができます。HPS IP向けArria 10 EMIFのコンフィグレーションでECCを使用していないためにレーン3を使用しない場合でも、未使用のピンを利用することはできますが、これらのピンは入力専用になります。レーン3の未使用のピン位置に割り当てられるFPGA GPI信号は、I/Oバンク2KのVCCIOおよびVREFの供給レベルと互換性のあるI/O規格をサポートします。これらの供給レベルは、外部SDRAMの信号規格によって規定されます。
3.4.2.3. I/Oバンク、2J (データ)
HPS IPコア向けArria 10 EMIFは、16、24、32、40ビット・インターフェイスのすべての非ECC DQ/DQSデータレーン信号グループにI/Oバンク2Jを使用します。64、72ビット・インターフェイスの場合は、下位4つの非ECC DQ/DQSデータレーン信号グループがこのバンク内に配置されます。
ガイドライン: HPS IP向けArria 10 EMIFで使用していないレーンのI/Oピンは、FPGA GPIOとして使用することができます。
16、24ビット・インターフェイスの場合、HPS IP向けArria 10 EMIFは、非ECC DQ/DQSデータレーン信号にI/Oバンク2Jの2つのI/Oレーンを使用します。I/Oバンク2Jの他の2つのI/Oレーンは、FPGAファブリックで汎用I/Oとして使用することができます。使用されていないレーンのピンに割り当てられるFPGA GPIO信号は、I/Oバンク2JのVCCIOおよびVREFの供給レベルと互換性のあるI/O規格をサポートします。これらの供給レベルは、外部SDRAMの信号規格によって規定されます。
ガイドライン: HPS IP向けArria 10 EMIFで使用しているレーンの未使用ピンは、FPGA GPIとして使用することができます。
HPS IPコア向けArria 10 EMIFがDQ/DQSデータレーン信号に使用している I/Oバンク2JのI/Oレーンにおいて、未使用のピンはいずれも、FPGAファブリックで汎用の入力専用として使用することができます。これらの使用されているレーンの未使用のピン位置に割り当てられるFPGA GPI信号は、I/Oバンク2JのVCCIOおよびVREFの供給レベルと互換性のあるI/O規格をサポートします。これらの供給レベルは、外部SDRAMの信号規格によって規定されます。
3.4.2.4. I/Oバンク、2I (データ、64、72ビット・インターフェイス)
HPS IPコア向けArria 10 EMIFは、64、72ビット・インターフェイスの上位4つの非ECC DQ/DQSデータレーン信号グループにI/Oバンク2Iを使用します。64ビットより狭いインターフェイスの場合、I/Oバンク2Iは使用されません。
ガイドライン: HPS IP向けArria 10 EMIFで使用していないレーンのI/Oピンは、FPGA GPIOとして使用することができます。
16、24、32、40ビット・インターフェイスの場合、HPS IP向けArria 10 EMIFはI/Oバンク2Iを使用しないため、バンク全体をFPGAファブリックで汎用I/Oとして使用することができます。利用可能なI/O規格には、HPS EMIFの外部SDRAM信号規格による制限がかかることはありません。通常の規則が適用されます。
ガイドライン: HPS IP向けArria 10 EMIFで使用しているレーンの未使用ピンは、FPGA GPIとして使用することができます。
64、72ビット・インターフェイスの場合は、I/Oバンク2IのI/Oレーンはすべて使用されます。未使用のピンは、FPGAファブリックで汎用の入力専用として使用することができます。これらの使用されているレーンの未使用のピン位置に割り当てられるFPGA GPI信号は、I/Oバンク2IのVCCIOおよびVREFの供給レベルと互換性のあるI/O規格をサポートします。これらの供給レベルは、外部SDRAMの信号規格によって規定されます。
3.4.3. Arria 10 HPS EMIFとSoC FPGAデバイスの統合
HPS IPコア向けArria 10 EMIFを残りのSoCシステムのデザインに統合する際は、次の内容を考慮します。
ガイドライン: HPS SDRAMにアクセスするすべてのマスターの帯域幅を最適化するためのガイドラインに従います。
HPS EMIFに接続されているSDRAMへのアクセスは、HPS SDRAM L3インターコネクトを経由します。FPGAコアで高帯域幅のDMAマスターと関連バッファーを設計およびコンフィグレーションする際は、「DMAに関する考慮事項」の章を参照してください。「DMAに関する考慮事項」の章で説明されている規則は、密に結合されているHPSハードウェア・アクセラレーターだけでなく、高帯域幅のDMAマスターすべて (プラットフォーム・デザイナーのDMAコントローラー・コンポーネント、カスタム・ペリフェラルに統合されているDMAコントローラーなど)、さらに、FPGA-to-SDRAMおよびFPGA-to-HPSブリッジポートを介してHPSリソース (HPS SDRAMなど) にアクセスするFPGAコアの関連バッファーに適用されます。
ガイドライン: Arria 10 EMIF IP (HPS以外のバージョン) のインスタンスは、HPS IP向けArria 10 EMIFと同じI/Oカラムに配置することはできません。
インテル® Arria® 10 SoCデバイスには2つのI/Oカラムがあります。HPS IP向けArria 10 EMIFは、I/Oバンク2Kを含むカラムに配置する必要があります。デザインでHPS IP向けArria 10 EMIFを使用する場合は、HPS以外の他のArria 10 EMIF IPインスタンスを別のカラムに配置します。デザインでHPS IP向けArria10 EMIFをインスタンス化しない場合は、HPS以外のArria 10 EMIF IPをどちらのカラムにも配置することができます。PHYLite IPインスタンスは、HPS IP向けインテルArria 10 EMIFと同じカラムに配置することができます。HPS以外のEMIFがHPS向けArria 10 EMIFと同じI/Oカラムにある場合、 インテル® Quartus® Primeソフトウェアは、エラーを報告します。
3.4.4. HPSメモリーのデバッグ
ガイドライン: FPGA EMIFと外部メモリー・ツールキットを使用し、メモリー・インターフェイスが動作することを確認します。
HPS SDRAMコントローラーは外部メモリー・インターフェイス・ツールキットをサポートしていないため、最初にHPS以外のメモリー・コントローラーを使用して、メモリー・インターフェイスが動作することを確認します。FPGAメモリー・コントローラーをインスタンス化し、それをHPSメモリー・コントローラーが使用するI/Oと同じI/Oにルーティングするデザインを作成します。EMIFツールキットでインターフェイスが動作することを確認後、HPS IP向けArria 10外部メモリー・インターフェイスを適切にインスタンス化します。インスタンス化は、「HPSをSDRAMに接続するための考慮事項」の章のArria 10 HPS EMIF IPのインスタンス化に関するサブセクションで説明されている内容に従います。
その他の情報に関しては、External Memory Interfaces in Arria 10 Devices、External Memory Interface Handbook、Arria 10 External Memory Interface Pin Interfaceを参照してください。
3.5. DMAに関する考慮事項
3.5.1. DMAコントローラーの選択
デザインに最適なDMAの実装を選択します。
- HPS DMA: 主に、SPIやI2Cなどの他の低速HPSモジュールとの間でデータを移動するために使用されます。また、ソフトウェアに代わって内部のメモリーコピーを実行します。
- ソフトDMA: 主に、FPGAとHPS間でデータを移動するために使用されます。
3.5.2. HPSインターコネクトによるDMAマスターの帯域幅の最適化
FPGA DMAのマスターは、HPSのプラットフォーム・デザイナー・コンポーネントでコンフィグレーション可能なFPGA-to-HPSブリッジおよびFPGA-to-SDRAMポートを介してHPSのリソースにアクセスすることができます。HPSのL3およびSDRAM L3インターコネクトは、これらのリソースの調停を提供し、セキュア領域とQoS (Quality of Service) の設定を適用します。HPSインターコネクトを介してリソースにアクセスするDMAのマスターおよび関連バッファーをプランニングおよび設計する際は、HPSインターコネクトのアーキテクチャーを確認し、インターコネクトによる帯域幅の最適化に利用することができる次のガイダンスとリソースを考慮します。
ガイドライン: FPGA-to-HPS Bridge Design Exampleを使用し、パフォーマンスを調整します。
FPGA-to-HPS Bridge Design Example は、FPGAとHPSリソース間の特定のデータ・トラフィックのアクセスパターンをモデル化するための便利なプラットフォームです。このデザイン例には、HPS内の Arm* Cortex-A9プロセッサーで動作するユーティリティーが含まれているため、エンドポイント間のデータパスやトランザクション特性 (バースト長など) の選択、転送帯域幅の報告を行うことができます。
3.6. インテル Arria 10 SoC FPGAのHPS部分に関するデザイン・ガイドラインの改訂履歴
ドキュメント・バージョン | 変更内容 |
---|---|
2020.08.14 | デバイスのI/OをHPSペリフェラルおよびメモリーに接続するためのデザインにおける考慮事項の章を更新し、HPSコールドリセットにおけるHPS共有I/Oの動作に関する情報を追加しました。 |
2019.04.17 | メンテナンス・リリース |
2019.03.18 | デバイスのI/OをHPSペリフェラルおよびメモリーに接続するためのデザインにおける考慮事項の章を更新し、 インテル® Arria® 10におけるJTAGの関連情報として、 インテル® Arria® 10 GX、GT、およびSXデバイスファミリー ピン接続ガイドラインのリファレンスを追加しました。 |
2017.12.20 |
|
2017.05.08 | 電圧レベルのサポートに関する情報を、デバイスのI/OをHPSペリフェラルおよびメモリーに接続するためのデザインにおける考慮事項の章に追加しました。 |
2016.09.16 | 初版 |
4. Arria 10 SoC FPGAのボード・デザイン・ガイドライン
4.1. オンボード電源の立ち上げとブートROM/ブートローダーのデバッグ
最初の電源投入時に、デバイスがまだコンフィグレーションされていない状態の場合は、HPSの専用I/Oのみをプロセッサーで使用することができます。デバイスの他のI/Oがコンフィグレーションされる前にブートプロセスを可視化するには、専用I/Oを使用してシリアル・インターフェイスを接続する必要があります。
ガイドライン: UARTシリアル・インターフェイスをHPSデバイスの専用I/Oに接続し、ブートプロセスを可視化します。
4.2. FPGAのリコンフィグレーション
システムでFPGAをリコンフィグレーションする際の最適な方法を特定するには、次の図を参照してください。
4.2.1. HPSのリブートによるフラッシュ・アップデート
ガイドライン: FPGAのリコンフィグレーションを行うためにHPSをリブートすることがシステムで許容される場合は、プロセッサーのリブート方法でのフラッシュ・アップデートを使用します。
FPGAをリコンフィグレーションする代わりに、フラッシュに保存されているFPGAイメージを更新し、HPSをリセットすることができます。HPSがリブートすると、フラッシュ内の新しいFPGAイメージがロードされ、FPGAにコンフィグレーションされます。このフローは、他の多くの組み込み製品 (携帯電話、ネットワーク・ルーター、テレビなど) で使用されるファームウェアの更新フローに類似しています。この更新フローは、ファームウェアをフラッシュ内で更新し、デバイスを再起動して新しいファームウェアを有効にするものです。
FPGAのハードウェアをリコンフィグレーションするこの方法では、ハードウェアの設計者がFPGAロジックをパーシャル・リコンフィグレーションと組み合わせて静的領域と動的領域で構成される階層デザインに分割する必要がありません。よって、理想的な方法です。この方法は、 インテル® Quartus® Primeのスタンダード・エディションとプロ・エディションの両方でサポートされています。
4.2.2. SoC FPGAのパーシャル・リコンフィグレーション
ガイドライン: FPGAのリコンフィグレーションにHPSをリセットすることができない場合は、SoC FPGAデバイスのパーシャル・リコンフィグレーション (PR) の機能を活用する必要があります。
パーシャル・リコンフィグレーションを使用することにより、FPGAの一部 (ペルソナと呼ばれます) が置き換えられている間に、デバイスのI/Oを機能する状態で維持することができます。
ガイドライン: インテル® Quartus® Primeプロ・エディションは、階層的なデザインフローとパーシャル・リコンフィグレーションをサポートするコンフィグレーション・ファイルの生成をサポートする唯一のエディションであるため、 インテル® Quartus® Primeプロ・エディションを利用できる状態にしておきます。
置き替えが必要なハードウェアのみをデザインの動的領域に配置することが推奨されます。この分割化により、リコンフィグレーションの時間が最小限に抑えられ、ハードウェアのデザインが簡素化されます。これは、パーシャル・リコンフィグレーションを行う前にフリーズする必要があるハードウェアが少なくなるためです。パーシャル・リコンフィグレーション領域をフリーズさせると、パーシャル・リコンフィグレーションが発生している間、PR領域からの出力が既知のユーザー定義の状態に駆動されます。よって、周囲のハードウェアに悪影響が及ぶことはありません。
ガイドライン: パーシャル・リコンフィグレーションが行われる領域がフリーズロジックで隔離されていることを確認し、出力が既知の安全な状態に駆動されることを保証します。
ガイドライン: パーシャル・リコンフィグレーションが行われる領域では、フリーズが開始する前にメモリーアクセスまたはデータの移動が完了しているようにします。
ガイドライン: パーシャル・リコンフィグレーションが行われる領域のフリーズが解除され、置換されたロジックとの間でデータの移動が開始する前に、その領域でコンフィグレーションが完了していることを確認します。
また、置換するハードウェアがAvalon-MM、Avalon-ST、AXI などのインターコネクト規格に準拠している場合、フリーズ処理を行う際は、ハードウェアをフリーズする前に未処理のメモリー・トランザクションやデータの移動がないことを確認する必要があります。フリーズロジックでは、フリーズを開始する前に未処理のメモリー・トランザクションまたはデータの移動が完了していることを保証する必要があります。
4.3. HPSの消費電力に関するデザインの考慮事項
消費電力と熱解析、SoCデバイスのピンの接続、電源設計とデカップリングに関するデザインの考慮事項と推奨事項に関しては、Arria 10 Device Design Guidelinesを参照してください。
以降の内容は、SoCデバイスに関する補足情報です。
4.3.1. システムおよびボードの早期プランニング
4.3.1.1. 早期消費電力見積もり
ガイドライン: Power AnalyzerのEarly Power Estimator (EPE) スプレッドシートを使用する際は、AN 738: Intel Arria 10 Device Design Guidelinesの「Early Power Estimation」の章で示されているガイドラインに従います。
さらに、 インテル® Arria® 10のEPEスプレッドシートを使用する際は、 インテル® Arria® 10 SoCデバイスの以下のガイドラインを考慮します。
4.3.1.1.1. Mainワークシート
ガイドライン: Power Characteristicsの設定に、「Maximum」を選択します。
プロセス、電圧、温度 (PVT) にわたって最大電力要件を満たすことができる適切な電源設計を行う目的で消費電力を見積もる際は、デバイスの最大電力特性を使用します。
4.3.1.1.2. IOワークシート
このタブでは、アプリケーションのI/Oエレメント (IOE) のさまざまなコンフィグレーションを記述します。IO-IPタブを使用し、各I/Oセットの背後にあるコントローラーIP を記述します。
ガイドライン: FPGA I/Oに割り当てられるHPSペリフェラルを追加します。
FPGA I/Oに割り当てられるHPSペリフェラルには、必要に応じてスプレッドシートに行を追加して、デザイン内の異なるHPSペリフェラルI/Oの特性を記述します。Bank Typeは、それぞれに応じて「3VIO」または「LVDSIO」に設定します。
ガイドライン: 共有I/Oに割り当てられるHPSペリフェラルを追加します。
HPS共有I/Oに割り当てられるHPSペリフェラルには、必要に応じてスプレッドシートに行を追加して、デザイン内の異なるHPSペリフェラルI/Oの特性を記述します。Bank Typeは、「HPS」に設定します。
4.3.1.1.3. IO-IPワークシート
このタブを使用し、IOタブで記述されているI/Oの背後にあるコントローラーIPを記述します。これには、HPSペリフェラル・コントローラーなどが含まれます。
ガイドライン: アプリケーションに向けてプラットフォーム・デザイナーのHPSコンポーネントでコンフィグレーションされたHPSペリフェラルを追加します。
HPSの専用I/Oに割り当てられる各HPSペリフェラルには、「IP」パラメーターに「… (Dedicated HPS)」のバリアントを選択します。この場合、これらのペリフェラルI/OのIOタブにエントリーはありません。共有I/OまたはFPGA I/Oに割り当てられる各HPSペリフェラルには、「IP」パラメーターに「...(Dedicated HPS)」を指定せずにバリアントを選択します。これらのペリフェラルI/OのIOタブにはエントリーが必要です。
4.3.1.1.4. HPSワークシート
ガイドライン: VCCL_HPSに900mVまたは950mVを選択します。
HPS MPUのオーバークロックをサポートするには、標準の900mVレベル、もしくは950mVのオーバードライブ・レベルのいずれかを選択します。HPS MPUのオーバークロック機能に関しては、Arria 10デバイス・データシートを参照し、達成可能な最大MPU周波数、およびデバイスのスピードグレードとHPS電源のオーバードライブ・レベルに関する要件を確認してください。
ガイドライン: スプレッドシートのHPSタブで、各CPUにFrequency、Application、および該当する場合はApplication Modeを選択します。
各CPUのApplication/Application Modeの設定では、業界標準のベンチマークのリストから選択することで、アプリケーションでのCPUの使用方法をモデル化することができます。「Custom」を選択し、ALUとキャッシュメモリーでのCPUの使用方法に関するパラメーターの一意のセットを定義することもできます。
4.3.2. SoC FPGAデバイスにおけるHPSおよびFPGAの電源に関するデザインの考慮事項
4.3.2.1. デバイスの消費電力とHPS性能の検討
インテル® Arria® 10 SoCデバイスでは、HPS (VCCL_HPS) により高い電源電圧 (0.9Vに対して0.95V) を供給することにより、より早い速度でHPSを動作させることができます。
HPS MPUのオーバークロック機能に関しては、 インテル® Arria® 10デバイス・データシートを参照し、達成可能な最大MPU周波数、およびデバイスのスピードグレードとHPS電源のオーバードライブ・レベルに関する要件を確認してください。
FPGAの電力はVCC電源から取得され、0.9Vまたは0.95Vにすることができます。FPGAとデバイスI/Oの電源は、デバイスの消費電力の大部分を占めています。
ガイドライン: ボードで0.95Vの電源レールを供給できるようにし、HPS (VCCL_HPS) とFPGA (VCC) には個別の電源レールを提供します。
- より低い消費電力を求める場合は、VCC=VCCL_HPS=0.9Vに設定します
- より高い性能を求める場合は、VCC=VCCL_HPS=0.95Vに設定します
- HPSの性能を最大限にする一方でデバイスの総消費電力を抑える最適なバランスを求める場合は、VCC=0.9V、VCCL_HPS=0.95Vに設定します
4.3.2.2. 必要なHPSブートクロック周波数の検討
インテル® Arria® 10 SoCデバイスは、10から50MHzのデフォルトのブート・クロック・モードおよび、より高速なブート・クロック・モードをサポートします。
より高速なブートクロック周波数を使用するには、CSELヒューズをデフォルトの設定の0x0から、0x7と0xEの間の任意の値に変更します。この設定により、ブートROMコードで、外部オシレーターの速度に応じてHPS PLLをより速い周波数で動作するようにコンフィグレーションすることができます。
詳細は、Intel Arria 10 Hard Processor System Technical Reference Manualの付録「Booting and Configuration」で、Clock Selectの章を参照してください。
ガイドライン: 0x7から0xEのCSEL値で有効にされる高速なブートクロックの周波数が必要な場合、HPSでは、VCCL_HPSの電圧を最低0.95Vにし、ブートエラーやシステムの不安定性に関する問題を防ぐ必要があります。
HPSのVCCL_HPSとFPGA電源に個別の電源レールが使用されている限り、FPGA電源のVccは、必要に応じて (デバイスの消費電力の低減に向けて) 0.9Vにすることも可能です。
CSELヒューズが0x0に設定されるデフォルトのブートモードでは、VCCL_HPS電圧を0.9Vにすることができます。
4.3.3. ボードデザインにおけるピンの接続に関する考慮事項
4.3.3.1. デバイスの電源投入
ガイドライン: AN 738: Intel Arria 10 Device Design Guidelinesの「Device Driver Power-Up」の章で示されているガイドラインに従います。
さらに、 インテル® Arria® 10 SoCデバイスに関する次のガイドラインを考慮します。
電源投入と電源切断のシーケンス
インテル® Arria® 10 SoCデバイスでは、電源シーケンスに関して、さらに次の電源レールを考慮する必要があります。
- VCCL_HPS
- VCCPLL_HPS、VCCIOREF_HPS
- VCCIO_HPS
詳細に関しては、インテル Arria 10コア・ファブリックおよび汎用I/Oハンドブックの「インテル Arria 10デバイスにおけるパワー・マネジメント」の章を参照してください。
4.3.3.2. 電源ピンの接続と電源
ガイドライン: AN 738: Intel Arria 10 Device Design Guidelinesの「Power Pin Connections and Power Supplies」の章で示されているガイドラインに従います。
Intel Arria 10 GX, GT and SX Device Family Pin Connection Guidelinesの「Arria 10 SX Pin Connection Guidelines」の章で示されている インテル® Arria® 10 SoCデバイスに関するガイドラインに従います。
ガイドライン: PDN (電源供給ネットワーク) の設計時は、電源の最大過渡電流のランプ時間を考慮します。
PDN Toolを使用し、コア・ファブリックのVCC電源に対してアプリケーションのPDNに必要なターゲット・インピーダンスを計算する際は、Core Clock FrequencyとCurrent Ramp Up Periodパラメーターを使用して、VCCの最大過渡電流のランプ時間をモデル化します。この手順により、デフォルトのステップ関数解析に対してターゲット・インピーダンスの要件が緩和されるため、より少ないデカップリング・コンデンサーでより効率的なPDNを得ることができます。
最初の過渡電流の推定値は、EPEスプレッドシートから取得することができます。また、デザインが完成に近づいた段階では、 インテル® Quartus® PrimeのPower Analyzer Analysis Toolを使用することで、より正確な解析を行うことが可能です。
詳細は、デバイス固有の電源供給ネットワーク (PDN) ツール2.0ユーザーガイドを参照してください。
ガイドライン: HPS MPUの最大クロック周波数をオーバードライブします。
インテル® Arria® 10 SoCデバイスは、HPS MPUのオーバークロックをサポートします。
達成可能な最大MPU周波数、デバイスのスピードグレードとHPS電源のオーバードライブ・レベルに関する要件については、インテルArria 10デバイス・データシートを参照してください。
4.3.4. 消費電力の解析
ガイドライン: AN 738: Intel Arria 10 Device Design Guidelinesの「Power Analysis」の章で示されているガイドラインに従います。
4.3.5. 消費電力の最適化
ガイドライン: Intel Arria 10 Device Design Guidelinesの「Power Optimization」の章で示されているガイドラインに従います。
インテル® Arria® 10 SoCデバイスにおいて、HPSは電力消費にあまり寄与しませんが、以下で詳述されるとおり、いくつかのデザイン上の選択とアーキテクチャーに関する特徴を考慮する必要があります。
4.3.5.1. プロセッサーとメモリーのクロックスピード
HPSの電力消費に最も関係しているのは、プロセッサーのクロックスピードと、外部SDRAMプログラムメモリーのタイプ、サイズ、およびスピードです。
これらのシステム・パラメーターを慎重に選択し、過剰設計になることなくアプリケーションの機能的な要件とパフォーマンス要件を満たすことで、システムの消費電力を最小限に抑えることができます。
ガイドライン: インテル® Arria® 10 FPGA-to-HPSブリッジのデザイン例を使用し、アプリケーションのパフォーマンス要件に合わせてHPSのクロックとメモリー・インターフェイスのパラメーターを調整します。
デザイン例はプラットフォーム・デザイナーのサブシステムとして提供されているため、MPUのクロックスピード、インターコネクト・スピード、およびメモリーのタイプ、コンフィグレーション、スピードなどのパフォーマンスに関連するパラメーターを利用することができます。
インテル® Arria® 10 SoC開発キットでは、設計の初期段階でこのような解析を行うための便利なハードウェア・プラットフォームの選択肢を提供しています。 インテル® Arria® 10 SoC開発キットは、さまざまなメモリータイプとスピードを検討するための高速ソケット型外部SDRAMメモリー・ドーター・カードを備えています。
HPSと外部SDRAMのデザイン・パラメーターの最適なセットを使用することにより、デザインは、アプリケーションのパフォーマンス要件を満たす一方で消費電力が最小限に抑えられるように最適化されます。
詳細は、インテルのウェブサイトで提供されている開発キットおよびカードのウェブページ、FPGA-to-HPS Bridges Design Example、 インテル® Arria® 10 SoC開発キットのリンクを参照してください。
4.3.5.2. MPUのスタンバイモードとダイナミック・クロック・ゲーティング
CPUのスタンバイモードとダイナミック・クロック・ゲーティング・ロジックは、MPUシステム・コンプレックス全体で利用することができます。各CPUをスタンバイモード、割り込み待機、またはイベント待機モードに設定することで、消費電力をさらに抑えることができます。
ガイドライン: スタンバイモードの詳細に関しては、 Arm* Cortex-A9 Technical Reference ManualのCortex-A9 Processor Power Controlの章を参照してください。
ガイドライン: SoC Design Examplesのウェブページより入手可能な消費電力最適化の例を活用します。
上記のガイドラインに関しては、 Arm* Cortex-A9 Technical Reference ManualおよびSoC Design Examplesを参照してください。
4.3.5.3. ペリフェラルにおける電源管理
ガイドライン: プラットフォーム・デザイナーでHPSコンポーネントをコンフィグレーションする際は、アプリケーションで使用するペリフェラルのみを有効にします。
ガイドライン: 機能的な要件とパフォーマンス要件を維持しながら、最も低いクロックスピードでペリフェラルをコンフィグレーションします。
ガイドライン: 消費電力をさらに低減するには、非アクティブなペリフェラルをリセット状態にし、それらのクロックソースをゲートオフするようにアプリケーション・ソフトウェアをデザインします。
特定のペリフェラルについては、Intel Arria 10 Hard Processor System Technical Reference Manualの対応する章で、クロックとリセットに言及している内容を参照してください。
ペリフェラル・モジュールのクロックとリセット制御の詳細に関しては、Intel Arria 10 Hard Processor System Technical Reference Manualの「Clock Manager」と「Reset Manager」の内容を参照してください。
4.3.5.4. 電源を切断することによる電源管理
SoCデバイス上の内部POR回路で監視されている電源のいずれか (FPGAコア電源のVCCまたはHPS電源のVCCL_HPSなど) を指定されているトリップレベルよりも低くすると、FPGAファブリックはリセット状態になります。
ガイドライン: FPGAコア電源 (VCC) を切断すると、HPSの動作に影響します。
FPGAがPORリセットに入ると、ハード・メモリー・コントローラー (HMC) I/O、共有I/O、FPGA I/Oはすべてリセットされ、HPSはこれらのI/Oに接続されている外部SDRAMおよびペリフェラルへの接続を失います。HPSが完全に機能するには、POR回路で監視されるFPGA電源電圧がPOR値を上回っている必要があります。詳細は、 インテルArria 10コア・ファブリックおよび汎用I/Oハンドブック で示されています。FPGA I/Oの電源電圧は、 インテル® Arria® 10デバイス・データシートで指定されている推奨動作レベルにする必要があります。
ガイドライン: HPSの電源電圧 (VCCL_HPS) を切断しても、FPGAコアには影響しません。
FPGAファブリック、FPGA I/O、またはFPGA部分に予約されている共有I/Oの象限に影響を与えることなくHPSへの電源を切断することは可能ですが、HPS電源の電源切断シーケンス要件に従う必要があります。
詳細は、 インテルArria 10コア・ファブリックおよび汎用I/Oハンドブック の「Arria 10デバイスにおけるパワー・マネジメント」の章を参照してください。
4.4. HPSのバウンダリー・スキャン
ガイドライン: FPGAおよびHPS I/Oのバウンダリー・スキャン・テストを実行する前に、HPSがコールドリセットに維持されていることを確認します。
ほとんどのHPS専用I/OおよびHPS共有I/Oは、バウンダリー・スキャン・テストをサポートします。専用I/OバンクのHPSクロック入力およびリセット入力は該当しません。
4.5. HPSインターフェイスのデザイン・ガイドライン
4.5.1. HPS EMAC PHYインターフェイス
- 共有I/Oを使用するRMII (Reduced Media Independent Interface)
- 共有I/Oを使用するRGMII (Reduced Gigabit Media Independent Interface)
- FPGAファブリックへのMII (Media Independent Interface) インターフェイス
- FPGAファブリックへのGMII (Gigabit Media Independent Interface) インターフェイス
サポートされているPHYインターフェイス・タイプの任意の組み合わせを、複数のHPS EMACインスタンスにわたってコンフィグレーションすることができます。
ガイドライン: 共有I/Oを使用するRMIIとRGMIIの場合、早期にI/Oフロア・プランニングのテンプレート・デザインを開発し、選択したPHYインターフェイス、および共有I/Oを使用することが予定されている他のHPSペリフェラルに対応する共有I/Oが十分にあることを確認します。
HPSコンポーネントによってFPGAファブリックに公開されるMIIまたはGMII PHYインターフェイスは、FPGAのソフト適応ロジックと汎用FPGA I/OおよびトランシーバーFPGA I/Oの機能を使用し、RMII、SGMII、SMII、TBIなどのほかのPHYインターフェイス標準に適合させることが可能です。
ガイドライン: PHYデバイスを選択する際は、必要なイーサネット・レート、利用可能なI/Oおよびトランシーバー、スキュー制御機能を提供するPHYデバイス、およびデバイスドライバーの可用性を考慮します。
インテル® Arria® 10 HPSエンベデッドEMAC (イーサネットMAC) PHYインターフェイスは、RGMIIインターフェイスを使用して業界標準のギガビット・イーサネットPHYに直接接続できるほか、RMIIインターフェイスを使用して10/100イーサネットPHYに直接接続することもできます。これには、HPSの3V I/Oバンクの共有I/Oピンを、サポートされている任意のI/O電圧で使用します。この電圧には通常、1.8V、2.5Vおよび3.0Vがあります。PHYインターフェイスに共有I/Oピンを使用すると、FPGAルーティング・リソースが使用されず、タイミングが固定されるため、インターフェイスでのタイミングが簡潔になります。このドキュメントでは、最も一般的なインターフェイスであるRGMIIとRMIIのデザイン・ガイドラインを説明します。
また、FPGAファブリックを介してPHYをHPS EMACに接続することもできます。これには、GMIIおよびMIIバス・インターフェイスをそれぞれ、ギガビットおよび10/100Mbpsのアクセスに使用します。
ガイドライン: GMII-to-SGMIIアダプターを使用し、トランシーバー・ベースのSGMII光モジュールに自動的に適合させることができます。
4.5.1.1. 共有I/Oを介して接続されるPHYインターフェイス
この章では、HPS共有I/Oを使用するRMIIおよびRGMII PHYインターフェイスに関するデザインの考慮事項について説明します。
4.5.1.1.1. RMII
RMIIは、システムに同期する50MHzの単一中央クロックソース (REF_CLK) をすべてのポートの送信パスおよび受信パスに使用します。これにより、各ポートのTX_CLKとRX_CLKのソース・シンクロナスのクロックペアではなく、単一のボード・オシレーターをデザインで使用できるため、ポート密度が高いシステムにおいてシステムのクロックが簡素化され、ピン数が低減します。
RMIIは、2ビット幅の送信データパスと受信データパスを使用します。データおよび制御信号はすべて、REF_CLKの立ち上がりエッジに同期しています。RX_ER制御信号は使用されません。10Mbpsモードでは、データおよび制御信号はすべて、REF_CLKクロックの10サイクルの間有効に保たれます。
インターフェイスのクロックスキーム
EMACおよびRMII PHYは、50MHzのREF_CLKのソースを提供することができます。HPS_CLK1入力などの既存のクロックソースを使用し、内部PLLでシステムのクロックデザインをさらに簡素化させて、クロックソースを追加する必要性をなくします。
この章では、HPS EMACまたはPHYをソースとするREF_CLKに関するシステムのデザインシナリオを説明します。
ガイドライン: アプリケーションのREF_CLKのソース選択に関する詳細は、PHYデータシートを確認してください。
選択したPHYがアプリケーションのREF_CLKのクロックスキームをサポートしていることを確認してください。PHYのデータシートで指定されている要件および考慮事項に注意してください。
- HPSをソースとするREF_CLK
- PHYをソースとするREF_CLK
I/Oピンのタイミング
HPS EMACとPHY間のREF_CLKソースからREF_CLK入力ピンのルーティング遅延の差を考慮してください。
RX_CLKがデイジーチェーンでソースからMACそしてPHY、またはソースからPHYにルーティングされる場合、フライト時間の差を考慮する必要があります。これらのREF_CLKのロードでは、クロックの到達時間が異なります。
ガイドライン: データと制御信号のルーティング遅延とスキューを考慮し、HPS SoCデバイスのデータシートおよびPHYのデータシートで指定されているセットアップとホールドを満たします。
信号長が24インチを超えない限り、信号長の一致は必要ありません。24インチを超える場合は、クロック遅延とデータ遅延において、基本的なタイミング解析を実行する必要があります。
周期は、50MHzのREF_CLKで20nsです。PHYが10Mbpsモードもしくは100Mbpsモードのいずれに設定されている場合でも、この周波数は変わりません。
HPS EMACのクロックはすべて、RX_CLKに基づいています。そのため、EMACまたはPHYのいずれかからのREF_CLKのTcoおよびPCBのフライト時間は無視することができます。12インチまでの一般的なボードトレースで生じるフライト時間はわずか2nsであり、RXDのTsuとRX_CLK間は最小4nsであるため、20nsの期間をはるかに下回ります。
RXDとRX_CLK間には、2nsのホールド要件があります。RX_CLKに対するTXDのTcoは、MACまたはPHYのいずれの場合でも通常2nsを超えるため、これも簡単に満たすことができます。 インテル® Arria® 10 SoCデバイスの場合、RX_CLKに対するTXDのTcoは7nsから10nsです。
ガイドライン: REF_CLKのソースがデューティー・サイクル要件を満たしていることを確認します。
REF_CLKにジッター仕様はありませんが、35%から65%のデューティー・サイクル要件があります。この要件は、 インテル® Arria® 10のPLLおよび、GPIOのクロック出力、つまり、HPS IPからのTX_CLK信号のクロック出力によって満たします。
4.5.1.1.2. RGMII
RGMIIは、PHY層で10Mbps、100Mbps、および1000Mbpsの接続速度をサポートするため、最も一般的なインターフェイスです。
RGMIIは、4ビット幅の送信データパスおよび受信データパスを使用しており、それぞれが独自のソース・シンクロナスのクロックを備えています。送信におけるデータおよび制御信号はすべてTX_CLKにソース・シンクロナスで、受信におけるデータおよび制御信号はすべてRX_CLKにソース・シンクロナスです。
すべての速度モードにおいて、TX_CLKはMACがソースであり、RX_CLKはPHYがソースになります。1000Mbpsモードでは、TX_CLKおよびRX_CLKは125MHzであり、デュアル・データ・レート (DDR) 信号が使用されます。10Mbpsおよび100Mbpsのモードではそれぞれ、TX_CLKとRX_CLKは2.5MHzおよび25MHzであり、立ち上がりエッジのシングル・データ・レート (SDR) 信号が使用されます。
I/Oピンのタイミング
この章では、1000Mbpsモードの要件を満たすという観点からRGMIIインターフェイスのタイミングについて説明します。インターフェイスのタイミングマージンは、1000Mbpsモードにおいて最も厳しいため、これがここで考慮する唯一のシナリオになります。
125MHzでの周期は8nsですが、両方のエッジが使用されるため、有効な期間はわずか4nsになります。TXバスおよびRXバスは完全に独立しておりソース・シンクロナスであるため、タイミングは簡潔になります。RGMIIの仕様では、CLKがレシーバー側でDATAから一方の方向に最小1.0ns、最大2.6ns遅延するように求めています。
すなわち、TX_CLKはMAC出力からPHY入力に、RX_CLKはPHY出力からMAC入力に遅延する必要があります。信号は、出力ピンでの測定において、各方向+/- 500psのRGMIIスキュー仕様内でソース・シンクロナスに送信されます。それぞれの方向に必要な最小遅延は1nsですが、 インテル® では、1.5nsから2.0nsの遅延をターゲットとし、大幅なタイミングマージンを確保することを推奨しています。
送信パスのセットアップおよびホールド
TX_CLKとTX_CTLおよびTXD[3:0] 間のセットアップおよびホールドのみが送信では重要です。 インテル® Arria® 10のI/Oでは、出力で最大800psの追加遅延を提供することができます。この遅延は、 インテル® Quartus® PrimeのAssignment Editorの出力遅延ロジックオプションを使用して有効にします。
ガイドライン: Arria 10からのTX_CLKには、800psのI/O遅延のほかに少なくとも200psの遅延を導入し、RGMIIの仕様にある1.0nsのPHY最小入力セットアップ時間を満たす必要があります。
この時間を合計で1.5nsから2.0nsの推奨遅延まで増やすことが強く推奨されます。これは、HPSから提供される800psのI/O遅延に700psから1200psの別の遅延を加えることで実現します。多くのPHYはプログラミング可能なスキューを提供します。一部はRGMII 2.0をサポートしており、デフォルトで送信データパスと受信データパスの両方のスキューが有効になります。
ガイドライン: PHYの遅延機能とFPGA I/Oの遅延機能の間において、CTLおよびD[3:0] に対するCLKの2nsの遅延、もしくは、ほとんどのPHYで広く使われている1.2nsの一般的な最小セットアップ・スキューを確保する必要があります。
詳細は、PHYベンダーより提供されているデータシートを確認してください。
ガイドライン: 要求されている遅延に必要な インテル® 設定がデザインに含まれていることを確認し、HPS EMAC出力をコンフィグレーションします。
インテル® Arria® 10 SoC開発キットおよび関連する インテル® Arria® 10ゴールデン・ハードウェア・リファレンス・デザイン (GHRDはGSRDのハードウェア・コンポーネントです) では、PHYのスキューとFPGAのスキューの組み合わせは、Micrel PHYで実装されます。ゴールデン・システム・リファレンス・デザイン (GSRD) の インテル® Quartus® Primeの設定とPHYドライバーコードを参照してください。
受信パスのセットアップおよびホールド
受信のタイミングでは、RX_CLKとRX_CTLおよびRXD[3:0] 間のセットアップおよびホールドのみを考慮する必要があります。 インテル® Arria® 10のI/Oでは、最大3200psの遅延を入力に追加することができます。 インテル® Arria® 10の入力では、この3.2nsのI/O遅延により、PHY側もしくはボードトレースの遅延側でほかの内容を考慮することなく、RX_CLKのこのタイミングを達成することができます。
ガイドライン: ハードウェア開発者は、必要なFPGAスキューを指定し、ソフトウェア開発者がデバイス・ドライバー・コードにスキューを追加できるようにする必要があります。
このコード例は、 インテル® Arria® 10 GSRDのLinuxデバイスドライバーより入手することができます。
4.5.1.2. FPGA I/Oを介して接続されるPHYインターフェイス
HPS EMAC PHYインターフェイスにFPGA I/Oを使用することは、PHYインターフェイスで使用できる共有I/Oが十分に残されていない場合や、HPS EMACでネイティブにサポートされていないPHYインターフェイスに適合させる場合に有効です。
ガイドライン: プラットフォーム・デザイナーでHPSコンポーネントをコンフィグレーションする際は、PHYインターフェイスの送信クロック周波数を指定します。
他のPHYインターフェイスに適合させる場合も含め、GMIIもしくはMIIには、HPS EMAC PHYインターフェイスの送信パスの最大クロック周波数を指定します (GMIIの場合は125MHz、MIIの場合は25MHz)。このコンフィグレーションにより、プラットフォーム・デザイナーでのシステム生成時に、クロックの適切なタイミング制約がPHYインターフェイスの送信クロックに適用されます。
4.5.1.2.1. GMII/MII
GMIIおよびMIIは、EMAC信号を共有I/OではなくFPGAコアのルーティング・ロジックに駆動し、最終的にFPGA I/OピンまたはFPGAコアの内部レジスターに駆動することによってのみ、 インテル® Arria® 10で利用することができます。
ガイドライン: タイミング制約を適用し、Timing Analyzerでタイミングを検証します。
ルーティング遅延はFPGAコアおよびI/Oの構造で大きく異なる可能性があるため、タイミングレポートを確認し、特にGMIIの場合は、タイミング制約を作成することが重要です。GMIIは125MHzのクロックを備えており、RGMIIとは異なりシングル・データ・レートです。ただしGMIIでは、CLKとDATA間のスキューに関してRGMIIと同じ内容を考慮する必要はありません。信号はネガティブエッジで起動されて立ち上がりエッジでキャプチャーされるため、デザインによって自動的に中央に配置されます。
ガイドライン: インターフェイスI/OはFPGA I/O境界で登録します。
コアおよびI/Oの遅延は8nsを簡単に超えるため、インテルでは、これらのバスを各方向でI/Oエレメント (IOE) レジスターに登録することを推奨しています。これにより、それらがコアのFPGAロジック・ファブリックを移動する際に、アライメントが維持されるようにします。送信のデータと制御の場合は、HPS EMACからのemac[0,1,2]_gtx_clk出力の立ち下がりエッジでこれらの信号をラッチすることにより、clock-to-data/controlの関係を維持します。受信のデータと制御の場合は、FPGA I/O入力においてPHYをソースとするRX_CLKの立ち上がりエッジでラッチします。
ガイドライン: MIIモードにおける送信のタイミングを検討します。
MIIは、PHYが100Mbpsモードの場合は25MHz、PHYが10Mbpsモードの場合は2.5MHzであるため、最短のクロック周期は40nsです。PHYは、送信方向と受信方向の両方にクロックを供給します。送信のタイミングはPHYによって供給されるTX_CLKクロックに相対するため、ターンアラウンド・タイムが懸念されることがありますが、クロック周期が40nsと長いため、通常は問題になりません。
リファレンス・クロックはFPGAを介して送信され、その後データに出力されます。15nsの入力セットアップ時間を考慮すると、往復の遅延は25ns未満でなければなりません。送信のデータと制御は、HPS EMAC送信パスロジックによってPHYをソースとするTX_CLKのネガティブエッジでFPGAファブリックに起動されます。これにより、40nsのクロックとセットアップ間のタイミング・バジェットのうち20nsが取られることに注意してください。
データの到着タイミングにおける往復のクロックパス遅延によってPHYからSoCのボード伝播遅延が発生することに加え、SoCピンからHPS EMAC送信クロック・マルチプレクサーでの内部パス遅延が残りの20nsのセットアップ・タイミング・バジェットを消費するため、MIIモードの送信におけるデータと制御では、場合によっては、FPGAファブリックのphy_txclk_oクロック出力レジスターの立ち上がりエッジに、送信データと制御をリタイミングする必要があります。
4.5.1.2.2. RMIIへの適合
FPGAのロジックを使用し、MII HPS EMAC PHY信号をFPGA I/OピンでRMII PHYインターフェイスに適合させることができます。
ガイドライン: 50MHzのREF_CLKソースを提供します。
RMII PHYは、単一の50MHzのリファレンス・クロック (REF_CLK) を送信と受信のデータおよび制御に使用します。50MHzのREF_CLKは、ボードレベルのクロックソース、FPGAファブリックから生成されるクロック、もしくはREF_CLKの生成が可能なPHYのいずれかによって提供します。
ガイドライン: 送信と受信のデータおよび制御パスを適応させます。
FPGAファブリックで公開されるHPS EMAC PHYインターフェイスはMIIであり、10Mbpsおよび100Mbpsの動作モードでそれぞれ2.5MHzおよび25MHzの個別の送信クロック入力と受信クロック入力を必要とします。送信データパスと受信データパスはどちらも4ビット幅です。RMII PHYは10Mbpsと100Mbpsの両方の動作モードにおいて、50MHzのREF_CLKを送信データパスと受信データパスに使用します。RMIIの送信データパスおよび受信データパスは2ビット幅です。10Mbpsでは、送信および受信のデータと制御は、50MhzのREF_CLKで10クロックサイクルの間安定して保たれます。FPGAファブリックの適応ロジックを提供し、HPS EMAC MIIと外部RMII PHYインターフェイスを適合させる必要があります。すなわち、25MHzおよび2.5MHzの4ビットと50MHzの2ビットを適合させ、10Mbpsモードにおいては10倍のオーバーサンプリングを行います。
ガイドライン: HPS EMAC MIIのtx_clk_inクロック入力でグリッチのないクロックソースを提供します。
HPSコンポーネントのMIIインターフェイスは、emac[0,1,2]_tx_clk_in入力ポートで2.5および25MHzの送信クロックを必要とします。2.5MHzと25MHzの切り替えは、HPS EMACの要求に応じてグリッチなしで行う必要があります。FPGA PLLを使用して2.5MHzおよび25MHzの送信クロックを提供し、それに加えてALTCLKCTRL IPブロックでカウンター出力をグリッチなしで選択することが可能です。
4.5.1.2.3. SGMIIへの適合
GMII-to-SGMIIアダプターコアを使用し、FPGAトランシーバーI/OピンでGMII HPS EMAC PHY信号をSGMII PHYインターフェイスに適合させることができます。これには、FPGAのロジックとマルチギガビット・トランシーバーI/OまたはLVDS SERDESをソフトCDRモードで使用します。この適合にカスタムロジックをデザインすることは可能ですが、この章では、プラットフォーム・デザイナーのアダプターIPを使用する方法を説明します。
ガイドライン: プラットフォーム・デザイナーで利用可能なGMII to SGMII Adapter IPを使用します。
プラットフォーム・デザイナーでHPSコンポーネントをEMAC 「To FPGA」 I/Oインスタンスにコンフィグレーションし、GMIIをPHYインターフェイス・タイプとして管理インターフェイスとともに選択します。生成されるHPSコンポーネントのGMII信号を、プラットフォーム・デザイナーでエクスポートしないでください。代わりに、Intel FPGA HPS GMII to TSE 1000BASE-X/SGMII PCS Bridge IPをプラットフォーム・デザイナーのサブシステムに追加し、HPSコンポーネントのGMII信号に接続します。GMII to SGMII Adapter IPは、プラットフォーム・デザイナーのIntel HPS EMAC Interface Splitter IPを使用して「emac」 コンジットをHPSコンポーネントから切り離し、GMII to SGMIIアダプターで使用します。アダプターIPは、1000BASE-X/SGMII PCS PHY-onlyモード (つまり、ソフトMACコンポーネントなし) でコンフィグレーションされたIntel Triple Speed Ethernet (TSE) MAC IPをインスタンス化します。インテルのGMII to SGMII Adapter IPの使用方法に関しては、Embedded Peripherals User Guideを参照してください。
4.5.1.3. MDIO
MDIO PHY管理バスには、各MACごとに2つの信号 (MDCとMDIO) があります。MDCはクロック出力で、フリーランニングではありません。 2.5MHzでの最小周期は400nsです。MDIOは、High-Zバスのターンアラウンド周期を備える双方向データ信号です。
MACがPHYに書き込みを行うと、データは立ち下がりエッジで起動されます。つまり、200ns - 10ns = 190nsがフライトタイム、信号の整定、およびレシーバーでのセットアップにあります。また、データは次のネガティブエッジまで切り替わらないため、200nsのホールド時間があります。これらの要件は、ほぼすべてのボードトポロジーで非常に簡単に満たすことができます。MACがPHYから読み出す際は、PHYは読み取りデータを0から300nsでMACに戻し、100nsから10nsのセットアップ時間を引いた90nsをフライトタイム、信号の整定、およびレシーバーでのセットアップに残す必要があります。この要件もまた、非常に簡単に満たすことができます。
ガイドライン: MDCおよびMDIOのボードプルアップ
どちらの信号も、外部プルアップ抵抗を必要とします。正確なプルアップ抵抗値については、お使いのPHYのデータシートを確認してください。一般的な抵抗値は1KΩです。
ガイドライン: MDIOで要求されるインターフェイスのタイミングを確認します。
MDIOでは、MDCに関して、10nsのデータのセットアップとホールド時間が必要です。
4.5.1.4. PHYインターフェイスに関するデザイン上の一般的な考慮事項
4.5.1.4.1. シグナル・インテグリティー
ガイドライン: SoCデバイスのオンチップ終端 (OCT) を利用します。
インテル® Arria® 10デバイスでは、多くの設定に合わせて出力を調整することができます。50Ωの出力インピーダンスが多くの場合において最適な値です。 インテル® Quartus® Primeは、RGMII出力においてキャリブレーションなしで直列OCTを自動的に使用します。 インテル® Quartus® Primeのフィッターレポートを確認し、インターフェイスの出力のOCT設定を検証してください。
ガイドライン: 適切なボードレベルの終端をPHY出力で使用します。
出力にI/O調整を提供するPHYは少数であるため、 インテル® では、シミュレーターを使用して、 インテル® Arria® 10デバイスへの信号パスを検証することを推奨しています。必要に応じてPHY出力ピン付近の各信号に直列抵抗を配置し、反射を減らします。
ガイドライン: PHY TX_CLKおよびEMAC RX_CLKの入力での反射を最小限に抑え、ダブルクロッキングを防ぎます。
接続が「T」としてルーティングされる場合は、REF_CLKのロードでダブルエッジが見られないようにシグナル・インテグリティーを維持する必要があることに注意してください。REF_CLKのロードでの反射を最小限に抑え、ダブルクロッキングを防ぎます。
ガイドライン: シグナル・インテグリティー (SI) シミュレーション・ツールを使用します。
SIシミュレーションは、これらの単方向信号で比較的容易に行うことができます。これらの信号はほとんどの場合においてポイントツーポイントであるため、各信号に配置する適切な直列抵抗を決定するだけで通常は十分です。多くの場合この抵抗は必要ありませんが、これを決定する際は、デバイスのドライブ強度とトレース長、およびトポロジーを検討する必要があります。
4.5.2. USBインターフェイスのデザイン・ガイドライン
インテル® Arria® 10 HPSでは、組み込みUSB MACを業界標準のUSB 2.0 ULPI PHYに直接接続することができます。これには、1.8V、2.5V、および3.0VのI/O標準をサポートするHPS 3V I/Oバンク内の共有I/Oを使用します。FPGA配線リソースを使用せず、タイミングが固定されているため、デザインは簡潔になります。
このガイドでは、サポートされているすべてのPHY動作速度 (高速HS 480Mbps、フルスピードFS 12Mbps、および低速LS 1.5Mbps) を網羅するデザイン・ガイドラインについて説明します。
ガイドライン: デバイスがクロックを供給する場合のUSB PHYモードと、外部クロックがソースの場合のUSB PHYモードをどちらもサポートするボードをデザインすることが推奨されます。
Arria 10 SoCのULPI MACとPHY間のインターフェイスは、MACからPHYのDATA[7:0]、DIR、NXTおよび、MACからPHYのSTPで構成されます。最後に、60MHzの静的クロックがPHYまたは外部オシレーターから駆動されます。これは、HPSからUSB MACの一部のレジスターアクセスなどの動作に必要になります。PHYメーカーより提供されているリセットおよび電源投入に関する推奨事項に従っていることを確認してください。
お使いのUSB PHYが入力クロックモードと出力クロックモードの両方をサポートする場合、 インテル® では、両方のモードをサポートするようにボードを設計し、潜在的なタイミングの問題を軽減することを推奨しています。通常、これらのモードは、HighまたはLowに引かれるパッシブ・ブートストラップ・ピンを介して選択されます。
ガイドライン: USB信号のトレース長が最小になっていることを確認します。
60MHzにおける周期は16.67nsであり、その間に、例えばクロックは外部PHYからMACに、そしてデータおよび制御信号はMACからPHYに移動する必要があります。往復遅延があるため、CLKおよびULPI信号の最大長は重要です。事前に準備されているタイミングデータに基づくと、最大長は7インチ未満にすることが推奨されます。これは5nsのTco仕様のPHYに基づいています。仕様がそれよりも遅い場合は、それに応じて全長を短くする必要があります。
バスのUSB PHY側にセットアップのタイミング・マージンがほとんどない場合は、PHYを入力クロックモードに切り替え、ボードから60MHzのクロックソースを供給することができる場合があります。
ガイドライン: シグナル・インテグリティーが考慮されていることを確認します。
シグナル・インテグリティーは主に、PHYからHPSのMACに駆動されるCLK信号において重要です。これらの信号は最大長のポイントツーポイントであるため、通常は終端せずに実行することができますが、 インテル® では、トレースをシミュレーションし、反射を最小限に抑えることを推奨しています。シミュレーションで特に示されない限り、FPGAからの50Ωの出力設定を使用することが一般的に推奨されます。可能であれば、PHYベンダーより提供されている同様の設定を使用します。
ガイドライン: OTG動作を使用する場合は、デザインを適切に行います。
On-the-Go (OTG) の機能を使用する場合、SoCはホストまたはエンドポイントになることができます。ホストモードにおいては、USBフラッシュドライブをサポートしている場合や、潜在的にUSBハードドライブをサポートしている場合などの電力供給を考慮してください。これらの電力要件と逆電流は通常、 インテル® Arria® 10 SoCのインテル開発キットで使用されているような外部ダイオードと電流リミッターを使用して考慮する必要があります。
詳細は、 インテル® Arria® 10 SoC開発ボードの回路図を参照してください。
4.5.3. QSPIフラッシュ・インターフェイスのデザイン・ガイドライン
ガイドライン: QSPI_SS信号が番号順に使用されていることを確認します。
インテル® Arria® 10 SoCでは、最大4つのQSPIチップセレクトを使用することができます。デバイスは、チップセレクト0に接続されているQSPIからのみブートすることができます。
インテル® Quartus® Primeでは、QSPI_SS信号が順番に使用されることを前提としています。例えば、SS1を使用せずに、SS0とSS2を使用することはできません。
QSPI_SS1ピンは、BSEL0としても使用されることに注意してください。したがって、BSEL=0x6 (1.8V QSPI) を選択すると、QSPI_SS1の機能は使用できなくなります。
サポートされているQSPIデバイスの詳細に関しては、インテルFPGAサポート情報のウェブサイトで提供されている「インテル® Arria® 10 SoC FPGAがサポートするフラッシュデバイス」のページを参照してください。
QSPIフラッシュからのブートの詳細に関しては、RocketBoards.orgのウェブサイトの「Booting from QSPI Flash」のページを参照してください。
QSPIフラッシュのプログラミングの詳細に関しては、RocketBoards.orgのウェブサイトの「Programming QSPI Flash」のページを参照してください。
ガイドライン: 4バイトのアドレス指定を備えるQSPIフラッシュを使用する場合は、HPSがリセットされるたびにQSPIフラッシュがリセットされる、もしくは電源が再投入されるようにボードを設計します。
インテル® Arria® 10 HPSブートROMは、3バイトのアドレスモードのデフォルト設定で動作するように設計されています。動作中にQSPIフラッシュが4バイトのアドレス指定に切り替わる場合は、HPSがリセットされるたびにデフォルトの3バイトのアドレス指定モードに戻ることを保証する必要があります。これに従わない場合、HPSはQSPIチップからの起動、もしくはQSPIチップへのアクセスを行うことができません。
- リセットピンを備えるQSPIデバイスの場合、HPSデバイスがリセットされるたびにリセット信号をアサートします
- リセットピンのないQSPIデバイスの場合、HPSデバイスがリセットされるたびにQSPIチップの電源を再投入します
インテル® Arria® 10 SoC開発キットは、HPSがリセットされるたびにQSPIフラッシュがリセットされることを保証するリセットスキームを使用します。
4.5.4. SD/MMCおよびeMMCカード・インターフェイスのデザイン・ガイドライン
ガイドライン: SD/MMCの電源イネーブルがデザインで使用されている場合は、電源イネーブルが正しく機能することを保証します。それには、次の回避策の1つを実装することが必要です。
SD/MMCの電源イネーブルは、ロジックHighでSD/MMCカードへの電源を有効にし、ロジックLowで電源を無効にするように機能することを目的としています。ただし、SD/MMCの電源イネーブル (SDMMC_PWR_ENA_HPS) 信号とBSEL[1] 信号は、同じ専用I/Oピンを共有します。SD/MMCカードからブートを行う際は、パワーオンリセット中にBSEL[1] がLowに引き下げられ、ブートROMによって第2ステージ・ブート・ローダーがフラッシュからオンチップRAMにコピーされないようにします。
- ボード上で電源イネーブルをHighに強制する
- GPIOを使用して電源イネーブルを制御する
- ボード上で電源イネーブルラインを反転させ、ソフトウェアが電源を無効 (SDMMC_PWR_ENA_HPSをHigh) にした際に、ボードで信号を反転させてカードをオフにする
ガイドライン: 1.8VでのSDカードの動作を使用する場合は、電圧変換トランシーバーが適切に実装されていることを確認します。
SDカードは、最初は3Vで動作します。一部のカードは、初期化後に1.8Vに切り替えることができます。さらに、一部のMMCカードは、1.8Vと3.3Vの両方で動作することができます。HPS I/Oは固定電圧レベルを使用しており、動的に変更することができないため、1.8Vで動作可能なカードでは、レベルシフトと分離をサポートするトランシーバーが必要です。
Intel Arria 10 Hard Processor System Technical Reference ManualのSD/MMC Controller内のVoltage Switchingの章で示されているガイドラインに従います。一部のMMCカードは、1.8VのI/O動作のみで動作することができ、最初の3.0Vでの動作は必要ありません。このような場合は、レベルシフターは必要ありません。
HPS I/Oバンクの電圧 | SDカードの電圧 | レベルシフターの必要性 |
---|---|---|
3.0V | 3.0V | なし |
3.0V | 1.8V | あり |
1.8V | 3.0V | あり |
1.8V | 1.8V | あり |
ガイドライン: 初期のIDモードとデータ転送モード、および通常の動作でのタイミングが考慮されていることを確認します。
SDカードは、最初に最大400KHzの周波数でIDプロセス時は動作します。デバイスが識別されると、ブートROMはデータ転送モードに切り替わります。このモードでは、クロックは最大12.5MHzで動作することができます。通常、第2ステージ・ブート・ローダーは、最大動作周波数の50MHzまでさらにインターフェイス速度を上げます。
詳細は、Intel Arria 10 Hard Processor System Technical Reference Manualの付録「Booting and Configuration」に記載されている「SD/MMC Controller Clock Options Based on CSEL and HPS_CLK fuse settings」の表を参照してください。
ガイドライン: HPSがリセットされる際に、SD/MMCカードがリセットされるようにします。
システムをSD/MMCから起動できるようにするには、HPSがリセットされるたびにSD/MMCカードもリセットされることを保証し、メモリーカードがブートコードで想定されている状態になるようにします。
4.5.5. QSPIおよびSD/MMC/eMMCへのフラッシュ・メモリー・リセットの提供
ガイドライン: HPSをリセットした際にQSPIおよびSD/MMC/eMMCデバイスがリセットされるメカニズムがあることを確認します。
QSPIおよびSD/MMC/eMMCフラッシュデバイスは、ソフトウェアによって、ブートROMから正常にアクセスできない状態になる場合があります。これは、次のリセットでブートの失敗が発生する原因になる場合があります。この問題は、HPSがリセットされている一方で、フラッシュ部分がリセットされていないために発生します。
そのため、QSPIおよびSD/MMC/eMMCブート・フラッシュ・デバイスは、HPSリセット (ウォームまたはコールド) が発生するたびにリセットする必要があります。
4.5.6. NANDフラッシュ・インターフェイスのデザイン・ガイドライン
ガイドライン: 選択したNANDフラッシュデバイスが、8ビットまたは16ビットのONFI 1.0に準拠するデバイスであることを確認します。
- 8ビットまたは16ビットのONFI 1.0に準拠する外部フラッシュデバイス
- ブートデバイスに向けてx8のインターフェイス、大容量ストレージ (ブート以外) の使用に向けてx16がサポートされる
- シングルレベル・セル (SLC) もしくはマルチレベル・セル (MLC)
- ブートソースにはce#とrb#ピンのペアを1組のみ利用可能です。大容量ストレージには3組まで追加ペアを利用できます。
- ページサイズ: 512バイト、2KB、4KB、 8KB
- ブロックごとのページ: 32、64、128、256、384、512
- 誤り訂正符号 (ECC) セクターサイズは、512バイト (4、8、16ビットの訂正)、または1024バイト (24ビットの訂正) にプログラミング可能です。
- NANDデバイスをブートに使用する場合は、ブートROMは512Bのセクターサイズを使用し、セクターあたり最大8ビットの訂正が可能なECCをサポートします。
詳細に関しては、インテル® Arria® 10 SoC FPGA がサポートするフラッシュデバイスのウェブページで提供されている、サポートされるNANDデバイスのリストを参照してください。
4.5.7. UARTインターフェイスのデザイン・ガイドライン
ガイドライン: FPGAファブリックを介してUART信号をルーティングする場合、フロー制御信号を適切に接続します。
信号 | 方向 | 接続 |
---|---|---|
CTS | 入力 | Low |
DSR | 入力 | High |
DCD | 入力 | High |
RI | 入力 | High |
DTR | 出力 | 接続なし |
RTS | 出力 | 接続なし |
OUT1_N | 出力 | 接続なし |
OUT2_N | 出力 | 接続なし |
4.5.8. I2Cインターフェイスのデザイン・ガイドライン
ガイドライン: FPGAファブリックを介してI2C信号をルーティングする際は、オープンドレイン・バッファーをインスタンス化します。
FPGAを介してI2C信号をルーティングする場合、HPSからFPGAファブリックへのI2Cピン (i2c*_out_data、i2c*_out_clk) はオープンドレインではなく、論理レベルが反転していることに注意してください。よって、論理レベル0をI2Cバスに駆動するには、対応するピンをHighに駆動します。この実装は、それらを使用してトライステート・バッファーの出力イネーブルに直接接続することができるので便利です。オープンドレイン・バッファーを実装するには、altiobufを使用する必要があります。
ガイドライン: プルアップがボードデザインの外部SDAおよびSCL信号に追加されていることを確認します。
I2C信号はオープンドレインであるため、バス上のデバイスがバスをLowに引き下げていない際に、バスを確実にHighに引き上げるためのプルアップが必要です。
4.6. 未使用HPSブロックの接続ガイドライン
ピンの機能 | HPSが使用されていない場合の接続先 |
---|---|
VCCIOREF_HPS VCCPLL_HPS VCCIO_HPS VCCL_HPS |
グランド |
HPS_CLK1 HPS_nPOR HPS_nRST 残りの14個のHPS専用IO |
接続なし (NC) |
4.7. インテル Arria 10 SoC FPGAのボード・デザイン・ガイドラインの改訂履歴
ドキュメント・バージョン | 変更内容 |
---|---|
2020.08.14 | メンテナンス・リリース |
2019.04.17 | メンテナンス・リリース |
2019.03.18 |
|
2017.12.20 | QSPIおよびSD/MMC/eMMCへのフラッシュ・メモリー・リセットの提供の章を追加しました。以前は、エンベデッド・ソフトウェアのデザイン・ガイドラインの章に記載されていました。 |
2017.05.08 | ベアメタル・フレームワークとしてのブートローダーの使用の章を新しく追加しました。 |
2016.09.16 | 初版 |
5. Arria 10 SoC FPGAに向けたエンベデッド・ソフトウェアのデザイン・ガイドライン
5.1. HPSに向けたエンベデッド・ソフトウェアのデザイン・ガイドライン
5.1.1. 目的
この章では、Arria 10ハード・プロセッサー・システムに向けてソフトウェア開発プラットフォームを構築するためのデザイン上の考慮事項について説明します。
記載されている推奨事項に従い、最終アプリケーションのパフォーマンス、サポート、および市場投入までの時間に関する要件に合うソフトウェア・プラットフォームのコンポーネントを選択します。
5.1.2. ソフトウェア開発プラットフォームのコンポーネントの構築
ソフトウェア開発プラットフォームを正常に構築するため、 インテル® では、HPSシステムの適切なコンフィグレーションとして知られているベースライン・プロジェクトから始めることを推奨しています。その後、最終アプリケーションに合わせてベースライン・プロジェクトを変更します。
- オペレーティング・システムを選択します (ベアメタル、Linuxまたはパートナーのオペレーティング・システム、もしくはリアルタイム・オペレーティング・システム)
- 最終アプリケーションまたはドライバーの作成もしくは更新を選択します
5.1.2.1. ゴールデン・ハードウェア・リファレンス・デザイン (GHRD)
GHRDは、 インテル® Arria® 10 SoC開発キット向けの完全なHPSデザインを含む インテル® Quartus® Primeプロジェクトです。GHRDは、ブートソース、SDRAMメモリーおよび、開発ボード上のその他のペリフェラルへの接続を備えています。
HPSの機能を有効に活用するには、 インテル® Arria® 10 SoCを備えるハードウェア・デザインを使用する必要があります。ハードウェア・デザインの目的は、FPGA部分、HPSのピン・マルチプレクサーおよびI/Oを含むSoCと、DDRAMをコンフィグレーションすることです。SoC EDSソフトウェア・プロジェクトはすべて、ハードウェア・デザインに依存します。
GHRDは、Quartus Primeデザイン・スイート (QPDS) のすべてのメジャーリリースにおいて回帰テストが行われています。また、既知のハードウェアの問題に対する最新のバグ修正が含まれています。そのためGHRDは、SoC FPGAハードウェア・システムの優れたコンフィグレーションとして機能することが知られています。
ガイドライン: 最新のGHRDを新規SoC FPGAハードウェア・プロジェクトのベースラインとして使用します。その後、最終アプリケーションのニーズに応じてデザインを変更することが可能です。
- GSRD for Linux pageには、最良のコンフィグレーションとして知られる最新のバージョンが含まれます。
- SoC EDSインストール・フォルダー — <SoC EDS Installation directory>\examples\hardware\a10_soc_devkit_ghrd — このフォルダーには、対応するSoC EDSのバージョンでサポートされるバージョンが含まれています。これは、SoC EDSで提供されるHWLIBデザイン例のベースとして使用されています。これは最新のコンフィグレーションではない場合があります。
5.1.3. アプリケーションに向けたオペレーティング・システムの選択
5.1.3.1. LinuxまたはRTOSの使用
インテル® Arria® 10 SoCをサポートするオペレーティング・システムは、Linux OSを含めていくつかあります。詳細に関しては、インテルのSoC パートナーOSエコシステム・ウェブページを参照してください。
インテル® では、さまざまなLinuxカーネルの選択肢をSoCデバイスに向けてサポートしています。サポートされるカーネルには、最新の安定版カーネル、最新のLTSI (Long Term Support Initiative) カーネルおよび、リアルタイムのプリエンプション (PREEMPT_RT) を備えるLTSIカーネルがあります。
インテルでは、ユーザースペースの観点から、Yocto Projectと互換性のあるAngstromディストリビューションを可能にしています。
パートナーOSプロバイダーは、SoC FPGAデバイスに向けたボード・サポート・パッケージおよび商用サポートを提供しています。Linuxコミュニティーもまた、SoC FPGAデバイスに向けたボード・サポート・パッケージおよびコミュニティー・サポートを提供しています。
SoC FPGAのオペレーティング・システムの選択には、多くの内容が考慮されます。それには、オペレーティング・システムの機能、ライセンス条項、OSに基づく共同ソフトウェア・プロジェクトおよびフレームワーク、利用可能なデバイスドライバーおよびリファレンス・ソフトウェア、社内のレガシーコードおよびOSに関する知識、お使いのシステムのリアルタイム要件、アプリケーションに必要な機能上の安全性およびその他の認証などがあります。
アプリケーションに適したOSを選択する際に、 インテル® では、SoC FPGAで利用可能なオープンソースおよび市販のオペレーティング・システムで提供されている機能とサポートサービスに関して理解することを推奨しています。インテルのOSパートナー、業界のウェブサイトより、選択を行う際に参考となる情報を取得することができます。
オペレーティング・システムとベアメタル・アプリケーションのリアルタイム・パフォーマンスに関しては、多くの誤解があります。 Arm* Cortex* のAクラス・プロセッサーの場合、リアルタイム・オペレーティング・システムが提供する多くの機能により、プロセッサーのリソースを効率的に使用しています。また、ランタイムのアプリケーションを管理する機能が提供されています。
これらの効率性により、アプリケーションには十分なリアルタイム・パフォーマンスがもたらされ、利用可能なデバイスドライバー、ミドルウェア・パッケージ、ソフトウェア・アプリケーションおよびサポートサービスの大部分を継承できるようになります。オペレーティング・システムを選択する際にはこの内容を考慮することが重要です。
5.1.3.2. ベアメタル・アプリケーションの開発
HPSは、ベアメタル・コンフィグレーション (OSなし) で使用することができます。インテルでは、高レベルAPIおよび低レベルマクロで構成されるハードウェア・ライブラリー (HWLib) をほとんどのHPSペリフェラルに提供しています。
ベアメタル・ソフトウェアは通常、ボードの立ち上げに使用されますが、ベアメタルは実際のアプリケーション・プラットフォームとしても使用することができます。ただし、HPSに向けてベアメタル・アプリケーションを開発するには、ランタイムの機能の開発について理解し、ベアメタル・アプリケーションがMPUのサブシステムで利用可能なリソースを効率的に使用できるようにする必要があります。
- 一般的なベアメタル・アプリケーションでは、単一のコアのみが使用されます。MPUのサブシステムをフル活用するには、コアとキャッシュ・サブシステムの両方を管理するランタイムの機能を開発する必要があります。
- アプリケーションが複雑になるにつれ、プロセスの管理とスケジュール、プロセス間通信の処理、およびアプリケーション内のイベント間の同期を行う機能を構築することが必要になる場合があります。
そのため、小さなLightweight RTOSでさえも、MPUシステム・コンプレックスのリソースをより効率的に使用する簡単なスケジューリング、プロセス間通信、および割り込み処理の機能を提供します。
5.1.3.3. ベアメタル・フレームワークとしてのブートローダーの使用
アプリケーションが比較的シンプルで、マルチコアやマルチタスクなどの複雑な機能を必要としない場合は、アプリケーションをブートローダーに含めることは1つの選択肢になります。
アプリケーションをブートローダーに含めることには次の利点があります。
- ブート時間短縮の可能性
- 大容量ストレージやネットワークなど、ブートローダーにすでに実装されている機能へのアクセス
以下は、利用可能なブートローダーとそのソースコードです。
- U-Boot: オープンソースGPLライセンス
- MPL: オープンソースBSDライセンス
- UEFI: オープンソースBSDライセンス
5.1.3.4. 対称型および非対称型マルチプロセッシング・モード (SMPおよびAMP)
インテル® Arria® 10 HPSのデュアルコア Arm* Cortex-A9 MPCore* は、対称型マルチプロセッシング (SMP) と非対称型マルチプロセッシング (AMP) のコンフィグレーション・モードをサポートすることができます。
ガイドライン: 市販のオペレーティング・システムで利用可能なパフォーマンスおよび最適化を理解し、SMP対応のOSまたはRTOSが、パフォーマンス要件およびリアルタイム要件を満たしているかを確認します。
SMPモードでは、単一のOSインスタンスが両方のコアを制御します。SMPのコンフィグレーションは、さまざまなOSメーカーによって広くサポートされており、マルチプロセッシングの最も一般的で簡単なコンフィグレーション・モードです。
Linux*および商業用に開発されたオペレーティング・システムは、CPUコアのリソースを最大限に活用する機能を提供しており、それらを効率的に使用することで、最適なパフォーマンスと使いやすさを実現します。例えば、SMP対応のオペレーティング・システムは、プロセッサー親和性を設定するオプションを提供します。つまり、各タスクまたはスレッドを特定のコアで実行するように割り当てることができます。この機能により、ソフトウェア開発者は、それぞれの Arm* Cortex-A9コアへのワークロード分散をより適切に制御し、AMPの代替としてシステムの応答性を高めることができます。
5.1.4. Linuxに向けたソフトウェア開発プラットフォームの構築
5.1.4.1. Linux向けゴールデン・システム・リファレンス・デザイン (GSRD)
- GHRD - インテル® Quartus® Primeプロジェクト
- U-Bootベースのリファレンス・ブートローダー
- リファレンスLinux BSP
- サンプルLinuxアプリケーション
次の図は、GSRDのコンフィグレーションを示しています。

Linux向けのGSRDは、十分にテストされた優れたデザインとして知られ、HPSとFPGAのリソースをどちらも使用するシステムを紹介しています。これは、ベースライン・プロジェクトとして使用することを目的にしています。
ガイドライン: ソフトウェア開発プラットフォームを正常に構築するため、インテルでは、GSRDをベースライン・プロジェクトとして使用することを推奨しています。
GSRDは、インテルSoC開発ボードをターゲットとしており、ソースおよびプリコンパイルの両方の形式で提供されます。RocketBoards.orgからGSRDをダウンロードし、それをアプリケーションのニーズに応じて変更します。
ガイドライン: 新しいプロジェクトではすべて、最新バージョンのGSRDをベースラインとして使用することが推奨されます。
5.1.4.2. Linux向けGSRDのビルドフロー
次の図は、GSRDの詳細なビルドフローを示しています。詳細は、Golden System Reference Design (GSRD) User Manualsを参照してください。
- Yocto Projectを使用せずにLinuxカーネルを個別にビルドすることができます
- Yocto Projectを使用せずにLinuxファイルシステムを個別にビルドすることができます
- デバイス・ツリー・ジェネレーターを使用せずにLinuxデバイスツリーを管理することができます (手動での編集など)
5.1.4.3. ソースコード管理における考慮事項
GSRDのビルドプロセスは、オンラインより入手可能ないくつかのGitツリーに依存しています。以下にその一部を示します。
Gitツリー | リンク |
---|---|
Linux | https://github.com/altera-opensource/linux-socfpga |
U-Boot | https://github.com/altera-opensource/u-boot-socfpga |
リファレンス・デザインのレシピ | https://github.com/altera-opensource/meta-altera-refdes |
リファレンス・デザインのソース | https://github.com/altera-opensource/linux-refdesigns |
ガイドライン: アルテラ・オープンソースのサイトにあるリポジトリーのコンテンツが永続的に利用可能であると想定せず、独自にGitリポジトリーを管理してください。Gitリポジトリーの管理は、Gitサービス・プロバイダーを利用するなどのさまざまな方法で実現することができます。独自のGitリポジトリーを管理する利点には、ビルドの再現性、ソースコードの管理、Gitによって有効化された分散モデルの活用などがあります。
GSRDは、Yoctoレシピを使用して構築されたrootfilesystemを使用しています。レシピはさまざまなオープンソース・パッケージのソースを取り込み、それらをrootfilesystemに構築しています。これらのレシピの一部は汎用であり、特定のバージョンを参照しないため、最終結果はビルドごとに異なる場合があります。
ガイドライン: Yoctoのrootfilesystemを再構築し、再現性が必要な場合は、ビルドに使用したYoctoダウンロード・フォルダーのコピーを維持しておく必要があります。
5.1.4.4. Linuxのデバイスツリーに関するデザインの考慮事項
Linuxのデバイスツリーは、Linuxオペレーティング・システムのカーネルに基盤となるハードウェアを記述するデータ構造です。このデータ構造をOSのカーネルへ渡すことで、単一のOSバイナリーでハードウェアの多くのバリエーションをサポートすることが可能になります。この柔軟性は、ハードウェアにFPGAが含まれている場合に、特に重要になります。
- インテルSoC開発キットを対象とするLinuxカーネル・ソース・コードで提供されているSoC FPGAリファレンス・デバイス・ツリーから開始します。これらは、デバイスのHPS部分をカバーしますが、プロジェクトごとに異なるFPGA部分はカバーしません。SD/MMC、QSPI、NANDの各バージョンが、カーネル・ソース・コードとともに提供されています。
- 必要に応じてデバイスツリーを編集し、インテルSoC開発キットからのボードの変更に対応します。
- 必要に応じてデバイスツリーを編集し、FPGAソフトIPをターゲットとするLinuxドライバーに対応します。
詳細に関しては、LinuxのDevice Tree Generator User Guideを参照してください。
5.1.5. ベアメタル・アプリケーションに向けたソフトウェア開発プラットフォームの構築
インテルのハードウェア・ライブラリー (HWLib) は、SoC EDSで提供される一連の低レベル・ベアメタル・ソフトウェア・ユーティリティーであり、HPSのさまざまなコンポーネントを制御するためにデザインされています。HWLibはまた、インテルのOSパートナーでのオペレーティング・システムに向けたボード・サポート・パケージ構築に一般的に使用されています。
- SoC抽象化レイヤー (SoCAL): HPSアドレス空間内のデバイスレジスターの直接アクセスと制御を可能にするレジスター抽象化レイヤーです。
- ハードウェア・マネージャー (HWMgr): より高レベルなユース・ケース・シナリオに向けてより複雑な機能とドライバーを提供するAPI です。
ベアメタル開発を開始するためのガイドのフルセットについては、Intel SoC FPGA Embedded Development Suite Getting Started Guidesのウェブページを開き、Getting Started with HwLibs Baremetal Developmentの部分までスクロールしてください。
HWlibを使用するソフトウェア・アプリケーションでは、MPUシステム・コンプレックス、キャッシュ、およびメモリーのリソースを管理するためのラン・タイム・プロビジョニングが必要です。これらのプロビジョニングは通常、オペレーティング・システムが提供するものです。
ガイドライン: インテル® では、ラン・タイム・プロビジョニングの開発について十分に理解している場合にのみ、HWlibを使用してアプリケーションを管理することを推奨しています。
ガイドライン: <SoC EDS installation folder>/embedded/examples/software/で提供されているHWLIB例をベアメタル開発の開始点として使用します。
HWLIBの詳細に関しては、SoCエンベデッド・デザイン・スイート (EDS) ユーザ・ガイドを参照してください。
5.1.6. パートナーOSまたはRTOSに向けたソフトウェア開発プラットフォームの構築
パートナーOSのプロバイダーは、SoC FPGAデバイスに向けたボード・サポート・パッケージおよび商用サポートを提供します。サポートには通常、プロジェクトを開始するための例と関連するドキュメントが含まれています。
5.1.7. ブート・ローダー・ソフトウェアの選択
インテル® Arria® 10のブートフローを次の図に表しています。
ブート・ローダー・ソフトウェアは、ソフトウェア開発プラットフォームにおいて最も重要なコンポーネントの1つです。ブートローダーの役割は、システムを初期化し、次のブートイメージであるOSまたはベアメタル・アプリケーションに制御をロードし渡すことです。
ブート・ローダー・ソフトウェアは、利用可能なHPSのオンチップメモリー外で動作するように設計されており、HPSのコンフィグレーションに不可欠な初期のハードウェア設定、HPSのフラッシュとペリフェラル・コンポーネントを制御するソフトウェアの機能、早期デバッグとトラブルシューティングを可能にするユーティリティーを提供します。
例えば、U-bootブートローダー・ソフトウェアは、HPSのECCレジスターをコンフィグレーションします。HPS IPコンポーネントに向けたArria 10外部メモリー・インターフェイスにおけるDDR SDRAMのECCコンフィグレーション設定は、ビット・ストリーム・ペリフェラルのRawバイナリーファイル (.rbf) に変換されます。ブート・ローダー・ソフトウェアは、ビット・ストリームからECC SDRAMのコンフィグレーション設定を抽出し、HPSでECCレジスターを設定します。
- RBFファイル (RAWバイナリーファイル) - SDRAMに向けたレジスター設定、共有I/OとFPGAピンのコンフィグレーションを含みます
- ブートローダー・デバイス・ツリー構造 (DTS) - クロックツリー、I/Oの多重化、および専用ピンのコンフィグレーション (スルーレート、プルアップ、プルダウン、一部のNoC設定) に向けたユーザー設定といくつかのデフォルト設定を含みます
- U-Bootソースコード - 残りの設定に使用
- U-Bootブートローダー: オープン・ソース・コミュニティーから入手可能な多くの機能を継承しており、Linux OSユーザーの間で広く利用されています。GPLライセンスで管理されています。SoC EDSの一部として入手可能で、Linux向けGSRDで使用されます。
- UEFIブートローダー: 機能が豊富で、RTOSユーザーに広く利用されています。オープンソースのBSDスタイルライセンスで管理されています。Intel Arria 10 UEFI Bootloader Wikiから入手することができます。
ガイドライン: お使いのソフトウェア開発プラットフォームに適したブートローダーを選択するには、GPLおよびオープンソースのBSDライセンスについて十分に理解し、どのライセンス条項がご自身の要件に最適かを検討します。
ガイドライン: 最新バージョンのブート・ローダー・ソフトウェアを使用することが推奨されます。
ガイドライン: 必要とされるさまざまな初期化設定の量を考えると、ブートローダーを最初から作成することは推奨されません。提供されているブートローダーのオプションには、HPSのさまざまな部分に対する最適なデフォルト・コンフィグレーション設定が含まれています。
次の図は、U-Bootブートローダーのフローを示しています。このフローは、UEFIのフローと類似しています。
5.1.8. 開発、デバッグおよびトレースに向けたソフトウェア・ツールの選択
5.1.8.1. ソフトウェア・ビルド・ツールの選択
ガイドライン: ソフトウェア開発ツール (コンパイラー、アセンブラー、リンカー、アーカイバーなど) を決定します。また、使用しているツールのバージョンを特定します。
- ARMCCベアメタル・コンパイラー
- Mentor Graphics* Sourcery* CodeBench Lite Edition GCCベースのベアメタル・コンパイラー
- Linux* Linaroコンパイラー
その他の開発ツールもまた、サードパーティーのプロバイダーから提供されています。
5.1.8.2. ソフトウェア・デバッグ・ツールの選択
ガイドライン: ソフトウェア・デバッグ・ツールを決定します。
Arm* DS-5* for Intel® SoC FPGA Editionには、フル機能を備えたEclipseベースのデバッグ環境が含まれます。ほかにも、サードパーティーのプロバイダーから提供されている、Lauterbach T32などのデバッグツールがあります。
- インテル® Arria® 10 SoC開発キットなどと同様に、組み込み インテル® FPGA ダウンロード・ケーブルIIをオンボードで利用することができます。
- Lauterbach T32のツールを使用する場合は、外部JTAGハードウェアが必要になる場合があります。
5.1.8.3. ソフトウェア・トレース・ツールの選択
- 非リアルタイム: トレースデータをシステムメモリー (SDRAM など) または組み込みトレースバッファーに格納後、システムを停止し、JTAGを介してトレース情報をダウンロードして分析します。
- リアルタイム: 外部アダプターを使用し、トレースポートからトレースデータをキャプチャーします。ターゲットボードがこのシナリオをサポートしている必要があります
デバッグツールは通常、エンベデッド・ソフトウェア・プログラムの実行におけるトレースも提供しますが、外部ハードウェアが必要になる場合があります。例えば、SoC EDSで提供されるDS-5は、非リアルタイムおよびリアルタイムのトレースをどちらもサポートします。リアルタイムのトレースに使用する場合は、「DSTREAM」と呼ばれる外部トレースユニットが必要です。Lauterbach T32も同様の例になります。この場合は、リアルタイムのトレースに外部ハードウェアが追加で必要になります。
5.1.9. ボードの立ち上げに関する考慮事項
予約済みBSEL設定
起動の初期段階で、ターゲットへのJTAG接続を確立できない場合は、BSELの設定を0x0の「予約済み」に設定し、ブートROMが特定のブートソースから起動しないようにすることが有効な場合があります。その後、テストプログラムをダウンロードして、デバッガーで実行することができます。
ブートローダーのUARTでのログの記録
最初の電源投入時に、デバイスがまだコンフィグレーションされていない状態である場合は、プロセッサーでは専用のHPS I/Oのみを使用することができます。デバイスの他のI/Oをコンフィグレーションする前にブートプロセスを可視化するには、専用I/Oを使用して、シリアル・インターフェイスに接続する必要があります。
ガイドライン: UARTシリアル・インターフェイスをHPSデバイスの専用I/Oに接続し、ブートプロセスの可視性を取得します。このオプションはNANDでは使用できません。
5.1.9.1. SDRAM初期化の計画
ガイドライン: SDRAMの初期化方法を決定します。
- HPSブートローダーを実行する前に、FPGAを外部で完全にコンフィグレーションします。
- HPSブートローダーによってFPGAを完全にコンフィグレーションし、ブートローダーでSDRAMを起動します。
- FPGA I/Oと共有I/OをHPSブートローダーによってコンフィグレーションし、ブートローダーでSDRAMを起動します。FPGAファブリックは後でコンフィグレーションされます。このオプションは早期I/Oリリースと呼ばれています。このオプションは、すべてのデバイスで使用できるわけではありません。
サポートするSDRAM初期化シナリオを決定し、それに応じて計画します。
5.1.10. ブートおよびコンフィグレーションに関するデザインの考慮事項
5.1.10.1. ブートにおけるデザインの考慮事項
5.1.10.1.1. ブートソース
ガイドライン: サポートするブートソースを決定します。
-
インテル® Arria® 10 SoCのHPSは、さまざまなソースからブートすることができます。
- SD/MMCフラッシュ
- QSPIフラッシュ
- NANDフラッシュ
- FPGAファブリック
注: 複数のソースをサポートすることができます。例えば、ほとんどの開発を取り扱いが容易なSDカードを使用して行い、最終的なテストと製品リリースには、QSPIからのブートをターゲットにすることができます。
- SD カードは安価で普遍的に利用でき、大容量のストレージを備えています。信頼性が向上した産業用のバージョンが利用可能です。これらは管理されたNANDフラッシュであるため、ウェアレベリングと不良ブロック管理は内部で実行されます。
- eMMCデバイスはパッケージが小さく、大容量で利用可能であり、SDよりも高い信頼性を備えます。取外し可能ではありませんが、これは利点であり、より丈夫な操作が可能です。
- QSPIデバイスは非常に信頼性が高く、通常、セクターあたり最低100,000回の消去サイクルがあります。ただし、他のオプションと比べて容量が小さくなります。これらは通常、ブートソースとして使用されますが、アプリケーション・ファイルシステムとしては使用されません。
- NANDデバイスは大きなサイズで利用可能ですが、管理されていないNANDであるため、ウェアレベリングや不良ブロック管理などの手法をソフトウェアで実装する必要があります。
- FPGAブートでは、外部フラッシュデバイスを必要とせずにHPSをブートすることができます。FPGAブートメモリーは、FPGAリソース (通常は事前に初期されたエンベデッド・メモリー・ブロック) から合成することができます。または、外部SRAMやSDRAMなどのFPGAに接続されるメモリーにすることもできます。FPGAからブートするには、従来のコンフィグレーション・メカニズムを使用してFPGAをコンフィグレーションする必要があります。
5.1.10.1.2. 必要なフラッシュデバイスの選択
ガイドライン: ブート・フラッシュ・デバイスを選択します。
-
フラッシュデバイスはHPSブートROMで動作するか。
HPSは、ブートROMでサポートされているフラッシュデバイスからのみ起動することができます。
-
デバイスが動作することが確認され、プリローダー、U-Boot、Linuxなどのソフトウェアでサポートされているか。
サポートされているデバイスには、インテルでは、プリローダー、U-Boot、Linuxソフトウェアを提供しています。
他のデバイスの場合は、このソフトウェアはユーザーで開発する必要があります。
-
フラッシュデバイスはHPS Flash Programmerでサポートされているか。
HPS Flash Programmerは、JTAG接続を使用してフラッシュへの書き込みを可能にします。これは主に、初期のプリローダー/ブートローダーのイメージをプログラムするためのものです。
デバイスがHPS Programmerでサポートされていない場合は、HPSを使用してフラッシュをプログラミングするなどの、他のフラッシュ・プログラミング方法を使用することができます。例えば、U-Bootのフラッシュ・プログラミング機能を使用することができます。
詳細は、インテル® Arria® 10 SoC FPGAがサポートするフラッシュデバイスのウェブページを参照してください。
5.1.10.1.3. BSELのオプション
ガイドライン: 選択したブートソースにBSELピンをコンフィグレーションします。
ブートソースは、BSELピンで選択されます。
ボードに使用可能な別のブートソースがない場合でも、デバッグを目的としてブートソースを変更することが有効な場合があります。例えば、QSPIから起動するボードでは、予約済みブートを選択し、ブートROMが何も行わないようにすることが効果的な場合があります。もしくは、FPGAからのブートを選択し、FPGAファブリックにテストイメージを配置することもできます。
システムで許容される場合は (スペース上の制約)、スイッチまたは少なくとも抵抗を備えるように計画し、必要に応じてBSELを変更できるようにします。
5.1.10.1.4. ブートクロック
ガイドライン: ブート・クロック・ソースを決定します。
- HPSに対する外部クロックの値 (OSC1クロックなど)
- ブート・フラッシュ・ソース・インターフェイスの動作周波数
- ヒューズオプション
可能な組み合わせは、Intel Arria 10 Hard Processor System Technical Reference Manualで説明されています。また、それらの組み合わせは、CSELピンで選択されます。
5.1.10.1.5. ブートヒューズの使用方法の決定
ガイドライン: 可能であれば、ヒューズの溶断を開発の最後まで延期し、デバッグにおける柔軟性を高めます。ヒューズが溶断すると、元の値に戻すことはできません。デザインの開発段階では、 CSELの値を変更することにより検討を行うことができます。この場合、CSELヒューズビットを恒久的にプログラミングする必要はなく、HPS_FUSESECシャドーレジスターをCSELヒューズビットのプロキシーとして使用します。デバイスをデフォルトの動作に戻すには、単にデバイスの電源を再投入します。
ガイドライン: ブートヒューズのコンフィグレーション方法を決定します。
さまざまなヒューズが利用可能であり、それらはブートフローに影響します。例えば、FPGAヒューズからのブートを切断すると、ブートソースの特定にBSELピンは使用されず、HPSはFPGAファブリックからのみブートします。このプロトコルは、いくつかのセキュリティー・シナリオにおいて有効です。
ヒューズの完全なリストとそれぞれの動作に関して、およびそれらのヒューズをどのようにプロジェクトに設定するかを事前に決定する際は、Arria 10 HPS Technical Reference Manualを参照してください。
5.1.10.1.6. CSELのオプション
ガイドライン: CSELのオプションをコンフィグレーションする方法を提供します。
最終製品で必要なCSELの設定が1つだけの場合でも、ヒューズのシャドーレジスターを使用してさまざまなCSELの値を利用できるようにしておくことは、デバッグの目的において有益な場合があることに注意してください。単一の値を使用する場合でも、可能であれば、CSELのコンフィグレーションを変更できるようにボードを設計します。このコンフィグレーションはデバッグに役立ちます。これは、抵抗、ジャンパー、またはスイッチで実現することができます。
5.1.10.1.7. フラッシュのプログラミング方法の決定
ガイドライン: ボードを正しくコンフィグレーションし、フラッシュのプログラミングがサポートされるようにします。
HPS Flash Programmerは、SoC EDSで提供されるツールであり、 インテル® Arria® 10のボードでQSPIおよびNANDフラッシュデバイスをプログラミングするために使用することができます。このツールは、比較的少量のデータ (ブートローダーなど) を書き込むことを目的としています。このツールはJTAGを介して動作するため、速度が制限されます。
HPS Flash Programmerツールを使用する場合は、使用する予定のデバイスがサポートされていることを確認してください。サポートされているデバイスは、SoCエンベデッド・デザイン・スイート (EDS) ユーザ・ガイドに記載されています。
- デバッガーを使用したフラッシュのプログラミング (Arm DS-5 for Intel SoC FPGA Editionなど)
- U-Bootからのフラッシュのプログラミング
- Linux* (または他のOS) コンソールからのフラッシュのプログラミング
- 専用のハードウェアによるフラッシュのプログラミング
5.1.10.1.8. NANDフラッシュデバイスの選択
ガイドライン: ONFI 1.0に準拠するNANDフラッシュを選択します。
NANDからブートする際は、選択したデバイスがONFI 1.0に準拠していることを確認してください。
また、ブートに使用されるNANDデバイスには、x8インターフェイスおよび、ce#ピンとrb#ピンの1組のペアのみが必要です。x16インターフェイスは、最大4組のce#ピンとrb#ピンのペアの有無にかかわらず、NANDが大容量ストレージデバイスとして使用されており、FPGAファブリックI/Oに接続されている場合にのみ使用することができます。
ONFI 1.0に非準拠のデバイスには一部、ブートROMとの互換性を備えるものがありますが、HPS Flash Programmerは、ONFIに準拠するデバイスのみをサポートします。
HPS Flash Programmerは、SoC EDSのバージョン16.1以降のリリースにおいてNANDのプログラミングをサポートしています。
詳細は、NANDフラッシュ・インターフェイスのデザイン・ガイドライン の内容を参照してください。
5.1.10.1.9. QSPIフラッシュデバイスの選択
ガイドライン: 16MB未満のQSPIフラッシュをベアメタル・アプリケーションに使用します。
16MB未満のQSPIフラッシュは、HPSブートROMからのアクセスが可能な3バイトのアドレス指定を常に使用します。よって、HPSがリセット (コールドまたはウォーム) される際に、QSPIフラッシュのリセットまたは電源の再投入を行う必要がありません。
16MBを超えるQSPIの場合は、QSPIの4バイト・アドレス指定拡張コマンドを使用することを検討します (該当する場合)。
一部のQSPIフラッシュでは拡張コマンドセットが提供されており、4バイトのアドレス指定モードに切り替えることなく4バイトのアドレス指定を使用することができます。これによりフラッシュは3バイトのアドレス指定モードで保持され、次のリセットサイクルでQSPIフラッシュのリセットもしくは電源の再投入を行わずにブートROMからアクセスすることができます。
QSPIのブートに関しては、Arria 10 QSPI Boot Getting Started Guideを参照してください。
5.1.10.1.10. 参考資料
- インテル® Arria® 10 SoC FPGAのウェブページでは、テクニカル・リファレンス・マニュアル、レジスター、ピン接続ガイドラインなどのドキュメントが提供されています。
- SoCエンベデッド・デザイン・スイート (EDS) ユーザ・ガイド
- Intel SoC FPGA Embedded Development Suite Getting Started Guides
- Golden System Reference Design
- インテル® Arria® 10 SoCブート・ユーザーガイド
5.1.10.2. コンフィグレーション
- 従来のFPGAコンフィグレーション
- HPSによって開始するFPGAコンフィグレーション
HPSで開始するコンフィグレーションでは、FPP (高速パッシブパラレル) モードを使用することにより、HPSでFPGAをコンフィグレーションすることが可能です。このフローでは、QSPI、SD/MMC、およびNANDフラッシュなどのHPSでアクセス可能なストレージ位置を使用します。 インテル® Arria® 10 SoCのFPGAコンフィグレーション・フローは、外部コンフィグレーション・データ・ソースをFPGAのコンフィグレーション・サブシステム (CSS) ブロックに接続する インテル® Arria® 10 FPGAデバイスのものと同じです。
5.1.10.2.1. 従来のコンフィグレーション
JTAG、アクティブシリアル、高速パッシブパラレルなどの外部ソースによってFPGAがコンフィグレーションされる従来のFPGAコンフィグレーション・フローを使用する場合は、HPSブート・ソフトウェアをコンフィグレーションし、FPGAおよびHPS共有I/Oのコンフィグレーションを回避する必要があります。外部ソースでFPGAをコンフィグレーションする際は、HPS専用ブートI/Oを除くすべてのI/Oがコンフィグレーションされるため、この役割を実行しないようにHPS第2ステージ・ブートローダーをセットアップする必要があります。FPGAのコンフィグレーション中にHPSをブートした場合、ブートローダーはFPGAがユーザーモードに入るまで待機します。FPGAのコンフィグレーション後は、それをリコンフィグレーションしないことが重要です。この動作を行うと、HPS共有I/Oが一時的にオフラインになります。
5.1.10.2.2. HPSで開始するコンフィグレーション
デバイスに電源が入り、HPSがブートROMでソフトウェアの実行を開始すると、すべてのデバイスI/Oは、デフォルトの入力トライステートの動作モードになります。ブートROMは、サンプリングされたBSELピンに基づき専用のブートI/Oをコンフィグレーションします。ブートプロセス中のこの時点でコンフィグレーションされるI/Oは、HPSフラッシュデバイスに接続されるHPS専用I/Oのみであり、他のI/Oはすべてデフォルトの入力トライステートの動作モードに維持されます。第2ステージ・ブートローダーは、残りの専用HPSブートI/Oと、FPGAおよびHPS共有I/Oをコンフィグレーションします。これは、FPGA全体をコンフィグレーションする、もしくは早期I/Oリリース・ビットストリームをコンフィグレーションすることによりHPS共有I/OとHPS DDR I/Oのみをコンフィグレーションすることで行われます。
HPS早期I/Oリリース
HPSによって開始されるコンフィグレーション・フローは、早期I/Oリリースと呼ばれる機能をサポートします。早期I/Oリリースの機能により、HPSのブート時間を最小限に抑えることができます。これは、デバイスI/OのコンフィグレーションをFPGAファブリックの大部分のコンフィグレーションから独立して行うことで実現します。
この機能は、HPSのブート時間を短縮します。これは、FPGAコンフィグレーション・ファイルの大部分がFPGAファブリックのコンフィグレーションに使用され、I/Oのコンフィグレーションには一部のみが使用されることが理由です。コンフィグレーション・ファイルのI/O部分は、HPS共有I/O、HPS SDRAM I/O、および残りのFPGA I/Oのコンフィグレーションに使用されます。HPS専用I/Oは、FPGAコンフィグレーション・ビットストリームの影響を受けません。
FPGAファブリックから独立してI/Oをコンフィグレーションすることで、HPS SDRAMコントローラーが機能するようになり、HPSブートローダーは次のステージのブートコンテンツをSDRAMに取り込むことができます。I/Oがコンフィグレーションされると、残りのFPGAファブリックのコンフィグレーションは、すぐに行う、もしくはブートが完了した後にアプリケーションによって行うことができます。
ガイドライン: 早期I/Oリリースでは、起動に固定電源を使用します。
早期I/Oリリースのコンフィグレーション・フローを使用している場合、最初は、SmartVIDを使用してデバイスに電力を供給することができません。FPGAがコンフィグレーションされるまでは、代わりに固定電源を使用します。FPGAがコンフィグレーションされると、SmartVIDを有効にすることができます。
ガイドライン: HPS専用I/Oは、デバイスI/Oのコンフィグレーションに影響を受けない唯一のピンです。よって、コンフィグレーション・サイクルにわたって機能を維持する必要があるインターフェイスは、専用I/Oバンクに配置することが重要です。ブート時にHPSペリフェラルおよびHPS SDRAMへのアクセスが必要な場合は、HPSの早期I/Oリリースモードを使用してデバイスをコンフィグレーションする必要があります。
例えば、FPGAがコンフィグレーションされている間にシステムでUARTの動作を維持する必要がある場合は、専用I/OをUARTに使用する必要があります。HPSブートソースが外部フラッシュになる場合は、フラッシュを専用HPS I/Oに接続し、残りのI/Oがコンフィグレーションされている間にその機能を維持する必要があります。その他のユースケースに関しては、このドキュメントのFPGAのリコンフィグレーション の内容を参照してください。
HPSで開始するFPGAコアのコンフィグレーション
FPGAコンフィグレーションが失敗した場合 (例えばビットエラーのため)、HPS共有I/OおよびSDRAM I/Oは、入力トライステート・モードになります。早期I/Oリリース後にHPSでFPGA コンフィグレーションを開始してコンフィグレーションが失敗した場合、共有I/OペリフェラルまたはHPS SDRAMへのHPSアクセスは、I/Oがトライステートになっているために失敗します。HPS専用I/Oへの影響はありません。
この動作は、FPGAコアとコンフィグレーションの両方を含むRaw Binary File (.rbf) を使用するFPGAのフル・コンフィグレーションには影響しません。この場合、デバイスが正常にコンフィグレーションされた後にのみ、HPSはHPS共有I/OおよびHPS SDRAMにアクセスすることができます。
ガイドライン: HPS共有I/OまたはHPS SDRAMへのアクセスに依存しないコンフィグレーション障害回避または回復メカニズムを提供します。
ソフトウェアをSDRAM から実行する場合は、コンフィグレーションを開始する前にソフトウェアでコンフィグレーション・ビットストリームのチェックサムを実行することにより、この問題を回避することができます。例えば、.rbfにはCRC (巡回冗長検査) を含めることができるため、ファイルの内容をFPGAコアにプログラミングする前にソフトウェアで検証を行うことができます。
ガイドライン: ECCを有効にし、訂正可能なビットストリームの破損問題を回避します。
ソフトウェアが完全にオンチップRAMから実行されている際に、コンフィグレーション障害が発生した場合は、ペリフェラル・コンフィグレーションの.rbfを再度プログラミングし、HPS共有I/OとSDRAM I/Oを再度アクティブにすることで、ソフトウェアを回復することができます。
I/Oがリコンフィグレーションされると、ソフトウェアでFPGAファブリックをリコンフィグレーションすることができます。この場合、同じイメージまたはフォールバック・イメージ (同じ障害が再発しないように) のいずれかを使用します。
FPGAファブリックの残りの部分をコンフィグレーションする前に、ソフトウェアでまずビットストリームの整合性チェックを実行することが推奨されます。この整合性チェックの目的は、ビットストリームの破損によるコンフィグレーションの問題を回避することです。ビットストリームが破損している場合、FPGAファブリックのコンフィグレーションは失敗し、HPS専用I/Oを除くすべてのデバイスI/Oが入力トライステートの動作モードに戻ります。
5.1.11. フラッシュ・デバイス・ドライバーに関するデザインの考慮事項
SoC FPGAは、QSPI、NAND、SD/MMC/eMMCなどのタイプのフラッシュデバイスをサポートします。
5.1.12. HPS ECCに関するデザインの考慮事項
ECCは、HPS全体で、すべてのRAMに実装されています。これには、外部HPS EMIF、L2キャッシュデータRAM、およびすべてのペリフェラルRAMなどが含まれます。HPSのECCコントローラーはすべて、拡張ハミング・コード・アルゴリズムに基づいており、シングルエラーの訂正とダブルエラーの検出 (SECDED) を提供します。パリティー保護は、 Arm* Cortex-A9 MPCore* L1キャッシュメモリーとL2タグRAMに提供されます。ECCは、HPS EMIFおよび内部HPS RAMで選択的に有効にすることができます。診断テストモードとエラー挿入機能は、ソフトウェアの制御下で利用することができます。電源投入時またはコールドリセット時に、ECCはデフォルトで無効になります。
生成されたブートコードは、BSPの生成時に選択されたユーザーオプションに基づきECCをコンフィグレーションして初期化し、有効にします。カスタム・ファームウェアおよびベアメタル・アプリケーション・コードによるECC機能へのアクセスは、インテルが提供するHWLIBSライブラリーを使用することで容易になります。このライブラリーは、HPSのハードウェアの機能をプログラミングするためのシンプルなAPIを提供します。
詳細に関しては、SoCエンベデッド・デザイン・スイート (EDS) ユーザ・ガイド内の「ブート・ツール・ユーザガイド」および「ハードウェア・ライブラリ」の章を参照してください。
5.1.12.1. ECCに関する一般的なデザインの考慮事項
HPSのそれぞれのRAMには、固有の機能と要件を備える独自のECCコントローラーがあります。ただし、システムの統合に関する一般的なデザインの考慮事項がいくつかあります。
ガイドライン: HPSのECCに関連するリセットをリセット・マネージャー・モジュールで適切にコンフィグレーションします。
リセット・マネージャーは、HPSのECCに関連するリセットを管理します。Arria 10 Hard Processor System Technical Reference Manualの第3章「Reset Manager」を参照してください。
ガイドライン: ECCの制御、ステータス、および割り込み管理をシステム・マネージャー・モジュールで適切にコンフィグレーションします。
システム・マネージャーには、ECCに関連するレジスターのセットが含まれており、それによってHPS内のすべてのECCコントローラーのシステムレベルの制御とステータスを管理しています。ECCに関連する割り込みもまた、この一連のレジスターを介して管理されます。Arria 10 Hard Processor System Technical Reference ManualのSystem Managerの章を参照してください。
ガイドライン: ECCを有効にする前に、メモリーが初期化されていることを確認します。
HPSでRAMのECCを有効にする前に、ECCで保護されるメモリーへの書き込みを行い、メモリーデータの内容とECCシンドローム・ビットを初期化することが必要です。これに従わない場合は、ECCが有効になった後に、初期化されていない位置からの読み出しを行うと、意図しないビット・エラー割り込みが生成されます。初期化手順の詳細に関しては、Arria 10 Hard Processor System Technical Reference Manualの適切なペリフェラルの章を参照してください。
5.1.12.2. 外部SDRAMインターフェイスのECC
HPSの外部SDRAMインターフェイスのECCは、SDRAMアダプターに実装されています。SDRAMアダプターのECCコントローラーは、アドレスとデータの両方でSECDEDを実行し、メモリー内の目的の位置での有効なデータアクセスを保証します。
ガイドライン: すべてのSDRAM領域を初期化します。
ECCを有効にする前に、SoCシステムのいずれかの部分がSDRAMアダプターを介してアクセスすることができる外部SDRAMのすべての領域を初期化する必要があります。これには、プログラム・コードとデータ領域、およびFPGAマスターによって、またはL2キャッシュ・ライン・フェッチ時にアクセスされるメモリーの他の領域が含まれます。L2キャッシュが有効になっている場合は、初期化の領域を拡張することを検討します。キャッシュラインのフェッチは、プログラムコードとデータのフットプリントを超えて広がることがあるため、初期化されていないRAMの位置からビット・エラーが発生する可能性があります。ECCスクラブのメモリー領域は、 インテル® SoC EDSツールチェーンのBSP Editorユーティリティーで定義およびコンフィグレーションすることができます。
ガイドライン: SDRAMアダプターのECC書き込み動作を検討します。
部分的な書き込み (SDRAMメモリー・インターフェイス幅未満) の場合、アダプターはリードモディファイライトのシーケンスを実装することで、ECCビットをインターフェイス・ワード幅全体に対して維持します。ファームウェアやアプリケーション・ソフトウェアの作成時、およびシステム内の他のマスターからのアクセス時に、幅の狭いアクセスがアプリケーションの帯域幅やレイテンシーに与える影響を考慮します。
16ビットのデータでECCを有効にしてEMIFを使用する際の詳細に関しては、Intel Arria 10 SX Device Errata and Design Recommendationsを参照してください。
5.1.12.3. L2キャッシュ・データ・メモリーのECC
L2キャッシュメモリーはECCで保護されており、タグRAMはパリティー保護されています。L2キャッシュのECCは、システム・マネージャーのコントロール・レジスターを介して有効になります。
ガイドライン: L1およびL2キャッシュは、ECCが有効にされているキャッシュ可能なメモリー領域に対して、ライトバックおよびライトアロケートとしてコンフィグレーションする必要があります。
インテル SoC EDSを介してサポートされるBSPの場合、BSP Editorユーティリティーを使用してBSPをECCサポートに対してコンフィグレーションすることができます。ベアメタル・ファームウェアの場合は、Arria 10 Hard Processor System Technical Reference ManualのCortex-A9 Microprocessor Unit Subsystemの章で、L2 Cache Controller Address Map for Arria 10の内容を参照してください。
ガイドライン: ACPを使用しL3インターコネクトを介して行われるキャッシュ・コヒーレント・アクセスでは、L2キャッシュ・コントローラーでECCが有効になっている場合、64ビット幅の64ビットにアライメントされた書き込みアクセスを行う必要があります。
ECCを有効にしてもL2キャッシュのパフォーマンスに影響はありませんが、ACPを使用するアクセスは、64ビット幅にし、メモリー内で64ビットにアライメントされている必要があります。これには、FPGA-to-HPSブリッジを介してACPにアクセスするFPGAマスターが含まれます。Arria 10 Hard Processor System Technical Reference ManualのHPS-FPGAブリッジに言及している章のFPGA-to-HPS Access to ACP部にある表8-3で、ブリッジ幅とFPGAマスター幅の可能な組み合わせ、アライメント、バーストサイズとバースト長を確認してください。
5.1.12.4. フラッシュメモリーのECC
HPSのすべてのペリフェラルRAMはECCで保護されています。各ペリフェラルには、ECC (エラー訂正検出) コントローラーの独自のインスタンスがあります。詳細は、Arria 10 Hard Processor System Technical Reference Manualの第11章で説明されています。
ガイドライン: NANDのリードモディファイライト動作中に、ソフトウェアでECCを更新する必要があります。
NANDフラッシュ・コントローラーのECCハードウェアは、フラッシュデバイスのページバッファーからリードモディファイライト動作が実行されている際に使用されません。ソフトウェアでは、このようなリードモディファイライト動作中にECCを更新する必要があります。リードモディファイライト動作をハードウェアのECCで機能させるには、フラッシュデバイスのリードモディファイライト機能に依存することなく、ページ全体をシステムメモリーに読み込み、変更後、フラッシュに書き戻す必要があります。
ガイドライン: コピーバック・コマンドの際にNANDフラッシュ・コントローラーでECCの検証を実行できないことを考慮します。
NANDフラッシュ・コントローラーは、コピーバック・コマンドの際にECCの検証を行うことができません。フラッシュ・コントローラーはECCデータをコピーしますが、コピー動作時にECCのデータを検証しません。
5.1.13. セキュリティーに関するデザインの考慮事項
インテル® Arria® 10 SoCは、階層化されたハードウェアとソフトウェアのソリューションを通じてセキュアなシステムを実装するためのフレームワークを提供します。セキュアなシステムを設計する際は、システムのセキュリティー要件に応じていくつかのセキュリティー・レベルを実装することができます。
ガイドライン: デザインにおいて暗号化する必要がある部分を特定します。デザインにおいて認証する必要がある部分を特定します。
セキュアブート - 信頼の連鎖とイメージの認証
セキュアブートは、すべてのブートステージで信頼の連鎖が確立されることを保証します。各ブートステージでは、イメージの署名付き証明書を確認することにより、ロードおよび実行を行う前に後続のステージを認証する必要があります。
ブートステージは、最初の第2ステージ・ブートローダーから、OSによってロードされる最終アプリケーションまでおよぶ場合があります。
詳細は、Intel Arria 10 SoC Secure Boot User Guideを参照してください。
デザインのIPの保護 - AES暗号化
FPGAデザインのIPを保護するには、AES暗号化を使用します。目的のブートデバイスのストレージ領域に格納する前に、デザインIPを暗号化します。AESセキュリティー・キーがSoCによって確認されると、イメージはコンフィグレーションのロード時に復号化されます。
セキュアブートとIP - 認証と暗号化
このレベルでは、システムの起動時にすべてのランタイムSWとデータIPが認証され、正常に複合化されるため、最も高いセキュリティーが提供されます。
耐タンパー性
このセキュリティー・レベルでは、定義されているロジックを使用し、デバイスを改ざんする試みが検出された際に通知を送信します。
5.1.14. エンベデッド・ソフトウェアのデバッグとトレース
ガイドライン: 開発およびフィールド問題のデバッグや診断に使用することができる、ボードへの利用可能なJTAG接続を備えることが推奨されます。
このデバイスには、FPGAとHPSのJTAGがチェーンになっているJTAGポートが1つあります。
HPSは、HPS共有I/OもしくはFPGA I/Oのいずれかを介して2つのトレース・インターフェイスを提供します。HPS共有I/Oで提供されるインターフェイスは低速トレース・インターフェイスであり、低帯域幅のトラフィックのトレースに使用することができます (低周波数で動作するMPUなど)。このインターフェイスは単なる4ビットのDDRインターフェイスであるため、提供される帯域幅は限られます。
トレース帯域幅を向上させるには、標準トレース・インターフェイスであるFPGAへの32ビット・シングル・データ・レート・インターフェイスを使用することができます。一般的にトレースモジュールは、トレースデータがダブル・データ・レートで送信されることを想定しているため、シングル・データ・レートのトレースデータをダブル・データ・レートに変換する必要があります。
この変換は、DDIO Megawizard IPをインスタンス化し、それを出力専用モードに設定して行うことが推奨されます。トレースデータの最下位16ビットは最初にオフチップに送信される必要があるため、それらのビットをDDIO IPのdatain_l[15:0] ポートに接続します。
トレースベンダーより提供されているデータシートを参照し、トレースバスに終端が必要かを判断してください。トレースベンダーが必要と示している終端が含まれていない場合は、トレースデータの破損につながる、もしくはインターフェイスの最大動作周波数が制限される可能性があります。
5.2. サポートと関連資料
5.2.1. サポート
インテルSoC開発キットに移植されたオペレーティング・システムのBSP (ボード・サポート・パッケージ) のテクニカルサポートは、オペレーティング・システムのプロバイダーより提供されます。
インテルでは、インテル インテル® SoC FPGAエンベデッド開発スイートのサポートおよびFPGA開発に向けたデザインツールを提供しています。SoC EDSには、 Arm* Development Studio 5* (DS-5*) for Intel® SoC FPGA Editionが含まれています。
インテルは、インテル開発キットをサポートしています。
他のボードのテクニカルサポートは、それぞれのボードのプロバイダーまたは販売代理店より提供されます。
アイテム | サポート・プロバイダー |
---|---|
商用のOS/ツール | OS/ツールのベンダー |
ハードウェア・ライブラリー (ベアメタル) | インテル |
インテル EDS | インテル |
DS-5 Intel SoC FPGA Edition | インテル |
FPGAデザインツール | インテル |
オープンソース/Linux | RocketBoards.org |
U-Boot | RocketBoards.org |
5.2.2. ハードウェアの関連資料
- Intel Arria 10 Hard Processor System Technical Reference Manual
- インテル® Arria® 10デバイス・データシート
- Intel Arria 10 SoC Secure Boot User Guide
- Intel Arria 10 SX Device Errata and Design Recommendations
- インテル® Arria® 10 GX、GT、およびSXデバイスファミリー ピン接続ガイドライン
- Intel Arria 10 HPS Pin Information
- Intel Arria 10 EMIF Pin Information
- Intel Arria 10 Device Pin-Out Files
5.2.3. ソフトウェアの関連資料
昨今のオープンソース組み込みソフトウェアにおける機能更新の性質に基づき、インテルのソフトウェアに関連するドキュメントのほとんどは、コミュニティー・ウェブサイトのRocketBoards.orgでも提供されています。
5.2.3.1. インテル Arria 10 SoC開発キット向けビルド済みブートローダー例
インテル® Arria® 10開発キットを使用している場合は、既存のビルド済みU-bootおよびUEFIブートローダーを使用し、デザインのテストを行うことができます。これらのビルド済みブートローダーは、さまざまなHPSブートフラッシュで動作し、次のレイアウトに従いHPSの専用I/Oおよび共有I/Oを割り当てます。
HPS専用I/O | SDMMCからのブート | QSPIからのブート | NANDからのブート |
---|---|---|---|
4 | sdmmc.data0 | qspi.clk | nand.adq0 |
5 | sdmmc.cmd | qspi.io0 | nand.adq1 |
6 | sdmmc.cclk | qspi.ss0 | nand.we_n |
7 | sdmmc.data1 | qspi.io1 | nand.re_n |
8 | sdmmc.data2 | qspi.io2_wpn | nand.adq2 |
9 | sdmmc.data3 | qspi.io3_hold | nand.adq3 |
10 | nand.cle | ||
11 | nand.ale | ||
12 | sdmmc.data4 | nand.rb | |
13 | sdmmc.data5 | nand.ce_n | |
14 | sdmmc.data6 | nand.adq4 | |
15 | sdmmc.data7 | nand.adq5 | |
16 | uart1.tx | uart1.tx | nand.adq6 |
17 | uart1.rx | uart1.rx | nand.adq7 |
HPS共有I/O | SDMMCからのブート | QSPIからのブート | NANDからのブート |
---|---|---|---|
Q1_1 | usb0.clk | usb0.clk | usb0.clk |
Q1_2 | usb0.stp | usb0.stp | usb0.stp |
Q1_3 | usb0.dir | usb0.dir | usb0.dir |
Q1_4 | usb0.data0 | usb0.data0 | usb0.data0 |
Q1_5 | usb0.data1 | usb0.data1 | usb0.data1 |
Q1_6 | usb0.nxt | usb0.nxt | usb0.nxt |
Q1_7 | usb0.data2 | usb0.data2 | usb0.data2 |
Q1_8 | usb0.data3 | usb0.data3 | usb0.data3 |
Q1_9 | usb0.data4 | usb0.data4 | usb0.data4 |
Q1_10 | usb0.data5 | usb0.data5 | usb0.data5 |
Q1_11 | usb0.data6 | usb0.data6 | usb0.data6 |
Q1_12 | usb0.data7 | usb0.data7 | usb0.data7 |
Q2_1 | emac0.tx_clk | emac0.tx_clk | emac0.tx_clk |
Q2_2 | emac0.tx_ctl | emac0.tx_ctl | emac0.tx_ctl |
Q2_3 | emac0.rx_clk | emac0.rx_clk | emac0.rx_clk |
Q2_4 | emac0.rx_ctl | emac0.rx_ctl | emac0.rx_ctl |
Q2_5 | emac0.txd0 | emac0.txd0 | emac0.txd0 |
Q2_6 | emac0.txd1 | emac0.txd1 | emac0.txd1 |
Q2_7 | emac0.rxd0 | emac0.rxd0 | emac0.rxd0 |
Q2_8 | emac0.rxd1 | emac0.rxd1 | emac0.rxd1 |
Q2_9 | emac0.txd2 | emac0.txd2 | emac0.txd2 |
Q2_10 | emac0.txd3 | emac0.txd3 | emac0.txd3 |
Q2_11 | emac0.rxd2 | emac0.rxd2 | emac0.rxd2 |
Q2_12 | emac0.rxd3 | emac0.rxd3 | emac0.rxd3 |
Q3_1 | spim1.clk | spim1.clk | spim1.clk |
Q3_2 | spim1.mosi | spim1.mosi | spim1.mosi |
Q3_3 | spim1.miso | spim1.miso | spim1.miso |
Q3_4 | spim1.ss0_n | spim1.ss0_n | spim1.ss0_n |
Q3_5 | spim1.ss1_n | spim1.ss1_n | spim1.ss1_n |
Q3_6 | gpio1.io5 | gpio1.io5 | gpio1.io5 |
Q3_7 | uart1.tx | ||
Q3_8 | uart1.rx | ||
Q3_9 | |||
Q3_10 | |||
Q3_11 | emac0.mdio | emac0.mdio | emac0.mdio |
Q3_12 | emac0.mdc | emac0.mdc | emac0.mdc |
Q4_1 | i2c1.sda | i2c1.sda | i2c1.sda |
Q4_2 | i2c1.scl | i2c1.scl | i2c1.scl |
Q4_3 | gpio1.io14 | gpio1.io14 | gpio1.io14 |
Q4_4 | trace.clk | trace.clk | trace.clk |
Q4_5 | gpio1.io16 | gpio1.io16 | gpio1.io16 |
Q4_6 | gpio1.io17 | gpio1.io17 | gpio1.io17 |
Q4_7 | |||
Q4_8 | |||
Q4_9 | trace.d0 | trace.d0 | trace.d0 |
Q4_10 | trace.d1 | trace.d1 | trace.d1 |
Q4_11 | trace.d2 | trace.d2 | trace.d2 |
Q4_12 | trace.d3 | trace.d3 | trace.d3 |
5.3. インテル Arria 10 SoC FPGAに向けたエンベデッド・ソフトウェアのデザイン・ガイドライン改訂履歴
ドキュメント・バージョン | 変更内容 |
---|---|
2020.08.14 | メンテナンス・リリース |
2019.04.17 | SoC開発キット向けビルド済みブートローダー例の章を更新し、リンク切れを修正しました。 |
2019.03.18 |
|
2017.12.20 |
|
2017.05.08 | ベアメタル・フレームワークとしてのブートローダーの使用の章を新しく追加しました。. |