JP2007172332A - メモリ制御回路及びメモリ制御方法 - Google Patents

メモリ制御回路及びメモリ制御方法 Download PDF

Info

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
Application number
JP2005369848A
Other languages
English (en)
Inventor
Takashi Kuroda
隆 黒田
Iwao Honda
巌 本田
Noriyuki Tomita
典幸 富田
Hidenori Ohashi
秀紀 大橋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sanyo Electric Co Ltd
Original Assignee
Sanyo Electric Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sanyo Electric Co Ltd filed Critical Sanyo Electric Co Ltd
Priority to JP2005369848A priority Critical patent/JP2007172332A/ja
Priority to CNA200610163714XA priority patent/CN1987824A/zh
Priority to TW095147992A priority patent/TW200731071A/zh
Priority to KR1020060131716A priority patent/KR100852590B1/ko
Priority to US11/614,793 priority patent/US7440338B2/en
Publication of JP2007172332A publication Critical patent/JP2007172332A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing 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

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を備えている。
図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≦2となっている。そして、セレクタ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≦2の関係より、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番地が入力されることとなる。
ここで、読み出しデータのデータ幅が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番地が入力されることとなる。
ここで、読み出しデータのデータ幅が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番地が入力されることとなる。
ここで、読み出しデータのデータ幅が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番地が入力されることとなる。
ここで、読み出しデータのデータ幅が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番地が入力されることとなる。
ここで、書き込みデータのデータ幅が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番地が入力されることとなる。
ここで、書き込みデータのデータ幅が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番地が入力されることとなる。
ここで、書き込みデータのデータ幅が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番地が入力されることとなる。
ここで、書き込みデータのデータ幅が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ビットを用いることも可能である。
本発明の一実施形態であるメモリ制御回路の構成を示す図である。 メモリM0〜Mm−1に格納されるデータの一例を示す図である。 セレクタS0の動作を示す真理値表である。 デコーダ12の動作を示す真理値表である。 セレクタS1〜S3の動作を示す真理値表である。 図1に示したメモリ制御回路1の具体例を示す図である。 デコーダ31の動作を示す真理値表である。 デコーダ12の入力INに入力されるWD_LENGTHとデータ幅との関係を示す図である。 メモリ制御回路1aにおけるデコーダ12の動作を示す真理値表である。 メモリ制御回路1aにおけるセレクタS1の動作を示す真理値表である。 セレクタS2a〜S2dの動作を示す真理値表である。 セレクタS3a〜S3dの動作を示す真理値表である。 読み出しデータの先頭アドレスが4n番地である場合のデータ配置の一例を示す図である。 読み出しデータの先頭アドレスが4n+1番地である場合のデータ配置の一例を示す図である。 読み出しデータの先頭アドレスが4n+2番地である場合のデータ配置の一例を示す図である。 読み出しデータの先頭アドレスが4n+3番地である場合のデータ配置の一例を示す図である。 書き込みデータの先頭アドレスが4n番地である場合のデータ配置の一例を示す図である。 書き込みデータの先頭アドレスが4n+1番地である場合のデータ配置の一例を示す図である。 書き込みデータの先頭アドレスが4n+2番地である場合のデータ配置の一例を示す図である。 書き込みデータの先頭アドレスが4n+3番地である場合のデータ配置の一例を示す図である。 一般的なメモリの構成を示す図である。 データ幅の異なる様々なデータの例を示す図である。 夫々のデータを1つのアドレスに格納する方法を示す図である。 データ幅の異なる複数のデータをメモリに詰め込んで格納する方法を示す図である。
符号の説明
1 メモリ制御回路 11 加算器
12 デコーダ S0〜S3 セレクタ
M0〜Mm−1 メモリ 31 デコーダ
32〜34 セレクタ 41〜45 D型フリップフロップ

Claims (5)

  1. データ幅(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個のメモリを読み書き可能な状態にするメモリ選択回路と、
    を備えることを特徴とするメモリ制御回路。
  2. 請求項1に記載のメモリ制御回路であって、
    前記データ出力回路は、
    前記開始位置指定アドレスに基づいて、前記m個のメモリから出力されるkビットの分割データを前記第n〜第mメモリ、前記第1〜第n−1メモリの順に並び替えて出力する出力データ並び替え回路と、
    前記出力データ並び替え回路から出力されるm個の分割データから、前記データのデータ幅に応じた分割データを選択して出力する出力データ選択回路と、
    を含んで構成されることを特徴とするメモリ制御回路。
  3. 請求項2に記載のメモリ制御回路であって、
    前記出力データ選択回路は、
    前記出力データ並び替え回路から出力されるm個の分割データの夫々が順に入力されるm個の論理積回路(第1〜第m論理積回路)と、
    前記データのデータ幅に基づいて、前記第2〜第D/k論理積回路に前記分割データを出力するための一方の論理値を入力し、前記第(D/k+1)〜第m論理積回路に前記分割データをマスクして出力するための他方の論理値を入力するマスクデータ入力回路と、
    を含んで構成されることを特徴とするメモリ制御回路。
  4. 請求項1〜3の何れか一項に記載のメモリ制御回路であって、
    前記開始位置指定アドレスが、前記Aビットのアドレスのうちの下位jビットであることを特徴とするメモリ制御回路。
  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個のメモリを読み書き可能な状態にすることを特徴とするメモリ制御方法。

JP2005369848A 2005-12-22 2005-12-22 メモリ制御回路及びメモリ制御方法 Withdrawn JP2007172332A (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 具有輸出控制之記憶體及其系統

Cited By (2)

* Cited by examiner, † Cited by third party
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