FormatConverter::<IN_FORMAT, OUT_FORMAT>
異なるfixed-point formatのvalue interfaceを明示的に接続する組み合わせconverter
FormatConverterはconvert関数をFixedPointValue interfaceの接続へ載せるための薄いmoduleである。
実装は組み合わせ回路であり、次の代入と等価である。
output_sample.raw = convert::<IN_FORMAT, OUT_FORMAT, MODE, OVERFLOW>(input_sample.raw);
Usage
FixedPointValue::<IN_FORMAT>からFixedPointValue::<OUT_FORMAT>へ接続したいmodule境界ではFormatConverterを使う。
逆方向や小数ビットを減らす変換では、MODEとOVERFLOWに従って丸め・飽和またはwrapを行う。
interfaceを使わない内部演算や一時変数では、convertを直接呼ぶ方が簡潔である。
Timing
FormatConverterはregisterを挿入しないため、変換処理はそのまま組み合わせtiming pathになる。重い丸めや飽和を高いFmaxの経路に置く場合は、利用側でpipeline registerを挟むんでconvert()やシフト演算を行う方がよい。
Examples
module ExampleTop {
import gndless_fixedpoint::{FixedPointValue, FormatConverter, Q1_23, Q2_23};
inst source_sample : FixedPointValue::<Q1_23>;
inst internal_sample: FixedPointValue::<Q2_23>;
inst input_converter: FormatConverter::<Q1_23, Q2_23> (
source_sample ,
internal_sample,
);
}
Generic Parameters
| IN_FORMAT | SignedFixedPointFormat |
|---|---|
| OUT_FORMAT | SignedFixedPointFormat |
Parameters
| MODE | Types RoundingMode | |
|---|---|---|
| OVERFLOW | Types OverflowMode |
Ports
| input_sample | modport | FixedPointValue input_port | 入力formatのsample |
|---|---|---|---|
| output_sample | modport | FixedPointValue output_port | 出力formatのsample |