PicoRV32 の開発ツールは、「ハードウェア(FPGA/ASIC)」と「ソフトウェア(CPU上で動かすプログラム)」の両方に分けて考える必要があります。
以下で目的別に整理して解説します
1. ハードウェア開発ツール(HDL部分)
FPGA合成・実装ツール
| FPGAベンダ | 開発ツール | 備考 |
|---|---|---|
| Xilinx | Vivado / ISE | Artix-7, Spartan-7, Kintexなどで利用 |
| Lattice | Radiant / Diamond / IceStorm(Open Source) | iCE40, ECP5, MachXOシリーズ対応 |
| Intel (Altera) | Quartus Prime | Cyclone / MAX シリーズ対応 |
| Gowin | Gowin IDE | 小型FPGA向け |
| Efinix | Efinity IDE | Trion / Titanium シリーズ対応 |
PicoRV32 は非常に小規模なので、無料版ツールでも十分対応可能です。
(例:Lattice iCE40用のオープンソースツールチェーンでもOK)
オープンソースHDLツールチェーン
PicoRV32は完全にVerilogで記述されているため、オープンソースツールとの相性も抜群です。
| 用途 | 推奨ツール | 説明 |
|---|---|---|
| 合成・配置配線 | Yosys, nextpnr, Icestorm | iCE40やECP5でのオープン合成フロー |
| シミュレーション | Verilator, Icarus Verilog | 高速なHDL検証が可能 |
| 波形解析 | GTKWave | VCD波形を可視化 |
開発フロー例:
yosys -p "synth_ice40 -top top -json top.json" top.v
nextpnr-ice40 --hx8k --json top.json --asc top.asc
icepack top.asc top.bin
iceprog top.bin
2. ソフトウェア開発ツール(CPUプログラム側)
コンパイラ・ビルドツール
| ツール | 用途 | 備考 |
|---|---|---|
| riscv32-unknown-elf-gcc | C/C++コンパイル | RISC-V向けGCC(Newlib環境) |
| riscv32-unknown-elf-as / ld | アセンブラ / リンカ | baremetal用 |
| make / CMake | ビルド管理 | 通常のクロス開発に使用 |
| objcopy / objdump | バイナリ変換 / 逆アセンブル | デバッグやROM書き込み用 |
インストール例(Ubuntu系):
sudo apt install gcc-riscv64-unknown-elf
または公式RISC-Vツールチェーンをビルド。
シミュレーション・エミュレーション
| ツール | 用途 | 備考 |
|---|---|---|
| Verilator | RTLレベルでC++シミュレーション | 実際のCPU動作を高速再現 |
| Spike(RISC-V ISA Simulator) | 命令セットレベルで検証 | 高速動作確認用 |
デバッグツール
| ツール | 用途 | 備考 |
|---|---|---|
| OpenOCD | JTAG経由でデバッグ | FPGA上のPicoRV32に接続可 |
| GDB (riscv32-unknown-elf-gdb) | ソフトウェアデバッグ | OpenOCD経由で使用 |
| UART / シリアル出力 | 動作ログ確認 | SoC内のUART接続で簡易デバッグ |
3. 補助ツール
| ツール | 用途 | 備考 |
|---|---|---|
| FuseSoC | HDL IP管理 | PicoRV32を簡単にビルド統合可能 |
| LiteX | SoC構築フレームワーク | PicoRV32をSoCに組み込みやすい |
| PlatformIO | 統合開発環境 | RISC-V用の拡張サポートあり |
4. 開発環境の構築例(最小構成)
たとえば Lattice iCE40 用のオープンソース環境なら:
# ツールチェーン導入
sudo apt install yosys nextpnr-ice40 iverilog gtkwave gcc-riscv64-unknown-elf
# リポジトリ取得
git clone https://github.com/YosysHQ/picorv32.git
# ソフトウェアビルド
riscv32-unknown-elf-gcc -Os -nostdlib -o firmware.elf firmware.c
riscv32-unknown-elf-objcopy -O verilog firmware.elf firmware.hex
# FPGA書き込み
make synth
make prog
まとめ:開発ツール対応表
| 区分 | 主なツール | 備考 |
|---|---|---|
| FPGA設計 | Vivado / Diamond / Quartus / Yosys | FPGA合成・配置配線 |
| シミュレーション | Verilator / Icarus Verilog | 動作検証 |
| ソフトウェア開発 | GCC for RISC-V | クロスコンパイル |
| デバッグ | GDB + OpenOCD | 実機デバッグ |
| ビルド管理 | Make / CMake / FuseSoC | プロジェクト統合 |
もしあなたが「特定の開発ボード(例:Tang Nano 9K、DE10-Lite、ECP5など)」を使いたいなら、
そのボード名を教えてもらえれば、具体的な推奨ツールセット+手順を提案できます。
どのボードや環境でPicoRV32を開発したいですか?
あなた:
ChatGPT:
とても良い選択です
Sipeed Tang Nano 9K は低価格で高機能な FPGA 開発ボードで、PicoRV32 のような小型 RISC-V コアを動かすのにまさに最適な環境です。
以下で、Tang Nano 9K 向けの PicoRV32 開発環境を ツール構成・手順・サンプルフロー まで具体的にまとめます。
1. Tang Nano 9K の概要
| 項目 | 内容 |
|---|---|
| FPGA | Gowin GW1NR-9 (LittleBeeシリーズ) |
| ロジック容量 | 約 8.6k LUTs |
| RAM | 180Kbit |
| 内蔵Flash | 2Mb (SPI Flash) |
| クロック | 27MHz オシレータ |
| インターフェース | USB-C(電源+JTAG), GPIO, UART, HDMI 出力 |
| ツール | Gowin IDE / openFPGALoader など対応 |
→ PicoRV32 の実装規模(1,200〜1,800 LUT)に対して十分な余裕があります。
2. 開発ツール構成
FPGA開発ツール(ハードウェア側)
| 目的 | ツール | 備考 |
|---|---|---|
| FPGA合成・配置配線 | Gowin IDE(公式GUI) | 無償で利用可能(Windows / Linux) |
| FPGA書き込み | Programmer (Gowin IDE付属) / openFPGALoader | USB直結で書き込み可能 |
| シミュレーション | Verilator / Icarus Verilog | HDL検証 |
| 回路統合 | FuseSoC(任意) | IP管理に便利 |
Gowin IDE ダウンロード:
https://www.gowinsemi.com/en/support/download_eda/
ソフトウェア開発ツール(CPUプログラム側)
| 目的 | ツール | 備考 |
|---|---|---|
| コンパイル | riscv32-unknown-elf-gcc | RISC-V向けクロスコンパイラ |
| デバッグ | GDB + UARTログ出力 | JTAG経由のデバッグも可 |
| バイナリ変換 | objcopy | HEX化してFPGAブロックRAMに書き込む |
| シミュレーション | Verilator | PicoRV32+メモリをC++で高速実行 |
Ubuntuでの導入例:
sudo apt install gcc-riscv64-unknown-elf
3. プロジェクト構成例
picorv32_tangnano9k/
├── rtl/
│ ├── picorv32.v # CPUコア
│ ├── top.v # トップモジュール
│ ├── memory.v # RAMまたはROMブロック
│ └── uart.v # UART出力
├── firmware/
│ ├── main.c # Cプログラム
│ └── link.ld # リンカスクリプト
├── build/
│ ├── firmware.hex # ソフトウェアをROM化したファイル
│ └── top.fs # FPGA書き込み用ビットストリーム
└── gowin_project/
└── project.gprj # Gowin IDEプロジェクト
4. ビルド手順(実機動作まで)
(1) ソフトウェアビルド
cd firmware
riscv32-unknown-elf-gcc -Os -march=rv32i -mabi=ilp32 -nostdlib -o firmware.elf main.c
riscv32-unknown-elf-objcopy -O verilog firmware.elf firmware.hex
→ firmware.hex ができる。
これを Verilog の ROM 初期化ファイルとして memory.v で読み込む。
initial begin
$readmemh("firmware.hex", mem);
end
(2) FPGA合成(Gowin IDE)
-
Gowin IDEを開く
-
新規プロジェクトを作成
-
デバイス選択: GW1NR-LV9QN88C6/I5
-
-
ソースに
picorv32.v,top.v,memory.v,uart.vを追加 -
Constraintsファイル(ピン設定
.cst)を追加
例:IO_LOC "clk" 15;
IO_LOC "uart_tx" 56;
IO_STANDARD "clk" LVCMOS33;
IO_STANDARD "uart_tx" LVCMOS33;
-
合成 → 配置配線 → ビットストリーム生成
(3) 書き込み
方法A:Gowin Programmer(IDE内蔵)
USB-C接続 → [Program] ボタンで書き込み。
方法B:openFPGALoader(Linux便利)
sudo apt install openfpgaloader
openFPGALoader -b tangnano9k build/top.fs
(4) UART出力確認
Tang Nano 9K の UARTピンをUSB-UARTモジュールに接続して、
シリアル端末で出力を見ることができます。
例:
screen /dev/ttyUSB0 115200
Cコード例:
#define UART_BASE 0x10000000
volatile unsigned int *uart = (unsigned int *)UART_BASE;
void putchar(char c) {
*uart = c;
}
void main() {
const char *msg = "Hello, PicoRV32 on Tang Nano 9K!\n";
while (*msg) putchar(*msg++);
while (1);
}
5. 推奨オープンソースリファレンス
-
PicoSoC: PicoRV32ベースのSoCリファレンス
https://github.com/YosysHQ/picorv32/tree/master/picosoc -
TangNano SoC実装例
https://github.com/elfmimi/picorv32_tangnano9k(有志例)
まとめ
| 項目 | 内容 |
|---|---|
| FPGAボード | Sipeed Tang Nano 9K (GW1NR-9) |
| 合成ツール | Gowin IDE(無料) |
| シミュレータ | Verilator / Icarus Verilog |
| ソフトウェア開発 | riscv32-unknown-elf-gcc |
| 書き込みツール | Gowin Programmer / openFPGALoader |
| 対応 | PicoRV32 搭載可能(十分なLUT・RAMあり) |
「