概要
- tiny-tpu はGoogleのTPU V1/V2を参考にした ミニマルなTPU設計 プロジェクト
- 主な構成要素 (PE, Systolic Array, VPU, UB, 制御部)を詳細に解説
- 独自ISA(94ビット幅) で制御、命令セットの具体例も掲載
- 開発・テスト環境構築手順 (MacOS/Ubuntu対応)を記載
- モジュール追加や波形解析方法 も初心者向けに説明
tiny-tpu 概要
- tiny-tpu はGoogleのTPU V1/V2アーキテクチャを参考に ゼロから再設計 したオープンソースTPUプロジェクト
- PE(Processing Element) や Systolic Array、 VPU(Vector Processing Unit)、 Unified Buffer(UB) など、基本構成を 最小限かつ分かりやすく実装
- 誰でも参加・学習できる ように設計され、ハードウェア初心者でも取り組みやすい構成
- 命令セットアーキテクチャ(ISA) や制御部も 独自設計 し、柔軟な拡張性を確保
- 公式サイト・リポジトリ で詳細ドキュメントとソースコードを公開
アーキテクチャ詳細
-
Processing Element(PE)
- 毎クロックごとに積和演算(MAC)を実行 する演算ユニット
- 入力データ は内部の重みと乗算後、部分和に加算し 出力和 を生成
- データ伝搬 として、入力データは次のPEへも転送
-
Systolic Array
- 2×2以上のPEグリッド で構成される行列演算器
- 入力値 は水平方向、 部分和 は垂直方向に流れる構造
- 重みデータ は各PEに固定配置
- 入力行列の90度回転・重み行列の転置 をハードウェアで実装し、計算の整合性を確保
-
Vector Processing Unit(VPU)
- Systolic Array後段で要素ごとの演算 を担当
- モジュール選択 により、バイアス加算、Leaky ReLU、MSE損失、Leaky ReLU微分など パイプライン処理
-
Unified Buffer(UB)
- 中間データ保存用のデュアルポートメモリ
- 保存対象 :入力行列、重み行列、バイアスベクトル、活性化値、リークファクタ、逆バッチサイズ定数
- 2つの読み書きポート を持ち、アドレス・カウント指定で連続アクセス可能
-
制御部(Control Unit)
- 命令幅94ビット の独自ISAで各サブシステムを直接制御
- 詳細はsrc/control_unit.sv に実装
命令セット(Instruction Set)
-
命令幅:94ビット([93:0])
-
主なフィールドと役割
- [0–4]:システムON/OFF、UBリード/ライト、転置モード等の制御信号
- [6:5]:UBリードカラムサイズ(2ビット)
- [14:7]:UBリード行数(8ビット)
- [22:15]:UBリードアドレス(8ビット)
- [25:23]:UBポインタ選択(3ビット)
- [41:26]:ホストからのUBライトデータ1(16ビット固定小数点)
- [57:42]:ホストからのUBライトデータ2(16ビット固定小数点)
- [61:58]:VPUデータ経路指定(4ビット)
- [77:62]:逆バッチサイズ×2(16ビット固定小数点)
- [93:78]:VPUリークファクタ(16ビット固定小数点)
-
命令例・利用方法
- 命令はテストベンチファイルからチップの命令バッファに直接ロード
- tests/tpu.v で順方向・逆方向パスの命令シーケンス例を確認可能
開発・セットアップ手順
-
MacOS環境
- 仮想環境作成後、 pip install cocotb でPythonテスト環境構築
- Homebrewでiverilog インストール:brew install iverilog
- gtkwaveはソースからビルド (他の方法は非推奨)
-
Ubuntu/Linux環境
- 仮想環境作成後、 pip install cocotb
- gtkwave :sudo apt install gtkwave
- iverilog :sudo apt install iverilog
モジュール追加・波形解析手順
-
新規モジュール追加手順
- src/ ディレクトリに<MODULE_NAME>.svを作成
- test/ にdump_<MODULE_NAME>.svを作成し、$dumpfile/$dumpvarsで波形出力
- test_<MODULE_NAME>.py でPythonテストを作成
- Makefile のSOURCESに追加、テストターゲットを定義
- make test_<MODULE_NAME> でテスト実行、 gtkwave waveforms/<MODULE_NAME>.vcd で波形閲覧
-
gtkwaveの固定小数点表示設定
- 右クリック→Data Format→Fixed Point Shift→Specifyで8を入力
- Data Format→Signed Decimalに設定
- Fixed Point Shift→ONを有効化
-
.gtkwファイルとは
- 信号表示設定を保存 するファイル
- make show_<MODULE_NAME> 実行後、一度だけ保存すればOK
今後の展望
- 独自ISA用のコンパイラ開発
- TPUアレイの大規模化(256×256や512×512)
プロジェクトの動機
- TPUアーキテクチャやチップ設計情報は非公開が多い現状
- ハードウェア初心者でも取り組める教材・リソースを目指して設計
- 実際に設計・開発を通じて得た知見をコミュニティに還元
- “発明的思考”で課題解決する楽しさを伝えることが目的