chiselで簡単な除算器を書きました

chiselの手始めに、何十年前かに書いた除算器を書こうとしました。 chisel-examplesにaluあるのに、除算器がなかったので、それならということです笑

まずは本当に単純で、小型なシフト、引き算除算器を書いてみました。 仕様は以下になります。

  • 入力データは16bit unsigned int
  • valid==1で入力(dividend, divisor)をラッチ。内部カウンタ(r_counter)を初期化(16)。
  • validデアサートして16サイクル後に除算結果を出力(quotient, remainder)。ready信号をアサート(パルス)
  • r_divisorをシフトして、r_dividendが引けそうなら引いて、r_quotientに追加。それを16サイクル繰り返し
  • ランダム検証: 入力をランダム値(divisorは1-(1<<16)))に降って2000回テスト。PASS確認

GitHub - moamoai/chisel_divider

結論として、chiselはなかなかにあっさりと論理記述でき、 ランダム検証もさくっと記載できました。 データ幅の記載やclk, resetの記述など少なくて楽に済むのていい感じです。 本当はランダム検証より、静的検証したい面がありますが、まだ非対応みたいですね。

次に、スループットの出るベクタ演算器向けのパイプライン除算器を書こうと思います。