(57)【要約】【課題】エンディアンの異なるプロセッサにおいて極めて簡易な構成でメモリデータの共有を実現するメモリ共有装置を提供する。【解決手段】エンディアンの異なる第１プロセッサ１０及び第２プロセッサ２０は、共に第１プロセッサ１０のエンディアンによるバイトオーダでデータバスを介して前記メモリに接続され、第２プロセッサ２０がデータバスよりも小さい幅のデータについて共有メモリにアクセスする場合に、データバスにおける当該データの位置を逆転させた位置を指すようにアドレスの下位ビットを変換して前記メモリに出力するアドレス変換部２１を備える。【選択図】図１
2004287481.tif 000002
【特許請求の範囲】
【請求項１】
データバスを介してメモリに接続されるプロセッサであって、
データバスよりも小さい幅のデータについてメモリアクセスする場合に、データバスにおける当該データの位置を逆転させた位置を指すようにアドレスの下位ビットを変換して前記メモリに出力するアドレス変換手段を備え、
当該プロセッサのエンディアンとは逆のエンディアンによるバイトオーダで前記メモリとの間でデータが転送されるよう前記データバスに接続される
ことを特徴とするプロセッサ。
【請求項２】
前記プロセッサとは異なるエンディアンの他のプロセッサとの間で前記メモリを介して共有すべき構造体データについて、前記他のプロセッサに実行されるプログラムにおける前記構造体データの定義に対して、基本語長より小さいデータを基本語長内で逆のオーダで定義したプログラムを実行する
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記プロセッサは、さらに、
前記プロセッサのエンディアンによるバイトオーダでデータバスに接続されたキャッシュメモリを備え、
前記プロセッサは、データバスと同じ幅のデータ単位で前記メモリからキャッシュメモリにデータを読み込む
ことを特徴とする請求項１又は２記載のプロセッサ。
【請求項４】
互いに異なるエンディアンの第１プロセッサ及び第２プロセッサと、メモリとを有するデータ共有装置であって、
第１プロセッサ及び第２プロセッサは、共に第１プロセッサのエンディアンによるバイトオーダでデータバスを介して前記メモリに接続される
ことを特徴とするデータ共有装置。
【請求項５】
前記データ共有装置は、さらに、
第２プロセッサがデータバスよりも小さい幅のデータについてメモリにアクセスする場合に、データバスにおける当該データの位置を逆転させた位置を指すようにアドレスの下位ビットを変換して前記メモリに出力するアドレス変換手段を
備えることを特徴とする請求項４記載のデータ共有装置。
【請求項６】
前記メモリは、第１プロセッサ及び第２プロセッサにアクセスされる構造体データを記憶し、
前記第１プロセッサは、前記構造体データを定義した第１プログラムを実行し、
前記第２プロセッサは、前記構造体データについて基本語長より小さい幅のデータを基本語長内で第１プログラムとは逆のオーダで定義した第２プログラムを実行する
ことを特徴とする請求項５記載のデータ共有装置。
【請求項７】
前記データ共有装置は、さらに、ダイレクトメモリアクセスによるデータ転送を制御する転送手段を備え、
前記転送手段は、転送元と転送先とで異なるエンディアンのデータを必要とし、かつデータバスよりも小さい幅のデータを転送する場合に、転送元と転送先とで基本語長内における当該データの順序を逆転させる
ことを特徴とする請求項５又は６記載のデータ共有装置。
【請求項８】
前記転送手段は、転送元と転送先とで異なるエンディアンのデータを必要とし、かつデータバスよりも小さい幅のデータを転送する場合に、データバスにおける当該データの位置を逆転させた位置を指すように、転送元及び転送先の一方のアドレスの下位ビットを変換して前記メモリに出力する変換部を有する
ことを特徴とする請求項７記載のデータ共有装置。
【請求項９】
さらに、
第２プロセッサのエンディアンによるバイトオーダでデータバスに接続されたキャッシュメモリを備える
ことを特徴とする請求項４記載のデータ共有装置。
【請求項１０】
前記データ共有装置は、さらに、
第２プロセッサがデータバスよりも小さい幅のデータについてメモリにアクセスする場合に、データバスにおける当該データの位置を逆転させた位置を指すようにアドレスの下位ビットを変換して前記メモリに出力するアドレス変換手段を
備えることを特徴とする請求項９記載のデータ共有装置。
【請求項１１】
前記メモリは、第１プロセッサ及び第２プロセッサにアクセスされる構造体データを記憶し、
前記第１プロセッサは、前記構造体データを定義した第１プログラムを実行し、
前記第２プロセッサは、前記構造体データについて基本語長より小さい幅のデータを基本語長内で第１プログラムとは逆のオーダで定義した第２プログラムを実行する
ことを特徴とする請求項１０記載のデータ共有装置。
【請求項１２】
前記データ共有装置は、さらに、ダイレクトメモリアクセスによるデータ転送を制御する転送手段を備え、
前記転送手段は、転送元と転送先とで異なるエンディアンのデータを必要とし、かつデータバスよりも小さい幅のデータを転送する場合に、転送元と転送先とで基本語長内における当該データの順序を逆転させる
ことを特徴とする請求項１０又は１１記載のデータ共有装置。
【請求項１３】
前記転送手段は、転送元と転送先とで異なるエンディアンのデータを必要とし、かつデータバスよりも小さい幅のデータを転送する場合に、データバスにおける当該データの位置を逆転させた位置を指すように、転送元及び転送先の一方のアドレスの下位ビットを変換して前記メモリに出力する変換部を有する
ことを特徴とする請求項１２記載のデータ共有装置。
【請求項１４】
互いに異なるエンディアンの第１プロセッサ及び第２プロセッサと、第１プロセッサ及び第２プロセッサとが共に第１プロセッサのエンディアンによるバイトオーダでデータバスを介して接続されたメモリとを有するデータ処理装置におけるデータ共有方法であって、
前記メモリにて共有すべき構造体データについて、前記第１プロセッサにおける前記構造体データの定義に対して、基本語長より小さいデータを基本語長内で逆のオーダで定義したプログラムを第２プロセッサに実行させるステップと、
第２プロセッサがデータバスよりも小さい幅のデータについてメモリにアクセスする場合に、データバスにおける当該データの位置を逆転させた位置を指すようにアドレスの下位ビットを変換する変換ステップと
を有することを特徴とするデータ共有方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】互いに異なるエンディアンの２つのプロセッサとメモリとを有するデータ共有装置及びそのプロセッサに関し、特にプロセッサ間のデータ共有に関する。
【０００２】
【従来の技術】
プロセッサの基本語長が２バイト（１６ビット）以上である場合に、２バイト以上のデータをメモリに格納するバイトの順番として、いわゆるビッグエンディアンとリトルエンディアンとの２つの方式がある。メモリがバイト単位にアドレスが割り当てられているのに対して、基本語長が２バイト以上あるからである。
【０００３】
まず、ビッグエンディアンについて説明する。
ビッグエンディアンとは、バイト単位のアドレスを有するメモリに２バイト以上のデータを格納する際のバイト列の並び順（バイトオーダ）の方式であって、ビッグエンド（つまりＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側。この場合Ｂは、ＢｉｔではなくＢｙｔｅというべきである。）のバイトから、メモリのアドレス昇順に格納する方式をいう。ただし、エンディアンは、ビット列の並び順ではなくバイト列の並び順であって、バイト内のビットの並び順は変わらない。
【０００４】
図１４は、ビッグエンディアンの説明図を示す。同図のように、例えば４バイトデータ”８９ＡＢＣＤＥＦ”（１６進数、以下の””内も同じ）をビッグエンディアンでアドレス１００〜１０３番地のメモリ領域に格納する場合、１００〜１０３番地の順に、”８９”、””ＡＢ”、”ＣＤ”、”ＥＦ”と格納される。
【０００５】
図１５は、図１４と同じ例であるが、３２ビットを基本語長とした場合のメモリイメージ（メモリデータ）を示している。メモリアドレスはバイト単位であり、基本語長の中で、左から順に下位アドレス（アドレス下位２ビットによりアドレッシングされるバイト位置）が”０”、”１”、”２”、”３”と昇順になっている。最上位バイト”８９”は０番地に格納される。
【０００６】
このようにビッグエンディアンでは、ＭＳＢ側のバイトからアドレス昇順にメモリに格納される。
図１６は、ビッグエンディアンＣＰＵ２とメモリ３ｂとを接続する一般的な構成を示す。なお、本明細書中ＣＰＵは単にプロセッサとも呼ぶ。
【０００７】
同図のようにＣＰＵ２のデータ入出力端子Ｄ［３１：２３］、Ｄ［２４：１６］、Ｄ［１５：８］、Ｄ［７：０］は、データバスによってメモリ３ａの下位アドレス０、１、２、３にそれぞれ接続される。これにより、メモリのアドレス昇順に、ＭＳＢからバイトデータが格納されることになる。また、同図のメモリ３ｂには、同図の構造体の例（ｓｔｒｕｃｔｕｒｅ  ｓａｍｐｌｅ）４が、ＣＰＵ２内のプログラムで定義されていた場合の、メモリイメージを示している。ＬＯＮＧ  ＩＮＴＥＧＥＲ  ｗは、基本語長（３２ビット）のワードデータであり、ＭＳＢから順にｗ３、ｗ２、ｗ１、ｗ０の４バイトからなる。ＳＨＯＲＴ  ＩＮＴＥＧＥＲ  ｘは、ハーフワードのデータであり、ＭＳＢから順にｘ１、ｘ０からなる。ＳＨＯＲＴ  ＩＮＴＥＧＥＲ  ｙも同様である。ＣＨＡＲ  ａ、ｂ、ｃ、ｄはそれぞれバイトデータである。
【０００８】
次に、リトルエンディアンについて説明する。
リトルエンディアンとは、リトルエンド（つまりＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）側）のバイトからメモリのアドレス昇順に格納する方式をいう。
【０００９】
図１７は、リトルエンディアンの説明図を示す。同図は、図１４と同じデータ例であり、３２ビットデータ”８９ＡＢＣＤＥＦ””は、１００〜１０３番地の順に、”ＥＦ”、”ＣＤ”、”ＡＢ”、”８９”と格納される。
【００１０】
図１８は、図１７と同じ例について、３２ビットを基本語長としたメモリイメージを示している。図１５と比べて、下位アドレスの並びが逆であり、右から順に０、１、２、３となっている。
【００１１】
図１９は、リトルエンディアンＣＰＵ１とメモリ３ａとを接続する一般的な構成を示す。同図のようにＣＰＵ１のデータ入出力端子Ｄ［７：０］、Ｄ［１５：８］、Ｄ［２４：１６］、Ｄ［３１：２３］は、データバスによってメモリ３ａの下位アドレス０、１、２、３にそれぞれ接続される。これにより、メモリのアドレス昇順に、ＬＳＢ側のバイトからバイトデータが格納されることになる。また、同図のメモリ３ａには、図１６と同じ構造体の例（ｓｔｒｕｃｔｕｒｅ  ｓａｍｐｌｅ）４が、ＣＰＵ１内のプログラムで定義されていた場合の、メモリイメージを示している。図１６のメモリイメージと比較するとバイト列が逆になっている。
【００１２】
このようにビッグエンディアン、リトルエンディアンは、２バイト以上のデータをメモリに格納する場合の、バイト列のオーダの方式であり、順序が逆になっている。
【００１３】
このような相違から、ビッグエンディアンＣＰＵとリトルエンディアンＣＰＵとが混在するシステムでは、共有データの同一性を確保するためにエンディアンの違いを変換する構成が必要になる。
【００１４】
特許文献１は、ビッグエンディアンＣＰＵとリトルエンディアンＣＰＵとの間でパケット通信を行う際に、ビッグエンディアン・プロセッサにおいてパケット上のデータをリトルエンディアンに変換するエンディアン変換部を備えるパケット通信装置を開示している。
【００１５】
また、特許文献２は、アクセスアドレスとアクセスサイズとに基づいてストアデータを変換することによって、データのサイズ／アライン／エンディアンの違いを吸収してメモリアクセスを行うデータアライン装置を開示している。
【００１６】
【特許文献１】
特開平０６−６９９７８
【００１７】
【特許文献２】
特開２０００−３３０４
【００１８】
【発明が解決しようとする課題】
しかしながら、特許文献１、２に開示された技術では、エンディアン変換部を備えるプロセッサには特殊なハードウェアを付加しなければならない。また、エンディアン変換による遅延が発生するのでメモリアクセスの高速化の壁を作ってしまい、メモリデータを共有する場合に他方のプロセッサまで高速化の障害となるという問題を有している。
【００１９】
また、一般に、通信はリトルエンディアンのプロセッサ、画像処理はビッグエンディアンのプロセッサで処理している。近年、携帯電話が画像処理機能を有するようになり、リトルエンディアンのプロセッサとビッグエンディアンのプロセッサとが同一バスに接続されるようになってきた。そして、リアルタイムにデータを共有する必要性が出てきた。
【００２０】
本発明は、ビッグエンディアン・プロセッサとリトルエンディアン・プロセッサがバスに接続されている場合に、極めて簡易な構成でメモリデータの共有を実現するプロセッサ及びメモリ共有装置を提供することを目的とする。
【００２１】
【課題を解決するための手段】
上記課題を解決するため、本発明のプロセッサは、データバスを介してメモリに接続されるプロセッサであって、データバスよりも小さい幅のデータについてメモリアクセスする場合に、データバスにおける当該データの位置を逆転させた位置を指すようにアドレスの下位ビットを変換して前記メモリに出力するアドレス変換手段を備え、当該プロセッサのエンディアンとは逆のエンディアンによるバイトオーダで前記メモリとの間でデータが転送されるよう前記データバスに接続されることを特徴とする。
【００２２】
この構成によれば、データバスと同じ幅のデータについて、メモリに対して、第１プロセッサも第２プロセッサも同じバイトオーダでアクセスすることになるので、データバスと同じ幅のデータの共有を極めて簡単な構成で実現できるという効果がある。また、アドレス変換手段によって、プロセッサは、データバスよりも小さい幅のデータについて、メモリにアクセスすることが可能となる。さらに、アドレス変換手段による簡単なハードウェアによって構成できるので、メモリアクセスの高速化の障害とはならない。
【００２３】
ここで、前記プロセッサ（第１プロセッサ）とは異なるエンディアンの他のプロセッサ（第２プロセッサ）との間で前記メモリを介して共有すべき構造体データについて、前記第２プロセッサに実行されるプログラムにおける前記構造体データの定義に対して、前記プロセッサは基本語長より小さいデータを基本語長内で逆のオーダで定義したプログラムを実行する構成としてもよい。
【００２４】
この構成によれば、第１プロセッサと第２プロセッサとの間で、データバス幅よりも小さいデータに対しても、メモリを介してデータを共有することができる。例えば、データバス幅が３２ビット（４バイト）である場合、アドレス変換手段を備えることによって、第１プロセッサから見たメモリの０番地と第２プロセッサから見たメモリの３番地とは同じメモリ領域を指す（同様に、第１プロセッサから見た１、２、３番地は、第２プロセッサから見た２、１、０番地である）。さらに第１プログラムにおいて構造体データがＢ０、Ｂ１、Ｂ２、Ｂ３という４バイトからなると定義されている場合、第２プログラムにおいて構造体データはＢ３、Ｂ２、Ｂ１、Ｂ０という４バイトからなると定義されている。Ｂ０と定義されたバイトデータＢ０に対して、第１プロセッサは０番地をアクセスし、第２プロセッサは３番地をアクセスすることになる。このようにして、データバス幅と同じ幅のデータアクセスだけでなく、小さい幅のデータアクセスの場合でもデータを共有することができる。
【００２５】
さらに、前記プロセッサは、前記プロセッサのエンディアンによるバイトオーダでデータバスに接続されたキャッシュメモリを備え、前記プロセッサは、データバスと同じ幅のデータ単位で前記メモリからキャッシュメモリにデータを読み込む構成としてもよい。
【００２６】
この構成によれば、メモリからキャッシュメモリにデータバスと同じ幅のデータを読み込むので、エンディアンの異なるプロセッサのデータを極めて簡単な構成でキャッシュすることができるという効果がある。加えてキャッシュアクセスにアドレス変換が不要であり且つあるデータが共有メモリに置かれていてもキャッシュメモリに置かれていてもプロセッサは同じアクセス動作によってデータをアクセスすることができる。
【００２７】
また、本発明のデータ共有装置は、互いに異なるエンディアンの第１プロセッサ及び第２プロセッサと、メモリとを有するデータ共有装置であって、第１プロセッサ及び第２プロセッサは、共に第１プロセッサのエンディアンによるバイトオーダでデータバスを介して前記メモリに接続されることを特徴とする。
【００２８】
この構成によれば、データバスと同じ幅のデータについて、メモリに対して、第１プロセッサも第２プロセッサも同じバイトオーダでアクセスすることになるので、当該データの共有を極めて簡単な構成で実現できるという効果がある。
【００２９】
ここで、前記データ共有装置は、さらに、第２プロセッサがデータバスよりも小さい幅のデータについてメモリにアクセスする場合に、データバスにおける当該データの位置を逆転させた位置を指すようにアドレスの下位ビットを変換して前記メモリに出力するアドレス変換手段を備える構成としてもよい。
【００３０】
この構成によれば、アドレス変換手段により、第２プロセッサは、データバスよりも小さい幅のデータについて、メモリにアクセスすることが可能となる。
ここで、前記メモリは、第１プロセッサ及び第２プロセッサにアクセスされる構造体データを記憶し、前記第１プロセッサは、前記構造体データを定義した第１プログラムを実行し、前記第２プロセッサは、前記構造体データについて基本語長より小さい幅のデータを基本語長内で第１プログラムとは逆のオーダで定義した第２プログラムを実行する構成としてもよい。
【００３１】
この構成によれば、第１プロセッサと第２プロセッサとの間で、データバスと同じ幅のデータだけでなく、データバス幅よりも小さいデータに対しても、メモリを介してデータを共有することができる。また、アンキャッシャブルなデータ（キャッシュメモリに格納されないデータ）をエンディアンの異なるプロセッサ間で共有することが可能となる。
【００３２】
ここで、前記データ共有装置は、さらに、ダイレクトメモリアクセス（ＤＭＡ）によるデータ転送を制御する転送手段を備え、前記転送手段は、転送元と転送先とで異なるエンディアンのデータを必要とし、かつデータバスよりも小さい幅のデータを転送する場合に、転送元と転送先とで基本語長内における当該データの順序を逆転させる構成としてもよい。
【００３３】
この構成によればエンディアンの異なる転送元と転送先との間でそれぞれに必要なデータの並び順を確保してＤＭＡ転送することができる。また、転送先でハーフワード単位及びバイト単位でのアクセスでもデータを利用することができる。
【００３４】
ここで、前記転送手段は、転送元と転送先とで異なるエンディアンのデータを必要とし、かつデータバスよりも小さい幅のデータを転送する場合に、データバスにおける当該データの位置を逆転させた位置を指すように、転送元及び転送先の一方のアドレスの下位ビットを変換して前記メモリに出力する変換部を有する構成としてもよい。
【００３５】
この構成によれば、変換部はアドレスの下位数ビットを変換するだけなので簡単な極めて簡単な構成により実現できる。
ここで、第２プロセッサのエンディアンによるバイトオーダでデータバスに接続されたキャッシュメモリを備える構成としてもよい。
【００３６】
この構成によれば、データバスと同じ幅のデータについて、メモリからキャッシュメモリにデータを読み込むので、エンディアンの異なる第１プロセッサのデータを極めて簡単な構成でキャッシュできるという効果がある。
【００３７】
また、本発明のデータ共有方法も上記データ共有装置と同様である。
【００３８】
【発明の実施の形態】
（実施の形態１）
図１は、本実施の形態におけるデータ処理装置の構成を示すブロック図である。同図のようにデータ処理装置は、第１プロセッサ１０、第２プロセッサ２０、共有メモリ３０、アドレス変換部２１、キャッシュメモリ２３を備え、データバス（図中のＤバス）を介してこれらが接続されている。
【００３９】
このデータ処理装置は、（Ａ）ビッグエンディアンの第２プロセッサ２０をリトルエンディアンの第１プロセッサ１０と同じバイトオーダで共有メモリ３０に接続したこと、（Ｂ）第２プロセッサ２０のアドレス変換、（Ｃ）第１プロセッサ１０、第２プロセッサ２０それぞれにおける構造体の定義方法の３点により、メモリによるデータの共有を極めて簡単な構成で実現する。（Ａ）及び（Ｂ）はハードウェア的な構成であり、（Ｃ）はソフトウェア的な構成である。
【００４０】
＜Ａ  バス接続＞
図１において共有メモリ３０及びキャッシュメモリ２３中の３、２、１、０は、下位アドレス（ここではアドレスの下位２ビット）によりアドレッシングされるバイト位置を表している。
【００４１】
第１プロセッサ１０は、リトルエンディアン・プロセッサであり、バス接続点４１、４２を介して共有メモリ３０に接続される。この接続は、リトルエンディアン・プロセッサの一般的なメモリ接続方法（図１９参照）と同じであり、第１プロセッサ１０はリトルエンディアンのバイトオーダで共有メモリ３０に接続されている。つまり、第１プロセッサ１０は、データ入出力端子のリトルエンドＤ［７：０］が共有メモリ３０の０番地に接続されているので、メモリのアドレス昇順にリトルエンドからバイト列を格納する。
【００４２】
第２プロセッサ２０は、ビッグエンディアン・プロセッサであり、バス接続点４３、４２によって、共有メモリ３０に接続される。この接続は上記（Ａ）に関する。すなわち、この接続方法は、ビッグエンディアン・プロセッサの一般的なメモリ接続方法（図１６参照）ではなく、あえてリトルエンディアン・プロセッサの一般的なメモリ接続方法（図１９参照）と同じにしてある。この接続において、第２プロセッサ２０のデータ入出力端子は、ビッグエンドではなくリトルエンドのバイトＤ［７：０］から共有メモリ３０のアドレス昇順に接続されることになる。別言すれば、バス接続点４３、４２によって、第２プロセッサ２０のバイトオーダがビッグエンディアンからリトルエンディアンに入れ替えられている。
【００４３】
この接続によれば、第１プロセッサ１０と第２プロセッサ２０は、共有メモリ３０に対する３２ビットデータ（以下ワードと呼ぶ）のアクセスによるデータ共有が可能となる。加えて、キャッシュメモリ２３へ共有メモリ３０から３２ビット単位でデータをキャッシュする（読み込む）ことが可能となる。ただし、１６ビットデータ（ハーフワードと呼ぶ）、８ビットデータ（バイト）のアクセスによるデータ共有は、この接続だけでは実現できない。これは、上記（Ｂ）（Ｃ）とあいまって実現することができる。
【００４４】
共有メモリ３０は、その第１プロセッサ１０のデータ入出力端子Ｄ［３１：２３］、Ｄ［２４：１６］、Ｄ［１５：８］、Ｄ［７：０］が、下位アドレス（アドレスの下位２ビット（Ａ１、Ａ０））が指すバイト位置である３、２、１、０番地に対応している。
【００４５】
＜Ｂ  アドレス変換＞
アドレス変換部２１は、第２プロセッサ２０の下位アドレスを変換して共有メモリ３０に出力する。このアドレス変換は上記（Ｂ）に関し、基本語長である３２ビットより小さいデータについて、基本語長内の当該データの位置を逆転させた位置を指すように下位アドレスを変換する。
【００４６】
図２は、アドレス変換部２１によるアドレス変換の入出力論理を示す図である。アドレス変換部２１への入力は、「アクセスサイズ」、「変換前アドレス」であり、何れも第２プロセッサ２０から入力される。アクセスサイズは、ワードアクセス、ハーフワードアクセス、バイトアクセスの何れかを示す。変換前アドレスは、アドレスバスの最下位から２ビットつまりＡ１、Ａ０である。
【００４７】
アドレス変換部２１の出力は変換後アドレスである。変換後アドレスについて、同図に示すように、アドレス変換部２１は、ワードアクセスの場合は、Ａ１、Ａ０をそのまま出力する（つまり、無変換である）。ハーフワードアクセスの場合は、Ａ１のみ反転しＡ０をそのまま出力する。バイトアクセスの場合はＡ１とＡ０を共に反転して出力する。ここでは、ワードアクセス、ハーフワードアクセスにおいて、第２プロセッサ２０はミスアライメントのデータにはアクセスしないものとする。
【００４８】
図３は、第２プロセッサ２０がワードをアクセスする場合の説明図である。第２プロセッサ２０がワード単位でアクセスする場合は、共有メモリ３０のデータを第１プロセッサ１０と共有することができる。この場合、アドレス変換部２１はアドレス変換しない。
【００４９】
図４（ａ）は、第２プロセッサ２０がハーフワードをアクセスする場合の説明図である。ハーフワードアクセスではアドレス変換部２１によって、変換前の下位アドレス０番地（Ａ１、Ａ０＝０、０）は下位アドレス２番地（１、０）に、また下位アドレス２番地（Ａ１、Ａ０＝１、０）は下位アドレス０番地（０、０）に変換されることになる。同図（ａ）のように、第２プロセッサ２０がメモリの０番地にハーフワード”８９ＡＢ”をストアする命令（ｍｏｖｈｗ  ＃８９ＡＢｈ，ｍｅｍ（０））を実行すると、メモリイメージ（メモリデータ）４ｂのように２番地と３番地に”８９ＡＢ”をストアすることになる。これに対して、第１プロセッサ１０が同様の命令を実行すると、メモリイメージ４ａのように０番地と１番地に”８９ＡＢ”をストアすることになる。
【００５０】
このように、ハーフワードアクセスにおいて、第１プロセッサ１０から見た共有メモリ３０の下位アドレス０番地は、第２プロセッサ２０から見た共有メモリ３０の下位アドレス２番地であり、同様に、第１プロセッサ１０から見た２番地は、第２プロセッサ２０から見た０番地となっている。
【００５１】
図５（ａ）は、第２プロセッサ２０がバイトアクセスする場合の説明図である。バイトアクセスではアドレス変換部２１によって、例えば変換前の下位アドレス０番地（Ａ１、Ａ０＝０、０）はアドレス３番地（１、１）に変換されることになる。同図（ａ）のように、第２プロセッサ２０がメモリの０番地にバイト”８９”をストアする命令（ｍｏｖｂ  ＃８９ｈ，ｍｅｍ（０））を実行すると、メモリイメージ５ｂのように３番地に”８９”をストアすることになる。これに対して、第１プロセッサ１０が同様の命令を実行すると、メモリイメージ５ａのように０番地に”８９”をストアすることになる。
【００５２】
このように、バイトアクセスでは、第２プロセッサ２０は、アドレス変換部２１によって、下位アドレス０番地は３番地に、１番地は２番地に、２番地は１番地に、３番地は０番地に変換されることになる。つまり、バイトアクセスにおいて、第１プロセッサ１０から見た共有メモリ３０の下位アドレス０、１、２、３番地は、第２プロセッサ２０から見た共有メモリ３０の下位アドレス３、２、１、０番地となっている。
【００５３】
ところで、上記（Ａ）に（Ｂ）のアドレス変換を加えても、第２プロセッサ２０は共有メモリ３０を介して第１プロセッサ１０との間でハーフワード単位及びバイト単位でデータを共有することまでは実現されていない。（Ｂ）のアドレス変換は、（Ａ）によるバイトオーダの入れ替えに伴って、第２プロセッサ２０がハーフワード及びバイトにてアクセスできるようにした点に意味がある。
【００５４】
つまり、アドレス変換部２１を備えていなければ、第２プロセッサ２０は共有メモリ３０に対して、ワード単位のアクセスが可能であるものの、ハーフワード及びバイト単位でのアクセスができなくなる。例えば、図４（ａ）の例では、共有メモリ３０の０、１番地は、メモリイメージ４ａのようにワードの下位側（図の右側）ハーフワードであるが、第２プロセッサ２０は０、１番地のつもりでワードの上位側のハーフワードに”８９ＡＢ”を出力している。この状態で、仮にアドレス変換なしで０番地を共有メモリ３０に指定すれば、共有メモリ３０において”８９ＡＢ”が入力されていない下位側ハーフワード（０、１番地）に、バス上の無効なデータを書き込んでしまうことになる。
【００５５】
このように（Ｂ）のアドレス変換は、（Ａ）のバイトオーダ入れ替えによって生じるハーフワード、バイトアクセスの不具合を解消する点に意味がある。また、アドレス変換部２１は、簡単な組み合わせ回路で実現できるので、変換による下位アドレス出力の遅延は無視できる。
【００５６】
また、ハーフワード、バイトに関して、図４（ａ）、図５（ａ）のように第１プロセッサ１０から見たアドレスと、第２プロセッサ２０から見たアドレスとが食い違っているから、ハーフワード単位、バイト単位のデータ共有はできないように思える。この食い違いに対しては、例えば、図４（ｂ）、図５（ｂ）に示すように、第１プロセッサ１０と第２プロセッサ２０とが、ハーフワード及びバイトの共有データに対しては、食い違ったアドレスを直接指定すれば、ワード単位だけでなくハーフワード単位でもバイト単位でも共有可能となる。本実施形態では、この点を上記（Ｃ）により実現する。
【００５７】
キャッシュメモリ２３は、第２プロセッサ２０に対してバス接続点４４介して、一般的なビッグエンディアン・プロセッサとメモリとの接続方法（図１６参照）により接続されている。図１では、キャッシュメモリ２３は第２プロセッサ２０外部に備えているが、第２プロセッサ２０内部であってもよい。キャッシュメモリ２３は、ワード単位で共有メモリ３０のデータをキャッシュすることができる。これは上記（Ａ）のバイトオーダを入れ替える接続による。
【００５８】
図６は、共有メモリ３０及びキャッシュメモリ２３のメモリイメージを示す図である。キャッシュメモリ２３は、共有メモリ３０からワード単位にデータをキャッシュすることにより、共有メモリ３０と下位アドレスのオーダーが異なる点を除いて同一のメモリイメージを保持することができる。ただし、キャッシュメモリ２３が、ハーフワード単位、バイト単位に共有メモリ３０からキャッシュすることは、上記（Ａ）の接続だけでは実現することができない。
【００５９】
＜Ｃ  構造体定義＞
図７は、構造体の定義（上記（Ｃ））によりハーフワード単位、バイト単位のデータ共有を行う説明図である。同図において、第１プロセッサ１０に実行される第１プログラム１０ａは、構造体１０ｂのように定義されたソースプログラムから生成されている。また、第２プロセッサ２０に実行される第２プログラム２０ａは、構造体２０ｂのように定義されたソースプログラムから生成されている。構造体２０ｂは、構造体１０ｂと同じ変数を定義しているが、基本語長の範囲内では基本語長より小さい変数の順序を逆順に定義している。
【００６０】
例えば、１６ビット整数型の変数ｘ、ｙについて構造体１０ｂでは「ＳＨＯＲＴ  ＩＮＴＥＧＥＲ  ｙ，ｘ；」と定義され、構造体２０ｂでは「ＳＨＯＲＴ  ＩＮＴＥＧＥＲ  ｘ，ｙ；」と逆順に定義されている。また、文字型の変数ａ，ｂ，ｃ，ｄについても構造体１０ｂでは「ＣＨＡＲ  ｄ，ｃ，ｂ，ａ；」と定義され、構造体２０ｂでは「ＣＨＡＲ  ａ，ｂ，ｃ，ｄ；」と逆順に定義されている。これらの構造体はプログラマにより記述され、あるいはコンパイラによって逆順に記述するようにしてもよい。
【００６１】
これにより、図４（ａ）、図５（ａ）に示したようなハーフワード及びバイトアクセスでのアドレスの食い違いを、構造体での定義の中で入れ替えることにより、許容することができる。つまり、図４（ｂ）、図５（ｂ）に示したように、共有すべき同一の変数に対して、第１プロセッサ１０及び第２プロセッサ２０がハーフワード及びバイトアクセスをする場合に、食い違ったアドレスを指すようにすることができる。
【００６２】
図７に示すように、構造体１０ｂによって定義された共有メモリ３０のメモリイメージと、構造体２０ｂによって定義されたメモリイメージとは一致する。ただし、第２プロセッサ２０から見たハーフワード、バイトの下位アドレスは、第１プロセッサ１０とは逆順になる（食い違っている）。例えば、変数ａについて、第１プロセッサ１０からは下位アドレス３番地に格納されていると見え、第２プロセッサ２０内部では下位アドレス０番地と見える。これにより、バイトアクセスによっても変数ａを共有することができる。
【００６３】
また、変数ｙは、第１プロセッサ１０からは下位アドレス０、１番地に格納されていると見え、第２プロセッサ２０内部では下位アドレス２、３番地と見える。これにより、ハーフワードアクセスによっても変数ｙを共有することができる。
【００６４】
また、キャッシュメモリ２３についても、共有すべき構造体として定義されたデータであれば、ワード単位だけでなくハーフワード単位でもバイト単位でもキャッシュすることができる。
【００６５】
図８は、構造体の他の定義例を示す図である。同図において第１プロセッサ１０用の構造体１０ｃにおいて、最後の符号なし８ビット変数「ＣＨＡＲ  ｂ２；」の定義により基本語長内で８ビット余ることになる。そのため、構造体２０ｃでは、余りと同じビット長のダミーバイトデータ「ＣＨＡＲ  ｂＤｕｍｍｙ０；」を挿入している。これにより、構造体２０ｃでは、８ビットの余りも含めて基本語長内で逆順に定義している。
【００６６】
図９は、コンパイルの前処理として、ソースプログラム中の構造体の定義を逆順にする処理を示す図である。
同図のように、前処理部１００は、第１プロセッサ１０用の第１ソースプログラムと第２プロセッサ２０用の第２ソースプログラムを入力し、両者における共有すべき構造体を検出し（Ｓ１１）、一方のソースプログラムにおける基本語長内の変数の順序が他方のソースプログラムにおける変数の順序と逆になるように変数の順序を入れ替える（Ｓ１２）。その際、必要に応じて図８に示したダミーバイトデータ又はダミーハーフワードを挿入する。この後、両ソースプログラムはそれぞれのコンパイラにてコンパイルされる。
【００６７】
これにより、プログラマが共有すべき構造体データの順序をいちいち考えてプログラムする必要がなくなり、共有すべき変数名だけを一致させておけばよいので、プログラマの負担を小さくすることができる。
【００６８】
以上説明してきたように、本実施の形態におけるデータ処理装置によれば、（Ａ）ビッグエンディアンの第２プロセッサ２０をリトルエンディアンの第１プロセッサ１０と同じバイトオーダで共有メモリ３０に接続したこと（図１のバス接続点４２、４３参照）によって、リトルエンディアンの第１プロセッサ１０とビッグエンディアンの第２プロセッサ２０とで共有メモリをワード単位のアクセスによってデータを共有することができる。加えて、ビッグエンディアン・プロセッサのキャッシュメモリに、リトルエンディアンの共有メモリからワード単位でキャッシュすることができる。
【００６９】
また（Ａ）に加えて（Ｂ）アドレス変換部２１によって、第２プロセッサ２０は、ハーフワード単位及びバイト単位でのアクセスによるデータ共有までは必ずしもできないが、リトルエンディアン用のメモリをアクセスすることができる。例えば、リトルエンディアンで接続された第１プロセッサ１０と共有メモリ３０に対して、ビッグエンディアンの第２プロセッサ２０を（Ａ）（Ｂ）という簡単な構成で、第２プロセッサ２０のメモリとしてアクセスすることができる。
【００７０】
さらに、（Ａ）、（Ｂ）に加えて（Ｃ）第１プロセッサ１０と第２プロセッサ２０とで構造体定義を基本語長内で基本語長より小さい変数を逆順に定義することによって、リトルエンディアンの第１プロセッサ１０とビッグエンディアンの第２プロセッサ２０とで共有メモリをワード単位のアクセスだけでなく、ハーフワード単位でもバイト単位でもデータを共有することができる。
【００７１】
なお、上記実施の形態では、第１プロセッサ１０がリトルエンディアン、第２プロセッサ２０がビッグエンディアンである場合の構成を説明したが、逆のエンディアンであってもよい。その場合、共有メモリは両プロセッサからビッグエンディアンとして接続され、アドレス変換部はリトルエンディアン・プロセッサのアドレスを変換する構成とすればよい。
【００７２】
また、上記実施の形態では、第１プロセッサ１０及び第２プロセッサ２０は３２ビットを基本語長としているが、６４ビットや１２８ビットなど他の長さの基本語長であってもよい。この場合、アドレス変換部２１は、基本語長の内部のバイト位置を示す下位アドレスを変換する構成とすればよい。
【００７３】
（実施の形態２）
上記実施の形態では、上記（Ａ）（Ｂ）によって共有メモリ３０に格納されるデータについて、第１プロセッサ１０から見たときと第２プロセッサ２０から見たときとでハーフワードアドレス及びバイトアドレスに食い違いが生じている点を上記（Ｃ）によって解決している。本実施の形態では、この食い違いを（Ｃ）によらないでＤＭＡ転送において解決する構成について説明する。
【００７４】
図１０は、本発明の実施の形態２におけるデータ処理装置の構成を示すブロック図である。同図のデータ処理装置は、図１と比較して、新たにＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３１、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）３２、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  ｄｅｖｉｃｅ）３３、Ｉ／Ｏ３４が追加された点が異なっている。図１と同じ構成要素には同じ符号を付してあるので説明を省略し、異なる点を中心に説明する。
【００７５】
本データ処理装置は、ＤＶＤレコーダやディジタル放送受信機などＡＶ（Ａｕｄｉｏ  Ｖｉｓｕａｌ）機器に備えられる。この場合、第２プロセッサ２０はＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔ  Ｇｒｏｕｐ）による圧縮動画像データの復号や符号化などの画像処理を行い、第１プロセッサ１０は画像処理装置全体の制御を行う。共有メモリ３０は、第１プロセッサ１０と第２プロセッサ２０との間の各種データの授受に用いられる。
【００７６】
ＳＤＲＡＭ３１は、第１プロセッサ１０及び第２プロセッサ２０によって作業メモリとして利用され、ＭＰＥＧ圧縮動画像を示すストリームデータ、復号中のピクチャ、復号後の参照ピクチャ、復号後のオーディオデータなどを保持する。
【００７７】
ＤＭＡＣ３２は、ＤＭＡ転送に際して、転送元データと転送先データとが、異なるエンディアンのデータであって、転送データサイズがワードよりも小さい場合に、バイトオーダを入れ替えるためのアドレス変換を行う。また、ＤＭＡ転送は、メモリ−メモリ間及びメモリ−Ｉ／Ｏ間で行われる。ここで、メモリは共有メモリ３０及びＳＤＲＡＭ３１であり、Ｉ／ＯはＩ／Ｏ３３、Ｉ／Ｏ３４などである。
【００７８】
Ｉ／Ｏ３３、３４は、それぞれ８ビット、１６ビットのＩ／Ｏデバイスであり、例えば、復号後のピクチャデータをシリアルのビデオデータとして出力するビデオ出力部、復号後のオーディオデータを入力し音声信号として出力するオーディオ出力部などである。
【００７９】
図１１は、ＤＭＡＣ３２の詳細な構成を示すブロック図である。同図のようにＤＭＡＣ３２は、第１アドレスカウンタ１０１、第２アドレスカウンタ１０２、ターミナルカウンタ１０３、データラッチ１０５及び制御部１０６を備える。
【００８０】
第１アドレスカウンタ１０１、第２アドレスカウンタ１０２は、それぞれ転送元、転送先アドレスを保持し、転送する毎にカウントアップ又はカウントダウンする。両アドレスカウンタと転送元と転送先との対応付けは逆でもよい。
【００８１】
ターミナルカウンタ１０３は、バースト転送時に転送すべきデータ数をカウントし終えると、制御部１０６に通知しＤＭＡ転送を終了させる。
アドレス変換部１０４は、転送元データと転送先データの間で、又はＩ／Ｏ３３、３４とメモリデータの間で、エンディアンが異なりかつ転送データサイズがワードよりも小さい場合に、転送元と転送先とで基本語長内における当該データの順序を逆転させるために第１アドレスカウンタ１０１から出力される転送元／転送先アドレスを変換する。
【００８２】
ここで、「エンディアンが異なる」というのは、転送元と転送先とが異なるエンディアンのプロセッサにアクセスされること、または、異なるエンディアンのプロセッサとＩ／Ｏに使用されることをいう。例えば、転送元データが第２プロセッサ２０によりロード／ストアされ、転送先データが第１プロセッサ１０によりロード／ストアされる場合や、転送元データが第２プロセッサ２０によりストアされ、転送先がＬＳＢ側から順にバイトデータを要求するＩ／Ｏである場合等である。
【００８３】
また、第２プロセッサによりロードストアされるデータはリトルエンディアンでメモリに格納されているので、ワード単位のＤＭＡでは、アドレス変換部１０４によるアドレス変換なしでそのままＤＭＡ転送することができる。ところが、ワードより小さいハーフワード単位、バイト単位のＤＭＡでは、図４（ａ）、図５（ａ）に示したように、第１プロセッサ１０から見たアドレスと第２プロセッサ２０から見たアドレスが食い違っている。そのためアドレス変換部１０４は、転送元と転送先が異なるエンディアンのデータを必要とする場合、ハーフワード単位及びバイト単位でのアドレスの食い違いを正すためにアドレスを変換する。
【００８４】
図１２は、アドレス変換部１０４によるアドレス変換の入出力論理を示す説明図である。アドレス変換部１０４への入力は、「エンディアン」「アクセスサイズ」、「変換前アドレス」である。「エンディアン」は制御部１０６から入力され、転送元データと転送先データとが同じエンディアンであるか異なるエンディアンであるかを示す。より正確には、転送元データをアクセスするプロセッサと転送先データをアクセスするプロセッサとが同じエンディアンであるか異なるエンディアンであるかを示す。また、転送元、転送先の一方がＩ／Ｏであって、当該Ｉ／Ｏが必要とする転送データのバイトオーダ（又はハーフワードのオーダ）がリトルエンディアンである場合は、転送元／転送先データをアクセスするプロセッサが第１プロセッサ１０であればエンディアンが「同じ」、第２プロセッサ２０であればエンディアンが「異なる」となる。「アクセスサイズ」は、制御部１０６から入力され、ワード、ハーフワード、バイトの何れかを指す。「変換前アドレス」は、第１アドレスカウンタ１０１から入力されるアドレスの下位２ビットである。
【００８５】
「変換後アドレス」に示すように、アドレス変換部１０４は、エンディアンが同じ場合は、ワード転送であってもハーフワード転送であってもバイト転送であっても、変換前アドレスをそのまま出力する（変換しない）。また、エンディアンが異なっていても、ワード転送である場合には、変換前アドレスをそのまま出力する（変換しない）。エンディアンが異なっていて、ハーフワード転送である場合には、Ａ１のみを反転して出力する。エンディアンが異なっていて、バイト転送である場合には、Ａ１、Ａ０の両ビットを反転して出力する。
【００８６】
このように、図１２におけるエンディアンが異なる場合の入出力論理は、図２に示したアドレス変換部２１の入出力論理と同じであるが、重要なのは、アドレス変換部２１によって第２プロセッサ２０のハーフワードアドレス及びバイトアドレスが第１プロセッサ１０と食い違っていることに対して、食い違いを正すように変換している点である。
【００８７】
データラッチ１０５は、メモリ−メモリ間のＤＭＡ転送において転送データを一時的に保持する。
制御部１０６は、第１プロセッサ１０又は第２プロセッサ２０によってアクセス可能な制御レジスタを内部に有し、制御レジスタの設定内容に従ってＤＭＡＣ３２全体を制御する。制御レジスタは、転送元及び転送先のスタートアドレス（Ｉ／Ｏの場合はそのアドレス又は制御部１０６から出力されるＩ／Ｏセレクト信号の指定）、転送データサイズ、転送元及び転送先のエンディアン（第１プロセッサ１０にアクセスされるデータか第２プロセッサ２０にアクセスされるデータか）などを保持する。
【００８８】
図１３（ａ）は、ＤＭＡＣ３２によるＤＭＡ転送の様子を示すタイムチャートの一例である。同図において、ソースメモリ（転送元メモリ）は、例えばＳＤＲＡＭ３１、デスティネーションメモリ（転送先メモリ）は共有メモリ３０である。ＳＤＲＡＭ３１の１００番地以降に第２プロセッサ２０によってストアされた一定量のデータを、共有メモリ３０の９００番地以降にＤＭＡ転送する場合の例を示している。また、ＳＡは第１アドレスカウンタ１０１からアドレス変換部１０４を介して出力されるソースアドレスを、ＳＤは転送元メモリから読み出されたハーフワードのソースデータを、ＤＡは第２アドレスカウンタ１０２によるデスティネーションアドレスを、ＤＤは転送先メモリに書き込まれるハーフワードのデスティネーションデータを示す。
【００８９】
この場合、第１アドレスカウンタ１０１は１００番地をスタートアドレスとして２ずつインクリメントし、第２アドレスカウンタ１０２は９００番地をスタートアドレスとして２ずつインクリメントする。アドレス変換部１０４は、エンディアンの異なるハーフワードのＤＭＡ転送なので、Ａ１のみを反転する。その結果、アドレスバスに出力されるソースアドレスＳＡは、１０２、１００、１０６、１０４、・・・と出力され、デスティネーションアドレスＤＡは、９００、９０２、９０４、９０６、・・・と出力される。これにより、転送元データは、リトルエンドのハーフワードから転送されることになる。
【００９０】
図１３（ｂ）は、同図（ａ）によるＤＭＡ転送の転送元メモリと転送先メモリのメモリイメージを示す図である。同図のように、転送元メモリの下位アドレス０番地のハーフワードは転送先メモリの下位アドレス２番地に転送され、２番地のハーフワードは０番地に転送される。
【００９１】
これにより、ビッグエンディアンの第２プロセッサ２０によって格納された転送元データは、ＤＭＡ転送を経た後、転送先メモリにおいて第１プロセッサ１０によってハーフワード単位にアクセスすることができる。このように、ＤＭＡＣ３２は、図４（ａ）図５（ａ）に示したアドレスの食い違いを正してＤＭＡ転送を行う。転送後のデータは、第１プロセッサ１０によってハーフワード単位でアドレスが食い違うことなくアクセスすることができる。また、転送先の９００番地がＩ／Ｏ３４であるとすると、ＤＭＡ転送によりＬＳＢから順にハーフワードを供給することができる。図１３では、ハーフワードのＤＭＡ転送を示したがバイト転送の場合も同様である。
【００９２】
また、メモリ−Ｉ／Ｏ間のＤＭＡ転送の場合は、制御部１０６がＩ／Ｏに対して直接チップセレクト信号を出力するので、データラッチ１０５を介することなくメモリから読み出されたデータを直接Ｉ／Ｏに（又はこの逆方向に）転送することになる。その場合も、例えばビッグエンディアンの第２プロセッサ２０によって格納されたデータをバイト単位又はハーフワード単位に、リトルエンドからＩ／Ｏに転送することができる。エンディアンが逆の場合も同様である。
【００９３】
以上説明してきたように、本実施の形態におけるデータ処理装置によれば、上記の（Ｃ）構造体データとして定義されていないデータであっても、ＤＭＡ転送の際に、アドレス変換部１０４によって上記（Ａ）（Ｂ）によって生じるハーフワードアドレス及びバイトアドレスの食い違いを正すので、転送後のデータはハーフワード又はバイト単位のアクセスにより他方のプロセッサが正しく読み出すことができる。また、メモリ−Ｉ／Ｏ間のＤＭＡ転送についても同様に、アドレス変換部１０４によってハーフワードアドレス及びバイトアドレスの食い違いを正すことができる。Ｉ／ＯがＬＳＢ側からデータを必要とする場合も、ＭＳＢ側からデータを必要とする場合も、ＤＭＡＣ３２により必要とされるデータを転送することができる。
【００９４】
なお、アドレス変換部１０４は、第１アドレスカウンタ１０１から出力されるアドレスを変換する代わりに、第２アドレスカウンタ１０２から出力されるアドレスを変換するようにしてもよい。
【００９５】
また、図１１に示したＤＭＡＣでは、ハーフワード又はバイト転送時にアドレス変換により送信先データにおいてハーフワード又はバイトの並びを入れ替えているが、転送元データをワード単位でデータラッチ１０５に取り込み、データラッチ１０５においてハーフワード又はバイトの並びを入れ替えて、転送先メモリにワード単位で書き込む構成としてもよい。
【００９６】
【発明の効果】
本発明のデータ処理装置によれば、（Ａ）ビッグエンディアンの第２プロセッサをリトルエンディアンの第１プロセッサと同じバイトオーダで共有メモリ３０に接続したこと（図１のバス接続点４２、４３参照）によって、リトルエンディアンの第１プロセッサとビッグエンディアンの第２プロセッサとで共有メモリをワード単位のアクセスによってデータを共有することができる。加えて、ビッグエンディアン・プロセッサのキャッシュメモリに、共有メモリからワード単位でキャッシュすることができる。
【００９７】
また（Ａ）に加えて（Ｂ）アドレス変換することによって、第２プロセッサは、ハーフワード単位及びバイト単位でのアクセスによるデータ共有までは必ずしもできないが、リトルエンディアン用のメモリをアクセスすることができる。
【００９８】
さらに、（Ａ）、（Ｂ）に加えて（Ｃ）第１プロセッサと第２プロセッサとでアプリケーションプログラム内での構造体定義を基本語長内で基本語長より小さい変数を逆順に定義することによって、リトルエンディアンの第１プロセッサとビッグエンディアンの第２プロセッサとで共有メモリをワード単位のアクセスだけでなく、ハーフワード単位でもバイト単位でもデータを共有することができる。
【００９９】
さらに、（Ａ）、（Ｂ）に加えて（Ｄ）ＤＭＡ転送の際に（Ｂ）と同じアドレス変換を行うことにより、エンディアンの異なるデータをＤＭＡ転送し、転送元と転送先とでハーフワード単位及びバイト単位でのアクセスによるデータ共有を行うことができる。
【図面の簡単な説明】
【図１】実施の形態１におけるデータ処理装置の構成を示すブロック図である
【図２】アドレス変換部２１によるアドレス変換の入出力論理を示す説明図である。
【図３】第１プロセッサ１０及び第２プロセッサ２０が共有メモリ３０をワードでアクセスする場合の説明図である。
【図４】（ａ）第１プロセッサ１０及び第２プロセッサ２０が共有メモリ３０を同じアドレスでハーフワードをアクセスする場合の説明図である。
（ｂ）第１プロセッサ１０及び第２プロセッサ２０が共有メモリ３０を異なるアドレスで同じハーフワードをアクセスする場合の説明図である。
【図５】（ａ）第１プロセッサ１０及び第２プロセッサ２０が共有メモリ３０を同じアドレスでバイトデータをアクセスする場合の説明図である。
（ｂ）第１プロセッサ１０及び第２プロセッサ２０が共有メモリ３０を異なるアドレスで同じバイトデータをアクセスする場合の説明図である。
【図６】共有メモリ３０及びキャッシュメモリ２３のメモリイメージを示す図である。
【図７】構造体の定義によりハーフワード単位、バイト単位のデータ共有を行う説明図である。
【図８】構造体の他の定義例を示す図である。
【図９】コンパイルの前処理として、ソースプログラム中の構造体の定義を逆順にする処理を示す図である。
【図１０】本発明の実施の形態２におけるデータ処理装置の構成を示すブロック図である。
【図１１】ＤＭＡＣ３２の詳細な構成を示すブロック図である。
【図１２】アドレス変換部１０４によるアドレス変換の入出力論理を示す説明図である。
【図１３】（ａ）ＤＭＡＣ３２によるＤＭＡ転送の様子を示すタイムチャートの一例である。
（ｂ）転送元メモリと転送先メモリのメモリイメージを示す図である。
【図１４】ビッグエンディアンの説明図を示す。
【図１５】ビッグエンディアンの説明図を示す。
【図１６】ビッグエンディアンＣＰＵとメモリとを接続する一般的な構成を示す。
【図１７】リトルエンディアンの説明図を示す。
【図１８】リトルエンディアンの説明図を示す。
【図１９】リトルエンディアンＣＰＵとメモリとを接続する一般的な構成を示す。
【符号の説明】
１０    第１プロセッサ
１０ａ  第１プログラム
１０ｂ、１０ｃ、２０ｂ、２０ｃ  構造体
２０    第２プロセッサ
２０ａ  第２プログラム
２１    アドレス変換部
２３    キャッシュメモリ
３０    共有メモリ
３１    ＳＤＲＡＭ
３２    ＤＭＡＣ
３３    Ｉ／Ｏ
３４    Ｉ／Ｏ
４１    バス接続点
４２    バス接続点
４３    バス接続点
４４    バス接続点
１００    前処理部
１０１    アドレスカウンタ
１０２    アドレスカウンタ
１０３    ターミナルカウンタ
１０４    アドレス変換部
１０５    データラッチ
１０６    制御部
【図１】
2004287481.tif 000003
【図２】
2004287481.tif 000004
【図３】
2004287481.tif 000005
【図４】
2004287481.tif 000006
【図５】
2004287481.tif 000007
【図６】
2004287481.tif 000008
【図７】
2004287481.tif 000009
【図８】
2004287481.tif 000010
【図９】
2004287481.tif 000011
【図１０】
2004287481.tif 000012
【図１１】
2004287481.tif 000013
【図１２】
2004287481.tif 000014
【図１３】
2004287481.tif 000015
【図１４】
2004287481.tif 000016
【図１５】
2004287481.tif 000017
【図１６】
2004287481.tif 000018
【図１７】
2004287481.tif 000019
【図１８】
2004287481.tif 000020
【図１９】
2004287481.tif 000021