FPGA開発日記

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

Chiselでビットコインマイナーを設計してみる(3. Scala版とVerilog版の検証と速度比較)

f:id:msyksphinz:20180702001454p:plain

ChiselでSHA256の回路を設計するプロジェクト、Scalaでの検証用コードと、Chiselで書いたハードウェアを検証する。

Chiselで書いたハードウェアは、SHA256のアルゴリズムで64回分ループを回す部分を展開し、パイプライン化した。 これにより、1サイクル毎にSHA256を計算できるマイニング用の回路として使用できる。

f:id:msyksphinz:20190324214550p:plain
今回開発したSHA256回路の概要
f:id:msyksphinz:20190324212837p:plain
SHA256のパイプライン回路

SHA256回路の検証は、Scala側のコードとChiselのコードを突き合せる形で行う。 しかし、Scalaのテストはシーケンシャルに記述する方法しか紹介されておらず、うまく検証コードを記述することができない。

SHA256回路の検証コードは未完成だが、とりあえず最初の32回分のSHA256の計算を突き合せて、一致することが確認できた。

ChiselコードとVerilogコードの検証速度比較

Chiselの速度を確かめるために、Verilatorを用いてChiselから生成されたVerilogコードのシミュレーションと、Chiselの状態でVerilogを使用せずに、Scalaの環境だけを使用した検証での速度を比較した。

  • Scala環境 : Chiselのみ : Total time: 70[s]
  • Verilator環境、波形なし : Total time: 427[s]
  • Verilator環境、波形あり : Total time: 438[s]

Chiselのコードの方が速い。もっとも、ChiselからVerilogへの変換と、Verilatorのコンパイルに時間がかかっているように見えるが。。。