このIPについて
すべてVHDLによって記述しています。特定のデバイスに依存するコードは含みませんので、幅広いFPGAやCPLDで動作すると思います。
このIPにご興味のある方は、ナビゲーションメニューの「お問合せ」をご参照の上、必要事項を記入してメールにてご連絡ください。FPGA受託設計開発サービスのご利用如何にかかわらず、ソースなどは基本的に無料で開示させて頂きます。もちろんカスタマイズ等のご用命は大歓迎です。
Digital Audio Interface Transceiverについて
PCMディジタルオーディオにおける3線シリアル信号を、1本の伝送ラインで通信するための手段であるAES/EBUインターフェースに変換するIPです。このうちChannel Status Byteが民生用のものはS/PDIF(Sony Philips Digital Interface)として広く知られています(万一間違いがありましたらご指摘ください)。本IPは、3線の「スタンダード右詰め24bit(MSBファースト/LSBファースト選択)フォーマット」からの変換を行う回路です。
1本の伝送ラインで2ch分(通常はL/Rchということになります)のオーディオデータと、最大24バイトの制御情報、そしてエラー検出ビットを送信することができます。この制御情報はオーディオデータ1サンプルあたり1ビット、合計192ビット(24バイト)分の情報を基本単位として繰り返しで送信することができます。
バイフェーズエンコード
これらのデータは、受信側でクロック抽出が可能なようにバイフェーズエンコードされて送信されます。図1にバイフェーズエンコードの様子を示します。
- 元データの最大転送レートの2倍のシステムクロックを使い
- 元データの変化点では必ず出力を反転させ
- 元データが'1'の間はシステムクロック毎に出力を反転させ
- 元データが'0'の間はシステムクロック2周期毎に出力を反転させる
という処理を行います。
図1 バイフェーズエンコード説明図
Sub-Frame、およびFrame
伝送ラインはSub-Frameを基本単位として成り立っています(図2を参照)。
図2 Sub-Frameの説明図
1つのSub-Frameで、4bitの補助データと1chの20bitオーディオデータ、そしてそれぞれ1bitのValidity bit, User bit, ならびにChannel Status bitを伝送することができます。最後のPビットは偶数パリティを付加します。
オーディオデータはLSBファーストで、20bitを超える場合はAux Dataフィールド(補助データフィールド)が使われることになります。本IPではAux Dataフィールドをオーディオデータで使用し、ここにはオーディオデータの下位4bitを入れています(元のオーディオデータが24bit未満の場合は24bitになるように下位ビットをゼロでパディングします)。
本IPでは、Validity bitは'0', User bitは'0'固定で使用します。Channel Status Data用に24バイト(192bit)分の内部レジスタを宣言していますが、外部からライトできるようには構成しておらず、システムリセット後にゼロクリアされるのみとしております。したがって、民生モードのサンプリング周波数44.1kHzでは問題はないかもしれませんが、他のモードで利用しようとした場合、ここはSPIインターフェース等で外部から設定可能なようにカスタマイズすることが必要になります。
図3 プリアンブルの説明図
先頭の4bit分はプリアンブルで、ここはバイフェーズエンコーディングの規則を破っており、受信側で容易にこの部分を検出できるようになっています。1つのSub-Frameは1ch(LかRch)のオーディオデータを伝送しますが、受信側でそれがchannel A(Lch)のデータなのか、あるいはchannel B(Rch)のデータなのかを区別できるように、それぞれのchannelで異なったプリアンブルを付加することになっています。一般に、channel Aのプリアンブルをpreamble X, channel Bのそれをpreamble Yと呼ぶことが多いようです(実は規格で呼称が決まっているのかもしれません)。図3はこれらのpreambleのパターンを表しています。
このchannel Aとchannel BのそれぞれのSub-FrameのペアがFrameと定義されており、Frame 0からFrame 191までの塊の中の24バイト(192bit)のChannel Status bitで1つのChannel Status Blockを構成することになります(図4)。
図4 Frameの構成
ところで、受信側でこの192個のFrameのうちの先頭Frameのchannel Aを見つけることができるように定義されたプリアンブルを、preamble Zといい、192回に1度channel Xの代わりに出現するように本IPも回路を構成しています。
Channel Status Byte(Block)の構成
Channel Status Blockは、24バイト分のレジスタがRTL内部で宣言されており、外部からライトするパスを追加して頂くことで、ライトする内容を変えるだけでProfessional Channel Status Blockにも、Consumer Channel Status Blockにも対応することができると考えております。実際にライトするべき内容については、しかるべき規格をご覧ください。
入力PCMオーディオデータの仕様
3線シリアルオーディオデータにも色々な仕様がありますが、本IPでは「スタンダード右詰め24bitモード」からの変換を採用しています。このフォーマットであれば、MSBファースト、LSBファーストのどちらでも1bitの制御ポートでモードを代えることができるようにしています。
図5: スタンダード右詰め24bitモード
シリコン上での動作結果
XilinxのSpartan XC3S200を対象に、ISE9.1iを用いて論理合成、フィッティングを行いました。特にスピードを必要とするアプリではないので、問題になるようなところはありませんでした。
市販のディジタル・オーディオ・インターフェース・レシーバICの出力を本IPにつなぎ、本IPの出力をトスリンクを使って光出力とし、外部のDACユニットで受けたところ、無事に波形が再現され、音も問題ありませんでした。市販のディジタル・オーディオ・インターフェース・レシーバICの入力には、CDプレーヤーのディジタル出力を接続したことはいうまでもありません。