RTL 自体に整数を使用することには何の問題もありませんが、それを避ける理由がいくつかあります。これは、主観的な「ベストプラクティス」についての質問であり、最終的には自分の好みを見つける必要があります。その助けとして、これに関する私の経験と考えを共有します。
主に、合成のために書くときも(制約付き)整数を使用することに賛成です。私は時々それを行うが、実際には、通常、私はに固執signed
してunsigned
。理由を詳しく説明します。
とにかく、デザインの一部でベクトル化されたデータ型を使用する必要があります。
ベンダーIPまたはサードパーティIPがinteger
ポートのタイプを使用することはほとんどありません
例えば、BlockRamを介してデータを送信する場合、たとえそれを推論し、したがってIP /マクロ/プリミティブにインターフェースする必要がないとしても、とにかくベクトル化された型に変換する必要があります。
上記のどちらにも当てはまらない場合でも、主にある時点で他の何か(他に何もない場合はトップレベルのポート)に接続する必要があります。
integer
完全な設計には使用できないため、次の理由ですべて一緒にスキップすることをお勧めします。
使用の欠点integer
:
ベクトル化された型とは異なり、整数には'U'
and はありません'X'
。これらはシミュレーションに非常に役立ちます。初期化されていない信号がデザインをどのように伝搬するかがわかります。リセット後に多くの初期化されていない信号が表示された場合は、おそらく反応します。整数を使用する場合、これは当てはまりません。
整数を使用すると、加算または減算してアンダーフロー/オーバーフローが発生するときに、シミュレーション/合成の不一致のリスクが大きくなります。(他の誰かがすでに指摘したように。)
私がinteger
本当に良い選択肢だと思う典型的なケース:
chipScope / signalTapなどを通じて監視するデバッグ信号/カウンター用
独自のコードに出入りすることのない、完全に内部的なカウンターの表現。はい、そこにあなたがFIFOを書いている場合例えば、このようなケースであり、あなたは、推測航法書き込みされている/信号を形成するために読み込みfull
、empty
、almostFull
など(ポインタの算術演算ただし、この場合、推測航法よりも良い方法です。 ..)
私自身の結論:私は時々整数を使用しますが、控えめに、そしてほとんど上記の場合に使用します。私が使用して多くのオーバーヘッドが表示されていないunsigned
と、signed
代わりに整数のため、通常はそれらに固執します。