このケーススタディではプロンプトによる要求追加が,どの処理と生成物につながったかを追いながら,CodexをFPGAロジック設計の共同開発者として使える範囲を検証する.具体的にはRTL開発から検証,CoreMark実行,GOWIN FPGA用のビットストリーム生成まで行う.

要約
今回のプロジェクトではCodexへの対話的な依頼を起点に,FPGA向けRISC-Vプロセッサの開発を次の通り進めた.
- 仕様整理
- RTLコード生成
- テストベンチ作成
- 専用WSL環境構築
- 回帰自動化
- CoreMark評価
- GOWIN EDAによる実装
最終成果は,RV32I 2.1基本命令40命令を実装したノン・パイプライン版と5段パイプライン版の2コアである.IMEMとDMEMは各8192ワード×32-bitの同期式とし,各実装で32個のBSRAMへ推論された.2026年8月4日の再検証では,18テストがIcarus VerilogとVerilatorの双方でPASSした.
性能面では,CoreMark 10反復で5段版が12,240,032サイクル,ノン・パイプライン版が15,522,696サイクルとなった.5段版は約1.27倍少ないサイクルで処理した.GOWIN GW5A-25への配置配線後Fmaxは,それぞれ70.013 MHzと52.327 MHzだった.
結論
CodexはRTLコードを生成するだけでなく,開発環境,検証フロー,ベンチマーク,ベンダEDAの実行スクリプト,レポート整理,説明資料までをつなぐ役割を担える.一方,ボード固有のピン制約,実機デバッグ,電気的条件,最終仕様判断は人が責任を持つ必要がある.
1. はじめに:CodexでFPGA開発はどこまでできるのか
このプロジェクトの出発点は,基本的なRISC-Vプロセッサを作ることだった.しかし,本当の検証テーマはそれだけではない.Codexに対して段階的に要求を追加したとき,RTLコードだけでなく,ツール導入,検証,性能評価,FPGA実装まで一貫して進められるかを確認することが目的だった.
最初の問い
GOWIN FPGAを最終ターゲットとして,基本的なRISC-VのRTLコードを開発し,オープンソースの論理シミュレータで実装と同時に検証できるか.
FPGA開発は,正しいVerilogコードを書くだけでは完結しない.対象ISAとマイクロアーキテクチャを定義し,テストプログラムとテストベンチを用意し,シミュレータ差を確認し,メモリ推論やタイミング制約を考慮して,ベンダEDAによる合成まで到達する必要がある.今回の評価では,この周辺工程も含めてCodexによる開発の対象とした.
評価した開発範囲
- Windows上での専用WSL Ubuntu環境とオープンソースツールの導入
- ノン・パイプライン版と5段パイプライン版のRTL開発
- RV32I 2.1基本命令40命令と同期BSRAMインターフェース
- Icarus VerilogとVerilatorによる回帰、Yosysによる合成サニティチェック
- CoreMarkのベアメタル移植とサイクルベース比較
- GOWIN EDAでの合成,配置配線,STA(静的タイミング解析),ビットストリーム生成
- README,カバレッジ,実装レポート,PowerPoint資料の生成
2. プロンプトがプロジェクトをどう変えたか
今回の対話では,初めから完全な仕様を一度に与えたわけではない.動く最小構成を起点に,環境,検証,ISA(Instruction Set Architecture),パイプライン,メモリ,FPGA実装へと要求を積み上げた.修正依頼は単なる文章の追加ではなく,設計構造と検証対象を変える入力として働いた.

重要なポイント
プロンプトの価値はコード生成量ではなく,受け入れ条件を明確にできる点にある.「両シミュレータで全テストPASS」,「BSRAMへ推論」,「STAまで完了」のような終了条件が,Codexの作業ループを決めた.
3. 得られた生成物と再現可能な開発環境
最終的なプロジェクトは,OneDriveのdevelopフォルダだけで実行できる形に整理された.Windows側はPowerShellを入口とし,Linux向けツールは専用のUbuntu-24.04 WSLで動作する.GOWIN EDAだけはWindowsネイティブで実行し,同じプロジェクトツリーのRTLと制約を使用する.
powershell -ExecutionPolicy Bypass -File .\scripts\run_regression_wsl.ps1
powershell -ExecutionPolicy Bypass -File .\scripts\run_coremark_wsl.ps1 -Iterations 10
powershell -ExecutionPolicy Bypass -File .\scripts\run_gowin.ps1 -Core all
主要な生成物

2種類のRV32Iコアと同期メモリ

ノン・パイプライン版は,同期メモリに合わせたマルチサイクル構成である.通常命令は命令取得と実行の2サイクル,Loadはデータ読み出しを含む3サイクルとなる.構造が追いやすく,デバッグと比較基準に向く.
5段版はIF,ID,EX,MEM,WBで命令をオーバラップして処理する.EX/MEMおよびMEM/WBからのフォワーディング,Load-useハザード時のストール,分岐・ジャンプ・trap時の若い命令の破棄を実装した.
RV32I命令とtrap
両コアはRV32I 2.1の基本命令40命令を実装する.上位即値,ジャンプ,6種類の分岐,byte/halfword/wordのLoad/Store,即値ALU,レジスタALU,FENCE,ECALL,EBREAKを対象とした.ECALLはcause 8,EBREAKはcause 3を出力し,trap_pcと合わせて精密例外を確認できる.
スコープ外
M,Zicsr,Zifencei,特権割り込みは別拡張として未実装である.RV32I基本命令40命令の完全対応と,RISC-V全拡張対応は同じ意味ではない.
同期BSRAMインターフェース
IMEMは8192ワード×32-bitの同期Read ROM,DMEMは同容量の同期Read RAMである.DMEMは4-bitのwrite strobeを持ち,SB,SH,SWを同じ32-bit配列に実装する.Write中はrdataを更新しないno-change動作とした.
rtl/rv32i_sync_dmem.vの要点
always @(posedge clk) begin
if (en) begin
if (|wstrb) begin
if (wstrb[0]) mem[addr][7:0] <= wdata[7:0];
if (wstrb[1]) mem[addr][15:8] <= wdata[15:8];
if (wstrb[2]) mem[addr][23:16] <= wdata[23:16];
if (wstrb[3]) mem[addr][31:24] <= wdata[31:24];
end else begin
rdata <= mem[addr];
end
end
end5. 自動検証とRTL修正ループ
検証は,機能を追加するたびに小さなテストを増やし,Icarus VerilogとVerilatorの両方で同じtests.listを実行する方式とした.テストベンチはレジスタやメモリの最終signature,trap cause,trap PC,パイプラインのsquash結果を確認する.

scripts/run_regression.shの流れ
while IFS= read -r top; do
iverilog -g2012 -o "sim/build/regression/${top}.vvp" \
-s "${top}" -c sim/filelist.f
vvp "sim/build/regression/${top}.vvp"
done < sim/tests.list
bash ./scripts/run_verilator.sh2026年8月4日の再検証
18/18テストがIcarus VerilogでPASSし,同じ18/18テストがVerilatorでもPASSした.機能エラーは0件だった.
シミュレーション時には,短いhexファイルを256ワードのテスト用IMEMへ読み込むため,readmemhから「Not enough words」という警告が出る.未使用領域は事前にNOPで埋めており,これはテスト失敗ではない.記事ではPASS/FAILと警告を区別する.
6. CoreMarkによる性能比較


5段版は同じ処理を約1.27倍少ないサイクルで完了した.さらに配置配線後Fmaxも高いため,STA周波数換算の推定スループット差は大きくなる.
測定上の注意
この値は開発用のサイクル比較であり、EEMBCへの公式CoreMark提出値ではない。現在のベアメタルportは実タイマ周辺回路を持たず、内部benchmark timerを有効な測定窓へ固定している。
7. GOWIN EDAによるFPGA実装
両コアをGOWIN EDA V1.9.12.02_SP1でGW5A-LV25UG324C2/I1へ実装した.Tclから合成,配置配線,静的タイミング解析,ビットストリーム生成を連続実行し,生成されたHTML/TXTレポートと.fsファイルをプロジェクトに保存した.


リソース使用量

IMEMに16個,DMEMに16個のBSRAMを使用し,要求した32 KiB + 32 KiBがFFやLUTではなく合計32個のBSRAMへ実装された.5段版は70 MHzでsetup余裕が0.003 nsしかないため,初回の実ボード動作は65 MHzを推奨する.
ボード実装前の制約
現在は評価用トップの132 I/Oを自動配置している.特定ボードへ書き込む前に,クロック,リセット,I/O電圧,UART/JTAGなどのCSTを作り,再度P&RとSTAを行う必要がある.
8. Codexが処理した内容
このケースでCodexが扱った作業は,RTLコードの文章生成に限られない.既存ファイルの調査,ツール実行,ログ解析,修正,再検証,結果の文書化を連続したタスクとして処理した.

処理ループ
- コードベースと既存の変更を確認する
- 要求を満たす最小のRTLコード,テスト,スクリプト変更を行う
- 実際のシミュレータ,コンパイラ,EDAを実行する
- ログのエラーと警告を分類し,原因を修正する
- 同じテストを再実行し,機能と回帰を確認する
- 数値と生成物の場所をドキュメントへ反映する
9. Codexでできたこと,できなかったこと

Codexは仕様が検証可能な形で与えられ,ツールをコマンドで実行でき,成功条件をログやレポートで確認できる作業に強い.一方,実機の物理状態,曖昧な製品要求,失敗コストが高い最終判断は,人のレビューと責任範囲を明確にする必要がある.
実務での使い方
Codexに『RTLを書いて』だけでなく,『どのテストを何個通すか』,『どのEDA段階まで実行するか』,『どの数値をレポートするか』を伝えると,成果物の質と再現性が高くなる.
10. まとめと次の開発
この例では,自然言語の要求を起点に,2種類のRV32Iコア,64 KiBの同期BSRAM,両シミュレータ18/18 PASS,CoreMark比較,GW5A-25のbitstreamまで到達した.重要なのは,Codexが個別ファイルを生成したことより,要求・実装・検証・実装レポートを一つの再現可能な流れとして接続したことである.
次の段階では,実ボード用CSTとクロック回路,UARTまたはJTAGの観測手段,Zicsrと割り込み,M拡張,riscv-formalまたはcompliance test,CI,実機CoreMarkと消費電力測定を追加する.これらも同じ『要求→テスト→実行→レポート』のループへ組み込める.
最終メッセージ
CodexはFPGA設計者を置き換えるものではないが、設計者が仕様と受け入れ条件を示せば、RTLから検証・実装・説明資料までを前へ進める共同開発者として使える。
付録A. 最終プロンプト一覧
修正や追加依頼は最終要件へ統合した.以下は,このプロジェクトを再現・説明する際に使える形へ整理したプロンプトである.
1. RISC-V RTL開発
GOWIN FPGAへの実装を前提として,基本的なRISC-VプロセッサのRTLコードを作り,オープンソースのシミュレータで開発と検証を並行する.
2. Windows・WSL環境
既存ディストリビューションを使わず,RISC-V開発専用のUbuntu WSLを構築し,必要なツールを導入する.
3. 簡易実行環境
PowerShellからWSL上のシミュレーション,回帰,CoreMark,合成を実行できるスクリプトを用意する.
4. フォルダー統一
生成物をOneDrive\develop配下へ移動し,パス依存を修正してそのフォルダだけで動作させる.
5. 検証・修正ループ
テストで問題が出た場合はRTLコードを修正し,合格するまで再検証する.
6. 回帰テスト
Verilatorベースの回帰と,命令追加ごとの自動テストを整備する.
7. 2種類のコア
ノン・パイプライン版に加えて5段パイプライン版を作り,ハザード処理を実装する.
8. RV32I完全対応
RV32I 2.1基本命令40命令を両コアで実装・検証する.
9. CoreMark
2コアでCoreMarkを実行し,サイクル数とCoreMark/MHzを比較する.
10. 同期BSRAM
IMEM 8192×32-bit,DMEM 8192×32-bitを同期式BSRAMとして実装する.
11. GOWIN実装
GW5A-25で合成,配置配線,STA,ビットストリーム生成を行い,周波数とリソースを提示する.
12. プレゼン
開発したRTLコードと環境を説明する日本語・英語PPTXをGOWINブルー基調で作成する.
13. 目的の明文化
CodexでどのようなFPGA開発ができるかを確認することも目的として資料に追加する.
付録B. 主要生成物と実行コマンド

出典・検証根拠
本記事の数値と結論は,プロジェクト内のRTL・スクリプト・EDAレポートと,記事作成時に再実行した回帰およびCoreMarkの結果に基づく.

- プロジェクトREADME.md(最終仕様,実行方法,CoreMarkとGOWIN概要)
- docs/rv32i_coverage.md(RV32I基本命令40命令のcoverage)
- docs/gowin_implementation.md(2026年7月16日のGOWIN実装結果)
- sim/tests.listおよび2026年8月4日のrun_regression_wsl.ps1再実行結果
- 2026年8月4日のrun_coremark_wsl.ps1 -Iterations 10再実行結果
- rtl/,tb/,scripts/,fpga/gowin/配下の生成物