もう、2016年も残すところ1日となったね。
最近、SDxで遊んでます。
SDxのライセンスはXilinx社サイトから60間評価ライセンスをダウンロードできる。 まず、遊ぶにはこれで十分である。
SDxはZynq系CPU+FPGAのSDSoCとKintex、VitrexなどFPGAのSDAccelが統合された高位合成開発環境である。 両者ともXilinxが認定している評価ボードで開発できる環境が提供されている。 ZedBoardやZYBOの環境が用意されているので個人ベースで遊ぶにはこれで良いだろう。
私の場合、X86+KintexやVirtexで構成されるシステムを開発することはすごく稀であるのでSDAccelはあまり眼中にない。 もちろん、他社CPU+KintexやVirtexという構成はあるがこのようなシステム構成においてSDAccelを使用することはないだろう。 なのでSDxはSDSoCがターゲットとなる。
そして、SDxは高位合成のプラットフォームとしてソフトウェア側はLinux、FreeRTIS、ベアメタルをサポートしている。 ソフトウェア面では私の場合、Linuxのみがターゲットとなる。 システムを開発する上でFreeRTOSをARM上に実装する機会はあるが、ベアメタルは皆無である。 ソフトウェア側でFreeRTOSやベアメタルが出てくるときは、すでに処理性能を求めての選択肢なのでRTLもガチ設計になる。
つまり、私が開発するSDx環境は最低限、次のようになる。
さて、Linux環境はSDxの場合、PetaLinuxがサポートされている。 単にソフトウェアの一部をハードウェアにオフロードして使う分にはPetaLinuxで良いだろう。 私の場合はシステム開発の一部としてSDxを使用していくことになるのでPetaLinuxの利用は非常に都合が悪い。
私が想定するシステム環境とはカメラ入力+画像処理+映像出力+通信が主なシステム構成である。 端的に描くとこんな感じ。
詳細に描いてみるとこんな感じの構成だ。 外部入力があって、内部処理があって、外部出力があるシステムである。
この構成をハードウェアとソフトウェアの要件に分けると次のようになる。
項目 | ハードウェア | ソフトウェア |
---|---|---|
カメラ入力 | 独自カメラ+DMA | V4L2ドライバ |
画像処理 | ハードウェア・オフロード | OpenCV、OpenGLES、Gstreamer、libavなど+独自画像処理+libjpegやboostなどのライブラリなど |
映像出力 | HDMIやLCD+DMA | FrameBufferドライバ |
通信 | Ethernetオフロード | Ethernetドライバ |
でも、SDxでできることって実際のところこんな感じのクローズした構成でしょ。
SDxのプラットフォームを頑張れば、次の赤部分、PLの独自モジュール部分って増やすことは簡単だよね。
じゃぁ、次の赤い部分のソフトウェアの部分はSDxで簡単に実現できる?
これが一番、面倒だよ。
特に画像処理のところであるが、ソフトウェア要件に当てはまる部分をPetaLinuxで構築しようとすると様々なライブラリを依存関係を気にしながら構築していかなければいけない。 SDxはソフトウェア環境がPetaLinuxに固定化されてしまっているので融通が利きにくい。
Linuxドライバなんて、作ってしまえばそれでいいだけなのでライブらいなどの部分は簡単に組み込み向けにサポートするならやはり、yocto projectを適応することだろうと思う。
そして、SDxでXilinxが提供しているgccとライブラリ、システム全体はyocto projectのgccとライブラリで分けて開発するとおそらく、事故が起こりやすくなる。 こういった面倒は避けたいところなのでSDxの環境は上回りだけ使用して、下回りはyocto projectを適応したい。
こういった観点でSDx Platform環境を構築して遊んでいく。