Sipeed Tang Nano 9K (GW1NR-9)

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を開発したいですか?

あなた:
Sipeed Tang Nano 9K
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)

  1. Gowin IDEを開く

  2. 新規プロジェクトを作成

    • デバイス選択: GW1NR-LV9QN88C6/I5

  3. ソースに picorv32.v, top.v, memory.v, uart.v を追加

  4. Constraintsファイル(ピン設定 .cst)を追加
    例:

    IO_LOC "clk" 15;
    IO_LOC "uart_tx" 56;
    IO_STANDARD "clk" LVCMOS33;
    IO_STANDARD "uart_tx" LVCMOS33;
  5. 合成 → 配置配線 → ビットストリーム生成


(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. 推奨オープンソースリファレンス


まとめ

項目 内容
FPGAボード Sipeed Tang Nano 9K (GW1NR-9)
合成ツール Gowin IDE(無料)
シミュレータ Verilator / Icarus Verilog
ソフトウェア開発 riscv32-unknown-elf-gcc
書き込みツール Gowin Programmer / openFPGALoader
対応 PicoRV32 搭載可能(十分なLUT・RAMあり)