本記事の概要
本サイトでは、これまでXilinx社のソフトウェア開発ツールVitis IDEに関する記事をまとめました。
例えば、下記の記事では、アプリケーションを構築するうえで、有用なソフトウェアドライバの使用方法を解説してきました。
この記事では、GPIOのIPコアを制御するためのドライバの使い方を例に、Vitisのドライバにおいて基本的な概念であるインスタンスを説明し、ドライバ関数の使用方法について解説しています。
VitisではGPIO以外にも数多くのドライバが用意されており、それぞれでAPI(Application Programming Interface; アプリケーションを作成するための関数やインスタンス)が定義されています。
ただ、こういったドライバ上で定義される関数やインスタンスは、それぞれのドキュメンテーションを読まないと使い方がわかりません。
さらに、初学者にとって、そもそもドキュメンテーションがどこにあるのかというのも最初わからないと思います。
私も最初どこを調べたらよいかわからず、手当たり次第にGoogleで検索をかけていました。GPIO IPコア向けのドキュメンテーションは運よくGoogle検索で見つかるのですが、他のIPコアやペリフェラルのドキュメンテーションは見つからないこともあります。
以前、Twitterで教えていただいたのですが、各ドライバのドキュメンテーションは、以下のVitisのインストールディレクトリ内に格納されています。
C:\Xilinx\Vitis\2020.2\data\embeddedsw\XilinxProcessorIPLib\drivers\***
このディレクトリの中にすべてのドライバのドキュメンテーションとアプリケーションの用例が格納されているので、ディレクトリ内を探せば見つかります。
ディレクトリを探すよりもさらに楽な方法はVitis IDE上のリンクを活用する方法です。
実は、Vitis IDE上には各ドライバのドキュメンテーションへのリンクと、そのドライバを用いたアプリケーションの用例をインポートするためのリンクが用意されています。
本記事では、ドキュメンテーションのリンクの場所を示した後、実際にドキュメンテーションを参照し、用例をインポートする実例をまとめました。
結論:Vitis IDEのBoard Support Packageのウィンドウにある
Vitisにおいて、ソフトウェアドライバの各ドキュメンテーションへのリンクは、以下のキャプチャのようにBoard Support Packageの設定がまとめられたウィンドウにあります。
しかも、親切なことに、インポートしたハードウェア設計で使用しているIPやペリフェラルに関連するドキュメンテーションへのリンクしかここには載っていません。
例えば、以前タイマー割り込みを行うAPIについて解説した以下の記事では、Vivado上でZynq PSコアとAXI GPIOとAXI Timerの主に3つのIPコアをZynq上に実装しました。
このVivadoのプロジェクトをもとに作成したプラットフォーム プロジェクトでは、図の通りVivado上で追加したIPに関連するドライバだけが用意されています。
そのため、Vitis上のリンクを活用すれば、必要なドライバのドキュメンテーションと用例だけをすぐに見つけることができます。
実際にやってみる
今、並行して投稿しているI2C通信に関する記事では、ZynqとWio TerminalのI2C通信に挑戦しています。
ZynqにはI2C通信のスレーブの役割を担ってもらい、スレーブとして動作するために必要なアプリケーションを構築しようとしています。
I2C通信に関するアプリーケーションを実例として、関連するドライバのドキュメンテーションを参照した後、アプリケーションの用例をインポートしようと思います。
サンプルプログラムxiicps_intr_slave_example.cを利用する
まずは、どんなドライバが用意されているのか確認しましょう。
まず、XSAファイルをインポートしてVitis IDEが立ち上がったら、下記の画面で[Navigate to BSP Settings]をクリックします。
そうすると、次のようにBoard Support Packageと書かれた新しいタブが立ち上がります。
このタブ上で各ドライバにおけるAPIの機能説明へのリンクと用例を参照することができます。
(a) ドライバAPIの機能説明のドキュメンテーション
I2CのドライバAPIを例にドキュメンテーションを参照してみます。
上記の画像のように、PS部におけるI2C通信のペリフェラル(ps7_i2c_0)の欄の、[Documentation Link]を選択します。
そうするとブラウザが立ち上がり、Vitisのインストールディレクトリに格納されたAPIの説明資料を参照できます。
ちなみに、同じものがgithubにも置いてあります。
別の記事で各関数や用例について説明しますが、今回はアプリケーションの用例のインポートの方法を説明します。
[Examples]を選択すると、各用例のアプリケーションの説明が参照できます。
今回は、ZynqをS側(slave)として扱いたいので、xiicps_intr_slave_example.cを参照しました。
ちなみに、上記の各サンプルコードの説明を読む限り、slaveとして扱うコードには、以下の2つがあるようです。
今回は、Wio Terminalのマイコンに主導権を握らせて、I2C通信をさせたかったので、割り込みを使う xiicps_intr_slave_example.c を利用することにしました。
(b) サンプルコードの読み込み
読み込みたいサンプルコードが決まったので、先ほどの Board Support Packageと書かれたタブ でiicpsの[Import Examples]をクリックしましょう。
新しくウィンドウが立ち上がるので、読み込みたいサンプルコード、ここではxiicps_intr_slave_exampleにチェックを入れます。
Progress Informationというウィンドウが立ち上がり、しばらく待つと…
xiicps_intr_slave_example のアプリケーションプロジェクトが読み込まれます。
今回は、このプロジェクトをそのままビルドして使用していくことにします。当然ですが、このプロジェクトのビルドはエラーなく成功します。
このアプリケーションをそのまま使ってシステムを構築することもできますし、アプリケーションの用例をベースに新たにソフトウェア開発者が新しいシステムを構築することも可能です。
まとめ
本記事では、Vitis IDE上でソフトウェアドライバを有効に活用するための方法として、各ドライバのドキュメンテーションへのリンクと、ドライバを活用したアプリケーションの用例をインポートする方法を紹介しました。
一からアプリケーションを作るのはなかなか大変ですが、システムを構築するときに各用例を活用すれば、作業時間も大幅に短縮できるように思います。
お疲れさまです。
さすがに用例を使わずにアプリケーションを作るのは大変(というか、ほぼ無理)なので、このリンクは大いに活用したいです。
最後までご覧いただきありがとうございました!
コメント