(57)【特許請求の範囲】
【請求項１】
メモリへのメモリ・アクセス動作を制御するダイレクト・メモリ・アクセス（ＤＭＡ）制御装置であって、
少なくとも１つのＤＭＡコマンドを受信および記憶するレジスタ手段であって、各ＤＭＡコマンドは長さフィールドを含み、この長さフィールドはメモリから読み取るまたはメモリに書き込むべきデータ・ワードの総数を示すとともにバイト・スワッピング方式の１つを指定するための複数の信号ビットを有する、レジスタ手段と、
メモリから読み取るまたはメモリに書き込むべきデータ・ワードを受信し、指定されたバイト・スワッピング方式に従ってこのデータ・ワードのバイトをスワップするスワッピング手段と、
を含むＤＭＡ制御装置。
【請求項２】
スワッピング手段はマルチプレクサ手段を含み、
このマルチプレクサ手段は、指定されたバイト・スワッピング方式に従って、可能な複数のバイト・スワッピング方式の各々にそれぞれが対応している複数の入力から１つの入力を選択し、スワップされたバイトを有する修正済みデータ・ワードを出力する、
請求項１に記載のＤＭＡ制御装置。
【請求項３】
データ・ワードがダブル・ワードのデータである請求項１に記載のＤＭＡ制御装置。
【請求項４】
ダイレクト・メモリ・アクセス（ＤＭＡ）制御装置においてＤＭＡ動作を実行する方法であって、
メモリから読み取る、またはメモリに書き込むべきデータ・ワードを指示するＤＭＡコマンドであって、データ・ワードの総数を示すと共にバイト・スワッピング方式の１つを指定するための複数の信号ビットを有する長さフィールドを含むＤＭＡコマンドを入力する段階と、
データ・ワードを入力する段階と、
指定されたバイト・スワッピング方式に従ってデータ・ワードのバイトをスワップする段階と
を含む方法。
【請求項５】
データ・ワードのバイトをスワップする段階が、
複数の可能なバイト・スワッピング方式の１つに従ってデータ・ワードをそれぞれ表す複数のバージョンのデータ・ワードを生成する段階と、
それらのバージョンの１つを、指定されたバイト・スワッピング方式に従って、修正済みデータ・ワードとして出力する段階と
を含む請求項４に記載の方法。
【請求項６】
周辺機器と連動するダイレクト・メモリ・アクセス（ＤＭＡ）制御装置においてＤＭＡ動作を実行する方法であって、
ＤＭＡコマンドの位置を指定するポインタを受信する段階と、
ポインタの受信に応答してＤＭＡコマンドにアクセスする段階であって、アドレス部分と長さ部分とを含み、その長さ部分はデータ・ワードについて実行すべきバイト・スワッピング方式の１つを指定する複数ビットを含み、メモリから読み取るべきそれぞれが複数バイトを含む複数のデータ・ワードを指示するＤＭＡコマンドにアクセスする段階と、
メモリからデータ・ワードを読み取る段階と、
バイト・スワッピング方式に従ってデータ・ワード内で再配列しながら、これらのデータ・ワードを周辺機器に提供する段階と
を含み、
データ・ワードのバイトを再配列する段階が、
複数の可能なバイト・スワッピング方式の１つに従ってデータ・ワードをそれぞれ表す複数バージョンのデータ・ワードを生成する段階と、
それらのバージョンの１つを、ＤＭＡコマンドが指定するバイト・スワッピング方式に従って修正済みデータ・ワードとして出力する段階と
を含む、
方法。
【請求項７】
ＤＭＡコマンドが、ダブル・ワード整列されたメモリの部分を指定し、バイト・スワッピング方式の１つを指定する複数ビットが長さ部分の２つの最下位ビットから成る請求項６に記載の方法。
【発明の詳細な説明】
発明の分野
本発明は、コンピュータ・システムの分野に関する。さらに詳細には、本発明はコンピュータ・システムにおけるデータ転送中のバイト・スワッピングの実行に関する。
発明の背景
コンピュータ・システムは、一般に１〜８バイトの間のいずれかの長さの２進データ項目のもとで動作する。「バイト」は８ビットであると定義されている。通常は、現在のコンピュータ・システムが操作する最小のデータ項目は、２バイトの「ワード」または４バイトの「ダブル・ワード」（「ｄｗｏｒｄ」）のいずれかである。様々な異なる理由から、ワードまたはｄｗｏｒｄのデータ項目内のバイトの順序を変更することが必要となる、または望ましいこともある。この操作は、「バイト・スワッピング」として周知である。バイト・スワッピングが望ましい考えられる１つの理由としては、例えば、メモリ・アドレスがデータ項目の最下位のバイトを参照する「リトル・エンディアン（little-endian）」アドレッシングと、アドレスがデータ項目の最上位のバイトを指定する「ビッグ・エンディアン（big-endian）」アドレッシングとの間など、異なるデータ・アドレッシング方法の間で切替えを行うことがある。
既存のコンピュータ・システムでは、バイト・スワッピングは、一般にソフトウェア・コマンドに応答してホスト・プロセッサによって実行される。例えば、メモリのブロック中に記憶されたデータが新しい位置（すなわちメモリまたは周辺機器中の異なる位置）に転送される、またバイト・スワッピングが必要とされる、共通の状況について考慮されたい。通常なら、ホスト・プロセッサはメモリからデータを読み取り、バイトを再配列し、次いで再配列したデータ・ワードをメモリの第１ブロックに書き戻すことになる。次いでホストは、修正したデータ・ワードを新しい位置に書き込む。この方法には、ホスト・プロセッサが修正したデータを書き戻してからデータを新しい位置に転送しなければならないことから、時間がかかるという欠点がある。したがって、メモリ・アクセス動作中にバイト・スワッピングを実行する、より高速かつより効率的な方法が必要とされている。
発明の概要
メモリ上でメモリ・アクセス動作を実行する装置が提供される。この装置は、バス・インタフェースに結合されたダイレクト・メモリ・アクセス（ＤＭＡ）制御装置を含む。このバス・インタフェースは、メモリも結合されているバスへの接続を行う。メモリ・アクセス動作中に、ＤＭＡ制御装置は、メモリ中に記憶された、それぞれが少なくとも２バイトを含むデータ・ワードにアクセスし、少なくとも１つのデータ・ワードのバイトを制御入力に従ってスワップする。
本発明のその他の特徴は、添付の図面および以下の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
同様の参照符が同様の要素を示す添付の図面の各図に、制限的なものではなく例示として本発明を図示する。
第１図は、本発明が実装されるコンピュータ・システムを示す図である。
第２図は、第１図のコンピュータ・システム中のグラフィックス・アクセラレータ・カード上の回路を示す図である。
第３図は、ＤＭＡ動作中の、ＤＭＡ制御装置とホスト・システムの間の制御の流れを示す図である。
第４Ａ図は、ダイレクト・メモリ・アクセス（ＤＭＡ）のコマンド対を示す図である。
第４Ｂ図は、バイト・スワッピング方式を示す表である。
第５図は、ＤＭＡバイト・スワッピングを実行する技術を示す流れ図である。
第６図は、メモリ読取り動作中にＤＭＡバイト・スワッピングを実行するＤＭＡ制御装置中の回路を示す図である。
第７図は、メモリ書込み動作中にＤＭＡバイト・スワッピングを実行するＤＭＡ制御装置中の回路を示す図である。
詳細な説明
ダイレクト・メモリ・アクセス（ＤＭＡ）バイト・スワッピングを実行する方法および装置について記述する。以下の記述では、説明のために多数の特定の詳細を示し、本発明が完全に理解されるようにする。ただし、これらの特定の詳細がなくても本発明を実施することができることは当業者には明らかであろう。その他、本発明を不必要に理解しにくくしないように、周知の構造および装置はブロック図の形態で示す。
第１図は、本発明が実装されているコンピュータ・システム１を示す図である。このコンピュータ・システムは、システム・バス３０によってメモリ２０に結合された中央処理装置（ＣＰＵ）１０を含む。システム・バス３０は、バス・インタフェース５０によってＰＣＩ（peripheral component interconnect）バス４０に結合される。ＰＣＩバス４０には、モニタ７０に結合されたグラフィックス・アクセラレータ・カード６０、ならびにいくつかのその他の周辺機器８０および９０が結合される。本発明は、グラフィックス・アクセラレータ・カード６０内で実装される。
第２図は、グラフィックス・アクセラレータ・カード６０をさらに詳細に示す図である。グラフィックス・アクセラレータ・カード６０は、様々なグラフィックス機能を制御および実行するようになされたグラフィックス・プロセッサ１０２を含む。グラフィックス・プロセッサ１０２は、メモリ・インタフェース１０５を介してローカル・メモリ１０６に結合され、またピクセル・エンジン１０４にも結合される。ローカル・メモリ１０６は、モニタ７０に表示されるピクセル・カラー値を記憶するフレーム・バッファを含む。フレーム・バッファに記憶されたカラー値は、ＲＧＢ（赤色、緑色、青色）アナログ信号の形態でディスプレイ・インタフェース１０７を介してモニタに供給される。グラフィックス・アクセラレータ・カード６０は、ＰＣＩインタフェース１００によってＰＣＩバス４０に結合される。ＰＣＩインタフェース１００に結合されたダイレクト・メモリ・アクセス（ＤＭＡ）制御装置１０１は、主メモリ２０など、カード６０の動作をサポートするのに必要な、コンピュータ・システム１内の任意のメモリ上で実行されるＤＭＡ動作を制御する。グラフィックス・アクセラレータ・カード６０がＰＣＩバス４０を介して受信した情報は、入力ＦＩＦＯ１０３を介してグラフィックス・プロセッサに与えられ、グラフィックス・プロセッサ１０２からＰＣＩバス４０上に出力すべき情報は、出力ＦＩＦＯ１０８を介してＰＣＩインタフェース１００に与えれる。
本発明では、バイト・スワッピングは、ＰＣＩインタフェース１００中の状態マシンの制御下でＤＭＡ制御装置１０１によって実行される。ＤＭＡ制御装置は、連鎖ＤＭＡコマンド・リスト中のコマンド対によって指定されたＤＭＡ動作を実行するＰＣＩバス・マスタである。第３図は、メモリ２０中に記憶された連鎖コマンド・リスト２４の１例である。このコマンド・リスト２４は、グラフィックス・アクセラレータ・カード６０をサポートする、やはりメモリ２０中に記憶されたグラフィックス・ドライバ・ソフトウェア２２によって生成される。各ＤＭＡコマンド対は、偶数のｄｗｏｒｄ中のアドレス・フィールドおよび奇数のｄｗｏｒｄ中の長さフィールドからなる。第４Ａ図は、アドレス・フィールド２１１および長さフィールド２１２を含むＤＭＡコマンド対を示す図である。アドレス・フィールドは、１）そのコマンドについてアクセスすべきデータ・アレイ２６中のデータの第１ｄｗｏｒｄ、または２）実行すべき次のＤＭＡコマンドの（リンク）アドレスのいずれかの、ワード整列された物理バイト・アドレスを与える。長さフィールドは、アドレス・フィールドがデータ・アレイ２６中のアドレスを指定したときにＤＭＡ転送のサイズを指定する。長さフィールドの最上位ビットであるビットＬ31は、そのアドレスがデータの位置を指定するか、または別のＤＭＡコマンドへのリンクを指定するかを示すために使用される。詳細には、ビットＬ31の値が１であれば、アドレス・フィールドが別のＤＭＡコマンドへのリンクを指定することを示す。
メモリ２０中に記憶されたデータはｄｗｏｒｄ整列され、その結果、各ＤＭＡコマンドのビットＬ0およびＬ1はデータのアドレッシングに不要となる。したがって、長さフィールドの最下位ビットからの２つのビットであるビットＬ0およびＬ1（Ｌ0を最下位ビットとする）は、本発明では、メモリ・アクセスのためのバイト・スワッピング方式を示すために使用される。各ＤＭＡコマンドに対して、ビットＬ0およびＬ1の値は、どのようなアプリケーション・ソフトウェアが現在コンピュータ・システム１中で動作しているかというグラフィックス要件に基づいて、グラフィックス・ドライバ・ソフトウェア２２によってセットされる。ビットＬ31が１にセットされている場合には、アドレス・フィールドが別のＤＭＡコマンドへのリンクを指定するので、ビットＬ0およびＬ1は無視されることに留意されたい。
第４Ａ図および第４Ｂ図は、バイト・スワッピング方式を実装するためにどのようにしてＤＭＡコマンドを使用するかを示す図である。再度第４Ａ図を参照すると、ＤＭＡコマンドはアドレス・フィールド２１１および長さフィールド２１２からなる。長さフィールド２１２はビット対「Ｌ1Ｌ0」を含む。第４Ｂ図に示すように、ビット対「Ｌ1Ｌ0」の値によってバイト・スワッピング方式が決定される。好ましい実施形態では、各データ項目は、バイトＢ0を最下位バイト、バイトＢ3を最上位バイトとして、Ｂ0〜Ｂ3の４バイトからなるｄｗｏｒｄである。ＤＭＡ動作中に、「Ｌ1Ｌ0」の値が００である場合には、バイト・スワッピングは実行されない。「Ｌ1Ｌ0」の値が０１である場合には、バイトＢ0とＢ3とがスワップされ、バイトＢ1とＢ2とがスワップされる。「Ｌ1Ｌ0」の値が１０である場合には、バイトＢ2とＢ3とがスワップされ、バイトＢ0とＢ1とがスワップされる。「Ｌ1Ｌ0」の値が１１である場合には、バイトＢ1とＢ3とがスワップされ、バイトＢ0とＢ2とがスワップされる。
第３図は、ＤＭＡ動作中の制御の流れを示す図である。第３図に示すように、ＤＭＡ制御装置１０１は、ＤＭＡコマンド・ポインタ・レジスタ２２０およびＤＭＡコマンド・レジスタ２２２を含む。ＤＭＡコマンド・ポインタ・レジスタ２２０は、現在のＤＭＡコマンド対の物理バイト・アドレスを記憶する。ＤＭＡコマンド・レジスタ２２２は、現在実行されているＤＭＡコマンド対の値を保持する。ＤＭＡ動作は、グラフィックス・ドライバ２２がＤＭＡコマンド・リストの第１コマンドのアドレスをＤＭＡコマンド・ポインタ・レジスタ２２０に書き込むことによって開始される。第１ＤＭＡコマンド対のアドレスがＤＭＡコマンド・ポインタ・レジスタ２２０に書き込まれると、ＤＭＡ制御装置１０１は、連鎖ＤＭＡコマンド・リスト２４中のＤＭＡコマンド（すなわちコマンド対）の実行を開始する。アドレス・フィールドがヌル値になるとＤＭＡ動作は終了する。ＤＭＡコマンドが完了するたびに、ＤＭＡコマンド・ポインタ・レジスタ２２０中の値は８バイトずつ増分し、次のＤＭＡコマンド対のバイト位置と一致する。
次に第５図を参照すると、本発明の動作の方法が記載されている。ＤＭＡ制御装置１０１は最初にＤＭＡコマンド・ポインタ・レジスタ２２０を検査し、ＤＭＡコマンド対のアドレスがレジスタ２００に書き込まれているかどうかを判定する（段階５０１）。アドレスがＤＭＡコマンド・ポインタ・レジスタ２２０に書き込まれている場合には、ＤＭＡ制御装置１０１は、ＤＭＡコマンド・ポインタ・レジスタ２２０によって指摘されたＤＭＡコマンド対をコマンド・リストから獲得し、このコマンド対をレジスタ２２２に記憶する（段階５０２）。次いで、現在のＤＭＡコマンド対のアドレス・フィールドの値がヌルであるかどうかを判定する（段階５０３）。アドレス・フィールドの値がヌルであれば、動作は終了する。値がヌルでない場合には、長さフィールドのビットＬ31を検査する（段階５０４）。ビットＬ31が１である（すなわちアドレス・フィールドが次のＤＭＡコマンド対へのリンクを指定する）場合には、ＤＭＡ制御装置１０１は、ＤＭＡコマンド・ポインタ・レジスタ中の値をアドレス・フィールドが指定するリンク・アドレスで置換し（段階５０５）、ＤＭＡコマンド・レジスタ２２２の内容をリンク・アドレスでのコマンド対で置換する（段階５０２）。ビットＬ31が０である（すなわちアドレス・フィールドがデータ・アレイ２６中のアドレスを指定する）場合には、ＤＭＡ制御装置は現在のＤＭＡコマンドによってアドレスされたデータを読み取り（段階５０６）、各ｄｗｏｒｄのデータ内で現在の長さフィールドのビットＬ0およびＬ1に従ってバイトをスワップする（段階５０７）。バイト・スワッピングは、各データ項目（ｄｗｏｒｄ）がメモリ２０からグラフィックス・アクセラレータ・カード６０に転送される際に行われる。現在のＤＭＡコマンドが完了すると、ＤＭＡコマンド・ポインタ・レジスタ２２０はもう一度８バイトだけ増分し（段階５０８）、次のコマンド対をロードする。
第６図は、上記のＤＭＡバイト・スワッピングを実施する回路を示す図である。ＤＭＡ制御装置１０１は、ＰＣＩバス４０に結合された入力とＰＣＩインタフェース１００を介してＦＩＦＯ１０３に与えられる出力とを有するマルチプレクサ１１０を含む。マルチプレクサ１１０は、現在のＤＭＡコマンドの長さフィールドのビットＬ0およびＬ1に基づいて選択された４つの入力を有する。マルチプレクサ１１０の各入力は、同一の３２ビット線をＰＣＩバス４０から受ける。ただし、ビット線の配列は各入力ごとに異なり、第４Ｂ図に関連して記述した４つのバイト・スワッピング形式の１つに対応する。例えば、入力「００」（バイト・スワッピングが要求されない場合に選択される）に適用された各ビット位置は、ＰＣＩバス４０の対応するビット位置を受信するが、入力「０１」では、最下位からの８つのビット位置はＰＣＩバスのビット２４〜３１（すなわちＰＣＩ［３１：２４］）を受信し、入力「０１」の最上位からの８つのビット位置はＰＣＩバス４０のビット０〜７（すなわちＰＣＩ［７：０］）を受信する。
好ましい実施形態ではメモリ読取り動作中にバイト・スワッピングを実行する手段が提供されるが、本発明の範囲内でメモリ書込み動作を実行することもできる。第７図は、メモリ書込み動作中にＤＭＡバイト・スワッピングを実行することができる実施形態における回路を示す図である。第７図の実施形態では、第２マルチプレクサ１１２がＤＭＡ制御装置１０１内に設けられている。マルチプレクサ１１２は、それぞれＦＩＦＯ１０８の出力からの４つの３２ビット入力を受ける。各入力のビット線の順序づけは、第６図に関連して説明したように、第４Ｂ図に示す４つのバイト・スワッピング形式の１つに従ってなされる。マルチプレクサ１１２は１つの３２ビット出力をＰＣＩバス４０に送り出す。マルチプレクサ１１２の４つの入力の選択は、やはり現在のＤＭＡコマンドのビット「Ｌ1Ｌ0」の値によって決定される。
第６図および第７図に図示したようなマルチプレクサを使用することは、ＤＭＡ制御装置内でバイト・スワッピングを実施するための、考えられる方法の１つにすぎないことを理解されたい。ＤＭＡ制御装置内でバイトの順位付けを選択するその他の方法も、本発明の範囲内で利用することができる。
以上のようにＤＭＡバイト・スワッピングを実行する方法および装置について説明した。特定の例示的な実施形態に関連して本発明を説明したが、請求の範囲に記載する本発明の趣旨および範囲を逸脱することなく、これらの実施形態に様々な修正および変更を加えることができることは明らかであろう。したがって、本明細書および図面は、制限的なものではなく例示的なものであると見なされたい。
【図１】
0003940435.tif 000002
【図２】
0003940435.tif 000003
【図３】
0003940435.tif 000004
【図４Ａ】
0003940435.tif 000005
【図４Ｂ】
0003940435.tif 000006
【図５】
0003940435.tif 000007
【図６】
0003940435.tif 000008
【図７】
0003940435.tif 000009