(57)【特許請求の範囲】
【請求項１】
有効バイト位置を示す２値情報（バイトイネーブル）に応じたライトデータをライト要求に応答してＦＩＦＯに書き込み、リード要求に応答してリードデータを前記ＦＩＦＯから読み出し前記バイトイネーブルを添付するデータ転送装置において、
前記ＦＩＦＯの最新のライトアドレスに書き込まれているデータの前記バイトイネーブルを保持するライト用バイトイネーブル保持回路と、
前記ＦＩＦＯの最新のライトアドレスに書き込まれているデータの前記バイトイネーブル、または該バイトイネーブルと１タイミング前の自保持内容との論理和、または１タイミング前の自保持内容を保持するリード用バイトイネーブル保持回路と、
前記リードデータの前記バイトイネーブルを解読して前記ＦＩＦＯのライトアドレスとリードアドレスが一致する時に１ワード未満のバイトイネーブルで読み出したことを記憶し、１ワード分に達した位置まで読み出したときに消去されるバイト読出し判定フラグと、
前記バイト読出し判定フラグがセットされているときは前記リード用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記ＦＩＦＯのライトアドレスとリードアドレスが一致するときは前記ライト用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記ＦＩＦＯのライトアドレスとリードアドレスが一致しないときは全バイト読出しを示す前記バイトイネーブルを選択し、それぞれ前記リードデータの前記バイトイネーブルとするセレクタとを設けたことを特徴とするデータ転送装置。
【請求項２】
前記ライト用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記ＦＩＦＯが初期状態または前記ライトデータが１ワード分に達したか、否かの判定結果を出力するライト用バイトイネーブル判定回路と、
前記ライト要求があり前記ＦＩＦＯが初期状態または前記ライトデータが１ワード分に達したときは前記ライトデータの前記バイトイネーブルを選択し、また前記ライト要求があり前記ライト用バイトイネーブル判定回路における判定結果が否のときは前記ライトデータの前記バイトイネーブルと前記ライト用バイトイネーブル保持回路の保持内容との論理和を選択し、前記ライト用バイトイネーブル保持回路へ出力するセレクタとを有することを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記セレクタの出力を解読して前記ライトデータが１ワード分に達することを検出するデコーダと、
前記最新のライトアドレスを指定し前記検出によりカウントアップするライト用アドレスカウンタとを有することを特徴とする請求項２に記載のデータ転送装置。
【請求項４】
前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記ＦＩＦＯが初期状態または前記リードデータが１ワード分に達したか、否かの判定結果を出力するリード用バイトイネーブル判定回路と、
前記ライトアドレスと前記リードアドレスが一致しないときは前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブル、一方、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求があるときまたは前記リード要求がなく、かつ、前記ＦＩＦＯが初期状態または前記リードデータが１ワード分に達したときは前記ライトデータの前記バイトイネーブル、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求がなく、かつ、前記リード用バイトイネーブル判定回路における判定結果が否であるときは前記ライトデータの前記バイトイネーブルと前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルとの論理和を選択するセレクタとを有することを特徴とする請求項１に記載のデータ転送装置。
【請求項５】
前記ＦＩＦＯから１ワード分のリードデータが読み出されたことを検出するデコーダと、
前記リードデータのアドレスを示し前記検出により＋１更新されるリード用アドレスカウンタとを有することを特徴とする請求項４に記載のデータ転送装置。
【請求項６】
前記ライト用アドレスカウンタの保持内容と前記リード用アドレスカウンタの保持内容を比較するアドレス比較器を有し、
前記比較の結果によりアドレスが一致し、かつ前記ライト要求がなくて前記リード要求があるとき、前記ＦＩＦＯは空であることを示すEMPTY信号を出力するメモリEMPTYフラグを有することを特徴とする請求項５に記載のデータ転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置、特に、ＦＩＦＯを用いバイト単位のデータ転送が可能なデータ転送装置に関する。
【背景技術】
【０００２】
一般に、メモリ装置と任意のインタフェース間で、メモリ装置のデータ幅に合わないバイト単位でデータ転送を行なう場合、ＣＰＵ等がデータを一旦引き取り、その後にデータ幅を合わせてデータを結合する必要がある。この場合、ＣＰＵの負荷を回避するため、メモリ装置に対しバイト単位の入出力を可能にする技術が知られている。
【０００３】
その１は、バイト単位のライトとリードを実現するために、バイト単位に個別のＦＩＦＯを設け、ＦＩＦＯに対するライトアドレスとリードアドレスもＦＩＦＯ毎に異なった制御を行う。しかし、これでは、１ワードが４バイト以上のＦＩＦＯともなれば回路が複雑化する。例えば、市場性があり大容量のDDRメモリをＦＩＦＯとして代用する場合、バイト毎にDDRメモリコントローラとDDR physical interfaceを持つ必要があり、大規模なものとなってしまう。
【０００４】
その２は、上位装置から下位装置への送信データを格納する送信ＦＩＦＯと、下位装置から上位装置への受信データを格納する受信ＦＩＦＯとを設け、それぞれのＦＩＦＯ対応に、空きエリアが入力側のデータのバイト幅未満となったことを検出して上位装置へ通知し、上位装置では、次に送信ＦＩＦＯへ送信する送信データまたは次に受信ＦＩＦＯから受信する受信データのバイト幅と空きエリアのバイト数との大小により、ＦＩＦＯとの間のデータ送受信を許否するようにしている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−０５０１７２号公報
【特許文献２】特開２００３−２９６２６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
解決しようとする問題点は、バイト単位のデータ転送を実現するには、ＦＩＦＯ等の使用するハードウェアが大規模になることである。
【課題を解決するための手段】
【０００７】
本発明は、１ワード未満のライト／リードを小規模な回路で実現可能とするため、有効バイト位置を示すイネーブルデータをライト側とリード側のレジスタで管理し、選択してリードデータに付与することを最も主要な特徴とする。
【発明の効果】
【０００８】
本発明のデータ転送装置は、イネーブルデータをライト側とリード側それぞれのレジスタで管理し、リード時に選択してリードデータに付与するという構成を採用したため、ＦＩＦＯのバイト幅に合わせて回路構成（論理）を変更する必要が無いので、バイト単位のライト／リード動作が１ワード以下のバイト幅を持つＦＩＦＯを使用しても実現できるという利点がある。従って、１ワードのバイト幅を拡張したＦＩＦＯを使用する場合であっても、バイトイネーブルに関連する回路のみを拡張すれば、同じ回路構成（論理）で足りるため、ゲート規模の増加も少なくて済む。
【図面の簡単な説明】
【０００９】
【図１】本発明のデータ転送装置の一実施例を示すブロック図である。
【図２】セレクタ１０３の真理値表を示す図である。
【図３】バイト読出し判定フラグ５０の真理値表を示す図である。
【図４】デコーダ１０４の真理値表を示す図である。
【図５】ライト用アドレスカウンタ１２の真理値表を示す図である。
【図６】書込み系の動作を例示する第１のタイムチャートである。
【図７】書込み系の動作を例示する第２のタイムチャートである。
【図８】セレクタ２０３の真理値表を示す図である。
【図９】リード溶媒とイネーブル判定回路２１の真理値表を示す図である。
【図１０】デコーダ２０４の真理値表を示す図である。
【図１１】リード用アドレスカウンタ２２の真理値表を示す図である。
【図１２】アドレス比較器３０の真理値表を示す図である。
【図１３】バイト読出し判定フラグ５０の真理値表を示す図である。
【図１４】セレクタ５０３の真理値表を示す図である。
【図１５】メモリEMPTYフラグ６０の真理値表を示す図である。
【図１６】読出し系の動作を例示する第１のタイムチャートである。
【図１７】読出し系の動作を例示する第２のタイムチャートである。
【図１８】リードBEの生成方法を説明するための第１のタイムチャートである。
【図１９】リードBEの生成方法を説明するための第２のタイムチャートである。
【図２０】リードBEの生成方法を説明するための第３のタイムチャートである。
【図２１】リードBEの生成方法を説明するための第４のタイムチャートである。
【図２２】リードBEの生成方法を説明するための第５のタイムチャートである。
【発明を実施するための形態】
【００１０】
本発明のデータ転送装置は、有効バイト位置を示す２値情報（バイトイネーブル）に応じたライトデータをライト要求に応答してＦＩＦＯに書き込み、リード要求に応答してリードデータをＦＩＦＯから読み出し、バイトイネーブルを添付する。ライト側には、ＦＩＦＯの最新のライトアドレスに書き込まれているデータのバイトイネーブルを保持するライト用バイトイネーブル保持回路を設け、リード側には、ＦＩＦＯの最新のライトアドレスに書き込まれているデータのバイトイネーブル、または該バイトイネーブルと１タイミング前の自保持内容との論理和、または１タイミング前の自保持内容を保持するリード用バイトイネーブル保持回路を設ける。
【００１１】
リード側には、更に、バイト読出し判定フラグとリードデータ用のセレクタとを設ける。バイト読出し判定フラグは、リードデータのバイトイネーブルを解読してＦＩＦＯのライトアドレスとリードアドレスが一致する時に１ワード未満のバイトイネーブルで読み出したことを記憶し、１ワード分に達した位置まで読み出したときに消去される。
【００１２】
セレクタは、バイト読出し判定フラグがセットされているときはリード用バイトイネーブル保持回路が保持するバイトイネーブルを選択し、またバイト読出し判定フラグがリセットされていて、かつＦＩＦＯのライトアドレスとリードアドレスが一致するときはライト用バイトイネーブル保持回路が保持するバイトイネーブルを選択し、バイト読出し判定フラグがリセットされていて、かつＦＩＦＯのライトアドレスとリードアドレスが一致しないときは全バイト読出しを示すバイトイネーブルを選択し、それぞれリードデータのバイトイネーブルとする。以下、本発明の実施例について図面を参照しながら説明する。
【実施例】
【００１３】
図１は、本発明のデータ転送装置の一実施例を示すブロック図である。このデータ転送装置は、ライトREQが入力すると、イネーブルデータ（ライトBE）が示す書込みバイト位置のライトDATAがＦＩＦＯ４０へ書き込まれ、リードREQが入力すると、リードDATAをＦＩＦＯ４０から読み出し、読出しバイト位置を示すイネーブルデータ（リードBE）を出力する。ライトBEとリードBEは２値情報で指定される。ＦＩＦＯ４０は、１ワードが複数バイトから成るデータを記憶する先入れ先出しメモリであって、複数バイト幅のライトデータI/Fおよび複数バイト幅のリードデータI/Fを有する。なお、メモリEMPTYはＦＩＦＯ４０に記憶されているデータが無いことを示す。また、以下の説明では、ＦＩＦＯ４０は４バイト幅のワードを格納するものとする。
【００１４】
（１）書込み系の構成
先ず、図１の左側に示されている書込み系について説明する。書込み系は、ゲート回路４０１、ライト用アドレスカウンタ１２、ライト用バイトイネーブル保持回路１０、ライト用バイトイネーブル判定回路１１、ＯＲ回路１０２、セレクタ１０３、デコーダ１０４およびＡＮＤ回路１０１から成る。
【００１５】
ゲート回路４０１は、ライトDATAの内のライトBEが指定するバイト（有効バイト）のみをW DATAとしてＦＩＦＯ４０へ入力する。W DATAは、ライトREQ（=W REQ）の“１”アサートと同時に、その時にライト用アドレスカウンタ１２が出力するＦＩＦＯ４０のライトアドレス（W ADD）が示すメモリエリアへ格納される。
【００１６】
ライト用アドレスカウンタ１２は、ＦＩＦＯ４０における１ワードを構成している全バイトへの書込みが行なわれると、＋１更新されて次のW DATAは＋１更新されたW ADDに格納される。即ち、ライト用アドレスカウンタ１２は、次のタイミングでW DATAを書き込むべきW ADDを指定する。
【００１７】
ライト用バイトイネーブル保持回路１０は、ＦＩＦＯ４０の最新のW ADDに書き込まれているW DATAの有効バイト位置を２値情報により保持する。例えば、１ワードが４バイトから成るので、有効バイトが１バイト目のみなら２値情報は“0001”、有効バイトが１〜３バイト目なら２値情報は“0111”となる。
【００１８】
ライト用バイトイネーブル判定回路１１は、ライト用バイトイネーブル保持回路１０が保持している２値情報により、初期状態（上例では“0000”）であるか、またはW ADDに書き込まれたデータが１ワード分に達した（上例では“1111”）か、ということと、ＦＩＦＯ４０に書き込まれたデータが１ワード未満である（上例では“0001”、“0011”または“0111”）か、ということとの判定結果（前者なら“０”、後者なら“１”）を出力する。
【００１９】
ＯＲ回路１０２は、ライトBEとライト用バイトイネーブル保持回路１０が保持している２値情報の論理和を出力する。つまり、現状の有効バイト位置に、新規入力のライトBEを加えるのである。
【００２０】
セレクタ１０３は、ライト用バイトイネーブル判定回路１１における判定結果をセレクト信号とし、ライトBEまたはＯＲ回路１０２の出力を選択してライト用バイトイネーブル保持回路１０へ出力する。
【００２１】
デコーダ１０４は、セレクタ１０３の出力を解読して、これからＦＩＦＯ４０に書き込むW DATAにより、ＦＩＦＯ４０のそのアドレスに１ワード（セレクタ１０３の出力が“1xxx”）に達することを検出すると“１”アサート状態となる。ＡＮＤ回路１０１は、ライトREQとデコーダ１０４のとの論理積により、ライト用アドレスカウンタ１２を＋１更新するためのイネーブル信号ENを“１”アサートする。
【００２２】
図２は、ライト用バイトイネーブル保持回路１０を設定するためのセレクタ１０３の真理値表を示す。ライト用バイトイネーブル保持回路１０は、ライト用バイトイネーブル判定回路１１の出力が“０”ならライトBEを格納し（ケース１）、ライト用バイトイネーブル判定回路１１の出力が“１”ならライトBEとライト用バイトイネーブル保持回路１０が保持している２値情報を論理ＯＲして格納する（ケース２）。
【００２３】
この時、ライト用バイトイネーブル保持回路１０に格納される値は、初期値“0000”または１ワード“1111”、１ワード未満の場合はLSB側（またはMSB側）から“１”アサートし論理ＯＲして格納するので“0001”、“0011”、“0111”（または“1000”、“1100”、“1110”）の全５通りとなる。
【００２４】
図３は、ライト用バイトイネーブル判定回路１１の真理値表を示す。ライト用バイトイネーブル判定回路１１は、ライト用バイトイネーブル保持回路１０の出力が“0000”または“1xxx”、すなわち初期値または１ワード分のバイト数の書込みがされている時は“０”を出力し、ライト用バイトイネーブル保持回路１０の出力が“0000”または“1xxx”以外、すなわち１ワード未満のバイト数のライトである時は“１”を出力する。ここで、「X」は「don't care」であることを示している。
【００２５】
図４は、デコーダ１０４の真理値表を示す。デコーダ１０４は、セレクタ１０３の出力が“1xxx”なら“１”を出力し、これ以外なら“０”を出力する。また、図５は、ライト用アドレスカウンタ１２の真理値表を示す。ライト用アドレスカウンタ１２は、ＡＮＤ回路１０１を介してライトREQが“１”をアサートし、かつ、デコーダ１０４の出力が“１”、すなわちライト動作時に１ワード分のバイトイネーブルに達した時のみ＋１カウント更新する。
【００２６】
（２）書込み系の動作
図６および図７は、以上に説明した書込み系の動作を例示するタイムチャートである。図６は、ライトDATAを１バイト単位に順次にＦＩＦＯ４０へ書き込んでいくときの各回路の状態遷移を示している。また、図７は、ライトDATAを１〜４バイト単位に順次にＦＩＦＯ４０へ書き込んでいくときの各回路の状態遷移を示している。ライトBEは４ビットから成り、“１”をアサートしているビットの位置がライトDATAの有効バイトの位置に当る。当初、アドレスカウンタ１２は「０」、ライト用イネーブル保持回路１０は「0000」を保持しているものとする。
【００２７】
ライトBEは４ビット未満が“１”アサートの場合、例えば、LSB側から“１”をアサートし、次のライトのタイミングでは、前のライトタイミングで“１”アサートしたビットは“０”としMSB側まで“１”をアサートしたら再びLSB側を“１”にアサートすることを許可する。これは、１ワードを構成している全バイトへの書込みが行なわれた後で、次アドレスへの書込みを行なうようにするためである。なお、ライトBEへの“１”アサートの方向を上記とは逆に、MSB側からLSB側に向けて行うようにしても差し支えない。
【００２８】
（2.1）１バイト書込み動作
図６では、ライトDATA「０１」〜「０７」を７回に亘って連続して書き込んでいる。タイミング１０まで“１”アサートが持続するライトREQが立ち上がるタイミング３では、ライトBE「0001」を伴ったライトDATA「０１」が入力する。即ち、ＦＩＦＯ４０のW ADD「０」の１バイト目にライトDATA「０１」を書き込むための動作が始まる。ライト用イネーブル判定回路１１は“０”を出力しているので、セレクタはライトBE「0001」を選択する（図２のケース１）。しかし、ライト用イネーブル保持回路１０が「0001」を保持するようになるためは、次のタイミングを待つ必要がある。
【００２９】
タイミング４において、ライトBE「0010」を伴ったライトDATA「０２」が入力する。ライトDATA「０１」のＦＩＦＯ４０のW ADD「０」への書込みが完了し、W ADD「０」の２バイト目にライトDATA「０２」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0001」を保持しているので、ライト用イネーブル判定回路１１は“１”アサートし（図３参照）、セレクタ１０３はＯＲ回路１０２の出力「0011」を選択する（図２のケース２）。ライト用イネーブル保持回路１０が「0011」を保持するのは次のタイミングにおいてである。
【００３０】
タイミング５において、ライトBE「0100」を伴ったライトDATA「０３」が入力する。ライトDATA「０２」のＦＩＦＯ４０のW ADD「０」への書込みが完了し、W ADD「０」の３バイト目にライトDATA「０３」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0011」を保持しているので、ライト用イネーブル判定回路１１は“１”アサートし（図３参照）、セレクタ１０３はＯＲ回路１０２の出力「0111」を選択する（図２のケース２）。ライト用イネーブル保持回路１０が「0111」を保持するのは次のタイミングにおいてである。
【００３１】
タイミング６において、ライトBE「1000」を伴ったライトDATA「０４」が入力する。ライトDATA「０３」のＦＩＦＯ４０のW ADD「０」への書込みが完了し、W ADD「０」の４バイト目にライトDATA「０４」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0111」を保持しているので、ライト用イネーブル判定回路１１は“１”アサートし（図３参照）、セレクタ１０３はＯＲ回路１０２の出力「1111」を選択する（図２のケース２）。ライト用イネーブル保持回路１０が「1111」を保持するのは次のタイミングにおいてである。なお、この場合、デコーダ１０４は“１”を出力する（図４参照）。
【００３２】
タイミング７において、ライトBE「0001」を伴ったライトDATA「０５」が入力する。ライトDATA「０４」のＦＩＦＯ４０のW ADD「０」への書込みが完了し、ＦＩＦＯ４０の１バイト目にライトDATA「０５」を書き込むための動作が始まる。デコーダ１０４が“１”を出力しているので、ライト用アドレスカウンタ１２が＋１更新されて（図５参照）、「１」となるため、ライトDATA「０５」の書込みは、W ADD「１」に対して行なわれる。ライト用イネーブル保持回路１０が「1111」を保持しているので、ライト用イネーブル判定回路１１は“０”アサートし（図３参照）、セレクタ１０３はライトBE「0001」を選択する（図２のケース１）。ライト用イネーブル保持回路１０が「0001」を保持するのは次のタイミングにおいてである。
【００３３】
タイミング８において、ライトBE「0010」を伴ったライトDATA「０６」が入力する。ライトDATA「０５」のＦＩＦＯ４０のW ADD「１」への書込みが完了し、ＦＩＦＯ４０のW ADD「１」の２バイト目にライトDATA「０６」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0001」を保持しているので、ライト用イネーブル判定回路１１は“１”アサートし（図３参照）、セレクタ１０３はＯＲ回路１０２の出力「0011」を選択する（図２のケース２）。ライト用イネーブル保持回路１０が「0011」を保持するのは次のタイミングにおいてである。
【００３４】
タイミング９において、ライトBE「0100」を伴ったライトDATA「０７」が入力する。ライトDATA「０６」のＦＩＦＯ４０のW ADD「１」への書込みが完了し、これでＦＩＦＯ４０のアドレス「０」の４バイト全部がライトDATAで埋まったことになる。ＦＩＦＯ４０のW ADD「１」の３バイト目にライトDATA「０７」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0011」を保持しているので、ライト用イネーブル判定回路１１は“１”アサートし（図３参照）、セレクタ１０３はＯＲ回路１０２の出力「0111」を選択する（図２のケース２）。ライト用イネーブル保持回路１０が「0111」を保持するのは次のタイミングにおいてである。なお、タイミング１０以降は、ライトREQが“０”されているため、タイミング９における現状を維持する。
【００３５】
（2.2）アトランダム書込み動作
図６は、１バイト書込みを繰り返す単純な書込みパターンを示したが、図７では、より複雑な書込みパターンを提示する。即ち、アトランダムな書込みパターンの一例として、２回の１ワード幅書込みに続いて、２回の２バイト書込み、１回の１バイト書込み、２回の３バイト書込みを順次に行う態様を提示する。
【００３６】
図７において、タイミング１０まで“１”アサートが持続するライトREQが立ち上がるタイミング３では、ライトBE「1111」を伴ったライトDATA「０１〜０４」が入力する。即ち、ＦＩＦＯ４０のW ADD「０」の１〜４バイト目にライトDATA「０１〜０４」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0000」を保持しているので、ライト用イネーブル判定回路１１は“０”アサートし（図３参照）、セレクタ１０３はライトBE「1111」を選択する（図２のケース１）。しかし、ライト用イネーブル保持回路１０が「1111」を保持するようになるためは、次のタイミングを待つ必要がある。なお、この場合、デコーダ１０４が“１”を出力する。
【００３７】
タイミング４において、ライトBE「1111」を伴ったライトDATA「０５〜０８」が入力する。デコーダ１０４が“１”を出力しているので、ライト用アドレスカウンタ１２が＋１更新されて「１」となるため（図５参照）、ＦＩＦＯ４０のW ADD「１」の１〜４バイト目にライトDATA「０５〜０８」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「1111」を保持しているので、ライト用イネーブル判定回路１１は“０”アサートし（図３参照）、セレクタ１０３はライトBE「1111」を選択する（図２のケース１）。ライト用イネーブル保持回路１０は次のタイミングにおいても引き続き「1111」を保持する。この場合も引き続き、デコーダ１０４が“１”を出力する。
【００３８】
タイミング５において、ライトBE「0011」を伴ったライトDATA「０９１０」が入力する。デコーダ１０４が“１”を出力しているので、ライト用アドレスカウンタ１２が＋１更新されて「２」となるため（図５参照）、ＦＩＦＯ４０のW ADD「２」の１〜２バイト目にライトDATA「０９１０」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「1111」を保持しているので、ライト用イネーブル判定回路１１は“０”アサートし（図３参照）、セレクタ１０３はライトBE「0011」を選択する（図２のケース１）。ライト用イネーブル保持回路１０は次のタイミングにおいて「0011」を保持する。この場合、デコーダ１０４は“０”を出力する。
【００３９】
タイミング６において、ライトBE「1100」を伴ったライトDATA「１１１２」が入力する。デコーダ１０４が“０”を出力しているので、ライト用アドレスカウンタ１２＋１更新されず、「２」のままであるため（図５参照）、ＦＩＦＯ４０のW ADD「２」の３〜４バイト目にライトDATA「１１１２」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0011」を保持しているので、ライト用イネーブル判定回路１１は“１”アサートし（図３参照）、セレクタ１０３はＯＲ回路１０２出力「1111」を選択する（図２のケース２）。ライト用イネーブル保持回路１０は次のタイミングにおいて「1111」を保持する。この場合、デコーダ１０４は“１”を出力する。
【００４０】
タイミング７において、ライトBE「0001」を伴ったライトDATA「１３」が入力する。デコーダ１０４が“１”を出力しているので、ライト用アドレスカウンタ１２が＋１更新されて「３」となるため（図５参照）、ＦＩＦＯ４０のW ADD「３」の１バイト目にライトDATA「１３」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「1111」を保持しているので、ライト用イネーブル判定回路１１は“０”アサートし（図３参照）、セレクタ１０３はライトBE「0001」を選択する（図２のケース１）。ライト用イネーブル保持回路１０は次のタイミングにおいて「0001」を保持する。この場合、デコーダ１０４は“１”を出力しない。
【００４１】
タイミング８において、ライトBE「1110」を伴ったライトDATA「１４〜１６」が入力する。デコーダ１０４が“０”を出力しているので、ライト用アドレスカウンタ１２＋１更新されず、「３」のままであるため（図５参照）、ＦＩＦＯ４０のW ADD「３」の２〜４バイト目にライトDATA「１４〜１６」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「0001」を保持しているので、ライト用イネーブル判定回路１１は“１”アサートし（図３参照）、セレクタ１０３はＯＲ回路１０２出力「1111」を選択する（図２のケース１）。この場合、デコーダ１０４は“１”を出力する。
【００４２】
タイミング９において、ライトBE「0111」を伴ったライトDATA「１７〜１９」が入力する。デコーダ１０４が“１”を出力しているので、ライト用アドレスカウンタ１２が＋１更新されて「４」となるため（図５参照）、ＦＩＦＯ４０のW ADD「４」の１〜３バイト目にライトDATA「１７〜１９」を書き込むための動作が始まる。ライト用イネーブル保持回路１０が「1111」を保持しているので、ライト用イネーブル判定回路１１は“０”アサートし（図３参照）、セレクタ１０３はライトBE「0111」を選択する（図２のケース１）。ライト用イネーブル保持回路１０は次のタイミングにおいて「0111」を保持する。この場合、デコーダ１０４は“１”を出力しない。なお、タイミング１０以降は、ライトREQが“０”されているため、タイミング９における現状を維持する。
【００４３】
以上の一連の動作から、１ワード未満のライト動作は、ＦＩＦＯアドレスをホールド状態にしたまま１バイト単位でＦＩＦＯ４０にデータを格納し、１ワードに達したらＦＩＦＯアドレスを更新し、ライトDATAをＦＩＦＯ４０の１ワード単位でアラインしていくことが分かる。
【００４４】
（３）読出し系の構成
次に、図１の右側に示されている読出し系について、アドレス比較器５０およびメモリEMPTYフラグ６０を含めて説明する。リードREQ（=R REQ）の“１”アサート時に、ＦＩＦＯ４０のリードアドレス（R ADD）からリードDATA（R DATA）が読み出される。このとき、リードDATAの内、リードBEで指定されるバイトが有効である。
【００４５】
読出し系は、リード用アドレスカウンタ２２、デコーダ２０４、ＡＮＤ回路２０１、アドレス比較器３０、リード用バイトイネーブル保持回路２０、リード用バイトイネーブル判定回路２１、ＯＲ回路２０２、セレクタ２０３、ＡＮＤ回路５０１、ＡＮＤ回路５０２、バイト読出し判定フラグ５０およびセレクタ５０３で構成されている。
【００４６】
リード用アドレスカウンタ２２は、R DATAのR ADDを示し、ＦＩＦＯ４０から１ワード分のR DATAが読み出されると、＋１更新される。即ち、デコーダ２０４はリードBEの４バイト目が“１”なら“１”アサートし、ＡＮＤ回路２０１は、リードREQとデコーダ２０４の“１”アサート状態によりリード用アドレスカウンタ２２を＋１更新するためのイネーブル信号ENを“１”アサートする。
【００４７】
アドレス比較器３０は、ライト用アドレスカウンタ１２の出力とリード用アドレスカウンタ２２の出力を比較し、これら２つのカウンタの出力の値が一致した時は“１”を出力し、不一致の時は“０”を出力する。なお、２つのカウンタの間にはキャリーフラグが設けられていて、カウンタが最大値を超えた後、２つのカウンタの関係がフリーランにならないように制御している。
【００４８】
ＡＮＤ回路６０１は、アドレス比較器３０における比較の結果により２つのカウンタの出力の値が一致し、かつライトREQがなくリードREQがあるときにメモリEMPTYフラグ６０をセットする。即ち、メモリEMPTYフラグ６０は、ＦＩＦＯ４０に保持されているデータが空になると“１”にアサートするEMPTY信号を出力し、ライトREQがあるとリセットされる。
【００４９】
リード用バイトイネーブル保持回路２０は、ライトBE、ライトBEとリード用バイトイネーブル保持回路２０の出力との論理和またはリード用バイトイネーブル保持回路２０の出力のいずれかを保持する。
【００５０】
リード用バイトイネーブル判定回路２１は、リード用バイトイネーブル保持回路２０が保持している２値情報により、初期状態であるか、または読み出したデータが１ワード分のデータに達したかということと、１ワード未満であるかということとの判定結果（前者なら“０”、後者なら“１”）をアサートする。
【００５１】
ＯＲ回路２０２は、ライトBEとリード用バイトイネーブル保持回路２０が保持している２値情報の論理和を出力する。つまり、現状のリード用バイトイネーブル保持回路２０の出力に、新規入力のライトBEを加えるのである。
【００５２】
セレクタ２０３は、ライトREQ、リードREQ、アドレス比較器３０の出力およびリード用バイトイネーブル判定回路２１の出力をセレクト信号とし、ライトBE、またはＯＲ回路２０２の出力、またはリード用バイトイネーブル保持回路２０の出力のいずれかを選択してリード用バイトイネーブル保持回路２０へ出力する。
【００５３】
ＡＮＤ回路５０１は、リードREQが“１”アサートで、かつアドレス比較器３０の出力が“１”で、かつデコーダ２０４の出力が“０”即ちバイト読出しのときに、バイト読出し判定フラグ５０をセットする。ＡＮＤ回路５０２は、リードREQが“１”アサートで、かつデコーダ２０４の出力が“１”、即ち１ワード分に達した位置まで読み出したときはバイト読出し判定フラグ５０をリセットする。
【００５４】
バイト読出し判定フラグ５０は、ライト用バイトイネーブル保持回路１０またはリード用バイトイネーブル保持回路２０に保持されているバイトイネーブルを選択するために使用される。
【００５５】
セレクタ５０３は、バイト読出し判定フラグ５０の出力と、リードREQと、アドレス比較器３０の出力をセレクト信号とし、All“０”の値またはリード用バイトイネーブル保持回路１０の値またはリード用バイトイネーブル保持回路２０の値の値またはAll“１”の値を選択してリードBEとして出力する。
【００５６】
図８は、リード用バイトイネーブル保持回路２０を設定するためのセレクタ２０３の真理値表を示す。セレクタ２０３は、アドレス比較器３０の出力が“０”ならリード用バイトイネーブル保持回路２０の出力を格納（ホールド）する（ケース２）。
【００５７】
一方、アドレス比較器３０の出力が“１”で、かつライトREQとリードREQが“１”ならライトBEの値を選択する（ケース３）。
【００５８】
また、アドレス比較器３０の出力が“１”で、かつライトREQが“１”で、かつリードREQが”０”で、かつリード用バイトイネーブル判定回路２１の出力が“０”ならライトBEの出力を選択する（ケース４）。ただし、このとき、リード用バイトイネーブル判定回路２１の出力が“１”なら、リード用バイトイネーブル保持回路２０が前回のライトで格納した値にライトBEの値を論理ＯＲした値を選択する（ケース５）。
【００５９】
そして、以上の全ての場合でないときは、リード用バイトイネーブル保持回路２０の出力を格納（ホールド）する（ケース１）。
【００６０】
図９はリード用バイトイネーブル判定回路２１の真理値表を示す。リード用バイトイネーブル判定回路２１は、リード用バイトイネーブル保持回路２０の出力が“0000”即ち初期値、または“1xxx”即ち１ワード（４バイト）に達した読み出しのときは“０”をアサートし、リード用バイトイネーブル判定回路２０の出力が“0000”または“1111”以外、即ち１ワード未満のバイト数を示している時は“１”を出力する。このリード用バイトイネーブル判定回路２１の論理は、図３に示したライト用バイトイネーブル判定回路１１の論理と同じである。
【００６１】
図１０はデコーダ２０４の真理値表を示す。デコーダ２０４は、セレクタ５０３の出力が“1xxx”即ちリードDATAが１ワードに達したときに“１”、セレクタ５０３の出力が“1xxx”以外のときに“０”を出力する。
【００６２】
図１１はリード用アドレスカウンタ２２の真理値表を示す。リード用アドレスカウンタ２２は、デコーダ２０４の出力が“１”にリードREQがあると、１クロック後に＋１更新される。その他の場合には、リード用アドレスカウンタ２２は現状の出力を保持する。
【００６３】
図１２はアドレス比較器３０の真理値表を示す。アドレス比較器３０はライト用アドレスカウンタ１２のカウント値とリード用アドレスカウンタ２２のカウント値が等しいときに“１”を出力し、その他の場合には“０”を出力する。
【００６４】
図１３はバイト読出し判定フラグ５０の真理値表を示す。バイト読出し判定フラグ５０は、アドレス比較器３０の出力が“１”で、かつデコーダ２０４の出力が“０”即ちリードDATAが１ワードに達しないときに、リードREQがあると“１”にセットされる。そして、デコーダ２０４の出力が“１”即ちリードDATAが１ワードに達したときにリードREQがあると“０”にリセットされる。
【００６５】
図１４はセレクタ５０３の真理値表を示す。セレクタ５０３は、リードREQが“０”なら“0000”を出力する（ケース１）。
【００６６】
一方、リードREQが“１”で、かつバイト読出し判定フラグ５０の出力が”１“なら、リード用バイトイネーブル保持回路２０の出力を選択する（ケース２）。
【００６７】
また、リードREQが“１”で、かつバイト読出し判定フラグ５０の出力が“０”で、かつアドレス比較器３０の出力が“１”ならライト用バイトイネーブル保持回路１０の出力を選択する（ケース３）。ただし、このときにアドレス比較器３０の出力が“０”なら“1111”を選択する（ケース４）。
【００６８】
図１５はメモリEMPTYフラグ６０の真理値表を示す。メモリEMPTYフラグ６０は、アドレス比較器３０の出力が“１”で、かつライトREQが“０”で、かつリードREQが“１”なら“１”にセットされる。新たに書き込まれるデータが無い状態で最後にライトした１ワード未満のデータの読出しが行なわれるからである。また、ライトREQが“１”なら“０”リセットされる。
【００６９】
（４）読出し系の動作
図１６図と図１７は、以上に説明した読出し系の動作を例示するタイムチャートである。図１６は、リードDATAを１バイト単位に順次にＦＩＦＯ４０から読み出していくときの各回路の状態遷移を示している。また、図１７は、１以上のバイトから成るリードDATAをアトランダムに読み出していくときの各回路の状態遷移を示している。当初は、ライトアドレスカウンタ１２とリードアドレスカウンタ２２は「０」であり、ライト用バイトイネーブル保持回路１０とリード用バイトイネーブル保持回路２０は“0000”を保持しているものとする。従って、アドレス比較器３０は“１”を出力し、メモリEMPTYフラグ６０も“１”を出力している。また、バイト読出し判定フラグ５０はリセット状態にある。
【００７０】
（4.1）１バイト読出し動作
図１６は、図６に示した書込み動作中にリードREQが入力し、順次に１バイトずつ読み出した場合を示し、ライト系の波形は図６のコピーとなっている。リードREQは、メモリEMPTYが“０”の時、即ちＦＩＦＯ４０に１バイト以上のデータが格納されている時、“１”にすることが可能である。タイミング４からタイミング１１の間でリードREQが“１”となっており、この間にＦＩＦＯ４０に順次書き込まれるライトDATA「０１」〜「０７」がリードDATA「０１」〜「０７」として順次読み出される。
【００７１】
タイミング３では、リード用バイトイネーブル保持回路２０は“0000”を保持しているので、リード用イネーブル判定回路２１は“１”を出力している（図９参照）。また、アドレス比較器３０は“１”を出力し（図１２参照）、ライトREQは“１”、リードREQは“０”であるため、セレクタ２０３はライトBE“0001”を選択する（図８のケース４）。リードREQの入力は未だないので、セレクタ５０３は“0000”を出力している（図１４のケース１）。
【００７２】
タイミング４になると、タイミング３で“１”アサートされたライトREQのため、メモリEMPTYフラグ６０は“０”を出力し、タイミング１１まで持続する（図１５参照）。リード用バイトイネーブル保持回路２０はタイミング３においてセレクタ２０３が選択した“0001”を保持し、リード用バイトイネーブル判定回路２１は“１”を出力する（図９参照）。リードREQが“１”アサートされるので、セレクタ２０３はライトBE“0010”を出力する（図８のケース３）。また、セレクタ５０３はライトバイトイネーブル保持回路１０が保持している“0001”を選択する（図１４のケース３）。即ち、タイミング３で入力しタイミング４でＦＩＦＯ４０に書き込まれた１バイト目のライトDATA“０１”が、１バイト目のリードDATA“０１”として読み出されることを示す。この場合、デコーダ２０４は“０”を出力するので、ＡＮＤ回路５０１の出力は“１”となる。
【００７３】
タイミング５では、上記末文のセット条件成立を受けて、バイト読出し判定フラグ５０が“１”にセットされる（図１３）。従って、セレクタ５０３はリード用バイトイネーブル保持回路２０が保持する“0010”を選択する（図１４のケース２）。即ち、タイミング４で入力しタイミング５でＦＩＦＯ４０に書き込まれた２バイト目のライトDATA“０２”が、２バイト目のリードDATA“０２”として読み出されることを示す。
【００７４】
タイミング６もタイミング５と同様に推移する。タイミング７では、ライト用アドレスカウンタ１２とリード用アドレスカウンタ２２の不一致が生じるのでアドレス比較器３０は“０”を出力する（図１２参照）。従って、ＡＮＤ回路５０１の出力は“０”となる。また、リードBEは“1000”となるので、ＡＮＤ回路５０２の出力は“１”となって、バイト読出し判定フラグ５０のリセット条件が成立する（図１３）。また、デコーダ２０４が“１”を出力する。更に、リード用バイトイネーブル保持回路２０が“1000”を保持しているので、バイト読出し判定回路２１は“０”となる（図９参照）。
【００７５】
タイミング８において、バイト読出し判定フラグ５０が“０”にリセットされる。また、デコーダ２０４が“１”を出力しているので、リード用アドレスカウンタ２２が「１」に更新され（図１１参照）、アドレス比較器３０は再び“１”を出力する（図１２参照）。従って、セレクタ５０３はライト用イネーブル保持回路１０が保持している“0001”を選択する（図１４のケース３）。これによって、ＡＮＤ回路５０１の出力は“１”、ＡＮＤ回路５０２の出力は“０”となる。セレクタ２０３はライトBE“0010”を選択する（図８のケース３）。
【００７６】
タイミング９において、バイト読出し判定フラグ５０の出力が“１”となり（図１３参照）、セレクタ５０３はリード溶媒とイネーブル保持回路２０が保持している“0010”を選択する（図１４のケース２）。セレクタ２０３は、ライトBE“0100”を選択する（図８のケース３）。
【００７７】
タイミング１０においてもタイミング９におけるのと同様に動作する。この時点で、ライトREQは“０”となるので、メモリEMPTYフラグ６０のセット条件が成立する（図１５参照）。
【００７８】
タイミング１１において、メモリEMPTYフラグ６０の出力が“１”となる。リードREQも“０”となるので、これ以降、セレクタ５０３は“0000”をセンタし続ける（図１４のケース１）。
【００７９】
（4.2）アトランダムな読出し動作
図１７は、アトランダムな読出しパターンの一例として、１バイト，２バイト，１バイト，４バイト，４バイト，２バイトを６回連続して書き込み、５タイミング後に１バイトのみを書き込み、一方、１回目の連続書込みの間に、１バイトのみを読み出し、１回目の連続書込みと２回目の書込みの間に、１回目の連続書込みで書き込まれた残り全てのデータを読み出し、２回目の書込みの後でそのデータを読み出している。
【００８０】
このような複雑な書込み読出しパターンであっても、これまでの詳細な説明によって習得されたところにより、各回路の動作は容易に理解できると考えるので、これ以上の説明を省略する。ただ、タイミング９において、リードBEが“1110”となっているのは、タイミング４でのライトDATA“０２０３”とタイミング５でのライトDATA“０４”とが結合されて、リードDATA“０２０３０４”とされていることを示す。このように、ＦＩＦＯ４０からの読出しは、ワード区切りで行なわれるのである。
【００８１】
（4.3）リードBEの生成
ここで、図１８から図２２までのタイミングチャートを用いてリードBE信号の生成方法を説明する。これらの図では、ライト動作はいずれも同じであるが、リード動作はリードREQを“１”にアサートするタイミングを変えた複数のケースを示す。リードREQを“１”にアサートするタイミングにより、図１８、図１９、図２０、図２２は、１ワード未満のリード動作のケース、図２１は１ワードのリード動作のケースとなっている。また、いずれも図１６のタイミングチャートのリード動作と異なり、１バイトでライトしたデータが結合されて複数バイトでリードされるケースである。
【００８２】
図１８のケースは、タイミング３からライト動作が始まり、タイミング４のリード動作時ではライト用バイトイネーブル保持回路１０とリード用バイトイネーブル保持回路２０は同じ“0001”を保持しており、バイト読出し判定フラグ５０は初期値“０”のままで、ライト用バイトイネーブル保持回路１０の“0001”をリードBEとして選択する（図１４のケース３）。
【００８３】
タイミング５以降は、バイト読出し判定フラグ５０を“１”にセットする。これは、１ワード未満でリード動作が行われたことを意味し、次回のリード動作では１ワードに達する残りのバイトデータを選択する機能で使用する。また、ライト用バイトイネーブル保持回路１０は、タイミング３にセレクタ１０３が出力するライトBEを新規に格納した後（図２のケース１）、タイミング４からタイミング６までライトBEとライト用バイトイネーブル保持回路１０の保持内容を論理ＯＲした値を順次格納する（図２のケース２）。
【００８４】
一方、リード用バイトイネーブル保持回路２０は、タイミング３にセレクタ２０３が出力するライトBEを新規に格納した後（図８のケース３）、４クロック目で再び新規にライトBEを格納することにより（図８のケース４）、タイミング５からタイミング６では“0001”を除いた値にライトBEを論理ＯＲした値を順次格納する（図８のケース５）。これは、タイミング４でリードBEが“0001”で処理が完了しているため、次回のリード動作で１バイト目を除いたデータを有効にするためである。
【００８５】
次に、タイミング７では、リード用バイトイネーブル保持回路２０は“1110”となり、３ビット目までが“１”すなわち１ワードの区切りとなるが、アドレス比較器３０は“０”の条件から、次回のリード動作で出力するリードBEを確保するため、“1110”をホールドする（図５のケース２）。タイミング８以降、ライト用バイトイネーブル保持回路１０は更新を続け、リード用バイトイネーブル保持回路２０とは無関係に動作していく。
【００８６】
タイミング１０のリード動作では、バイト読出し判定フラグ５０の出力“１”により、リード用バイトイネーブル保持回路２０の“1110”をリードBEとして選択する（図１４のケース２）。リード処理が完了したタイミング１１ではいずれの条件にも当てはまらないのでリード用バイトイネーブル保持回路２０の“1110”にホールドする（図８のケース１）。
【００８７】
図１９は、最初のリード動作を図１８に対して１タイミング遅くしたケースを示している。リード動作が行われるタイミング５までライト用バイトイネーブル保持回路１０と、リード用バイトイネーブル保持回路２０は同値に更新し、タイミング５のリード動作でリードBE“0011”を出力し、タイミング７でアドレス比較器３０は“０”の条件から、リード用バイトイネーブル保持回路２０の“1100”をホールドする（図８のケース２）。次回のリード動作（タイミング１０）でリードBE“1100”を出力する。
【００８８】
図２０は、最初のリード動作を図１８に対して２クロック遅くしたケースを示している。リード動作が行われるタイミング６までライト用バイトイネーブル保持回路１０と、リード用バイトイネーブル保持回路２０は同値に更新し、タイミング６のリード動作でリードBE“0111”を出力し、タイミング７でアドレス比較器３０は“０”の条件から、リード用バイトイネーブル保持回路２０の“1000”をホールドする（図８のケース２）。次回のリード動作（タイミング１０）でリードBE“1000”を出力する。
【００８９】
図２１は、１ワード以上のライト動作が行われる間、一度もリード動作を行わないケースを示している。タイミング７でライト動作は１ワードに達し、ライト用アドレスカウンタ１２が＋１カウント更新する。リード用アドレスカウンタ２２は初期値のままであるため、タイミング７でアドレス比較器３０の出力は“０”になる。１ワード未満のリード動作は行っていないため、バイト読出し判定フラグ５０は“０”のままであり、ライト用バイトイネーブル保持回路１０と、リード用バイトイネーブル保持回路２０は同値に更新していく。タイミング７でアドレス比較器３０は“０”の条件から、リード用バイトイネーブル保持回路２０の“1111”をホールドする（図８のケース２）。
【００９０】
タイミング１０で最初のリード動作が行われ、バイト読出し判定フラグ５０が“０”で、アドレス比較器３０が“０”であるため、リードBEとして１ワード有効となる“1111”を選択する（図１４のケース４）。これは、１ワード未満の残りのバイトデータをリードする条件も無く、ライト用アドレスカウンタ１２とリード用アドレスカウンタ２２の値に差分があるため、リード動作するアドレスのメモリエリアには１ワード分のデータを格納している理由からである。また、この時、リード用バイトイネーブル保持回路２０の“1111”とセレクタ５０３が選択した出力“1111”が同じであるが、リード用バイトイネーブル保持回路２０側が“1111”とならないケースもある（図１７のタイミング１０，１１）。
【００９１】
図２２は、５クロック目に1ワード未満の最初のリード動作を行い、リードBE“0011”を出力する（図１４のケース３）。タイミング８からタイミング９までアドレス比較器３０の出力が“０”なので、リード用バイトイネーブル保持回路２０の“1100”でホールドする（図８のケース２）。タイミング８で２回目のリード動作を行い、リードBE“1100”を出力する（図１４のケース２）。タイミング９では１ワードに達する残りのバイトデータのリード動作を完了したので、バイト読出し判定フラグ５０を“０”にリセットする。ここまでは、図１８から図１９のケースと大差は無い。
【００９２】
しかし、タイミング９でセレクタ２０３は、リード用バイトイネーブル判定回路２１が“０”で（リード用バイトイネーブル保持回路２０の値が“1100”のため）、アドレス比較器３０が“１”で、ライトREQが“１”で、リードREQが“０”であるのでライトBE“0100”を選択している（図８のケース４）。１０クロック目ではその“0100”がリード用バイトイネーブル保持回路２０に格納されるが、「バイトイネーブルとして使用できない無効なデータ」である。
【００９３】
タイミング１０で３回目のリード動作を行う。バイト読出し判定フラグ５０が“０”で、アドレス比較器３０が“１” の条件から、ライト用バイトイネーブル保持回路１０の値を選択し、リードBE“0111”を出力する（図１４のケース３）。この時、同時に、セレクタ２０３は、アドレス比較器３０が“１”で、ライトREQ信号が“１”で、リードREQ信号が“１” の条件から、ライトBE“1000”を選択する（図８のケース３）。これは、タイミング１０で１ワード未満のリード動作が行われたことから、そのバイトイネーブルを除いた新規のライトBEを選択する機能で、前述した「バイトイネーブルとして使用できない無効なデータ」はここで消滅する。
【００９４】
そして、デコーダ２０４が“０”で（リードBE信号の３ビット目以外が“１”に当てはならないため）、アドレス比較器３０が“１”でリードREQが“１”である条件から、次のタイミング１１ではバイト読出し判定フラグ５０を“１”にセットし、リード用バイトイネーブル保持回路２０にはライトBE“1000”を新規に格納する。このライトBE“1000”は次回のリード動作までホールドする（図８のケース２）。
【００９５】
図２２のケースでは、タイミング１０の３回目のリード動作の時アドレス比較器３０の出力が“１”であるが、アドレス比較器３０の出力が“０”である場合は、前述の図２１のケースのようにリードBE“１１１１”の値を出力し、リード動作の最後はこの図２２のケースで終了する。
【００９６】
以上が各真理値表における全てのケースを網羅した説明である。これらのケースの組合せにより、他のどのような書込み／読出しパターンであっても、各回路の動作は容易に理解できよう。
【００９７】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００９８】
（付記１）有効バイト位置を示す２値情報（バイトイネーブル）に応じたライトデータをライト要求に応答してＦＩＦＯに書き込み、リード要求に応答してリードデータを前記ＦＩＦＯから読み出し前記バイトイネーブルを添付するデータ転送装置において、前記ＦＩＦＯの最新のライトアドレスに書き込まれているデータの前記バイトイネーブルを保持するライト用バイトイネーブル保持回路と、前記ＦＩＦＯの最新のライトアドレスに書き込まれているデータの前記バイトイネーブル、または該バイトイネーブルと１タイミング前の自保持内容との論理和、または１タイミング前の自保持内容を保持するリード用バイトイネーブル保持回路と、前記リードデータの前記バイトイネーブルを解読して前記ＦＩＦＯのライトアドレスとリードアドレスが一致する時に１ワード未満のバイトイネーブルで読み出したことを記憶し、１ワード分に達した位置まで読み出したときに消去されるバイト読出し判定フラグと、前記バイト読出し判定フラグがセットされているときは前記リード用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記ＦＩＦＯのライトアドレスとリードアドレスが一致するときは前記ライト用バイトイネーブル保持回路が保持する前記バイトイネーブルを選択し、また前記バイト読出し判定フラグがリセットされていて、かつ前記ＦＩＦＯのライトアドレスとリードアドレスが一致しないときは全バイト読出しを示す前記バイトイネーブルを選択し、それぞれ前記リードデータの前記バイトイネーブルとするセレクタとを設けたことを特徴とするデータ転送装置。
【００９９】
（付記２）前記ライト用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記ＦＩＦＯが初期状態または前記ライトデータが１ワード分に達したか、否かの判定結果を出力するライト用バイトイネーブル判定回路と、前記ライト要求があり前記ＦＩＦＯが初期状態または前記ライトデータが１ワード分に達したときは前記ライトデータの前記バイトイネーブルを選択し、また前記ライト要求があり前記ライト用バイトイネーブル判定回路における判定結果が否のときは前記ライト要求がないときは前記ライトデータの前記バイトイネーブルと前記ライト用バイトイネーブル保持回路の保持内容との論理和を選択し、前記ライト用バイトイネーブル保持回路へ出力するセレクタとを有することを特徴とする付記１に記載のデータ転送装置。
【０１００】
（付記３）前記セレクタの出力を解読して前記ライトデータが１ワード分に達することを検出するデコーダと、前記最新のライトアドレスを指定し前記検出によりカウントアップするライト用アドレスカウンタとを有することを特徴とする付記２に記載のデータ転送装置。
【０１０１】
（付記４）前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルにより、前記ＦＩＦＯが初期状態または前記リードデータが１ワード分に達したか、否かの判定結果を出力するリード用バイトイネーブル判定回路と、前記ライトアドレスと前記リードアドレスが一致しないときは前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブル、一方、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求があるときまたは前記リード要求がなく、かつ、前記ＦＩＦＯが初期状態または前記リードデータが１ワード分に達したときは前記ライトデータの前記バイトイネーブル、前記ライトアドレスと前記リードアドレスが一致し、かつ、前記リード要求がなく、かつ、前記リード用バイトイネーブル判定回路における判定結果が否であるときは前記ライトデータの前記バイトイネーブルと前記リード用バイトイネーブル保持回路が保持している前記バイトイネーブルとの論理和を選択するセレクタとを有することを特徴とする付記１に記載のデータ転送装置。
【０１０２】
（付記５）前記ＦＩＦＯから１ワード分のリードデータが読み出されたことを検出するデコーダと、前記リードデータのアドレスを示し前記検出により＋１更新されるリード用アドレスカウンタとを有することを特徴とする付記４に記載のデータ転送装置。
【０１０３】
（付記６）前記ライト用アドレスカウンタの保持内容と前記リード用アドレスカウンタの保持内容を比較するアドレス比較器を有し、前記比較の結果によりアドレスが一致し、かつ前記ライト要求がなくて前記リード要求があるとき、前記ＦＩＦＯは空であることを示すEMPTY信号を出力するメモリEMPTYフラグを有することを特徴とする付記５に記載のデータ転送装置。
【産業上の利用可能性】
【０１０４】
例えば、ストリーミングデータを本データ転送装置で介して転送する場合、ストリーミングデータの容量が、１ワード区切りでなくても（１ワード以上も含む）転送できるし、バイト単位で分離された状態であっても転送できる。
【符号の説明】
【０１０５】
１０      ライト用イネーブル保持回路
１１      ライト用イネーブル判定回路
１２      ライト用アドレスカウンタ
２０      リード用イネーブル保持回路
２１      リード用イネーブル判定回路
２２      リード用アドレスカウンタ
３０      アドレス比較器
４０      ＦＩＦＯ
５０      バイト読出し判定フラッグ
６０      メモリEMPTYフラグ
１０１    ＡＮＤ回路
１０２    ＯＲ回路
１０３    セレクタ
１０４    デコーダ
２０１    ＡＮＤ回路
２０２    ＯＲ回路
２０３    セレクタ
２０４    デコーダ
４０１    ゲート回路
５０１    ＡＮＤ回路
５０２    ＡＮＤ回路
５０３    セレクタ
６０１    ＡＮＤ回路
【図１】
0005273828.tif 000002
【図２】
0005273828.tif 000003
【図３】
0005273828.tif 000004
【図４】
0005273828.tif 000005
【図５】
0005273828.tif 000006
【図６】
0005273828.tif 000007
【図７】
0005273828.tif 000008
【図８】
0005273828.tif 000009
【図９】
0005273828.tif 000010
【図１０】
0005273828.tif 000011
【図１１】
0005273828.tif 000012
【図１２】
0005273828.tif 000013
【図１３】
0005273828.tif 000014
【図１４】
0005273828.tif 000015
【図１５】
0005273828.tif 000016
【図１６】
0005273828.tif 000017
【図１７】
0005273828.tif 000018
【図１８】
0005273828.tif 000019
【図１９】
0005273828.tif 000020
【図２０】
0005273828.tif 000021
【図２１】
0005273828.tif 000022
【図２２】
0005273828.tif 000023