Veryl registryAkiyukiOkayasu/gndless-fixedpoint-veryl · gndless_fixedpointSource ↗

Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

gndless_fixedpoint

Generic signed fixed-point arithmetic utilities for Veryl.

Version 0.2.2
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_17 Q1.17形式。27x18乗算器の係数用途
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乗算器の係数用途
Q4_23 Q4.23形式。±1.0信号を±8.0の範囲で扱うmodule境界の統一format用途
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

FormatConverterconvert関数を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を使う。 逆方向や小数ビットを減らす変換では、MODEOVERFLOWに従って丸め・飽和または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

FixedPointValueFORMAT::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::を使うとinterfaceとして入出力の型を保持できるため、異なるformatの誤接続を防ぐことができる。

明示的なフォーマット変換は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_17 Q1.17形式。27x18乗算器の係数用途
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乗算器の係数用途
Q4_23 Q4.23形式。±1.0信号を±8.0の範囲で扱うmodule境界の統一format用途
Q8_19 Q8.19形式。36x27乗算器の係数用途
Q8_24 Q8.24形式。波形オシレーターの出力などの用途
SignedFixedPointFormatOf::<W, F> WIDTHと小数ビット数によるsigned固定小数点formatの定義
Types 固定小数点演算で共有する丸め・overflow policy

Q1_17

Q1.17形式。27x18乗算器の係数用途

raw値xの実数値はx / 2^17であり、表現可能な範囲は-1.0以上+1.0未満である Q1_17::ONEは定義されない。+1.0は表現範囲外のため、必要時はQ1_17::MAXを利用

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である

Q4_23

Q4.23形式。±1.0信号を±8.0の範囲で扱うmodule境界の統一format用途

raw値xの実数値はx / 2^23であり、表現可能な範囲は-8.0以上+8.0未満である

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処理は出力幅を狭める処理時に適用される