FPGAでコインを掘る

DE2-115でMONAコインを掘ってみました。

クロック25MHzでLOCAL_MINERS=3のとき、おおよそ7-10kH/sでscryptコイン(MONACOIN)が掘れました。(ちなみに、スクリプトの表示は、1.44kH/sと出ていますが、各コアごとの採掘速度のようです。図参照)

50MHzで試したところ、見かけ上ほぼ倍の採掘効率(30kH/s)がでましたが、長時間安定して掘るのは難しいようです。

注意

ものすごく高価なデバイスなので、これで採掘しても、損するだけです。実験・学習用ということでお願いします。GPUのほうが、コスパが良好です。

用意するもの

  • FPGA学習ボード DE2-115 (Cyclone IV) 
    • 定価6万円くらいだけど、メーカー直販の学割でほぼ半額で買える。
  • 上記用の開発ツール一式 (Quartus II) 無償版でOK
  • パソコンやマイコンなど
    • シリアル通信やUSB通信ができればよい。Raspberry PiでもGPIOのTX/RX経由で通信できる。
  • ソースコード
DE2-115

コンパイル

  • シングルコアでよければ、プロジェクトファイルをそのまま読み込んで、コンパイルを実行する。
  • LOCAL_MINERSの定数は、デフォルトでは1。おそらく3くらいまでは増やせる。
  • デフォルトでは、NOLEDS=1となっていて、LED出力がない。定義を消せば、LED表示がでるらしい。
  •  (定数の変更は、 Assignments>Settings>Analysus&Synthesis Settings>Verilog HDL Input
  • クロックは、デフォルトでは25MHz。
  • くわしくは、ソースファイル (ltcminer.v) のコメントをよむこと。

バイナリファイルの変換


コンパイルがおわると、SOFファイルができるので、このまま書き込めば実行可能。ただし、電源切ると消えるので、これをJIC形式に変更して、JTAG(USB BLASTER)経由で、ボードのフラッシュメモリ?に書き込む。

JICファイルのつくりかた

  • Files>Convert Programming File 
  • Programming file type: JTAG Indirect Configuration File(.jic) を選択
  • Configuration device: EPCS64
  • File name: 任意のファイル名
  • Flash Loader をクリックして、Add File をクリック
  • Device Familyから Cyclone IV E を、Device Name から EPC4E115 を選択
  • SOF Dataをクリックで選択して、Add Fileをクリック。さきほどコンパイルしたSOFファイル(デフォルトでは ltcminer.sof)を選択。
  • さいごに、 Generate をクリック

参考までに、じぶんで作ったJICとSOFをアップロードしました。とくに表記のないものは、25MHzクロックです。50MHz版は、見かけ上動いているようなのですが、堀ったものがちゃんとAcceptされませんでした。ご参考までということで。

書き込み

  • メニューから Tools > Programmer を開く。
  • Fileのコラムが、 quartus_output/ltcminer.sof になっているので、これを さきほどつくったJITファイルに変えます。
  • SOFファイルの表示をクリックして、左にある Change File ... のアイコンをクリック。さきほどつくったJITファイルを選択。
  • チェックボックスの Program/Configure と Verify を選択。(図参照)
  • さいごに、Start で書き込み。

実行する

Fpgaに対応した miner で試してみたいとろこですが、stratum対応のやつが見つからないので、とりあえず、GITHUBの上記プロジェクトにあるサンプルスクリプト(scryptsフォルダ)とscrypt_proxyを組み合わせて使ってみることにしました。

通信経路は、こんな感じです。

FPGA --(USB接続)--> じぶんのPC (scrypt miner)  ----> STRATUM を通すための Proxy ----> Pool
   
プロキシーと採掘スクリプトの間は、ループバックアドレス(127.0.0.1)でも大丈夫です。

プロキシー

GIITHUBに stratum mining proxy というのがありましたので、使ってみました。
Windowsのバイナリもあります。バイナリ(mining_proxy.exe)の最新版は、GITHUBのREADMEにリンクがあります。

起動方法は、こんな感じです。ポート番号は、ファイアウォールとぶつからないように、適宜置き換えてください。くわしくは、 mining_proxy.exe --help 参照。

mining_proxy.exe -o mona.2chpool.com -p 5555 -oh 127.0.0.1 -gp 15555 -pa scrypt

採掘スクリプト


実行前に、サンプルファイルを参照して、config.tclを編集します。

Windowsの場合は、mine.bat で実行可能。バッチファイルがTCLを呼び出します。(TCLの環境は、quartus II にあるものが使用される。)

起動すると、こんなかんじで標準出力。

Looking for and preparing FPGAs...

Mining FPGA Found: USB-Blaster [USB-0] @1: EP3C120/EP4CE115 (0x020F70DD)


new target 000007ff diff 32
[03/18/2014 13:13:22] 1.44 kH/s (~0.00 kH/s) [Rej: 0/0 (0.00%)]
[03/18/2014 13:13:24] 1.44 kH/s (~0.00 kH/s) [Rej: 0/0 (0.00%)]
[03/18/2014 13:13:26] 1.44 kH/s (~0.00 kH/s) [Rej: 0/0 (0.00%)]

掘り当てると、こんな表示が。
[03/18/2014 13:18:56] 100ee940 accepted

うまく掘れていない場合は、Proxyのメッセージを読むと、ヒントがでているかもしれない。


ċ
50mhz_3miners.jic
(8192k)
Hijiri Umemoto,
2014/03/18 0:27
ċ
50mhz_3miners.map
(0k)
Hijiri Umemoto,
2014/03/18 0:27
ċ
ltcminer.sof
(3461k)
Hijiri Umemoto,
2014/03/17 20:26
ċ
output_file.jic
(8192k)
Hijiri Umemoto,
2014/03/17 20:25
ċ
output_file.map
(0k)
Hijiri Umemoto,
2014/03/18 0:26
Comments