FPGA競技について
更新情報 
- 2026-04-28 初版を公開しました
FPGA 競技の基本方針
- FPGA 競技は 2024年度からスタートした新しい競技 です。以前は配置配線問題を模した「ナンバーリンク」の解を自動で求めるシステムや数値関数の値を求める演算器など、アルゴリズムやアーキテクチャの設計を行うコンテストを行って参りました。昨年度からコンテストの趣向を変えて、プログラミング競技 と FPGA競技 の2本立てになりました。コンテストの目的としてアルゴリズムデザインの方向性は変わりませんが、ソフトウェアだけでなく、ハードウェアの分野においても 論文投稿ができるように裾野を広げています。
- FPGA 競技についてはこれまでの応募件数も少なく、競技として習熟していないことから、昨年と同様、競技の大枠のみを設定し、一律の動作環境や実装条件などは定めない方向です。競技的な一律指標での優劣よりもむしろ、実装手法やアイディアの新規性、独創性など多彩な視点における「アルゴリズムデザイン」を提案していただき、論文投稿へ繋げていく場としてご活用いただければと思います。
- このような背景から、パフォーマンスも自己申告制としたいと思います。当日はライトニングトークもありますので、アピールポイントなど自由に発表していただければと思います。
- 実装のきっかけをつかんでいただけるように、一案としての実装仕様 を以下に定めていますので、ご参考になさって下さい。
- プログラミング競技と FPGA 競技は 同じテーマ を扱っています。昨年度は「ナンバープレイス・パズル(ナンプレ)」でしたが、今年度のテーマは「マインスイーパー」です。
- 事務局側からは参考程度の位置付けとして マインスイーパーシステム・モジュールのサンプル を提供させていただきます。使用は必須ではありません ので、自由にハードウェアを設計していただければと思います。
競技概要
- 「マインスイーパー」の問題を自動的に解く ハードウェア(ソルバ) を設計して下さい。
- Verilog-HDL 等を用いて開発いただき、可能であれば FPGA ボード等で動作させて下さい。
- FPGA への実装が難しい場合は論理シミュレーションや合成結果のみでも構いません。
- FPGA ボード等の環境は参加者ご自身でご用意いただければと思います。
- 「マインスイーパー」の基本ルールは プログラミング競技と同一 です。ただし、盤面の表現の仕方 や データ構造 、セル値の表現 等はハードウェアに合わせて自由に変えて下さい。また、地雷をオープンした場合の扱いやスコアのカウント方法もプログラミング競技とは異なります。ルールと得点 をご参照下さい。
ハードウェアの入力
- 盤面データ が入力となります。プログラミング競技で使用する盤面データと同じフォーマットのテキストファイルです。
- ホストPCとFPGA間で通信を行い、盤面データのテキストファイルをFPGAに送り込む等の方法により、動作中のFPGAに問題を与えます。
- FPGA へのデータ送信が難しい場合は、盤面データをFPGA内のROMに予め書き込んでおいても構いません。
- 論理シミュレーションの場合はシミュレータに合わせて盤面データを入力してください。
ハードウェアの出力
- ホストPCとFPGA間で通信を行い、最終盤面のテキストファイルをホストPCに送り出す等の方法により、ホストPC上で解答データを取得します。
- 実機での動作確認が難しい場合は、論理シミュレータを用いてRAMに格納される解答データを取得しても構いません。
- 上記以外の方法による解答データの取得も可能です。
ルールと得点 
- 1盤面あたりのスコアは、-1点~1点の範囲となります。
- 安全セルを1つ開けた場合、(開けた安全セル数 / 盤面の全セル数 - 地雷セル数) を加点します。
- 地雷セルを1つを開けた場合、 (1 / 盤面の全地雷セル数) を減点します。
- 1盤面あたりのスコアは、以下の式で表されます。
$\text{score} = \frac{\text{開けた安全セル数}}{\text{盤面の全セル数} - \text{盤面の全地雷セル数}} - \frac{\text{開けた地雷セル数}}{\text{盤面の全地雷セル数}}$ - 地雷セルを開けずに、全ての安全セルを開けた場合は1点となります。
- 地雷セルのみを全て開けた場合は-1点となります。
-
盤面上の全セル(安全セル+地雷セル)を開けた場合は0点となります。
-
開発していただくプログラムは、入力として盤面データを読み込み、解答した盤面数、実行時間、および解答した盤面の合計スコアを出力するものとします。
- 入力として与えられる盤面データを解析すれば地雷セルの位置を特定できますが、「マインスイーパー」を解くプログラムにおいては、地雷セルの位置は分からないものとして実装してください。
- 選択済みのセルから得られる情報を元に、次のセルを選択することは問題ありません。
- 選択した地雷セルの位置情報を利用することは問題ありません。
マインスイーパーシステム・モジュールについて 
- 参考程度の位置付けとしてマインスイーパーシステム・モジュールを提供させていただきます。使用は必須ではありません。
- マインスイーパーシステム・モジュールの詳細は、アーカイブ中の readme.md をご参照下さい。
- マインスイーパーシステム・モジュールは以下からダウンロードいただければと思います。
==> マインスイーパーシステム・モジュールのダウンロード
サンプル盤面データについて 
- サンプルの盤面データは マインスイーパーシステム・モジュール に含まれていますので、ご参考になさってください。
- サンプルプログラム (testbench.v) では以下のファイルを読み込みます。
- board_size.txt … 盤面サイズ情報
- board.txt …….. 盤面データ
board_size.txt 3 5board.txt 0F 02 01 01 01 01 02 0F 02 01 00 01 01 02 0F
- サンプルプログラムの board モジュールは以下のポートを持っています。
module board ( input wire clk, input wire reset, input wire [3:0] row, // 行 input wire [3:0] col, // 列 input wire select, // セル選択 output reg [7:0] board_state, // セルの状態 output reg [2047:0] current_board // ボードの状態 ); - ボードデータの各セルは下記のように設計されています。各セルは 8-bit で構成されており、上位4ビットはセルがオープンされたかどうかの判定に使用しています。また、下位4ビットは周囲の地雷の数を保持しています。
```
- board_state[7:5] : Reserved(未使用)
- board_state[4] : セルのオープン情報 (0x0 で未オープン、0x1 でオープン)
- board_state[3:0] : 周囲の地雷の数(0x0 - 0x8), 地雷(0xF) ```
- オープンされていない地雷セルは 0x0F となります。
- オープンされた地雷セルは 0x1F となります。
- オープンされた状態のセルは 0x10 から 0x18 となります。
- マインスイーパーシステム・モジュールでは全てのセルの値が 0x0F、0x10 から 0x18、0x1F のいずれかになっていれば終了となります。
競技用盤面データの提供について 
- FPGA 競技で使用する盤面データのご用意ができました。以下からダウンロードいただければと思います。
==> FPGA 競技用盤面データのダウンロード
- 競技用盤面は サンプル盤面と同一 のフォーマットです。
- 盤面サイズが異なる5種類の盤面を含んでいます。
提出方法 
- FPGA 競技の結果を記載する Excel ファイルのサンプル
minesweeper_result.xlsxがマインスイーパーシステム・モジュール に含まれています。 - 競技用盤面に関する実行結果を
minesweeper_result.xlsxに記載いただきまして、das2025support”at”sig-sldm.org より、ADC 事務局あてご連絡をいただければと思います。(”at”は@に変換してください)。 - メール本文には「参加者入力フォーム」に記載いただいたお名前もしくはチーム名を明記してください。
- 受領しましたら、ADC 事務局メンバーより返信させていただきます。どうぞよろしくお願いいたします。
- 締め切りは 2025年8月20日(水) です。