1

エンティティに 2 つのジェネリックがあります。

clk_freq, io_delay: integer

これから、必要なサイクル数をio_delayミリ秒単位で計算したいと思います。また、このカウンター値を符号なし変数に格納したいので、整数型で大量のリソースを浪費することはありません。そのため、これを行うために次のことを実装しました。

constant COUNT_MAX_I: integer := integer(ceil(real(io_delay) * 0.001 * real(clk_freq)));
constant COUNTER_WIDTH: integer := integer(ceil(log2(real(COUNT_MAX_I))));
constant COUNT_HIGH: integer := unsigned(COUNTER_WIDTH - 1 downto 0) := to_unsigned(COUNT_MAX_I, COUNTER_WIDTH);

しかし、それを見るだけでは非常に非効率に見えます。だから私の質問はこれです:

これを行うためのより効率的な方法はありCOUNT_MAX_Iますか?他の定数の計算でのみ使用されるため、合成ツールは削除されますか?

4

1 に答える 1

2

一般的に言えばconstant、宣言自体が合成ロジックに直接つながることはありません。そのため、記述されたコードに非効率なものは何もありません。

于 2020-05-01T18:16:34.727 に答える