※旧タイトル『DS-5 活用テクニック~レジスタ・ビュー[2/3]レジスタ定義の自作』のアップデート版です。
インテル® SoC FPGA 向けのソフトウェア統合開発環境として標準採用される Arm 純正ツールが Arm® DS-5 for Intel® SoC FPGA Edition (DS-5) から Arm® Development Studio for Intel® SoC FPGA Edition (Arm® DS) へと変更になりました。Arm® DS は DS-5 の後継製品となっており使い勝手は大きくは変わりません。このシリーズ記事の内容も Arm® DS / DS-5 両方に適用できるものが大半ですが、違いがある箇所はその旨明記する形でアップデートしています。
***
はじめに
この記事では、SoC FPGA 向けのソフトウェア統合開発環境として利用可能な Arm® DS / DS-5 の使い方に関する補足情報を記載します。
SoC FPGA 向けの Arm® DS / DS-5 は「インテル® SoC FPGA エディション」という製品になります。インテル® SoC FPGA エディションと Arm® 純正エディションの違いは、サポートする接続対象デバイスくらいで、デバッガーや付属のツール(コンパイラー/リンカーなど)の使い方自体に違いはありません。そのため、基本的には Arm® 社が公開している Arm® DS / DS-5 のマニュアル類を参照することで、一通りの使い方が理解できるようになっています。
参考情報:Arm® Development Studio ドキュメントページ(Arm® Developer サイト)
参考情報:DS-5 ドキュメントページ(Arm® Developer サイト)
今回は、Arm® DS / DS-5 のレジスタービューに新しい表示項目(レジスター定義)を追加する方法について掲載します。
1. レジスター表示未対応のペリフェラルについて
Arm® DS / DS-5 のレジスタービューには、HPS Technical Reference Manual に記載される各種ペリフェラルのレジスターが初めから定義されています。前回の記事に記載した表示項目の選択を行うのみでレジスター表示が可能です。
ただし、Arm® 製の IP を利用して実装されたペリフェラルについては、レジスターの詳細定義が一部行われていないため、レジスタービューによる値の設定/確認が行えないようになっています。
以下のペリフェラルのレジスター表示に対応していません。
- DMA Controller(DMA-330)
- L2Cache Controller(L2C-310)
- Cortex®-A9 MPCore 内蔵 SCU(Snoop Control Unit)
- Cortex®-A9 MPCore 内蔵 Interrupt Controller(GIC: PL-390)
- Cortex-®A9 MPCore 内蔵 Timer(GlobalTimer, PrivateTimer, WatchdogTimer)
レジスタービューの表示に対応していないペリフェラルについては、レジスターマップ上にもレジスターの詳細仕様は記述されておらず、ベースアドレスと参照すべきドキュメントへのリンクが記載された状態になっています。
参考情報:Cyclone® V SoC HPS Address Map and Register Definitions
2. レジスターの定義を追加する方法
.svd 形式もしくは .tcf 形式(いずれも XML ベースのファイル形式)でレジスターの定義を記述することで、レジスタービューの表示に対応したレジスターを自由に定義することができます。
初期表示されるレジスタ定義についても Arm® DS / DS-5 のインストール・ディレクトリー以下に格納されているので、.tcf を記述する際の参考にすることができます(他のデバイス向けの定義も近くのディレクトリーに格納されています)。
<Arm® DS / DS-5 Install Directory>/sw/debugger/configdb/SoCs/altera/hps_svd.tcf |
.svd の参考としては、Quartus® Prime 開発ソフトウェアのインストール・ディレクトリー以下に .svd 形式のファイルが格納されています。
<Quartus® Prime Install Directory>/ip/altera/hps/altera_hps/altera_hps.svd |
記述したレジスター定義ファイルは、Arm® DS / DS-5 のデバッガー接続設定(デバッグ・コンフィギュレーション)の[ファイル]タブ上で、"ディレクトリーからペリフェラル記述ファイルを追加します" を選択した状態で .tcf または .svd ファイルを含むディレクトリーを指定することで、デバッガー接続時にレジスター定義が読み込まれるようになります。この指定以外に特別な設定は必要ありません。
下記はレジスター定義ファイルを指定する設定画面のイメージです。
【図 1】 レジスター定義ファイルを指定
3. .svd と .tcf の違い
レジスター定義ファイルの形式は、.tcf と .svd のいずれかを選択することになります。
.svd については、Cortex Microcontroller Software Interface Standard(CMSIS)という規格の中で、System View Description(SVD)として標準化されています。XMLのフォーマットも CMSIS のドキュメントとして公開されます。
SoC FPGA エンベデッド開発スイート(SoC EDS)ユーザーガイド にも .svd を利用する方法のみ説明が記載されているので、.svd が推奨のフォーマットとなっているように思われます(.tcf 形式はユーザーガイドには記載されていません)。
参考情報:Cortex Microcontroller Software Interface Standard(CMSIS)
一方で、Arm® DS / DS-5 の推奨形式は .tcf のようです。
Arm® DS / DS-5 のドキュメントにも、Target Configuration File(TCF)として説明が記載されていて、専用の編集用エディターが用意されているというメリットもあります。
参考情報:Arm® Development Studio User Guide「Working with the Target Configuration Editor」
参考情報:Arm® DS-5 Debugger User Guide「Working with the Target Configuration Editor」
なお、.svd 形式で作成されたレジスター定義であっても、Arm® DS / DS-5 がレジスター定義ファイルを読み込む際に自動的に .tcf 形式に変換されるようです。結局は自動変換された .tcf が使われることになるので、どちらの形式でレジスター定義を作成するかは好みで選択すれば良いと思います。
個人的には、.tcf の方がお勧めです。
編集用エディターが用意されているだけでなく、テキストエディターで XML を直接編集する場合でも .tcf の XML の方が編集し易いタグ構造になっていると感じます。
記述方法(XML タグ構造)の詳細については、この記事では触れません。既存の定義ファイルやドキュメントを参考にして記述してみてください。
4. レジスター定義ファイルのサンプル
Arm® DS / DS-5 のレジスタービューが対応していない Arm® 関連のペリフェラルについて、一通りのレジスター定義を記述した .tcf ファイルを掲載しておきます。レジスター定義ファイルの記述内容の参考としてご利用ください。
Cyclone® V SoC / Arria® V SoC のデバッグにそのままご利用いただけるように記述していますが、内容が正しいことを保証するものではありません(ユーザー責任にてご利用ください)。
-
soc_cv_av_hps_addon_dma330__2.tcf
DMA Controller(DMA-330)用のレジスター定義 -
soc_cv_av_hps_addon_mpul2_l2c310__1.tcf
L2Cache Controller(L2C-310)用のレジスター定義 -
soc_cv_av_hps_addon_mpuscu__2.tcf
Cortex-A9 MPCore 内蔵ペリフェラル用のレジスター定義
Arria® 10 SoC 用にベースアドレス定義を変更したバージョンも作成しました(こちらもユーザー責任にてご利用ください)。
-
soc_a10_hps_addon_dma330__1.tcf
DMA Controller(DMA-330)用のレジスター定義[for Arria® 10 SoC] -
soc_a10_hps_addon_mpul2_l2c310__1.tcf
L2Cache Controller(L2C-310)用のレジスター定義[for Arria® 10 SoC] -
soc_a10_hps_addon_mpuscu__1.tcf
Cortex-A9 MPCore 内蔵ペリフェラル用のレジスター定義[for Arria® 10 SoC]
おわりに
今回は、Arm® DS / DS-5 のレジスター定義を自作する方法について記載しました。
次回(最終回)は、FPGA 側のレジスターを表示させる方法について記載します。
おすすめ記事/資料はこちら
Arm DS 活用テクニック ~ レジスタ・ビュー[1/3]基本設定
Arm DS 活用テクニック ~ レジスタ・ビュー[2/3]レジスタ定義の自作
Arm DS 活用テクニック ~ レジスタ・ビュー[3/3]FPGA 側のレジスタ表示