Veryl registryAkiyukiOkayasu/gndless-adat-veryl · gndless_adatSource ↗

Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

AdatRx

ADATレシーバ トップモジュール

ADAT光入力から8チャンネル24ビットPCMをデコードする。 クロックはADAT信号から自動復元される(外部PLLは不要)。

実機確認状況

システムクロック50MHzの構成で実機動作を確認済み。 50MHz以外のシステムクロックでは実機確認していない。

対応サンプルレート

  • 48kHz: 8チャンネル
  • 96kHz: 4チャンネル (S/MUX2)

S/MUX4はADATストリームからS/MUX2と判別できないため対応しない。 S/MUX4機器は接続しないこと。

S/MUX時のチャンネルマッピング(別moduleまたは利用側で実装)

本モジュールは channels[0..7] を物理スロットとして出力し、S/MUXの論理チャンネル再構成は行わない。 S/MUX2受信では、出力を Smux2Unpackerへ接続して4chの高速sample列へ戻す。 Smux2Packerは送信側で4ch sample列を8物理スロットへ並べるmoduleであり、受信後の再構成には使用しない。

  • S/MUX2 (96kHz / 88.2kHz, 4ch)
    • Logical CH0 <= channels[0] + channels[1]
    • Logical CH1 <= channels[2] + channels[3]
    • Logical CH2 <= channels[4] + channels[5]
    • Logical CH3 <= channels[6] + channels[7] 時間順は、各Logical CH内では添字の小さいスロットが先のサンプル。

ADAT論理フレーム概要

以下はNRZI復号後の論理ビット列であり、物理入力 adat の電気的波形ではない。 伝送位置0が内部ベクタ frame[255]、伝送位置255が frame[0] に対応する。

伝送順 →
+-----------+----------+-------------+-----+-------------+
| SYNC      | User     | CH0         | ... | CH7         |
| 10bit+sep | 4bit+sep | 6*(4bit+sep)|     | 6*(4bit+sep)|
+-----------+----------+-------------+-----+-------------+
    11bit       5bit        30bit             30bit

User bitはU3からU0、各channelの24bit PCMはD23からD0のMSB-firstで伝送される。 4bitごとにseparator=1が続き、NRZI信号に同期用の遷移を作る。 channels[0..7] は物理スロットであり、S/MUXの論理channel再構成はSmux2Unpackerなどの別moduleまたは利用側の回路で行う。

伝送位置と内部ベクタ添字を含む詳細図はpackage READMEを参照。

公開出力の概念タイミング

次図は縮尺なし。省略区間には複数フレームを含み得る。 channels のatomic commitごとに frame_valid がシステムクロック1周期だけHighになる。 frame_validはraw commit pulseであり、下流はframe_valid && lockedを受理条件にする。 locked は完全フレーム周期が安定した後にHighになる。 frame_clk はADATフレーム周期を示し、S/MUX時の論理sample rateではない。

Examples

inst adat: AdatRx (
    clk        : sys_clk_50mhz,
    rst        : reset,
    adat       : toslink_in,
    channels   : audio,
    frame_clk  : frame_clk,
    smux_active: smux_active,
    frame_valid: frame_valid,
    locked     : locked,
);

タイミング

  • 推奨クロック: 50MHz
  • ADAT入力: TOSLINK光→電気変換済み信号

Ports


clk input clock システムクロック (50MHz推奨)
rst input reset リセット
adat input logic ADAT入力 (光→電気変換済み)
frame_clk output logic システムクロック (50MHz推奨) リセット ADAT入力 (光→電気変換済み) ADATフレーム周期のクロック出力(sample rateではない)。 通常は44.1/48kHz。 warning: S/MUX有効時でも44.1kHz/48kHzが出力されることに注意。
smux_active output bbool UserBit2に基づくS/MUX2状態 (1: enabled, 0: disabled)。 S/MUX4とは判別できないため、S/MUX4機器は接続しないこと。
channels output logic<24> [8] 8チャンネルPCMデータ出力(ADAT物理スロット)。 注意: S/MUX有効時の論理チャンネル再構成は利用側の実装が必要
frame_valid output logic 完全フレームcommitパルス
locked output bbool 同期ロック状態