説明

データ転送装置

【課題】バイト単位のデータ転送を実現しようとするとFIFO等の使用するハードウェアの規模が大きくなる。
【解決手段】ライト用バイトイネーブル保持回路10は、FIFO40の最新のライトアドレスに書き込まれているデータのバイトイネーブルを保持し、リード用バイトイネーブル保持回路20は、1タイミング前のライトデータのバイトイネーブルまたは該バイトイネーブルと1タイミング前の自保持内容との論理和または1タイミング前の自保持内容を保持する。バイト読出し判定フラグ50は、リードデータのバイトイネーブルを解読してFIFOの1ワード分の全バイト読出しであるか否かを示す。否のとき、セレクタ503は、回路20の保持内容、全バイト読出しであるときは回路10が保持しているバイトイネーブルを選択して、リードデータのバイトイネーブルとする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ転送装置、特に、FIFOを用いバイト単位のデータ転送が可能なデータ転送装置に関する。
【背景技術】
【0002】
一般に、メモリ装置と任意のインタフェース間で、メモリ装置のデータ幅に合わないバイト単位でデータ転送を行なう場合、CPU等がデータを一旦引き取り、その後にデータ幅を合わせてデータを結合する必要がある。この場合、CPUの負荷を回避するため、メモリ装置に対しバイト単位の入出力を可能にする技術が知られている。
【0003】
その1は、バイト単位のライトとリードを実現するために、バイト単位に個別のFIFOを設け、FIFOに対するライトアドレスとリードアドレスもFIFO毎に異なった制御を行う。しかし、これでは、1ワードが4バイト以上のFIFOともなれば回路が複雑化する。例えば、市場性があり大容量のDDRメモリをFIFOとして代用する場合、バイト毎にDDRメモリコントローラとDDR physical interfaceを持つ必要があり、大規模なものとなってしまう。
【0004】
その2は、上位装置から下位装置への送信データを格納する送信FIFOと、下位装置から上位装置への受信データを格納する受信FIFOとを設け、それぞれのFIFO対応に、空きエリアが入力側のデータのバイト幅未満となったことを検出して上位装置へ通知し、上位装置では、次に送信FIFOへ送信する送信データまたは次に受信FIFOから受信する受信データのバイト幅と空きエリアのバイト数との大小により、FIFOとの間のデータ送受信を許否するようにしている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2002−050172号公報
【特許文献2】特開2003−296264号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
解決しようとする問題点は、バイト単位のデータ転送を実現するには、FIFO等の使用するハードウェアが大規模になることである。
【課題を解決するための手段】
【0007】
本発明は、1ワード未満のライト/リードを小規模な回路で実現可能とするため、有効バイト位置を示すイネーブルデータをライト側とリード側のレジスタで管理し、選択してリードデータに付与することを最も主要な特徴とする。
【発明の効果】
【0008】
本発明のデータ転送装置は、イネーブルデータをライト側とリード側それぞれのレジスタで管理し、リード時に選択してリードデータに付与するという構成を採用したため、FIFOのバイト幅に合わせて回路構成(論理)を変更する必要が無いので、バイト単位のライト/リード動作が1ワード以下のバイト幅を持つFIFOを使用しても実現できるという利点がある。従って、1ワードのバイト幅を拡張したFIFOを使用する場合であっても、バイトイネーブルに関連する回路のみを拡張すれば、同じ回路構成(論理)で足りるため、ゲート規模の増加も少なくて済む。
【図面の簡単な説明】
【0009】
【図1】本発明のデータ転送装置の一実施例を示すブロック図である。
【図2】セレクタ103の真理値表を示す図である。
【図3】バイト読出し判定フラグ50の真理値表を示す図である。
【図4】デコーダ104の真理値表を示す図である。
【図5】ライト用アドレスカウンタ12の真理値表を示す図である。
【図6】書込み系の動作を例示する第1のタイムチャートである。
【図7】書込み系の動作を例示する第2のタイムチャートである。
【図8】セレクタ203の真理値表を示す図である。
【図9】リード溶媒とイネーブル判定回路21の真理値表を示す図である。
【図10】デコーダ204の真理値表を示す図である。
【図11】リード用アドレスカウンタ22の真理値表を示す図である。
【図12】アドレス比較器30の真理値表を示す図である。
【図13】バイト読出し判定フラグ50の真理値表を示す図である。
【図14】セレクタ503の真理値表を示す図である。
【図15】メモリEMPTYフラグ60の真理値表を示す図である。
【図16】読出し系の動作を例示する第1のタイムチャートである。
【図17】読出し系の動作を例示する第2のタイムチャートである。
【図18】リードBEの生成方法を説明するための第1のタイムチャートである。
【図19】リードBEの生成方法を説明するための第2のタイムチャートである。
【図20】リードBEの生成方法を説明するための第3のタイムチャートである。
【図21】リードBEの生成方法を説明するための第4のタイムチャートである。
【図22】リードBEの生成方法を説明するための第5のタイムチャートである。
【発明を実施するための形態】
【0010】
本発明のデータ転送装置は、有効バイト位置を示す2値情報(バイトイネーブル)に応じたライトデータをライト要求に応答してFIFOに書き込み、リード要求に応答してリードデータをFIFOから読み出し、バイトイネーブルを添付する。ライト側には、FIFOの最新のライトアドレスに書き込まれているデータのバイトイネーブルを保持するライト用バイトイネーブル保持回路を設け、リード側には、FIFOの最新のライトアドレスに書き込まれているデータのバイトイネーブル、または該バイトイネーブルと1タイミング前の自保持内容との論理和、または1タイミング前の自保持内容を保持するリード用バイトイネーブル保持回路を設ける。
【0011】
リード側には、更に、バイト読出し判定フラグとリードデータ用のセレクタとを設ける。バイト読出し判定フラグは、リードデータのバイトイネーブルを解読してFIFOのライトアドレスとリードアドレスが一致する時に1ワード未満のバイトイネーブルで読み出したことを記憶し、1ワード分に達した位置まで読み出したときに消去される。
【0012】
セレクタは、バイト読出し判定フラグがセットされているときはリード用バイトイネーブル保持回路が保持するバイトイネーブルを選択し、またバイト読出し判定フラグがリセットされていて、かつFIFOのライトアドレスとリードアドレスが一致するときはライト用バイトイネーブル保持回路が保持するバイトイネーブルを選択し、バイト読出し判定フラグがリセットされていて、かつFIFOのライトアドレスとリードアドレスが一致しないときは全バイト読出しを示すバイトイネーブルを選択し、それぞれリードデータのバイトイネーブルとする。以下、本発明の実施例について図面を参照しながら説明する。
【実施例】
【0013】
図1は、本発明のデータ転送装置の一実施例を示すブロック図である。このデータ転送装置は、ライトREQが入力すると、イネーブルデータ(ライトBE)が示す書込みバイト位置のライトDATAがFIFO40へ書き込まれ、リードREQが入力すると、リードDATAをFIFO40から読み出し、読出しバイト位置を示すイネーブルデータ(リードBE)を出力する。ライトBEとリードBEは2値情報で指定される。FIFO40は、1ワードが複数バイトから成るデータを記憶する先入れ先出しメモリであって、複数バイト幅のライトデータI/Fおよび複数バイト幅のリードデータI/Fを有する。なお、メモリEMPTYはFIFO40に記憶されているデータが無いことを示す。また、以下の説明では、FIFO40は4バイト幅のワードを格納するものとする。
【0014】
(1)書込み系の構成
先ず、図1の左側に示されている書込み系について説明する。書込み系は、ゲート回路401、ライト用アドレスカウンタ12、ライト用バイトイネーブル保持回路10、ライト用バイトイネーブル判定回路11、OR回路102、セレクタ103、デコーダ104およびAND回路101から成る。
【0015】
ゲート回路401は、ライトDATAの内のライトBEが指定するバイト(有効バイト)のみをW DATAとしてFIFO40へ入力する。W DATAは、ライトREQ(=W REQ)の“1”アサートと同時に、その時にライト用アドレスカウンタ12が出力するFIFO40のライトアドレス(W ADD)が示すメモリエリアへ格納される。
【0016】
ライト用アドレスカウンタ12は、FIFO40における1ワードを構成している全バイトへの書込みが行なわれると、+1更新されて次のW DATAは+1更新されたW ADDに格納される。即ち、ライト用アドレスカウンタ12は、次のタイミングでW DATAを書き込むべきW ADDを指定する。
【0017】
ライト用バイトイネーブル保持回路10は、FIFO40の最新のW ADDに書き込まれているW DATAの有効バイト位置を2値情報により保持する。例えば、1ワードが4バイトから成るので、有効バイトが1バイト目のみなら2値情報は“0001”、有効バイトが1〜3バイト目なら2値情報は“0111”となる。
【0018】
ライト用バイトイネーブル判定回路11は、ライト用バイトイネーブル保持回路10が保持している2値情報により、初期状態(上例では“0000”)であるか、またはW ADDに書き込まれたデータが1ワード分に達した(上例では“1111”)か、ということと、FIFO40に書き込まれたデータが1ワード未満である(上例では“0001”、“0011”または“0111”)か、ということとの判定結果(前者なら“0”、後者なら“1”)を出力する。
【0019】
OR回路102は、ライトBEとライト用バイトイネーブル保持回路10が保持している2値情報の論理和を出力する。つまり、現状の有効バイト位置に、新規入力のライトBEを加えるのである。
【0020】
セレクタ103は、ライト用バイトイネーブル判定回路11における判定結果をセレクト信号とし、ライトBEまたはOR回路102の出力を選択してライト用バイトイネーブル保持回路10へ出力する。
【0021】
デコーダ104は、セレクタ103の出力を解読して、これからFIFO40に書き込むW DATAにより、FIFO40のそのアドレスに1ワード(セレクタ103の出力が“1xxx”)に達することを検出すると“1”アサート状態となる。AND回路101は、ライトREQとデコーダ104のとの論理積により、ライト用アドレスカウンタ12を+1更新するためのイネーブル信号ENを“1”アサートする。
【0022】
図2は、ライト用バイトイネーブル保持回路10を設定するためのセレクタ103の真理値表を示す。ライト用バイトイネーブル保持回路10は、ライト用バイトイネーブル判定回路11の出力が“0”ならライトBEを格納し(ケース1)、ライト用バイトイネーブル判定回路11の出力が“1”ならライトBEとライト用バイトイネーブル保持回路10が保持している2値情報を論理ORして格納する(ケース2)。
【0023】
この時、ライト用バイトイネーブル保持回路10に格納される値は、初期値“0000”または1ワード“1111”、1ワード未満の場合はLSB側(またはMSB側)から“1”アサートし論理ORして格納するので“0001”、“0011”、“0111”(または“1000”、“1100”、“1110”)の全5通りとなる。
【0024】
図3は、ライト用バイトイネーブル判定回路11の真理値表を示す。ライト用バイトイネーブル判定回路11は、ライト用バイトイネーブル保持回路10の出力が“0000”または“1xxx”、すなわち初期値または1ワード分のバイト数の書込みがされている時は“0”を出力し、ライト用バイトイネーブル保持回路10の出力が“0000”または“1xxx”以外、すなわち1ワード未満のバイト数のライトである時は“1”を出力する。ここで、「X」は「don't care」であることを示している。
【0025】
図4は、デコーダ104の真理値表を示す。デコーダ104は、セレクタ103の出力が“1xxx”なら“1”を出力し、これ以外なら“0”を出力する。また、図5は、ライト用アドレスカウンタ12の真理値表を示す。ライト用アドレスカウンタ12は、AND回路101を介してライトREQが“1”をアサートし、かつ、デコーダ104の出力が“1”、すなわちライト動作時に1ワード分のバイトイネーブルに達した時のみ+1カウント更新する。
【0026】
(2)書込み系の動作
図6および図7は、以上に説明した書込み系の動作を例示するタイムチャートである。図6は、ライトDATAを1バイト単位に順次にFIFO40へ書き込んでいくときの各回路の状態遷移を示している。また、図7は、ライトDATAを1〜4バイト単位に順次にFIFO40へ書き込んでいくときの各回路の状態遷移を示している。ライトBEは4ビットから成り、“1”をアサートしているビットの位置がライトDATAの有効バイトの位置に当る。当初、アドレスカウンタ12は「0」、ライト用イネーブル保持回路10は「0000」を保持しているものとする。
【0027】
ライトBEは4ビット未満が“1”アサートの場合、例えば、LSB側から“1”をアサートし、次のライトのタイミングでは、前のライトタイミングで“1”アサートしたビットは“0”としMSB側まで“1”をアサートしたら再びLSB側を“1”にアサートすることを許可する。これは、1ワードを構成している全バイトへの書込みが行なわれた後で、次アドレスへの書込みを行なうようにするためである。なお、ライトBEへの“1”アサートの方向を上記とは逆に、MSB側からLSB側に向けて行うようにしても差し支えない。
【0028】
(2.1)1バイト書込み動作
図6では、ライトDATA「01」〜「07」を7回に亘って連続して書き込んでいる。タイミング10まで“1”アサートが持続するライトREQが立ち上がるタイミング3では、ライトBE「0001」を伴ったライトDATA「01」が入力する。即ち、FIFO40のW ADD「0」の1バイト目にライトDATA「01」を書き込むための動作が始まる。ライト用イネーブル判定回路11は“0”を出力しているので、セレクタはライトBE「0001」を選択する(図2のケース1)。しかし、ライト用イネーブル保持回路10が「0001」を保持するようになるためは、次のタイミングを待つ必要がある。
【0029】
タイミング4において、ライトBE「0010」を伴ったライトDATA「02」が入力する。ライトDATA「01」のFIFO40のW ADD「0」への書込みが完了し、W ADD「0」の2バイト目にライトDATA「02」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0001」を保持しているので、ライト用イネーブル判定回路11は“1”アサートし(図3参照)、セレクタ103はOR回路102の出力「0011」を選択する(図2のケース2)。ライト用イネーブル保持回路10が「0011」を保持するのは次のタイミングにおいてである。
【0030】
タイミング5において、ライトBE「0100」を伴ったライトDATA「03」が入力する。ライトDATA「02」のFIFO40のW ADD「0」への書込みが完了し、W ADD「0」の3バイト目にライトDATA「03」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0011」を保持しているので、ライト用イネーブル判定回路11は“1”アサートし(図3参照)、セレクタ103はOR回路102の出力「0111」を選択する(図2のケース2)。ライト用イネーブル保持回路10が「0111」を保持するのは次のタイミングにおいてである。
【0031】
タイミング6において、ライトBE「1000」を伴ったライトDATA「04」が入力する。ライトDATA「03」のFIFO40のW ADD「0」への書込みが完了し、W ADD「0」の4バイト目にライトDATA「04」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0111」を保持しているので、ライト用イネーブル判定回路11は“1”アサートし(図3参照)、セレクタ103はOR回路102の出力「1111」を選択する(図2のケース2)。ライト用イネーブル保持回路10が「1111」を保持するのは次のタイミングにおいてである。なお、この場合、デコーダ104は“1”を出力する(図4参照)。
【0032】
タイミング7において、ライトBE「0001」を伴ったライトDATA「05」が入力する。ライトDATA「04」のFIFO40のW ADD「0」への書込みが完了し、FIFO40の1バイト目にライトDATA「05」を書き込むための動作が始まる。デコーダ104が“1”を出力しているので、ライト用アドレスカウンタ12が+1更新されて(図5参照)、「1」となるため、ライトDATA「05」の書込みは、W ADD「1」に対して行なわれる。ライト用イネーブル保持回路10が「1111」を保持しているので、ライト用イネーブル判定回路11は“0”アサートし(図3参照)、セレクタ103はライトBE「0001」を選択する(図2のケース1)。ライト用イネーブル保持回路10が「0001」を保持するのは次のタイミングにおいてである。
【0033】
タイミング8において、ライトBE「0010」を伴ったライトDATA「06」が入力する。ライトDATA「05」のFIFO40のW ADD「1」への書込みが完了し、FIFO40のW ADD「1」の2バイト目にライトDATA「06」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0001」を保持しているので、ライト用イネーブル判定回路11は“1”アサートし(図3参照)、セレクタ103はOR回路102の出力「0011」を選択する(図2のケース2)。ライト用イネーブル保持回路10が「0011」を保持するのは次のタイミングにおいてである。
【0034】
タイミング9において、ライトBE「0100」を伴ったライトDATA「07」が入力する。ライトDATA「06」のFIFO40のW ADD「1」への書込みが完了し、これでFIFO40のアドレス「0」の4バイト全部がライトDATAで埋まったことになる。FIFO40のW ADD「1」の3バイト目にライトDATA「07」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0011」を保持しているので、ライト用イネーブル判定回路11は“1”アサートし(図3参照)、セレクタ103はOR回路102の出力「0111」を選択する(図2のケース2)。ライト用イネーブル保持回路10が「0111」を保持するのは次のタイミングにおいてである。なお、タイミング10以降は、ライトREQが“0”されているため、タイミング9における現状を維持する。
【0035】
(2.2)アトランダム書込み動作
図6は、1バイト書込みを繰り返す単純な書込みパターンを示したが、図7では、より複雑な書込みパターンを提示する。即ち、アトランダムな書込みパターンの一例として、2回の1ワード幅書込みに続いて、2回の2バイト書込み、1回の1バイト書込み、2回の3バイト書込みを順次に行う態様を提示する。
【0036】
図7において、タイミング10まで“1”アサートが持続するライトREQが立ち上がるタイミング3では、ライトBE「1111」を伴ったライトDATA「01〜04」が入力する。即ち、FIFO40のW ADD「0」の1〜4バイト目にライトDATA「01〜04」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0000」を保持しているので、ライト用イネーブル判定回路11は“0”アサートし(図3参照)、セレクタ103はライトBE「1111」を選択する(図2のケース1)。しかし、ライト用イネーブル保持回路10が「1111」を保持するようになるためは、次のタイミングを待つ必要がある。なお、この場合、デコーダ104が“1”を出力する。
【0037】
タイミング4において、ライトBE「1111」を伴ったライトDATA「05〜08」が入力する。デコーダ104が“1”を出力しているので、ライト用アドレスカウンタ12が+1更新されて「1」となるため(図5参照)、FIFO40のW ADD「1」の1〜4バイト目にライトDATA「05〜08」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「1111」を保持しているので、ライト用イネーブル判定回路11は“0”アサートし(図3参照)、セレクタ103はライトBE「1111」を選択する(図2のケース1)。ライト用イネーブル保持回路10は次のタイミングにおいても引き続き「1111」を保持する。この場合も引き続き、デコーダ104が“1”を出力する。
【0038】
タイミング5において、ライトBE「0011」を伴ったライトDATA「0910」が入力する。デコーダ104が“1”を出力しているので、ライト用アドレスカウンタ12が+1更新されて「2」となるため(図5参照)、FIFO40のW ADD「2」の1〜2バイト目にライトDATA「0910」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「1111」を保持しているので、ライト用イネーブル判定回路11は“0”アサートし(図3参照)、セレクタ103はライトBE「0011」を選択する(図2のケース1)。ライト用イネーブル保持回路10は次のタイミングにおいて「0011」を保持する。この場合、デコーダ104は“0”を出力する。
【0039】
タイミング6において、ライトBE「1100」を伴ったライトDATA「1112」が入力する。デコーダ104が“0”を出力しているので、ライト用アドレスカウンタ12+1更新されず、「2」のままであるため(図5参照)、FIFO40のW ADD「2」の3〜4バイト目にライトDATA「1112」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0011」を保持しているので、ライト用イネーブル判定回路11は“1”アサートし(図3参照)、セレクタ103はOR回路102出力「1111」を選択する(図2のケース2)。ライト用イネーブル保持回路10は次のタイミングにおいて「1111」を保持する。この場合、デコーダ104は“1”を出力する。
【0040】
タイミング7において、ライトBE「0001」を伴ったライトDATA「13」が入力する。デコーダ104が“1”を出力しているので、ライト用アドレスカウンタ12が+1更新されて「3」となるため(図5参照)、FIFO40のW ADD「3」の1バイト目にライトDATA「13」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「1111」を保持しているので、ライト用イネーブル判定回路11は“0”アサートし(図3参照)、セレクタ103はライトBE「0001」を選択する(図2のケース1)。ライト用イネーブル保持回路10は次のタイミングにおいて「0001」を保持する。この場合、デコーダ104は“1”を出力しない。
【0041】
タイミング8において、ライトBE「1110」を伴ったライトDATA「14〜16」が入力する。デコーダ104が“0”を出力しているので、ライト用アドレスカウンタ12+1更新されず、「3」のままであるため(図5参照)、FIFO40のW ADD「3」の2〜4バイト目にライトDATA「14〜16」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「0001」を保持しているので、ライト用イネーブル判定回路11は“1”アサートし(図3参照)、セレクタ103はOR回路102出力「1111」を選択する(図2のケース1)。この場合、デコーダ104は“1”を出力する。
【0042】
タイミング9において、ライトBE「0111」を伴ったライトDATA「17〜19」が入力する。デコーダ104が“1”を出力しているので、ライト用アドレスカウンタ12が+1更新されて「4」となるため(図5参照)、FIFO40のW ADD「4」の1〜3バイト目にライトDATA「17〜19」を書き込むための動作が始まる。ライト用イネーブル保持回路10が「1111」を保持しているので、ライト用イネーブル判定回路11は“0”アサートし(図3参照)、セレクタ103はライトBE「0111」を選択する(図2のケース1)。ライト用イネーブル保持回路10は次のタイミングにおいて「0111」を保持する。この場合、デコーダ104は“1”を出力しない。なお、タイミング10以降は、ライトREQが“0”されているため、タイミング9における現状を維持する。
【0043】
以上の一連の動作から、1ワード未満のライト動作は、FIFOアドレスをホールド状態にしたまま1バイト単位でFIFO40にデータを格納し、1ワードに達したらFIFOアドレスを更新し、ライトDATAをFIFO40の1ワード単位でアラインしていくことが分かる。
【0044】
(3)読出し系の構成
次に、図1の右側に示されている読出し系について、アドレス比較器50およびメモリEMPTYフラグ60を含めて説明する。リードREQ(=R REQ)の“1”アサート時に、FIFO40のリードアドレス(R ADD)からリードDATA(R DATA)が読み出される。このとき、リードDATAの内、リードBEで指定されるバイトが有効である。
【0045】
読出し系は、リード用アドレスカウンタ22、デコーダ204、AND回路201、アドレス比較器30、リード用バイトイネーブル保持回路20、リード用バイトイネーブル判定回路21、OR回路202、セレクタ203、AND回路501、AND回路502、バイト読出し判定フラグ50およびセレクタ503で構成されている。
【0046】
リード用アドレスカウンタ22は、R DATAのR ADDを示し、FIFO40から1ワード分のR DATAが読み出されると、+1更新される。即ち、デコーダ204はリードBEの4バイト目が“1”なら“1”アサートし、AND回路201は、リードREQとデコーダ204の“1”アサート状態によりリード用アドレスカウンタ22を+1更新するためのイネーブル信号ENを“1”アサートする。
【0047】
アドレス比較器30は、ライト用アドレスカウンタ12の出力とリード用アドレスカウンタ22の出力を比較し、これら2つのカウンタの出力の値が一致した時は“1”を出力し、不一致の時は“0”を出力する。なお、2つのカウンタの間にはキャリーフラグが設けられていて、カウンタが最大値を超えた後、2つのカウンタの関係がフリーランにならないように制御している。
【0048】
AND回路601は、アドレス比較器30における比較の結果により2つのカウンタの出力の値が一致し、かつライトREQがなくリードREQがあるときにメモリEMPTYフラグ60をセットする。即ち、メモリEMPTYフラグ60は、FIFO40に保持されているデータが空になると“1”にアサートするEMPTY信号を出力し、ライトREQがあるとリセットされる。
【0049】
リード用バイトイネーブル保持回路20は、ライトBE、ライトBEとリード用バイトイネーブル保持回路20の出力との論理和またはリード用バイトイネーブル保持回路20の出力のいずれかを保持する。
【0050】
リード用バイトイネーブル判定回路21は、リード用バイトイネーブル保持回路20が保持している2値情報により、初期状態であるか、または読み出したデータが1ワード分のデータに達したかということと、1ワード未満であるかということとの判定結果(前者なら“0”、後者なら“1”)をアサートする。
【0051】
OR回路202は、ライトBEとリード用バイトイネーブル保持回路20が保持している2値情報の論理和を出力する。つまり、現状のリード用バイトイネーブル保持回路20の出力に、新規入力のライトBEを加えるのである。
【0052】
セレクタ203は、ライトREQ、リードREQ、アドレス比較器30の出力およびリード用バイトイネーブル判定回路21の出力をセレクト信号とし、ライトBE、またはOR回路202の出力、またはリード用バイトイネーブル保持回路20の出力のいずれかを選択してリード用バイトイネーブル保持回路20へ出力する。
【0053】
AND回路501は、リードREQが“1”アサートで、かつアドレス比較器30の出力が“1”で、かつデコーダ204の出力が“0”即ちバイト読出しのときに、バイト読出し判定フラグ50をセットする。AND回路502は、リードREQが“1”アサートで、かつデコーダ204の出力が“1”、即ち1ワード分に達した位置まで読み出したときはバイト読出し判定フラグ50をリセットする。
【0054】
バイト読出し判定フラグ50は、ライト用バイトイネーブル保持回路10またはリード用バイトイネーブル保持回路20に保持されているバイトイネーブルを選択するために使用される。
【0055】
セレクタ503は、バイト読出し判定フラグ50の出力と、リードREQと、アドレス比較器30の出力をセレクト信号とし、All“0”の値またはリード用バイトイネーブル保持回路10の値またはリード用バイトイネーブル保持回路20の値の値またはAll“1”の値を選択してリードBEとして出力する。
【0056】
図8は、リード用バイトイネーブル保持回路20を設定するためのセレクタ203の真理値表を示す。セレクタ203は、アドレス比較器30の出力が“0”ならリード用バイトイネーブル保持回路20の出力を格納(ホールド)する(ケース2)。
【0057】
一方、アドレス比較器30の出力が“1”で、かつライトREQとリードREQが“1”ならライトBEの値を選択する(ケース3)。
【0058】
また、アドレス比較器30の出力が“1”で、かつライトREQが“1”で、かつリードREQが”0”で、かつリード用バイトイネーブル判定回路21の出力が“0”ならライトBEの出力を選択する(ケース4)。ただし、このとき、リード用バイトイネーブル判定回路21の出力が“1”なら、リード用バイトイネーブル保持回路20が前回のライトで格納した値にライトBEの値を論理ORした値を選択する(ケース5)。
【0059】
そして、以上の全ての場合でないときは、リード用バイトイネーブル保持回路20の出力を格納(ホールド)する(ケース1)。
【0060】
図9はリード用バイトイネーブル判定回路21の真理値表を示す。リード用バイトイネーブル判定回路21は、リード用バイトイネーブル保持回路20の出力が“0000”即ち初期値、または“1xxx”即ち1ワード(4バイト)に達した読み出しのときは“0”をアサートし、リード用バイトイネーブル判定回路20の出力が“0000”または“1111”以外、即ち1ワード未満のバイト数を示している時は“1”を出力する。このリード用バイトイネーブル判定回路21の論理は、図3に示したライト用バイトイネーブル判定回路11の論理と同じである。
【0061】
図10はデコーダ204の真理値表を示す。デコーダ204は、セレクタ503の出力が“1xxx”即ちリードDATAが1ワードに達したときに“1”、セレクタ503の出力が“1xxx”以外のときに“0”を出力する。
【0062】
図11はリード用アドレスカウンタ22の真理値表を示す。リード用アドレスカウンタ22は、デコーダ204の出力が“1”にリードREQがあると、1クロック後に+1更新される。その他の場合には、リード用アドレスカウンタ22は現状の出力を保持する。
【0063】
図12はアドレス比較器30の真理値表を示す。アドレス比較器30はライト用アドレスカウンタ12のカウント値とリード用アドレスカウンタ22のカウント値が等しいときに“1”を出力し、その他の場合には“0”を出力する。
【0064】
図13はバイト読出し判定フラグ50の真理値表を示す。バイト読出し判定フラグ50は、アドレス比較器30の出力が“1”で、かつデコーダ204の出力が“0”即ちリードDATAが1ワードに達しないときに、リードREQがあると“1”にセットされる。そして、デコーダ204の出力が“1”即ちリードDATAが1ワードに達したときにリードREQがあると“0”にリセットされる。
【0065】
図14はセレクタ503の真理値表を示す。セレクタ503は、リードREQが“0”なら“0000”を出力する(ケース1)。
【0066】
一方、リードREQが“1”で、かつバイト読出し判定フラグ50の出力が”1“なら、リード用バイトイネーブル保持回路20の出力を選択する(ケース2)。
【0067】
また、リードREQが“1”で、かつバイト読出し判定フラグ50の出力が“0”で、かつアドレス比較器30の出力が“1”ならライト用バイトイネーブル保持回路10の出力を選択する(ケース3)。ただし、このときにアドレス比較器30の出力が“0”なら“1111”を選択する(ケース4)。
【0068】
図15はメモリEMPTYフラグ60の真理値表を示す。メモリEMPTYフラグ60は、アドレス比較器30の出力が“1”で、かつライトREQが“0”で、かつリードREQが“1”なら“1”にセットされる。新たに書き込まれるデータが無い状態で最後にライトした1ワード未満のデータの読出しが行なわれるからである。また、ライトREQが“1”なら“0”リセットされる。
【0069】
(4)読出し系の動作
図16図と図17は、以上に説明した読出し系の動作を例示するタイムチャートである。図16は、リードDATAを1バイト単位に順次にFIFO40から読み出していくときの各回路の状態遷移を示している。また、図17は、1以上のバイトから成るリードDATAをアトランダムに読み出していくときの各回路の状態遷移を示している。当初は、ライトアドレスカウンタ12とリードアドレスカウンタ22は「0」であり、ライト用バイトイネーブル保持回路10とリード用バイトイネーブル保持回路20は“0000”を保持しているものとする。従って、アドレス比較器30は“1”を出力し、メモリEMPTYフラグ60も“1”を出力している。また、バイト読出し判定フラグ50はリセット状態にある。
【0070】
(4.1)1バイト読出し動作
図16は、図6に示した書込み動作中にリードREQが入力し、順次に1バイトずつ読み出した場合を示し、ライト系の波形は図6のコピーとなっている。リードREQは、メモリEMPTYが“0”の時、即ちFIFO40に1バイト以上のデータが格納されている時、“1”にすることが可能である。タイミング4からタイミング11の間でリードREQが“1”となっており、この間にFIFO40に順次書き込まれるライトDATA「01」〜「07」がリードDATA「01」〜「07」として順次読み出される。
【0071】
タイミング3では、リード用バイトイネーブル保持回路20は“0000”を保持しているので、リード用イネーブル判定回路21は“1”を出力している(図9参照)。また、アドレス比較器30は“1”を出力し(図12参照)、ライトREQは“1”、リードREQは“0”であるため、セレクタ203はライトBE“0001”を選択する(図8のケース4)。リードREQの入力は未だないので、セレクタ503は“0000”を出力している(図14のケース1)。
【0072】
タイミング4になると、タイミング3で“1”アサートされたライトREQのため、メモリEMPTYフラグ60は“0”を出力し、タイミング11まで持続する(図15参照)。リード用バイトイネーブル保持回路20はタイミング3においてセレクタ203が選択した“0001”を保持し、リード用バイトイネーブル判定回路21は“1”を出力する(図9参照)。リードREQが“1”アサートされるので、セレクタ203はライトBE“0010”を出力する(図8のケース3)。また、セレクタ503はライトバイトイネーブル保持回路10が保持している“0001”を選択する(図14のケース3)。即ち、タイミング3で入力しタイミング4でFIFO40に書き込まれた1バイト目のライトDATA“01”が、1バイト目のリードDATA“01”として読み出されることを示す。この場合、デコーダ204は“0”を出力するので、AND回路501の出力は“1”となる。
【0073】
タイミング5では、上記末文のセット条件成立を受けて、バイト読出し判定フラグ50が“1”にセットされる(図13)。従って、セレクタ503はリード用バイトイネーブル保持回路20が保持する“0010”を選択する(図14のケース2)。即ち、タイミング4で入力しタイミング5でFIFO40に書き込まれた2バイト目のライトDATA“02”が、2バイト目のリードDATA“02”として読み出されることを示す。
【0074】
タイミング6もタイミング5と同様に推移する。タイミング7では、ライト用アドレスカウンタ12とリード用アドレスカウンタ22の不一致が生じるのでアドレス比較器30は“0”を出力する(図12参照)。従って、AND回路501の出力は“0”となる。また、リードBEは“1000”となるので、AND回路502の出力は“1”となって、バイト読出し判定フラグ50のリセット条件が成立する(図13)。また、デコーダ204が“1”を出力する。更に、リード用バイトイネーブル保持回路20が“1000”を保持しているので、バイト読出し判定回路21は“0”となる(図9参照)。
【0075】
タイミング8において、バイト読出し判定フラグ50が“0”にリセットされる。また、デコーダ204が“1”を出力しているので、リード用アドレスカウンタ22が「1」に更新され(図11参照)、アドレス比較器30は再び“1”を出力する(図12参照)。従って、セレクタ503はライト用イネーブル保持回路10が保持している“0001”を選択する(図14のケース3)。これによって、AND回路501の出力は“1”、AND回路502の出力は“0”となる。セレクタ203はライトBE“0010”を選択する(図8のケース3)。
【0076】
タイミング9において、バイト読出し判定フラグ50の出力が“1”となり(図13参照)、セレクタ503はリード溶媒とイネーブル保持回路20が保持している“0010”を選択する(図14のケース2)。セレクタ203は、ライトBE“0100”を選択する(図8のケース3)。
【0077】
タイミング10においてもタイミング9におけるのと同様に動作する。この時点で、ライトREQは“0”となるので、メモリEMPTYフラグ60のセット条件が成立する(図15参照)。
【0078】
タイミング11において、メモリEMPTYフラグ60の出力が“1”となる。リードREQも“0”となるので、これ以降、セレクタ503は“0000”をセンタし続ける(図14のケース1)。
【0079】
(4.2)アトランダムな読出し動作
図17は、アトランダムな読出しパターンの一例として、1バイト,2バイト,1バイト,4バイト,4バイト,2バイトを6回連続して書き込み、5タイミング後に1バイトのみを書き込み、一方、1回目の連続書込みの間に、1バイトのみを読み出し、1回目の連続書込みと2回目の書込みの間に、1回目の連続書込みで書き込まれた残り全てのデータを読み出し、2回目の書込みの後でそのデータを読み出している。
【0080】
このような複雑な書込み読出しパターンであっても、これまでの詳細な説明によって習得されたところにより、各回路の動作は容易に理解できると考えるので、これ以上の説明を省略する。ただ、タイミング9において、リードBEが“1110”となっているのは、タイミング4でのライトDATA“0203”とタイミング5でのライトDATA“04”とが結合されて、リードDATA“020304”とされていることを示す。このように、FIFO40からの読出しは、ワード区切りで行なわれるのである。
【0081】
(4.3)リードBEの生成
ここで、図18から図22までのタイミングチャートを用いてリードBE信号の生成方法を説明する。これらの図では、ライト動作はいずれも同じであるが、リード動作はリードREQを“1”にアサートするタイミングを変えた複数のケースを示す。リードREQを“1”にアサートするタイミングにより、図18、図19、図20、図22は、1ワード未満のリード動作のケース、図21は1ワードのリード動作のケースとなっている。また、いずれも図16のタイミングチャートのリード動作と異なり、1バイトでライトしたデータが結合されて複数バイトでリードされるケースである。
【0082】
図18のケースは、タイミング3からライト動作が始まり、タイミング4のリード動作時ではライト用バイトイネーブル保持回路10とリード用バイトイネーブル保持回路20は同じ“0001”を保持しており、バイト読出し判定フラグ50は初期値“0”のままで、ライト用バイトイネーブル保持回路10の“0001”をリードBEとして選択する(図14のケース3)。
【0083】
タイミング5以降は、バイト読出し判定フラグ50を“1”にセットする。これは、1ワード未満でリード動作が行われたことを意味し、次回のリード動作では1ワードに達する残りのバイトデータを選択する機能で使用する。また、ライト用バイトイネーブル保持回路10は、タイミング3にセレクタ103が出力するライトBEを新規に格納した後(図2のケース1)、タイミング4からタイミング6までライトBEとライト用バイトイネーブル保持回路10の保持内容を論理ORした値を順次格納する(図2のケース2)。
【0084】
一方、リード用バイトイネーブル保持回路20は、タイミング3にセレクタ203が出力するライトBEを新規に格納した後(図8のケース3)、4クロック目で再び新規にライトBEを格納することにより(図8のケース4)、タイミング5からタイミング6では“0001”を除いた値にライトBEを論理ORした値を順次格納する(図8のケース5)。これは、タイミング4でリードBEが“0001”で処理が完了しているため、次回のリード動作で1バイト目を除いたデータを有効にするためである。
【0085】
次に、タイミング7では、リード用バイトイネーブル保持回路20は“1110”となり、3ビット目までが“1”すなわち1ワードの区切りとなるが、アドレス比較器30は“0”の条件から、次回のリード動作で出力するリードBEを確保するため、“1110”をホールドする(図5のケース2)。タイミング8以降、ライト用バイトイネーブル保持回路10は更新を続け、リード用バイトイネーブル保持回路20とは無関係に動作していく。
【0086】
タイミング10のリード動作では、バイト読出し判定フラグ50の出力“1”により、リード用バイトイネーブル保持回路20の“1110”をリードBEとして選択する(図14のケース2)。リード処理が完了したタイミング11ではいずれの条件にも当てはまらないのでリード用バイトイネーブル保持回路20の“1110”にホールドする(図8のケース1)。
【0087】
図19は、最初のリード動作を図18に対して1タイミング遅くしたケースを示している。リード動作が行われるタイミング5までライト用バイトイネーブル保持回路10と、リード用バイトイネーブル保持回路20は同値に更新し、タイミング5のリード動作でリードBE“0011”を出力し、タイミング7でアドレス比較器30は“0”の条件から、リード用バイトイネーブル保持回路20の“1100”をホールドする(図8のケース2)。次回のリード動作(タイミング10)でリードBE“1100”を出力する。
【0088】
図20は、最初のリード動作を図18に対して2クロック遅くしたケースを示している。リード動作が行われるタイミング6までライト用バイトイネーブル保持回路10と、リード用バイトイネーブル保持回路20は同値に更新し、タイミング6のリード動作でリードBE“0111”を出力し、タイミング7でアドレス比較器30は“0”の条件から、リード用バイトイネーブル保持回路20の“1000”をホールドする(図8のケース2)。次回のリード動作(タイミング10)でリードBE“1000”を出力する。
【0089】
図21は、1ワード以上のライト動作が行われる間、一度もリード動作を行わないケースを示している。タイミング7でライト動作は1ワードに達し、ライト用アドレスカウンタ12が+1カウント更新する。リード用アドレスカウンタ22は初期値のままであるため、タイミング7でアドレス比較器30の出力は“0”になる。1ワード未満のリード動作は行っていないため、バイト読出し判定フラグ50は“0”のままであり、ライト用バイトイネーブル保持回路10と、リード用バイトイネーブル保持回路20は同値に更新していく。タイミング7でアドレス比較器30は“0”の条件から、リード用バイトイネーブル保持回路20の“1111”をホールドする(図8のケース2)。
【0090】
タイミング10で最初のリード動作が行われ、バイト読出し判定フラグ50が“0”で、アドレス比較器30が“0”であるため、リードBEとして1ワード有効となる“1111”を選択する(図14のケース4)。これは、1ワード未満の残りのバイトデータをリードする条件も無く、ライト用アドレスカウンタ12とリード用アドレスカウンタ22の値に差分があるため、リード動作するアドレスのメモリエリアには1ワード分のデータを格納している理由からである。また、この時、リード用バイトイネーブル保持回路20の“1111”とセレクタ503が選択した出力“1111”が同じであるが、リード用バイトイネーブル保持回路20側が“1111”とならないケースもある(図17のタイミング10,11)。
【0091】
図22は、5クロック目に1ワード未満の最初のリード動作を行い、リードBE“0011”を出力する(図14のケース3)。タイミング8からタイミング9までアドレス比較器30の出力が“0”なので、リード用バイトイネーブル保持回路20の“1100”でホールドする(図8のケース2)。タイミング8で2回目のリード動作を行い、リードBE“1100”を出力する(図14のケース2)。タイミング9では1ワードに達する残りのバイトデータのリード動作を完了したので、バイト読出し判定フラグ50を“0”にリセットする。ここまでは、図18から図19のケースと大差は無い。
【0092】
しかし、タイミング9でセレクタ203は、リード用バイトイネーブル判定回路21が“0”で(リード用バイトイネーブル保持回路20の値が“1100”のため)、アドレス比較器30が“1”で、ライトREQが“1”で、リードREQが“0”であるのでライトBE“0100”を選択している(図8のケース4)。10クロック目ではその“0100”がリード用バイトイネーブル保持回路20に格納されるが、「バイトイネーブルとして使用できない無効なデータ」である。
【0093】
タイミング10で3回目のリード動作を行う。バイト読出し判定フラグ50が“0”で、アドレス比較器30が“1” の条件から、ライト用バイトイネーブル保持回路10の値を選択し、リードBE“0111”を出力する(図14のケース3)。この時、同時に、セレクタ203は、アドレス比較器30が“1”で、ライトREQ信号が“1”で、リードREQ信号が“1” の条件から、ライトBE“1000”を選択する(図8のケース3)。これは、タイミング10で1ワード未満のリード動作が行われたことから、そのバイトイネーブルを除いた新規のライトBEを選択する機能で、前述した「バイトイネーブルとして使用できない無効なデータ」はここで消滅する。
【0094】
そして、デコーダ204が“0”で(リードBE信号の3ビット目以外が“1”に当てはならないため)、アドレス比較器30が“1”でリードREQが“1”である条件から、次のタイミング11ではバイト読出し判定フラグ50を“1”にセットし、リード用バイトイネーブル保持回路20にはライトBE“1000”を新規に格納する。このライトBE“1000”は次回のリード動作までホールドする(図8のケース2)。
【0095】
図22のケースでは、タイミング10の3回目のリード動作の時アドレス比較器30の出力が“1”であるが、アドレス比較器30の出力が“0”である場合は、前述の図21のケースのようにリードBE“1111”の値を出力し、リード動作の最後はこの図22のケースで終了する。
【0096】
以上が各真理値表における全てのケースを網羅した説明である。これらのケースの組合せにより、他のどのような書込み/読出しパターンであっても、各回路の動作は容易に理解できよう。
【0097】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0098】
(付記1)有効バイト位置を示す2値情報(バイトイネーブル)に応じたライトデータをライト要求に応答してFIFOに書き込み、リード要求に応答してリードデータを前記FIFOから読み出し前記バイトイネーブルを添付するデータ転送装置において、前記FIFOの最新のライトアドレスに書き込まれているデータの前記バイトイネーブルを保持するライト用バイトイネーブル保持回路と、前記FIFOの最新のライトアドレスに書き込まれているデータの前記バイトイネーブル、または該バイトイネーブルと1タイミング前の自保持内容との論理和、または1タイミング前の自保持内容を保持するリード用バイトイネーブル保持回路と、前記リードデータの前記バイトイネーブルを解読して前記FIFOのライトアドレスとリードアドレスが一致する時に1ワード未満のバイトイネーブルで読み出したことを記憶し、1ワード分に達した位置まで読み出したときに消去されるバイト読出し判定フラグと、前記バイト読出し判定フラグがセットされているときは前記リード用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記FIFOのライトアドレスとリードアドレスが一致するときは前記ライト用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記FIFOのライトアドレスとリードアドレスが一致しないときは全バイト読出しを示す前記バイトイネーブルを選択し、それぞれ前記リードデータの前記バイトイネーブルとするセレクタとを設けたことを特徴とするデータ転送装置。
【0099】
(付記2)前記ライト用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記FIFOが初期状態または前記ライトデータが1ワード分に達したか、否かの判定結果を出力するライト用バイトイネーブル判定回路と、前記ライト要求があり前記FIFOが初期状態または前記ライトデータが1ワード分に達したときは前記ライトデータの前記バイトイネーブルを選択し、また前記ライト要求があり前記ライト用バイトイネーブル判定回路における判定結果が否のときは前記ライト要求がないときは前記ライトデータの前記バイトイネーブルと前記ライト用バイトイネーブル保持回路の保持内容との論理和を選択し、前記ライト用バイトイネーブル保持回路へ出力するセレクタとを有することを特徴とする付記1に記載のデータ転送装置。
【0100】
(付記3)前記セレクタの出力を解読して前記ライトデータが1ワード分に達することを検出するデコーダと、前記最新のライトアドレスを指定し前記検出によりカウントアップするライト用アドレスカウンタとを有することを特徴とする付記2に記載のデータ転送装置。
【0101】
(付記4)前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記FIFOが初期状態または前記リードデータが1ワード分に達したか、否かの判定結果を出力するリード用バイトイネーブル判定回路と、前記ライトアドレスと前記リードアドレスが一致しないときは前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブル、一方、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求があるときまたは前記リード要求がなく、かつ、前記FIFOが初期状態または前記リードデータが1ワード分に達したときは前記ライトデータの前記バイトイネーブル、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求がなく、かつ、前記リード用バイトイネーブル判定回路における判定結果が否であるときは前記ライトデータの前記バイトイネーブルと前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルとの論理和を選択するセレクタとを有することを特徴とする付記1に記載のデータ転送装置。
【0102】
(付記5)前記FIFOから1ワード分のリードデータが読み出されたことを検出するデコーダと、前記リードデータのアドレスを示し前記検出により+1更新されるリード用アドレスカウンタとを有することを特徴とする付記4に記載のデータ転送装置。
【0103】
(付記6)前記ライト用アドレスカウンタの保持内容と前記リード用アドレスカウンタの保持内容を比較するアドレス比較器を有し、前記比較の結果によりアドレスが一致し、かつ前記ライト要求がなくて前記リード要求があるとき、前記FIFOは空であることを示すEMPTY信号を出力するメモリEMPTYフラグを有することを特徴とする付記5に記載のデータ転送装置。
【産業上の利用可能性】
【0104】
例えば、ストリーミングデータを本データ転送装置で介して転送する場合、ストリーミングデータの容量が、1ワード区切りでなくても(1ワード以上も含む)転送できるし、バイト単位で分離された状態であっても転送できる。
【符号の説明】
【0105】
10 ライト用イネーブル保持回路
11 ライト用イネーブル判定回路
12 ライト用アドレスカウンタ
20 リード用イネーブル保持回路
21 リード用イネーブル判定回路
22 リード用アドレスカウンタ
30 アドレス比較器
40 FIFO
50 バイト読出し判定フラッグ
60 メモリEMPTYフラグ
101 AND回路
102 OR回路
103 セレクタ
104 デコーダ
201 AND回路
202 OR回路
203 セレクタ
204 デコーダ
401 ゲート回路
501 AND回路
502 AND回路
503 セレクタ
601 AND回路

【特許請求の範囲】
【請求項1】
有効バイト位置を示す2値情報(バイトイネーブル)に応じたライトデータをライト要求に応答してFIFOに書き込み、リード要求に応答してリードデータを前記FIFOから読み出し前記バイトイネーブルを添付するデータ転送装置において、
前記FIFOの最新のライトアドレスに書き込まれているデータの前記バイトイネーブルを保持するライト用バイトイネーブル保持回路と、
前記FIFOの最新のライトアドレスに書き込まれているデータの前記バイトイネーブル、または該バイトイネーブルと1タイミング前の自保持内容との論理和、または1タイミング前の自保持内容を保持するリード用バイトイネーブル保持回路と、
前記リードデータの前記バイトイネーブルを解読して前記FIFOのライトアドレスとリードアドレスが一致する時に1ワード未満のバイトイネーブルで読み出したことを記憶し、1ワード分に達した位置まで読み出したときに消去されるバイト読出し判定フラグと、
前記バイト読出し判定フラグがセットされているときは前記リード用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記FIFOのライトアドレスとリードアドレスが一致するときは前記ライト用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記FIFOのライトアドレスとリードアドレスが一致しないときは全バイト読出しを示す前記バイトイネーブルを選択し、それぞれ前記リードデータの前記バイトイネーブルとするセレクタとを設けたことを特徴とするデータ転送装置。
【請求項2】
前記ライト用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記FIFOが初期状態または前記ライトデータが1ワード分に達したか、否かの判定結果を出力するライト用バイトイネーブル判定回路と、
前記ライト要求があり前記FIFOが初期状態または前記ライトデータが1ワード分に達したときは前記ライトデータの前記バイトイネーブルを選択し、また前記ライト要求があり前記ライト用バイトイネーブル判定回路における判定結果が否のときは前記ライトデータの前記バイトイネーブルと前記ライト用バイトイネーブル保持回路の保持内容との論理和を選択し、前記ライト用バイトイネーブル保持回路へ出力するセレクタとを有することを特徴とする請求項1に記載のデータ転送装置。
【請求項3】
前記セレクタの出力を解読して前記ライトデータが1ワード分に達することを検出するデコーダと、
前記最新のライトアドレスを指定し前記検出によりカウントアップするライト用アドレスカウンタとを有することを特徴とする請求項2に記載のデータ転送装置。
【請求項4】
前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記FIFOが初期状態または前記リードデータが1ワード分に達したか、否かの判定結果を出力するリード用バイトイネーブル判定回路と、
前記ライトアドレスと前記リードアドレスが一致しないときは前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブル、一方、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求があるときまたは前記リード要求がなく、かつ、前記FIFOが初期状態または前記リードデータが1ワード分に達したときは前記ライトデータの前記バイトイネーブル、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求がなく、かつ、前記リード用バイトイネーブル判定回路における判定結果が否であるときは前記ライトデータの前記バイトイネーブルと前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルとの論理和を選択するセレクタとを有することを特徴とする請求項1に記載のデータ転送装置。
【請求項5】
前記FIFOから1ワード分のリードデータが読み出されたことを検出するデコーダと、
前記リードデータのアドレスを示し前記検出により+1更新されるリード用アドレスカウンタとを有することを特徴とする請求項4に記載のデータ転送装置。
【請求項6】
前記ライト用アドレスカウンタの保持内容と前記リード用アドレスカウンタの保持内容を比較するアドレス比較器を有し、
前記比較の結果によりアドレスが一致し、かつ前記ライト要求がなくて前記リード要求があるとき、前記FIFOは空であることを示すEMPTY信号を出力するメモリEMPTYフラグを有することを特徴とする請求項5に記載のデータ転送装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate


【公開番号】特開2012−243053(P2012−243053A)
【公開日】平成24年12月10日(2012.12.10)
【国際特許分類】
【出願番号】特願2011−112019(P2011−112019)
【出願日】平成23年5月19日(2011.5.19)
【出願人】(303013763)NECエンジニアリング株式会社 (651)
【Fターム(参考)】