【Vitis】ドライバのドキュメンテーションと用例を活用しよう

Vitis
スポンサーリンク

本記事の概要

概要

Xilinx社のソフトウェア開発ツールVitisでは、SoCやFPGAに実装したIPコアやペリフェラルをプロセッサ上で制御するためのドライバが用意されています。
本記事では、Vitisにおける各ドライバのドキュメンテーションへのリンクの場所、ドライバを使った用例のアプリケーションをインポートする方法についてまとめました。

本サイトでは、これまでXilinx社のソフトウェア開発ツールVitis IDEに関する記事をまとめました。
例えば、下記の記事では、アプリケーションを構築するうえで、有用なソフトウェアドライバの使用方法を解説してきました。

この記事では、GPIOのIPコアを制御するためのドライバの使い方を例に、Vitisのドライバにおいて基本的な概念であるインスタンスを説明し、ドライバ関数の使用方法について解説しています。

VitisではGPIO以外にも数多くのドライバが用意されており、それぞれでAPI(Application Programming Interface; アプリケーションを作成するための関数やインスタンス)が定義されています。

Vitisにおけるプロジェクトの構成

Xilinx社のSoC向けソフトウェア開発ツールVitis IDEを使い、Xilinx SoCにおけるプロセッサを活用した組込みシステムを構築することができます。

プロセッサで動かすためのアプリケーションを開発するには、まず図の通りハードウェア構成をVivado上で作成し、そのハードウェア構成に基づくプラットフォームをVitisで作成します。

https://japan.xilinx.com/html_docs/xilinx2021_1/vitis_doc/vitis_embedded_getstarted.htmlをもとに図解

プラットフォームは、Vivadoからハードウェア構成をインポートしたXSAファイルから自動生成されます。
自動生成したプラットフォームに用意されているソフトウェアドライバを活用して、ユーザー(ソフトウェア開発者)が自由にアプリケーションを開発できるようになっています。

ただ、こういったドライバ上で定義される関数やインスタンスは、それぞれのドキュメンテーションを読まないと使い方がわかりません。
さらに、初学者にとって、そもそもドキュメンテーションがどこにあるのかというのも最初わからないと思います。

私も最初どこを調べたらよいかわからず、手当たり次第にGoogleで検索をかけていました。GPIO IPコア向けのドキュメンテーションは運よくGoogle検索で見つかるのですが、他のIPコアやペリフェラルのドキュメンテーションは見つからないこともあります。

以前、Twitterで教えていただいたのですが、各ドライバのドキュメンテーションは、以下のVitisのインストールディレクトリ内に格納されています。

C:\Xilinx\Vitis\2020.2\data\embeddedsw\XilinxProcessorIPLib\drivers\***

このディレクトリの中にすべてのドライバのドキュメンテーションとアプリケーションの用例が格納されているので、ディレクトリ内を探せば見つかります。

ディレクトリを探すよりもさらに楽な方法はVitis IDE上のリンクを活用する方法です。
実は、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上に実装しました。

タイマー割り込みのハードウェア設計で使用した主なIPコア
  • Zynq7 Processing System
  • AXI GPIO
  • AXI Timer

この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にも置いてあります。

https://github.com/Xilinx/embeddedsw/tree/master/XilinxProcessorIPLib/drivers/iicps

別の記事で各関数や用例について説明しますが、今回はアプリケーションの用例のインポートの方法を説明します。
[Examples]を選択すると、各用例のアプリケーションの説明が参照できます。

今回は、ZynqをS側(slave)として扱いたいので、xiicps_intr_slave_example.cを参照しました。

ちなみに、上記の各サンプルコードの説明を読む限り、slaveとして扱うコードには、以下の2つがあるようです。

slave側として扱うときのI2CのドライバAPIのサンプルコード
  • xiicps_intr_slave_example.c: 外部のマスター端末からの割り込みが発生した時に作動
  • xiicps_polled_slave_example.c: ポーリングモード(一定の時間ごとに要求がないか尋ねるモード)で作動

今回は、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上でソフトウェアドライバを有効に活用するための方法として、各ドライバのドキュメンテーションへのリンクと、ドライバを活用したアプリケーションの用例をインポートする方法を紹介しました。

一からアプリケーションを作るのはなかなか大変ですが、システムを構築するときに各用例を活用すれば、作業時間も大幅に短縮できるように思います。

ひがし
ひがし

お疲れさまです。
さすがに用例を使わずにアプリケーションを作るのは大変(というか、ほぼ無理)なので、このリンクは大いに活用したいです。

最後までご覧いただきありがとうございました!

スポンサーリンク


コメント