chiselで適当に書いたRISCVをVivadoで合成したら、Timing割れしまくって困っている話

先日、RISCVを作ったので試しにFPGAで合成してみることにしました。 LUTが5000くらいでFFが1200くらいとなかなかに小型であることはわかりました。 問題はここからで、タイミングがまったくMetしていません。 125MHzで8ns周期なのに、WNSが-5.5nsと惜しくもないボロボロです。

f:id:thira2:20200309232754p:plain

パイプライン設計をしていないので、当たり前ではありますが、125MHzだと動いたりするんじゃと甘くみてました。 というわけで、クロックを2分周させて、RISCVを動かすか、パイプライン化するという二つの案があります。 それぞれ利点欠点があるんですが、基本的にクロックを増やすと地獄を見ることが増える印象です笑

ただ、Chisel/Vivadoでの設計力を上げるためには、地獄をみた方が良い気もします。 chiselでマルチマルチクロックにする方法も以下見つけてしまいました。 次回、適当なサンプルプログラム作って、試しに動かしてみようと思います。

Multiple Clock Domains · freechipsproject/chisel3 Wiki · GitHub