11/// TXビットシリアライザ
22///
33/// 256bitフレームをMSB-first(bit 255 → bit 0)でシリアル出力する。
4- /// ビットタイミングは`SAMPLE_RATE * 256`に基づく分数補間を使用 。
4+ /// ビットタイミングは`ADAT_FAMILY`に基づいて44.1kHz/48kHzの周期を選択 。
55/// 48kHzで約4.07 clk/bit, 44.1kHzで約4.46 clk/bit。
66///
77/// ## Usage
@@ -20,15 +20,24 @@ module tx_bit_serializer #(
2020 i_frame_data: input logic<256>,
2121 /// フレームロード要求
2222 i_load: input logic,
23- /// サンプルレート (44.1kHz / 48kHz )
24- i_sample_rate : input logic<32 >,
23+ /// ADATビットレートファミリー (0=F44K1, 1=F48K )
24+ i_family : input logic<1 >,
2525 /// シリアルビット出力
2626 o_bit: output logic,
2727 /// ビット出力有効ストローブ
2828 o_bit_valid: output logic,
2929 /// フレーム送信完了パルス
3030 o_frame_done: output logic,
3131) {
32+ /// ADATビットレートファミリー (ドキュメンテーション用)
33+ ///
34+ /// 物理ビットレートは2種類のみ:
35+ /// - 0 (F44K1): 44.1kHz × 256 = 11,289,600 bps
36+ /// - 1 (F48K): 48kHz × 256 = 12,288,000 bps
37+ enum AdatFamily: logic {
38+ F44K1 = 1'b0,
39+ F48K = 1'b1,
40+ }
3241 // ビットレート
3342 var bit_rate: logic<40>;
3443 // クロック周波数(演算用拡張幅)
@@ -56,15 +65,14 @@ module tx_bit_serializer #(
5665 assign o_bit_valid = r_bit_valid;
5766 assign o_frame_done = r_frame_done;
5867
59- // サンプルレートに応じたビットレート選択
60- // 物理ビットレートはS/MUX時でも変わらない :
61- // - 44.1kHz系 (44.1k, 88.2k, 176.4k ): 11,289,600 bps
62- // - 48kHz系 (48k, 96k, 192k ): 12,288,000 bps
68+ // ADATファミリーに応じたビットレート選択
69+ // 物理ビットレートは2種類のみ :
70+ // - F44K1 (0 ): 11,289,600 bps
71+ // - F48K (1 ): 12,288,000 bps
6372 always_comb {
64- if i_sample_rate == 32'd44_100 || i_sample_rate == 32'd88_200 || i_sample_rate == 32'd176_400 {
73+ if i_family == 1'b0 {
6574 bit_rate = 40'd11_289_600;
6675 } else {
67- // 48kHz系 (48k, 96k, 192k) およびデフォルト
6876 bit_rate = 40'd12_288_000;
6977 }
7078 clk_freq = CLK_FREQ;
0 commit comments