AdatRx
ADATレシーバ トップモジュール
ADAT光入力から8チャンネル24ビットPCMをデコードする。 クロックはADAT信号から自動復元される(外部PLLは不要)。
実機確認状況
システムクロック50MHzの構成で実機動作を確認済み。 50MHz以外のシステムクロックでは実機確認していない。
対応サンプルレート
- 48kHz: 8チャンネル
- 96kHz: 4チャンネル (S/MUX2)
S/MUXの検出とS/MUX4の扱い
S/MUX2 (88.2/96kHz) はUserBit2 (送信順で2番目のuser bit) によってのみ検出できる。 S/MUX4 (176.4/192kHz) はuser bitフラグを持たない (全user bitが0、RME ADI-8 DS マニュアル “No S/MUX4 Flag” 参照)。ADATストリームのタイミングからも判別できないため、 S/MUX4の受信にはユーザー側のクロック/レート設定が必要であり、本モジュール単体では S/MUX4をS/MUX2として誤検出・誤デコードする可能性がある。S/MUX4機器を接続する場合は 利用側でモードを明示制御すること。
S/MUX時のチャンネルマッピング(別moduleまたは利用側で実装)
本モジュールは channels[0..7] を物理スロットとして出力し、S/MUXの論理チャンネル再構成は行わない。
channelsはgndless_fixedpoint::FixedPointValue::<gndless_fixedpoint::Q1_23>境界で、raw値はchannels[i].rawから得る。
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内では添字の小さいスロットが先のサンプル。
- Logical CH0 <=
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 audio: gndless_fixedpoint::FixedPointValue::<gndless_fixedpoint::Q1_23> [8];
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 (送信順で2番目のuser bit) に基づくS/MUX2状態 (1: enabled, 0: disabled)。 S/MUX2 (88.2/96kHz) のときだけ1になる。S/MUX4 (176.4/192kHz) はuser bitが全0のため このフラグでは検出できず、ユーザー側のクロック/レート設定が必要 (RME ADI-8 DS マニュアル "No S/MUX4 Flag" 参照)。 |
| channels | modport | gndless_fixedpoint __FixedPointValue__gndless_fixedpoint_Q1_23 output_port [8] | 8チャンネルPCMデータ出力(ADAT物理スロット)。 注意: S/MUX有効時の論理チャンネル再構成は利用側の実装が必要 |
| frame_valid | output | logic | 完全フレームcommitパルス |
| locked | output | bbool | 同期ロック状態 |