Veryl registryAkiyukiOkayasu/gndless-sample-rate-conversion-veryl · gndless_sample_rate_conversionSource ↗

Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

gndless_sample_rate_conversion

Synchronous and asynchronous sample-rate converters for Veryl.

Version 0.3.0
Repository https://github.com/AkiyukiOkayasu/gndless-sample-rate-conversion-veryl
License MIT OR Apache-2.0

Modules

ContinuousLinearAsrc::<FORMAT> format付きvalue interfaceを使う連続線形ASRC
CubicLagrangeAsrc::<FORMAT> format付きvalue interfaceを使うCubic Lagrange ASRC
FourXHalfbandAsrc::<FORMAT> 2段のhalfband補間と連続線形ASRCを接続した1ch 4倍オーバーサンプラ
LinearAsrc::<FORMAT> format付きvalue interfaceを使う分数比線形ASRC
PhaseIncrementEstimator サンプル到着周期からASRC用の位相増分を生成する推定器
SampleRateTracker 入力サンプルの到着周期測定と低域通過周期推定値の出力
TwoXHalfbandAsrc::<FORMAT> 1段のhalfband補間と連続線形ASRCを接続した1ch 2倍オーバーサンプラ。

Modules


ContinuousLinearAsrc::<FORMAT> format付きvalue interfaceを使う連続線形ASRC
CubicLagrangeAsrc::<FORMAT> format付きvalue interfaceを使うCubic Lagrange ASRC
FourXHalfbandAsrc::<FORMAT> 2段のhalfband補間と連続線形ASRCを接続した1ch 4倍オーバーサンプラ
LinearAsrc::<FORMAT> format付きvalue interfaceを使う分数比線形ASRC
PhaseIncrementEstimator サンプル到着周期からASRC用の位相増分を生成する推定器
SampleRateTracker 入力サンプルの到着周期測定と低域通過周期推定値の出力
TwoXHalfbandAsrc::<FORMAT> 1段のhalfband補間と連続線形ASRCを接続した1ch 2倍オーバーサンプラ。

ContinuousLinearAsrc::<FORMAT>

format付きvalue interfaceを使う連続線形ASRC

Generic Parameters


FORMAT gndless_fixedpoint SignedFixedPointFormat

Parameters


PHASE_WIDTH u32 位相入力のbit幅
INPUT_DEPTH u32 入力FIFOの深さ
STARTUP_LEVEL u32 出力開始に必要な未消費FIFO word数

Ports


clk input clock
rst input reset
input_valid input bbool
input_ready output bbool
input_sample modport gndless_fixedpoint FixedPointValue input_port
input_level output logic<$clog2(INPUT_DEPTH+1)>
phase input logic
advance input bbool
output_active output bbool
output_sample modport gndless_fixedpoint FixedPointValue output_port
underflow output bbool

CubicLagrangeAsrc::<FORMAT>

format付きvalue interfaceを使うCubic Lagrange ASRC

Generic Parameters


FORMAT gndless_fixedpoint SignedFixedPointFormat

Parameters


PHASE_WIDTH u32 `ratio`の小数部bit幅
INPUT_DEPTH u32 入力FIFOの深さ

Ports


clk input clock
rst input reset
input_valid input logic
input_ready output logic
input_sample modport gndless_fixedpoint FixedPointValue input_port
output_tick input logic
output_ready output logic
output_valid output logic
output_sample modport gndless_fixedpoint FixedPointValue output_port
ratio input logic

FourXHalfbandAsrc::<FORMAT>

2段のhalfband補間と連続線形ASRCを接続した1ch 4倍オーバーサンプラ

入力1サンプルから論理的に4サンプルを生成し、後段のSTD FIFOへburstで受け渡す。FIFOの読み出しと50MHz出力の位相進行はContinuousLinearAsrcが担当するため、HBF自身は入力受理と2サンプルburstのready/validだけを扱う。

input → Halfband 2x (stage 1) → Halfband 2x (stage 2)
      → 4-sample burst → FIFO → continuous linear ASRC → output

HBFのburstでFIFOをSTARTUP_LEVELまで満たしてからoutput_activeになる。 以後は毎クロック補間値を出し、advance時だけFIFOから次の窓を補充する。

Generic Parameters


FORMAT gndless_fixedpoint SignedFixedPointFormat

Parameters


PHASE_WIDTH u32 位相入力のビット幅
INPUT_DEPTH u32 出力側入力FIFOの深さ

Ports


clk input clock システムクロック
rst input reset リセット
input_valid input bbool 入力サンプル有効
input_ready output bbool 入力受理可能
input_sample modport gndless_fixedpoint FixedPointValue input_port 入力sample
phase_increment input logic 毎クロックの位相増分
output_active output bbool 連続出力が有効
output_sample modport gndless_fixedpoint FixedPointValue output_port 補間後の出力sample
input_level output logic<$clog2(INPUT_DEPTH+1)> 入力FIFOのワード数
underflow output bbool 入力不足のstickyフラグ

LinearAsrc::<FORMAT>

format付きvalue interfaceを使う分数比線形ASRC

Generic Parameters


FORMAT gndless_fixedpoint SignedFixedPointFormat

Parameters


PHASE_WIDTH u32 `ratio`の小数部bit幅
INPUT_DEPTH u32 入力FIFOの深さ

Ports


clk input clock
rst input reset
input_valid input logic
input_ready output logic
input_sample modport gndless_fixedpoint FixedPointValue input_port
output_tick input logic
output_ready output logic
output_valid output logic
output_sample modport gndless_fixedpoint FixedPointValue output_port
ratio input logic

PhaseIncrementEstimator

サンプル到着周期からASRC用の位相増分を生成する推定器

SampleRateTrackerで平滑化した入力サンプル周期から、システムクロックあたりの入力位相進行量を求める。 phase_incrementはQ0.PHASE_WIDTHで、値が1.0未満となるサンプルレート比で使用する。 RATE_MULTIPLIER_SHIFTを2にすると、4倍オーバーサンプリング経路用の位相増分を生成できる。 除算は逐次演算で行い、入力サンプル周期より短いDIVIDEND_WIDTHクロックで完了する必要がある。 除算中に新しい周期を観測した場合は最新の周期を保持し、現在の除算完了後に再計算する。 TIMEOUT_PERIODを有効にすると、入力停止時は古い位相増分を無効化して新しい到着列を再測定する。

Parameters


PERIOD_WIDTH u32 サンプル周期の整数部ビット幅
PERIOD_FRACTION u32 平滑化周期の小数部ビット幅
PHASE_WIDTH u32 位相増分の小数部ビット幅
FILTER_SHIFT u32 周期平滑化IIRの右シフト量
LOCK_COUNT u32 位相増分の計算を始める測定回数
RATE_MULTIPLIER_SHIFT u32 位相増分に掛ける2のべき乗倍率のシフト量
STEP_THRESHOLD_SHIFT u32 即時追従する周期差の比率を表す右シフト量、0で無効
TIMEOUT_PERIOD u32 入力停止とみなすクロック数、0で無効

Ports


clk input clock システムクロック
rst input reset 同期リセット
sample_valid input bbool 入力サンプル到着パルス
phase_increment output logic ASRC用Q0位相増分
locked output bbool 位相増分が有効
range_error output bbool 位相増分が1.0以上となる設定または入力を検出

SampleRateTracker

入力サンプルの到着周期測定と低域通過周期推定値の出力

このモジュールはASRC全体ではない。sample_validの時刻列から、生の周期と平滑化した周期を作るだけに責務を限定する。 位相累積、補間、FIFOレベル制御は後段のモジュールで行う。

FILTER_SHIFTが大きいほど追従は遅くなるが、valid時刻の量子化やサンプル間ジッターを位相増分へ伝えにくくなる。 STEP_THRESHOLD_SHIFTを有効にすると、平滑化周期との差がその2のべき乗分の1以上となった周期変更は即時に取り込む。 TIMEOUT_PERIODを有効にすると、入力停止時にlockを解除して次の入力から測定をやり直す。 filtered_periodはPERIOD_WIDTH.FRACTION_WIDTHの固定小数点値である。

最初のsample_validは基準時刻を記録するだけで、次の到着からmeasured_periodを更新してperiod_validを1クロックだけHighにする。 有効な測定がLOCK_COUNT回に達するとlockedを保持する。

Parameters


PERIOD_WIDTH u32 整数周期のビット幅
FRACTION_WIDTH u32 平滑化周期の小数部ビット幅
FILTER_SHIFT u32 周期平滑化の右シフト量
LOCK_COUNT u32 lock判定に必要な有効測定回数
STEP_THRESHOLD_SHIFT u32 即時追従する周期差の比率を表す右シフト量、0で無効
TIMEOUT_PERIOD u32 入力停止とみなすクロック数、0で無効

Ports


clk input clock システムクロック
rst input reset リセット
sample_valid input bbool 入力サンプル到着パルス
measured_period output logic 測定した整数周期
period_valid output bbool 周期更新パルス
filtered_period output logic 平滑化した固定小数点周期
locked output bbool lock状態
timed_out output bbool 入力停止によるlock解除パルス

TwoXHalfbandAsrc::<FORMAT>

1段のhalfband補間と連続線形ASRCを接続した1ch 2倍オーバーサンプラ。

phase_incrementは入力サンプルレートを基準にしたQ0.PHASE_WIDTH値で受け取る。 halfbandで入力を2倍へ補間してからFIFOへ格納するため、内部のNCOには位相増分を 2倍して渡す。呼び出し側の推定器は48/44.1kHzなど元のADATレートの増分をそのまま 接続できる。

input → Halfband 2x (COEFFICIENT_SET=1)
      → 2-sample burst → FIFO → continuous linear ASRC → output

HBFはナイキスト付近のスペクトルイメージ成分を抑えるため、短いset2ではなくset1を使う。 STARTUP_LEVELまでFIFOを満たしてから出力を開始し、入力欠落はunderflowへ stickyに記録する。

Generic Parameters


FORMAT gndless_fixedpoint SignedFixedPointFormat

Parameters


PHASE_WIDTH u32 入力レート基準の位相増分幅
INPUT_DEPTH u32 線形ASRC FIFOの深さ

Ports


clk input clock システムクロック
rst input reset リセット
input_valid input bbool 入力サンプル有効
input_ready output bbool 入力受理可能
input_sample modport gndless_fixedpoint FixedPointValue input_port 入力sample
phase_increment input logic 入力レート基準のQ0位相増分
output_active output bbool 連続出力が有効
output_sample modport gndless_fixedpoint FixedPointValue output_port 補間後の出力sample
input_level output logic<$clog2(INPUT_DEPTH+1)> ASRC FIFOのワード数
underflow output bbool 入力不足のstickyフラグ

Module Prototypes


Interfaces


Packages