Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

Zynq MPSoCで、コンピュータを学ぼう (その1)

はじめに

いつものように土曜日は、いろいろと考える日なのです。

今回は数日前に2時間ばかり 1on1 という言うか雑談をして、感じたことに関してです。

それは、コンピュータのことを学ぶにはどうすればいいのか?

結果から言うと、「Xilinx社の ZynqUlltrascale+ MPSoC搭載のボード」に関して徹底的に学ぶということです。

コンピュータのことを学ぶ

皆さんは、

などのコンピュータを使っていますね。そして、これらのコンピュータを使って、いろいろなこと(お仕事や趣味、娯楽)をしていますね。

それで、これらのコンピュータの中がどうなっているのかを知りたい、と思ってもなかなかわかりませんよね。

Google君に聞いたら、

国立情報学研究所の市民講座、「コンピュータ は どうやって動くのか?」という資料を見つけました。

この資料だけを見て、コンピュータって、こうやって動くんだ、と思えたら、天才だと思います。

話を本題に戻します。

例えば、スマホiPhoneタブレットiPad、PCの Macbook は、Appleが独自に開発したSoC(System on Chip : チップ:半導体の上にシステムを作っちゃいます)をベースに作られています。このSoC(A15とかM1/M2)のスペック(仕様)はちょっとだけ公開されていますが、具体的なものはほとんど公開されていません。Asahi Linux を移植するためにいろいろな方法を使って、機能の確認をしてはいますが、Appleは公式には一切公開していません。

また、Androidスマホタブレットでも多少は違いますが、搭載されているSoCの詳細はほとんど公開されていません。WindowsマシンやLinuxマシンもAppleのプロダクトと比べると情報は公開されてはいますが、詳細まで公開されていません。

となると、コンピュータを学ぶということになると、WindowsLinuxMacOSが搭載されているコンピュータの上でアプリケーションを書いて動かすというソフトウェア中心になってしまいます。

これではコンピュータを学ぶというより、アプリケーションを作るためのソフトウェアを学ぶになってしまいます。

ZynqUltrascale+ MPSoC とは?

Xilinx社が開発・販売している ZynqUltrascale+ MPSoC とは、どんなものでしょうか?

  • SoC
  • CPUコアに、ARM Cortex-A53x4 と Cortex-R5Fx2
  • GPUコア(EGとEVシリーズ)、ARM Mali-400MP2
  • Memory は、DDR4/3/3L, LPDDR4/3
  • Display Port
  • USB 3.0
  • SATA 3.1
  • PCIe 1.0/2.0
  • GbE

と一般的なコンピュータで使うもののほとんどが入っています。

これらに加えて、

  • Programmable Logic

というユーザーオリジナルの回路を搭載できる部分が入っています。

japan.xilinx.com

どんなボードを買えばいいのか?

まずは、ボードを買う必要はありません。

最初は、

  • ドキュメント
  • ソフトウェアのソースコード解析
  • シミュレーション

にて、学ぶのでお金を払って、ボードを買う必要はありません。

ボードを買う段階になったら、下記の2つがいいのでは?と思います。他にもいろいろありますが、最初はお手軽に使えるものがいいので、お値段と公開されている情報が多いものがいいでしょう。

Kria KV260 が出る前は、Ultra96 が一番よかったですが、開発元がXilinxではなく、AVNETであるため、Xilinx社からの情報はあまり出ていませんでした。Kria KV260 が出たことにより、Xilinx社からはKria KV260に関する情報が多く出ています。

Ultra96はXCZU3EGで、Kria KV260はXCZU5EVのようなので、Programmable Logicが多いのとビデオ コーデック ユニット (VCU)が入っています。それでお値段もKria LV260の方が1万円以上もお安いですね。

半導体としての SoC だけではない

Zynq Ultrascale+ MPSoC を使うためのソフトウェアの多くが github 公開されています。それらソフトウェアは、多くの人が使っているオープンソースコードに対して、ZynqUltrascale+ MPSoC に対応する部分を追加した感じになっています。つまり、これらのソースコードの中を調べることで、そのソースコードがどのようになっているのかも学べられるので、一石二鳥なんです。

github.com

Linux用 - Arm Trusted Firmware : ARM Cortex-A53用のFirmware - U-bool (u-boot-xlnx) - Linux (linux-xlnx), device-tree-xln - QEMU - Runtime (XRT) - Xilinx MALI repo for EGL / OpenGLES binaries and headers

スタンドアローン・ソフトウェア用 - The standalone software (embeddedsw)

Cortex-R5用 - open-amp (Cortex-R5用)

組み込みで使われている Yocto 。手間がかかって面倒ですが、組み込みではほぼ標準なので。今回は、Yocto に関しては説明しません。 - Yocto 関連 : meta-xilinx, meta-xilinx-tools, meta-petalinux

シミュレーション環境 - libsystemctlm-soc (LibSystemCTLM-SoC) および demo

Zynq ではなく、Zynq Ultrascale+ MPSoC なのか?

SoCベースのFPGAなら Zynq Ultrascale+ MPSoC じゃなくて、Zynq でいいのでは? という人もいるでしょう!

確かに、Zynq しかなければ、Zynq でいいと思っていました。2010.10.17 の ブログ「俺様SoCのアイデア、募集中」では、XilinxとAltera(当時)が ARM Cortex-A9 コアを搭載したFPGAを発表したことを受けて、自分オリジナルのSoCができるじゃん。そのSoCのことを「俺様SoC」と呼ぶことにしました。 確か、この頃、「俺様」というフレーズが流行っていたのだと思います。

vengineer.hatenablog.com

XilinxがZynq Ultrascale+ MPSoCを発表したのが、2015年の3月です。

vengineer.hatenablog.com

この時点でAltera(当時)もCortex-A53x3搭載のStratix 10 SoCを発表していました。

ZynqとZyqn Ultrascale+ MPSoC の大きな違いは、CPUコアが ARM v7 か ARM v8 ということです。CPUコアが ARM v7 から ARM v8 になったことで、32ビットから64ビットになりました。また、Linuxに関しても ARM v7 の32ビットに関しては、各SoC毎にいろいろなコードが乱立していて、当時、Linus くんがそのことに対して激怒していました

Linuxの ARM v8 の 64ビットに対しては、32ビットとはかなり違って、コードがすっきりしています。

また、スマホタブレットAppleのPCのほとんどが、ARM v8 の 64ビットのCPUコアです。ちなみに、WindowsマシンやLinuxマシンも 64ビットのCPUコア(だいたいが、x86-64IntelAMD) です。

今現在使われている 64ビットをCPUコアベースのものを学んだ方が、この先もずーと使えるということで、Zynq よりも Zynq Ultrascale+ MPSoC の方がいいんです。

このシリーズで見ていく内容

この「Zynq MPSoCで、コンピュータを学ぼう」シリーズで見ていく内容です。

  • その1 : Xilinx社のZynqUltrascale+ MPSoC について
  • その2 : Zynq Ultrascale+ MPSoC がどのように立ち上がっていくのか
  • その3 : Linux の dts を見て、どのようなハードウェアを使っているのか?
  • その4 : Linuxデバイスドライバについて
  • その5 : Programmable Logic
  • その6 : QEMU (Zynq Ultrascale+ MPSoC の実物が無くても、Linuxが立ち上がる)

おわりに

次回は、ZynqUltrascale+ MPSoC がどのように立ち上がっていくのかを学ぶにはどうしたらいいのかについて、見ていきます。