FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Vivado-HLSを用いたビットコインマイニング回路 (1. サンプルプログラムの試行)

ビットコインといえば一昨年くらいから急に盛り上がりだして、猫も杓子もビットコインという状態になりかけたけれども急にまた暴落して皆辞めてしまったという悲しい技術ではあるが、私も流行に乗ってビットコインについて勉強した手前、なにか自分で手を動かすアウトプットをしたいと思っている。

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

Vivado-HLSの高位合成の試行ではCPUを作ってみたけれども、いまいち納得できるデザインを作ることができなかったので、気分を変えてビットコイン・マイニングの回路をVivado-HLSで作ってみたらどうだろう、と思って調べてみたら既にやっている人がいた。

github.com

さっそくダウンロードして実行してみる。Makefileは用意されていなかったので、適当にリンクを張ってVivado HLSを立ち上げた。

git clone https://github.com/stiggy87/ZynqBTC.git
cd ZynqBTC
vivado_hls script.tcl

これだと一発目で失敗するので、

cd zynqBTC/solution2
ln -s ../../directives.tcl
cd -

directives.tclをリンクするとうまくいった。

vivado_hls script.tcl

ちなみに、中身は非常にあっけない。単純にSHAのアルゴリズムが記述してあるだけだ。 Vivado-HLSはやはり便利だ。

   g = ctx_transform->state[6];
   h = ctx_transform->state[7];

   for (i = 0; i < 64; ++i) {
      t1 = h + EP1(e) + CH(e,f,g) + k[i] + m[i];
      t2 = EP0(a) + MAJ(a,b,c);
      h = g;
      g = f;
      f = e;
      e = d + t1;
      d = c;
      c = b;
      b = a;
      a = t1 + t2;
   }

   ctx_transform->state[0] += a;
   ctx_transform->state[1] += b;
   ctx_transform->state[2] += c;

合成結果をとりあえずVivado-HLSで見てみた。良く分からないけれども、とりあえずCosimulationで落ちているので見てみる必要があるかな。

f:id:msyksphinz:20190320011021p:plain