5.1.1. 目的
5.1.2. ソフトウェア開発プラットフォームのコンポーネントの構築
5.1.3. アプリケーションに向けたオペレーティング・システムの選択
5.1.4. Linuxに向けたソフトウェア開発プラットフォームの構築
5.1.5. ベアメタル・アプリケーションに向けたソフトウェア開発プラットフォームの構築
5.1.6. パートナーOSまたはRTOSに向けたソフトウェア開発プラットフォームの構築
5.1.7. ブート・ローダー・ソフトウェアの選択
5.1.8. 開発、デバッグおよびトレースに向けたソフトウェア・ツールの選択
5.1.9. ボードの立ち上げに関する考慮事項
5.1.10. ブートおよびコンフィグレーションに関するデザインの考慮事項
5.1.11. フラッシュ・デバイス・ドライバーに関するデザインの考慮事項
5.1.12. HPS ECCに関するデザインの考慮事項
5.1.13. セキュリティーに関するデザインの考慮事項
5.1.14. エンベデッド・ソフトウェアのデバッグとトレース
2.2.2.1. ACPに関連するロックアップの回避
特定のコヒーレント・アクセス・シナリオでは、ACPとCPUを介してデッドロックが引き起こされる可能性があります。ただし、このタイプのデッドロックは、単純なアクセス戦略により回避することができます。
次の例では、FPGAファブリックを介してHPSへのアクセスを開始することにより、CPUがデッドロックを引き起こします。
- CPUがFPGAファブリックへのデバイス・メモリー・アクセスを開始します。CPUのパイプラインは、このタイプのアクセスが完了するまで停止している必要があります。
- FPGAファブリックのステートマシンでは、デバイス・メモリー・アクセスに応答する前に、HPSにコヒーレントにアクセスする必要があります。そのため、ACPを必要とするコヒーレント・アクセスを開始します。
- ACPでは、アクセスを完了する前にキャッシュのメンテナンス操作を行う必要があります。ただし、CPUのパイプラインが停止しているため、キャッシュのメンテナンス操作を実行することができません。システムでデッドロックが発生します。
アクセスをより小さく分割することで、デッドロックを発生させることなく必要なアクセスを実装することができます。例えば、1つのアクセスで動作を開始し、2番目のアクセスで動作のステータスを特定することが可能です。