Spartan-7のLUT使用率が100%近くなるとどうなる?
XILINX FPGAのLUT使用率がどこまでいけるかを試してみました。50%くらいでダメになるという噂や、80%くらいで配線が引けなくなるという噂があるので、どこまで本当かを検証してみました。
といってもLUTを埋め尽くすようなロジックを書くのは大変なので、MicroBlazeの標準的なデザインを使って、MicroBlazeの機能をポチポチと設定することで、最大のLUTを目指しました。
ツールはVivado 2019.2、FPGAはXC7S50CSGA324-1です。
回路はこんな感じです。
MicroBlazeはMaximum Performanceに設定するとLUTの使用率が高くなります。そして、CacheのLineLengthを8→16にすると効率よくLUTを消費できます。その他、細かいオプションをON/OFFすることで、限界ギリギリのLUT使用率が達成できました。このSpartan-7には32600個のLUTがあるのですが、ちょっと油断すると32630とかになるので、影響の少なそうなチェックボックスをポチポチやって試行錯誤します。もちろん微調整すれば100%に限りなく近づけることもできますが、時間がかかるのでこのあたりで妥協します。
設定は以下のとおりです。
さて、論理合成をかけてみました。
結果は、LUT使用率97%です。
最も遅い-1グレードなのでタイミングエラーは出ていますが、place & routeにかかる経過時間を見ても11分で終わっており、LUT使用率が97%とMAXであるのにそれほど長時間かかるわけではありませんでした。
使用率を図で見てみましょう。
はいっ!ほぼ100%埋まっていますね。
拡大すると、
やっぱり、みっちりと詰まっています。
結論を言うと、
- XILINXのSpartan-7はLUTの使用率が100%近くになっても、配線が引けなくなることはなかった
- LUT使用率が100%近くになっても、配線が終わらないということはなかった
手を動かして実験してみるのは大事です。さもないと、思い込みから抜けられなくなります。
「逆に、LUT 50%くらい配線が引けなくなるデザインって、どんななの?」って感じです。
めっちゃ遠いところの入力を使う巨大なテーブルを作りまくればできるのでしょうか?
<おまけ>
MicroBlazeだからLUT使用率100%近くでも配線が引けるようなチートがあるのではないか?と疑う人がいるかもしれません。
XILINXのホワイトペーパー wp496に、UltraScale+とArria10で比較した実験の結果が出ています。
まぁ、XILINX側の資料なのでXILINXが優勢と書いてあるのは当然なのですが、OpenCoresの中から重そうなコアをいくつか持ってきて、UltraScaleとArria10で勝負したというものですから、MicroBlazeを使ってLUT100%を狙うよりフェアですね。
内容を詳しくは読んでいませんが、この表を見ると複雑な演算回路で80%以上のLUT使用率でも問題なく使えそうですね。
XILINXのAnswer 66134によればこういう問題のことを「密集」というそうです。
https://japan.xilinx.com/support/answers/66314.html
密集をほぐすオプションの設定方法がいろいろと書かれています。
| 固定リンク
コメント