エンティティに 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
ますか?他の定数の計算でのみ使用されるため、合成ツールは削除されますか?