(57)【要約】【課題】メモリの使用効率低下及び処理負荷増大を招くことなく、データ幅の異なる様々なデータを読み書きする。【解決手段】最大でＬビットのデータが格納されるｋビット幅のｍ個のメモリ（第１〜第ｍメモリ）を制御するメモリ制御回路であって、アドレスの下位ｊビットに基づいて、データの最初のｋビットを格納するメモリ（第ｎメモリ）を決定し、アドレスの上位Ａ−ｊビットを第ｎ〜第ｍメモリに入力し、当該アドレスに１を加算したアドレスを第１〜第ｎ−１メモリに入力するアドレス入力回路と、ｋビットずつに分割した分割データを、第ｎ〜第ｍメモリ、第１〜第ｎ−１メモリの順に入力するデータ入力回路と、第ｎ〜第ｍメモリ、第１〜第ｎ−１メモリの順にデータ幅に応じた数のメモリから分割データを読み出すデータ出力回路と、第ｎ〜第ｍメモリ、第１〜第ｎ−１メモリの順に、Ｄ／ｋ個のメモリを読み書き可能な状態にするメモリ選択回路と、を備える。【選択図】図１
2007172332.tif 000002
【特許請求の範囲】
【請求項１】
データ幅（Ｄビット）がｋビットの整数倍で最大でＬビットであるデータが格納されるｋビット幅のｍ（＝Ｌ／ｋ）個のメモリ（第１〜第ｍメモリ）を制御するメモリ制御回路であって、
前記データの格納先を示すＡビットのアドレスのうちの所定のｊビットである開始位置指定アドレスに基づいて、前記ｍ個のメモリのうち前記データの最初のｋビットを格納するメモリ（第ｎメモリ）を決定し、前記Ａビットのアドレスのうちの前記所定のｊビットを除くＡ−ｊビットを前記データの格納先を指定する第１指定アドレスとして前記第ｎ〜第ｍメモリに入力し、前記指定アドレスに１を加算した第２指定アドレスを前記第１〜第ｎ−１メモリに入力するアドレス入力回路と、
前記開始位置指定アドレスに基づいて、前記データをｋビットずつに分割した分割データを、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に入力するデータ入力回路と、
前記開始位置指定アドレスに基づいて、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に前記データのデータ幅に応じた数のメモリから前記分割データを読み出して前記データとして出力するデータ出力回路と、
前記開始位置指定アドレスと前記データのデータ幅とに基づいて、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に、Ｄ／ｋ個のメモリを読み書き可能な状態にするメモリ選択回路と、
を備えることを特徴とするメモリ制御回路。
【請求項２】
請求項１に記載のメモリ制御回路であって、
前記データ出力回路は、
前記開始位置指定アドレスに基づいて、前記ｍ個のメモリから出力されるｋビットの分割データを前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に並び替えて出力する出力データ並び替え回路と、
前記出力データ並び替え回路から出力されるｍ個の分割データから、前記データのデータ幅に応じた分割データを選択して出力する出力データ選択回路と、
を含んで構成されることを特徴とするメモリ制御回路。
【請求項３】
請求項２に記載のメモリ制御回路であって、
前記出力データ選択回路は、
前記出力データ並び替え回路から出力されるｍ個の分割データの夫々が順に入力されるｍ個の論理積回路（第１〜第ｍ論理積回路）と、
前記データのデータ幅に基づいて、前記第２〜第Ｄ／ｋ論理積回路に前記分割データを出力するための一方の論理値を入力し、前記第（Ｄ／ｋ＋１）〜第ｍ論理積回路に前記分割データをマスクして出力するための他方の論理値を入力するマスクデータ入力回路と、
を含んで構成されることを特徴とするメモリ制御回路。
【請求項４】
請求項１〜３の何れか一項に記載のメモリ制御回路であって、
前記開始位置指定アドレスが、前記Ａビットのアドレスのうちの下位ｊビットであることを特徴とするメモリ制御回路。
【請求項５】
データ幅（Ｄビット）がｋビットの整数倍で最大でＬビットであるデータが格納されるｋビット幅のｍ（＝Ｌ／ｋ）個のメモリ（第１〜第ｍメモリ）の制御方法であって、
前記データの格納先を示すＡビットのアドレスのうちの所定のｊビットである開始位置指定アドレスに基づいて、前記ｍ個のメモリのうち前記データの最初のｋビットを格納するメモリ（第ｎメモリ）を決定し、
前記Ａビットのアドレスのうちの前記所定のｊビットを除くＡ−ｊビットを前記データの格納先を指定する第１指定アドレスとして前記第ｎ〜第ｍメモリに入力し、
前記指定アドレスに１を加算した第２指定アドレスを前記第１〜第ｎ−１メモリに入力し、
前記データを書き込む際には、前記開始位置指定アドレスに基づいて、前記データをｋビットずつに分割した分割データを、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に入力し、
前記データを読み出す際には、前記開始位置指定アドレスに基づいて、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に前記データのデータ幅に応じた数のメモリから前記分割データを読み出して前記データとして出力し、
前記開始位置指定アドレスと前記データのデータ幅とに基づいて、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に、Ｄ／ｋ個のメモリを読み書き可能な状態にすることを特徴とするメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御回路及びメモリ制御方法に関する。
【背景技術】
【０００２】
図２１は、一般的なメモリの構成を示す図である。メモリ５０は、Ａビットのアドレスにより指定される最大でＬビットのデータの読み書きを行うことができる。このようなメモリ５０に、図２２に示すようなデータ幅の異なる様々なデータを格納する方法として、２つの方法が考えられる。
【０００３】
１つ目の方法は、図２３に示すように、夫々のデータを１つのアドレスに格納する方法である（例えば、特許文献１）。そして、２つ目の方法としては、図２４に示すように、データ幅の異なる複数のデータをメモリ５０に詰め込んで格納する方法である。
【特許文献１】特開平６−２６６６１４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、図２３に示す方法を用いると、データ幅がＬビット未満のデータを格納した場合に、使われないデータ領域（無効データ領域）が発生し、メモリの使用効率が低下してしまう。また、図２４に示す方法を用いると、無効データ領域は発生せずにメモリ５０の使用効率は向上するが、メモリ５０にデータを書き込む前やメモリ５０からデータを読み出した後に、データの詰め込み（パッキング）や展開（アンパッキング）の処理が必要となり、処理負荷が増大してしまう。
【０００５】
本発明は上記課題を鑑みてなされたものであり、メモリの使用効率低下及び処理負荷増大を招くことなく、データ幅の異なる様々なデータの読み書きを可能とするメモリ制御回路及びメモリ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明のメモリ制御回路は、データ幅（Ｄビット）がｋビットの整数倍で最大でＬビットであるデータが格納されるｋビット幅のｍ（＝Ｌ／ｋ）個のメモリ（第１〜第ｍメモリ）を制御するメモリ制御回路であって、前記データの格納先を示すＡビットのアドレスのうちの所定のｊビットである開始位置指定アドレスに基づいて、前記ｍ個のメモリのうち前記データの最初のｋビットを格納するメモリ（第ｎメモリ）を決定し、前記Ａビットのアドレスのうちの前記所定のｊビットを除くＡ−ｊビットを前記データの格納先を指定する第１指定アドレスとして前記第ｎ〜第ｍメモリに入力し、前記指定アドレスに１を加算した第２指定アドレスを前記第１〜第ｎ−１メモリに入力するアドレス入力回路と、前記開始位置指定アドレスに基づいて、前記データをｋビットずつに分割した分割データを、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に入力するデータ入力回路と、前記開始位置指定アドレスに基づいて、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に前記データのデータ幅に応じた数のメモリから前記分割データを読み出して前記データとして出力するデータ出力回路と、前記開始位置指定アドレスと前記データのデータ幅とに基づいて、前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に、Ｄ／ｋ個のメモリを読み書き可能な状態にするメモリ選択回路と、を備えることとする。
【０００７】
そして、前記データ出力回路は、前記開始位置指定アドレスに基づいて、前記ｍ個のメモリから出力されるｋビットの分割データを前記第ｎ〜第ｍメモリ、前記第１〜第ｎ−１メモリの順に並び替えて出力する出力データ並び替え回路と、前記出力データ並び替え回路から出力されるｍ個の分割データから、前記データのデータ幅に応じた分割データを選択して出力する出力データ選択回路と、を含んで構成されることとすることができる。
【０００８】
さらに、前記出力データ選択回路は、前記出力データ並び替え回路から出力されるｍ個の分割データの夫々が順に入力されるｍ個の論理積回路（第１〜第ｍ論理積回路）と、前記データのデータ幅に基づいて、前記第２〜第Ｄ／ｋ論理積回路に前記分割データを出力するための一方の論理値を入力し、前記第（Ｄ／ｋ＋１）〜第ｍ論理積回路に前記分割データをマスクして出力するための他方の論理値を入力するマスクデータ入力回路と、を含んで構成されることとすることができる。
【０００９】
また、前記開始位置指定アドレスは、前記Ａビットのアドレスのうちの下位ｊビットとすることができる。
【発明の効果】
【００１０】
メモリの使用効率低下及び処理負荷増大を招くことなく、データ幅の異なる様々なデータの読み書きを可能とするメモリ制御回路及びメモリ制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１１】
＝＝メモリ制御回路の構成＝＝
図１は、本発明の一実施形態であるメモリ制御回路の構成を示す図である。メモリ制御回路１は、例えばｋビット幅のｍ個のメモリＭ０〜Ｍｍ−１に対するデータのＲＥＡＤ／ＷＲＩＴＥを制御する回路であり、加算器１１、デコーダ１２、セレクタＳ０〜Ｓ３、及びＡＮＤ回路Ａ１〜Ａｍ−１を備えている。
【００１２】
図２は、メモリＭ０〜Ｍｍ−１に格納されるデータの例を示す図である。図に示されるように、格納されるデータのデータ幅は、ｋビットの整数倍であり、最大でＬビットとなっている。ここで、メモリＭ０〜Ｍｍ−１の個数「ｍ」は、ｍ＝Ｌ／ｋとなっている。なお、本実施形態においては、図２に示すようにデータ形式は左詰めになっているが、データ形式は左詰めに限られず、右詰め等他の形式とすることも可能である。
【００１３】
例えばＡビットのアドレスバスADDRESSには、メモリＭ０〜Ｍｍ−１に格納されたデータを指定するためのアドレス［Ａ−１：０］が入力される。そして、セレクタＳ０の入力Ａには、Ａビットのアドレスの上位Ａ−ｊビット［Ａ−１：ｊ］（以下、「第１指定アドレス」と称する）が入力される。また、セレクタＳ０の入力Ｂには、加算器１１により第１指定アドレスに１が加算されたアドレス（以下、「第２指定アドレス」と称する）が入力される。そして、セレクタＳ０の入力ＳＥＬには、Ａビットのアドレスの下位ｊビット［ｊ−１：０］（以下、「開始位置指定アドレス」と称する）が入力される。
【００１４】
この開始位置指定アドレスは、図２に示した様々なデータ幅のデータを、ｍ個のメモリＭ０〜Ｍｍ−１の何れを先頭として格納するかを示すものであり、ビット数「ｊ」は、２ｊ−１＜ｍ≦２ｊとなっている。そして、セレクタＳ０の出力Ｙ０〜Ｙｍ−２からは、開始位置指定アドレスに基づいて、第１指定アドレス又は第２指定アドレスの何れか一方が出力され、メモリＭ０〜Ｍｍ−２のアドレス入力Ａに入力される。なお、メモリＭｍ−１のアドレス入力Ａには、第１指定アドレスが入力される。
【００１５】
図３は、セレクタＳ０の動作を示す真理値表である。図に示すように、セレクタＳ０の入力ＳＥＬの値が例えば「０」（１０進）の場合は、出力Ｙ０〜Ｙｍ−２は第１指定アドレス（入力Ａ）となる。そして、入力ＳＥＬの値が「１」（１０進）の場合は、出力Ｙ１〜Ｙｍ−２は第１指定アドレス（入力Ａ）となり、出力Ｙ０は第２指定アドレス（入力Ｂ）となる。以下同様に、入力ＳＥＬの値が「ｐ」（１０進）の場合は、出力Ｙｐ〜出力Ｙｍ−２は第１指定アドレス（入力Ａ）となり、出力Ｙ０〜Ｙｐ−１は第２指定アドレス（入力Ｂ）となる。なお、入力ＳＥＬの値が「ｍ−１」（１０進）の場合は、出力Ｙ０〜Ｙｍ−２は全て第２指定アドレス（入力Ｂ）となる。
【００１６】
デコーダ１２の入力ＩＮには、例えばｊビット［ｊ−１：０］で示されるWD_LENGTHが入力される。このWD_LENGTHは、図２に示したデータのデータ幅を示す値であり、ｋビットの何倍であるかを基準として表されている。例えば、データが図２に示したｋ×ｑビット幅データである場合、WD_LENGTHの値は「ｑ−１」（１０進）となる。なお、WD_LENGTHとして、図２に示したデータのデータ幅そのものを用いることとしてもよい。例えば、ｋ×ｑビット幅データである場合、WD_LENGTHの値を「ｋ×ｑ」（１０進）としてもよい。ただし、本実施形態に示すように、ｋビットの何倍であるかを基準として表す方が、WD_LENGTHのビット数を少なくすることができる。
【００１７】
図４は、デコーダ１２の動作を示す真理値表である。図に示すように、デコーダ１２の入力ＩＮの値が「ｒ」（１０進）の場合は、出力Ｙ１〜Ｙｒが「１」、出力Ｙｒ＋１〜Ｙｍ−１が「０」となる。つまり、出力Ｙ１〜Ｙｍ−１における「１」の個数に１を加えたものが、メモリＭ０〜Ｍｍ−１のうち、図２に示されるデータを格納するために必要なメモリの個数となっている。
【００１８】
セレクタＳ１は、開始位置指定アドレス及びデコーダ１２の出力Ｙ１〜Ｙｍ−１に基づいて、メモリＭ０〜Ｍｍ−１のうち必要なメモリの読み書きを可能にするものである。セレクタＳ１の入力ＩＮ０には「１」が入力されており、入力ＩＮ１〜ＩＮｍ−１には、デコーダ１２からの出力Ｙ１〜Ｙｍ−１が入力されている。そして、セレクタＳ１の出力／Ｙ０〜／Ｙｍ−１からは、入力ＳＥＬに入力される開始位置指定アドレスに基づいて入力ＩＮ０〜ＩＮｍ−１を並べ替えて反転したものが出力され、メモリＭ０〜Ｍｍ−１の読み書きを可能にするための入力／ＣＳに入力される。
【００１９】
図５は、セレクタＳ１〜Ｓ３の動作を示す真理値表である。図に示すように、セレクタＳ１の入力ＳＥＬの値が例えば「０」（１０進）の場合は、出力／Ｙ０〜／Ｙｍ−１は／ＩＮ０〜／ＩＮｍ−１となる。そして、例えば、データ幅がｋ×３ビットであれば、／Ｙ０〜／Ｙ２が「０」、／Ｙ３〜／Ｙｍ−１が「１」となり、メモリＭ０〜Ｍ２が読み書き可能な状態となる。以下同様に、入力ＳＥＬの値が「ｓ」（１０進）の場合は、出力／Ｙｓ〜／Ｙｍ−１、／Ｙ０〜／Ｙｓ−１の順に、／ＩＮ０〜／ＩＮｍ−１が出力される。そして、データ幅がｋ×ｑビットであれば、メモリＭｓ〜Ｍｍ−１、Ｍ０〜Ｍｓ−１の順に、ｑ個のメモリが読み書き可能な状態となる。
【００２０】
セレクタＳ２は、メモリＭ０〜Ｍｍ−１から読み出されたｋビットずつのデータ（分割データ）を並び替えて出力する回路である。セレクタＳ２の入力ＩＮ０〜ＩＮｍ−１には、メモリＭ０〜Ｍｍ−１のデータ出力Ｑ（ｋビット）が順に入力されている。セレクタＳ２の入力ＳＥＬには、開始位置指定アドレスが入力されている。そして、セレクタＳ２の出力Ｙ０〜Ｙｍ−１からは、入力ＩＮ０〜ＩＮｍ−１を開始位置指定アドレスに基づいて並べ替えたデータが出力される。
【００２１】
図５の真理値表に示されるように、セレクタＳ２の入力ＳＥＬの値が例えば「０」（１０進）の場合は、出力Ｙ０〜Ｙｍ−１は、順に入力ＩＮ０〜ＩＮｍ−１となる。以下同様に、入力ＳＥＬの値が「ｔ」（１０進）の場合は、入力ＩＮ０〜ＩＮｍ−１は、出力Ｙｔ〜Ｙｍ−１、Ｙ０〜Ｙｔ−１の順に並び替えて出力される。
【００２２】
そして、セレクタＳ２の出力Ｙ０は、例えばＬビット［Ｌ−１：０］の読み出しデータバスREAD_DATAの最上位ｋビットに接続され、出力Ｙ１〜Ｙｍ−１は、読み出しデータバスの残りＬ−ｋビットにＡＮＤ回路Ａ１〜Ａｍ−１を介して順に接続されている。ＡＮＤ回路Ａ１〜Ａｍ−１には、デコーダ１２からの出力Ｙ１〜Ｙｍ−１が入力されている。したがって、データ幅がｋ×ｑビットの場合、デコーダ１２からの出力Ｙ１〜Ｙｑ−１が「１」、Ｙｑ〜Ｙｍ−１が「０」となり、セレクタＳ２からの出力Ｙ０〜Ｙｍ−１により構成されるＬビットのデータのうち、ｋ×ｑビット以後のＹｑ〜Ｙｍ−１がＡＮＤ回路Ａｑ〜Ａｍ−１によりゼロクリア（ゼロマスク）される。これにより、ｋビット〜Ｌビットのデータ幅の読み出しデータが読み出しデータバスREAD_DATAに出力される。
【００２３】
セレクタＳ３は、例えばＬビットの書き込みデータバスWRITE_DATA［Ｌ−１：０］上にあるｋビット〜Ｌビットの書き込みデータをｋビットずつに分割し、分割したデータを開始位置指定アドレスに基づいて並べ替えて出力する回路である。セレクタＳ３のＩＮ０〜ＩＮｍ−１には、書き込みデータをｋビットずつに分割したデータ（分割データ）が上位から順に入力されている。そして、入力ＩＮ０〜ＩＮｍ−１が開始位置指定アドレスに基づいて並び替えられ、メモリＭ０〜Ｍｍ−１のデータ入力Ｄに対する出力Ｙ０〜Ｙｍ−１として出力される。
【００２４】
図５の真理値表に示されるように、セレクタＳ３の入力ＳＥＬの値が例えば「０」（１０進）の場合は、出力Ｙ０〜Ｙｍ−１は、順に入力ＩＮ０〜ＩＮｍ−１となる。以下同様に、入力ＳＥＬの値が「ｔ」（１０進）の場合は、入力ＩＮ０〜ＩＮｍ−１は、出力Ｙｔ〜Ｙｍ−１、Ｙ０〜Ｙｔ−１の順に並び替えて出力される。
【００２５】
なお、加算器１１及びセレクタＳ０が本発明のアドレス入力回路に相当し、セレクタＳ３が本発明のデータ入力回路に相当し、セレクタＳ２、デコーダ１２、及びＡＮＤ回路Ａ１〜Ａｍ−１が本発明のデータ出力回路に相当し、デコーダ１２及びセレクタＳ１が本発明のメモリ選択回路に相当する。
【００２６】
さらに、セレクタＳ２が本発明の出力データ並び替え回路に相当し、デコーダ１２及びＡＮＤ回路Ａ１〜Ａｍ−１が本発明の出力データ選択回路に相当する。また、ＡＮＤ回路Ａ１〜Ａｍ−１が本発明の論理積回路に相当し、デコーダ１２が本発明のマスクデータ入力回路に相当する。
【００２７】
＝＝具体例による動作説明＝＝
このようなメモリ制御回路１の動作を、具体例を用いて説明する。図６は、図１に示したメモリ制御回路１の具体例を示す図である。メモリ制御回路１ａは、８ビット幅の４個のメモリＭ０〜Ｍ３を制御する回路であり（ｋ＝８，ｍ＝４）、読み書き可能なデータのデータ幅は８ビット〜３２ビット（８ビット単位）となっている。また、メモリＭ０〜Ｍ３を選択するためのビット数「ｊ」は、２ｊ−１＜ｍ≦２ｊの関係より、ｊ＝２となっている。
【００２８】
そして、メモリ制御回路１ａでは、デコーダ３１及びセレクタ３２〜３４により、図１に示したセレクタＳ０が構成されている。また、セレクタＳ２ａ〜Ｓ２ｄにより、図１に示したセレクタＳ２が構成され、セレクタＳ３ａ〜セレクタＳ３ｄにより、図１に示したセレクタＳ３が構成されている。さらに、データ保持用に、Ｄ型フリップフロップ４１〜４５が設けられている。
【００２９】
デコーダ３１の入力ＩＮには、３２ビットのアドレス［３１：０］の下位２ビット［１：０］（開始位置指定アドレス）が入力される。そして、開始位置指定アドレスに応じた値が、デコーダ３１の出力Ｙ０〜Ｙ２から出力される。セレクタ３２には、デコーダ３１からの出力Ｙ０が入力されており、デコーダ３１の出力Ｙ０が例えば「０」の場合は、入力Ａ（アドレスの上位３０ビット：第１指定アドレス）を出力し、デコーダ３１の出力Ｙ０が例えば「１」の場合は、入力Ｂ（アドレスの上位３０ビット＋１：第２指定アドレス）を出力する。セレクタ３３，３４も同様に、デコーダ３１からの出力Ｙ１，Ｙ２に応じて、第１指定アドレス又は第２指定アドレスを出力する。
【００３０】
図７は、デコーダ３１の動作を示す真理値表である。図に示すように、デコーダ３１の入力ＩＮの値が「０」（１０進）の場合は、出力Ｙ０〜Ｙ２が全て「０」となる。このとき、セレクタ３２〜３４からは第１指定アドレスが出力される。デコーダ３１の入力ＩＮの値が「１」（１０進）の場合は、出力Ｙ１，Ｙ２が「０」となり、出力Ｙ０が「１」となる。このとき、セレクタ３３，３４からは第１指定アドレスが出力され、セレクタ３２からは第２指定アドレスが出力される。デコーダ３１の入力ＩＮの値が「２」（１０進）の場合は、出力Ｙ２が「０」となり、出力Ｙ０，Ｙ１が「１」となる。このとき、セレクタ３４からは第１指定アドレスが出力され、セレクタ３２，３３からは第２指定アドレスが出力される。デコーダ３１の入力ＩＮの値が「３」（１０進）の場合は、出力Ｙ０〜Ｙ２が全て「１」となる。このとき、セレクタ３２〜３４からは第２指定アドレスが出力される。
【００３１】
図８は、デコーダ１２の入力ＩＮに入力されるWD_LENGTHとデータ幅との関係を示す図である。図に示すように、WD_LENGTHに１を加えて８倍した値がデータ幅となっている（データ幅＝８ビット×（WD_LENGTH＋１））。図９は、メモリ制御回路１ａにおけるデコーダ１２の動作を示す真理値表である。図に示すように、デコーダ１２の入力ＩＮの値が「０」（１０進）の場合は、出力Ｙ１〜Ｙ３が全て「０」となる。そして、デコーダ１２の入力ＩＮの値が「１」（１０進）の場合は、出力Ｙ２，Ｙ３が「０」となり、出力Ｙ１が「１」となる。デコーダ１２の入力ＩＮの値が「２」（１０進）の場合は、出力Ｙ３が「０」となり、出力Ｙ１，Ｙ２が「１」となる。そして、デコーダ１２の入力ＩＮの値が「３」（１０進）の場合は、出力Ｙ１〜Ｙ３が全て「１」となる。
【００３２】
図１０は、メモリ制御回路１ａにおけるセレクタＳ１の動作を示す真理値表である。図に示すように、入力ＳＥＬに入力される開始位置指定アドレス（３２ビットのアドレスの下位２ビット［１：０］）が「０」（１０進）の場合、出力／Ｙ０〜／Ｙ３の順にＩＮ０〜ＩＮ３を反転した値が出力される。入力ＳＥＬの値が「１」（１０進）の場合、出力／Ｙ１〜／Ｙ３，／Ｙ０の順にＩＮ０〜ＩＮ３を反転した値が出力される。入力ＳＥＬの値が「２」（１０進）の場合、出力／Ｙ２，／Ｙ３，／Ｙ０，／Ｙ１の順にＩＮ０〜ＩＮ３を反転した値が出力される。入力ＳＥＬの値が「３」（１０進）の場合、出力／Ｙ３，／Ｙ０〜／Ｙ２の順に入力ＩＮ０〜ＩＮ３を反転した値が出力される。
【００３３】
図１１は、セレクタＳ２ａ〜Ｓ２ｄの動作を示す真理値表である。図に示すように、入力ＳＥＬに入力される開始位置指定アドレス（３２ビットのアドレスの下位２ビット［１：０］）が「０」（１０進）の場合、セレクタＳ２ａの出力（Ｒ３１−２４）はメモリＭ０から出力されるデータとなり、セレクタＳ２ｂの出力（Ｒ２３−１６）はメモリＭ１から出力されるデータとなり、セレクタＳ２ｃの出力（Ｒ１５−８）はメモリＭ２から出力されるデータとなり、セレクタＳ２ｄの出力（Ｒ７−０）はメモリＭ３から出力されるデータとなる。
【００３４】
つまり、開始位置指定アドレスが「０」（１０進）の場合、メモリＭ０〜Ｍ３の順に読み出しデータとして出力される。そして、図１１の真理値表に示されるように、開始位置指定アドレスが「１」（１０進）の場合、メモリＭ１〜Ｍ３，Ｍ０の順に読み出しデータとして出力される。また、開始位置指定アドレスが「２」（１０進）の場合、メモリＭ２，Ｍ３，Ｍ０，Ｍ１の順に読み出しデータとして出力される。また、開始位置指定アドレスが「３」（１０進）の場合、メモリＭ３，Ｍ０〜Ｍ２の順に読み出しデータとして出力される。
【００３５】
図１２は、セレクタＳ３ａ〜Ｓ３ｄの動作を示す真理値表である。図に示すように、入力ＳＥＬに入力される開始位置指定アドレス（３２ビットのアドレスの下位２ビット［１：０］）が「０」（１０進）の場合、セレクタＳ３ａの出力（Ｗ３１−２４）は書き込みデータの上位８ビット［３１：２４］となり、セレクタＳ３ｂの出力（Ｗ２３−１６）は書き込みデータの次の８ビット［２３：１６］となり、セレクタＳ３ｃの出力（Ｗ１５−８）は書き込みデータの更に次の８ビット［１５：８］となり、セレクタＳ３ｄの出力（Ｗ７−０）は書き込みデータの下位８ビット［７：０］となる。
【００３６】
つまり、開始位置指定アドレスが「０」（１０進）の場合、書き込みデータを８ビットずつに分割したデータ（分割データ）は、上位から順にメモリＭ０〜Ｍ３に対して出力される。そして、図１２の真理値表に示されるように、開始位置指定アドレスが「１」（１０進）の場合、分割データは上位から順にメモリＭ１〜Ｍ３，Ｍ０に対して出力される。また、開始位置指定アドレスが「２」（１０進）の場合、分割データは上位から順にメモリＭ２，Ｍ３，Ｍ０，Ｍ１に対して出力される。また、開始位置指定アドレスが「３」（１０進）の場合、分割データは上位から順にメモリＭ３，Ｍ０〜Ｍ２に対して出力される。
【００３７】
次に、メモリ制御回路１ａによる読み書き（ＲＥＡＤ／ＷＲＩＴＥ）の動作について具体的に説明する。
【００３８】
（１）ＲＥＡＤ（先頭アドレス：４ｎ番地）
図１３は、読み出しデータの先頭アドレスが４ｎ番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが４ｎ番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「０」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０〜Ｙ２は全て「０」となり、セレクタ３２〜３４からは第１指定アドレスが出力される。つまり、メモリＭ０〜Ｍ３のアドレス入力Ａにはｎ番地が入力されることとなる。
【００３９】
ここで、読み出しデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが読み出し可能な状態となる。そして、メモリＭ０〜Ｍ３のｎ番地のデータがデータ出力Ｑから出力される。メモリＭ０〜Ｍ３から出力されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ〜４ｎ＋３番地のデータとなっている。そして、メモリＭ０〜Ｍ３から読み出されたデータは、順にセレクタＳ２ａ〜Ｓ２ｄから出力される。また、デコーダ１２の出力Ｙ１〜Ｙ３が全て「１」となっているため、メモリＭ１〜Ｍ３から読み出されたデータはＡＮＤ回路Ａ１〜Ａ３によりクリアされない。これにより、読み出しデータバスREAD_DATAには、３２ビット幅のデータが出力される。
【００４０】
また、読み出しデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ２が「０」、出力／Ｙ３が「１」となり、メモリＭ０〜Ｍ２が読み出し可能、メモリＭ３が読み出し不可の状態となる。これにより、セレクタＳ２ｄの出力（Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ３によりゼロクリアされ、２４ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００４１】
また、読み出しデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ０，／Ｙ１が「０」、出力／Ｙ２，／Ｙ３が「１」となり、メモリＭ０，Ｍ１が読み出し可能、メモリＭ２，Ｍ３が読み出し不可の状態となる。これにより、セレクタＳ２ｃ，Ｓ２ｄの出力（Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ２，Ａ３によりゼロクリアされ、１６ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００４２】
また、読み出しデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ０が「０」、出力／Ｙ１〜／Ｙ３が「１」となり、メモリＭ０が読み出し可能、メモリＭ１〜Ｍ３が読み出し不可の状態となる。これにより、セレクタＳ２ｂ〜Ｓ２ｄの出力（Ｒ２３−１６，Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ１〜Ａ３によりゼロクリアされ、８ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００４３】
（２）ＲＥＡＤ（先頭アドレス：４ｎ＋１番地）
図１４は、読み出しデータの先頭アドレスが４ｎ＋１番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが４ｎ＋１番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「１」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０が「１」、出力Ｙ１，Ｙ２が「０」となり、セレクタ３３，３４からは第１指定アドレスが出力され、セレクタ３２からは第２指定アドレスが出力される。つまり、メモリＭ１〜Ｍ３のアドレス入力Ａにはｎ番地が入力され、メモリＭ０のアドレス入力Ａにはｎ＋１番地が入力されることとなる。
【００４４】
ここで、読み出しデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが読み出し可能な状態となる。そして、メモリＭ１〜Ｍ３のｎ番地のデータ及びメモリＭ０のｎ＋１番地のデータがデータ出力Ｑから出力される。メモリＭ１〜Ｍ３，Ｍ０から出力されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ＋１〜４ｎ＋４番地のデータとなっている。そして、メモリＭ１〜Ｍ３，Ｍ０から読み出されたデータは、順にセレクタＳ２ａ〜Ｓ２ｄから出力される。また、デコーダ１２の出力Ｙ１〜Ｙ３が全て「１」となっているため、メモリＭ２，Ｍ３，Ｍ０から読み出されたデータはＡＮＤ回路Ａ１〜Ａ３によりクリアされない。これにより、読み出しデータバスREAD_DATAには、３２ビット幅のデータが出力される。
【００４５】
また、読み出しデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ１〜／Ｙ３が「０」、出力／Ｙ０が「１」となり、メモリＭ１〜Ｍ３が読み出し可能、メモリＭ０が読み出し不可の状態となる。これにより、セレクタＳ２ｄの出力（Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ３によりゼロクリアされ、２４ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００４６】
また、読み出しデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ１，／Ｙ２が「０」、出力／Ｙ３，／Ｙ０が「１」となり、メモリＭ１，Ｍ２が読み出し可能、メモリＭ３，Ｍ０が読み出し不可の状態となる。これにより、セレクタＳ２ｃ，Ｓ２ｄの出力（Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ２，Ａ３によりゼロクリアされ、１６ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００４７】
また、読み出しデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ１が「０」、出力／Ｙ２，／Ｙ３，／Ｙ０が「１」となり、メモリＭ１が読み出し可能、メモリＭ２，Ｍ３，Ｍ０が読み出し不可の状態となる。これにより、セレクタＳ２ｂ〜Ｓ２ｄの出力（Ｒ２３−１６，Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ１〜Ａ３によりゼロクリアされ、８ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００４８】
（３）ＲＥＡＤ（先頭アドレス：４ｎ＋２番地）
図１５は、読み出しデータの先頭アドレスが４ｎ＋２番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが４ｎ＋２番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「２」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０，Ｙ１が「１」、出力Ｙ２が「０」となり、セレクタ３４からは第１指定アドレスが出力され、セレクタ３２，３３からは第２指定アドレスが出力される。つまり、メモリＭ２，Ｍ３のアドレス入力Ａにはｎ番地が入力され、メモリＭ０，Ｍ１のアドレス入力Ａにはｎ＋１番地が入力されることとなる。
【００４９】
ここで、読み出しデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが読み出し可能な状態となる。そして、メモリＭ２，Ｍ３のｎ番地のデータ及びメモリＭ０，Ｍ１のｎ＋１番地のデータがデータ出力Ｑから出力される。メモリＭ２，Ｍ３，Ｍ０，Ｍ１から出力されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ＋２〜４ｎ＋５番地のデータとなっている。そして、メモリＭ２，Ｍ３，Ｍ０，Ｍ１から読み出されたデータは、順にセレクタＳ２ａ〜Ｓ２ｄから出力される。また、デコーダ１２の出力Ｙ１〜Ｙ３が全て「１」となっているため、メモリＭ３，Ｍ０，Ｍ１から読み出されたデータはＡＮＤ回路Ａ１〜Ａ３によりクリアされない。これにより、読み出しデータバスREAD_DATAには、３２ビット幅のデータが出力される。
【００５０】
また、読み出しデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ２，／Ｙ３，／Ｙ０が「０」、出力／Ｙ１が「１」となり、メモリＭ２，Ｍ３，Ｍ０が読み出し可能、メモリＭ１が読み出し不可の状態となる。これにより、セレクタＳ２ｄの出力（Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ３によりゼロクリアされ、２４ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００５１】
また、読み出しデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ２，／Ｙ３が「０」、出力／Ｙ０，／Ｙ１が「１」となり、メモリＭ２，Ｍ３が読み出し可能、メモリＭ０，Ｍ１が読み出し不可の状態となる。これにより、セレクタＳ２ｃ，Ｓ２ｄの出力（Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ２，Ａ３によりゼロクリアされ、１６ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００５２】
また、読み出しデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ２が「０」、出力／Ｙ３，／Ｙ０，／Ｙ１が「１」となり、メモリＭ２が読み出し可能、メモリＭ３，Ｍ０，Ｍ１が読み出し不可の状態となる。これにより、セレクタＳ２ｂ〜Ｓ２ｄの出力（Ｒ２３−１６，Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ１〜Ａ３によりゼロクリアされ、８ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００５３】
（４）ＲＥＡＤ（先頭アドレス：４ｎ＋３番地）
図１６は、読み出しデータの先頭アドレスが４ｎ＋３番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが４ｎ＋３番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「３」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０〜Ｙ３は全て「１」となり、セレクタ３２〜３４からは第２指定アドレスが出力される。つまり、メモリＭ３のアドレス入力Ａにはｎ番地が入力され、メモリＭ０〜Ｍ２のアドレス入力Ａにはｎ＋１番地が入力されることとなる。
【００５４】
ここで、読み出しデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが読み出し可能な状態となる。そして、メモリＭ３のｎ番地のデータ及びメモリＭ０〜Ｍ２のｎ＋１番地のデータがデータ出力Ｑから出力される。メモリＭ３，Ｍ０〜Ｍ２から出力されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ＋３〜４ｎ＋６番地のデータとなっている。そして、メモリＭ３，Ｍ０〜Ｍ２から読み出されたデータは、順にセレクタＳ２ａ〜Ｓ２ｄから出力される。また、デコーダ１２の出力Ｙ１〜Ｙ３が全て「１」となっているため、メモリＭ０〜Ｍ２から読み出されたデータはＡＮＤ回路Ａ１〜Ａ３によりクリアされない。これにより、読み出しデータバスREAD_DATAには、３２ビット幅のデータが出力される。
【００５５】
また、読み出しデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ３，／Ｙ０，／Ｙ１が「０」、出力／Ｙ２が「１」となり、メモリＭ３，Ｍ０，Ｍ１が読み出し可能、メモリＭ２が読み出し不可の状態となる。これにより、セレクタＳ２ｄの出力（Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ３によりゼロクリアされ、２４ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００５６】
また、読み出しデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ３，／Ｙ０が「０」、出力／Ｙ１，／Ｙ２が「１」となり、メモリＭ３，Ｍ０が読み出し可能、メモリＭ１，Ｍ２が読み出し不可の状態となる。これにより、セレクタＳ２ｃ，Ｓ２ｄの出力（Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ２，Ａ３によりゼロクリアされ、１６ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００５７】
また、読み出しデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ３が「０」、出力／Ｙ０〜／Ｙ２が「１」となり、メモリＭ３が読み出し可能、メモリＭ０〜Ｍ２が読み出し不可の状態となる。これにより、セレクタＳ２ｂ〜Ｓ２ｄの出力（Ｒ２３−１６，Ｒ１５−８，Ｒ７−０）は無効なデータとなるが、ＡＮＤ回路Ａ１〜Ａ３によりゼロクリアされ、８ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
【００５８】
（５）ＷＲＩＴＥ（先頭アドレス：４ｎ番地）
図１７は、書き込みデータの先頭アドレスが４ｎ番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが４ｎ番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「０」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０〜Ｙ２は全て「０」となり、セレクタ３２〜３４からは第１指定アドレスが出力される。つまり、メモリＭ０〜Ｍ３のアドレス入力Ａにはｎ番地が入力されることとなる。
【００５９】
ここで、書き込みデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが書き込み可能な状態となる。３２ビットの書き込みデータは上位から８ビットずつに分割され、セレクタＳ３ａ〜Ｓ３ｄを介して、メモリＭ０〜Ｍ３の順にデータ入力Ｄに入力され、夫々のｎ番地に格納される。メモリＭ０〜Ｍ３に格納されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ〜４ｎ＋３番地のデータとなっている。  また、書き込みデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ２が「０」、出力／Ｙ３が「１」となり、メモリＭ０〜Ｍ２が書き込み可能、メモリＭ３が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位２４ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ａ〜Ｓ３ｃを介して、メモリＭ０〜Ｍ２の順にデータ入力Ｄに入力され、夫々のｎ番地に格納される。
【００６０】
また、書き込みデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ０，／Ｙ１が「０」、出力／Ｙ２，／Ｙ３が「１」となり、メモリＭ０，Ｍ１が書き込み可能、メモリＭ２，Ｍ３が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位１６ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ａ，Ｓ３ｂを介して、メモリＭ０，Ｍ１の順にデータ入力Ｄに入力され、夫々のｎ番地に格納される。
【００６１】
また、書き込みデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ０が「０」、出力／Ｙ１〜／Ｙ３が「１」となり、メモリＭ０が書き込み可能、メモリＭ１〜Ｍ３が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位８ビットのデータが、セレクタＳ３ａを介して、メモリＭ０のデータ入力Ｄに入力され、ｎ番地に格納される。
【００６２】
（６）ＷＲＩＴＥ（先頭アドレス：４ｎ＋１番地）
図１８は、書き込みデータの先頭アドレスが４ｎ＋１番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが４ｎ＋１番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「１」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０が「１」、出力Ｙ１，Ｙ２が「０」となり、セレクタ３３，３４からは第１指定アドレスが出力され、セレクタ３２からは第２指定アドレスが出力される。つまり、メモリＭ１〜Ｍ３のアドレス入力Ａにはｎ番地が入力され、メモリＭ０のアドレス入力Ａにはｎ＋１番地が入力されることとなる。
【００６３】
ここで、書き込みデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが書き込み可能な状態となる。３２ビットの書き込みデータは上位から８ビットずつに分割され、セレクタＳ３ａ〜Ｓ３ｄを介して、メモリＭ１〜Ｍ３，Ｍ０の順にデータ入力Ｄに入力され、メモリＭ１〜Ｍ３のｎ番地及びメモリＭ０のｎ＋１番地に格納される。メモリＭ０〜Ｍ３に格納されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ＋１〜４ｎ＋４番地のデータとなっている。
【００６４】
また、書き込みデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ１〜／Ｙ３が「０」、出力／Ｙ０が「１」となり、メモリＭ１〜Ｍ３が書き込み可能、メモリＭ０が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位２４ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ｂ〜Ｓ３ｄを介して、メモリＭ１〜Ｍ３の順にデータ入力Ｄに入力され、夫々のｎ番地に格納される。
【００６５】
また、書き込みデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ１，／Ｙ２が「０」、出力／Ｙ３，／Ｙ０が「１」となり、メモリＭ１，Ｍ２が書き込み可能、メモリＭ３，Ｍ０が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位１６ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ｂ，Ｓ３ｃを介して、メモリＭ１，Ｍ２の順にデータ入力Ｄに入力され、夫々のｎ番地に格納される。
【００６６】
また、書き込みデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ１が「０」、出力／Ｙ２，／Ｙ３，／Ｙ０が「１」となり、メモリＭ１が書き込み可能、メモリＭ２，Ｍ３，Ｍ０が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位８ビットのデータが、セレクタＳ３ｂを介して、メモリＭ１のデータ入力Ｄに入力され、ｎ番地に格納される。
【００６７】
（７）ＷＲＩＴＥ（先頭アドレス：４ｎ＋２番地）
図１９は、書き込みデータの先頭アドレスが４ｎ＋２番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが４ｎ＋２番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「２」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０，Ｙ１が「１」、出力Ｙ２が「０」となり、セレクタ３４からは第１指定アドレスが出力され、セレクタ３２，３３からは第２指定アドレスが出力される。つまり、メモリＭ２，Ｍ３のアドレス入力Ａにはｎ番地が入力され、メモリＭ０，Ｍ１のアドレス入力Ａにはｎ＋１番地が入力されることとなる。
【００６８】
ここで、書き込みデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが書き込み可能な状態となる。３２ビットの書き込みデータは上位から８ビットずつに分割され、セレクタＳ３ａ〜Ｓ３ｄを介して、メモリＭ２，Ｍ３，Ｍ０，Ｍ１の順にデータ入力Ｄに入力され、メモリＭ２，Ｍ３のｎ番地及びメモリＭ０，Ｍ１のｎ＋１番地に格納される。メモリＭ０〜Ｍ３に格納されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ＋２〜４ｎ＋５番地のデータとなっている。
【００６９】
また、書き込みデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ２，／Ｙ３，／Ｙ０が「０」、出力／Ｙ１が「１」となり、メモリＭ２，Ｍ３，Ｍ０が書き込み可能、メモリＭ１が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位２４ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ｃ，Ｓ３ｄ，Ｓ３ａを介して、メモリＭ２，Ｍ３，Ｍ０の順にデータ入力Ｄに入力され、メモリＭ２，Ｍ３のｎ番地及びメモリＭ０のｎ＋１番地に格納される。
【００７０】
また、書き込みデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ２，／Ｙ３が「０」、出力／Ｙ０，／Ｙ１が「１」となり、メモリＭ２，Ｍ３が書き込み可能、メモリＭ０，Ｍ１が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位１６ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ｃ，Ｓ３ｄを介して、メモリＭ２，Ｍ３の順にデータ入力Ｄに入力され、夫々のｎ番地に格納される。
【００７１】
また、書き込みデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ２が「０」、出力／Ｙ３，／Ｙ０，／Ｙ１が「１」となり、メモリＭ２が書き込み可能、メモリＭ３，Ｍ０，Ｍ１が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位８ビットのデータが、セレクタＳ３ｃを介して、メモリＭ２のデータ入力Ｄに入力され、ｎ番地に格納される。
【００７２】
（８）ＷＲＩＴＥ（先頭アドレス：４ｎ＋３番地）
図１９は、書き込みデータの先頭アドレスが４ｎ＋３番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが４ｎ＋３番地である場合、３２ビットのアドレスの下位２ビット［１：０］は、「３」（１０進）となっている。そのため、デコーダ３１の出力Ｙ０〜Ｙ２は全て「１」となり、セレクタ３２〜３４からは第２指定アドレスが出力される。つまり、メモリＭ３のアドレス入力Ａにはｎ番地が入力され、メモリＭ０〜Ｍ２のアドレス入力Ａにはｎ＋１番地が入力されることとなる。
【００７３】
ここで、書き込みデータのデータ幅が３２ビットであるとすると、WD_LENGTHは「３」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「１」となる。そのため、セレクタＳ１の出力／Ｙ０〜／Ｙ３は全て「０」となり、メモリＭ０〜Ｍ３の全てが書き込み可能な状態となる。３２ビットの書き込みデータは上位から８ビットずつに分割され、セレクタＳ３ａ〜Ｓ３ｄを介して、メモリＭ３，Ｍ０〜Ｍ２の順にデータ入力Ｄに入力され、メモリＭ３のｎ番地及びメモリＭ０〜Ｍ２のｎ＋１番地に格納される。メモリＭ０〜Ｍ３に格納されるこれらのデータは、メモリＭ０〜Ｍ３の全体のアドレス空間では、４ｎ＋３〜４ｎ＋６番地のデータとなっている。
【００７４】
また、書き込みデータのデータ幅が２４ビットであるとすると、WD_LENGTHは「２」（１０進）となる。このとき、デコーダ１２の出力Ｙ１，Ｙ２は「１」、出力Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ３，／Ｙ０，／Ｙ１が「０」、出力／Ｙ２が「１」となり、メモリＭ３，Ｍ０，Ｍ１が書き込み可能、メモリＭ２が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位２４ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ｄ，Ｓ３ａ，Ｓ３ｂを介して、メモリＭ３，Ｍ０，Ｍ１の順にデータ入力Ｄに入力され、メモリＭ３のｎ番地及びメモリＭ０，Ｍ１のｎ＋１番地に格納される。
【００７５】
また、書き込みデータのデータ幅が１６ビットであるとすると、WD_LENGTHは「１」（１０進）となる。このとき、デコーダ１２の出力Ｙ１は「１」、出力Ｙ２，Ｙ３は「０」となる。そのため、セレクタＳ１の出力／Ｙ３，／Ｙ０が「０」、出力／Ｙ１，／Ｙ２が「１」となり、メモリＭ３，Ｍ０が書き込み可能、メモリＭ１，Ｍ２が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位１６ビットのデータが上位から８ビットずつに分割され、セレクタＳ３ｄ，Ｓ３ａを介して、メモリＭ３，Ｍ０の順にデータ入力Ｄに入力され、メモリＭ３のｎ番地及びメモリＭ０のｎ＋１番地に格納される。
【００７６】
また、書き込みデータのデータ幅が８ビットであるとすると、WD_LENGTHは「０」（１０進）となる。このとき、デコーダ１２の出力Ｙ１〜Ｙ３は全て「０」となる。そのため、セレクタＳ１の出力／Ｙ３が「０」、出力／Ｙ０〜／Ｙ２が「１」となり、メモリＭ３が書き込み可能、メモリＭ０〜Ｍ２が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位８ビットのデータが、セレクタＳ３ｄを介して、メモリＭ３のデータ入力Ｄに入力され、ｎ番地に格納される。
【００７７】
以上、本発明の一実施形態であるメモリ制御回路１，１ａについて説明した。このようなメモリ制御回路１，１ａによれば、データ幅の異なる様々なデータを、メモリ上に無効なデータ領域を生じることなく格納することができる。つまり、メモリの使用効率低下を招くことなく、データ幅の異なる様々なデータを読み書きすることができる。また、メモリにデータを書き込む前やメモリからデータを読み出した後に、データの詰め込み（パッキング）や展開（アンパッキング）の処理を行う必要がなく、処理負荷の増大を招くこともない。
【００７８】
なお、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【００７９】
また、本実施形態では、Ａビットのアドレスの下位ｊビットを用いてデータの先頭が格納されるメモリを選択することとしたが、下位ｊビットに限らず、上位ｊビットや不連続に選択されたｊビットを用いることも可能である。
【図面の簡単な説明】
【００８０】
【図１】本発明の一実施形態であるメモリ制御回路の構成を示す図である。
【図２】メモリＭ０〜Ｍｍ−１に格納されるデータの一例を示す図である。
【図３】セレクタＳ０の動作を示す真理値表である。
【図４】デコーダ１２の動作を示す真理値表である。
【図５】セレクタＳ１〜Ｓ３の動作を示す真理値表である。
【図６】図１に示したメモリ制御回路１の具体例を示す図である。
【図７】デコーダ３１の動作を示す真理値表である。
【図８】デコーダ１２の入力ＩＮに入力されるWD_LENGTHとデータ幅との関係を示す図である。
【図９】メモリ制御回路１ａにおけるデコーダ１２の動作を示す真理値表である。
【図１０】メモリ制御回路１ａにおけるセレクタＳ１の動作を示す真理値表である。
【図１１】セレクタＳ２ａ〜Ｓ２ｄの動作を示す真理値表である。
【図１２】セレクタＳ３ａ〜Ｓ３ｄの動作を示す真理値表である。
【図１３】読み出しデータの先頭アドレスが４ｎ番地である場合のデータ配置の一例を示す図である。
【図１４】読み出しデータの先頭アドレスが４ｎ＋１番地である場合のデータ配置の一例を示す図である。
【図１５】読み出しデータの先頭アドレスが４ｎ＋２番地である場合のデータ配置の一例を示す図である。
【図１６】読み出しデータの先頭アドレスが４ｎ＋３番地である場合のデータ配置の一例を示す図である。
【図１７】書き込みデータの先頭アドレスが４ｎ番地である場合のデータ配置の一例を示す図である。
【図１８】書き込みデータの先頭アドレスが４ｎ＋１番地である場合のデータ配置の一例を示す図である。
【図１９】書き込みデータの先頭アドレスが４ｎ＋２番地である場合のデータ配置の一例を示す図である。
【図２０】書き込みデータの先頭アドレスが４ｎ＋３番地である場合のデータ配置の一例を示す図である。
【図２１】一般的なメモリの構成を示す図である。
【図２２】データ幅の異なる様々なデータの例を示す図である。
【図２３】夫々のデータを１つのアドレスに格納する方法を示す図である。
【図２４】データ幅の異なる複数のデータをメモリに詰め込んで格納する方法を示す図である。
【符号の説明】
【００８１】
１  メモリ制御回路                      １１  加算器
１２  デコーダ                          Ｓ０〜Ｓ３  セレクタ
Ｍ０〜Ｍｍ−１  メモリ                  ３１  デコーダ
３２〜３４  セレクタ                    ４１〜４５  Ｄ型フリップフロップ
【図１】
2007172332.tif 000003
【図２】
2007172332.tif 000004
【図３】
2007172332.tif 000005
【図４】
2007172332.tif 000006
【図５】
2007172332.tif 000007
【図６】
2007172332.tif 000008
【図７】
2007172332.tif 000009
【図８】
2007172332.tif 000010
【図９】
2007172332.tif 000011
【図１０】
2007172332.tif 000012
【図１１】
2007172332.tif 000013
【図１２】
2007172332.tif 000014
【図１３】
2007172332.tif 000015
【図１４】
2007172332.tif 000016
【図１５】
2007172332.tif 000017
【図１６】
2007172332.tif 000018
【図１７】
2007172332.tif 000019
【図１８】
2007172332.tif 000020
【図１９】
2007172332.tif 000021
【図２０】
2007172332.tif 000022
【図２１】
2007172332.tif 000023
【図２２】
2007172332.tif 000024
【図２３】
2007172332.tif 000025
【図２４】
2007172332.tif 000026