0から5までの数字を表す信号が必要だとします。明らかに、これを表すには3ビットのstd_logicが必要です(つまり、MAXVAL = 5の場合、bitwidth = { wcalc "floor(logtwo($MAXVAL))+1"
})。
私は私ができることを知っています:
SIGNAL myLogicVector : STD_LOGIC_VECTOR(2 downto 0) := 5;
これを使用して、3つのstd_logic'ビット'の配列を明示的に指定し、初期値を設定します。次に、REPORTを使用して長さ(この場合は3)を出力できます。
report("Bit width of myLogicVector is "& integer'image(myLogicVector'length));
ここまでは順調ですね。しかし、代わりに整数(数値)型を使用するとします。
SIGNAL myInteger : NATURAL range 0 to 5 := 5;
ここで、「コンパイラ」(「シンセサイザー」)は、この整数の範囲が0〜5であるため、3ビットのストレージ長が必要であると自動的に推測すると推測しています。その場合、私の質問は次のとおりです。 REPORTでこのビット幅/長さ/サイズをどうにかして印刷することは可能ですか?
秘訣は、もちろん、次のようなものです。
report("Bit width of myInteger is "& integer'image(myInteger'length));
...失敗します(たとえば、「HDLParsers:3389-属性の長さのプレフィックスは配列オブジェクトである必要があります」)。私が収集する限り、これらの属性はすべて配列(VHDL属性の理解)のよう'length
に、配列'range
にのみ適用できるためです。一方、整数(自然)は配列ではありません-それは数値です:)(VHDLベクトル整数変換の質問)
繰り返しになりますが、log2(符号なし変数の幅を最大値から計算しますか? )を利用できる可能性があることは承知していますが、必要なのは、(合成中に)「ビット」「シンセサイザー」の数をすばやく確認することです。最終的に合成されたデザインに割り当てられるため、最終的なFPGAリソースの観点から使用されるおおよその量(特に「ジェネリック」を使用して整数の特定の最大値を計算する場合)。
さて、よろしくお願いします。
編集:少しコンテキスト:私はISEWebpack9.2を使用しています。'generic'変数/定数をパラメーターとして使用し、方程式を使用してカウンターの最大値を計算しようとしています。この計算は、「コンパイル」時に行われると思います(「ImplementDesign」ではなく「Synthesize」になります)。したがって、ここでレポートメッセージを発生させます(実際、このように取得しました。 std_logic_vectorの場合、合成ログにありますが、動作シミュレーションの開始時にも同じレポートメッセージが表示されます。これは問題ありません)。
そして、これらのレポートメッセージの目的は、私の方程式が正しいことと、シンセサイザーが32ビットカウンターを推測しようとしないことの両方を確認することです-たとえ0から5までを数えたいとしても:)