FPGAデバッグ編:内部レジスタを“見える化”する(UARTで状態確認)
FPGA Debugging: Visualizing Internal Registers via UART
English Sammary
After on-site debugging, we received a common but critical question:
“We wrote the data, but we can’t see what’s actually inside.”
While tools like Vivado allow engineers to inspect internal FPGA states, they are not always easy to use for non-experts due to setup complexity and required experience.
To address this, we implemented a simple UART-based method to visualize internal register values directly from the FPGA.
Instead of introducing a CPU, we chose a pure HDL-based approach because:
- The data volume was small
- The output pattern was fixed
- No complex control was required
Using generative AI, the implementation was built step by step:
- UART transmission module
- Register readout logic
- Data formatting
- System integration
This incremental approach proved essential, as attempting to generate everything at once often led to unstable results.
Since the actual hardware was not available during development, we recreated an equivalent environment using a 5cm FPGA board and validated the design before deploying it for remote testing.
As a result, internal register states became visible through UART, significantly reducing uncertainty during debugging.
Key takeaway:
Even when a system works correctly, lack of visibility can cause serious confusion.
Designing for observability should be considered a core part of FPGA system design.
導入
現地デバッグ後、お客様からこんな問い合わせがありました。
「書き込みはできているはずだけど、中身がどうなっているのかわからない」
FPGA開発者であれば、
Vivado などのツールを使えば内部状態は確認できます。
ただし、
- 操作に慣れが必要
- 環境構築が面倒
- 非エンジニアにはほぼ使えない
という問題があります。
そこで今回は、
UART経由で内部レジスタの状態を可視化する仕組みを試作しました。
アプローチ
今回のポイントはシンプルです。
- 内部レジスタの値を
- UARTでそのまま吐き出す
これだけ。
ただし設計としては分岐がありました。
CPUを使うか?HDL直書きか?
今回は以下の理由でHDLを選択しました。
- データ量が少ない
- 出力パターンが固定
- 柔軟な制御が不要
👉 結論:HDL直書きで十分
この判断はまだ人間側の設計力が効く部分ですね。
実装の進め方(ここかなり重要)
生成AIを使うときのポイントも出てるのが良いところ。
いきなり全部やらせると崩壊します。
今回はこんな感じで分割しました:
- UART送信モジュール作成
- レジスタ読み出しロジック作成
- フォーマット整形(16進→表示)
- トップ統合
👉 小さく作って積み上げる
このやり方だとかなり安定します。
実機がない状態での検証
今回は少し特殊で、
- 本番機なし
- 手元は5cm FPGAボード
という状況でした。
そこで:
- 同等構成をローカルで再現
- 動作確認
- 相手側で実機テスト
という流れで進めました。
👉 この「仮想的な再現力」はかなり効きますね
結果
UART経由で
- 各レジスタの値
- 書き込み状態
が確認できるようになり、
“見えない不安”を解消できました。

気づき(ここめちゃ価値ある)
今回一番大きかったのはこれ👇
見えない状態は、技術的に正しくても不安になる
つまり
- 正しく動いていること
- それが確認できること
は別問題。
👉 今後は最初から「見える化」を前提に設計するべき
まとめ
- FPGAの内部状態はツールなしだと見えない
- UARTで簡易可視化すると現場が楽になる
- 生成AIは分割指示すればかなり強い
- 「見える化」は機能の一部として設計すべき
次回予告
次回はパルスジェネレータの総括です。
こういうデバッグ環境も含めて設計支援しています
FPGAインフォメーションのホームページはこちらです。
