- Tiny Tapeout 8 のデモ大会で、約4000個の論理ゲートだけを使って VGAグラフィックスと1ビットオーディオ を出力する2種類のASICデモを制作
- 1つ目の作品は、3Dチェッカーボード、星空背景、スクロールテキスト、音楽 を含む伝統的なデモシーン風イントロで、CPU・RAMなしの純粋なステートマシン として実装
- 2つ目は Nyan Catアニメーション で、640x480 VGAと 映像同期オーディオ を用い、1タイル内にほぼすべての回路を集積
- すべての視覚・音響効果は Verilogベースの論理回路 で直接生成され、三角波・パルス波シンセサイザ、LFSRノイズ、シグマデルタDAC など最小限の資源で音楽を再現
- Efablessの破産により製造は中断 されたが、その後チップが回収され、実機ハードウェア上で完全動作することが確認された
TT08イントロデモ
- 背景の スターフィールド、3Dチェッカーボード、波打つスクロールテキスト と影エフェクトを含むグラフィックス構成
- VGA解像度は1220x480、48MHzクロックを使用
- Verilatorシミュレーション でC++に変換し、SDLウィンドウにレンダリングして映像を生成
- フリップフロップ293個、合計 3374セル を使用し、面積制限ぎりぎりまで到達
- フォントエンコーディングがゲート面積を大きく消費するため、色値は断念し、斜めストライプパターン で代用
- ROMなしでのデータエンコーディング のため、論理ゲートで直接パターンを表現
- Yosys合成パイプラインが truth tableを標準セルに変換
- データの複雑さよりも、アドレスに応じたアルゴリズム上の単純さ のほうが面積削減に有利
- サイン波スクローラ はテーブルを使わずベクトル回転で実装
- Minskyの symplectic integrator 方式で円軌道を生成
- チェッカーボード平面投影 は固定小数点演算で実装
recip16 モジュールがy座標の逆数を計算して 遠近変換 を実行
- XOR演算でカラーパターンを生成し、ドラムビートに合わせて平面の高さが変化
グラフィックスの詳細要素
- 影エフェクト はスクロールテキストを平面座標系に投影し、色ビットをシフトして実現
- 星背景(Starfield) はLFSRで各走査線ごとに乱数を生成
- フレームカウンタと組み合わせて星の位置・速度を決定し、スネアドラムのタイミングに合わせて尾の長さが変化
音楽合成
- ABACABAD構造 の反復パターンで論理ゲートの重複を最小化
- 3つのチャンネル で構成
- ノイズ+指数減衰(スネア)
- 矩形波アルペジオ(メロディ/コード)
- 三角波+指数減衰(キック/ベース)
- シグマデルタDAC でオーディオを出力
- PWMの代わりにアキュムレータのキャリービットを出力して単純化
- Crooner (C64 SID) の楽曲のコード進行を流用
- 8音階ベース、2オクターブ範囲、ビット単位アルペジオ
- テンポを15・25ティックで交互に切り替えてスウィングリズムを実現
振り返り
- オーディオとビデオのクロックを分離した設計により、音楽と映像の同期ずれ が発生
- 1220x480という非標準解像度の選択により、LCDでの表示品質が低下
- CRTでは自然なディザリング効果が得られる一方、デジタルキャプチャでは歪みが発生
Nyan Catデモ
- Tiny Tapeout 8締切直前に制作 され、640x480 VGAと60Hz同期オーディオを使用
- 元のGIFからフレームとパレットを抽出し、RGB222へディザリング変換
- LFSRベースの星背景 を再利用
- 音楽データ はMIDIファイルをパースして8音階に再マップ
- ベース/キックチャンネルとメロディチャンネルの2つのみを使用
- 各フレーム開始時(60Hz)に 指数減衰エンベロープ を適用
- 25%デューティサイクルのパルス波 でメロディを生成
- オクターブごとに上位ビットを選択して周波数を調整
- ローパスフィルタを追加して音色を調整
製造と結果
- Tiny Tapeout 8は2024年9月に製造開始後、Efablessの破産 により中断
- 2025年下半期に新しい運営チームがチップを回収して配布
- 実チップのテストでは すべての設計が正常動作
- Donutデモのみ、安定動作のためクロックを45MHzまで下げる必要があった
- Nyan Catデモ はLCDとCRTの両方で完全に再生
まとめ
- 1年以上待った末に、実シリコン上で完全動作するデモ を確認
- Tiny Tapeout環境で、CPU・RAMなしの純粋な論理回路だけで視覚・音響効果を実装した事例
- 今後さらに進化した 低レベルハードウェアデモ技法 を開発する計画にも言及
1件のコメント
Hacker Newsのコメント
コンピュータサイエンス専攻だがコンピュータエンジニアリングにも関心があり、こういうレトロなレンダリングアーキテクチャを自分で作って、テープアウトまでやってみたい
単純だけど本当に面白い構造なので、こういうプロジェクトがとても好きだ
FPGAだけでもかなり先まで行ける。自分でSoCを設計できるのはいつでもワクワクする
たとえば「I2Cポートが9個必要だな?」となったら、そのままブロックをコピーして貼り付ければいい。
ソフトウェアで遅い処理があれば、ハードウェアアクセラレータを自作することもできる
みんながつながることで文化が画一化する面もあるが、世界中の数十人がこういう素晴らしい大会のために集まれるのはすごい
グリッドがキックドラムに合わせて脈動する演出が気に入った。細やかなタッチが良い
引用されていたHAKMEM sin/cos生成器の長期安定性が気になって調べてみた
関連する概要はこちらにある
(正確な算術条件下では安定しているらしい)
偶然にも、先週投稿されたVerlet integration動画とも関連がある
私もその動画をYouTubeのおすすめで見たが、かなり楽しかった
大学時代を思い出す — 「ハードウェアとソフトウェアは論理的に等価だ」という言葉を思い出した
本当に印象的な仕事だ。昔はJS demoscene、とくにdwitterをよくやっていたが、これはまったく別次元だ
このコメントのおかげで、TinyTapeoutが復活していたことを知った
Tiny TapeoutでFPAAを作ってみたいが、割り当てられた面積には収まらなさそうだ
「No x, no y, just z」みたいなパターンはChatGPTでよく使われるので、今では一般ユーザーまで使い始めたようだ
昔、職業学校でピンボールマシンを修理していた頃を思い出した。いい思い出だ
本当にすごい!
現在のOpen Shuttleを見ると、プロジェクトで4KB SRAMライセンスを使うには$2500必要らしい
その代わりWishbone Busインターフェースが含まれている