Chiselでシリアル送信器のテストしていたら、OutOfMemoryError: Java heap spaceが発生した話

先日、chiselでシリアル受信器を作成したので、次に送信器を作ってみました。 以下のようなループバックになるようにしてみました。

  • シリアル受信器で受診したデータを送信器に送る。
  • 送信器はPCに送り返す。

chiselのテストは送受信で行うので、時間としては数msかかります。 1分ほど待っていると、なんと以下エラーが発生しました。

java.lang.OutOfMemoryError: Java heap space
        at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:146)
        at treadle.vcd.VCD$$anonfun$serializeChanges$1$$anonfun$apply$mcVJ$sp$1$$anonfun$apply$1.apply(VCD.scala:657)

どういうことか、調べてみると以下がわかりました。 sbtは安全設計になっていることに関心しました。 (どこぞかの言語だと平然と何十GBでも食ってしまいそうです笑)

というわけで、無事に回避することができ、 以下などの基本的なバグを抽出し、Chisel上で動作確認できました。

  • 信号名が間違っている
  • クリア信号が先にアサートされるため、期待する値にならないで、タイムアウト