(57)【特許請求の範囲】
【請求項１】
多数のデータ要素に関係するデータ項目をデータ・リンクの対応するデータ・スロットで転送するデータ・リンクにおいて、前記データ・リンクとのインターフェースを制御するコントローラであって、
少なくとも１つのチャンネルであって、各チャンネルはデータ項目を記憶するデータ・バッファと、前記データ・バッファに関連し且つ制御データを記憶する制御レジスタとを備え、前記制御データはどのデータ要素のためのデータ項目をそのデータ・バッファ内に記憶するかを規定するようセット可能であり、前記コントローラにより提供されるチャンネルの数は前記データ・リンクで転送することのできるデータ項目を有するデータ要素の数より少ない、少なくとも１つのチャンネルと、
前記制御データに従って前記少なくとも１つのチャンネルと前記データ・リンクのデータ・スロットとの間のデータ項目の転送を制御するインターフェース機構と、
を備える、コントローラ。
【請求項２】
前記少なくとも１つのチャンネルの少なくとも１つのデータ・バッファは前記制御データが指定する１つ以上のデータ要素に関係するデータ項目を前記データ・リンクにより送信する前に記憶し、前記インターフェース機構は前記制御データに応じて前記データ・バッファから取り出したデータ項目を対応する１つ以上のデータ・スロットで前記データ・リンクにより送信する、請求項１に記載のコントローラ。
【請求項３】
前記少なくとも１つのチャンネルの少なくとも１つのデータ・バッファは前記データ・リンクから受信し且つ前記制御データが指定する１つ以上のデータ要素に関係するデータ項目を記憶し、前記インターフェース機構は前記制御データに応じて対応する１つ以上のデータ・スロットから受信したデータ項目を前記データ・バッファ内に記憶する、請求項１に記載のコントローラ。
【請求項４】
各チャンネルは１対の前記データ・バッファとその関連する制御レジスタを備え、前記データ・バッファの一方は前記データ・リンクにより送信するデータ項目を記憶し、前記データ・バッファの他方は前記データ・リンクから受信したデータ項目を記憶する、請求項１に記載のコントローラ。
【請求項５】
各データ・バッファは同じサンプリング速度を有する１つ以上のデータ要素に関係するデータ項目を記憶する、請求項１に記載のコントローラ。
【請求項６】
前記コントローラは前記データ・リンクを介してコーデックに接続可能である、請求項１に記載のコントローラ。
【請求項７】
各データ・バッファは先入れ先出し（ＦＩＦＯ）バッファを備える、請求項１に記載のコントローラ。
【請求項８】
前記コントローラをメモリに結合して前記メモリと前記少なくとも１つのチャンネルとの間にデータ項目を転送することができるメモリ・インターフェースを更に備える、請求項１に記載のコントローラ。
【請求項９】
前記メモリ・インターフェースは前記メモリへのアクセスを制御するプロセッサを介して前記コントローラを前記メモリに結合する、請求項８に記載のコントローラ。
【請求項１０】
各制御レジスタは前記関連するデータ・バッファと前記メモリの間で転送されるデータ語が複数の前記データ項を含むコンパクト・モードであることを示すためにセット可能な第１フィールドを有する、請求項８に記載のコントローラ。
【請求項１１】
前記データ・スロットで転送するときのデータ項目は固定サイズで表され、各制御レジスタは、前記関連するデータ・バッファ内に記憶されているデータ項目の実際のサイズを示すためにセット可能な第２のフィールドを有し、前記第１のフィールドがセットされた場合は前記メモリ・インターフェースは前記第２のフィールドを参照して、前記関連するデータ・バッファと前記メモリとの間で転送される各データ語内にデータ項目をいくつ含めるかを決定する、請求項１０に記載のコントローラ。
【請求項１２】
前記データ・スロットで転送するときのデータ項目は固定サイズで表され、各制御レジスタは、前記関連するデータ・バッファ内に記憶されている各データ項目の実際のサイズを示すためにセット可能なフィールドを有し、これにより前記メモリ・インターフェースは前記データ項目を実際のサイズと固定サイズとの間で変換することができる、請求項８に記載のコントローラ。
【請求項１３】
前記制御レジスタ内の制御データは前記関連するデータ・バッファ内に記憶されているデータ項目を有するデータ要素の数を指定し、前記メモリ・インターフェースは前記制御データに従って前記データ・バッファと前記メモリの間のデータの転送速度を制御する、請求項８に記載のコントローラ。
【請求項１４】
多数のデータ要素に関係するデータ項目をデータ・リンクの対応するデータ・スロットで転送するデータ・リンクにおいて、前記データ・リンクとのインターフェースを制御する方法であって、
（ａ）  データ項目を記憶するデータ・バッファと前記データ・バッファに関連する制御レジスタをそれぞれ備える少なくとも１つのチャンネルを設け、
（ｂ）  どのデータ要素のためのデータ項目を前記関連するデータ・バッファ内に記憶するかを規定する制御データを前記制御レジスタ内に記憶し、前記ステップ（ａ）で提供されるチャンネルの数は前記データ・リンクで転送することのできるデータ項目を有するデータ要素の数より少なく、
（ｃ）  前記制御データに従って前記少なくとも１つのチャンネルと前記データ・リンクのデータ・スロットとの間のデータ項目の転送を制御する、
ステップを含む方法。
【請求項１５】
前記少なくとも１つのチャンネルの少なくとも１つのデータ・バッファは前記制御データが指定する１つ以上のデータ要素に関係するデータ項目を前記データ・リンクにより送信する前に記憶し、前記ステップ（ｃ）は前記制御データに応じて前記データ・バッファから取り出したデータ項目を前記対応する１つ以上のデータ・スロットで前記データ・リンクにより送信する、請求項１４に記載の方法。
【請求項１６】
前記少なくとも１つのチャンネルの少なくとも１つのデータ・バッファは前記データ・リンクから受信し且つ前記制御データが指定する１つ以上のデータ要素に関係するデータ項目を記憶し、前記ステップ（ｃ）は前記制御データに応じて対応する１つ以上のデータ・スロットから受信したデータ項目を前記データ・バッファ内に記憶する、請求項１４に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はデータ・リンクとのインターフェースを制御するコントローラと方法に関する。
【０００２】
【従来の技術】
製品間の通信を行うには、データ・リンクを介した製品間の通信の書式を指定する標準化されたインターフェースを開発する必要がある。標準化されたインターフェースは、データ・リンクを通る、特定のデータ要素に関係する多数のデータ・ストリームを処理するように設計する。データ・リンクを時間または周波数で分割して多数のデータ・スロットを定義し、各データ要素を特定のデータ・スロットに割り付けることが多い。この方法により、複数の異なるデータ要素に関係するデータをデータ・リンクを介して同時に送信することができる。
【０００３】
例えばコーデック（コーダ・デコーダ）の分野で、インテルはコーデック・チップとインターフェースするインターフェース・プロトコルを開発した。このインターフェース・プロトコルは、コーデック・チップと、このチップと通信する任意の製品との間の、通信データ・リンク用の書式を定義する。より詳しく述べると、このインターフェース・プロトコルは、多数の入力および出力データ・ストリームを処理するための一連のＴＤＭ（時間分割多重化）書式を用いるディジタル・データ・リンクを規定する。このプロトコルでは、リンク構造は各オーディオ・フレームを多数のデータ・スロットに分割し、特定のデータ要素（例えば、左チャンネル・オーディオ、右チャンネル・オーディオ、ヘッドセット、モデムなど）を特定のデータ・スロットに割り当てる。
【０００４】
一般に全てのアプリケーションにおいて、上記のデータ・リンクを介してコーデックとインターフェースするコントローラを開発する。どんなアプリケーションでもコントローラは用いるデータ・スロットの部分集合にだけ有用なので、コントローラは一般に特定のアプリケーションに関係して開発される。この方法によるとコントローラの複雑さは減少するが、アプリケーション毎に異なるコントローラを開発しなければならない。
【０００５】
【発明が解決しようとする課題】
しかし一般に、これは包括的なコントローラを製作するより好ましい方法であると考えられている。なぜなら、かかる包括的なコントローラにはデータ・リンク仕様が支援するデータ・スロット毎に別個のデータ・バッファ回路が必要になるので、かかる包括的なコントローラのサイズとコストが大きくなるからである。
本発明の目的は、かかるサイズとコストの問題を緩和する包括的なコントローラを提供することである。
【０００６】
【課題を解決するための手段】
第１の態様では、本発明は、多数のデータ要素に関係するデータ項目をデータ・リンクの対応するデータ・スロットで転送するデータ・リンクにおいて、データ・リンクとのインターフェースを制御するコントローラを提供する。このコントローラは次の要素を備える。すなわち、少なくとも１つのチャンネルであって、各チャンネルはデータ項目を記憶するデータ・バッファと前記データ・バッファに関連し且つ制御データを記憶する制御レジスタを備え、前記制御データをセットすることによりどのデータ要素のためのデータ項目をそのデータ・バッファ内に記憶するかを規定することができる、少なくとも１つのチャンネルと、前記制御データに従って少なくとも１つのチャンネルとデータ・リンクのデータ・スロットとの間のデータ項目の転送を制御するインターフェース機構と、を備える。
【０００７】
本発明はデータ・リンクとインターフェースするコントローラを提供するもので、データ・リンクは多数のデータ要素（例えば、左スピーカ、右スピーカ、モデムなど）に関係するデータ項目をデータ・リンクの対応するデータ・スロットで転送することができる型のものである。理解されるようにデータ・スロットは、例えば時分割多重化（ＴＤＭ）、符号分割多重化（ＣＤＭ）、周波数分割多重化（ＦＤＭ）などの、任意の適当な方法で定義することができる。
【０００８】
本発明ではコントローラは少なくとも１つのチャンネルを備え、各チャンネルはデータ・バッファと、このデータ・バッファに関連する制御レジスタを備える。各データ・バッファはデータ・リンクに出力するデータ項目またはデータ・リンクから受信するデータ項目を記憶し、関連する制御レジスタは、セットすることによりどのデータ要素のためのデータ項目をそのデータ・バッファ内に記憶するかを規定することができる制御データを有する。したがって、例えば１つのデータ・バッファは左および右オーディオ・チャンネルに関係するデータ項目を記憶し、別のデータ・バッファはモデム・データに関係するデータ項目を記憶するようにすることができる。または別の例では、１つのデータ・バッファ内でオーディオデータとモデム・データを混合することができる。
【０００９】
本発明のコントローラは、制御データに従って少なくとも１つのチャンネルとデータ・リンクのデータ・スロットとの間のデータ項目の転送を制御するインターフェース機構を更に含む。理解されるように、制御データは種々の形式をとることができる。例えば、特定のデータ要素とデータ・リンクの特定のデータ・スロットは対応しているので、データ要素を参照するかまたは対応するデータ・スロットを参照して制御データを指定することができる。どちらの場合も、制御データによりインターフェース機構は、特定のデータ・バッファから取り出したデータ項目をどのデータ・スロットに挿入するかを決定し、および／またはデータ・リンクの特定のデータ・スロットで受信したデータ項目をどのデータ・バッファ内に置くかを決定することができる。
【００１０】
制御データの設定に関して述べると、理解されるように、制御レジスタはコントローラを最初にプログラムするときに一度だけ制御データを設定するようにしてもよいし、または必要であれば、制御レジスタは、制御データを任意のときに再プログラミングすることによりコントローラの動作中に特定のデータ・バッファの使用を変更できるようにしてもよい。
本発明により、データ・リンクが支援するデータ・スロット毎に別個のデータ・バッファ回路を設ける必要のない包括的コントローラを開発することができるので、包括的コントローラの開発を妨げるコストとサイズの問題を緩和することができる。
【００１１】
本発明の１つの実施の形態では、少なくとも１つのチャンネルの少なくとも１つのデータ・バッファは制御データが指定する１つ以上のデータ要素に関係するデータ項目をデータ・リンクで送信する前に記憶し、インターフェース機構は制御データに応じてデータ・バッファから取り出したデータ項目を対応する１つ以上のデータ・スロットでデータ・リンクにより送信する。
また、少なくとも１つのチャンネルの少なくとも１つのデータ・バッファはデータ・リンクから受信し且つ制御データが指定する１つ以上のデータ要素に関係するデータ項目を記憶し、インターフェース機構は制御データに応じて対応する１つ以上のデータ・スロットから受信したデータ項目をデータ・バッファ内に記憶する。
【００１２】
コントローラはデータ項目をデータ・リンクで送信するだけか、またはデータ・リンクからデータ項目を受信するだけでよいが、好ましい実施の形態ではコントローラはデータ項目の送信と受信の両方を行うようにする。かかる好ましい実施の形態では、好ましくは各チャンネルは１対の前記データ・バッファとこれに関連する制御レジスタを備え、前記データ・バッファの一方はデータ・リンクで送信するデータ項目を記憶し、前記データ・バッファの他方はデータ・リンクから受信したデータ項目を記憶する。したがって、好ましい実施の形態では各チャンネルはデータ項目の送信と受信を行うことができる。注意すべきは、或るチャンネル内のデータ・バッファの対はそれぞれの関連する制御レジスタを有するので、好ましい実施の形態では送信データ・バッファは受信データ・バッファと同じ型のデータ要素を処理する必要はなく、送信データ・バッファと受信データ・バッファの制御レジスタは完全に独立にプログラムすることができることである。
【００１３】
好ましい実施の形態では、コントローラが提供するチャンネルの数は、そのデータ項目をデータ・リンクで転送するデータ要素の数より少ない。その制御データをセットすることによりどのデータ要素のためのデータ項目をそのデータ・バッファ内に記憶するかを規定することができる制御レジスタをデータ・バッファ毎に設ければこれを達成することができる。理解されるように、この方式によるとどんな事例でもコントローラを極めて柔軟に用いることができると同時に、コントローラの全体のサイズを許容できるサイズに収めることができる。
好ましい実施の形態では、各データ・バッファは同じサンプリング速度を有する１つ以上のデータ要素に関係するデータ項目を記憶する。この条件を付けることにより、コントローラ内の制御機構を大幅に簡単化することができることが分かった。
【００１４】
前に述べたように、本発明を用いて種々の異なるデータ・リンクとのインターフェースを制御することにより、多数のデータ要素に関係するデータ項目をデータ・リンクの対応するデータ・スロットで転送することができる。好ましい実施の形態では、コントローラはデータ・リンクを介してコーデックに接続することができる。特に好ましい実施の形態では、コーデックはオーディオ・コーデックであり、データ・リンクはインテルのＡＣ９７仕様に準拠したＡＣリンクである。ＡＣ９７仕様に関する情報については、ウエブ・ページ「http://www.intel.com/pc-supp/platform/ac97」を参照していただきたい。データ・バッファは種々の形式をとることができる。しかし好ましい実施の形態では、各データ・バッファは先入れ先出し（ＦＩＦＯ）バッファで構成する。
【００１５】
理解されるように、コントローラは一般にデータ・リンクに接続するだけでなく、リンクからのデータ項目を送信する先の、またデータ・リンクで送信されるデータ項目を送信した元の、他のデータ処理回路に接続する。好ましい実施の形態では、コントローラは、コントローラとメモリとを結合してメモリと少なくとも１つのチャンネルとの間でデータ項目を転送することのできるメモリ・インターフェースを更に備える。１つの実施の形態では、メモリ・インターフェースは、メモリへのアクセスを制御するプロセッサを介してコントローラをメモリに結合する。しかし当業者が理解するように、例えば直接メモリアクセス（ＤＭＡ）方式などの他の方式を用いてコントローラのメモリ・インターフェースをメモリに結合してもよい。
【００１６】
好ましい実施の形態では、各制御レジスタは、セットすることによりコンパクト・モードであることを示す第１のフィールドを有する。コンパクト・モードでは、関連するデータ・バッファとメモリとの間で転送されるデータ語は複数の前記データ項目を含む。コントローラとメモリとの間で転送されるデータ語のサイズが十分大きくて複数のデータ項目を含むことが可能な場合は、この方式によりコントローラとメモリとの間の通信効率を向上させることができる。例えば、コントローラとメモリとの間に３２ビットのデータ語を転送することが可能であって且つデータ項目の実際のサイズが１６ビット以下である場合は、第１のフィールド内にコンパクト・モードを指定することにより、メモリとコントローラとの間で転送される各データ語内に２つのデータ項目を含めることができる。
【００１７】
好ましい実施の形態では、データ・スロットで転送するときのデータ項目は固定サイズで表され、各制御レジスタは、セットすることにより関連するデータ・バッファ内に記憶されているデータ項目の実際のサイズを示すことができる第２のフィールドを有する。第１のフィールドがセットされた場合は、メモリ・インターフェースは第２のフィールドを参照して、関連するデータ・バッファとメモリとの間で転送される各データ語内にデータ項目をいくつ含めるか決定する。したがって好ましい実施の形態では、制御レジスタ内の１つのフィールドを用いてデータ項目の実際のサイズを指定し、第１のフィールド内にセットされた情報と共にこの情報を用いて、各データ語内に含むべきデータ項目の数を決定することができる。
【００１８】
しかし理解されるように、コントローラがかかるコンパクト・モードを支援するかどうかに関わらず、データ項目の実際のサイズに関する情報は有用な情報である。詳しく述べると、セットしたとき関連するデータ・バッファ内に記憶されている各データ項目の実際のサイズを示すフィールドを制御レジスタ内に含むことにより、メモリ・インターフェースはデータ項目を実際のサイズか固定サイズかに変換することができる。したがって好ましい実施の形態では、データ・バッファに追加するデータ項目をメモリ・インターフェースが受信すると、メモリ・インターフェースはデータ項目を所要のビット数だけシフトして固定サイズでデータ項目を表現した後、この固定サイズのデータ項目をデータ・バッファ内に置くことができる。逆に、データ・バッファからの固定サイズのデータ項目をメモリ・インターフェースを介してメモリに転送するときは、メモリ・インターフェースは実際のサイズの情報を用いてデータ項目を再びシフトして、その実際のサイズのデータ項目を作ることができる。
【００１９】
好ましい実施の形態では、制御レジスタ内の制御データは関連するデータ・バッファ内に記憶されているデータ項目を有するデータ要素の数を指定し、メモリ・インターフェースは制御データに従ってデータ・バッファとメモリとの間のデータの転送速度を制御する。したがって、２つのデータ要素のためのデータ項目がデータ・バッファ内に記憶されていることを制御データが示す場合は、好ましい実施の形態ではこれらのデータ項目をデータ・バッファ内に記憶し、データ・バッファから対で読み出す。したがって、メモリ・インターフェースは可能な限り送信データ・バッファ内に常に２つのデータ項目を置いて、かかるデータ項目をデータ・リンクで送信する要求に応じるだけの十分なデータを用意しなければならない。また、メモリ・インターフェースは好ましくは、受信データ・バッファ内に２つのデータ項目を受信する空間を常に用意しなければならない。
【００２０】
第２の態様では、本発明は、多数のデータ要素に関係するデータ項目をデータ・リンクの対応するデータ・スロットで転送するデータ・リンクにおいて、データ・リンクとのインターフェースを制御する方法を提供する。この方法は、（ａ）データ項目を記憶するデータ・バッファとこのデータ・バッファに関連する制御レジスタとをそれぞれ備える少なくとも１つのチャンネルを設け、（ｂ）どのデータ要素のためのデータ項目を関連するデータ・バッファ内に記憶するかを規定する制御データを制御レジスタ内に記憶し、（ｃ）前記制御データに従って少なくとも１つのチャンネルとデータ・リンクのデータ・スロットとの間のデータ項目の転送を制御する。
【００２１】
【発明の実施の形態】
前に述べたように、多数のデータ要素に関係するデータ項目をデータ・リンクの対応するデータ・スロットで転送するデータ・リンクにおいて、本発明を用いて種々のデータ・リンクとのインターフェースを制御するコントローラを開発することができる。しかし本発明の好ましい実施の形態を示すために、コントローラはデータ・リンクを介してオーディオ・コーデックに接続し、特にデータ・リンクはインテルのＡＣ９７仕様に準拠すると仮定する。この仕様では、データ・リンクをＡＣリンクと呼ぶことがある。
【００２２】
図１は、ＡＣリンク６０を介してオーディオ・コーデックと通信するチップ１０の要素の間の関係を示す略ブロック図である。チップ１０は、バス５０によりメモリ４０から取り出したデータにデータ処理を行うマイクロプロセッサ２０を含む。当業者が理解するように、図１はチップ１０を非常に簡単化した図であって、マイクロプロセッサ２０とメモリ４０との間には一般に他の要素が接続されている。例えば、マイクロプロセッサ２０はマイクロプロセッサが用いる命令および／またはデータを記憶するキャッシュにアクセスすることができる。このとき、マイクロプロセッサ２０は書込みバッファなどによりメモ４０から切り離される。メモリ４０はチップ１０の外部にあってよい。
【００２３】
しかし、本発明の好ましい実施の形態を記述するのにマイクロプロセッサ２０がメモリ４０と通信する方法を正確に記述する必要はないので、簡単のためにこの図ではバス５０を介してメモリ４０をマイクロプロセッサに直接接続した。
本発明の好ましい実施の形態では、コントローラ３０もバス５０に接続して、チップ１０と、ＡＣリンク６０を介してチップ１０に接続するオーディオ・コーデックとの間の、データ項目の転送を制御する。詳しく述べると、チップ１０がデータ項目をオーディオ・コーデックに送るとき、マイクロプロセッサ２０はメモリ４０からこれらのデータ項目を取り出してバス５０によりコントローラ３０に送り、ＡＣリンク６０の該当するデータ・スロットで出力する。同様に、コントローラ３０がＡＣリンク６０によりオーディオ・コーデックからデータ項目を受信すると、これらのデータ項目をコントローラ３０内でバッファされ、マイクロプロセッサ２０はこれを取り出してメモリ４０内に記憶する。
【００２４】
理解されるように、或る実施の形態では直接メモリ・アクセス（ＤＭＡ）方式を用いて、マイクロプロセッサ２０を用いずにコントローラ３０とメモリ４０の間で直接通信を行うことができる。ＤＭＡ方式はよく知られているので、これ以上説明しない。
図２は、コントローラ３０とオーディオ・コーデック７０との間のＡＣリンクの詳細を示す。ＡＣリンクは５ピンのインターフェースから成り、双方向で、固定速度で、直列ＰＣＭ（パルス・コード変調）ストリームであり、時分割多重化（ＴＤＭ）方式を用いて多数の入力および出力オーディオ・ストリームと制御レジスタ・アクセスとを処理する。コントローラ３０とコーデック７０とを接続する５ピンは次の通り。
【００２５】
ＢＩＴＣＬＫ−−これは１２．２８８ＭＨｚに固定されたクロック信号である。
ＲＥＳＥＴ−−これは外部コーデックの非同期コールド・リセットを開始するのに用いられる信号で、アクティブ・ローである。コールド・リセットを行うと、コーデック・レジスタ内の全ての情報は消失する。
ＳＤＡＴＡＩＮ−−この入力は状態情報とディジタル・オーディオ入力ストリームを受信する。これはＢＩＴＣＬＫの立下がりエッジでサンプリングされ、立上がりエッジでコーデックから出力される。
ＳＤＡＴＡＯＵＴ−−この出力は制御情報とディジタル・オーディオ出力ストリームを送信する。ＢＩＴＣＬＫの立上がりエッジで出力される。
【００２６】
ＳＹＮＣ−−この信号は４８ｋＨｚに固定されており、直列クロック（ＢＩＴＣＬＫ）を分割することにより得られる。ＳＹＮＣ信号はＢＩＴＣＬＫの立上がりエッジでセットされる。またオーディオ・コーデックが電力断状態のとき、ＳＹＮＣ信号を非同期に出力してオーディオ・コーデックを再起動することができる（コーデック・レジスタ内の情報は一切消失せずに）。
ＡＣリンク構造は各データ・フレームを、ＳＤＡＴＡＯＵＴピンとＳＤＡＴＡＩＮピンを介して送信される１２の出力データ・ストリームと、１２の入力データ・ストリームに分割する。これらのデータ・ストリーム（以後、データ・スロットと呼ぶ）はそれぞれ２０ビットのサンプル分解能を有する。
【００２７】
図３は、双方向フレームの書式の詳細を示す図である。図から分かるように、フレームはタグとデータ相で構成する。各相は多数のデータ・スロットを有する。スロット０はタグ相であり、スロット１から１２まではデータ相である。データ相内の１２のデータ・スロットはそれぞれ特定のデータ要素に割り当てられ、各データ・スロットはそのデータ・スロットに関連するデータ要素の関係のデータ項目だけを運ぶ。
【００２８】
まずＳＤＡＴＡＯＵＴピンに出力する出力データ・ストリームを見ると、コントローラからのデータ出力フレームは外部コーデック向けの制御データとＰＣＭデータを含む。図３から分かるように、ＳＤＡＴＡＯＵＴに送られる情報は多数の異なるスロットから成り、各スロットは多数のビットから成り、新しい各ビット位置はＢＩＴＣＬＫの立上がりエッジでＡＣリンクに与えられる。ＳＤＡＴＡＯＵＴに送られるスロット０から１２までについて、以下にそれぞれ簡単に説明する。
【００２９】
ＳＤＡＴＡＯＵＴスロット０：タグ相（１６ビット）
スロット０の第１ビットを「有効フレーム」ビットと呼ぶ。この第１ビットが１の場合は現在のデータ・フレームは有効なデータの少なくとも１つのスロットを含むことを示し、外部コーデックはこのスロット０内の後続のビットをサンプリングしてどのフレームが実際に有効データを有するかを判定する。次の１２ビットの位置は対応する１２タイム・スロットのどれが有効データを含むかを示す。有効スロットは各ビット位置の１で示す。ビット２−０は常に０でなければならない。コントローラはスロット０を生成する。これは、コントローラの関連するデータ・バッファ内のデータの有効性と、送信制御レジスタ内の値と、ＳＤＡＴＡＩＮスロット１からの禁止要求ビットの値により決定される。或るスロットが有効でない場合は、コントローラは関連するＳＤＡＴＡＯＵＴスロットに０を入れる。
【００３０】
ＳＤＡＴＡＯＵＴスロット１：レジスタ・アドレス（２０ビット）
スロット１は現在のフレームのレジスタ・アクセスのレジスタ・アドレスを示すのに用いられる。スロット１のＭＳＢ（ビット１９）は現在の制御動作が読取り（０）か書込み（１）かを示す。ビット１８−１２は読取りまたは書込み動作のレジスタ・アドレスを指定するのに用いられる。最後の１２ビットは予約であり、０でなければならない。
ＳＤＡＴＡＯＵＴスロット２：レジスタ書込みデータ（２０ビット）
スロット２は現在のフレーム（スロット１で規定される）のレジスタ書込みアクセスのレジスタ・データを含む。ビット１９−４はレジスタに書き込む１６ビットの値を含む。ハードウエアはビット３−０を０にする。アクセスがレジスタ読取りの場合は、スロット全体に０を入れる（この要求はコントローラが決定する。コントローラはスロット１のビット１９を用いて動作が読取りか書込みかを決定する）。
【００３１】
ＳＤＡＴＡＯＵＴスロット３：ＰＣＭプレイバック左チャンネル（２０ビット）スロット３はコーデックの左チャンネルＤＡＣのためのＰＣＭプレイバック・データを送信するのに用いられる。
ＳＤＡＴＡＯＵＴスロット４：ＰＣＭプレイバック右チャンネル（２０ビット）スロット４はコーデックの右チャンネルＤＡＣのためのＰＣＭプレイバック・データを送信するのに用いられる。
ＳＤＡＴＡＯＵＴスロット５：モデム１チャンネル（２０ビット）
スロット５はモデム・ライン１ＤＡＣ入力データを送信するのに用いられる。
ＳＤＡＴＡＯＵＴスロット６：ＰＣＭプレイバック中央チャンネル（２０ビット）
スロット６はコーデックの中央チャンネルのためのＰＣＭプレイバック・データを送信するのに用いられる。
【００３２】
ＳＤＡＴＡＯＵＴスロット７：ＰＣＭプレイバック左サラウンドチャンネル（２０ビット）
スロット７はコーデックの左サラウンドチャンネルのためのＰＣＭプレイバック・データを送信するのに用いられる。
ＳＤＡＴＡＯＵＴスロット８：ＰＣＭプレイバック右サラウンドチャンネル（２０ビット）
スロット８はコーデックの右サラウンドチャンネルのためのＰＣＭプレイバック・データを送信するのに用いられる。
ＳＤＡＴＡＯＵＴスロット９：ＰＣＭプレイバック低周波効果サラウンドチャンネル（２０ビット）
スロット９はコーデックのＬＦＥ（低周波効果）チャンネルのためのＰＣＭプレイバック・データを送信するのに用いられる。
【００３３】
ＳＤＡＴＡＯＵＴスロット１０：モデム２チャンネル（２０ビット）
スロット１０は９６ｋＨｚのサンプリング速度が要求されたとき（例えば、ＤＶＤプレヤー）にモデム・ライン２ＤＡＣ入力データまたはＰＣＭ左チャンネル・データを送信するのに用いられる。
ＳＤＡＴＡＯＵＴスロット１１：ヘッドセット・チャンネル（２０ビット）
スロット１１は９６ｋＨｚのサンプリング速度が要求されるとき（例えば、ＤＶＤプレヤー）にヘッドセット入力データまたはＰＣＭ右チャンネル・データを送信するのに用いられる。
ＳＤＡＴＡＯＵＴスロット１２：ＩＯ制御チャンネル（２０ビット）
スロット１２は９６ｋＨｚサンプリング速度が要求されるとき（例えば、ＤＶＤプレヤー）にＩＯ制御入力データまたはＰＣＭ中央チャンネル・データを送信するのに用いられる。
【００３４】
次に入力データ・ストリームでは、コントローラのＳＤＡＴＡＩＮピンに入力するオーディオ入力フレーム入力は、外部コーデック制御レジスタおよびステレオＡＤＣ（アナログ・ディジタル変換器）からの状態とＰＣＭデータを含む。タグ・スロット（スロット０）は１６ビットを含み、外部コーデックが作動可能かどうかと、いくつかの装置部分からのデータが有効かどうかをコントローラに知らせる。
【００３５】
図３から明らかなように、ＳＤＡＴＡＩＮに送信される入力データ・ストリームも多数の異なるデータ・スロットから成り、各データ・スロットは多数のビットから成り、新しい各ビット位置はＢＩＴＣＬＫの立上がりエッジでＡＣリンクに与えられる。ＳＤＡＴＡＩＮに送信されるスロット０から１２までの詳細は次の通りである。
ＳＤＡＴＡＩＮスロット０：コーデック状態ビット（１６ビット）
ＳＤＡＴＡＩＮスロット０の第１ビット（ビット１５）はコーデックが作動可能かどうかを示す。コントローラはスロット０内の後続のデータビットを調べて他の装置部分が作動可能かどうか判断する。例えば、ビット１４が１であるとスロット１のデータが有効であったことを示し、ビット１３が１であるとスロット２のデータが有効であったことを示す、などである。このスロットから得られるデータはコントローラ内に記憶されるので、ここからのビットによりフレーム内のスロットを確認することができる。
【００３６】
ＳＤＡＴＡＩＮスロット１：状態アドレス
スロット１は、コーデックが前のフレームから読取り要求を受けたときに外部コーデック・レジスタ・アドレスをコントローラに返すのに用いられる。外部コーデックは読取りアクセスのためのレジスタ・インデックスだけを返す。（書込みアクセスの場合はスロット１で有効データを返さない）。
読取りでは、ビット１９は常に０である。ビット１８−１２はコーデック・レジスタの７ビットのレジスタ・インデックスを含む。ビット１１−２はサンプリング速度変換（ＳＲＣ）機能性に用いられる。スロット３−１２ではこれを禁止要求ビットと呼ぶ。外部コーデックがこれらのビットを１にセットしたときは、対応するスロットは後続のフレームでＳＤＡＴＡＯＵＴにデータを送ってはならない。外部コーデックがこれらのビットを０にセットしたときは（コントローラの送信制御レジスタ内でセットされたアクティブ出力データ・スロットのために）、対応するスロットは次のフレームでＳＤＡＴＡＯＵＴにデータを送らなければならない。コントローラが特定のデータ・スロットのデータ項目を記憶する準備をしていない場合は、禁止要求ビットはそのデータ・スロットに影響を与えない。かかる場合は、次のフレームのそのデータ・スロットで０が送信される。
【００３７】
コントローラ内の関連するデータ・バッファ（要求されたデータ・スロットのデータ項目を記憶する準備をした）内に送信するデータがない場合はアンダーフローが発生して、データ・バッファが空でなくなるまで、または送信が禁止されるまで、無効データ（全て０）がそのデータ・バッファから送信される。マイクロプロセッサ２０は送信割込み要求に応じて十分な速度で送信データを書き込み、アンダーフローエラー状態を防ぐように調整されている。
ＳＤＡＴＡＩＮスロット０に関する前の説明に関して述べると、注意すべきはスロット１の有効性に関するスロット０内の関連ビットはレジスタ・アドレスの有効性（すなわち、ビット１８−１２内のデータの有効性）だけに関係するので、コントローラはスロット０内のスロット１の有効性ビットの値に関係なく禁止要求ビットを調べることである。
【００３８】
ＳＤＡＴＡＩＮスロット２：状態データ
スロット２は前の読取り要求からコントローラが要求した制御レジスタ・データを返す。スロット０内のコーデック状態ビットによりスロット２が無効という「タグを付けられている」場合は、コーデックはスロット全体に０を入れる。ビット１９−４はコントローラに返す１６ビットのコーデック・レジスタ値を含む。ビット３−０は０で返す。
ＳＤＡＴＡＩＮスロット３：左チャンネルＰＣＭ捕獲データ
スロット３は左チャンネルＡＤＣデータを含む。ディジタル化された信号はレジスタ１Ａｈを介して選択され、そのレジスタのデフォルト値は００００ｈであり、ＭＩＣ入力を選択する。これは２０ビットのスロットで、１ＰＣＭデータはＭＳＢから先に返され、最後に残ったビットは０である。
【００３９】
ＳＤＡＴＡＩＮスロット４：ＰＣＭレコード右チャンネル
スロット４は右チャンネルＡＤＣデータを含む。ディジタル化された信号はレジスタ１Ａｈを介して選択され、そのレジスタのデフォルト値は００００ｈであり、ＭＩＣ入力を選択する。これは２０ビットのスロットで、１８ビットのＰＣＭデータはＭＳＢから先に返され、最後に残った２ビットは０である。
ＳＤＡＴＡＩＮスロット５：モデム１ＡＤＣ
スロット５はモデム・ライン１ＡＤＣ出力データを含む。
ＳＤＡＴＡＩＮスロット６：マイクロホン・レコード・データ
スロット６はマイクロホン・レコード・データを含む。
【００４０】
ＳＤＡＴＡＩＮスロット７−９：予約（１スロット・タッチスクリーン？）
現在これらのスロットは予約であるが、スロットからデータが要求された場合は受信ＦＩＦＯは送られたデータを受け付けることができる。
ＳＤＡＴＡＩＮスロット１０：モデム２ＡＤＣ
スロット１０はモデム・ライン２ＡＤＣ出力データを含む。
ＳＤＡＴＡＩＮスロット１１：ヘッドセットＡＤＣ
スロット１１はヘッドセットＡＤＣ出力データを含む。
ＳＤＡＴＡＩＮスロット１２：
スロット１２はＩＯ状態データを含む。
【００４１】
ＳＤＡＴＡＩＮへの入力データはコントローラがＢＩＴＣＬＫの立下がりエッジでサンプリングする。
外部コーデックを起動する前に、コントローラはコーデックが「コーデック作動可能」であることを示すオーディオ・フレーム入力内の第１ビット（ＳＤＡＴＡＩＮスロット０、ビット１５）をポーリングしなければならない。
スロット０で受信した第１ビットはグローバル・ビットで、これはコーデックが「コーデック作動可能」状態であるかどうかを示すフラグである。「コーデック作動可能」が０の場合はコーデックの通常の作動が可能でないことを示す。「コーデック作動可能」が１の場合は、制御レジスタと状態レジスタは完全に作動状態にある。次にユーザは更に別の制御／状態レジスタを調べて、作動可能な装置部分があるかどうか判定しなければならない。
【００４２】
図３から分かるように、ＳＹＮＣ信号毎に各データ・スロットを一度サンプリングすることができる。前に述べたように、好ましい実施の形態ではＳＹＮＣ信号は４８ｋＨｚに固定されている。しかしＳＤＡＴＡＩＮスロット１の以前の説明から明らかなように、コーデックはスロット３から１２で禁止要求ビットを出すことができるので、これらの１０スロットは可変サンプリング速度を持つことができる。本発明の好ましい実施の形態のコントローラは新規な構造を持ち、スロット毎に別個のデータ・バッファを設けなくても可変サンプリング速度スロットと固定サンプリング速度スロットを支援することができる。好ましい実施の形態のコントローラの構造を図４に示す。
【００４３】
図４に示すように、コントローラは４つのチャンネル１１０、１２０、１３０、１４０を備える。好ましい実施の形態では、各チャンネルは、ＡＣリンクに出力するデータ項目のための送信データ・バッファと、ＡＣリンクから受信するデータ項目のための受信データ・バッファと、送信データ・バッファと受信データ・バッファのための別々の制御レジスタを内蔵する。好ましい実施の形態では、データ・バッファはＦＩＦＯで実現される。全てのＡＣリンク・スロットを支援するのに必要なチャンネルの最小数は４であることが分かっており、これによりモデム、オーディオ、ヘッドセット、マイクロホンのチャンネル間を独立にすることができる。
【００４４】
コントローラが各フレームの全てのスロットを支援できるようにするために、好ましい実施の形態のコントローラは、データ要素の複数のグループのサンプリング速度が同じであるという仮定に基づいている。したがって、全てのオーディオ・データは同じサンプリング速度であり、全てのモデム・データは同じサンプリング速度であると仮定する。例えば、外部コーデックがＰＣＭＬＥＦＴ、ＰＣＭＲＩＧＨＴ、ＭＯＤＥＭ１、ＰＣＭＣＥＮＴＲＥ、ＰＣＭＬＳＵＲＲＯＵＮＤ、ＰＣＭＲＳＵＲＲＯＵＮＤ、ＰＣＭＬＦＥ、ＭＯＤＥＭ２、ＨＳＥＴのチャンネルを支援する場合は、送信データ・バッファでは全てのオーディオ・データはチャンネル１を通り、モデム・データはチャンネル２を通り、ＨＳＥＴデータはチャンネル３を通るようにチャンネル内の制御レジスタをプログラムしてよい。またコントローラはＭＩＣデータを異なる速度で受信し、これをチャンネル４を通して受信することができる。または、受信データ・バッファの各チャンネルに別個の制御レジスタが設けられるので、ＭＩＣデータは適当と考えられる任意の他のチャンネルを通して受信することができる。
【００４５】
各ＦＩＦＯに関連する制御レジスタを設けることにより、コントローラは特定のデータ要素に関するデータ項目を極めて柔軟に処理することができる。詳しく述べると、制御レジスタ内の制御データをセットすることによりどのデータ要素のためのデータ項目を対応するデータ・バッファ内に記憶するかを規定することができるので、任意のデータ・バッファを用いてフレーム内の任意のデータ・スロットと授受する任意のデータ項目を記憶することができる。しかし好ましい実施の形態では、この自由度を制限して任意の特定のデータ・バッファ内に記憶されるデータ項目が同じサンプリング速度を持つデータ要素だけに関係するようにして、ＦＩＦＯバッファを用いてコントローラ内の制御機構を簡単化する。
【００４６】
図５は、図４に示すチャンネル１１０内の要素の詳細を示す。好ましい実施の形態では、４つのチャンネルはそれぞれ同じ構造を有する。チャンネル１１０の受信部は受信制御レジスタ２３０を介して制御される。このレジスタは、どのデータ要素のためのデータ項目を関連するＦＩＦＯバッファ２１０内に記憶するか、したがってオーディオ・フレーム内のどのデータ・スロットからデータ項目をＦＩＦＯバッファ２１０内に記憶するか、を識別する制御データを含む。前に述べたように、受信制御レジスタ２３０内の制御データは、ＦＩＦＯ２１０内に記憶されている全てのデータ項目が同じサンプリング速度になるようにセットしなければならない。
【００４７】
どのデータ要素のためのデータ項目をＦＩＦＯバッファ２１０内に記憶するかを規定するだけでなく、制御レジスタ２３０はデータ項目の実際に必要なビット数も識別する。前に述べたように、データ項目はデータ・スロットで転送するときは固定サイズ（好ましい実施の形態では２０ビット）で表すが、データ項目の実際のサイズは２０ビット以下でよい。好ましい実施の形態では、受信制御レジスタ２３０は、マイクロプロセッサとコントローラとの間のデータ項目の転送方法に影響を与えるコンパクト・モードを可能にするフィールドも含む。このコンパクト・モードについては後で詳細に説明する。
【００４８】
図６は、本発明の好ましい実施の形態に係る、受信制御レジスタ２３０内の種々の制御データ・ビットの関連を示す表である。必要であれば制御レジスタは、例えばＦＩＦＯが使用可能かどうかを示したり、タイムアウト・カウント値を与え（例えばＦＩＦＯが空でないのに或る時間他のデータを受信しなかったときに、関連するＦＩＦＯはタイムアウト割込みを発生する機能を有する）たりする追加のビットを記憶してもよい。
【００４９】
次にチャンネル１１０の送信部に移ると、これは送信制御レジスタ２２０を介して制御される。このレジスタは、オーディオ・フレームのどのデータ・スロットで関連するＦＩＦＯ２００内のデータ項目を送信するか、すなわちどのデータ要素のためのデータ項目をＦＩＦＯ２００内に記憶するか、を指定するのに用いられる。チャンネルの受信部と同様に、好ましい実施の形態に係る制御データは、ＦＩＦＯ２００内の全てのデータ項目が同じサンプリング速度を持つデータ・スロットに用いれられるようにセットしなければならない。また好ましい実施の形態では、データ項目は最小のスロット番号から先に出して、適当な順序でフレーム生成器／デコーダ１００に送るようにしなければならない。また制御レジスタ内のデータは、マイクロプロセッサ２０からコントローラ３０に送るデータのデータ項目の長さを２０ビットにするために追加すべきビット数を識別する。受信制御レジスタと同様に、好ましい実施の形態ではコンパクト・モード動作を可能にするためのフィールドも設ける。図７は、送信制御レジスタ２２０内の種々の制御データ・ビットの意味を示す表である。
【００５０】
また好ましい実施の形態では、制御レジスタ２２０はデータ項目を送信する前にＦＩＦＯ２００内に置かなければならないデータ語の数を識別するのにも用いられる。ＦＩＦＯ２００内に十分なデータ項目が存在しないときにコーデック７０がチャンネルを通すデータ・スロットのデータ項目を要求した場合は、好ましい実施の形態ではアンダーフロー割込みが発生する。理解されるように、ＦＩＦＯ内のデータ項目の数は、そのデータ項目をＦＩＦＯ内に記憶することのできるデータ要素の数（送信制御レジスタ２２０内のＴＸビットで示す）以上でなければならない。
【００５１】
またチャンネルの送信部は、外部コーデックから入力データ・ストリームのスロット１で送信されるデータ要求禁止ビットを介して、可変サンプリング速度を支援する。これらのビットはフレーム生成器／デコーダ１００で復号され、図４に示す該当するチャンネル１１０、１２０、１３０、１４０に送られ、次の出力オーディオ・フレームでこれらのチャンネルからデータ項目を出力すべきかどうかを示す。
【００５２】
また好ましい実施の形態では、送信ＦＩＦＯ２００内の有効語のビットを用いて、ＦＩＦＯ内の対応するデータ項目が有効であって次の利用可能なフレームで送ることができるかどうか判定する。送信のスロット０は、送信制御レジスタ２２０内の値と、データ要求禁止ビットと、有効な送信データを有するＦＩＦＯに基づいて、コントローラが決定する。或るスロットが或るフレーム内に送信データを持たない場合は、コントローラは対応するデータ・スロットに０を入れる。前に述べたように、次のフレームでデータを出力ことをデータ要求禁止ビットが指示しているのに対応するＦＩＦＯ内にデータ項目がない場合は、コントローラはアンダーフロー割込みを発生させる。コーデックは所定のサンプリング速度の全てのデータ要求禁止ビットを同時にセットする（例えば、オーディオ・データの全てのデータ要求禁止ビットを同時にセットする）と仮定する。前に述べたように、好ましい実施の形態では同じサンプリング速度を持つデータ項目は好ましくは同じ送信ＦＩＦＯ２００内に記憶されており、要求されたときは好ましくはＦＩＦＯ内に送信データ項目が存在しなければならない。
【００５３】
外部コーデックがデータ要求禁止ビットをサポートしていない場合はこれらのビットは常に０にセットされて、標準サンプリング速度の４８ｋＨｚであることを示す。しかし前に述べたように、外部コーデックがデータ要求禁止ビットをサポートしているかどうかに関わらず、データ要求禁止ビットはコントローラがデータ項目を送信する準備をしていないデータ・スロットには影響を与えない。かかるデータ・スロットについては、コントローラは次のフレームで０を出力する。
【００５４】
好ましい実施の形態ではスロット１と２は常に４８ｋＨｚで送信されるので、外部コーデックはこれらのスロットにデータ要求禁止ビットを与えない。本発明の好ましい実施の形態では、図４に示すように別々のレジスタ１５０、１６０、１７０を設けてスロット１２、１、２のデータ項目をそれぞれ記憶する。したがってスロット１、２、１２で送信されるデータは、チャンネル１１０、１２０、１３０、１４０がこれらのデータ・スロットに関連するデータ項目を記憶するよう決められている場合はこの４つのチャンネルの１つから、またはレジスタ１５０、１６０、１７０から直接、得ることができる。好ましい実施の形態では、制御データをセットすることにより特定のスロットのデータ項目の発信源を１つに制限しなければならない、そのため、レジスタ１５０、１６０、１７０をスロット１２、１、２のデータ項目に用いる場合は、チャンネル１１０から１４０内の制御レジスタの関係する制御ビットはセットせず、これらのチャンネルがこれらのスロットのデータ項目を処理しないようにしなければならない。しかしこれらのデータ・スロットのデータがレジスタ１５０、１６０、１７０とチャンネル１１０から１４０の１つに存在する場合は、コントローラにデフォルト値をセットする（例えばデータ項目をまず関連するチャンネルで送る）ことができる。
【００５５】
好ましい実施の形態では、スロット１、２、１２のデータ項目を受信するとき、関連する制御ビットが関連する制御レジスタ内ですでにセットされている場合は、データ項目は該当するチャンネル内に記憶し、レジスタ１５０、１６０には記憶しない。しかし関連する制御ビットがチャンネル内にセットされていない場合は、データ項目は必ずレジスタ１５０、１６０に入る。
好ましい実施の形態では、外部コーデックが作動準備中のときは、各チャンネルはスロット１と２のデータを送信することにだけ用いられる。外部コーデックの準備が完了したとき、スロット１と２のデータ項目はレジスタ１６０、１７０を介して送るのが好ましい。これにより利用可能なチャンネルを空けることができる。
【００５６】
次に図５に戻って、アンパッカ２４０、リサイザ２４５、リサイザ２５５、パッカ２５０の目的について詳細に説明する。まず送信アンパッカ２４０であるが、前に述べたように送信制御レジスタ２２０はコンパクト・モード（ＣＭ）ビットを有し、これをセットすることによりマイクロプロセッサ２０からのデータは３２ビット語か１６ビット語かを決定する。また送信制御レジスタは、送信すべきデータ項目の実際のサイズを示すＴＳＩＺＥビットを含む。データ項目の長さが１２ビットまたは１６ビットを示すようＴＳＩＺＥビットがセットされ且つＣＭビットがセットされた（好ましい実施の形態では論理１の値に）場合は、マイクロプロセッサからコントローラに送られる３２ビット語は２つのデータ項目を含む。このときアンパッカ２４０は３２ビット語を２つの１６ビット成分に分割するのに用いられる。注意すべきであるが、このコンパクト・モードはＴＳＩＺＥビットが１２ビットまたは１６ビットにセットされた場合だけ動作し、１８ビットまたは２０ビットにセットされた場合は動作しない。また、ＣＭビットがセットされていない（すなわち、好ましい実施の形態では論理０値にセットされている）場合は、マイクロプロセッサからコントローラに送られる３２ビット語は、ＴＳＩＺＥが１２ビットまたは１６ビットにセットされている場合でも内容は１つのデータ項目だけを含む。好ましい実施の形態では、ＣＭビットがセットされている場合は、ＦＩＦＯバッファは偶数のデータ項目（例えば、スロット３と４のデータ項目であって、スロット３、４、５のデータ項目ではない）を受け入れるようにしなければならない。
【００５７】
アンパッカ２４０が必要なアンパッキングを行うと、送信リサイザ２４５により各データ項目のサイズを２０ビット表現に変更する。前に述べたように、送信制御レジスタ内のＴＳＩＺＥビットはマイクロプロセッサから受信したデータ項目の実際のサイズを示す。したがって要求に応じてデータをアンパックすると、リサイザ２４５はデータ項目を所要量だけ左にシフトして２０ビット語を作り、ＦＩＦＯ２００内に記憶する。好ましい実施の形態では最下位の各ビットに０を入れる。ＴＳＩＺＥが２０にセットされている場合は、左シフトも０注入も必要ない。また注意すべきであるが、好ましい実施の形態ではデータ項目はＦＩＦＯで最小のスロット番号から先に記憶して、後でこれらのデータ項目をフレーム生成器／デコーダ１００に適当な順序で与えることができるようにする。例えば、データスロット３と４に関するデータ項目を記憶するようＦＩＦＯ２００を準備した場合は、先にスロット３のデータ項目をＦＩＦＯに入れ、次にスロット４のデータ項目をＦＩＦＯに入れる。ＴＳＩＺＥが１２ビットまたは１６ビットにセットされ且つコンパクト・モードがセットされた場合は、マイクロプロセッサから受信したデータ語内のビット１５：０はスロット３のデータ項目を含み、ビット３１：１６はスロット４のデータ項目を含まなければならない。
【００５８】
出力オーディオ・フレームをフレーム生成器／デコーダで構築するときは、データ項目をＦＩＦＯバッファ２００から２０ビット語ずつ取り出す。フレーム生成器／デコーダ１００は並列直列シフト変換器を内蔵する。この変換器はデータ項目のビットを最上位ビットから先に出力する。
チャンネル１１０の受信部に戻り、データ項目を直列並列シフト変換器からＦＩＦＯに読み取るときデータは最上位ビットから先に与えられる。ＦＩＦＯが満杯であるのに受信チャンネルが更にデータを受信した場合は受信オーバーラン割込みが用いられる。
【００５９】
前に述べたように、オーディオ・フレームのデータ・スロットで転送するときデータ項目は２０ビットの固定長であり、これらの２０ビットのデータ項目は受信ＦＩＦＯ２１０内に記憶される。受信制御レジスタ２３０内のＲＳＩＺＥビットは受信バッファ２１０内に記憶されたデータ項目の実際のサイズを示す。２０ビットのデータをＦＩＦＯから読み出してマイクロプロセッサに送信するときに、リサイザ２５５はこのＲＳＩＺＥビット情報を用いて最下位ビット（ＬＳＢ）を調整する。ＲＳＩＺＥビットが１２ビット、１６ビット、１８ビットのデータ項目を示すようセットされている場合は、リサイザ２５５はＦＩＦＯからの２０ビットのデータを必要量だけ右にシフトして、データ項目の正しいデータサイズを形成する。例えば、データ項目の長さが１２ビットであることをＲＳＩＺＥが示す場合は、ＦＩＦＯからの２０ビット語を８ビット位置だけ右にシフトする。次にリサイザはデータ語の最上位の各ビットに０を入れる。またコンパクト・モード・ビットはリサイザ２５５が作成したデータ語のサイズを決定する。
【００６０】
また注意すべきであるが、受信チャンネル内のデータ項目は最小のスロット番号から先に出さなければならない。したがって、例えば受信ＦＩＦＯ２１０がデータ・スロット３と４からのデータ項目を記憶するよう準備されている場合は、ＦＩＦＯからの最初のデータ項目はスロット３に関係し、次のデータ項目はスロット４に関係する。ＲＳＩＺＥの値が１２ビットまたは１６ビットにセットされていて且つコンパクト・モード・ビットがセットされた場合は、好ましい実施の形態ではスロット３に関するデータ項目はマイクロプロセッサに送信されるデータ語のビット１５：０に含まれ、スロット４のデータ項目はこのデータ語のビット３１：１６に含まれる。
【００６１】
この過程は受信パッカ２５０が行い、ＣＭビット情報とＲＳＩＺＥビット情報に基づいて、２つのデータ項目を１つのデータ語にまとめてマイクロプロセッサに送ることができるかどうか判断する。詳しく述べると、コントローラが出力する３２ビット語を２つのデータ項目で構成することができる場合は、パッカ２５０はリサイザ２５５からの２つのデータ語を結合して１つの３２ビット語にする。前にチャンネルの送信部の説明で述べたように、コンパクト・モードはＲＳＩＺＥビットを１２ビットまたは１６ビットにセットしたときだけ動作する。また、コンパクト・モードがセットされていない場合は、ＲＳＩＺＥが１２ビットまたは１６ビットにセットされていても、コントローラから出力される３２ビット語の内容は１データ語だけである。またコンパクト・モードがセットされている場合は、ユーザはＦＩＦＯチャンネルが偶数のデータ項目を受信するよう準備されている（例えばスロット３と４のデータ項目であってスロット３、４、５のデータ項目ではない）ことを確認しなければならない。
【００６２】
当業者が理解するように、リサイザ２４５および２５５、パッカ２５０、および／またはアンパッカ２４０の１つまたは複数の機能をチャンネルの外部に設けて１個の論理ユニットにより全てのチャンネルのこれらの機能を処理し、チャンネルの制御レジスタを介して制御することもできる。
【００６３】
本発明の好ましい実施の形態に係るフレーム生成器／デコーダ１００の動作について、図８と図９の流れ図を参照して以下に詳細に説明する。まず図８は、フレーム生成器／デコーダ１００が出力フレームＸを生成する流れを示す。ステップ３００で始まり、流れはステップ３２０に進んで、前の入力フレームＸ−１のスロット１からのデータ要求禁止ビットを調べる。前に述べたように、データ要求禁止ビットが外部コーデックにより支援されていない場合はこれらのビットは０にセットされており、これは全てのデータスロットに標準のサンプリング速度を用いなければならないことを示す（したがって好ましい実施の形態では全てのデータ・スロットのデータ項目は理論的には次のフレーム（フレームＸ）で出力しなければならない）。しかしデータ要求禁止ビットが外部コーデックにより支援されている場合は、１つまたは複数のビットが１にセットされており、対応するデータ・スロットのデータ項目をフレームＸで出力してはならないことを示す。
【００６４】
データ要求禁止ビットが支援されているかどうかに関わらず、コントローラはコントローラが記憶するよう準備されているデータ要素に対応するデータ・スロット内のデータ項目だけを出力することができる。したがって一例として、コントローラのどの送信ＦＩＦＯもモデム・ライン１のデータを処理するよう準備されていない場合は、関連するデータ要求禁止ビットの値に関わらず、コントローラは対応するデータ・スロット（データ・スロット５）で有効データを出力することができない。したがって、ステップ３２０でデータ要求禁止ビットを調べるだけでなく、流れはステップ３３０に進んで、送信制御レジスタ内の制御データを参照する。この制御データとデータ要求禁止ビットの値に基づいて、フレーム生成器１００はどのデータ・スロットのためのデータ項目が出力フレームＸで要求されているか判定する。したがって好ましい実施の形態では、関連するデータ要求禁止ビットが０にセットされ、制御データが送信ＦＩＦＯの１つがそのデータ・スロットのデータ項目を処理するセットされている場合、一つのデータ・スロットが必要である。
【００６５】
次に流れはステップ３４０に進み、全ての要求されたスロットのデータ項目が利用可能かどうか判定する。前に述べたように、好ましい実施の形態では、コントローラはデータ・バッファ内に十分なデータ項目が常に存在するように管理するので、全ての要求されたスロットのデータ項目が利用可能であるはずであり、このとき流れはステップ３６０に進む。しかしいくつかのデータ項目が利用可能でない場合は流れはステップ３５０に分岐し、割込みが発生する。理解されるように、割込みは多くの異なる方法で処理することができる。例えば、割込みを用いて、要求されたデータ項目をメモリから関連するデータ・バッファに取り出した後、流れを再開してよい。受信ＦＩＦＯと送信ＦＩＦＯに常に十分なデータ項目が存在するようにコントローラがこれらのＦＩＦＯを管理する方法については、後で図１０と図１１を参照して詳細に説明する。
【００６６】
流れがステップ３４０からステップ３６０に進んだ場合は、フレーム生成器１００はスロット０のデータを生成してこれを転送する。前に述べたように、スロット０のデータは、コントローラの関連するデータ・バッファ内のデータ項目の有効性と、送信制御レジスタ内の値と、可変速度が可能な場合のフレームＸ−１の入力スロット１からの禁止要求ビットの値、に基づいて生成される。スロット０のデータを転送する前に、ＡＣリンクに出力するために並列直列変換器を用いてスロット０のビットを直列データ・ストリームに変換する。
【００６７】
ＡＣリンクで送信のためのデータ転送が一度行われると、ステップ３７０で変数「ｎ」を１にセットし、次にステップ３７５に進んでスロットｎのデータ項目が要求されているかどうか判定する。この判定は、前にステップ３３０で決定した情報を参照してコントローラが行う。このスロットのデータ項目が要求されていない場合は、コントローラはステップ３７８で全て０のデータ項目を生成する。次に流れはステップ４００に進み、並列直列変換を行い、データを転送して、ＡＣリンクで送信するデータ・フレームの該当するスロットで送信する。
【００６８】
ステップ３７５で、スロットｎにデータ項目が要求されていると判定した場合は、流れはステップ３８０に進んでどのチャンネルがスロット（ｎ）のデータ項目を有するか判定する。この判定を行うため、フレーム生成器１００は送信ＦＩＦＯに関連する送信制御レジスタ内のデータを調べる。これらの制御レジスタは、対応する送信ＦＩＦＯがどのデータ要素（したがってどのデータ・スロット）のデータ項目を記憶しているかを識別する制御データを含む。この判定を行った後、ステップ３９０でフレーム生成器１００は関連するチャンネルの送信ＦＩＦＯからデータ項目を読み出し、次に流れはステップ４００に進んで並列直列変換を行い、データを転送して、ＡＣリンクで送信するデータ・フレームの該当するスロットで送信する。
【００６９】
次に、各フレーム内のデータ・スロット（スロット０を除く）の数ｎMAXに対して、ステップ４１０でｎがｎMAXに等しいかどうか判定する。ｎがｎMAXに等しい場合は流れはステップ４３０に進んで終了する。等しくない場合は流れはステップ４２０に進み、ｎを１だけ増分してステップ３７５に戻り、次のデータ・スロットのデータ項目を生成する。
【００７０】
図９は、ＡＣリンクから受信したデータの入力フレームを復号するときの、好ましい実施の形態で行われる流れを示す流れ図である。流れはステップ５００で始まり、ステップ５１０に進んでスロット０を受信してキャッシュ内に記憶する。この流れでは、スロット０のデータは直列並列変換器を通って、キャッシュ内に記憶するデータ項目を生成する。このデータは入力データ・フレームの残りのスロット内のデータの有効性を示すのでキャッシュ内に記憶し、フレーム・デコーダ１００は入力フレームを復号するときにこれを参照する必要がある。
次にステップ５２０で変数「ｎ」を１にセットした後、流れはステップ５３０に進んでスロットｎからのデータ項目を２０ビットのレジスタに読み込む。この場合も、流れはＡＣリンクから受信した直列データの直列並列変換を行い、レジスタ内に記憶する２０ビットのデータ項目を生成する。
【００７１】
次に流れはステップ５４０に進み、このデータ項目が有効かどうか判定する。この流れは、データ項目が有効かどうかを調べるために、ステップ５１０でフレーム・デコーダ１００がキャッシュ内に記憶したスロット０のデータを調べることを含む。データ項目が無効な場合は、流れはステップ５４５に進んでｎが１かどうか判定する。１の場合は流れはステップ５７０に進む。ステップ５７０については後で説明する。しかしｎが１でない場合は流れはステップ５８０に進み、ｎがｎMAXに等しいかどうか、すなわちフレーム内の最後のデータ・スロットを受信したかどうか判定する。等しい場合は流れはステップ５９０に分岐して終了する。等しくない場合は流れはステップ５８５に進み、ｎを１だけ増分してステップ５３０に戻り、入力フレーム内の次のスロットからデータ項目を読み取る。
【００７２】
ステップ５４０で現在のデータ・スロットのデータ項目が有効であると判定した場合は、ステップ５５０でどのチャンネルがスロットｎのデータ項目を記憶するかを判定する。フレーム・デコーダ１００は各チャンネル内の受信ＦＩＦＯに関連する受信制御レジスタを参照してこの判定を行う。これらの受信制御レジスタは、対応する受信ＦＩＦＯがどのデータ要素（したがってどのデータ・スロット）のデータ項目を記憶しているかを識別する制御データを含む。
【００７３】
該当するチャンネルを識別すると、ステップ５６０でデータ項目を２０ビットのレジスタから関連するチャンネルの受信ＦＩＦＯに送る。更にステップ５７０で、ｎが１の場合はデータ項目をキャッシュにも記憶する。これは後でフレーム生成器／デコーダ１００が後続の出力フレームの送信確認を行うのに用いる。この流れについては図８を参照してすでに説明した。
次に流れはステップ５８０に戻り、ｎがｎMAXに等しいかどうか判定する。等しい場合は流れは終了する。等しくない場合はｎを１だけ増分して、流れはステップ５３０に戻る。
【００７４】
フレーム生成器／デコーダ１００が出力フレームを生成しまた入力フレームを復号する方法を上に説明したが、次に、コントローラ内で特定のチャンネルの受信および送信ＦＩＦＯの内容を管理する流れについて、図１０と図１１を参照して詳細に説明する。図１０は、コントローラが受信ＦＩＦＯの内容を管理する方法を示す流れ図である。好ましい実施の形態では、この流れは受信ＦＩＦＯ毎に独立に行われる。まずステップ６００で、関連する受信制御レジスタから、受信ＦＩＦＯに記憶するデータ項目を有するデータ要素の数（変数Ｚとする）を決定する。したがって、対応するＦＩＦＯがスロット３と４のデータ項目を記憶することを制御レジスタ内の制御データが示す場合はＺは２である。
【００７５】
次にステップ６１０で、Ｚの値に従ってＦＩＦＯの変数「ＭＡＸＮＵＭＢＥＲ」を決定する。理解されるように、ＭＡＸＮＵＭＢＥＲの適当な値を決定するのに種々のアルゴリズムを用いてよい。例えば、ＦＩＦＯが６項目を記憶することが可能であり且つＺが２の場合は、該当するＭＡＸＮＵＭＢＥＲは２か４でよい。ＭＡＸＮＵＭＢＥＲを６にセットとした場合は、何らかの方法で受信ＦＩＦＯからメモリにデータ項目を移す前にＦＩＦＯは満杯になることを意味する。これでは後続の入力フレームで受信した新しいデータ項目を受信ＦＩＦＯに記憶することができないので、明らかに良くない。
【００７６】
ＭＡＸＮＵＭＢＥＲが決まると流れはステップ６２０に進み、ＦＩＦＯ内のデータ項目の数がＭＡＸＮＵＭＢＥＲ以上かどうか判定する。データ項目の数がＭＡＸＮＵＭＢＥＲ以上でない場合は流れはステップ６２０に戻り、以上である場合はステップ６３０に進む。ステップ６３０で、マイクロプロセッサが所定数（以後「ＰＺ」で表し、Ｐは整数）のデータ項目をＦＩＦＯから読み出すようコントローラはマイクロプロセッサに要求する。これにより、データ項目をＦＩＦＯからメモリに読み出したとき、ＦＩＦＯが管理するデータ項目を有するデータ要素の数は必ず整数になる。例えば、受信ＦＩＦＯが３個のデータ要素（例えばデータ・スロット３、４、５）のデータ項目を記憶している場合は、マイクロプロセッサは受信ＦＩＦＯから３の倍数のデータ項目だけを読み出す。
ステップ６３０を実行すると、流れはステップ６２０に戻る。好ましい実施の形態では、ステップ６２０をクロック・サイクル毎に繰り返す。
【００７７】
次に送信ＦＩＦＯの管理に移り、図１１にこの流れの詳細を示す。好ましい実施の形態では、この流れは送信ＦＩＦＯ毎に独立に行われる。ステップ７００で、コントローラは特定の送信ＦＩＦＯの送信制御レジスタから、ＦＩＦＯに記憶してよいデータ項目を有するデータ要素の数Ｚを決定する。これは図１０に示したステップ６００と同様である。
【００７８】
次に流れはステップ７１０に進み、Ｚの値に従って送信ＦＩＦＯの変数「ＭＩＮＮＵＭＢＥＲ」を決定する。当業者に理解されるように、この場合もＭＩＮＮＵＭＢＥＲの適当な値を決定するのに種々のアルゴリズムを用いてよい。好ましい実施の形態では、ＭＩＮＮＵＭＢＥＲはどんな場合でもＺ以上の値を選択する。なぜなら、データ・フレームのデータ・スロットで送信するためにデータ項目を送信ＦＩＦＯから読み出すとき特定のフレームのＺ個のデータ項目を読み出すので、送信ＦＩＦＯには少なくともＺ個のデータ項目が存在しなければならないからである。
【００７９】
変数ＭＩＮＮＵＭＢＥＲが決まると、流れはステップ７２０に進んで送信ＦＩＦＯ内のデータ項目の数がＭＩＮＮＵＭＢＥＲ以下かどうか判定する。データ項目の数がＭＩＮＮＵＭＢＥＲ以下でない場合は流れはステップ７２０に戻り、以下の場合はステップ７３０に進む。
【００８０】
ステップ７３０で、送信ＦＩＦＯに記憶する所定数「ＰＺ」（Ｐは整数）のデータ項目を送るようコントローラはマイクロプロセッサに要求する。これにより、マイクロプロセッサはＦＩＦＯに記憶するデータ項目の該当する数を送る。例えば、ＦＩＦＯがデータ・スロット３、４、５のデータ項目を記憶している場合は、これによりマイクロプロセッサは３の倍数の多数のデータ項目を送る。例えば、３個のデータ項目をスロットに１つ、スロット４に１つ、スロット５に１つ送る。
ステップ７３０を実行すると流れはステップ７２０に戻り、再び送信ＦＩＦＯ内のデータ項目の数がＭＩＮＮＵＭＢＥＲ以下かどうか判定する。好ましい実施の形態では、ステップ７２０をクロック・サイクル毎に繰り返す。
【００８１】
当業者に理解されるように、図１０と図１１に示した流れを変更しても、やはり送信および受信ＦＩＦＯを効率的に管理することができる。例えば簡単化された方法として、データ要素の数Ｚは各制御レジスタ内にセットされた制御データに従って変化するので、ＭＡＸＮＵＭＢＥＲとＭＩＮＮＵＭＢＥＲをＺに従わせず、固定数であるＦＩＦＯ内の項目の総数に従ってセットしてよい。一例を挙げると、ＦＩＦＯが８つの項目を持つ（したがって８つのデータ項目を記憶することができる）場合は、ＭＡＸＮＵＭＢＥＲとＭＩＮＮＵＭＢＥＲを４（すなわち、ＦＩＦＯのサイズの半分）にセットするとよい。これにより、図１０のステップ６００および６１０と、図１１のステップ７００および７１０はなくなる。しかしステップ６３０と７３０を参照すると、どの転送シーケンスでもやはりデータ項目の所定数ＰＺをＦＩＦＯとメモリとの間で転送することが好ましい。
【００８２】
本発明の特定の実施の形態について説明したが、本発明はこれに限定されるものではなく、発明の範囲内で種々の変更や追加が可能なことは明らかである。例えば、本発明の範囲から逸れることなく特許請求の範囲の各請求項の特徴を種々に結合することができる。
【図面の簡単な説明】
本発明について、以下の図面に示す好ましい実施の形態を参照して説明した。
【図１】本発明の好ましい実施の形態に係る、コントローラを用いるチップのブロック図。
【図２】本発明の好ましい実施の形態に係る、コントローラとオーディオ・コーデックとの間のインターフェースを示す図。
【図３】出力および入力のデータ・ストリームのオーディオ・フレームの内容を示す図。
【図４】本発明の好ましい実施の形態に係る、コントローラの要素の詳細を示すブロック図。
【図５】本発明の好ましい実施の形態に係る、コントローラ内に設けられたチャンネルの詳細を示すブロック図。
【図６】本発明の好ましい実施の形態に係る、受信データ・バッファに関連する制御レジスタ内の制御データを示す表。
【図７】本発明の好ましい実施の形態に係る、送信データ・バッファに関連する制御レジスタ内の制御データを示す表。
【図８】本発明の好ましい実施の形態に係る、出力フレームを生成する流れを示す流れ図。
【図９】本発明の好ましい実施の形態に係る、入力フレームを復号する流れを示す流れ図。
【図１０】本発明の好ましい実施の形態に係る、受信データ・バッファを管理する流れを示す流れ図。
【図１１】本発明の好ましい実施の形態に係る、送信データ・バッファを管理する流れを示す流れ図。
【符号の説明】
３０  コントローラ
６０  データ・リンク
１１０−１４０  チャンネル
２００，２１０  データ・バッファ
２２０，２３０  制御レジスタ
【図１】
0004621368.tif 000002
【図２】
0004621368.tif 000003
【図３】
0004621368.tif 000004
【図４】
0004621368.tif 000005
【図５】
0004621368.tif 000006
【図６】
0004621368.tif 000007
【図７】
0004621368.tif 000008
【図８】
0004621368.tif 000009
【図９】
0004621368.tif 000010
【図１０】
0004621368.tif 000011
【図１１】
0004621368.tif 000012