(57)【要約】【課題】プロセッサ又は他のメモリロケーションに存在するシステムイベントレジスタに対し、エンディアン選択のためにオペレーティングシステム（ＯＳ）によりアクセスすることが可能なビットに依存してビッグエンディアンレジスタ又はリトルエンディアンレジスタとしてアクセスすることを可能とする、システム及び方法を提供すること。【解決手段】オペレーティングシステム（ＯＳ）によりアクセスすることが可能なエンディアン選択用のビット(513)に応じて、プロセッサ(401)内に存在するメモリロケーション(201)（典型的にはシステムイベントレジスタ(409)）にビッグエンディアンモード又はリトルエンディアンモードでアクセスすることを可能にするシステム及び方法。ＯＳタイプはブート時に決定される(601)。【選択図】図５
2004070958.tif 000002
【特許請求の範囲】
【請求項１】
　オペレーティングシステムにより選択されるモードに基づいてビッグエンディアンモード又はリトルエンディアンモードでメモリにアクセスするアドレスデコーダであって、
　メモリブロック(201,409)に対応し、及びｎビットアドレスライン(505)からの入力を使用して前記メモリブロック(201)内のメモリロケーションを画定する、アドレスデコードロジック(511)と、
　該アドレスデコードロジック(511)によりアクセスされ、前記メモリブロック内の前記メモリロケーションのバイトにアクセスする順序を画定する、エンディアン選択レジスタ(513)と
を含むアドレスデコータ。
【請求項２】
　前記エンディアン選択レジスタ(513)が、システムブート時に、選択されたオペレーティングシステムに対応するよう設定される(601)、請求項１に記載のアドレスデコーダ。
【請求項３】
　前記エンディアン選択レジスタ(513)により画定することが可能なビッグエンディアンモード及びリトルエンディアンモードでメモリにアクセスすることが可能であり、該エンディアン選択レジスタ(513)が、システムブート時にオペレーティングシステムによって設定される(601)、請求項１に記載のアドレスデコーダ。
【請求項４】
　前記メモリロケーションが、少なくとも１つのシステムイベントレジスタ(409)に対応する、請求項１に記載のアドレスデコーダ。
【請求項５】
　前記アドレスデコードロジック(511)が、前記メモリロケーションアドレスの少なくとも１つの最下位ビットを反転させ(607,609)、その際にｎ個のビットが反転され、該ｎがｍ個のアドレスビットにより画定され、すなわち、８ビットデータバスの場合にｍ＝８×２nとなる、請求項１に記載のアドレスデコーダ。
【請求項６】
　エンディアン非依存メモリアクセスを変換する方法であって、
　システムブートアップ時に、オペレーティングシステムにより選択されるエンディアンモードをエンディアン選択レジスタに格納し(601)、
　メモリブロック内のメモリロケーションへのアクセスを要求し(603)、
　前記オペレーティングシステムにより要求されるエンディアンモードを画定し(605)、この際にビッグエンディアンモード及びリトルエンディアンモードからなる群から該エンディアンモードが選択され、
　前記メモリロケーションのバイトを再マッピングし(607,609)、この際、リトルエンディアンモードの場合には前記メモリロケーションの最下位バイトを最下位メモリアドレスにマッピングし、ビッグエンディアンモードの場合には前記メモリロケーションの最上位バイトを最下位メモリアドレスにマッピングする、
という各ステップを含む方法。
【請求項７】
　前記メモリロケーション(201)のバイトの再マッピングが、
　ｍ個のアドレスビットについて反転させるべきｎ個のビットを画定し、この場合、８ビットデータバスに関してｍ＝８×２nであり、
　前記メモリロケーションのアドレスのｎ個の最下位ビットを反転させて、該メモリロケーションにおける各バイトのアクセス順を変更する、
という各ステップを更に含む、請求項６に記載の方法。
【請求項８】
　前記メモリロケーション(201)がシステムイベントレジスタ(409)に対応する、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
　本発明は、エンディアンに依存しないメモリアクセスを行うシステム及び方法に関するものである。
【背景技術】
【０００２】
　現状では、異なるコンピュータのコンピュータアーキテクチャにより、２つの競合する態様でのシステムイベントレジスタのアクセスが可能である。システムレジスタが４バイト長を有する１ワードのデータであると仮定すると、該レジスタは、最上位バイトが最下位メモリアドレス又は最上位メモリアドレスにあるよう編成することができる。マルチバイトメモリブロックにおいて、「ビッグエンディアン」は、データのアドレスである最下位メモリアドレスに最上位バイト（MSB）を格納する。また、「リトルエンディアン」は、データのアドレスである最下位メモリアドレスに最下位バイト（LSB）を格納する。
【０００３】
　種々のプロセッサが、ビッグエンディアンモード又はリトルエンディアンモードで動作することが可能である。プロセッサによっては、オペレーティングシステムその他の基準に応じて何れかのモードでの動作することが可能である。ブートアップファームウェア（ＢＩＯＳ）は、プロセッサが何れのモードで動作すべきかを知り定義しなければならない。このため、現状では、所与のコンピュータのファームウェアは、対応するアーキテクチャ、すなわちビッグエンディアン又はリトルエンディアンに従ってメモリに対する読み出し／書き込みを行うようカスタマイズしなければならないものである。
【０００４】
　例えば、Intel(R)社製のItanium(R) Processor Familyは、エンディアンに依存しない（agnostic）ものであり、すなわち、ビッグエンディアンモードでもリトルエンディアンモードでも動作することができる。Microsoft社から入手可能なMicrosoft(R) Windows(R)及び多数のソースから自由に入手可能なLinuxを実行するItanium(R)プロセッサは、リトルエンディアンモードで動作する。Hewlett-Packard社から入手可能なHP-UXは、ビッグエンディアンモードで動作する。
【発明の開示】
【課題を解決するための手段】
【０００５】
　本発明のシステム及び方法は、プロセッサ又は他のメモリロケーションに存在するシステムイベントレジスタに対し、エンディアン選択のためにオペレーティングシステム（ＯＳ）によりアクセスすることが可能なビットに依存してビッグエンディアンレジスタ又はリトルエンディアンレジスタとしてアクセスすることを可能とする、システム及び方法を提供することである。システムブートアップ中にエンディアン選択レジスタに対して書き込みが行われ、該エンディアン選択レジスタがアドレスデコードロジックにより使用されて、エンディアンアクセスが可能なメモリロケーションの複数バイトの読み出し／書き込み／選択を行う順序が決定される。
【０００６】
　エンディアン選択レジスタは、何れのモード（ビッグエンディアン又はリトルエンディアン）で動作すべきかを示すフラグを含む。このフラグは、オペレーティングシステム及びプロセッサに依存するものである。アドレスは、エンディアンアクセス可能なメモリブロックに対応するアドレスデコードロジックに送られる。デコードロジックは、選択されたアドレスとエンディアン選択レジスタとを使用して、選択されたアドレスロケーションのバイトを再マッピングして、オペレーティングシステムにより期待される順序でMSB及びLSBが提供されるようにする。
【発明を実施するための最良の形態】
【０００７】
　以下の本発明の詳細な説明で参照する図面において、同様の符号は同様の構成要素を示している。
【０００８】
　複数のプロセッサ及び／又は複数のオペレーティングシステムに関して一組のファームウェアを使用することができるように、メモリロケーションに対してエンディアンに依存しない（以下「エンディアン非依存」と称す）アクセスを行うことが望ましい。オペレーティングシステムは、指定されたバイト順でデータが検索されることを期待する。本システムでは、システムファームウェアをビッグエンディアン又はリトルエンディアンとしてハードコードしなければならない。Itanium(R) Processor Family等のエンディアンに依存しない(endian agnostic)プロセッサに基づくコンピュータシステムでは、データを如何にしてメモリから取り出すかをオペレーティングシステム（ＯＳ）が決定する。ＯＳは、該ＯＳが読み出し及び書き込みを行うシステムレジスタが該ＯＳ自体と同じエンディアンであることを期待する。例えば、Microsoft(R) Windows(R)はリトルエンディアンであり、該システムから読み出すレジスタが本質的にリトルエンディアンであることを期待する。本システム及び方法を使用することにより、リトルエンディアンオペレーティングシステム及びビッグエンディアンオペレーティングシステムの両者が、エンディアンに依存しないプロセッサに基づくコンピュータシステム上で動作することが可能となる。コンピュータシステムは、例えばネットワークルータ等の組み込みコンピュータシステム、スタンドアロンコンピュータシステム、又はネットワークに接続されたコンピュータシステムといった、あらゆる種類のコンピューティング装置とすることが可能である、ということが当業者には明らかであろう。
【０００９】
　ここで図面、特に図１を参照すると、「ビッグエンディアン」モードでアクセスされる４バイトワードのデータが示されている。このデータワードでは、符号101で示す最下位メモリアドレスxは、最上位バイト(MSB)のデータに対応し、符号103で示す最上位メモリアドレスx＋3は、最下位バイト(LSB)のデータに対応する。例えば、４バイトレジスタが16進数ABCD059Eを含むものと仮定する。単純化のため、先行する「0x」で16進数を示す（すなわち、0xABCD059E）。これをビッグエンディアンで表すと、メモリロケーションは表１に示すようなデータを含むことになる。
【００１０】
【表１】
2004070958.tif 000003
【００１１】
　図２は、符号203a〜203dで示すような４バイトのデータを有する例示的なメモリブロック201の一部を示している。該メモリは、８ビットデータバス205、ｎビットアドレスバス207、及び少なくとも１つの制御ライン209に接続される。読み出し又は書き込みのためにメモリの一部が選択される際に、システムは、読み出し／書き込み／選択が行われることになるバイトの順序を知っていなければならない。これは、システムのエンディアン（endianess）によって画定される。
【００１２】
　例えば、図３は、リトルエンディアンモードでアクセスされる４バイトワードのデータを示している。このデータワードでは、符号301で示す最下位メモリアドレスxは、最下位バイト(LSB)のデータに対応し、符号303で示す最上位メモリアドレスx＋3は、最上位バイト(MSB)のデータに対応する。ここでは単純化のために４バイトを示したが、本発明では該データワードはあらゆるバイト数へと拡張可能なものである、ということが当業者には明らかであろう。上記実施形態を用いる場合、リトルエンディアンでは、レジスタは表２に示すようなデータを含むことになる。
【００１３】
【表２】
2004070958.tif 000004
【００１４】
　図４は、本発明のシステム及び方法を包含するコンピュータシステムを示すブロック図である。中央処理装置（CPU）401は、（アダプタ402を介して）大容量記憶装置403と（アダプタ404を介して）入出力（I／O）装置405とに接続され、該アダプタは何れもメモリバス407を介してCPUに接続される。該メモリバス407は、データ、アドレス、及び制御情報を含む。前記大容量記憶装置は、ハードディスクドライブその他の記憶領域とすることが可能である。CPU401は、その意図される用途に応じて任意の個数の他の周辺装置又は追加のCPUに接続することが可能である。コンピュータシステムの記憶空間は、該メモリバスによりアクセスすることができるあらゆるものから構成することが可能である。記憶空間は、メモリマッピングされたI／O空間やI／Oポート空間等へと分割される。前記CPUは、複数のシステムイベントレジスタ409（典型的にはCPUマザーボードのチップセット上に存在する）を有する。
【００１５】
　図５は、エンディアン非依存システムイベントレジスタ（SER）409にアクセスする例示的なシステムを示すブロック図である。この実施形態におけるシステムイベントレジスタ409は、４つの８ビットバイトを含み、典型的にはCPU401のチップセット上に位置する。本発明のシステム及び方法は、あらゆる記憶空間のメモリに関して良好に機能し、チップセットに限定されないものである、ということが当業者には明らかであろう。所与のレジスタ501に対するアクセスは、制御ライン503及びアドレスバス505により制御される。如何なるレジスタの場合にも、割り込み507、マスクビット509、及びアドレスのデコーディングのための制御ロジック511が存在する。本発明はまた、バイトのアクセス／取り出し／書き込みが行われる順序を定義するためのエンディアン選択レジスタ513を含む。換言すれば、制御信号503がアクセスのタイプを定義し、アドレスバス505が選択されたデータワードを識別し、アドレスデコードロジック511が、エンディアン選択レジスタ513に加えて入力としてアドレスを受容するロジックブロックとなる。該アドレスデコードロジック511は、アドレス及びエンディアン選択レジスタに基づいて、レジスタ501に関する適当な選択を生成する。バイトが選択され、読み出され、又は書き込まれるべきか否かを識別する制御ライン503と、ｎビットアドレスラインで送られるアドレスとが、エンディアン選択レジスタ内のフラグと結合され、これにより、アドレスデコードロジック511が、エンディアン選択で設定された値に基づいて、後述するようにアドレスが設定される方法を逆転させることになる。
【００１６】
　データバス515は、対象が読み出し専用メモリであるか、読み出し書き込みメモリであるか、又は書き込み専用メモリであるかに応じて、双方向バスとすることができる。アドレスバス505は、メモリのための読み出し専用バスである。例えば、メモリアドレスx＋2にアクセスする必要があることを示す要求がアドレスバスに沿って伝達される。メモリブロックは、アドレスがビッグエンディアン又はリトルエンディアンに関するものであることに基づいて物理アドレスをエンコードし、それに従ってデータを送る。ここで、データバス515がmビット幅であると仮定する。製品（コンピュータ）内の各電子チップは、該電子チップがビット又はバイトを格納する一定の順序をそれぞれ有する。８ビット幅のバスを想定すると、一度につき１つの８ビットバイトが格納され又はアクセスされる。格納され又は取り出されるバイトの順序は、システムのエンディアンネスによって決まる。
【００１７】
　ビッグエンディアンとリトルエンディアンとの間の再マッピングは、メモリに関連するアドレスの最下位ビットを反転させることにより行われる。この１ビット反転技法は、16ビットレジスタ、すなわち２つの８ビットバイトに関して良好に機能する。32ビットレジスタの場合には２つの最下位ビットを反転させる。このアルゴリズムは、以下に示すように他のレジスタ長へと拡張させることが可能である。ビッグエンディアンからリトルエンディアン（又はその逆）に変換するレジスタの長さに応じて、反転すべき最下位ビットの数を１〜ｎ、レジスタのビット数をｍとすると、ｍ＝８×２nとなる。例えば、128ビットレジスタの場合には、ｍ＝128＝８×24である。したがって、ｎ＝４であり、反転すべきビット数は４である。また、64ビットレジスタの場合には、ｍ＝64＝８×23である。したがって、ｎ＝3である。また、1028ビットレジスタ又はメモリロケーションの場合には、ｍ＝1024＝８×128＝８×27である。したがって、反転すべきビット数は７である。反転すべきビット数の最小値は、例えば16ビットレジスタの場合の１である。レジスタが８ビット長、すなわち１バイトのみである場合には、データバスが８ビット幅である限り、エンディアンモードは無関係となる。
【００１８】
　例えば、例示的なシステムイベントレジスタは、32ビット長、すなわち４つの８ビットバイトである。上述のアルゴリズムによれば、リトルエンディアンモードからビッグエンディアンモードへの変換は２ビットの反転を必要とする。４つのアドレスを使用してレジスタの４バイトにアクセスする。この場合、所望のアドレスが16ビット、すなわち４つのニブル（４ビット）であると仮定する。単純化のため、16進表記を使用して２値アドレスを識別して４つの16進数字をもたらすことができる。この例では、アドレスは、0xF0AC〜0xF0AFである。アドレスの最下位ビットは反転に対応するものであり、このため、以下の表３には0xC,0xD,0xE,0xFを示す。0xF0ACの最下位ビットは1100（２値）である。0xF0AEの最下位ビットは1110（２値）である。レジスタが、リトルエンディアンモードでアクセスされて、最初に最下位バイトがアクセスされる場合には、0xF0AC、0xF0AD、0xF0AE、及び0xF0AFの順にバイトがアクセスされる。エンディアン選択レジスタが、ビッグエンディアン順でバイトがアクセスされべきであることを示す場合には、0xF0AF、0xF0AE、0xF0AD、及び0xF0ACとしてバイトがアクセスされる。このように、リトルエンディアンモードの場合にはアドレスの最下位ビットが1100（２値）であり、ビッグエンディアンでアクセスする場合には２つの最下位ビットが反転されて1111、すなわち0xF0AFがもたらされる。このように、アドレスは、アドレスデコードロジック511に送られた際に、エンディアン選択レジスタ513に入力され、これにより、バイトにアクセスする前にアドレスを反転させるべきか否か及び幾つのビットを反転すべきかが判定される。
【００１９】
【表３】
2004070958.tif 000005
【００２０】
　ここで図６を参照する。同図は、ビッグエンディアンアドレスをリトルエンディアンアドレスに変換する方法を示すフローチャートを示している。ステップ601で、システムブートアップ中にＯＳローダがエンディアン選択レジスタにＯＳタイプを書き込む。所与のＯＳのエンディアンモードは既知であるため、所定のＯＳタイプのテーブル又はリストをファームウェアに格納しておき、エンディアン選択レジスタのためのフラグへとデコードすることが可能である。このように、ローダは、エンディアンフラグのためのコードをプリコードする必要がなく、ＯＳタイプに基づいて単にテーブルのルックアップを実行するだけでよい。異なるハードウェアを使用する種々のプロセッサはフラグを種々に実施することが可能である。ロード時にＯＳタイプが識別されてエンディアンフラグが決定され、該フラグがエンディアン選択レジスタに書き込まれる。
【００２１】
　例示的な実施形態では、システムイベントレジスタに関してエンディアンアクセスが使用される。該技法は、エンディアンアクセスを使用するあらゆるタイプのメモリにアクセスするために使用することが可能である、ということは当業者には自明であろう。本実施形態では、ステップ603で、システムイベントレジスタに対するアクセスが要求される。ステップ605で、エンディアン選択フラグを使用してＯＳがリトルエンディアンであるか否かに関する判定がなされる。ＯＳがリトルエンディアンである場合には、ステップ607で、最下位バイト(LSB)が最下位メモリアドレスに再マッピングされる。ＯＳがリトルエンディアンでない場合には、メモリはビッグエンディアンであるとみなされて、ステップ609で最上位バイト(MSB)が最下位メモリアドレスに再マッピングされる。上述したように、ｍ＝８×２n（ｍはレジスタのビット数）に従ってアドレスのｎ個の最下位ビットを反転させることにより、アドレスが再マッピングされる。
【図面の簡単な説明】
【００２２】
【図１】「ビッグエンディアン」モードでアクセスされる４バイトワードのデータを示す説明図である。
【図２】４バイトのデータを有する例示的なメモリブロックを示す説明図である。
【図３】「リトルエンディアン」モードでアクセスされる４バイトワードのデータを示す説明図である。
【図４】ビッグエンディアンモード又はリトルエンディアンモードでアクセス可能なレジスタを有するコンピュータシステムを示すブロック図である。
【図５】エンディアン非依存システムイベントレジスタ（SER）にアクセスするための例示的なシステムを示すブロック図である。
【図６】ビッグエンディアンアドレスをリトルエンディアンアドレスに変換する方法を示すフローチャートである。
【符号の説明】
【００２３】
401　　CPU
409　　システムイベントレジスタ
501　　レジスタ
503　　制御ライン
505　　アドレスバス
507　　割り込み
509　　マスクビット
511　　アドレスデコードロジック
513　　エンディアン選択レジスタ
515　　データバス
【図１】
2004070958.tif 000006
【図２】
2004070958.tif 000007
【図３】
2004070958.tif 000008
【図４】
2004070958.tif 000009
【図５】
2004070958.tif 000010
【図６】
2004070958.tif 000011