ビットコインといえば一昨年くらいから急に盛り上がりだして、猫も杓子もビットコインという状態になりかけたけれども急にまた暴落して皆辞めてしまったという悲しい技術ではあるが、私も流行に乗ってビットコインについて勉強した手前、なにか自分で手を動かすアウトプットをしたいと思っている。
Vivado-HLSの高位合成の試行ではCPUを作ってみたけれども、いまいち納得できるデザインを作ることができなかったので、気分を変えてビットコイン・マイニングの回路をVivado-HLSで作ってみたらどうだろう、と思って調べてみたら既にやっている人がいた。
さっそくダウンロードして実行してみる。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で落ちているので見てみる必要があるかな。