5cm FPGA基板でMicroBlazeを動かす|UART+7セグ表示まで一気に動作確認
Running MicroBlaze on a 5cm FPGA Board | UART Input to 7-Segment Display
🇬🇧English Sammary
This article demonstrates how to run MicroBlaze on a compact 5cm FPGA board and implement a simple UART-to-7-segment display system.
We built a minimal system using:
- MicroBlaze CPU
- AXI UART Lite
- AXI GPIO
The system receives numeric input from a PC via UART, displays it on a 7-segment LED, and sends an echo back for verification.
Key lessons:
- Always check baud rate settings
- Verify XDC pin assignments
- Properly configure Vitis workspace
This setup shows that even a small FPGA board can handle full embedded system prototyping efficiently.
導入
5cmサイズのFPGA基板を使って、今回はMicroBlazeを動作させてみました。
これまでに以下を確認済みです:
- 7セグLEDのカウント表示
- UART通信(PCとの通信)
- VHDL単体での動作確認
今回はそこから一歩進めて、
MicroBlaze上でUART入力 → 7セグ表示を実現します。

🔧 開発環境
- FPGA:5cm FPGAボード(XC7S25系)
- ツール:
- Vivado 2025.x
- Vitis 2025.x
- クロック:50MHz
- UART:FT2232H経由
🧠 システム構成
今回の構成はシンプルです。
PC → UART → MicroBlaze → GPIO → 7SEG
↑
UARTフィードバック
ポイントは:
- PCから入力した数字を受信
- そのまま7セグに表示
- UARTでエコーバック(確認用)
⚙️ Vivado設計
① Block Design
- MicroBlazeを配置
- AXI UART Lite
- AXI GPIO(7SEG用)
- Clocking Wizard(50MHz)
② Wrapper生成
VivadoでHDL Wrapperを生成すると、以下のようなトップになります:
entity mb_uart_7seg_wrapper is
port (
FT_RXD : out STD_LOGIC;
FT_TXD : in STD_LOGIC;
SEG_tri_o : out STD_LOGIC_VECTOR ( 7 downto 0 );
diff_clock_rtl_0_clk_n : in STD_LOGIC;
diff_clock_rtl_0_clk_p : in STD_LOGIC;
reset_rtl_0 : in STD_LOGIC
);
end mb_uart_7seg_wrapper;
※XDCの信号名ミスでハマったので注意
🖥️ Vitisでソフト作成
ハマりポイント
- 「You have not yet opened a workspace」が出る
→ Workspaceを開く必要あり - Platformは作れてもApplicationが作れない
→ Platform選択を確認
💻 サンプルコード(C)
#include "xuartlite.h"
#include "xgpio.h"#define UART_DEVICE_ID XPAR_UARTLITE_0_DEVICE_ID
#define GPIO_DEVICE_ID XPAR_GPIO_0_DEVICE_IDXUartLite Uart;
XGpio Gpio;int main()
{
u8 data; XUartLite_Initialize(&Uart, UART_DEVICE_ID);
XGpio_Initialize(&Gpio, GPIO_DEVICE_ID); XGpio_SetDataDirection(&Gpio, 1, 0x00); while(1)
{
if (XUartLite_Recv(&Uart, &data, 1))
{
// エコーバック
XUartLite_Send(&Uart, &data, 1); // 数字のみ表示
if (data >= '0' && data <= '9')
{
XGpio_DiscreteWrite(&Gpio, 1, data - '0');
}
}
}
}
🔌 動作結果
最初うまく動かなかった原因はこれ👇
👉 ボーレートが 9600bps だった
→ 115200に合わせたら即動作
🎉 実際の動き
- PCで数字キー入力
- FPGAに送信
- 7セグに表示
- 同時にエコーバック
👉 完全に想定通り動作
⚠️ ハマりポイントまとめ
- XDCの信号名ミス
- Workspace未設定(Vitis)
- ボーレート不一致
👉 この3つでほぼ詰まる
💡 今回のポイント
- MicroBlazeでも超シンプル構成で動く
- UART+GPIOだけでも十分実用
- 5cm基板でもしっかりシステム組める
対話ログ
今回のやり取りは保存しています。
🚀 次のステップ
- コマンド入力対応
- 複数桁表示
- FIFO化
- AXIバス制御拡張
✍️ まとめ
5cm FPGA基板でも、
👉 「CPU+入出力」まで一気に構築できる
これで、
- ソフト+ハード一体開発
- 組み込みシステム試作
がかなり現実的になりました。
FPGAインフォメーションのホームページはこちらです。
