JP2007172332A - メモリ制御回路及びメモリ制御方法 - Google Patents
メモリ制御回路及びメモリ制御方法 Download PDFInfo
- Publication number
- JP2007172332A JP2007172332A JP2005369848A JP2005369848A JP2007172332A JP 2007172332 A JP2007172332 A JP 2007172332A JP 2005369848 A JP2005369848 A JP 2005369848A JP 2005369848 A JP2005369848 A JP 2005369848A JP 2007172332 A JP2007172332 A JP 2007172332A
- Authority
- JP
- Japan
- Prior art keywords
- data
- memories
- address
- bits
- output
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 230000015654 memory Effects 0.000 title claims abstract description 283
- 238000000034 method Methods 0.000 title claims description 15
- 230000008707 rearrangement Effects 0.000 claims description 6
- 230000000873 masking effect Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 14
- 238000012856 packing Methods 0.000 description 4
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/04—Addressing variable-length words or parts of words
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
Abstract
【課題】メモリの使用効率低下及び処理負荷増大を招くことなく、データ幅の異なる様々なデータを読み書きする。
【解決手段】最大でLビットのデータが格納されるkビット幅のm個のメモリ(第1〜第mメモリ)を制御するメモリ制御回路であって、アドレスの下位jビットに基づいて、データの最初のkビットを格納するメモリ(第nメモリ)を決定し、アドレスの上位A−jビットを第n〜第mメモリに入力し、当該アドレスに1を加算したアドレスを第1〜第n−1メモリに入力するアドレス入力回路と、kビットずつに分割した分割データを、第n〜第mメモリ、第1〜第n−1メモリの順に入力するデータ入力回路と、第n〜第mメモリ、第1〜第n−1メモリの順にデータ幅に応じた数のメモリから分割データを読み出すデータ出力回路と、第n〜第mメモリ、第1〜第n−1メモリの順に、D/k個のメモリを読み書き可能な状態にするメモリ選択回路と、を備える。
【選択図】図1
【解決手段】最大でLビットのデータが格納されるkビット幅のm個のメモリ(第1〜第mメモリ)を制御するメモリ制御回路であって、アドレスの下位jビットに基づいて、データの最初のkビットを格納するメモリ(第nメモリ)を決定し、アドレスの上位A−jビットを第n〜第mメモリに入力し、当該アドレスに1を加算したアドレスを第1〜第n−1メモリに入力するアドレス入力回路と、kビットずつに分割した分割データを、第n〜第mメモリ、第1〜第n−1メモリの順に入力するデータ入力回路と、第n〜第mメモリ、第1〜第n−1メモリの順にデータ幅に応じた数のメモリから分割データを読み出すデータ出力回路と、第n〜第mメモリ、第1〜第n−1メモリの順に、D/k個のメモリを読み書き可能な状態にするメモリ選択回路と、を備える。
【選択図】図1
Description
本発明は、メモリ制御回路及びメモリ制御方法に関する。
図21は、一般的なメモリの構成を示す図である。メモリ50は、Aビットのアドレスにより指定される最大でLビットのデータの読み書きを行うことができる。このようなメモリ50に、図22に示すようなデータ幅の異なる様々なデータを格納する方法として、2つの方法が考えられる。
1つ目の方法は、図23に示すように、夫々のデータを1つのアドレスに格納する方法である(例えば、特許文献1)。そして、2つ目の方法としては、図24に示すように、データ幅の異なる複数のデータをメモリ50に詰め込んで格納する方法である。
特開平6−266614号公報
しかしながら、図23に示す方法を用いると、データ幅がLビット未満のデータを格納した場合に、使われないデータ領域(無効データ領域)が発生し、メモリの使用効率が低下してしまう。また、図24に示す方法を用いると、無効データ領域は発生せずにメモリ50の使用効率は向上するが、メモリ50にデータを書き込む前やメモリ50からデータを読み出した後に、データの詰め込み(パッキング)や展開(アンパッキング)の処理が必要となり、処理負荷が増大してしまう。
本発明は上記課題を鑑みてなされたものであり、メモリの使用効率低下及び処理負荷増大を招くことなく、データ幅の異なる様々なデータの読み書きを可能とするメモリ制御回路及びメモリ制御方法を提供することを目的とする。
上記目的を達成するため、本発明のメモリ制御回路は、データ幅(Dビット)がkビットの整数倍で最大でLビットであるデータが格納されるkビット幅のm(=L/k)個のメモリ(第1〜第mメモリ)を制御するメモリ制御回路であって、前記データの格納先を示すAビットのアドレスのうちの所定のjビットである開始位置指定アドレスに基づいて、前記m個のメモリのうち前記データの最初のkビットを格納するメモリ(第nメモリ)を決定し、前記Aビットのアドレスのうちの前記所定のjビットを除くA−jビットを前記データの格納先を指定する第1指定アドレスとして前記第n〜第mメモリに入力し、前記指定アドレスに1を加算した第2指定アドレスを前記第1〜第n−1メモリに入力するアドレス入力回路と、前記開始位置指定アドレスに基づいて、前記データをkビットずつに分割した分割データを、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に入力するデータ入力回路と、前記開始位置指定アドレスに基づいて、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に前記データのデータ幅に応じた数のメモリから前記分割データを読み出して前記データとして出力するデータ出力回路と、前記開始位置指定アドレスと前記データのデータ幅とに基づいて、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に、D/k個のメモリを読み書き可能な状態にするメモリ選択回路と、を備えることとする。
そして、前記データ出力回路は、前記開始位置指定アドレスに基づいて、前記m個のメモリから出力されるkビットの分割データを前記第n〜第mメモリ、前記第1〜第n−1メモリの順に並び替えて出力する出力データ並び替え回路と、前記出力データ並び替え回路から出力されるm個の分割データから、前記データのデータ幅に応じた分割データを選択して出力する出力データ選択回路と、を含んで構成されることとすることができる。
さらに、前記出力データ選択回路は、前記出力データ並び替え回路から出力されるm個の分割データの夫々が順に入力されるm個の論理積回路(第1〜第m論理積回路)と、前記データのデータ幅に基づいて、前記第2〜第D/k論理積回路に前記分割データを出力するための一方の論理値を入力し、前記第(D/k+1)〜第m論理積回路に前記分割データをマスクして出力するための他方の論理値を入力するマスクデータ入力回路と、を含んで構成されることとすることができる。
また、前記開始位置指定アドレスは、前記Aビットのアドレスのうちの下位jビットとすることができる。
メモリの使用効率低下及び処理負荷増大を招くことなく、データ幅の異なる様々なデータの読み書きを可能とするメモリ制御回路及びメモリ制御方法を提供することができる。
==メモリ制御回路の構成==
図1は、本発明の一実施形態であるメモリ制御回路の構成を示す図である。メモリ制御回路1は、例えばkビット幅のm個のメモリM0〜Mm−1に対するデータのREAD/WRITEを制御する回路であり、加算器11、デコーダ12、セレクタS0〜S3、及びAND回路A1〜Am−1を備えている。
図1は、本発明の一実施形態であるメモリ制御回路の構成を示す図である。メモリ制御回路1は、例えばkビット幅のm個のメモリM0〜Mm−1に対するデータのREAD/WRITEを制御する回路であり、加算器11、デコーダ12、セレクタS0〜S3、及びAND回路A1〜Am−1を備えている。
図2は、メモリM0〜Mm−1に格納されるデータの例を示す図である。図に示されるように、格納されるデータのデータ幅は、kビットの整数倍であり、最大でLビットとなっている。ここで、メモリM0〜Mm−1の個数「m」は、m=L/kとなっている。なお、本実施形態においては、図2に示すようにデータ形式は左詰めになっているが、データ形式は左詰めに限られず、右詰め等他の形式とすることも可能である。
例えばAビットのアドレスバスADDRESSには、メモリM0〜Mm−1に格納されたデータを指定するためのアドレス[A−1:0]が入力される。そして、セレクタS0の入力Aには、Aビットのアドレスの上位A−jビット[A−1:j](以下、「第1指定アドレス」と称する)が入力される。また、セレクタS0の入力Bには、加算器11により第1指定アドレスに1が加算されたアドレス(以下、「第2指定アドレス」と称する)が入力される。そして、セレクタS0の入力SELには、Aビットのアドレスの下位jビット[j−1:0](以下、「開始位置指定アドレス」と称する)が入力される。
この開始位置指定アドレスは、図2に示した様々なデータ幅のデータを、m個のメモリM0〜Mm−1の何れを先頭として格納するかを示すものであり、ビット数「j」は、2j−1<m≦2jとなっている。そして、セレクタS0の出力Y0〜Ym−2からは、開始位置指定アドレスに基づいて、第1指定アドレス又は第2指定アドレスの何れか一方が出力され、メモリM0〜Mm−2のアドレス入力Aに入力される。なお、メモリMm−1のアドレス入力Aには、第1指定アドレスが入力される。
図3は、セレクタS0の動作を示す真理値表である。図に示すように、セレクタS0の入力SELの値が例えば「0」(10進)の場合は、出力Y0〜Ym−2は第1指定アドレス(入力A)となる。そして、入力SELの値が「1」(10進)の場合は、出力Y1〜Ym−2は第1指定アドレス(入力A)となり、出力Y0は第2指定アドレス(入力B)となる。以下同様に、入力SELの値が「p」(10進)の場合は、出力Yp〜出力Ym−2は第1指定アドレス(入力A)となり、出力Y0〜Yp−1は第2指定アドレス(入力B)となる。なお、入力SELの値が「m−1」(10進)の場合は、出力Y0〜Ym−2は全て第2指定アドレス(入力B)となる。
デコーダ12の入力INには、例えばjビット[j−1:0]で示されるWD_LENGTHが入力される。このWD_LENGTHは、図2に示したデータのデータ幅を示す値であり、kビットの何倍であるかを基準として表されている。例えば、データが図2に示したk×qビット幅データである場合、WD_LENGTHの値は「q−1」(10進)となる。なお、WD_LENGTHとして、図2に示したデータのデータ幅そのものを用いることとしてもよい。例えば、k×qビット幅データである場合、WD_LENGTHの値を「k×q」(10進)としてもよい。ただし、本実施形態に示すように、kビットの何倍であるかを基準として表す方が、WD_LENGTHのビット数を少なくすることができる。
図4は、デコーダ12の動作を示す真理値表である。図に示すように、デコーダ12の入力INの値が「r」(10進)の場合は、出力Y1〜Yrが「1」、出力Yr+1〜Ym−1が「0」となる。つまり、出力Y1〜Ym−1における「1」の個数に1を加えたものが、メモリM0〜Mm−1のうち、図2に示されるデータを格納するために必要なメモリの個数となっている。
セレクタS1は、開始位置指定アドレス及びデコーダ12の出力Y1〜Ym−1に基づいて、メモリM0〜Mm−1のうち必要なメモリの読み書きを可能にするものである。セレクタS1の入力IN0には「1」が入力されており、入力IN1〜INm−1には、デコーダ12からの出力Y1〜Ym−1が入力されている。そして、セレクタS1の出力/Y0〜/Ym−1からは、入力SELに入力される開始位置指定アドレスに基づいて入力IN0〜INm−1を並べ替えて反転したものが出力され、メモリM0〜Mm−1の読み書きを可能にするための入力/CSに入力される。
図5は、セレクタS1〜S3の動作を示す真理値表である。図に示すように、セレクタS1の入力SELの値が例えば「0」(10進)の場合は、出力/Y0〜/Ym−1は/IN0〜/INm−1となる。そして、例えば、データ幅がk×3ビットであれば、/Y0〜/Y2が「0」、/Y3〜/Ym−1が「1」となり、メモリM0〜M2が読み書き可能な状態となる。以下同様に、入力SELの値が「s」(10進)の場合は、出力/Ys〜/Ym−1、/Y0〜/Ys−1の順に、/IN0〜/INm−1が出力される。そして、データ幅がk×qビットであれば、メモリMs〜Mm−1、M0〜Ms−1の順に、q個のメモリが読み書き可能な状態となる。
セレクタS2は、メモリM0〜Mm−1から読み出されたkビットずつのデータ(分割データ)を並び替えて出力する回路である。セレクタS2の入力IN0〜INm−1には、メモリM0〜Mm−1のデータ出力Q(kビット)が順に入力されている。セレクタS2の入力SELには、開始位置指定アドレスが入力されている。そして、セレクタS2の出力Y0〜Ym−1からは、入力IN0〜INm−1を開始位置指定アドレスに基づいて並べ替えたデータが出力される。
図5の真理値表に示されるように、セレクタS2の入力SELの値が例えば「0」(10進)の場合は、出力Y0〜Ym−1は、順に入力IN0〜INm−1となる。以下同様に、入力SELの値が「t」(10進)の場合は、入力IN0〜INm−1は、出力Yt〜Ym−1、Y0〜Yt−1の順に並び替えて出力される。
そして、セレクタS2の出力Y0は、例えばLビット[L−1:0]の読み出しデータバスREAD_DATAの最上位kビットに接続され、出力Y1〜Ym−1は、読み出しデータバスの残りL−kビットにAND回路A1〜Am−1を介して順に接続されている。AND回路A1〜Am−1には、デコーダ12からの出力Y1〜Ym−1が入力されている。したがって、データ幅がk×qビットの場合、デコーダ12からの出力Y1〜Yq−1が「1」、Yq〜Ym−1が「0」となり、セレクタS2からの出力Y0〜Ym−1により構成されるLビットのデータのうち、k×qビット以後のYq〜Ym−1がAND回路Aq〜Am−1によりゼロクリア(ゼロマスク)される。これにより、kビット〜Lビットのデータ幅の読み出しデータが読み出しデータバスREAD_DATAに出力される。
セレクタS3は、例えばLビットの書き込みデータバスWRITE_DATA[L−1:0]上にあるkビット〜Lビットの書き込みデータをkビットずつに分割し、分割したデータを開始位置指定アドレスに基づいて並べ替えて出力する回路である。セレクタS3のIN0〜INm−1には、書き込みデータをkビットずつに分割したデータ(分割データ)が上位から順に入力されている。そして、入力IN0〜INm−1が開始位置指定アドレスに基づいて並び替えられ、メモリM0〜Mm−1のデータ入力Dに対する出力Y0〜Ym−1として出力される。
図5の真理値表に示されるように、セレクタS3の入力SELの値が例えば「0」(10進)の場合は、出力Y0〜Ym−1は、順に入力IN0〜INm−1となる。以下同様に、入力SELの値が「t」(10進)の場合は、入力IN0〜INm−1は、出力Yt〜Ym−1、Y0〜Yt−1の順に並び替えて出力される。
なお、加算器11及びセレクタS0が本発明のアドレス入力回路に相当し、セレクタS3が本発明のデータ入力回路に相当し、セレクタS2、デコーダ12、及びAND回路A1〜Am−1が本発明のデータ出力回路に相当し、デコーダ12及びセレクタS1が本発明のメモリ選択回路に相当する。
さらに、セレクタS2が本発明の出力データ並び替え回路に相当し、デコーダ12及びAND回路A1〜Am−1が本発明の出力データ選択回路に相当する。また、AND回路A1〜Am−1が本発明の論理積回路に相当し、デコーダ12が本発明のマスクデータ入力回路に相当する。
==具体例による動作説明==
このようなメモリ制御回路1の動作を、具体例を用いて説明する。図6は、図1に示したメモリ制御回路1の具体例を示す図である。メモリ制御回路1aは、8ビット幅の4個のメモリM0〜M3を制御する回路であり(k=8,m=4)、読み書き可能なデータのデータ幅は8ビット〜32ビット(8ビット単位)となっている。また、メモリM0〜M3を選択するためのビット数「j」は、2j−1<m≦2jの関係より、j=2となっている。
このようなメモリ制御回路1の動作を、具体例を用いて説明する。図6は、図1に示したメモリ制御回路1の具体例を示す図である。メモリ制御回路1aは、8ビット幅の4個のメモリM0〜M3を制御する回路であり(k=8,m=4)、読み書き可能なデータのデータ幅は8ビット〜32ビット(8ビット単位)となっている。また、メモリM0〜M3を選択するためのビット数「j」は、2j−1<m≦2jの関係より、j=2となっている。
そして、メモリ制御回路1aでは、デコーダ31及びセレクタ32〜34により、図1に示したセレクタS0が構成されている。また、セレクタS2a〜S2dにより、図1に示したセレクタS2が構成され、セレクタS3a〜セレクタS3dにより、図1に示したセレクタS3が構成されている。さらに、データ保持用に、D型フリップフロップ41〜45が設けられている。
デコーダ31の入力INには、32ビットのアドレス[31:0]の下位2ビット[1:0](開始位置指定アドレス)が入力される。そして、開始位置指定アドレスに応じた値が、デコーダ31の出力Y0〜Y2から出力される。セレクタ32には、デコーダ31からの出力Y0が入力されており、デコーダ31の出力Y0が例えば「0」の場合は、入力A(アドレスの上位30ビット:第1指定アドレス)を出力し、デコーダ31の出力Y0が例えば「1」の場合は、入力B(アドレスの上位30ビット+1:第2指定アドレス)を出力する。セレクタ33,34も同様に、デコーダ31からの出力Y1,Y2に応じて、第1指定アドレス又は第2指定アドレスを出力する。
図7は、デコーダ31の動作を示す真理値表である。図に示すように、デコーダ31の入力INの値が「0」(10進)の場合は、出力Y0〜Y2が全て「0」となる。このとき、セレクタ32〜34からは第1指定アドレスが出力される。デコーダ31の入力INの値が「1」(10進)の場合は、出力Y1,Y2が「0」となり、出力Y0が「1」となる。このとき、セレクタ33,34からは第1指定アドレスが出力され、セレクタ32からは第2指定アドレスが出力される。デコーダ31の入力INの値が「2」(10進)の場合は、出力Y2が「0」となり、出力Y0,Y1が「1」となる。このとき、セレクタ34からは第1指定アドレスが出力され、セレクタ32,33からは第2指定アドレスが出力される。デコーダ31の入力INの値が「3」(10進)の場合は、出力Y0〜Y2が全て「1」となる。このとき、セレクタ32〜34からは第2指定アドレスが出力される。
図8は、デコーダ12の入力INに入力されるWD_LENGTHとデータ幅との関係を示す図である。図に示すように、WD_LENGTHに1を加えて8倍した値がデータ幅となっている(データ幅=8ビット×(WD_LENGTH+1))。図9は、メモリ制御回路1aにおけるデコーダ12の動作を示す真理値表である。図に示すように、デコーダ12の入力INの値が「0」(10進)の場合は、出力Y1〜Y3が全て「0」となる。そして、デコーダ12の入力INの値が「1」(10進)の場合は、出力Y2,Y3が「0」となり、出力Y1が「1」となる。デコーダ12の入力INの値が「2」(10進)の場合は、出力Y3が「0」となり、出力Y1,Y2が「1」となる。そして、デコーダ12の入力INの値が「3」(10進)の場合は、出力Y1〜Y3が全て「1」となる。
図10は、メモリ制御回路1aにおけるセレクタS1の動作を示す真理値表である。図に示すように、入力SELに入力される開始位置指定アドレス(32ビットのアドレスの下位2ビット[1:0])が「0」(10進)の場合、出力/Y0〜/Y3の順にIN0〜IN3を反転した値が出力される。入力SELの値が「1」(10進)の場合、出力/Y1〜/Y3,/Y0の順にIN0〜IN3を反転した値が出力される。入力SELの値が「2」(10進)の場合、出力/Y2,/Y3,/Y0,/Y1の順にIN0〜IN3を反転した値が出力される。入力SELの値が「3」(10進)の場合、出力/Y3,/Y0〜/Y2の順に入力IN0〜IN3を反転した値が出力される。
図11は、セレクタS2a〜S2dの動作を示す真理値表である。図に示すように、入力SELに入力される開始位置指定アドレス(32ビットのアドレスの下位2ビット[1:0])が「0」(10進)の場合、セレクタS2aの出力(R31−24)はメモリM0から出力されるデータとなり、セレクタS2bの出力(R23−16)はメモリM1から出力されるデータとなり、セレクタS2cの出力(R15−8)はメモリM2から出力されるデータとなり、セレクタS2dの出力(R7−0)はメモリM3から出力されるデータとなる。
つまり、開始位置指定アドレスが「0」(10進)の場合、メモリM0〜M3の順に読み出しデータとして出力される。そして、図11の真理値表に示されるように、開始位置指定アドレスが「1」(10進)の場合、メモリM1〜M3,M0の順に読み出しデータとして出力される。また、開始位置指定アドレスが「2」(10進)の場合、メモリM2,M3,M0,M1の順に読み出しデータとして出力される。また、開始位置指定アドレスが「3」(10進)の場合、メモリM3,M0〜M2の順に読み出しデータとして出力される。
図12は、セレクタS3a〜S3dの動作を示す真理値表である。図に示すように、入力SELに入力される開始位置指定アドレス(32ビットのアドレスの下位2ビット[1:0])が「0」(10進)の場合、セレクタS3aの出力(W31−24)は書き込みデータの上位8ビット[31:24]となり、セレクタS3bの出力(W23−16)は書き込みデータの次の8ビット[23:16]となり、セレクタS3cの出力(W15−8)は書き込みデータの更に次の8ビット[15:8]となり、セレクタS3dの出力(W7−0)は書き込みデータの下位8ビット[7:0]となる。
つまり、開始位置指定アドレスが「0」(10進)の場合、書き込みデータを8ビットずつに分割したデータ(分割データ)は、上位から順にメモリM0〜M3に対して出力される。そして、図12の真理値表に示されるように、開始位置指定アドレスが「1」(10進)の場合、分割データは上位から順にメモリM1〜M3,M0に対して出力される。また、開始位置指定アドレスが「2」(10進)の場合、分割データは上位から順にメモリM2,M3,M0,M1に対して出力される。また、開始位置指定アドレスが「3」(10進)の場合、分割データは上位から順にメモリM3,M0〜M2に対して出力される。
次に、メモリ制御回路1aによる読み書き(READ/WRITE)の動作について具体的に説明する。
(1)READ(先頭アドレス:4n番地)
図13は、読み出しデータの先頭アドレスが4n番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「0」(10進)となっている。そのため、デコーダ31の出力Y0〜Y2は全て「0」となり、セレクタ32〜34からは第1指定アドレスが出力される。つまり、メモリM0〜M3のアドレス入力Aにはn番地が入力されることとなる。
図13は、読み出しデータの先頭アドレスが4n番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「0」(10進)となっている。そのため、デコーダ31の出力Y0〜Y2は全て「0」となり、セレクタ32〜34からは第1指定アドレスが出力される。つまり、メモリM0〜M3のアドレス入力Aにはn番地が入力されることとなる。
ここで、読み出しデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが読み出し可能な状態となる。そして、メモリM0〜M3のn番地のデータがデータ出力Qから出力される。メモリM0〜M3から出力されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n〜4n+3番地のデータとなっている。そして、メモリM0〜M3から読み出されたデータは、順にセレクタS2a〜S2dから出力される。また、デコーダ12の出力Y1〜Y3が全て「1」となっているため、メモリM1〜M3から読み出されたデータはAND回路A1〜A3によりクリアされない。これにより、読み出しデータバスREAD_DATAには、32ビット幅のデータが出力される。
また、読み出しデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y0〜/Y2が「0」、出力/Y3が「1」となり、メモリM0〜M2が読み出し可能、メモリM3が読み出し不可の状態となる。これにより、セレクタS2dの出力(R7−0)は無効なデータとなるが、AND回路A3によりゼロクリアされ、24ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y0,/Y1が「0」、出力/Y2,/Y3が「1」となり、メモリM0,M1が読み出し可能、メモリM2,M3が読み出し不可の状態となる。これにより、セレクタS2c,S2dの出力(R15−8,R7−0)は無効なデータとなるが、AND回路A2,A3によりゼロクリアされ、16ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y0が「0」、出力/Y1〜/Y3が「1」となり、メモリM0が読み出し可能、メモリM1〜M3が読み出し不可の状態となる。これにより、セレクタS2b〜S2dの出力(R23−16,R15−8,R7−0)は無効なデータとなるが、AND回路A1〜A3によりゼロクリアされ、8ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
(2)READ(先頭アドレス:4n+1番地)
図14は、読み出しデータの先頭アドレスが4n+1番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n+1番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「1」(10進)となっている。そのため、デコーダ31の出力Y0が「1」、出力Y1,Y2が「0」となり、セレクタ33,34からは第1指定アドレスが出力され、セレクタ32からは第2指定アドレスが出力される。つまり、メモリM1〜M3のアドレス入力Aにはn番地が入力され、メモリM0のアドレス入力Aにはn+1番地が入力されることとなる。
図14は、読み出しデータの先頭アドレスが4n+1番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n+1番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「1」(10進)となっている。そのため、デコーダ31の出力Y0が「1」、出力Y1,Y2が「0」となり、セレクタ33,34からは第1指定アドレスが出力され、セレクタ32からは第2指定アドレスが出力される。つまり、メモリM1〜M3のアドレス入力Aにはn番地が入力され、メモリM0のアドレス入力Aにはn+1番地が入力されることとなる。
ここで、読み出しデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが読み出し可能な状態となる。そして、メモリM1〜M3のn番地のデータ及びメモリM0のn+1番地のデータがデータ出力Qから出力される。メモリM1〜M3,M0から出力されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n+1〜4n+4番地のデータとなっている。そして、メモリM1〜M3,M0から読み出されたデータは、順にセレクタS2a〜S2dから出力される。また、デコーダ12の出力Y1〜Y3が全て「1」となっているため、メモリM2,M3,M0から読み出されたデータはAND回路A1〜A3によりクリアされない。これにより、読み出しデータバスREAD_DATAには、32ビット幅のデータが出力される。
また、読み出しデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y1〜/Y3が「0」、出力/Y0が「1」となり、メモリM1〜M3が読み出し可能、メモリM0が読み出し不可の状態となる。これにより、セレクタS2dの出力(R7−0)は無効なデータとなるが、AND回路A3によりゼロクリアされ、24ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y1,/Y2が「0」、出力/Y3,/Y0が「1」となり、メモリM1,M2が読み出し可能、メモリM3,M0が読み出し不可の状態となる。これにより、セレクタS2c,S2dの出力(R15−8,R7−0)は無効なデータとなるが、AND回路A2,A3によりゼロクリアされ、16ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y1が「0」、出力/Y2,/Y3,/Y0が「1」となり、メモリM1が読み出し可能、メモリM2,M3,M0が読み出し不可の状態となる。これにより、セレクタS2b〜S2dの出力(R23−16,R15−8,R7−0)は無効なデータとなるが、AND回路A1〜A3によりゼロクリアされ、8ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
(3)READ(先頭アドレス:4n+2番地)
図15は、読み出しデータの先頭アドレスが4n+2番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n+2番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「2」(10進)となっている。そのため、デコーダ31の出力Y0,Y1が「1」、出力Y2が「0」となり、セレクタ34からは第1指定アドレスが出力され、セレクタ32,33からは第2指定アドレスが出力される。つまり、メモリM2,M3のアドレス入力Aにはn番地が入力され、メモリM0,M1のアドレス入力Aにはn+1番地が入力されることとなる。
図15は、読み出しデータの先頭アドレスが4n+2番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n+2番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「2」(10進)となっている。そのため、デコーダ31の出力Y0,Y1が「1」、出力Y2が「0」となり、セレクタ34からは第1指定アドレスが出力され、セレクタ32,33からは第2指定アドレスが出力される。つまり、メモリM2,M3のアドレス入力Aにはn番地が入力され、メモリM0,M1のアドレス入力Aにはn+1番地が入力されることとなる。
ここで、読み出しデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが読み出し可能な状態となる。そして、メモリM2,M3のn番地のデータ及びメモリM0,M1のn+1番地のデータがデータ出力Qから出力される。メモリM2,M3,M0,M1から出力されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n+2〜4n+5番地のデータとなっている。そして、メモリM2,M3,M0,M1から読み出されたデータは、順にセレクタS2a〜S2dから出力される。また、デコーダ12の出力Y1〜Y3が全て「1」となっているため、メモリM3,M0,M1から読み出されたデータはAND回路A1〜A3によりクリアされない。これにより、読み出しデータバスREAD_DATAには、32ビット幅のデータが出力される。
また、読み出しデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y2,/Y3,/Y0が「0」、出力/Y1が「1」となり、メモリM2,M3,M0が読み出し可能、メモリM1が読み出し不可の状態となる。これにより、セレクタS2dの出力(R7−0)は無効なデータとなるが、AND回路A3によりゼロクリアされ、24ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y2,/Y3が「0」、出力/Y0,/Y1が「1」となり、メモリM2,M3が読み出し可能、メモリM0,M1が読み出し不可の状態となる。これにより、セレクタS2c,S2dの出力(R15−8,R7−0)は無効なデータとなるが、AND回路A2,A3によりゼロクリアされ、16ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y2が「0」、出力/Y3,/Y0,/Y1が「1」となり、メモリM2が読み出し可能、メモリM3,M0,M1が読み出し不可の状態となる。これにより、セレクタS2b〜S2dの出力(R23−16,R15−8,R7−0)は無効なデータとなるが、AND回路A1〜A3によりゼロクリアされ、8ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
(4)READ(先頭アドレス:4n+3番地)
図16は、読み出しデータの先頭アドレスが4n+3番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n+3番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「3」(10進)となっている。そのため、デコーダ31の出力Y0〜Y3は全て「1」となり、セレクタ32〜34からは第2指定アドレスが出力される。つまり、メモリM3のアドレス入力Aにはn番地が入力され、メモリM0〜M2のアドレス入力Aにはn+1番地が入力されることとなる。
図16は、読み出しデータの先頭アドレスが4n+3番地である場合のデータ配置の一例を示す図である。読み出しデータの先頭アドレスが4n+3番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「3」(10進)となっている。そのため、デコーダ31の出力Y0〜Y3は全て「1」となり、セレクタ32〜34からは第2指定アドレスが出力される。つまり、メモリM3のアドレス入力Aにはn番地が入力され、メモリM0〜M2のアドレス入力Aにはn+1番地が入力されることとなる。
ここで、読み出しデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが読み出し可能な状態となる。そして、メモリM3のn番地のデータ及びメモリM0〜M2のn+1番地のデータがデータ出力Qから出力される。メモリM3,M0〜M2から出力されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n+3〜4n+6番地のデータとなっている。そして、メモリM3,M0〜M2から読み出されたデータは、順にセレクタS2a〜S2dから出力される。また、デコーダ12の出力Y1〜Y3が全て「1」となっているため、メモリM0〜M2から読み出されたデータはAND回路A1〜A3によりクリアされない。これにより、読み出しデータバスREAD_DATAには、32ビット幅のデータが出力される。
また、読み出しデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y3,/Y0,/Y1が「0」、出力/Y2が「1」となり、メモリM3,M0,M1が読み出し可能、メモリM2が読み出し不可の状態となる。これにより、セレクタS2dの出力(R7−0)は無効なデータとなるが、AND回路A3によりゼロクリアされ、24ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y3,/Y0が「0」、出力/Y1,/Y2が「1」となり、メモリM3,M0が読み出し可能、メモリM1,M2が読み出し不可の状態となる。これにより、セレクタS2c,S2dの出力(R15−8,R7−0)は無効なデータとなるが、AND回路A2,A3によりゼロクリアされ、16ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
また、読み出しデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y3が「0」、出力/Y0〜/Y2が「1」となり、メモリM3が読み出し可能、メモリM0〜M2が読み出し不可の状態となる。これにより、セレクタS2b〜S2dの出力(R23−16,R15−8,R7−0)は無効なデータとなるが、AND回路A1〜A3によりゼロクリアされ、8ビット幅の左詰めのデータが読み出しデータバスREAD_DATAに出力される。
(5)WRITE(先頭アドレス:4n番地)
図17は、書き込みデータの先頭アドレスが4n番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「0」(10進)となっている。そのため、デコーダ31の出力Y0〜Y2は全て「0」となり、セレクタ32〜34からは第1指定アドレスが出力される。つまり、メモリM0〜M3のアドレス入力Aにはn番地が入力されることとなる。
図17は、書き込みデータの先頭アドレスが4n番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「0」(10進)となっている。そのため、デコーダ31の出力Y0〜Y2は全て「0」となり、セレクタ32〜34からは第1指定アドレスが出力される。つまり、メモリM0〜M3のアドレス入力Aにはn番地が入力されることとなる。
ここで、書き込みデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが書き込み可能な状態となる。32ビットの書き込みデータは上位から8ビットずつに分割され、セレクタS3a〜S3dを介して、メモリM0〜M3の順にデータ入力Dに入力され、夫々のn番地に格納される。メモリM0〜M3に格納されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n〜4n+3番地のデータとなっている。 また、書き込みデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y0〜/Y2が「0」、出力/Y3が「1」となり、メモリM0〜M2が書き込み可能、メモリM3が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位24ビットのデータが上位から8ビットずつに分割され、セレクタS3a〜S3cを介して、メモリM0〜M2の順にデータ入力Dに入力され、夫々のn番地に格納される。
また、書き込みデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y0,/Y1が「0」、出力/Y2,/Y3が「1」となり、メモリM0,M1が書き込み可能、メモリM2,M3が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位16ビットのデータが上位から8ビットずつに分割され、セレクタS3a,S3bを介して、メモリM0,M1の順にデータ入力Dに入力され、夫々のn番地に格納される。
また、書き込みデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y0が「0」、出力/Y1〜/Y3が「1」となり、メモリM0が書き込み可能、メモリM1〜M3が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位8ビットのデータが、セレクタS3aを介して、メモリM0のデータ入力Dに入力され、n番地に格納される。
(6)WRITE(先頭アドレス:4n+1番地)
図18は、書き込みデータの先頭アドレスが4n+1番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n+1番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「1」(10進)となっている。そのため、デコーダ31の出力Y0が「1」、出力Y1,Y2が「0」となり、セレクタ33,34からは第1指定アドレスが出力され、セレクタ32からは第2指定アドレスが出力される。つまり、メモリM1〜M3のアドレス入力Aにはn番地が入力され、メモリM0のアドレス入力Aにはn+1番地が入力されることとなる。
図18は、書き込みデータの先頭アドレスが4n+1番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n+1番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「1」(10進)となっている。そのため、デコーダ31の出力Y0が「1」、出力Y1,Y2が「0」となり、セレクタ33,34からは第1指定アドレスが出力され、セレクタ32からは第2指定アドレスが出力される。つまり、メモリM1〜M3のアドレス入力Aにはn番地が入力され、メモリM0のアドレス入力Aにはn+1番地が入力されることとなる。
ここで、書き込みデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが書き込み可能な状態となる。32ビットの書き込みデータは上位から8ビットずつに分割され、セレクタS3a〜S3dを介して、メモリM1〜M3,M0の順にデータ入力Dに入力され、メモリM1〜M3のn番地及びメモリM0のn+1番地に格納される。メモリM0〜M3に格納されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n+1〜4n+4番地のデータとなっている。
また、書き込みデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y1〜/Y3が「0」、出力/Y0が「1」となり、メモリM1〜M3が書き込み可能、メモリM0が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位24ビットのデータが上位から8ビットずつに分割され、セレクタS3b〜S3dを介して、メモリM1〜M3の順にデータ入力Dに入力され、夫々のn番地に格納される。
また、書き込みデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y1,/Y2が「0」、出力/Y3,/Y0が「1」となり、メモリM1,M2が書き込み可能、メモリM3,M0が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位16ビットのデータが上位から8ビットずつに分割され、セレクタS3b,S3cを介して、メモリM1,M2の順にデータ入力Dに入力され、夫々のn番地に格納される。
また、書き込みデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y1が「0」、出力/Y2,/Y3,/Y0が「1」となり、メモリM1が書き込み可能、メモリM2,M3,M0が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位8ビットのデータが、セレクタS3bを介して、メモリM1のデータ入力Dに入力され、n番地に格納される。
(7)WRITE(先頭アドレス:4n+2番地)
図19は、書き込みデータの先頭アドレスが4n+2番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n+2番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「2」(10進)となっている。そのため、デコーダ31の出力Y0,Y1が「1」、出力Y2が「0」となり、セレクタ34からは第1指定アドレスが出力され、セレクタ32,33からは第2指定アドレスが出力される。つまり、メモリM2,M3のアドレス入力Aにはn番地が入力され、メモリM0,M1のアドレス入力Aにはn+1番地が入力されることとなる。
図19は、書き込みデータの先頭アドレスが4n+2番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n+2番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「2」(10進)となっている。そのため、デコーダ31の出力Y0,Y1が「1」、出力Y2が「0」となり、セレクタ34からは第1指定アドレスが出力され、セレクタ32,33からは第2指定アドレスが出力される。つまり、メモリM2,M3のアドレス入力Aにはn番地が入力され、メモリM0,M1のアドレス入力Aにはn+1番地が入力されることとなる。
ここで、書き込みデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが書き込み可能な状態となる。32ビットの書き込みデータは上位から8ビットずつに分割され、セレクタS3a〜S3dを介して、メモリM2,M3,M0,M1の順にデータ入力Dに入力され、メモリM2,M3のn番地及びメモリM0,M1のn+1番地に格納される。メモリM0〜M3に格納されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n+2〜4n+5番地のデータとなっている。
また、書き込みデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y2,/Y3,/Y0が「0」、出力/Y1が「1」となり、メモリM2,M3,M0が書き込み可能、メモリM1が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位24ビットのデータが上位から8ビットずつに分割され、セレクタS3c,S3d,S3aを介して、メモリM2,M3,M0の順にデータ入力Dに入力され、メモリM2,M3のn番地及びメモリM0のn+1番地に格納される。
また、書き込みデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y2,/Y3が「0」、出力/Y0,/Y1が「1」となり、メモリM2,M3が書き込み可能、メモリM0,M1が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位16ビットのデータが上位から8ビットずつに分割され、セレクタS3c,S3dを介して、メモリM2,M3の順にデータ入力Dに入力され、夫々のn番地に格納される。
また、書き込みデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y2が「0」、出力/Y3,/Y0,/Y1が「1」となり、メモリM2が書き込み可能、メモリM3,M0,M1が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位8ビットのデータが、セレクタS3cを介して、メモリM2のデータ入力Dに入力され、n番地に格納される。
(8)WRITE(先頭アドレス:4n+3番地)
図19は、書き込みデータの先頭アドレスが4n+3番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n+3番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「3」(10進)となっている。そのため、デコーダ31の出力Y0〜Y2は全て「1」となり、セレクタ32〜34からは第2指定アドレスが出力される。つまり、メモリM3のアドレス入力Aにはn番地が入力され、メモリM0〜M2のアドレス入力Aにはn+1番地が入力されることとなる。
図19は、書き込みデータの先頭アドレスが4n+3番地である場合のデータ配置の一例を示す図である。書き込みデータの先頭アドレスが4n+3番地である場合、32ビットのアドレスの下位2ビット[1:0]は、「3」(10進)となっている。そのため、デコーダ31の出力Y0〜Y2は全て「1」となり、セレクタ32〜34からは第2指定アドレスが出力される。つまり、メモリM3のアドレス入力Aにはn番地が入力され、メモリM0〜M2のアドレス入力Aにはn+1番地が入力されることとなる。
ここで、書き込みデータのデータ幅が32ビットであるとすると、WD_LENGTHは「3」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「1」となる。そのため、セレクタS1の出力/Y0〜/Y3は全て「0」となり、メモリM0〜M3の全てが書き込み可能な状態となる。32ビットの書き込みデータは上位から8ビットずつに分割され、セレクタS3a〜S3dを介して、メモリM3,M0〜M2の順にデータ入力Dに入力され、メモリM3のn番地及びメモリM0〜M2のn+1番地に格納される。メモリM0〜M3に格納されるこれらのデータは、メモリM0〜M3の全体のアドレス空間では、4n+3〜4n+6番地のデータとなっている。
また、書き込みデータのデータ幅が24ビットであるとすると、WD_LENGTHは「2」(10進)となる。このとき、デコーダ12の出力Y1,Y2は「1」、出力Y3は「0」となる。そのため、セレクタS1の出力/Y3,/Y0,/Y1が「0」、出力/Y2が「1」となり、メモリM3,M0,M1が書き込み可能、メモリM2が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位24ビットのデータが上位から8ビットずつに分割され、セレクタS3d,S3a,S3bを介して、メモリM3,M0,M1の順にデータ入力Dに入力され、メモリM3のn番地及びメモリM0,M1のn+1番地に格納される。
また、書き込みデータのデータ幅が16ビットであるとすると、WD_LENGTHは「1」(10進)となる。このとき、デコーダ12の出力Y1は「1」、出力Y2,Y3は「0」となる。そのため、セレクタS1の出力/Y3,/Y0が「0」、出力/Y1,/Y2が「1」となり、メモリM3,M0が書き込み可能、メモリM1,M2が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位16ビットのデータが上位から8ビットずつに分割され、セレクタS3d,S3aを介して、メモリM3,M0の順にデータ入力Dに入力され、メモリM3のn番地及びメモリM0のn+1番地に格納される。
また、書き込みデータのデータ幅が8ビットであるとすると、WD_LENGTHは「0」(10進)となる。このとき、デコーダ12の出力Y1〜Y3は全て「0」となる。そのため、セレクタS1の出力/Y3が「0」、出力/Y0〜/Y2が「1」となり、メモリM3が書き込み可能、メモリM0〜M2が書き込み不可の状態となる。これにより、書き込みデータバスWRITE_DATA上の上位8ビットのデータが、セレクタS3dを介して、メモリM3のデータ入力Dに入力され、n番地に格納される。
以上、本発明の一実施形態であるメモリ制御回路1,1aについて説明した。このようなメモリ制御回路1,1aによれば、データ幅の異なる様々なデータを、メモリ上に無効なデータ領域を生じることなく格納することができる。つまり、メモリの使用効率低下を招くことなく、データ幅の異なる様々なデータを読み書きすることができる。また、メモリにデータを書き込む前やメモリからデータを読み出した後に、データの詰め込み(パッキング)や展開(アンパッキング)の処理を行う必要がなく、処理負荷の増大を招くこともない。
なお、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
また、本実施形態では、Aビットのアドレスの下位jビットを用いてデータの先頭が格納されるメモリを選択することとしたが、下位jビットに限らず、上位jビットや不連続に選択されたjビットを用いることも可能である。
1 メモリ制御回路 11 加算器
12 デコーダ S0〜S3 セレクタ
M0〜Mm−1 メモリ 31 デコーダ
32〜34 セレクタ 41〜45 D型フリップフロップ
12 デコーダ S0〜S3 セレクタ
M0〜Mm−1 メモリ 31 デコーダ
32〜34 セレクタ 41〜45 D型フリップフロップ
Claims (5)
- データ幅(Dビット)がkビットの整数倍で最大でLビットであるデータが格納されるkビット幅のm(=L/k)個のメモリ(第1〜第mメモリ)を制御するメモリ制御回路であって、
前記データの格納先を示すAビットのアドレスのうちの所定のjビットである開始位置指定アドレスに基づいて、前記m個のメモリのうち前記データの最初のkビットを格納するメモリ(第nメモリ)を決定し、前記Aビットのアドレスのうちの前記所定のjビットを除くA−jビットを前記データの格納先を指定する第1指定アドレスとして前記第n〜第mメモリに入力し、前記指定アドレスに1を加算した第2指定アドレスを前記第1〜第n−1メモリに入力するアドレス入力回路と、
前記開始位置指定アドレスに基づいて、前記データをkビットずつに分割した分割データを、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に入力するデータ入力回路と、
前記開始位置指定アドレスに基づいて、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に前記データのデータ幅に応じた数のメモリから前記分割データを読み出して前記データとして出力するデータ出力回路と、
前記開始位置指定アドレスと前記データのデータ幅とに基づいて、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に、D/k個のメモリを読み書き可能な状態にするメモリ選択回路と、
を備えることを特徴とするメモリ制御回路。 - 請求項1に記載のメモリ制御回路であって、
前記データ出力回路は、
前記開始位置指定アドレスに基づいて、前記m個のメモリから出力されるkビットの分割データを前記第n〜第mメモリ、前記第1〜第n−1メモリの順に並び替えて出力する出力データ並び替え回路と、
前記出力データ並び替え回路から出力されるm個の分割データから、前記データのデータ幅に応じた分割データを選択して出力する出力データ選択回路と、
を含んで構成されることを特徴とするメモリ制御回路。 - 請求項2に記載のメモリ制御回路であって、
前記出力データ選択回路は、
前記出力データ並び替え回路から出力されるm個の分割データの夫々が順に入力されるm個の論理積回路(第1〜第m論理積回路)と、
前記データのデータ幅に基づいて、前記第2〜第D/k論理積回路に前記分割データを出力するための一方の論理値を入力し、前記第(D/k+1)〜第m論理積回路に前記分割データをマスクして出力するための他方の論理値を入力するマスクデータ入力回路と、
を含んで構成されることを特徴とするメモリ制御回路。 - 請求項1〜3の何れか一項に記載のメモリ制御回路であって、
前記開始位置指定アドレスが、前記Aビットのアドレスのうちの下位jビットであることを特徴とするメモリ制御回路。 - データ幅(Dビット)がkビットの整数倍で最大でLビットであるデータが格納されるkビット幅のm(=L/k)個のメモリ(第1〜第mメモリ)の制御方法であって、
前記データの格納先を示すAビットのアドレスのうちの所定のjビットである開始位置指定アドレスに基づいて、前記m個のメモリのうち前記データの最初のkビットを格納するメモリ(第nメモリ)を決定し、
前記Aビットのアドレスのうちの前記所定のjビットを除くA−jビットを前記データの格納先を指定する第1指定アドレスとして前記第n〜第mメモリに入力し、
前記指定アドレスに1を加算した第2指定アドレスを前記第1〜第n−1メモリに入力し、
前記データを書き込む際には、前記開始位置指定アドレスに基づいて、前記データをkビットずつに分割した分割データを、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に入力し、
前記データを読み出す際には、前記開始位置指定アドレスに基づいて、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に前記データのデータ幅に応じた数のメモリから前記分割データを読み出して前記データとして出力し、
前記開始位置指定アドレスと前記データのデータ幅とに基づいて、前記第n〜第mメモリ、前記第1〜第n−1メモリの順に、D/k個のメモリを読み書き可能な状態にすることを特徴とするメモリ制御方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005369848A JP2007172332A (ja) | 2005-12-22 | 2005-12-22 | メモリ制御回路及びメモリ制御方法 |
CNA200610163714XA CN1987824A (zh) | 2005-12-22 | 2006-11-30 | 存储器控制电路及存储器控制方法 |
TW095147992A TW200731071A (en) | 2005-12-22 | 2006-12-20 | Memory control circuit and controlling means of memory |
KR1020060131716A KR100852590B1 (ko) | 2005-12-22 | 2006-12-21 | 메모리 제어 회로 및 메모리 제어 방법 |
US11/614,793 US7440338B2 (en) | 2005-12-22 | 2006-12-21 | Memory control circuit and memory control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005369848A JP2007172332A (ja) | 2005-12-22 | 2005-12-22 | メモリ制御回路及びメモリ制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007172332A true JP2007172332A (ja) | 2007-07-05 |
Family
ID=38184626
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005369848A Withdrawn JP2007172332A (ja) | 2005-12-22 | 2005-12-22 | メモリ制御回路及びメモリ制御方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7440338B2 (ja) |
JP (1) | JP2007172332A (ja) |
KR (1) | KR100852590B1 (ja) |
CN (1) | CN1987824A (ja) |
TW (1) | TW200731071A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011060201A (ja) * | 2009-09-14 | 2011-03-24 | Toshiba Corp | メモリシステム |
JP2014194672A (ja) * | 2013-03-28 | 2014-10-09 | Fujitsu Ltd | メモリ制御装置、及びメモリ制御方法 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI466084B (zh) * | 2011-10-24 | 2014-12-21 | Mediatek Inc | 顯示控制器與傳輸控制方法 |
CN107133122B (zh) | 2012-06-06 | 2020-10-27 | 慧荣科技股份有限公司 | 存储器控制方法 |
TWI594251B (zh) * | 2012-06-06 | 2017-08-01 | 慧榮科技股份有限公司 | 記憶體控制方法、控制器跟電子裝置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06266614A (ja) | 1993-03-16 | 1994-09-22 | Hitachi Ltd | メモリ制御方法 |
WO1995028677A1 (en) | 1994-04-13 | 1995-10-26 | Ericsson Inc. | Efficient addressing of large memories |
KR0154748B1 (ko) * | 1995-11-28 | 1998-11-16 | 김광호 | 다양한 메모리 폭 및 길이를 갖는 시스템의 피지컬 어드레스 제어방법 |
KR0161868B1 (ko) * | 1995-12-27 | 1999-01-15 | 문정환 | 메모리 주소제어회로 |
JP3756818B2 (ja) * | 2002-01-09 | 2006-03-15 | 株式会社メガチップス | メモリ制御回路および制御システム |
JP4614650B2 (ja) * | 2003-11-13 | 2011-01-19 | ルネサスエレクトロニクス株式会社 | 半導体記憶装置 |
TWI446356B (zh) * | 2005-09-30 | 2014-07-21 | Mosaid Technologies Inc | 具有輸出控制之記憶體及其系統 |
-
2005
- 2005-12-22 JP JP2005369848A patent/JP2007172332A/ja not_active Withdrawn
-
2006
- 2006-11-30 CN CNA200610163714XA patent/CN1987824A/zh active Pending
- 2006-12-20 TW TW095147992A patent/TW200731071A/zh unknown
- 2006-12-21 KR KR1020060131716A patent/KR100852590B1/ko not_active IP Right Cessation
- 2006-12-21 US US11/614,793 patent/US7440338B2/en active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011060201A (ja) * | 2009-09-14 | 2011-03-24 | Toshiba Corp | メモリシステム |
JP2014194672A (ja) * | 2013-03-28 | 2014-10-09 | Fujitsu Ltd | メモリ制御装置、及びメモリ制御方法 |
Also Published As
Publication number | Publication date |
---|---|
US20070147137A1 (en) | 2007-06-28 |
KR20070066920A (ko) | 2007-06-27 |
TW200731071A (en) | 2007-08-16 |
KR100852590B1 (ko) | 2008-08-14 |
CN1987824A (zh) | 2007-06-27 |
US7440338B2 (en) | 2008-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5328020B2 (ja) | メモリ装置及びメモリアクセス方法 | |
JP2005149492A (ja) | 行列ベクトル・レジスタ・アレイの二次元アドレッシング | |
JP2007172332A (ja) | メモリ制御回路及びメモリ制御方法 | |
US6684267B2 (en) | Direct memory access controller, and direct memory access control method | |
JPH03180933A (ja) | スタックメモリ | |
JP2005182538A (ja) | データ転送装置 | |
JPH0289132A (ja) | 論理アドレス生成方式 | |
JPH023163A (ja) | 多ポートメモリ | |
JP2812292B2 (ja) | 画像処理装置 | |
JP2024027962A (ja) | インタリーブ回路および通信装置 | |
JP6381673B2 (ja) | 情報処理装置およびfpgaコンフィギュレーション方法 | |
JPS6148174B2 (ja) | ||
JP3224050B2 (ja) | 可変長符号復号器、プロセッサ、および可変長符号復号テーブル | |
JPS6054056A (ja) | ビットデ−タ書込メモリインタ−フェ−ス回路 | |
JP2855936B2 (ja) | データ入れ替え方式 | |
JP3091522B2 (ja) | メモリ回路 | |
JP2001344150A (ja) | アクセス制御回路 | |
JP2006343803A (ja) | キャッシュメモリ | |
JP2007310524A (ja) | 演算プロセッサとモータ制御装置 | |
JPH0573431A (ja) | 記憶回路 | |
JPH11144035A (ja) | 半導体記憶装置 | |
JPH05298235A (ja) | 制御装置 | |
JPH01271990A (ja) | Ram | |
JPH05189521A (ja) | レイアウトパターン発生装置 | |
JP2000347855A (ja) | 演算処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20081203 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090706 |