SH-2A 基板に AC97 コーデックをつなぐ (2)

AC97 コントローラと、AC97 コーデックとの間のディジタル・インターフェースは、「AC-link」と呼ばれる 5 本の信号を使いますが、リセット信号を除外すれば 4 本となり、また、SDATA_OUT/SDATA_IN は入出力を同時に行うためのものなので、片方向に限れば 3 本の信号線でインターフェースすることになります。
これは、通常の 2 ch ステレオのオーディオ DAC の信号線と次のように対応させることができます。

  • BIT_CLK --- ビットクロック (BCK) / シリアルクロック (SCK)
  • SYNC --- ワードセレクト (WS) / LR クロック (LRCK)
  • SDATA_OUT/SDATA_IN --- シリアルデータ (SDAT)

AC97 のデータフォーマットは、2 ch ステレオのフォーマットを、比較的素直に多チャネルに拡張したような形になっています。
2 ch ステレオの場合、WS/LRCK は同一サンプリング・タイミングに属するデータの区切りおよび L/R の識別のための信号で、デューティー 50 % のサンプリング周波数 fs の方形波となっています。
多チャネルである AC97 の場合、これに相当するのは SYNC 信号ですが、1 フレームがきっちり半分に割れるわけではないので、幅の狭いパルス波の形となっています。
SYNC/BIT_CLK/SDATA_OUT の間のタイミングの関係の図を下に示します。

BIT_CLK の立ち上がりエッジで信号が変化し、立ち下りエッジで受信側がデータを取り込みます。
SYNC 信号の立ち上がりエッジで同一サンプリング・タイミングに属するデータの集まり (フレーム) の開始を示しますが、実際のフレームの最初のデータビットは 1 BIT_CLK 分遅れて開始します。 これは 2 ch ステレオの場合の I2S フォーマットと同様です。
AC97 では、サンプリング周波数は 48 kHz に固定です。
もう少し詳しく言うと、AC-link のフレーム周波数は 48 kHz に固定ですが、データを間引く、つまり、フレームによりデータを送ったり送らなかったりすることにより、実質的に 48 kHz 以下のデータ転送レートを得るオプション機能も定義されています。
AC97 では 1 フレームは 256 ビットで構成されており、したがって BIT_CLK の周波数は
48 [kHz] x 256 = 12.288 [MHz]
となっています。
通常、AC97 コーデックには、この 2 倍の周波数の 24.576 MHz の水晶振動子か、クリスタル・オシレータを接続して動作させます。
そして、12.288 MHz の BIT_CLK はプライマリ・コーデックが生成して、AC97 コントローラおよびセカンダリ・コーデックに供給します。
1 フレーム中の 256 ビットは 13 個の「スロット」と呼ばれる単位に分割され、オーディオ・データおよびコントロール用のデータの送信に利用されます。
最初のスロットの番号を「0」とし、順に番号を割り振り、最後のスロットは 12 番となります。
スロット 0 以外の 12 個のスロットは 20 ビット幅で、スロット 3 〜 12 には 16 ビット幅以上 20 ビット幅以下のオーディオ・データを左詰めに配置します。
スロット 1 と 2 には、コーデック内部のレジスタ・アクセスのアドレス指定および読み/書きするデータが納められています。
先頭のスロット 0 は特別で、タグ (TAG) スロットと呼ばれ、このスロットだけ 16 ビット幅となっており、後続のスロットに有効なデータが含まれているかどうかを示すビットマップが納められています。
各スロットの配置の図を下に示します。

SYNC 信号はタグ・スロットの幅と同じ 16 BIT_CLK 幅のパルスとなっています。
SDATA_OUT のスロット 1 がコーデック内部のレジスタ・アドレスの指定で、読み/書きを区別するビットもあります。
スロット 2 に書き込むべきデータを格納しておきます。
レジスタの読み出しを指定した場合には、次のフレームの SDATA_IN のスロット 2 に読み出されたレジスタの値が表れます。
SDATA_OUT のスロット 3, 4 が 2 ch ステレオの DAC 出力データ (あるいは 4 ch / 6 ch ステレオのフロント出力) に割り付けられており、基本部分はこの 2 ch だけです。
SDATA_IN 側では、ADC で変換された 2 ch ステレオ・データがスロット 3, 4 に配置されて送られてきます。 これも、基本部分はこの 2 ch だけです。
拡張部分としては、6 ch ステレオのセンター / LFE / サラウンド L / サラウンド R が上の図で示すようなスロットに割り付けられています。
一方、SH-2A のシリアルサウンドインターフェース (SSIF) では、通常の 2 ch ステレオのフォーマットのほかに、多チャネルのフォーマットもサポートされています。
たとえば、1 システムワード当たり 3 チャネルのデータを乗せる指定にすると次の図のようになります。

実際のビット幅で書くにはスペースが足りないので、各チャネルのデータは 2 ビット幅、システムワードは 8 ビット幅として書いてあります。
SSIF で指定できる最大チャネル数は 4、最大データワード幅は 32 ビットですから、1 サンプル分では最大、

2 x 4 x 32 [ビット] = 256 [ビット]

となり、AC97 の 1 フレーム分のデータを余すことなく読み書きできることになります。
ただし、20 ビット幅のスロットの境界と、32 ビット幅のロングワードの境界は一致しませんから、ひとつのロングワードデータの中に複数のスロットのデータが混在することになります。
その点では、SSIF のデータワード幅を 20 ビットの指定にすると好都合ですが、そうすると連続する 4 スロット分のデータしか扱えなくなるので、スロット 0 のタグデータからスロット 4 の R ch PCM データまでの 5 スロット分のデータを一度に読み書きすることはできません。
この問題のひとつの解決策としては、ふたつの SSIF を同期して動作させ、たとえばスロット 0 から 2 までのブロックと、スロット 3 から 4 までのブロックとをそれぞれの SSIF に分担させ、出力を合成して AC97 コーデックに送れば、扱うデータ量を増やすことができます。
AC97 の基本機能のスロット 0 からスロット 4 までだけ、つまり、2 ch ステレオ機能だけを扱うことにすれば、データ量は 1 フレーム当たり

16 [ビット] + 4 x 20 [ビット] = 96 [ビット]

となり、このデータ量は、

  • 32 ビット・データワード x 3
  • 24 ビット・データワード x 4

に相当します。
前の図の第一、第二の各システムワードがそれぞれ AC97 の 1 フレームに対応する、つまり SSIF のサンプリング周波数が 24 kHz となる設定にして、1 フレーム内で 32 ビットデータ転送を 3 回行えば、基本機能をまかなえることになります。
1 フレーム内のデータの 256 ビットをスロットごとに区切って、すべて表示したものを下に示します。

各スロットの LSB の右に書いてある数字は、フレームの最初のビット (スロット 0 の b15) を 255、フレームの最後のビット (スロット 12 の b0) を 0 とする、全ビットに対する通し番号を用いて、そのスロットの b0 の位置を表現したものです。
ビットを区切っている青い線は、32 ビットデータとしての境界線です。
スロット 4 と 5 の間の点線は、点線より上が基本機能で定義されている部分であることを示しています。