gndless_fixedpoint
Generic signed fixed-point arithmetic utilities for Veryl.
| Version | 0.2.0 |
|---|---|
| Repository | https://github.com/AkiyukiOkayasu/gndless-fixedpoint-veryl |
| License | MIT OR Apache-2.0 |
Modules
| FormatConverter::<IN_FORMAT, OUT_FORMAT> | 異なるfixed-point formatのvalue interfaceを明示的に接続する組み合わせconverter |
|---|
Interfaces
| FixedPointValue::<FORMAT> | 固定小数点数フォーマットの接続を型として表現するinterface |
|---|
Packages
| Q1_23 | Q1.23形式。24bit PCMオーディオのサンプル値などの用途。 |
|---|---|
| Q1_31 | Q1.31形式 (-1.0以上、+1.0未満)。デルタシグマ変調器などの用途 |
| Q2_16 | Q2.16形式。27x18乗算器の係数用途 |
| Q2_23 | Q2.23形式。24bit PCMを1bit符号拡張して精度を保ったままヘッドルームを追加したもの |
| Q3_24 | Q3.24形式。36x27乗算器の係数用途 |
| Q8_19 | Q8.19形式。36x27乗算器の係数用途 |
| Q8_24 | Q8.24形式。波形オシレーターの出力などの用途 |
| SignedFixedPointFormatOf::<W, F> | WIDTHと小数ビット数によるsigned固定小数点formatの定義 |
| Types | 固定小数点演算で共有する丸め・overflow policy |
Modules
| FormatConverter::<IN_FORMAT, OUT_FORMAT> | 異なるfixed-point formatのvalue interfaceを明示的に接続する組み合わせconverter |
|---|
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 |
Module Prototypes
Interfaces
| FixedPointValue::<FORMAT> | 固定小数点数フォーマットの接続を型として表現するinterface |
|---|
FixedPointValue::<FORMAT>
固定小数点数フォーマットの接続を型として表現するinterface
FixedPointValueはFORMAT::Rawを1本だけ持つ薄いinterfaceである。
Format::Rawとの違い
算術演算や値の表現能力はFormat::Rawなどと同じ。
たとえばQ8_24::Rawはsigned logic<32>のaliasであり、Q1_31::Rawもsigned logic<32>のaliasであるため、ビット幅が同じである。したがって、Q8_24::Rawの出力をQ1_31::Rawの入力へ直接接続することは、コンパイルエラーにならない。
FixedPointValue::
明示的なフォーマット変換はFormatConverterを使う。
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 processed_sample: FixedPointValue::<Q2_23>;
inst source: SampleSource::<Q1_23> (
output_sample: source_sample,
);
// Q1_23からQ2_23へのフォーマット変換
inst input_converter: FormatConverter::<Q1_23, Q2_23> (
source_sample ,
internal_sample,
);
inst processor: SampleProcessor::<Q2_23> (
input_sample : internal_sample ,
output_sample: processed_sample,
);
inst sink: SampleSink::<Q2_23> (
input_sample: processed_sample,
);
}
Packages
| Q1_23 | Q1.23形式。24bit PCMオーディオのサンプル値などの用途。 |
|---|---|
| Q1_31 | Q1.31形式 (-1.0以上、+1.0未満)。デルタシグマ変調器などの用途 |
| Q2_16 | Q2.16形式。27x18乗算器の係数用途 |
| Q2_23 | Q2.23形式。24bit PCMを1bit符号拡張して精度を保ったままヘッドルームを追加したもの |
| Q3_24 | Q3.24形式。36x27乗算器の係数用途 |
| Q8_19 | Q8.19形式。36x27乗算器の係数用途 |
| Q8_24 | Q8.24形式。波形オシレーターの出力などの用途 |
| SignedFixedPointFormatOf::<W, F> | WIDTHと小数ビット数によるsigned固定小数点formatの定義 |
| Types | 固定小数点演算で共有する丸め・overflow policy |
Q1_23
Q1.23形式。24bit PCMオーディオのサンプル値などの用途。
raw値xの実数値はx / 2^23であり、表現可能な範囲は-1.0以上+1.0未満である
Q1_23::ONEは定義されない。+1.0は表現範囲外のため、必要時はQ1_23::MAXを利用
Q1_31
Q1.31形式 (-1.0以上、+1.0未満)。デルタシグマ変調器などの用途
Q1_31::ONEは定義されない。+1.0は表現範囲外のため、必要時はQ1_31::MAXを利用
Q2_16
Q2.16形式。27x18乗算器の係数用途
raw値xの実数値はx / 2^16である
Q2_23
Q2.23形式。24bit PCMを1bit符号拡張して精度を保ったままヘッドルームを追加したもの
raw値xの実数値はx / 2^23であり、表現可能な範囲は-2.0以上+2.0未満である
Q3_24
Q3.24形式。36x27乗算器の係数用途
raw値xの実数値はx / 2^24である
Q8_19
Q8.19形式。36x27乗算器の係数用途
raw値xの実数値はx / 2^19である
Q8_24
Q8.24形式。波形オシレーターの出力などの用途
raw値xの実数値はx / 2^24である
SignedFixedPointFormatOf::<W, F>
WIDTHと小数ビット数によるsigned固定小数点formatの定義
固定のQ形式presetを増やす代わりに、任意の幅と小数ビット数をformatとして直接使用できる
Type Parameters
W:WIDTHとして使う総ビット幅F:FRACTION_BITSとして使う小数ビット数
Examples
var input: SignedFixedPointFormatOf::<16, 8>::Raw;
input = 16'sd384; // 1.5
Types
固定小数点演算で共有する丸め・overflow policy
policyは関数のgeneric parameterとして指定するため、ハードウェア上の実行時selectorは生成されない。丸めは小数ビットを削減する右シフト時に、overflow処理は出力幅を狭める処理時に適用される