コンポーネントに必要なフリップフロップの数を数えることで、リソースの使用量を見積もっています。たとえば、ins_controldata
(単純なカウンターといくつかの I/O) を見積もると、32 個のフリップフロップを使用します。このコンポーネントの詳細なマップ レポート (セクション 13 - 階層別の使用率) を見ると、見積もりがこのコンポーネントに使用されているスライス レジスタの数に近いことがわかります。各スライスには 4 つの LUT と 8 つのフリップフロップがあります。
ここで、有限状態マシン に対して同じことを行う inst_xtm640
と、フリップフロップの使用量は約 43 と推定されます (6 つの状態に必要な 3 つのフリップフロップを含む)。マップ レポートを見ると、私の推定はほぼ正しい (+-10% の誤差) ことがわかります。ただし、必要なスライス数は、必要なスライス レジスタと LUT よりもはるかに多くなります。使用されている LUT を見ると 40 ですが、20 程度しかないはずです。
このコンポーネントに余分なスライスが使用されるのはなぜですか? 速度の最適化のためですか?
+----------------------------------------------------------------------------------+
| Module | Partition | Slices* | Slice Reg | LUTs |
+----------------------------------------------------------------------------------+
| ++inst_controldata | | 6/6 | 35/35 | 20/20 |
| +++inst_xtm640 | | 40/40 | 57/57 | 88/88 |
+----------------------------------------------------------------------------------+
編集:自分で見つけたと思いますが、他の入力はいつでも歓迎します:
すべてのスライスが完全に使用されているわけではありません。したがって、88 個の LUT と 57 個のスライス レジスタを使用しても、22 個のスライスを使用することになるわけではありません。一部のスライスは十分に使用されていないため、スライスの使用率が高くなります。また、タイミング制約を満たすために追加のスライスが使用されます。