TinyTinyTPU:FPGA上に実装された、2×2システマティックアレイ型のTPUスタイル行列乗算ユニット

2026/01/03 4:13

TinyTinyTPU:FPGA上に実装された、2×2システマティックアレイ型のTPUスタイル行列乗算ユニット

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Summary:

TinyTinyTPUは、SystemVerilogで記述された小型の2 × 2システマティックアレイ・行列乗算エンジンで、Basys3 Xilinx Artix‑7 FPGAに実装されています。全てのポストMAC(multiply‑accumulate)処理―積算、活性化、正規化、量子化―をサポートしており、小規模な多層パーセプトロン(MLP)モデルを完全にハードウェア上で実行できます。UARTコマンドによりホストPCが重みと活性化データをロードし、推論を起動し、結果を読み戻すことができ、付属のPythonドライバはこのワークフローを自動化します。本設計は約1 000 LUT、1 000フリップフロップ、および8つのDSP48E1スライスしか使用せず、大きなリソースフットプリントが不要なハイボリッジや教育プロジェクトに最適です。デモモデルとして単純な2層ジェスチャー分類器が提供されています。将来的にはVerilator/Cocotbテストで検証を拡張し、VivadoまたはYosys/nextpnr経由でビットストリームを生成し、拡張設計に伴うタイミングや配線問題を解決する予定です。構築フローをオープンソース化することで、TinyTinyTPUは他の最小限FPGAベースAIアクセラレータのテンプレートとして利用可能なアクセスしやすい例を提供します。

Summary Skeleton

テキストが主に伝えようとしていること(メインメッセージ)
TinyTinyTPUは、SystemVerilogで書かれたコンパクトな2 × 2システマティックアレイ行列乗算ユニットであり、Basys3 Xilinx Artix‑7 FPGA上に実装され、小規模MLPモデルのために完全なポストMAC処理とUART制御推論を提供します。

証拠/理由(なぜそう言われているか)
設計には4つのPE、積算/活性化/正規化/量子化パイプライン全体、重み・活性化ロードと実行のためのUARTコマンド、および重みをロードし推論を実行して結果を読み取るデモスクリプトが含まれ、リソースレポートは約1 000 LUT、約1 000 FF、8 DSP48E1スライスです。

関連ケース/背景(文脈・過去の出来事・周囲情報)
プロジェクトは

rtl/
にRTLモジュール、
sim/
にcocotbテスト、VivadoまたはYosys/nextpnr用のFPGAビルドスクリプト(
build_vivado.tcl
)、およびPythonホストドライバを
host/
に配置して構成されています。標準Basys3接続(UARTピンB18/A18、100 MHzクロック、リセットBTNC)に依存し、
model/
に2層ジェスチャー分類器の学習スクリプトがあります。

今後起こり得ること(将来開発/予測)
次のステップはVerilator/Cocotbテスト(

make test
)を実行し、Vivadoでビットストリームを生成するか、FASMをXilinx形式に変換し、Yosys/nextpnrをより複雑な設計で使用した際のタイミング/配線問題を解決する可能性があります。

影響(ユーザー/企業/産業へのインパクト)
低リソースTPUはハイボリッジや教育者がFPGAベースのニューラル推論デモに採用でき、オープンソース構築フローは組み込みAIコミュニティで類似した最小限アクセラレータプロジェクトを刺激する可能性があります。

本文

TinyTinyTPU – 2×2 TPUスタイルの最小マトリクス乗算ユニット
(SystemVerilogで実装、Xilinx Basys 3にデプロイ)


目次

  1. プロジェクト概要
  2. クイックスタート
    • 必要環境
    • インストール
  3. シミュレーション & テスト
    • テスト実行
    • 波形生成
  4. FPGA ビルドとデプロイ
  5. 推論の実行
  6. プロジェクト構成
  7. アーキテクチャ詳細
  8. オープンソースツール (Yosys / nextpnr)
  9. トラブルシューティング
  10. 貢献方法
  11. 参考文献 & 謝辞

1. プロジェクト概要

TinyTinyTPU は Google の TPU を教育用に再現し、2×2 システマティック配列へ縮小したものです。以下を示します。

機能説明
システマティック配列4つの処理要素(PE)が 2×2 配置
MAC 後パイプラインアキュムレータ → 活性化関数 → 正規化 → 量子化
ホストインタフェースUART ベースのコマンドプロトコル
推論マルチレイヤMLP(ダブルバッファ付き活性化)をサポート
FPGA ターゲットBasys 3 (Xilinx Artix‑7 XC7A35T)

リソース使用率 (Basys 3)

  • LUTs: 約1,000(5 %)
  • フリップフロップ: 約1,000(3 %)
  • DSP48E1: 8スライス
  • BRAM: 約10–15ブロック
  • 推定ゲート数: ~25k

2. クイックスタート

必要環境

カテゴリツールバージョン
シミュレーションVerilator≥ 5.022
Python≥ 3.8
cocotb
GTKWave / Surfer
FPGA ビルドVivado2020.1+ (Basys 3 用)
Yosys / nextpnr任意、オープンソース代替
推論実行Python≥ 3.8
pyserial

インストール

# リポジトリをクローン
git clone <repository-url>
cd tinytinyTPU-co

# シミュレーション環境 (Python 仮想env)
cd sim
python3 -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate
pip install -r requirements.txt

3. シミュレーション & テスト

すべてのシミュレーションコマンドは

sim/
ディレクトリから実行します。

テスト実行

cd sim

# すべてのテストを走らせる
make test

# 波形生成付きで実行
make test WAVES=1

# 個別モジュールテスト
make test_pe          # Processing Element
make test_mmu         # Matrix Multiply Unit
make test_uart        # UART コントローラ
# …etc.

波形生成

# 利用可能な波形一覧
make waves

# 特定のモジュール波形を開く
make waves MODULE=pe
make waves MODULE=mmu

波形は

sim/waves/
に保存されます。


4. FPGA ビルドとデプロイ

ハードウェア接続 (Basys 3)

ピン機能
B18UART RX (PC → FPGA)
A18UART TX (FPGA → PC)
100 MHz 発振器クロック
BTNC (U18)グローバルリセット
LED状態表示(
fpga/README.md
を参照)

Vivado でビルド

cd fpga
vivado -mode batch -source build_vivado.tcl
  • basys3_top.bit
    が生成される
  • 利用率・タイミングレポートが作成される

オープンソース代替: Yosys + nextpnr

  1. 合成
    yosys synth.ys
    (README のスクリプトを参照)
  2. 配置とルーティング
    nextpnr-xilinx …
  3. ビットストリーム生成 – Xilinx ツールまたは
    fasm2bit
    が必要

注意: Vivado は安定したビルドが保証されます。Yosys/nextpnr は実験的です。

FPGA プログラミング

  • Vivado GUI: Hardware Manager → Auto‑connect →
    basys3_top.bit
    でプログラム
  • コマンドライン (Vivado):
    vivado -mode tcl <<EOF
    open_hw_manager
    connect_hw_server
    open_hw_target
    set_property PROGRAM.FILE {basys3_top.bit} [get_hw_devices xc7a35t_0]
    program_hw_devices [get_hw_devices xc7a35t_0]
    EOF
    
  • OpenOCD (任意): Digilent JTAG ケーブルと
    openocd
    を使用してフラッシュ

5. 推論の実行

Python ホストドライバ

from tpu_driver import TPUDriver

# 接続(ポートを調整)
tpu = TPUDriver('/dev/ttyUSB0')   # Linux
# tpu = TPUDriver('COM3')        # Windows

# 重みと活性化をロード
weights = [[1, 2], [3, 4]]
activations = [[5, 6], [7, 8]]

tpu.write_weights(weights)
tpu.write_activations(activations)

# 推論実行
tpu.execute()

# 結果行列を取得
result = tpu.read_result()
print("Result:", result)

デモスクリプト

cd host

python3 inference_demo.py          # 基本デモ
python3 gesture_demo.py            # ジェスチャ分類器(学習済モデルが必要)
python3 test_tpu_driver.py         # ドライバ単体テスト

ジェスチャーデモ – マウス移動データで 2 層 MLP を訓練し、FPGA 上でリアルタイム推論を実行。


6. プロジェクト構成

tinytinyTPU-co/
├── rtl/          # SystemVerilog RTL ソース
├── sim/          # シミュレーション環境(Makefile、テスト、波形)
├── fpga/         # Vivado / Yosys ビルド成果物と制約ファイル
├── host/         # Python ドライバとデモスクリプト
├── model/        # ML 訓練スクリプト + JSON モデル
└── README.md     # 本書類

主要 RTL モジュール:

pe.sv
,
mmu.sv
,
weight_fifo.sv
,
accumulator.sv
,
activation_pipeline.sv
,
tpu_top.sv
など。


7. アーキテクチャ詳細

システマティック配列のデータフロー

PE00 ──> PE01   (活性化は右へ流れる)
 |        |
PE10 ──> PE11   (部分和は下へ流れる)
 |        |
acc0     acc1   (出力をアキュムレータへ)

重みロード(対角波形フロント)

サイクルアクション
0W10 → 列0(キャプチャなし)
1W00 → 列0(キャプチャ)、W11 → 列1(キャプチャなし)
2W01 → 列1(キャプチャ)

活性化フロー

  • 行 0:
    A00
    → PE00 → PE01
  • 行 1:
    A10
    → PE10 → PE11 (1 サイクルずらし)

パイプライン段階

  1. Weight FIFO – 列方向に重みを保存し、スキュー付きで出力。
  2. MMU (システマティック配列) – MAC 演算実行。
  3. Accumulator – 列を揃え、ダブルバッファリング。
  4. Activation Pipeline – ReLU/ReLU6 → 正規化(gain × bias + shift)→ 量子化 (int8, saturate)。
  5. Unified Buffer – FIFO と ready/valid ハンドシェイク。

マルチレイヤMLP

  • コントローラ FSM:
    IDLE → LOAD_WEIGHT → LOAD_ACT → COMPUTE → DRAIN → TRANSFER → NEXT_LAYER → WAIT_WEIGHTS
  • ダブルバッファにより、現在の結果をドレインしながら次層の重みロードが重なり可能。

8. オープンソースツールチェーン (Yosys / nextpnr)

インストール

# Ubuntu/Debian
sudo apt-get install yosys
git clone https://github.com/YosysHQ/nextpnr.git
cd nextpnr && cmake . -DARCH=xilinx && make -j$(nproc) && sudo make install

# macOS (Homebrew)
brew install yosys
# nextpnr は手動ビルドが必要

ビルド手順

  1. 合成
    yosys synth.ys
    fpga/
    内で実行。
  2. 配置とルーティング
    nextpnr-xilinx …
    を実行。
  3. ビットストリーム生成 – Xilinx ツールか
    fasm2bit
    が必要。

Tip: Vivado の方が安定します。Yosys/nextpnr は実験用です。


9. トラブルシューティング

問題原因の可能性対策
Verilator エラーVerilator が古い、または構文エラー≥ 5.022 をインストールし
make lint
を実行
テスト失敗波形が不足してデバッグできない
WAVES=1
で実行し VCD を確認
FPGA タイミング違反制約不足 / クロックが速すぎる制約を追加、クロックを 50 MHz に下げる
UART が動作しないCOM ポートまたはボーレート不一致
/dev/ttyUSB*
を確認、115200 に設定
LED が反応しないビットストリームがプログラムされていないVivado GUI または CLI で再プログラミング

10. 貢献方法

以下の点で PR や Issue を歓迎します。

  • テストカバレッジ追加
  • RTL の速度/面積最適化
  • ドキュメント改善
  • Yosys/nextpnr サポート強化
  • 配列サイズ拡張(4×4、8×8 など)

11. 参考文献 & 謝辞

  • Google TPU の論文とアーキテクチャブログ
  • システマティック配列に関する文献
  • Basys 3 リファレンスマニュアル

謝辞 – Google の TPU デザインからインスパイア(Cliff, Richard, TinyTPU チーム、Yosys/Symbiotic EDA クルー、Stanford FAF、Princeton ECE など)。

同じ日のほかのニュース

一覧に戻る →

2026/01/03 4:48

自分のサイトで公開し、他所ではシンジケート(転載)してください。

## Japanese Translation: --- ## 要約 POSSE(**Publish on Your Own Site, Syndicate Elsewhere**)は、作家がまず自分のサイトにコンテンツを投稿し、その後第三者のサイロへ複製することで、元のコピーを完全に管理したまま公開できる出版モデルです。主なメリットは、外部プラットフォームへの依存度低減、正規URLの所有権確保、検索性向上、シンジケートからのレスポンスを逆流させる能力、およびソーシャルレイヤーの活用です。すべて自己ホスト状態を犠牲にすることなく実現します。 POSSEは、パーマショートリンクや引用経由でシンジケートコピーからのバックリンクを奨励し、発見性を高め、スパム対策を行い、元記事のSEOを向上させます。モデルは完全なCRUD操作をサポートします:下流コピーをu‑syndicationリンクで読み取り、編集または再投稿で更新し、既存アクティビティを考慮して削除できます。 ### 実装パターン 1. **自動サーバー側シンジケーション**(クライアント → サイト → サイロ):新しいコンテンツが公開されると、サイトは自動的にサイロへ投稿します。 2. **クライアント → サイト + 手動サイロ投稿**:クライアントがローカルで公開し、その後選択したサイロへ手動で投稿します。この方法はより多くの制御を提供しますが、自動化は減少します。 ### 人気のあるサイロ Twitter、Facebook、Medium、WordPress.com、Flickr、Mastodon、Bluesky など。 ### POSSEを可能にするツール Bridgy Publish、SiloRider、Feed2Toot、POSSE Party などが挙げられます。 ### 関連概念 - **COPE**(Create Once, Publish Everywhere) - **POSE**(Publish Once Syndicate Everywhere) - **PESOS**(Post Elsewhere, Syndicate to Own Site) - **PESETAS**(post to a single silo only) ### 歴史的マイルストーン Tantek Çelik が 2010 年に POSSE を定義し、2012 年に正式化しました。それ以来、Barnaby Walters、Aaron Parecki、Ben Werdmuller、Shane Becker、および Molly White といった IndieWeb 実践者がさまざまな CMS やカスタムセットアップで導入しています。エコシステムは 2024 年までに新しいツールとデプロイメントを通じて着実に成長しました。 ### 今後の展望 本文では、POSSE ユーティリティの継続的な拡張と多様な「サイロ」への広範な採用が予測されています。さらに非ウェブ領域(例:git リポジトリのミラーリング)まで拡大する可能性があります。このシフトは、個人クリエイターや小規模ビジネスに力を与え、支配的プラットフォームへの依存を減らしつつ SEO とオーディエンス エンゲージメントを向上させることが期待されます。

2026/01/03 13:01

**IQuest‑Coder:Claude Sonnet 4.5 および GPT 5.1 を凌駕する新しいオープンソースコードモデル**

## Japanese Translation: --- ### Summary GitHubは、Copilotとその拡張AIツールキット(Spark、Models、MCP Registry)でコードを書き、Actions、Codespaces、Issues、Code Review、および自動ワークフローパイプラインを通じてアプリケーションのデプロイ、監視、セキュリティを行うという、ソフトウェア開発のすべての段階をスムーズにする完全統合型AI搭載開発者プラットフォームとして自社を位置付けています。 このプラットフォームは、GitHub Advanced Security の脆弱性スキャンとシークレット保護という高度なセキュリティ機能を、CI/CD ライフサイクル全体にわたるオートメーションツールと統合しています。ターゲットユーザーは、企業、中小規模チーム、スタートアップ、非営利団体、およびアプリモダニゼーション、DevSecOps、DevOps、継続的インテグレーション/デプロイメントなどの専門ユースケースを含む広範なスペクトルです。 明示的に対応する産業にはヘルスケア、金融サービス、製造業、および政府があり、それぞれのセクター向けにカスタマイズされたソリューションが提供されています。 GitHub の戦略は、プロンプト管理やインテリジェントなアプリデプロイメントなどAI統合を深化させるとともに、エンタープライズグレードのセキュリティ機能、Copilot for Business、プレミアム24/7サポート、および追加オプションの拡充を図っています。これらの動きはコーディングワークフローの高速化、コンプライアンス制御の強化、およびプラットフォーム全体の魅力拡大を目指しています。 コミュニティエンゲージメントは、Security Lab、Maintainer Community、Accelerator、Archive Program、GitHub Sponsors プログラムなどのイニシアチブを通じて強化され、オープンソース開発者を支援し、ソフトウェア業界全体での協力を促進します。ドキュメント、ブログ、変更履歴、マーケットプレイス、コミュニティフォーラム、およびパートナープログラムは、ユーザーが開発ジャーニーを通じて継続的にサポートされるようにさらに支援しています。 ---

2026/01/03 6:27

「『Harder, Better, Faster, Stronger』のBPMに合わせたダフトパンクのイースターエッグはありますか?」

## Japanese Translation: ## 改訂要約 Daft Punk の「Harder, Better, Faster, Stronger」は一般的に 123 BPM としてリストされていますが、正確な分析では実際のテンポは **123.45 BPM** であることが示されました。この微妙さは標準の一覧では見落とされがちです。 著者はリアルタイム BPM 検出アプリ「Tempi」を構築し、数百曲のサニペットライブラリでテストしました。Tempo アプリを使って手動でテンポを測定し、最初の明確なビート(約 5.58 秒)と最後のビート(約 3:41.85 秒)の間にある全ビート数をカウントし、式 `bpm = 60 * (number_of_beats‑1) / duration` を適用しました。Discovery CD のリップでは **123.44994 BPM** が得られ、YouTube バージョンでは **123.45336 BPM** でした。両方とも四捨五入すると **123.45 BPM** に一致します。CD バージョンは処理が少ないため、より代表的と考えられます。 著者は FFT(高速フーリエ変換)や自己相関に依存するアルゴリズムベースのテンポ検出ツールはノイズが多く不正確である可能性を指摘し、手動測定の方がより信頼できる数値を提供すると述べています。 Daft Punk の機材—E‑mu SP‑1200、Akai MPC‑3000、および Emagic Logic—は BPM を異なる小数点精度でサポートしています(前二つでは一桁、Logic では最大四桁)。2001 年と 2013 年のインタビューでは、これらのデバイスでシーケンスを行い、コンピュータを使わないという主張があり、制作時に分数 BPM が可能だったことを示唆しています。 結論として、正確な **123.45 BPM** は Daft Punk の「ロボット的」プロダクションプロセスによる意図的なイースターエッグであると考えられます。このような隠された詳細を認識することは、音楽テック開発者、DJ、および作品に微妙な参照を埋め込むアーティストに有益です。

TinyTinyTPU:FPGA上に実装された、2×2システマティックアレイ型のTPUスタイル行列乗算ユニット | そっか~ニュース