gndless_nco
Unsigned modular phase and clock-enable NCO primitives for Veryl.
| Version | 0.1.0 |
|---|---|
| Repository | https://github.com/AkiyukiOkayasu/gndless-nco-veryl |
| License | MIT OR Apache-2.0 |
Modules
| ClockEnableNco | 固定クロック比のclock-enable NCO |
|---|---|
| FractionalPhaseAccumulator | ASRC用の分数位相アキュムレータ |
| NcoTick | 分数比から1クロック幅のtickを生成するNCO |
| Phasor | 位相発生器 |
Packages
| Phase | 位相発生器 (Phasor / Phase Accumulator) |
|---|
Modules
| ClockEnableNco | 固定クロック比のclock-enable NCO |
|---|---|
| FractionalPhaseAccumulator | ASRC用の分数位相アキュムレータ |
| NcoTick | 分数比から1クロック幅のtickを生成するNCO |
| Phasor | 位相発生器 |
ClockEnableNco
固定クロック比のclock-enable NCO
固定値はreset解除後に自動でNcoTickへ設定される
Parameters
| WIDTH | u32 | 位相・増分・modulusのビット幅 |
|---|---|---|
| CLOCK_FREQ | u32 | システムクロック周波数 [Hz] |
| TARGET_FREQ | u32 | 生成するtick周波数 [Hz] |
Ports
| clk | input | clock | システムクロック |
|---|---|---|---|
| rst | input | reset | リセット |
| enable | input | bbool | tick生成イネーブル |
| tick | output | logic | 周期完了パルス |
| configured | output | bbool | 固定比設定が有効 |
FractionalPhaseAccumulator
ASRC用の分数位相アキュムレータ
phaseはQ0.WIDTHの小数位相を表す。毎クロックphase_incrementを加算し、2^WIDTHを跨ぐときだけadvanceを1にする。advanceは実クロックを生成するためではなく、入力サンプル窓を1サンプル進めるための制御信号として使用
初期仕様ではphase_incrementを0以上1未満に限定する。したがって、1クロックで発生するwrapは最大1回である
advanceは現在のphase + phase_incrementが次の立ち上がりでwrapすることを組み合わせで予告する。wrapする立ち上がりの後、phaseには剰余が現れ、advanceは次回の加算がwrapしない限りLowへ戻る
Parameters
| WIDTH | u32 | 位相の小数部ビット幅 |
|---|
Ports
| clk | input | clock | システムクロック | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| rst | input | reset | リセット | ||||||||
| enable | input | bbool | 位相更新イネーブル | ||||||||
| phase_increment | input | logic| 1クロックあたりの位相増分
|
phase |
output |
logic | 現在の小数位相
|
advance |
output |
bbool |
次の加算でwrapすることを示すパルス
|
|
NcoTick
分数比から1クロック幅のtickを生成するNCO
phaseはDDSの位相ではなく、modulus未満の剰余を保持 そのため、tickの平均周波数はincrement / modulus * clkになる。
同じクロックで複数の制御がHighの場合、優先順位はupdate > restart > !enable > 通常の位相加算。updateとrestartはphaseを0へ戻してtickを抑止し、disable中もphaseを保持してtickだけをLow化
Parameters
| WIDTH | u32 | 位相・増分・modulusのビット幅 |
|---|
Ports
| clk | input | clock | システムクロック | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| rst | input | reset | リセット | ||||||||||||||||
| enable | input | bbool | tick生成イネーブル | ||||||||||||||||
| update | input | logic | incrementとmodulusの更新要求 | ||||||||||||||||
| restart | input | logic | 位相を0へ戻す要求 | ||||||||||||||||
| increment | input | logic| 1クロックあたりの位相増分
|
modulus |
input |
logic | tick周期の法
|
tick |
output |
logic |
周期完了パルス
|
configured |
output |
bbool |
有効な設定が適用済み
|
config_error |
output |
bbool |
modulusが不正であることを示すフラグ
|
|
Phasor
位相発生器 全ての波形オシレーターの基礎となるモジュール 負の周波数(位相の逆回転)にも対応
Ports
| clk | input | clock | システムクロック |
|---|---|---|---|
| phase_rst | input | bbool | 位相ゼロリセット (同期) |
| phase_step | input | Phase step_t | 1クロックあたりの位相ステップ量: step = (ターゲット周波数 * 2^48) / システムクロック周波数 |
| phase | output | Phase phase_t | 位相出力 (0 ~ 2^32-1) |
| eoc | output | logic | 1周期完了パルス (End Of Cycle): 位相がラップアラウンドしたサイクルで1クロックだけHigh |
Module Prototypes
Interfaces
Packages
| Phase | 位相発生器 (Phasor / Phase Accumulator) |
|---|
Phase
位相発生器 (Phasor / Phase Accumulator) 全ての波形オシレーターの基礎となるモジュール