(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-02
(45)【発行日】2024-09-10
(54)【発明の名称】半導体装置
(51)【国際特許分類】
H04L 47/6295 20220101AFI20240903BHJP
H04L 47/12 20220101ALI20240903BHJP
【FI】
H04L47/6295
H04L47/12
(21)【出願番号】P 2020122158
(22)【出願日】2020-07-16
【審査請求日】2023-04-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110003649
【氏名又は名称】弁理士法人真田特許事務所
(74)【代理人】
【識別番号】100092978
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【氏名又は名称】横田 功
(72)【発明者】
【氏名】道畠 昂平
【審査官】速水 雄太
(56)【参考文献】
【文献】特開2002-281080(JP,A)
【文献】特開2013-005080(JP,A)
【文献】米国特許出願公開第2004/0202163(US,A1)
【文献】特開平10-065674(JP,A)
【文献】特開平11-074894(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 12/00-12/66
41/00-101/695
(57)【特許請求の範囲】
【請求項1】
複数の宛先に対して送出される複数のリクエストが書き込まれる第1バッファと、
前記宛先毎に備えられた複数の第2バッファとを備え、
リクエストを前記第1バッファへ書き込む際に、前記リクエストを書き込んだ前記第1バッファにおけるエントリの識別情報を、当該リクエストの宛先に対応する前記第2バッファに記憶し、
前記第2バッファに前記エントリの識別情報が記憶されている場合に、
調停参加に関する第1の信号を生成し、
前記第2バッファに対応する前記宛先におけるデータ格納領域に空き領域がある場合に、前記宛先
への前記リクエストの送信
が可
能であると判断し、前記リクエストを送信可能と判断した
場合に調停参加許可に関する第2の信号を生成し、
前記第1の信号と前記第2の信号によって調停を行なう対象の宛先を選び、選ばれた宛先について調停を行なうことで前記リクエストを送出する宛先を決定し、
前記第1バッファにおける、決定した前記宛先に対応する前記第2バッファから取得した前記エントリの識別情報によって特定されるエントリから前記リクエストを読み出す
ことを特徴とする半導体装置。
【請求項2】
前記第2バッファがFIFO制御される
ことを特徴とする、請求項1に記載の半導体装置。
【請求項3】
前記第2バッファにおける最も古い前記エントリの識別情報の位置を示す読み出し位置情報と、前記第2バッファにおいて次にリクエストの書き込みが行なわれるべき空き領域の位置を示す書き込み位置情報と
を備えることを特徴とする、請求項2に記載の半導体装置。
【請求項4】
前記第1バッファのエントリ毎に使用状態を管理する
ことを特徴とする、請求項1~
3のいずれか1項に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置に関する。
【背景技術】
【0002】
バッファの制御方法として、先入れ先出し(FIFO:First In, First Out)が知られている。FIFOにおいては、先に書き込まれたデータが先に取り出される。
【0003】
バッファの書き込みおよび読み出し制御において、FIFOは、単純な構成で実現できるとともに演算量も少なく、実装しやすい手法である。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、FIFOにおいては、先にバッファに書き込まれたリクエストの宛先に送信できない状況が生じた場合に、先に書き込まれたリクエストが読み出されるまで、後にバッファに書き込まれたリクエストを読み出すことができない。
図8はFIFOを用いたバッファ制御を説明するための図である。
【0006】
この
図8においては、FIFOバッファの下流側に宛先#0バッファ,宛先#1バッファおよび宛先#2バッファの3つの宛先バッファが配置されている。そして、宛先#1バッファおよび宛先#2バッファはいずれも空きがあるが、宛先#0バッファには空きがない状態となっている。また、FIFOバッファの先頭には、宛先#0バッファに格納するリクエストが格納されており、この宛先#0バッファへのリクエストに後続して、宛先#1バッファに格納するリクエストが格納されている。
【0007】
宛先#0資源管理,宛先#1資源管理および宛先#2資源管理は、宛先#0バッファ,宛先#1バッファおよび宛先#2バッファの空き状況を管理し、空きがなくなった場合にFIFOバッファに通知する。
【0008】
このような状態において、宛先#0バッファには空きがないため、FIFOバッファから宛先#0バッファへのリクエストを読み出すことができない。一方で、宛先#1バッファには空きがあるが、先行する宛先#0バッファへのリクエストを先にFIFOバッファから読み出さないと宛先#1バッファへのリクエストを読み出すことができない。
【0009】
そのため、宛先#1バッファへのリクエストの読み出しが可能になるまでの待ち時間が増加し、宛先#1バッファが置かれている送信経路上の処理能力低下を引き起こすという課題がある。
1つの側面では、本発明は、先行するリクエストの宛先への送信が不可能である場合でも処理能力の低下を抑制することを目的とする。
【課題を解決するための手段】
【0010】
このため、この半導体装置は、複数の宛先に対して送出される複数のリクエストが書き込まれる第1バッファと、前記宛先毎に備えられた複数の第2バッファとを備え、リクエストを前記第1バッファへ書き込む際に、前記リクエストを書き込んだ前記第1バッファにおけるエントリの識別情報を、当該リクエストの宛先に対応する前記第2バッファに記憶し、前記第2バッファに前記エントリの識別情報が記憶されている場合に、調停参加に関する第1の信号を生成し、前記第2バッファに対応する前記宛先におけるデータ格納領域に空き領域がある場合に、前記宛先への前記リクエストの送信が可能であると判断し、前記リクエストを送信可能と判断した場合に調停参加許可に関する第2の信号を生成し、前記第1の信号と前記第2の信号によって調停を行なう対象の宛先を選び、選ばれた宛先について調停を行なうことで前記リクエストを送出する宛先を決定し、前記第1バッファにおける、決定した前記宛先に対応する前記第2バッファから取得した前記エントリの識別情報によって特定されるエントリから前記リクエストを読み出す。
【発明の効果】
【0011】
一実施形態によれば、先行するリクエストの宛先への送信が不可能である場合でも処理能力の低下を抑制することができる。
【図面の簡単な説明】
【0012】
【
図1】実施形態の一例としてのバッファ制御システムの構成を模式的に示す図である。
【
図2】実施形態の一例としてのバッファ制御システムにおける処理を説明するための図である。
【
図3】実施形態の一例としてのバッファ制御システムにおける処理を説明するための図である。
【
図4】実施形態の一例としてのバッファ制御システムにおける処理を説明するための図である。
【
図5】実施形態の一例としてのバッファ制御システムにおける処理を説明するための図である。
【
図6】実施形態の一例としてのバッファ制御システムにおける処理を説明するための図である。
【
図7】実施形態の一例としてのバッファ制御システムにおける処理を説明するための図である。
【
図8】FIFOを用いたバッファ制御を説明するための図である。
【発明を実施するための形態】
【0013】
以下、図面を参照して本半導体装置にかかる実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0014】
(A)構成
図1は実施形態の一例としてのバッファ制御システム1の構成を模式的に示す図である。
【0015】
バッファ制御システム1は、図示しない送信元から送信されるリクエストを、一時的に格納した後、宛先である宛先バッファ50に転送する半導体装置である。リクエストをデータといってもよい。
【0016】
図1に示す例においては、宛先バッファ50は、宛先#0バッファ50-1,宛先#1バッファ50-2および宛先#2バッファ50-3を備える。宛先#0バッファ50-1,宛先#1バッファ50-2および宛先#2バッファ50-3は、それぞれ複数(
図1に示す例では4つ)の記憶領域(格納領域)を備え、送信元から送信されたリクエストが、これらのいずれかの記憶領域に格納される。
【0017】
以下、宛先#0バッファ50-1,宛先#1バッファ50-2および宛先#2バッファ50-3を特に区別しない場合には、宛先バッファ50と表記する。宛先バッファ50に備えられた複数の記憶領域において、データを未格納の記憶領域を空き領域という場合がある。
【0018】
バッファ制御システム1は、
図1に示すように、バッファ2,エントリ番号管理部3,宛先#0エントリ番号管理部4-1,宛先#1エントリ番号管理部4-2,宛先#2エントリ番号管理部4-3,書き込み/読み出しポインタ5-1~5-3,エントリ番号用バッファ6-1~6-3,宛先判別部7,宛先資源管理部8,調停参加制御部9-1~9-3,調停部10およびエントリセレクタ11を備える。
【0019】
バッファ2は、送信元から送信され、宛先バッファ50に転送するリクエスト(データ)を一時的に格納する記憶装置(メモリ)である。バッファ2は、例えば、Random Access Memoryによって実現される。
【0020】
バッファ2は、複数(
図1に示す例では8つ)の記憶領域(データ格納領域)を備え、これらの記憶領域に送信元から送信されたリクエストが格納される。バッファ2におけるこれらの記憶領域をエントリという場合がある。各エントリは、ユニークな識別情報であるエントリ番号(エントリNo.)によって特定される。
バッファ2は、複数の宛先(宛先バッファ50)に対して送出される複数のリクエストが書き込まれる第1バッファに相当する。
【0021】
バッファ2のエントリに格納されたリクエストは、後述するエントリセレクタ11からの指示に従って読み出され、その宛先である宛先バッファ50の記憶領域に書き込まれる。
【0022】
また、リクエストが読み出されたエントリにおいては、格納されていたリクエストが削除され、データ未格納状態となる。
図1に示す例では、データ未格納状態のエントリに「空き」と表示している。バッファ2において、データ未格納のエントリを空きエントリといってもよい。
バッファ2に対するデータの書き込みや読み出しは、図示しないバッファ制御部によって行なわれてもよい。
【0023】
エントリ番号管理部3は、バッファ2のエントリの使用状況(空き状況)を管理する。エントリ番号管理部3は、バッファ2の各エントリに対応させて複数(
図1に示す例では8つ)の記憶領域を備える。そして、エントリ番号管理部3は、バッファ2においてリクエストが格納されているエントリについて、対応する記憶領域にデータが格納されている旨を示す識別情報を記憶させる(
図3に示す例では「使用中」と表示)。このように、エントリ番号管理部3は、バッファ2のどのエントリが使用中であるかを管理する。
【0024】
また、エントリ番号管理部3は、バッファ2においてリクエストが格納されていないエントリに対応する記憶領域に、データ(リクエスト)が格納されていない旨を示す識別情報を記憶させる(
図1に示す例では「空き」と表示)。
【0025】
また、エントリ番号管理部3は、後述するエントリセレクタ11から、解放指示とともにエントリ番号が通知されると、このエントリ番号に対応する記憶領域にデータが格納されていない旨を示す識別情報(
図1に示す状態では「空き」)を設定する。
宛先#0エントリ番号管理部4-1は、バッファ2における、宛先が宛先#0バッファ50-1であるデータを格納しているエントリを管理する。
宛先#0エントリ番号管理部4-1は、書き込み/読み出しポインタ5-1とエントリ番号用バッファ6-1とを備える。
【0026】
エントリ番号用バッファ6-1は、バッファ2に備えられた複数のエントリのうち、宛先が宛先#0バッファ50-1であるデータを格納するエントリのエントリ番号を格納する。エントリ番号用バッファ6-1は複数(
図1に示す例では8個)の記憶領域を備え、これらの記憶領域に、宛先が宛先#0バッファ50-1であるデータを格納するエントリのエントリ番号が格納される。
【0027】
エントリ番号用バッファ6-1はFIFO制御され、格納されてからの経過時間が最も長い、すなわち、最も古いデータが先に出力される。エントリ番号用バッファ6-1の出力は、エントリセレクタ11に入力される。
すなわち、本バッファ制御システム1においては、宛先が同じ複数のリクエストについては、その順序性が保たれる。
【0028】
書き込み/読み出しポインタ5-1は、エントリ番号用バッファ6-1におけるデータ(宛先が宛先#0バッファ50-1であるデータを格納するエントリのエントリ番号)の書き込み位置と読み出し位置とを管理する。書き込み/読み出しポインタ5-1は、書き込み位置を示す書き込みポインタと読み出し位置を示す読み出しポインタとを備える。書き込みポインタは、エントリ番号用バッファ6-1に備えられた複数の記憶領域のうち、次にデータの書き込みが行なわれるべき記憶領域(空き領域)を表す。
読み出しポインタは、エントリ番号用バッファ6-1に備えられた複数の記憶領域のうち、次にデータの読み出しが行なわれるべき記憶領域を表す。
【0029】
上述の如く、エントリ番号用バッファ6-1は、データの書き込みと読み出しとがFIFO制御で行なわれる。そのため、書き込み/読み出しポインタ5において、読み出しポインタは、エントリ番号用バッファ6-1における最も古いデータが記憶されている記憶領域の位置を示す。なお、エントリ番号用バッファ6-1に未読み出しのデータが格納されている場合には、書き込みポインタの示す位置と読み出しポインタの示す位置とは異なるものとなる。一方、エントリ番号用バッファ6-1に未読み出しのデータが格納されていない場合には、書き込みポインタの示す位置と読み出しポインタの示す位置とは一致する。
【0030】
書き込み/読み出しポインタ5-1は、エントリ番号用バッファ6-1に未読み出しのデータが格納されている場合、すなわち、書き込みポインタが示す位置と読み出しポインタが示す位置とが異なる場合に、調停参加制御部9-1に調停参加信号を入力する。
【0031】
一方で、書き込み/読み出しポインタ5-1は、エントリ番号用バッファ6-1に未読み出しのデータが格納されていない場合、すなわち、書き込みポインタが示す位置と読み出しポインタが示す位置とが同じ場合に、調停参加制御部9-1への調停参加信号の入力を抑止する。
【0032】
宛先#1エントリ番号管理部4-2は、バッファ2における、宛先が宛先#1バッファ50-2であるデータを格納しているエントリを管理する。宛先#1エントリ番号管理部4-2は、書き込み/読み出しポインタ5-2とエントリ番号用バッファ6-2とを備える。
【0033】
宛先#1バッファ50-2における書き込み/読み出しポインタ5-2およびエントリ番号用バッファ6-2は、宛先#0バッファ50-1における書き込み/読み出しポインタ5-1およびエントリ番号用バッファ6-1と同様に機能する。なお、便宜上、これらの各部の機能についての具体的な説明は省略する。
【0034】
宛先#2エントリ番号管理部4-3は、バッファ2における、宛先が宛先#2バッファ50-3であるデータを格納しているエントリを管理する。宛先#2エントリ番号管理部4-3は、書き込み/読み出しポインタ5-3とエントリ番号用バッファ6-3とを備える。
【0035】
宛先#2バッファ50-3における書き込み/読み出しポインタ5-3およびエントリ番号用バッファ6-3は、宛先#0バッファ50-1における書き込み/読み出しポインタ5-1およびエントリ番号用バッファ6-1と同様に機能する。なお、便宜上、これらの各部の機能についての具体的な説明は省略する。
【0036】
以下、宛先#0エントリ番号管理部4-1,宛先#1エントリ番号管理部4-2および宛先#2エントリ番号管理部4-3を区別しない場合には、宛先毎エントリ管理部4という場合がある。
【0037】
また、以下、書き込み/読み出しポインタ5-1~5-3を区別しない場合には、書き込み/読み出しポインタ5という場合がある。さらに、エントリ番号用バッファ6-1~6-3を区別しない場合には、エントリ番号用バッファ6という場合がある。エントリ番号用バッファ6-1~6-3は、宛先バッファ50毎に備えられた複数の第2バッファに相当する。
【0038】
本バッファ制御システム1においては、リクエストをバッファ2へ書き込む際に、このリクエストを書き込んだバッファ2におけるエントリのエントリ番号が、当該リクエストの宛先に対応するエントリ番号用バッファ6に記憶される。
【0039】
各エントリ番号用バッファ6にはエントリ番号管理部3が接続されており、エントリ番号管理部3から通知されるエントリ番号が、書き込み/読み出しポインタ5の書き込み位置を示すポインタによって示される空き領域に記憶される。また、各エントリ番号用バッファ6は、後述するエントリセレクタ11に接続されており、書き込み/読み出しポインタ5の読み出し位置を示すポインタによって示される記憶領域から読み出されたデータが、エントリセレクタ11に送出される。
【0040】
宛先判別部7は、送信元からのリクエストの宛先(送出先,宛先バッファ50)を特定し、その宛先バッファ50に対応する宛先毎エントリ管理部4の書き込み/読み出しポインタ5に通知信号(宛先エントリ番号用バッファ選択信号)を入力する。
【0041】
宛先毎エントリ管理部4においては、この宛先エントリ番号用バッファ選択信号の受信をトリガとして、例えば、バッファ2の空きエントリへのデータの書き込みが行なわれたことを検知してもよい。すなわち、宛先エントリ番号用バッファ選択信号の受信をトリガとして、エントリ番号用バッファ6へのエントリ番号の設定や書き込み/読み出しポインタ5の更新を行なってもよい。
【0042】
宛先資源管理部8は、宛先バッファ50の使用状況を管理する。宛先資源管理部8は、宛先#0資源管理部8-1,宛先#1資源管理部8-2および宛先#2資源管理部8-3を備える。
【0043】
宛先#0資源管理部8-1は、宛先#0バッファ50-1の使用状況を管理する。宛先#0資源管理部8-1は、宛先#0バッファ50-1においてデータの格納に使用中の記憶領域の数を計数するカウンタを備える。宛先資源管理部8-1は、宛先#0バッファ50-1に空き領域がある場合に、後述する調停参加制御部9-1に対して調停参加許可信号を入力する。
【0044】
宛先#1資源管理部8-2は、宛先#1バッファ50-2の使用状況を管理する。宛先#1資源管理部8-2は、宛先#1バッファ50-2においてデータの格納に使用中の記憶領域の数を計数するカウンタを備える。宛先#1資源管理部8-2は、宛先#1バッファ50-2に空き領域がある場合に、調停参加制御部9-2に対して調停参加許可信号を入力する。
【0045】
宛先#2資源管理部8-3は、宛先#2バッファ50-3の使用状況を管理する。宛先#2資源管理部8-3は、宛先#2バッファ50-3においてデータの格納に使用中の記憶領域の数を計数するカウンタを備える。宛先#2資源管理部8-3は、宛先#2バッファ50-3に空き領域がある場合に、調停参加制御部9-3に対して調停参加許可信号を入力する。
【0046】
調停部10は、異なる宛先バッファ50を宛先とする複数の書き込み要求に対する調停を行なう。調停部10は、宛先#0バッファ50-1,宛先#1バッファ50-2および宛先#2バッファ50-3のうち、2つ以上の宛先バッファ50を宛先とする複数の書き込み要求に対して、一つの宛先(宛先バッファ50)を選択する調停を行なう。
調停部10は、調停の結果、調停に勝利した宛先(宛先バッファ50)を特定する情報をエントリセレクタ11に入力する。
【0047】
調停部10による、複数の宛先バッファ50に対する書き込み要求の中から一つの書き込み要求(一つの宛先バッファ50)を選択する手法としては、既知の種々の手法を適用してもよい。例えば、調停部10は、複数の宛先バッファ50に対する書き込み要求の中からランダムに一つの書き込み要求(一つの宛先バッファ50)を選択してもよい。また、調停部10は、複数の宛先バッファ50に対する書き込み要求の中から、所定の順序に従って一つの書き込み要求(一つの宛先バッファ50)を選択してもよい。さらに、調停部10は、特定の宛先に対する処理に重みを設定し、優先して処理させてもよい。
【0048】
なお、本例においては、一つの書き込み要求(宛先バッファ50)を選択することを示したが、これに限定されるものではない。例えば、複数の宛先バッファ50に並行して書き込みを可能とする場合には、2つ以上の書き込み要求(宛先バッファ50)を選択してもよく、適宜変更して実施することができる。
【0049】
なお、いずれか一つの宛先毎エントリ管理部4からのみ、宛先バッファ50を宛先とする書き込み要求が入力された場合には、調停部10は、その一つの書き込み要求の宛先(宛先バッファ50)を特定する情報をエントリセレクタ11に入力する。
【0050】
本バッファ制御システム1においては、エントリ番号用バッファ6にエントリ番号が記憶されている場合に、調停部10が、後述する調停参加制御部9がリクエストを送信可能と判断した宛先について調停を行なうことでリクエストを送出する宛先を決定する。
【0051】
調停参加制御部9-1は、宛先資源管理部8-1から送信される調停参加許可信号に基づき、宛先#0エントリ番号管理部4-1から入力される調停参加信号に対して、調停参加の可否を決定する。
【0052】
調停参加制御部9-1は、宛先#0エントリ番号管理部4-1から調停参加信号された場合において、宛先資源管理部8-1から調停参加許可信号が入力されている場合に、調停部10に対して、宛先#0バッファ50-1に対する書き込み要求(調停参加通知)を入力する。
【0053】
調停参加制御部9-2は、宛先資源管理部8-2から送信される調停参加許可信号に基づき、宛先#1エントリ番号管理部4-2から入力される調停参加信号に対して、調停参加の可否を決定する。
【0054】
調停参加制御部9-2は、宛先#1エントリ番号管理部4-2から調停参加信号された場合において、宛先資源管理部8-2から調停参加許可信号が入力されている場合に、調停部10に対して、宛先#1バッファ50-2に対する書き込み要求(調停参加通知)を入力する。
【0055】
調停参加制御部9-3は、宛先資源管理部8-3から送信される調停参加許可信号に基づき、宛先#2エントリ番号管理部4-3から入力される調停参加信号に対して、調停参加の可否を決定する。
【0056】
調停参加制御部9-3は、宛先#2エントリ番号管理部4-3から調停参加信号された場合において、宛先資源管理部8-3から調停参加許可信号が入力されている場合に、調停部10に対して、宛先#2バッファ50-3に対する書き込み要求(調停参加通知)を入力する。
【0057】
以下、調停参加制御部9-1~9-3を特に区別しない場合には、調停参加制御部9と表記する。本バッファ制御システム1においては、エントリ番号用バッファ6にエントリ番号が記憶されている場合に、調停参加制御部9が宛先バッファ50へのリクエストの送信可否を判断する。
【0058】
エントリセレクタ11には、調停部10が接続され、この調停部10から調停に勝利した宛先の情報が入力される。また、エントリセレクタ11には、各宛先毎エントリ管理部4が接続され、それぞれからエントリ番号が入力される。
【0059】
エントリセレクタ11は、調停部10から入力される調停に勝利した宛先に基づき、当該宛先に対応する宛先毎エントリ管理部4から入力されるエントリ番号を選択する。そして、エントリセレクタ11は、バッファ2に対して、この選択したエントリ番号によって特定されるエントリからデータを読み出させる。
【0060】
エントリセレクタ11は、バッファ2における、調停部10によって決定された宛先バッファ50に対応するエントリ番号用バッファ6から取得したエントリ番号によって特定されるエントリからリクエストを読み出させる。
バッファ2のエントリから読み出されたリクエストは、そのリクエストの宛先の宛先バッファ50に格納される。
【0061】
また、エントリセレクタ11は、エントリ番号管理部3に対して、格納されていたリクエストが読み出され宛先バッファ50に送られたエントリについて、当該エントリに対応する記憶領域にリクエストが格納されていない旨を示す識別情報(
図1に示す状態では「空き」)を設定させる。
【0062】
エントリセレクタ11は、エントリ番号管理部3に対して、リクエストが読み出され宛先バッファ50に送られたエントリのエントリを示す情報(例えば、エントリ番号)とともに解放指示(RLS:release)を入力する。エントリ番号管理部3は、この解放指示とともに通知されたエントリ番号に基づき、当該エントリに対応する記憶領域にリクエストが格納されていない旨を示す識別情報(
図1に示す状態では「空き」)を設定する。
【0063】
(B)動作
上述の如く構成された実施形態の一例としてのバッファ制御システム1における処理を、
図2~
図7を用いて説明する。
まず、
図2~
図4を用いて、バッファ2へのリクエストの書き込み処理を説明する。なお、
図2は本バッファ制御システム1の初期状態を例示する。
【0064】
図2に例示する初期状態においては、宛先#0バッファ50-1の複数の記憶領域が全て使用され、空きがない状態となっている。バッファ2が宛先#0バッファ50-1を宛先とするリクエストを受信した場合、そのリクエストは宛先#0バッファ50-1に空きができるまで、バッファ2から読み出しができない。
このような状態において、送信元から、さらに宛先#0バッファ50-1に対する新規リクエストが発行されたものとする。
先ず、バッファ2が、送信元から宛先#0バッファ50-1を宛先(宛先#0行き)とする新規リクエスト受信する(
図3の符号A1参照)。
【0065】
バッファ制御部は、エントリ番号管理部3を参照することでバッファ2における空きエントリを確認し、その空きエントリに受信したリクエストを書き込む(
図3の符号A2参照)。
図3に示す例においては、エントリ0に新しいリクエストが書き込まれている。
【0066】
これと同時に、エントリ番号管理部3は、データの書き込みを行なったエントリ0に対応する記憶領域にリクエストが格納されていることを示す「使用中」を設定する(
図3の符号A3参照)。
【0067】
また、宛先判別部7は、上述したバッファ2の空きエントリへのリクエストの書き込みと同時に、当該リクエストの宛先を確認し、書き込みが行なわれたエントリのエントリ番号を、その宛先(本例では、宛先#0バッファ50-1)に対応するエントリ番号用バッファ6-1に書き込む(
図3の符号A4参照)。
【0068】
さらに、宛先#0エントリ番号管理部4-1において、書き込み/読み出しポインタ5-1は、上述したバッファ2の空きエントリへのデータの書き込みと同時に、エントリ番号用バッファ6-1におけるエントリ番号の書き込み位置を示す書き込みポインタをインクリメントする(
図3の符号A5参照)。
【0069】
書き込み/読み出しポインタ5-1において、書き込みポインタが更新され、書き込みポインタが示す位置と読み出しポインタが示す位置とが異なる場合に、書き込み/読み出しポインタ5-1は、読み出しのために調停参加信号を生成し、調停参加制御部9-1に対して出力する(
図3の符号A6参照)。
【0070】
ここで、宛先#0バッファ50-1には空き領域がないため(
図3の符号A7参照)、宛先#0資源管理部8-1からの調停参加許可信号が無効になっており(
図3の符号A8参照)、その結果、調停参加制御部9-1において調停参加が抑止される(
図3の符号A9参照)。
その後、送信元から宛先#1バッファ50-2に対する新規リクエストが発行されたものとする。
バッファ2が、送信元から宛先#1バッファ50-2を宛先(宛先#1行き)の新規リクエスト受信する(
図4の符号A10参照)。
【0071】
バッファ制御部は、エントリ番号管理部3を参照することでバッファ2における空きエントリを確認し、その空きエントリに受信したリクエストを書き込む(
図4の符号A11参照)。
【0072】
これと同時に、エントリ番号管理部3は、リクエストの書き込みを行なったエントリ1に対応する記憶領域にリクエストが格納されていることを示す「使用中」を設定する(
図4の符号A12参照)。
【0073】
また、宛先判別部7は、上述したバッファ2の空きエントリへのリクエストの書き込みと同時に、リクエストの宛先を確認し、書き込みが行なわれたエントリのエントリ番号を、その宛先(本例では、宛先#1バッファ50-2)に対応するエントリ番号用バッファ6-2に書き込む(
図4の符号A13参照)。
【0074】
さらに、宛先#1エントリ番号管理部4-2において、書き込み/読み出しポインタ5-2は、上述したバッファ2の空きエントリへのリクエストの書き込みと同時に、エントリ番号用バッファ6-2におけるエントリ番号の書き込み位置を示す書き込みポインタをインクリメントする(
図4の符号A14参照)。
【0075】
書き込み/読み出しポインタ5-2において、書き込みポインタが更新され、書き込みポインタが示す位置と読み出しポインタが示す位置とが異なる場合に、書き込み/読み出しポインタ5-2は、読み出しのために調停参加信号を生成し、調停参加制御部9-2に対して出力する(
図4の符号A15参照)。
【0076】
ここで、宛先#1バッファ50-2には空き領域があるため(
図4の符号A16参照)、宛先#1資源管理部8-2からの調停参加許可信号が有効になっており(
図4の符号A17参照)、その結果、調停参加制御部9-2において調停参加が抑止されず、調停参加となる(
図4の符号A18参照)。
上述の如くバッファ2へのリクエストの書き込みが完了した後には、次に、以下に示すように、バッファ2からのリクエストの読み出し処理が行なわれる。
図5~
図7を用いて、バッファ2からのリクエストの読み出し処理を説明する。
【0077】
エントリ番号用バッファ6にエントリ番号が格納された宛先毎エントリ管理部4から、エントリセレクタ11に対して、読み出しポインタが指し示す位置のエントリ番号が出力される。
【0078】
図5に示す例においては、宛先#0エントリ番号管理部4-1のエントリ番号用バッファ6-1から“エントリ0”が、宛先#1エントリ番号管理部4-2のエントリ番号用バッファ6-2から“エントリ1”が、それぞれエントリセレクタ11に出力されている(
図5のB1参照)。
【0079】
調停部10は、宛先間の調停を行ない、どの宛先のエントリ番号用バッファ6を選択するか決定する。
図5に示す例においては、宛先資源管理部8-1から調停参加制御部9-1へ調停参加許可信号が出力されていないので、宛先#1エントリ番号管理部4-2にかかる宛先#1バッファ50-2に対するリクエストが勝者となる(
図5の符号B2参照)。
【0080】
エントリセレクタ11は、調停で勝者となった宛先のエントリ番号を選択する。
図5に示す例においては、エントリセレクタ11は、エントリ1を選択する(
図5の符号B3参照)。エントリセレクタ11は、選択したエントリ番号が示す位置のリクエストをバッファ2から読み出す。
図5に示す例においては、バッファ2のエントリ1からリクエストが読み出される(
図5の符号B4参照)。この際、先行してバッファ2に格納されている宛先#0バッファ50-1へのリクエストを追い抜いて、後続してバッファ2に格納された宛先#1バッファ50-2へのリクエストが先に処理されることになる。
【0081】
エントリセレクタ11は、バッファ2からリクエストを読み出した後、エントリ番号管理部3における、バッファ2においてリクエストを取り出したエントリのエントリ番号に対応する記憶領域に対して、使用中から空きに変更させる(
図6の符号B5参照)。
【0082】
また、エントリ番号管理部3における使用中から空きへの変更とともに、バッファ2におけるリクエストが読み出されたエントリ番号に対応する記憶領域を空きに変更する(
図6の符号B6参照)。これにより、バッファ2における当該エントリが再利用可能な状態となる。
【0083】
さらに、エントリ番号管理部3における使用中から空きへの変更とともに、宛先資源管理部8-2の図示しないカウンタがインクリメントされる(
図6の符号B7)。
【0084】
また、エントリ番号管理部3における使用中から空きへの変更と同時に、宛先#1バッファ50-2を宛先とする宛先#1エントリ番号管理部4-2の書き込み/読み出しポインタ5-2が、その読み出しポインタをインクリメントする(
図6の符号B8)。
【0085】
さらに、エントリ番号管理部3における使用中から空きへの変更と同時に、宛先#1エントリ番号管理部4-2のエントリ番号用バッファ6-2の先頭の記憶領域が空きに変更される(
図6の符号B9参照)。
【0086】
その後、バッファ2のエントリ1からデータが読み出したリクエストが、その宛先である宛先#1バッファ50-2の記憶領域に格納される(
図7の符号B10参照)。
【0087】
(C)効果
このように、実施形態の一例としてのバッファ制御システム1によれば、宛先バッファ50毎にエントリ番号用バッファ6を備える。そして、バッファ2においてリクエストを格納したエントリのエントリ番号を、当該リクエストの宛先に対応するエントリ番号用バッファ6に格納する。
【0088】
これにより、先行するリクエストの宛先(例えば、宛先#0バッファ50-1)への送信が不可能、且つ、後続するリクエストの宛先(例えば、宛先#1バッファ50-2)への送信が可能なときに、先行リクエストを追い抜いて後続リクエストをバッファ2から読み出すことができる。
【0089】
宛先毎エントリ管理部4において、エントリ番号用バッファ6をFIFO制御し、書き込み/読み出しポインタ5の書き込みポインタが示す位置と読み出しポインタが示す位置とを比較する。これにより、簡素な構成で、エントリ番号用バッファ6にエントリ番号が格納されているか否かを容易に判断することができる。従って、遅滞なく調停参加信号を出力することができ、処理の高速化を実現することができる。
【0090】
調停部10が、異なる宛先バッファ50を宛先とする複数の書き込み要求に対する調停を行なうことで、複数の宛先バッファ50に対してリクエストの送信が可能なときに、バッファ2から効率的にリクエストを選択し処理することができる。
【0091】
(D)その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【符号の説明】
【0092】
1 バッファ制御システム
2 バッファ
3 エントリ番号管理部
4 宛先毎エントリ管理部
4-1 宛先#0エントリ番号管理部
4-2 宛先#1エントリ番号管理部
4-3 宛先#2エントリ番号管理部
5-1~5-3,5 書き込み/読み出しポインタ
6-1~6-3,6 エントリ番号用バッファ
7 宛先判別部
8 宛先資源管理部
8-1 宛先#0資源管理部
8-2 宛先#1資源管理部
8-3 宛先#2資源管理部
9-1~9-3,9 調停参加制御部
10 調停部
11 エントリセレクタ
50-1 宛先#0バッファ
50-2 宛先#1バッファ
50-3 宛先#2バッファ
50 宛先バッファ