概要
2021年10月29日に、M5Stackより ATOM Display が発売されました。
ATOM Displayは、M5AtomシリーズのモジュールからHDMI接続のディスプレイに対して画像を出力するための ディスプレイコントローラ です。
画面付きのM5Stack/StickCシリーズに内蔵されている画面に描画するのと同様に、PCのディスプレイ等に画像を表示することができます。
既存のユニットで一番近いのは、Grove互換ポート経由で液晶画面を増設することができる UnitLCD です。
このATOM DisplayのFPGAの中身は筆者が開発していますので、簡単にですが解説してみようと思います。(ちゃんとした解説は技術書典ネタの予定)
中身
ATOM Displayは主にM5Atomからのコマンドを処理してビデオ信号を生成するFPGAと、FPGAからのビデオ信号をHDMIに変換するHDMIトランシーバから成ります。
FPGAとしてGOWINの GW1NR-LV9QN88C6/I5
を使っています。このFPGAは同じパッケージ内に 64[Mbit] (8[MiB])
のSDRAMを内蔵しており、ディスプレイに描画する画像を保持するフレームバッファ等に使用しています。
FPGAの内部は、M5Atomからのコマンドを受け取り内部のフレームバッファへの描画などを実行する Command Processor
Command Processorからの指示でフレームバッファの矩形範囲への読み書きを行う Stream Reader / Stream Writer
フレームバッファを繰り返し読み出す Frame Buffer Reader
読み出したフレームのピクセルデータをビデオ信号のタイミングに合わせて出力する Video Signal generator
から成ります。
ブロック図中のうち、グレーのブロックは、GOWINが提供するIPです。緑色の部分は、今回ATOM Display向けに作成したモジュールです。
ATOM Displayのデフォルトの出力解像度とレートは 1280x720@60
です。よってデータレートはピクセル当たりのバイト数を3[bytes]とすると、 1280*720*60*3 = 165.888[MB/s]
となります。
一方、フレームバッファに使っているSDRAMのバスの理論帯域は 16[bit] * 140[MHz] = 280[MB/s]
です。
これだけ見ると余裕がありそうですが、実際にはM5Atomからのコマンドに応じてフレームバッファへの読み書きを行う必要がありますので、あまり余裕はありません。
ソフトウェア
ATOM Displayは単なるSPIのコマンドを受けて画像の出力を行うディスプレイコントローラでしかありません。これをM5Atomから適切に制御して初めてユーザーの表示したいものを表示することができます。
このあたりは らびやんさんにLovyanGFX/M5GFXをいろいろ調整していただいたおかげで、M5Stack/StickCの液晶画面を扱うのと同様に、非常に簡単にディスプレイに描画することができるようになっています。
ATOM Display側にいろいろコマンド実装したらすぐに使いこなしてもらえるので非常にありがたい…
最終的にリフレッシュレートは限定的 (24Hz) ながら、FHD (1920x1080)の解像度表示ができるようになったり、逆に解像度を小さくして240[Hz]のリフレッシュレートに対応したりということができています。
こういった機能を実現するために、FPGA側に実装するコマンドはらびやんさんといろいろ話し合って決めています。現在のコマンドはM5GFXのソースコード中に記載されていますので、興味がある方は確認してみてください。
ソースコード
FPGAのデザインを公開しました!… と言えればよかったのですが、ソースコードの整理が間に合いませんでした。
前述のCommand Processorの部分以外は筆者のリポジトリに既に置いてありますので、興味のあるかたは見ていただければと思います。
公開しました!