(57)【要約】【課題】サイズが小さく、レイテンシィの低いバッファ回路の実現。【解決手段】レジスタ列41と、複数の受信データを転送順序に並び替えてレジスタ列に格納し、揃った時に１つの転送データとして出力するように制御する制御回路42と、を有し、制御回路は、レジスタ列が複数の受信データを出力するとき、レジスタ列を、各レジスタの格納データを前段のレジスタに格納するように制御し、レジスタ列が新たに新受信データを格納するとき、転送順序に応じて書込レジスタを決定し、レジスタ列を、書込レジスタの格納データを書込レジスタの後段のレジスタに格納し、書込レジスタに新受信データを格納するように制御するバッファ回路。【選択図】図６
2014194619.tif 000002
【特許請求の範囲】
【請求項１】
複数段のレジスタを有するレジスタ列と、
複数の受信データをあらかじめ定められた転送順序に並び替えて前記レジスタ列に格納し、前記複数の受信データが揃った時に１つの転送データとして順次出力するように前記レジスタ列を制御する制御回路と、を備え、
前記制御回路は、前記レジスタ列が前記複数の受信データを出力するとき、前記レジスタ列を、各レジスタの格納データを前段のレジスタに格納するように制御し、
前記制御回路は、前記レジスタ列が新たに新受信データを格納するとき、前記転送順序に応じて書込レジスタを決定し、前記レジスタ列を、前記書込レジスタの格納データを前記書込レジスタの後段のレジスタに格納し、前記書込レジスタに前記新受信データを格納するように制御する
ことを特徴とするバッファ回路。
【請求項２】
前記レジスタ列の各レジスタは、出力信号に応じて後段のレジスタの格納データを格納し、書き込み信号に応じて入力バスからのデータを格納し、既データシフト信号に応じて前段のレジスタの格納データを格納し、
前記制御回路は、
各受信データを前記各受信データに付されたタグ番号に従って順に初段レジスタから格納し、
タグ番号と対応し、各受信データを格納している後端レジスタの位置を示す後端ポインタを記憶するポインタレジスタを有し、
新たに新受信データを格納する時には、新受信データのタグ番号と対応する前記後端ポインタから新受信データを格納する書込レジスタの位置を決定し、前記書込レジスタに前記書き込み信号を出力し、前記書込レジスタより後段のレジスタに前記既データシフト信号を出力し、
前記複数の受信データが揃った時に、前記レジスタ列のすべてのレジスタに、前記出力信号を出力することを特徴とする請求項１記載のバッファ回路。
【請求項３】
各レジスタは、
後段のレジスタの格納データ、前段のレジスタの格納データおよび前記入力バスから入力されるデータのいずれかを選択するセレクタと、
前記セレクタの出力をラッチするラッチ回路と、を備えることを特徴とする請求項２記載のバッファ回路。
【請求項４】
初段のレジスタの前記セレクタは、前段のレジスタの格納データを選択することが無いように制御され、
最終段のレジスタの前記セレクタは、後段のレジスタの格納データとして初期値が入力されることを特徴とする請求項３記載のバッファ回路。
【請求項５】
前記書込レジスタへの新受信データの格納および前記書込レジスタより後段のレジスタへの前段のデータの格納は、並列に同時に行い、
前記すべてのレジスタへの後段のレジスタの格納データの格納は、並列に同時に行うことを特徴とする請求項１から４のいずれか１項記載のバッファ回路。
【請求項６】
ローカルバスと、
前記ローカルバスに接続された周辺デバイスとのインターフェース回路と、を備える半導体集積回路であって、
前記インターフェース回路は、バッファ回路を備え、
前記バッファ回路は、
複数段のレジスタを有するレジスタ列と、
複数の受信データをあらかじめ定められた転送順序に並び替えて前記レジスタ列に格納し、前記複数の受信データが揃った時に１つの転送データとして順次出力するように前記レジスタ列を制御する制御回路と、を備え、
前記制御回路は、前記レジスタ列が前記複数の受信データを出力するとき、前記レジスタ列を、各レジスタの格納データを前段のレジスタに格納するように制御し、
前記制御回路は、前記レジスタ列が新たに新受信データを格納するとき、前記転送順序に応じて書込レジスタを決定し、前記レジスタ列を、前記書込レジスタの格納データを前記書込レジスタの後段のレジスタに格納し、前記書込レジスタに前記新受信データを格納するように制御する
ことを特徴とする半導体集積回路。
【請求項７】
前記レジスタ列の各レジスタは、出力信号に応じて後段のレジスタの格納データを格納し、書き込み信号に応じて入力バスからのデータを格納し、既データシフト信号に応じて前段のレジスタの格納データを格納し、
前記制御回路は、
各受信データを前記各受信データに付されたタグ番号に従って順に初段レジスタから格納し、
タグ番号と対応し、各受信データを格納している後端レジスタの位置を示す後端ポインタを記憶するポインタレジスタを有し、
新たに新受信データを格納する時には、新受信データのタグ番号と対応する前記後端ポインタから新受信データを格納する書込レジスタの位置を決定し、前記書込レジスタに前記書き込み信号を出力し、前記書込レジスタより後段のレジスタに前記既データシフト信号を出力し、
前記複数の受信データが揃った時に、前記レジスタ列のすべてのレジスタに、前記出力信号を出力することを特徴とする請求項６記載の半導体集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、バッファ回路及び半導体集積回路に関する。
【背景技術】
【０００２】
内部のローカルバスのバスプロトコルと異なるバスプロトコルの周辺デバイスを接続する場合、プロトコル変換回路を設けて、異なるプロトコル間での通信を行う。高速のローカルバスから低速の周辺デバイスのデータを読み取る場合、プロトコルが異なるため、周辺デバイスは、転送データを分割してデータ転送するが、ローカルバスへは１つの転送データとして出力する。しかも、分割データが順不同に転送される場合があり、分割データを並び替える。
【０００３】
このような転送データの並び替えを行う一般のバッファ回路は、転送データの最大総データ量に比べて大きなサイズの容量を有しており、容量が有効に使用されない。
また、並び替えを実現する際に、ローカルバスへの出力におけるレイテンシィが高くなっていた。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平７−５８７８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
実施形態によれば、転送データの最大総データ量と同じサイズの、ローカルバスへの出力におけるレイテンシィが小さいバッファ回路が実現される。
【課題を解決するための手段】
【０００６】
第１の態様のバッファ回路は、複数段のレジスタを有するレジスタ列と、制御回路と、を有する。制御回路は、複数の受信データをあらかじめ定められた転送順序に並び替えて前記レジスタ列に格納し、複数の受信データが揃った時に１つの転送データとして順次出力するようにレジスタ列を制御する。制御回路は、レジスタ列が複数の受信データを出力するとき、レジスタ列を、各レジスタの格納データを前段のレジスタに格納するように制御する。制御回路は、レジスタ列が新たに新受信データを格納するとき、転送順序に応じて書込レジスタを決定し、レジスタ列を、書込レジスタの格納データを書込レジスタの後段のレジスタに格納し、書込レジスタに新受信データを格納するように制御する。
【発明の効果】
【０００７】
第１の態様によれば、サイズが小さく、レイテンシィの低いバッファ回路が提供される。
【図面の簡単な説明】
【０００８】
【図１】図１は、プロトコル変換回路の例を示す図である。
【図２】図２は、複数の異なるインターフェースを有する周辺デバイスとの通信を行うためのインタフェースモジュールをローカルバスに接続したＬＳＩシステムの構成を示す図である。
【図３】図３は、AXIローカルバスとPCI Expressインタフェースモジュールとのブリッジ回路について説明する図である。
【図４】図４は、順不同に入力されるデータをバッファリングし整列させるバッファ回路を示す図であり、（Ａ）が構成例を示し、（Ｂ）が各データバッファのデータ格納状況の例を示す。
【図５】図５は、実施形態のバッファ回路の基本動作を説明する図である。
【図６】図６は、実施形態のバッファ回路の構成を示す図である。
【図７】図７は、各レジスタの回路例を示す図であり、ここでは３個のレジスタのみを示す。
【図８】図８は、選択・ラッチ信号生成回路を示す図であり、（Ａ）の回路例を示し、（Ｂ）はその真理値表を示す。
【図９】図９は、実施形態のバッファ回路において、周辺デバイスから転送された分割データをTAG番号順にレジスタ列に格納する動作および転送データが揃った後順に出力する動作を説明する図である。
【図１０】図１０は、実施形態のバッファ回路において、周辺デバイスから転送された分割データをTAG番号順にレジスタ列に格納する動作および転送データが揃った後順に出力する動作を説明する図である。
【図１１】図１１は、実施形態のバッファ回路において、周辺デバイスから転送された分割データをTAG番号順にレジスタ列に格納する動作および転送データが揃った後順に出力する動作を説明する図である。
【図１２】図１２は、図９から図１１に対応したタイムチャートである。
【発明を実施するための形態】
【０００９】
実施形態を説明する前に、順不同で入力する複数の受信データを、１つの転送データとして順次出力するように、あらかじめ定められた転送順序に並び替えて格納する一般的なバッファ回路について説明する。
ＬＳＩ（大規模半導体集積回路）等に搭載されるシステムでは、プロトコル変換回路を設けて、内部のローカルバスのバスプロトコルと異なるバスプロトコルの周辺デバイスを接続する場合がある。
【００１０】
図１は、プロトコル変換回路の例を示す図である。
図１のプロトコル変換回路１は、システム側内部のAXIローカルバスプロトコルと周辺デバイスのPCI Expressプロトコルの間の変換を行う。例えば、プロトコル変換回路１は、システム側のAXI(Advanced eXtensible Interface)ローカルバスからの読み出し(Read)要求(サイズを持つデータ要求)に対して、PCI ExpressのRead要求に変換する動作を行う。しかし、要求サイズの上限値の制限やバス特有の制限事項により、１回のAXI Read要求を複数のPCI Express Readに分割要求する必要がある。また、分割要求されたPCI ExpressバスではReadデータを要求順序通りに応答することが規定されていないため、分割したデータが順不同に転送される。しかし、AXIのReadデータとしては順序通りの１つのデータで返す必要があるため、分割データを並び替える必要があった。
【００１１】
ここでは、AXIローカルバスとPCI Expressとの変換の例を示したが、これは一例であり様々なバスプロトコル変換が行われる。以下、PCI Expressを例として説明を行う。
ＬＳＩ等に踏査される大規模システムにおいては、PCI Express、USB(Universal Serial Bus)、SATA(Serial Advanced Technology Attachment)、Ethernet（登録商標）などの様々なインタフェースモジュールをローカルバスに接続して異なる種類の周辺デバイスとの通信を行うのが一般的である。
【００１２】
図２は、複数の異なるインターフェースを有する周辺デバイスとの通信を行うためのインタフェースモジュールをローカルバスに接続したＬＳＩシステムの構成を示す図である。
【００１３】
システム１０は、ローカルバス１１と、ローカルバス１１に接続されるＣＰＵ１２、メモリ(Memory)１３および制御回路１４等を有する。ローカルバス１１は、さらにブリッジ回路１５Ａ−１５Ｃを介してインタフェースモジュール１８に接続される。インタフェースモジュール１８は、図１に示したようなプロトコル変換回路１６Ａ−１６Ｃを、周辺デバイス１９Ａ−１９Ｃのバスプロトコルに応じて複数有する回路である。
【００１４】
上記のように、ローカルバスとインタフェースモジュールを接続するには異なるバス仕様になるためデータの整合性を合わせる。そのため、ブリッジ回路１５Ａ−１５Ｃを用意して、各周辺デバイスのローカルバスに接続できるようにする。
【００１５】
図３は、AXIローカルバス１１とPCI Expressインタフェースモジュール１６Ａとのブリッジ回路１５Ａについて説明する図である。
ブリッジ回路１５Ａは、ブリッジ制御部３１と、分割処理部３２と、バッファ回路３３と、を有する。ブリッジ回路１５Ａは、Readのデータ転送ではRead要求（リクエスト）Ａの発行に対して、周辺デバイスにReadリクエストを発行し、それに応じた周辺デバイスからのReadデータを受領し、ローカルバスに出力する。ブリッジ制御部３１は、各部の制御を行う。
【００１６】
例えば、ローカルバス１１にてPCI Expressインタフェースモジュール１６Ａへ１度に２５６バイト(Byte)のRead要求を行う場合、PCI Expressの周辺デバイス１９Ａへの転送要求では１２８Byteの２回のReadに分割して行うように要求する場合がある。
【００１７】
２回またはそれ以上に分割されたRead転送は、転送順が規定されておらず、装置におけるReadタイミングの関係で、順不同で応答される場合が起こる。この場合、転送する分割データにタグを付して分割データの順序が分かるようにしている。
【００１８】
一方、PCI Expressインタフェースモジュール１６Ａおよびブリッジ回路１５Ａからローカルバス１１に出力する転送データは、元の２５６Byteの要求に対しては１回のデータとして応答する。そのため、ブリッジ回路１５Ａにて正しい順序に整列する制御が要求される。
【００１９】
図３に示すように、ブリッジ回路１５Ａは、Readのデータ転送では、Read要求Ａの発行に対して、分割処理部３２で、周辺デバイスに対する複数のRead要求#0-#3を発行する。周辺デバイスは、これに応じてReadデータ#0-#3をインタフェースモジュール１６Ａおよびブリッジ回路１５Ａに出力し、ブリッジ回路１５ＡはReadデータ#0-#3を受領するが、受領順序はRead要求の順番通りではない。そのため、ブリッジ回路１５Ａにおいて、Read要求とReadデータの順序を対応付け、順番通りに並び替える。バッファ回路３３は、この並び替えに利用される。図３では、Readデータ#3, #2, #0, #1の順で転送され、バッファ回路３３でReadデータ#A-0, #A-1, #A-2, #A-3の順に並び替え、この順に出力する。
【００２０】
ここでは、整列する総データ量（read要求A）の最大値は決まっているが、分割された各データ量（データ#0, #1, #2, #3）の大きさは状況により可変量となるものとする。
例えば、１２８Byteの総データ量で、分割数が１の場合は１２８Byteの１つのデータとなり、分割数が４の場合では、１４Byte、６４Byte、３２Byte、１８Byteなどの異なる大きさのデータが入力されることになり、それらの順序を整列する。このとき、分割された各データには順序を識別するTAG番号(#0,#1,#2…)が付与されており、これを利用して、分割データ間の順序を識別する。さらに、それぞれの分割データ内のデータ列は、順序が守られているものとする。
【００２１】
上記の要求を満たすには、順不同に入力されるデータをバッファリングし整列させる機構が必要となる。
図４は、順不同に入力されるデータをバッファリングし整列させるバッファ回路を示す図であり、（Ａ）が構成例を示し、（Ｂ）が各データバッファのデータ格納状況の例を示す。
【００２２】
図４のバッファ回路は、TAG番号に応じた最大分割数分の４個のデータバッファ３３Ａ−３３Ｄを有し、入力バス３４を介して、入力されたデータを、TAG番号に応じそれぞれのデータバッファへ格納する。この複数のデータバッファに振り分けられたデータを、バッファ番号０、１、２、３の順序で出力バス３５に出力することにより、整列されたデータとして出力する。
【００２３】
４個のデータバッファ３３Ａ−３３Ｄは、最大総データ量のサイズを持つため、図４のバッファ回路では、データバッファの容量を「総データ量×分割段数」分必要となる。例えば、全体で１２８Byteの転送を、３２Byteの順不同の４つのデータが入力される場合では、１２８Byte×４段＝５１２Byteのバッファを準備する必要があり、転送量よりも大きな容量のバッファとなる。そのため、図４の（Ｂ）に示すように、４個のデータバッファ３３Ａ−３３Ｄは、最大総データ量のサイズを持つ転送データがすべて格納された状態でも、大きな空き領域を有し、データバッファ３３Ａ−３３Ｄの容量が有効に使用されない。
【００２４】
また、この制御においては、入力データTag3、Tag2、Tag0、Tag1をTag番号に応じたバッファ３，２，０，１へ格納し、出力するデータをバッファの若い番号から格納された情報量ずつ読み出すことで並び替えを実現する。このようなデータバッファからの読み出し制御を実現するには、各バッファデータ格納量の把握とバッファデータの切り替えを行う。そのため、制御にはデータ処理時間または組み合わせ回路による制御遅延が、必要となるためデータ転送のレイテンシとなり転送効率の妨げとなる。
【００２５】
このように、周辺デバイスからの転送順にバッファ回路に格納し、ローカルバスには順序を考慮して出力する場合、出力する格納位置を判定する処理を行うことになる。そのため、ローカルバスへの出力におけるレイテンシィが生じる。
【００２６】
実施形態は、ローカルバスへの出力におけるレイテンシィが小さいことが要求されるバッファ回路である。そのため、実施形態のバッファ回路は、システムに要求された転送順序で、言い換えればローカルバスに出力する順序でバッファ回路に格納し、データ出力制御を簡易化して、レイテンシィを小さくし、高速化を実現する。そして、このようなバッファ回路で、バッファのサイズを小さく、例えば、最大総データ量のサイズとしたバッファ回路である。
【００２７】
図５は、実施形態のバッファ回路の基本動作を説明する図である。
図５の（Ａ）に示すように、実施形態のバッファ回路は、総転送データ量分のサイズのバッファ回路であり、レジスタ列と、レジスタ列の制御回路と、を有する。制御回路は、複数の受信データをあらかじめ定められた転送順序に並び替えてレジスタ列に格納し、複数の受信データが揃った時に１つの転送データとして順次出力するように制御を行う。
【００２８】
レジスタ列は、複数段のレジスタを有し、各レジスタは、出力信号に応じて後段のレジスタの格納データを格納し、書き込み信号に応じて入力バスからのデータを格納し、既データシフト信号に応じて前段のレジスタの格納データを格納する。
【００２９】
制御回路は、各受信データをタグ番号に従って順に初段レジスタから格納する。制御回路は、タグ番号と対応し、各受信データを格納している後端レジスタの位置を示す後端ポインタを記憶するポインタレジスタを有する。制御回路は、新たに新受信データを格納する時には、新受信データのタグ番号と対応する後端ポインタから新受信データを格納する書込レジスタの位置を決定する。これにより、バッファ内では先頭位置から前詰めで整列されたデータが格納される動作となり、バッファの量は総転送データ量と同じでよい。
【００３０】
そして、制御回路は、書込レジスタに書き込み信号を、このスタより後段のレジスタに既データシフト信号を出力し、複数の受信データが揃った時に、すべてのレジスタに、出力信号を出力する。実施形態のバッファ回路は、このような構成および機能を有するので、データのセレクタ制御などを伴わず、データ転送のレイテンシを抑えることができる。
【００３１】
図５の（Ｂ）は、１６段のレジスタで形成されるレジスタ列４１に、先頭から分割番号(＝TAG) 0, 2, 3のデータが格納されている状況を示している。TAG0のデータは０−２番のレジスタに、TAG2のデータは３−５番のレジスタに、TAG3のデータは６−９番のレジスタに、格納されている。後端ポインタwp0、wp2、wp3は、格納されているTAG 0, 2, 3のデータの後端位置（後端＋１）を示し、wp1はTAG1のデータが入力された時にTAG1のデータを格納すべき位置を示す。したがって、wp0=3、wp1=3、wp2=6、wp3=10である。
【００３２】
図５の（Ｂ）の状態で、TAG1のデータが転送された場合には、TAG1のデータは、TAG0のデータとTAG2のデータの間、wp1=3で示す３番のレジスタに格納される。
図５の（Ｃ）に示すように、TAG1のデータの長さが１の場合には、wp1=3が示す３番のレジスタにTAG1のデータが格納され、wp2およびwp3は１ずつ増加する（後にずれる）。wp0=3は変化しない。
【００３３】
もしTAG1のデータの長さが２以上の場合には、上記の動作を長さ分繰り返す。したがって、TAG1のデータの長さが５であれば、TAG1のデータの格納が終了した時点で、wp0=3、wp1=8、wp2=11、wp3=15となる。
【００３４】
また、転送データがすべてレジスタ列４１に格納された後レジスタ列４１から格納したデータを出力する場合には、後端ポインタwp0、wp2、wp2、wp3の値を１減じながら（−１しながら）、各レジスタのデータを初段方向に１段ずつシフトする。
【００３５】
後端ポインタwp0、wp2、wp2、wp3は、リセット時にはすべて初段のレジスタを示しており、前側（初段側）の（番号の小さい）後端ポインタの示す位置が後側に移動した場合には、それより後側の後端ポインタはすべて同じ数だけ後側にシフトする。
【００３６】
次に実施形態のバッファ回路の具体的な構成例を説明する。
図６は、実施形態のバッファ回路の構成を示す図である。
実施形態のバッファ回路は、レジスタ列４１と、制御回路４２と、を有する。
【００３７】
レジスタ列４１は、Ｎ個のレジスタ(Reg)51-0, 51-1, …, 51-N-2, 51-N-1と、後段から前段のレジスタへのデータパス５２と、すべてのレジスタに共通に接続される入力データバス５３と、前段から後段のレジスタへのデータパス５４と、を有する。レジスタ列４１は、さらに各レジスタへの、入力データの書き込みを指示する新データ書き込み信号パス５５、既格納データの後方へのシフトを指示する後方シフト信号パス５６と、出力信号パス５７と、を有する。
【００３８】
各レジスタは、データバス幅のデータが格納できる。例えば、データバス幅が６４bit(8Byte)で、総転送データ量が１２８Byteの場合には、各レジスタは６４bit(8Byte)のデータを保持し、レジスタ列は１６段のレジスタ51-0〜51-15により形成される。
【００３９】
制御回路４２は、ポインタレジスタ61-0、61-1、…、61-M-1と、位置判定回路６２と、新データ書き込みパルス(NW)発生回路６３と、後方シフトパルス(BS)発生回路６４と、２個のＡＮＤゲート６５、６６と、出力パルス(OE)発生回路６７と、を有する。
【００４０】
ポインタレジスタ61-0、61-1、…、61-M-1は、図５で説明した各データの後端ポインタwp0、wp1、…、wpM-1を記憶する。
位置判定回路６２は、入力が要求された新データのTAG番号と一致するポインタレジスタの番号を探し、それに対応する後端ポインタの値および新データの長さを、新データ書き込みパルス(NW)発生回路６３および後方シフトパルス(BS)発生回路６４に出力する。
【００４１】
新データ書き込みパルス(NW)発生回路６３は、位置判定回路６２から出力された後端ポインタの値が示すレジスタに対して、入力データの書き込みを指示する新データ書き込み信号NWを出力する。この時、新データ書き込みパルス(NW)発生回路６３は、他のレジスタに新データ書き込みパルスNWを出力することはない。
【００４２】
後方シフトパルス(BS)発生回路６４は、位置判定回路６２から出力された後端ポインタの値に１加えた値以上のすべての値が示すレジスタに対して、既格納データの後方へのシフトを指示する後方シフトパルスBSを出力する。
【００４３】
新データ書き込みパルス(NW)発生回路６３および後方シフトパルス(BS)発生回路６４は、以上の動作を、新データの長さで示される回数だけ、後端ポインタの値１ずつ増加させながら繰り返す。
２個のＡＮＤゲート６５、６６は、新データ書き込みパルスNWおよび後方シフトパルスBSが、バッファ回路に対して入力要求が出されている時のみ、レジスタ列４１に出力されるように制御する。
【００４４】
出力パルス(OE)発生回路６７は、バッファ回路に対する出力要求に応じて、出力パルスOEを、レジスタ列４１のすべてのレジスタに出力する。なお、出力パルス(OE)発生回路６７は、ポインタレジスタに保持されている転送データの最終段の位置、すなわち転送データの長さに対応する回数だけ出力パルスOEを出力する。
【００４５】
したがって、出力パルスOEは、レジスタ列４１のすべてのレジスタに共通に出力される。また、新データ書き込みパルスNWおよび後方シフトパルスBSは、レジスタ列４１のすべてのレジスタに、NW0〜NW-N-1およびBS0〜BS-N-1が供給される。ただし、BS0が発生されることはない。また、出力パルスOE、新データ書き込みパルスNWおよび後方シフトパルスBSは、同一のレジスタに対して同時に出力されるのは１つのみである。
【００４６】
図７は、各レジスタの回路例を示す図であり、ここではレジスタ51-0, 51-1, 51-2の３個のレジスタのみを示す。
【００４７】
各レジスタは、セレクタ７１と、ラッチ７２と、選択・ラッチ信号生成回路７３と、を有する。セレクタ７１は、選択信号S1およびS2に応じて、後段から前段のレジスタへのデータパス５２のデータ、入力データバス５３のデータおよび前段から後段のレジスタへのデータパス５４Ａ、５４Ｂ、５４Ｃのデータのいずれかを選択してラッチ７２に出力する。なお、図７に示すように、初段のレジスタ51-0は、前段から後段のレジスタへのデータパス５４の入力はゼロに固定されている。同様に、図６に示したように、最終段のレジスタ51-15は、後段から前段のレジスタへのデータパス５２の入力はゼロに固定されている。さらに、ここでは、セレクタ７１は、いずれのデータも選択せずに出力がハイインピーダンス状態になる場合があるとして説明する。
【００４８】
ラッチ７２は、ラッチ信号Lに応じてセレクタ７１の出力をラッチし、次のデータをラッチするまでそのデータを保持する。
選択・ラッチ信号生成回路７３は、各レジスタへの、新データ書き込み信号NW、後方シフト信号BSおよび出力信号OEに応じて、選択信号S1およびS2およびラッチ信号Lを生成する。
【００４９】
図８は、選択・ラッチ信号生成回路７３を示す図であり、（Ａ）の回路例を示し、（Ｂ）はその真理値表を示す。
図８に示すように、出力信号OE=1 (=H: active)の時にはS1=0およびS2=0となり、セレクタは、パス５２、すなわち後段のレジスタの出力するデータを選択する。出力信号OE=0 (=L: inactive)の時で、NW=1の時にはS1=0およびS2=1となり、セレクタは、入力データバス５３、すなわち新たに転送されたデータを選択する。出力信号OE=0の時で、BS=1の時にはS1=1およびS2=0となり、セレクタは、前段から後段のレジスタへのデータパス５４Ａ、５４Ｂ、５４Ｃのデータを選択する。
【００５０】
また、出力信号OE、新データ書き込みパルスNWおよび後方シフトパルスBSのいずれかがのパルスが出力されると、ラッチ信号Ｌが発生する。
各レジスタは、出力信号OEに応じて後段のレジスタの格納データを格納し、新データ書き込みパルス（書き込み信号）NWに応じて入力バスからのデータを格納し、後方シフトパルス（既データシフト信号）BSに応じて前段のレジスタの格納データを格納する。
【００５１】
次に、実施形態のバッファ回路の具体的な動作例を説明する。
図９から図１１は、実施形態のバッファ回路において、周辺デバイスから転送された分割データをTAG番号順にレジスタ列４１に格納する動作および転送データが揃った後順に出力する動作を説明する図である。ここでは、8bit(1byte)幅の総データ量32bit(4byte)転送データを、8bit(1byte)ずつの４分割データとして４段のレジスタ列に格納した後、出力する場合を示し、TAG番号２、０、３、１の順番で転送される場合である。なお、説明を簡単にするため、上記のように各分割データの長さは１であるとして説明および図示するが、長さ２以上でもよい。
【００５２】
図１２は、図９から図１１に対応したタイムチャートであり、図示の都合で、分割データが連続して到着し、転送データが揃った後直ちに出力するものとして説明する。しかし、これに限定されるものではなく、実際には、分割データは間隔を空けて到着し、転送データが揃った後、ローカルバスから出力が許可されてから出力を行うのが一般的である。また、周辺デバイスからの転送データを格納する動作速度と、転送データをローカルバスに出力する動作速度は、異なってもよい。
【００５３】
図９の（Ａ）は、バッファ回路から格納データの出力が終了し、すべてのレジスタ（ラッチ）に"00"（任意値）が格納された初期化状態を示す。この時、後端レジスタwp0=wp1=wp2=wp3=0である。図１２のタイムチャートでは、左端に示される状態であり、４個のレジスタのラッチは、すべて"00"を保持している。
【００５４】
図９の（Ｂ）は、次に、TAG=2のデータ"CC"が入力された場合を示す。TAG=2であるから、wp2が選択され、その値が０であるため、NW0を出力し、入力データCCをレジスタ(Reg0)51-0へ格納する。そして、BS1、BS2、BS3を出力し、wp2の値０よりも大きい番号のレジスタ（Reg1,2,3）51-1, 51-2, 51-3は、前段のレジスタのデータを格納、すなわち、Reg1=Reg0、Reg2=Reg1、Reg3=Reg2とする。言い換えれば後方にシフトして格納する。さらに、TAG=2以上のTAG番号の後端レジスタwp2およびwp3を１増加する。
【００５５】
図１２では、新データCCが入力され、NW0およびBS1、BS2、BS3が出力され、レジスタ(Reg0)51-0がCCをラッチし、レジスタ（Reg1,2,3）51-1, 51-2, 51-3は、前段のレジスタのデータをラッチする。
【００５６】
図１０の（Ａ）は、TAG=0のデータ"AA"が入力された場合を示す。TAG=0であるから、wp0が選択され、その値が０であるため、NW0を出力し、入力データAAをレジスタ(Reg0)51-0へ格納する。そして、BS1、BS2、BS3を出力し、wp0の値０よりも大きい番号のレジスタ（Reg1,2,3）51-1, 51-2, 51-3は、前段のレジスタのデータを格納、すなわち、Reg1=Reg0、Reg2=Reg1、Reg3=Reg2とする。言い換えれば後方にシフトして格納する。さらに、TAG=0以上のTAG番号の後端レジスタwp0、wp1、wp2およびwp3を１増加する。これにより、wp0=1、wp1=1、wp2=2およびwp3=2となる。
【００５７】
図１２では、新データAAが入力され、NW0およびBS1、BS2、BS3が出力され、レジスタ(Reg0)51-0がAAをラッチし、レジスタ（Reg1,2,3）51-1, 51-2, 51-3は、前段のレジスタのデータReg0=CC、Reg1=0およびReg2=0をラッチする。
【００５８】
図１０の（Ｂ）は、TAG=3のデータ"DD"が入力された場合を示す。TAG=3であるから、wp3が選択され、その値が２であるため、NW2を出力し、入力データDDをレジスタ(Reg2)51-2へ格納する。そして、BS3を出力し、wp2の値２よりも大きい番号のレジスタ（Reg3）51-3は、前段のレジスタのデータを格納、すなわち、Reg3=Reg2とする。TAG=3以上のTAG番号の後端レジスタwp3を１増加する。これにより、wp0=1、wp1=1、wp2=2およびwp3=3となる。
【００５９】
図１２では、新データDDが入力され、NW2およびBS3が出力され、レジスタ(Reg2)51-2がDDをラッチし、レジスタ（Reg3）51-3は、前段のレジスタのデータReg2=0をラッチする。
【００６０】
図１１の（Ａ）は、TAG=1のデータ"BB"が入力された場合を示す。TAG=1であるから、wp1が選択され、その値が１であるため、NW1を出力し、入力データBBをレジスタ(Reg1)51-1へ格納する。そして、BS2およびBS3を出力し、wp1の値１よりも大きい番号のレジスタ（Reg2,3）51-2, 51-3は、前段のレジスタのデータを格納、すなわち、Reg2=Reg1, Reg3=Reg2とする。TAG=1以上のTAG番号の後端レジスタwp1, wp2, wp3を１増加する。これにより、wp0=1、wp1=2、wp2=3およびwp3=4となる。
【００６１】
図１２では、新データBBが入力され、NW1、BS2およびBS3が出力され、レジスタ(Reg1)51-1がBBをラッチし、レジスタ（Reg2, 3）51-2, 51-3は、前段のレジスタのデータReg1=CC, Reg2=DDラッチする。
以上のようにして、周辺デバイスからの転送データはすべて揃ったことになるので、次にレジスタ回路からの出力動作を実行する。
【００６２】
図１１の（Ｂ）は、出力要求が出された場合を示す。出力要求に応じて、すべてのレジスタ51-0, 51-1, 51-2, 51-3に対して出力信号OEが出力され、各レジスタは後段のデータを格納する。これにより、後方から前方への保持データのシフトが行われ、初段のレジスタ(Reg0)51-0からして出力する。すなわち、Reg0=Reg1、Reg1=Reg2、Reg2=Reg3、Reg3＝00（任意値）とする。そして、後端ポインタwp0, wp1, wp2, wp3を−１する。ポインタの下限は０である。
【００６３】
図１２では、出力信号OEが出力され、Reg0=Reg1=BB、Reg1=Reg2=CC、Reg2=Reg3=DD、Reg3＝00（任意値）となる。
【００６４】
以下、図１１の（Ｂ）の動作をさらに３回行うと、初段のレジスタ(Reg0)51-0からDDが出力されてすべての転送データの出力が完了する。そして、図１１の（Ｃ）に示すように、すべてのレジスタで後方から前方への保持データのシフトが行われ、Reg0=Reg1=00、Reg1=Reg2=00、Reg2=Reg3=00、Reg3＝00（任意値）とする。そして、後端ポインタwp0, wp1, wp2, wp3を−１すると、ポインタの下限は０であるからすべて０となる。このようにして初期状態になる。
【００６５】
以上の通り、レジスタ回路からのデータの出力は、初段レジスタから順に行うので、データの選択や組み合わせ回路を経由することがなく、レイテンシィは低い。
なお、図８から図１９の説明では、各分割データの長さは１であるとしたが、長さ２以上でもよく、その場合にはそれぞれの分割データのバッファ回路への格納動作を長さ分だけ繰り返す。
【００６６】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものである。特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【符号の説明】
【００６７】
４０    バッファ回路
４１    レジスタ列
４２    制御回路
５１−０〜５１−Ｎ−１    レジスタ
５２    後段から前段のレジスタへのデータパス
５３    入力データバス
５４    前段から後段のレジスタへのデータパス
６１−０〜６１−Ｍ−１    後端ポインタレジスタ
【図１】
2014194619.tif 000003
【図２】
2014194619.tif 000004
【図３】
2014194619.tif 000005
【図４】
2014194619.tif 000006
【図５】
2014194619.tif 000007
【図６】
2014194619.tif 000008
【図７】
2014194619.tif 000009
【図８】
2014194619.tif 000010
【図９】
2014194619.tif 000011
【図１０】
2014194619.tif 000012
【図１１】
2014194619.tif 000013
【図１２】
2014194619.tif 000014