以下、本発明によるパイプライン回路、半導体装置およびパイプライン制御方法の好適な実施例について添付図を参照して説明する。なお、以下の説明においては、本発明によるパイプライン回路、パイプライン制御方法について説明するが、パイプライン動作を行う半導体装置に、かかるパイプライン回路を搭載して構成しても良く、特に、本発明によるパイプライン回路を搭載する半導体装置としては、多数のイベントをリアルタイムに同時処理する通信用サーバ装置に好適に適用することができる。
(本発明の特徴)
本発明の実施形態の説明に先立って、本発明の特徴についてその概要をまず説明する。本発明に係るパイプライン回路は、複数段のパイプライン・バッファを含むパイプライン回路であって、第1のクロック信号から第Pのクロック信号のP本(Pは正整数)のクロック信号のうち、あらかじめ定めた位相ずつ位相が遅れた連続する2つのクロック信号が、パイプライン回路の前段に位置するパイプライン・バッファから後段に位置するパイプライン・バッファのそれぞれに対して、順に割り当てられ、かつ、隣接する2つのパイプライン・バッファ間で、それぞれに割り当てられた2つのクロック信号のうち、同一位相の1つのクロック信号を共有するように割り当てられ、かつ、各前記パイプライン・バッファは、割り当てられた前記2つのクロック信号によって動作し、前記P本のクロック信号は、前記第1のクロック信号から第Pのクロック信号の順に位相が遅いこと、を主要な特徴としている。つまり、あらかじめ定めた位相ずつ位相が遅れた連続する2つのクロック信号を順次割り当てた各パイプライン・バッファのうち、隣接する2つのパイプライン・バッファ間においては、前段のパイプライン・バッファの後ろ側のクロック信号と後段のパイプライン・バッファの前側のクロック信号とは、同一位相のクロック信号となるように割り当てされる。
(第1の実施形態)
次に、図1を参照しながら、本発明の第1の実施形態に係るパイプライン回路について説明する。図1は、本発明の第1の実施形態に係るパイプライン回路のブロック構成を示すブロック構成図である。図1において、パイプライン回路10は、信号13に入力したデータを部分回路11a、11b、11c、11dによってパイプライン的に処理した後、信号14に出力する回路である。ここで、信号13および信号14は、複数ビットからなる信号である。
より詳細には、パイプライン回路10は、高い動作周波数と高いスループットを実現するために、4ステージのパイプライン回路で構成されている。すなわち、パイプライン回路10において、データ処理を行う回路は、5段のパイプライン・レジスタ12a、12b、12c、12d、12eにより、4つの部分回路11a、11b、11c、11dに分割されている。
5段のパイプライン・レジスタ12a、12b、12c、12d、12eは、それぞれ、4本の独立したクロック信号であるクロックS0、クロックS1、クロックS2、クロックS3のいずれかによって動作する。図1に示す例では、パイプライン・レジスタ12a、12eは、クロックS0によって動作し、パイプライン・レジスタ12bは、クロックS1によって動作し、パイプライン・レジスタ12cは、クロックS2によって動作し、パイプライン・レジスタ12dは、クロックS3によって動作する。
ここで、クロックS0、クロックS1、クロックS2、クロックS3の周波数が、それぞれ、クロックS0、クロックS1、クロックS2、クロックS3の周波数の最大値に対して(1/N)倍(Nは正整数)であるものと仮定する。このとき、クロックS0、クロックS1、クロックS2、クロックS3の位相関係は、(1)クロックS0に対してクロックS1の位相が(360/N)°だけ遅く、(2)クロックS1に対してクロックS2の位相が(360/N)°だけ遅く、(3)クロックS2に対してクロックS3の位相が(360/N)°だけ遅いものとする。
(360/N)°の位相差は、クロックS0、クロックS1、クロックS2、クロックS3の周波数が最大値の時のサイクル時間に等しい位相差である。このとき、パイプライン回路10の前段のパイプライン・レジスタから後段のパイプライン・レジスタに対して、クロックS0〜S3のうち、(360/N)°ずつ位相が遅れたクロック信号をそれぞれ順に割り当てる。具体的には、(a)パイプライン・レジスタ12aにはクロックS0を割り当てる。(b)パイプライン・レジスタ12bにはクロックS1を割り当てる。(c)パイプライン・レジスタ12cにはクロックS2を割り当てる。(d)パイプライン・レジスタ12dにはクロックS3を割り当てる。(e)パイプライン・レジスタ12eにはクロックS0を割り当てる。
したがって、前述のように、(a)パイプライン・レジスタ12aはクロックS0で動作する。(b)パイプライン・レジスタ12bはクロックS1で動作する。(c)パイプライン・レジスタ12cはクロックS2で動作する。(d)パイプライン・レジスタ12dはクロックS3で動作する。(e)パイプライン・レジスタ12eはクロックS0で動作する。
なお、クロックS0、クロックS1、クロックS2、クロックS3などのクロック信号は、従来のクロック生成回路で容易に生成することができる。例えば、PLL(Phased Lock Loop)回路などの発振回路によって直接生成しても良いし、高速なクロック信号を分周回路によって分周して生成しても良い。
(第1の実施形態の動作)
次に、図2を参照して、図1の第1の実施形態によるパイプライン回路10の動作例について説明する。図2は、図1のパイプライン回路10によるデータ処理のタイミング関係の一例を説明するためのタイムチャートであり、N=4の場合を示している。また、図2には、明確化のために、クロックS0、クロックS1、クロックS2、クロックS3の周波数が最大値のときのクロック信号をクロックFとして表記している。
図2のタイムチャートにおいて、クロックS0、クロックS1、クロックS2、クロックS3の周波数は、クロックS0、クロックS1、クロックS2、クロックS3の周波数の最大値つまりクロックFの(1/4)倍である。また、クロックS0、クロックS1、クロックS2、クロックS3の位相は、それぞれ、互いに(360/4)°ずつ異なっており、(1)クロックS0に対してクロックS1の位相が(360/4)°だけ遅く、(2)クロックS1に対してクロックS2の位相が(360/4)°だけ遅く、(3)クロックS2に対してクロックS3の位相が(360/4)°だけ遅くなっている。
図2のタイムチャートにおいて、パイプライン回路10は、前段の回路(図示せず)が、タイミングT0において、信号13に出力したデータD0を、タイミングT1で入力する。具体的には、クロックS0の立ち上がりタイミングであるタイミングT1において、クロックS0で動作するパイプライン・レジスタ12aが該データD0をラッチし、部分回路11aに出力する。しかる後、部分回路11aは、該データD0の処理を行う。
次に、クロックS1の立ち上がりタイミングであるタイミングT2において、クロックS1で動作するパイプライン・レジスタ12bが、部分回路11aによって処理された該データD0をラッチし、部分回路11bに出力する。しかる後、部分回路11bは、該データD0の処理を行う。
次に、クロックS2の立ち上がりタイミングであるタイミングT3において、クロックS2で動作するパイプライン・レジスタ12cが、部分回路11bによって処理された該データD0をラッチし、部分回路11cに出力する。しかる後、部分回路11cは、該データD0の処理を行う。
次に、クロックS3の立ち上がりタイミングであるタイミングT4において、クロックS3で動作するパイプライン・レジスタ12dが、部分回路11cによって処理された該データD0をラッチし、部分回路11dに出力する。しかる後、部分回路11dは、該データD0の処理を行う。
最後に、クロックS0の立ち上がりタイミングであるタイミングT5において、クロックS0で動作するパイプライン・レジスタ12eを介して、部分回路11dによって処理されたデータD0が信号14に出力される。
同様に、パイプライン回路10は、前段の回路(図示せず)が、タイミングT4において、信号13に出力したデータD1を、タイミングT5で入力する。具体的には、クロックS0の立ち上がりタイミングであるタイミングT5において、クロックS0で動作するパイプライン・レジスタ12aが該データD1をラッチし、部分回路11aに出力する。しかる後、部分回路11aは、該データD1の処理を行う。
次に、クロックS1の立ち上がりタイミングであるタイミングT6において、パイプライン・レジスタ12bが、クロックS1で動作する部分回路11aによって処理された該データD1をラッチし、部分回路11bに出力する。しかる後、部分回路11bは、該データD1の処理を行う。
以降、同様にして、部分回路11bによって処理された該データD1は、タイミングT7からT8にかけて、クロックS2、S3それぞれで動作するパイプライン・レジスタ12c、12dそれぞれを介して、部分回路11c、11dそれぞれによって処理される。
最後に、タイミングT9において、パイプライン・レジスタ12eを介して、部分回路11dによって処理されたデータD1が信号14に出力される。
以降も、同様に、前段の回路(図示せず)が、タイミングT8、T12、T16、T20、T24それぞれにおいて、信号13に出力したデータD2〜D6は、パイプライン回路10によって処理された後、タイミングT13、T17、T21、T25、T29それぞれにおいて、信号14に出力される。
以上、クロックS0、クロックS1、クロックS2、クロックS3の順に位相が(360/4)°ずつ遅れた4本のクロック信号を使用する場合について説明した。本実施形態は、かかる場合に限らず、任意の本数のクロック信号を用いる場合であっても、同様に適用することができる。具体的には、パイプライン回路10の前段のパイプライン・レジスタから後段のパイプライン・レジスタに対して、順に、あらかじめ定めた位相ずつ位相が遅れたクロック信号をそれぞれ順に割り当てれば良い。
(第1の実施形態の効果)
図2のタイムチャートの例においては、前段の回路が出力したデータが、パイプライン10において処理された後、信号14に出力されるまでに、クロックFの5サイクル分の時間がかかる(例えば、データD0はタイミングT0で信号13を介してパイプライン回路10に入力され、タイミングT5でパイプライン回路10から信号14に出力される)。すなわち、パイプライン回路10のデータ処理のレイテンシは、クロックFの5サイクルである。
一方、パイプライン回路10は、部分回路11a、11b、11c、11dの4ステージのパイプライン回路によって構成されていて、データ処理がパイプライン動作により実現されている。そのため、レイテンシが5サイクルであるにも関わらず、クロックS0〜S3の各サイクルごとにデータ処理を行うことができる。すなわち、クロックFの4サイクルごとにデータ処理を行うことができるので、パイプライン回路10のデータ処理のスループットは、(1/4)データ/サイクル(クロックFの1サイクル当たり(1/4)のデータを処理することを示す)である。
これは、クロックS0〜S3の周波数はクロックFの(1/4)倍であり、よって、クロックS0〜S3のサイクル時間はクロックFの4倍であるためである。すなわち、本第1の実施形態では、クロック周波数を(1/4)倍にした場合、スループットは(1/4)倍になる一方、レイテンシは1倍のままであり、従来技術のように増大することはない。より一般的には、Nを正整数としたとき、周波数を(1/N)倍にすると、スループットは(1/N)倍になる。一方、レイテンシは1倍すなわち増大することはない。
例えば、図3は、図1のパイプライン回路10によるデータ処理のタイミング関係の他の例を説明するためのタイムチャートであり、N=1の場合を示している。このとき、クロックS0、クロックS1、クロックS2、クロックS3の周波数は、クロックFの周波数の(1/1)倍、すなわち、クロックFと同じ周波数である。
かかる場合、図3から明らかなように、スループットは(1/1)倍になるが、一方、レイテンシについては1倍であり、図2の場合と同様である。
また、図4は、図1のパイプライン回路10によるデータ処理のタイミング関係のさらに異なる例を説明するためのタイムチャートであり、N=2の場合を示している。このとき、クロックS0、クロックS1、クロックS2、クロックS3の周波数は、クロックFの周波数の(1/2)倍である。
かかる場合、図4から明らかなように、スループットは(1/2)倍になるが、レイテンシについては1倍であり、図2の場合と同様である。
このため、スループットが必要性能に十分足りている場合、処理レイテンシを増大させることなく、クロック周波数を柔軟に低下させることができるので、パイプライン回路10の消費電力を低減することができるという効果が得られる。また、クロック周波数を低下させても、処理レイテンシが増大しないので、パイプライン回路10の処理結果を後続の処理で使用する場合でも、処理全体のスループットが低下しないという効果が得られる。
(第2の実施形態)
次に、本発明の第2の実施形態に係るパイプライン回路について説明する。前述の第1の実施形態では、パイプライン回路を駆動するクロック信号の周波数を、周波数の最大値に対して(1/N)倍(Nは正整数)にする場合について説明した。本第2の実施形態では、パイプライン回路を駆動するクロック信号の周波数を、周波数の最大値に対して(M/N)倍(Mは正の整数、NはMより大きい正の整数)で規定される有理数倍にする場合について、図5を参照しながら説明する。
図5は、本発明の第2の実施形態に係るパイプライン回路のブロック構成を示すブロック構成図である。図5において、パイプライン回路20は、信号23から入力したデータを部分回路21a、21b、21c、21dによってパイプライン的に処理した後、信号24に出力する回路である。ここで、信号23および信号24は、複数ビットからなる信号である。
より詳細には、パイプライン回路20は、高い動作周波数と高いスループットを実現するために、4ステージのパイプライン回路で構成されている。すなわち、パイプライン回路20において、データ処理を行う回路は、5段のパイプライン・レジスタ22a、22b、22c、22d、22eにより、4つの部分回路21a、21b、21c、21dに分割されている。
5段のパイプライン・レジスタ22a、22b、22c、22d、22eは、それぞれ、5本の独立したクロック信号であるクロックP0、クロックP1、クロックP2、クロックP3、クロックP4のいずれかによって動作する。図5に示す例では、パイプライン・レジスタ22aは、クロックP0によって動作し、パイプライン・レジスタ22bは、クロックP1によって動作し、パイプライン・レジスタ22cは、クロックP2によって動作し、パイプライン・レジスタ22dは、クロックP3によって動作し、パイプライン・レジスタ22eは、クロックP4によって動作する。
ここで、クロックP0〜P4の周波数が、それぞれ、クロックP0〜P4の周波数の最大値に対して(M/N)倍(Mは正の整数、NはMより大きい正の整数)であるものと仮定する。また、クロックP0〜P4の周波数が最大値の場合のサイクル時間をTcycとしたとき、クロックP0〜P4の位相関係は、(1)クロックP0に対してクロックP1の位相がTcycだけ遅く、(2)クロックP1に対してクロックP2の位相がTcycだけ遅く、(3)クロックP2に対してクロックP3の位相がTcycだけ遅く、(4)クロックP3に対してクロックP4の位相がTcycだけ遅いものとする。
このとき、パイプライン回路20の前段のパイプライン・レジスタから後段のパイプライン・レジスタに対して、クロックP0〜P4のうち、Tcycずつ位相が遅れたクロック信号をそれぞれ順に割り当てる。具体的には、(a)パイプライン・レジスタ22aにはクロックP0を割り当てる。(b)パイプライン・レジスタ22bにはクロックP1を割り当てる。(c)パイプライン・レジスタ22cにはクロックP2を割り当てる。(d)パイプライン・レジスタ22dにはクロックP3を割り当てる。(e)パイプライン・レジスタ22eにはクロックP4を割り当てる。
したがって、前述のように、(a)パイプライン・レジスタ22aはクロックP0で動作する。(b)パイプライン・レジスタ22bはクロックP1で動作する。(c)パイプライン・レジスタ22cはクロックP2で動作する。(d)パイプライン・レジスタ22dはクロックP3で動作する。(e)パイプライン・レジスタ22eはクロックP4で動作する。
なお、クロックP0〜P4を生成する方法としては、例えば、高速なクロック信号を(M/N)で規定される分周比で有理数分周することによって生成しても良い。本実施形態においては、高速なクロック信号のクロックパルスを適切にマスクする(間引く)ことにより、有理数分周を実現して、クロックP0〜P4を生成する。図6から図8を参照して、クロックP0〜P4の生成方法について詳細に説明する。
図6は、高速なクロック信号Fを(M/N)で規定される分周比で有理数分周して生成したクロックP0〜P4の一例を示すタイムチャートであり、分周比(M/N)=(3/5)の例を示している。なお、図6には、図5のパイプライン回路20によるデータ処理のタイミング関係の一例を説明するためのタイムチャートも合わせて示している。
図6に図示する例においては、高速なクロック信号であるクロックFを分周比(3/5)で分周して生成したクロックP0〜P4の例を示している。つまり、分周比(M/N)のクロックP0〜P4は、クロックFのN個のクロックパルスのうち、いずれか(N−M)個のクロックパルスを適切にマスクすることにより生成することができる。より詳細には、分周比が(3/5)のクロックP0〜P4は、クロックFの連続する5個のクロックパルスのうち、いずれか2個のクロックパルスをマスクすることによって生成している。
例えば、図6の例では、分周比が(3/5)のクロックP0は、クロックFのタイミングT1〜T5に位置する5個の連続するクロックパルスのうち、タイミングT3、T5に位置する2個のクロックパルスをマスクすることによって生成している。同様に、クロックP0は、クロックFのタイミングT6〜T10に位置する5個の連続するクロックパルスのうち、タイミングT8、T10に位置する2個のクロックパルスをマスクすることによって生成している。タイミングT11以降についても、同様に、クロックFの連続する5個のクロックパルスのうち、2個のクロックパルスをマスクすることによってクロックP0を生成している。
また、分周比が(3/5)のクロックP1は、クロックFのタイミングT2〜T6に位置する5個の連続するクロックパルスのうち、タイミングT4、T6に位置する2個のクロックパルスをマスクすることによって生成している。また、分周比が(3/5)のクロックP2は、クロックFのタイミングT3〜T7に位置する5個の連続するクロックパルスのうち、タイミングT5、T7に位置する2個のクロックパルスをマスクすることによって生成している。また、分周比が(3/5)のクロックP3は、クロックFのタイミングT4〜T8に位置する5個の連続するクロックパルスのうち、タイミングT6、T8に位置する2個のクロックパルスをマスクすることによって生成している。また、分周比が(3/5)のクロックP4は、クロックFのタイミングT5〜T9に位置する5個の連続するクロックパルスのうち、タイミングT7、T9に位置する2個のクロックパルスをマスクすることによって生成している。
なお、クロックFのクロックパルスをまったくマスクしないで、クロックP0〜P4を生成した場合、クロックP0〜P4それぞれの周波数は最大になる。このとき、クロックP0〜P4それぞれの周波数の最大値はクロックFの周波数に等しい。
したがって、クロックFのサイクル時間をTcycとしたとき、クロックP0〜P4の位相関係は、(1)クロックP0に対してクロックP1の位相がTcycだけ遅く、(2)クロックP1に対してクロックP2の位相がTcycだけ遅く、(3)クロックP2に対してクロックP3の位相がTcycだけ遅く、(4)クロックP3に対してクロックP4の位相がTcycだけ遅くなっている。
次に、図7を参照して、本発明の第2の実施形態に係るパイプライン回路20を構成するクロック信号分周回路について説明する。図7は、図5のパイプライン回路20を構成するクロック信号分周回路のブロック構成の一例を示すブロック構成図であり、分周比(M/N)のクロックP0〜P5を生成している場合について示している。
図7に示すクロック生成回路28は、入力する分周比分母Nおよび分周比分子Mの(M/N)(Mは正整数,NはMより大きい正整数)で規定された分周比に基づいて、クロックF(入力クロック信号)の連続するN個のクロックパルスのうち、(N−M)個分のクロックパルスをマスクすることにより、クロックFを(M/N)の分周比で有理数分周したクロックP0〜P5(出力クロック信号)を生成する回路である。
該クロック信号分周回路28は、主な回路として、マスク回路27a、27b、27c、27d、27e、27fとマスク制御回路25とを含んでいる。マスク回路27aは、入力されたマスク信号26aに応じてクロックFのクロックパルスをマスクすることによりクロックP0を生成して出力する機能を有している。同様に、マスク回路27bは、入力されたマスク信号26bに応じてクロックFのクロックパルスをマスクすることによりクロックP1を生成して出力する機能を有している。
同様に、マスク回路27cは、入力されたマスク信号26cに応じてクロックFのクロックパルスをマスクすることによりクロックP2を生成して出力する機能を有している。同様に、マスク回路27dは、入力されたマスク信号26dに応じてクロックFのクロックパルスをマスクすることによりクロックP3を生成して出力する機能を有している。同様に、マスク回路27eは、入力されたマスク信号26eに応じてクロックFのクロックパルスをマスクすることによりクロックP4を生成して出力する機能を有している。同様に、マスク回路27fは、入力されたマスク信号26fに応じてクロックFのクロックパルスをマスクすることによりクロックP5を生成して出力する機能を有している。
マスク制御回路25は、入力された分周比分母Nおよび分周比分子Mに基づいて、クロックFの連続するN個のクロックパルスのタイミングのうち、いずれか(N−M)個分のクロックパルスをマスクするマスクタイミングを、クロックP0の当該タイミングに割り当てたマスク信号26aとしてマスク回路27aへ出力する機能を有している。
さらに、マスク制御回路25は、入力された分周比分母Nおよび分周比分子Mに基づいて、クロックFの連続するN個のクロックパルスのタイミングのうち、(N−M)個分のクロックパルスをマスクするマスクタイミングを、クロックP0の当該タイミングに対してTcycだけ遅いタイミングに割り当てたマスク信号26bとしてマスク回路27bへ出力する機能を有している。
さらに、マスク制御回路25は、入力された分周比分母Nおよび分周比分子Mに基づいて、クロックFの連続するN個のクロックパルスのタイミングのうち、(N−M)個分のクロックパルスをマスクするマスクタイミングを、クロックP1の当該タイミングに対してTcycだけ遅いタイミングに割り当てたマスク信号26cとしてマスク回路27cへ出力する機能を有している。
さらに、マスク制御回路25は、入力された分周比分母Nおよび分周比分子Mに基づいて、クロックFの連続するN個のクロックパルスのタイミングのうち、(N−M)個分のクロックパルスをマスクするマスクタイミングを、クロックP2の当該タイミングに対してTcycだけ遅いタイミングに割り当てたマスク信号26dとしてマスク回路27dへ出力する機能を有している。
さらに、マスク制御回路25は、入力された分周比分母Nおよび分周比分子Mに基づいて、クロックFの連続するN個のクロックパルスのタイミングのうち、(N−M)個分のクロックパルスをマスクするマスクタイミングを、クロックP3の当該タイミングに対してTcycだけ遅いタイミングに割り当てたマスク信号26eとしてマスク回路27eへ出力する機能を有している。
さらに、マスク制御回路25は、入力された分周比分母Nおよび分周比分子Mに基づいて、クロックFの連続するN個のクロックパルスのタイミングのうち、(N−M)個分のクロックパルスをマスクするマスクタイミングを、クロックP4の当該タイミングに対してTcycだけ遅いタイミングに割り当てたマスク信号26fとしてマスク回路27fへ出力する機能を有している。
なお、クロックF、分周比分母Nおよび分周比分子Mについては、上位回路(図示せず)から供給されるものとする。
次に、図8を参照して、図7に示すマスク制御回路25の具体例について説明する。図8は、図7のクロック信号分周回路28を構成するマスク制御回路25のブロック構成の一例を示すブロック構成図である。
図8において、マスク制御回路25は、入力された分周比分母Nおよび分周比分子Mに基づいて、クロックFのクロックパルスをカウントすることにより、出力クロック信号のクロックFに対する相対的な位相を示すカウント値を生成し、生成したカウント値に基づいてマスクタイミングを割り当てたマスク信号26a〜26fを生成して出力する機能を有している。
図8に示す本実施形態において、該マスク制御回路25は、カウンタ61、テーブル回路62、シフトレジスタ65により構成されている。また、入力される分周比分母Nおよび分周比分子Mは、複数ビットの並列ビットデータによって構成されている。
カウンタ61は、クロックFのクロックパルスをカウントするとともに、当該カウンタ61のカウント値63が分周比分母Nに達した時点で、カウント値を「0」にリセットすることにより、出力クロック信号のクロックFに対する相対的な位相を示す「0」から「N−1」までのカウント値63を出力する機能を有している。これにより、カウンタ61から、クロックFと出力クロック信号の位相関係が一巡するサイクル数がカウント値63として出力される。
テーブル回路62は、カウント値63、分周比分母Nおよび分周比分子Mの組合せごとに、マスクの要否を示すテーブルデータ64(図8の例では、N=5、M=3の場合として、第3番目と第5番目が「0」になっている「11010」のデータ)をあらかじめテーブル形式で保持する機能と、入力されたカウント値63、分周比分母Nおよび分周比分子Mの組合せに応じたテーブルデータをマスクタイミング信号69として出力する機能とを有している。
シフトレジスタ65は、入力したマスクタイミング信号69を、クロックFのサイクル毎に、順々にシフトして、マスク信号26aから26fまでとして出力する。したがって、(1)マスク信号26aは、テーブルデータ64の値になる。(2)マスク信号26bは、マスク信号26aをクロックFの1サイクル分だけシフトした値になる。(3)同様に、マスク信号26cは、マスク信号26bをクロックFの1サイクル分だけシフトした値になる。(4)同様に、マスク信号26dは、マスク信号26cをクロックFの1サイクル分だけシフトした値になる。(5)同様に、マスク信号26eは、マスク信号26dをクロックFの1サイクル分だけシフトした値になる。(6)同様に、マスク信号26fは、マスク信号26eをクロックFの1サイクル分だけシフトした値になる。
図8のようなマスク制御回路25により、分周比分母N、分周比分子M、カウント値63に応じて、テーブル回路62からシフトレジスタ65を通じて、図7のクロック信号分周回路28のマスク回路27a〜27fにおいてクロックFのクロックパルスをマスクするマスク信号26a〜26fが、クロックFのクロックパルスごとに出力される。
(第2の実施形態の動作)
次に、再び、図6を参照して、図5の第2の実施形態によるパイプライン回路20の動作例について説明する。図6には、分周比(M/N)=(3/5)の場合における、図5のパイプライン回路20によるデータ処理のタイミング関係の一例を説明するためのタイムチャートも合わせて示している。
図6のタイムチャートにおいて、パイプライン回路20は、前段の回路(図示せず)が、タイミングT0において、信号23に出力したデータD0を、タイミングT1で入力する。具体的には、クロックP0の立ち上がりタイミングの一つであるタイミングT1において、クロックP0で動作するパイプライン・レジスタ22aが該データD0をラッチし、部分回路21aに出力する。しかる後、部分回路21aは、該データD0の処理を行う。
次に、クロックP1の立ち上がりタイミングの一つであるタイミングT2において、クロックP1で動作するパイプライン・レジスタ22bが、部分回路21aによって処理された該データD0をラッチし、部分回路21bに出力する。しかる後、部分回路21bは、該データD0の処理を行う。
次に、クロックP2の立ち上がりタイミングの一つであるタイミングT3において、クロックP2で動作するパイプライン・レジスタ22cが、部分回路21bによって処理された該データD0をラッチし、部分回路21cに出力する。しかる後、部分回路21cは、該データD0の処理を行う。
次に、クロックP3の立ち上がりタイミングの一つであるタイミングT4において、クロックP3で動作するパイプライン・レジスタ22dが、部分回路21cによって処理された該データD0をラッチし、部分回路21dに出力する。しかる後、部分回路21dは、該データD0の処理を行う。
最後に、クロックP4の立ち上がりタイミングの一つであるタイミングT5において、クロックP4で動作するパイプライン・レジスタ22eを介して、部分回路21dによって処理されたデータD0が信号24に出力される。
同様に、パイプライン回路20は、前段の回路(図示せず)が、タイミングT1において、信号13に出力したデータD1を、タイミングT2で入力する。具体的には、クロックP0の立ち上がりタイミングの一つであるタイミングT2において、クロックP0で動作するパイプライン・レジスタ22aが該データD1をラッチし、部分回路21aに出力する。しかる後、部分回路21aは、該データD1の処理を行う。
次に、クロックP1の立ち上がりタイミングの一つであるタイミングT3において、クロックP1で動作するパイプライン・レジスタ22bが、部分回路21aによって処理された該データD1をラッチし、部分回路21bに出力する。しかる後、部分回路21bは、該データD1の処理を行う。
以降、同様にして、部分回路21bによって処理された該データD1は、タイミングT4からT5にかけて、クロックP2、P3それぞれで動作するパイプライン・レジスタ22c、22dそれぞれを介して、部分回路21c、21dそれぞれによって処理される。
最後に、タイミングT6において、パイプライン・レジスタ22eを介して、部分回路21dによって処理されたデータD1が信号14に出力される。
以降も、同様に、前段の回路(図示せず)が、タイミングT3、T5、T6、T8、T10、T11それぞれにおいて、信号23に出力したデータD2〜D7は、パイプライン回路20によって処理された後、タイミングT8、T10、T11、T13、T15、T16それぞれにおいて、信号24に出力される。
以上、クロックP0〜P4の順に位相が遅れた5本のクロック信号を使用する場合について説明した。本第2の実施形態は、かかる場合に限らず、任意の本数のクロック信号を用いる場合であっても、同様に適用することができる。具体的には、パイプライン回路20の前段のパイプライン・レジスタから後段のパイプライン・レジスタに対して、順に、位相が遅れたクロック信号をそれぞれ順に割り当てれば良い。
(第2の実施形態の効果)
図6のタイムチャートの例においては、前段の回路が出力したデータが、パイプライン回路20において処理された後、信号24に出力されるまでに、クロックFの5サイクル分の時間がかかる(例えば、データD0はタイミングT0で信号23を介してパイプライン回路20に入力され、タイミングT5でパイプライン回路20から信号24に出力される)。すなわち、パイプライン回路20のデータ処理のレイテンシは、クロックFの5サイクルである。
一方、パイプライン回路20は、部分回路21a、21b、21c、21dの4ステージのパイプライン回路によって構成されていて、データ処理がパイプライン動作により実現されている。そのため、レイテンシが5サイクルであるにも関わらず、クロックP0〜P4の各サイクルごとにデータ処理を行うことができる。すなわち、クロックFの5サイクルのうち3サイクルごとにデータ処理を行うことができるので、パイプライン回路20のデータ処理のスループットは、(3/5)データ/サイクル(クロックFの1サイクル当たり(3/5)のデータを処理することを示す)である。
これは、クロックP0〜P4の周波数はクロックFの(3/5)倍であり、よって、クロックP0〜P4のサイクル時間はクロックFの(5/3)倍であるためである。すなわち、本実施例では、クロック周波数を(3/5)倍にした場合、スループットは(3/5)倍になる一方、レイテンシは1倍のままであり、従来技術のように増大することはない。より一般的には、Mを正の整数、NをMより大きい正の整数としたとき、周波数を(M/N)倍にすると、スループットは(M/N)倍になる。一方、レイテンシは1倍すなわち増大することはない。例えば、本第2の実施形態では、クロックP0〜P4の周波数はクロックFの(3/5)倍であり、よって、クロックP0〜P4のサイクル時間は平均すると、クロックFの(5/3)倍であるためである。すなわち、本実施例では、クロック周波数を(3/5)倍にした場合、スループットは(3/5)倍になる一方、レイテンシは1倍のままである。
このため、スループットが必要性能に十分足りている場合、処理レイテンシを増大させることなく、クロック周波数を(M/N)倍で規定される任意の有理数倍で柔軟に低下させることができるので、パイプライン回路20の消費電力を低減することができるという効果が得られる。また、クロック周波数を低下させても、処理レイテンシが増大しないので、パイプライン回路20の処理結果を後続の処理で使用する場合でも、処理全体のスループットが低下しないという効果が得られる。
(第3の実施形態)
次に、本発明の第3の実施形態に係るパイプライン回路について説明する。本第3の実施形態では、フロー制御機能を備えたパイプライン回路に対して、パイプライン回路を駆動するクロック信号の周波数を、周波数の最大値に対して(M/N)倍(Mは正の整数、NはMより大きい正の整数)で規定される有理数倍にする場合について、図9を参照しながら説明する。
図9は、本発明の第3の実施形態に係るパイプライン回路のブロック構成を示すブロック構成図である。図9において、パイプライン回路30は、信号33から入力したデータを部分回路31a、31b、31c、31dによってパイプライン的に処理した後、信号34に出力する回路である。ここで、信号33および信号34は、複数ビットからなる信号である。
より詳細には、パイプライン回路30は、高い動作周波数と高いスループットを実現するために、4ステージのパイプライン回路で構成されている。すなわち、パイプライン回路30において、データ処理を行う回路は、5段のパイプライン・バッファ32a、32b、32c、32d、32eにより、4つの部分回路31a、31b、31c、31dに分割されている。
さらに、パイプライン回路30は、前段の回路(図示せず)および後続の回路(図示せず)との間に、パイプライン回路30で処理するデータのフロー制御のための入出力信号を備える。
具体的には、前段の回路(図示せず)からデータ要求信号43を入力し、前段の回路(図示せず)へデータ応答信号45を出力する。データ要求信号43は、前段の回路が信号33にデータを出力したことを示す信号である。一方、データ応答信号45は、信号33に出力されるデータをパイプライン・バッファ32a(すなわちパイプライン回路30)が入力可能であることを示す信号である。
また、後続の回路(図示せず)へデータ要求信号44を出力し、後続の回路(図示せず)からデータ応答信号46を入力する。データ要求信号44は、パイプライン・バッファ32e(すなわちパイプライン回路30)が信号34にデータを出力したことを示す信号である。一方、データ応答信号46は、信号34に出力されるデータを後続の回路が入力可能であることを示す信号である。
さらに、パイプライン回路30は、パイプライン・バッファ32a〜32eの間において、データのフロー制御のための信号を備える。
具体的には、パイプライン・バッファ32aは、前段の回路(図示せず)からデータ要求信号43を入力し、前段の回路(図示せず)へデータ応答信号45を出力することに加えて、次段のパイプライン・バッファ32bへデータ要求信号41aを出力し、パイプライン・バッファ32bからデータ応答信号42aを入力する。データ要求信号41aは、パイプライン・バッファ32aが信号38aにデータを出力したことを示す信号である。一方、データ応答信号42aは、信号38aに出力されるデータをパイプライン・バッファ32bが入力可能であることを示す信号である。
同様に、パイプライン・バッファ32bは、前段のパイプライン・バッファ32aからデータ要求信号41aを入力し、パイプライン・バッファ32aへデータ応答信号42aを出力することに加えて、次段のパイプライン・バッファ32cへデータ要求信号41bを出力し、パイプライン・バッファ32cからデータ応答信号42bを入力する。データ要求信号41bは、パイプライン・バッファ32bが信号38bにデータを出力したことを示す信号である。一方、データ応答信号42bは、信号38bに出力されるデータをパイプライン・バッファ32cが入力可能であることを示す信号である。
同様に、パイプライン・バッファ32cは、前段のパイプライン・バッファ32bからデータ要求信号41bを入力し、パイプライン・バッファ32bへデータ応答信号42bを出力することに加えて、次段のパイプライン・バッファ32dへデータ要求信号41cを出力し、パイプライン・バッファ32dからデータ応答信号42cを入力する。データ要求信号41cは、パイプライン・バッファ32cが信号38cにデータを出力したことを示す信号である。一方、データ応答信号42cは、信号38cに出力されるデータをパイプライン・バッファ32dが入力可能であることを示す信号である。
同様に、パイプライン・バッファ32dは、前段のパイプライン・バッファ32cからデータ要求信号41cを入力し、パイプライン・バッファ32cへデータ応答信号42cを出力することに加えて、次段のパイプライン・バッファ32eへデータ要求信号41dを出力し、パイプライン・バッファ32eからデータ応答信号42dを入力する。データ要求信号41dは、パイプライン・バッファ32dが信号38dにデータを出力したことを示す信号である。一方、データ応答信号42dは、信号38dに出力されるデータをパイプライン・バッファ32eが入力可能であることを示す信号である。
同様に、パイプライン・バッファ32eは、前段のパイプライン・バッファ32dからデータ要求信号41dを入力し、パイプライン・バッファ32dへデータ応答信号42dを出力することに加えて、後続の回路(図示せず)へデータ要求信号44を出力し、後続の回路(図示せず)からデータ応答信号46を入力する。
5段のパイプライン・バッファ32a、32b、32c、32d、32eは、それぞれ、6本の独立したクロック信号であるクロックP0、クロックP1、クロックP2、クロックP3、クロックP4、クロックP5のいずれか2つのクロックによって動作する。図9に示す例では、パイプライン・バッファ32aは、クロックP0,P1によって動作し、パイプライン・バッファ32bは、クロックP1,P2によって動作し、パイプライン・バッファ32cは、クロックP2,P3によって動作し、パイプライン・バッファ32dは、クロックP3,P4によって動作し、パイプライン・バッファ32eは、クロックP4,P5によって動作する。
ここで、クロックP0〜P5の周波数が、それぞれ、クロックP0〜P5の周波数の最大値に対して(M/N)倍(Mは正の整数、NはMより大きい正の整数)であるものと仮定する。また、クロックP0〜P5の周波数が最大値の場合のサイクル時間をTcycとしたとき、クロックP0〜P5の位相関係は、(1)クロックP0に対してクロックP1の位相がTcycだけ遅く、(2)クロックP1に対してクロックP2の位相がTcycだけ遅く、(3)クロックP2に対してクロックP3の位相がTcycだけ遅く、(4)クロックP3に対してクロックP4の位相がTcycだけ遅く、(5)クロックP4に対してクロックP5の位相がTcycだけ遅いものとする。
このとき、パイプライン回路30の前段のパイプライン・バッファから後段のパイプライン・バッファに対して、クロックP0〜P5のうち、あらかじめ定めた位相となるTcycだけ位相が遅れた連続する2つのクロック信号を、順に割り当てるとともに、隣接するパイプライン・バッファ間では、割り当てられた2つのクロック信号のうち、同一位相の1つのクロック信号を共有するように割り当てる。つまり、クロックP0〜P5のうち、各パイプライン・バッファ32a〜32eにあらかじめ定めた位相ずつ位相が遅れた連続する2つのクロック信号を順に割り当てる際に、前段のパイプライン・バッファに割り当てた後ろ側のクロック信号と、次段のパイプライン・バッファに割り当てた前側のクロック信号との位相を同一にする。具体的には、(a)パイプライン・バッファ32aにはクロックP0とクロックP1とを割り当てる。(b)パイプライン・バッファ32bにはクロックP1とクロックP2とを割り当てる。(c)パイプライン・バッファ32cにはクロックP2とクロックP3とを割り当てる。(d)パイプライン・バッファ32dにはクロックP3とクロックP4とを割り当てる。(e)パイプライン・バッファ32eにはクロックP4とクロックP5とを割り当てる。
したがって、前述のように、(a)パイプライン・バッファ32aはクロックP0とクロックP1とで動作する。(b)パイプライン・バッファ32bはクロックP1とクロックP2とで動作する。(c)パイプライン・バッファ32cはクロックP2とクロックP3とで動作する。(d)パイプライン・バッファ32dはクロックP3とクロックP4とで動作する。(e)パイプライン・バッファ32eはクロックP4とクロックP5とで動作する。
以上のように、各パイプライン・バッファ32a〜32eのそれぞれに対して、順に、クロックP0〜P5のうち、Tcycだけ位相が遅れた連続する2つのクロック信号を、隣接するパイプライン・バッファ間で位相が同一の1つのクロック信号を共有するように割り当てる点が、本第3の実施形態の特徴の一つである。かかる特徴により、(M/N)倍(Mは正の整数、NはMより大きい正の整数)に分周する有理数分周によってクロック周波数を低下させた場合であっても、正常に動作するフロー制御機能を実現することができる。
なお、クロックP0〜P5を生成する方法としては、例えば、第2の実施形態の図7に示したクロック信号分周回路28によって生成することができる。
次に、本発明の第3の実施形態にかかるパイプライン・バッファの詳細について、図10を参照しながら説明する。図10は、図9のパイプライン回路30を構成するパイプライン・バッファ32aのブロック構成例を示すブロック構成図である。なお、図10には、パイプライン回路30の第1段目のパイプライン・バッファ32aについて例示しているが、第2段目以降のパイプライン・バッファ32b、32c、32d、32eについても、同様のブロック構成によって構成するようにしても良い。
図10に例示するように、パイプライン・バッファ32aは、主な回路として、データバッファ55、入力制御回路56、出力制御回路57、セレクタ58を少なくとも含んで構成している。
データバッファ55は、入力制御回路56による制御に応じて、信号33に出力されたデータを一時的に格納する先入れ先出し(FIFO:First-In First-Out)バッファである。本実施形態では、データバッファ55は、最大2つまでデータを一時的に格納できるものとしている。パイプライン・バッファ32aのデータバッファ55は、クロックP0を入力し、クロックP0のタイミングでデータを格納する。
入力制御回路56は、データバッファ55に一時的に格納するデータの、データバッファ55への書き込みを制御する。また、入力制御回路56は、前段の回路と、データ要求信号43およびデータ応答信号45を介して、前段の回路からのデータの入力に関するフロー制御を行う。
データ要求信号43は、前段の回路が信号33にデータを出力したことを示す信号である。入力制御回路56は、データ要求信号43を参照して、前段の回路が信号33にデータを出力したことを認識する。一方、データ応答信号45は、信号33に出力されるデータをパイプライン・バッファ32aが入力可能であることを示す信号である。入力制御回路56は、信号33に出力されるデータを入力可能である場合には、その旨をデータ応答信号45に出力する。
また、入力制御回路56は、データバッファ55に入力制御信号51を出力する。入力制御信号51は、前段の回路が信号33に出力したデータを、データバッファ55に格納するか否かを指示する信号である。また、入力制御回路56は、データバッファ55および出力制御回路57に、書き込み位置信号52を出力する。書き込み位置信号52は、信号33に出力されたデータを入力する場合に、そのデータをデータバッファ55に格納する際の、データの書き込み先であるデータバッファ55内の位置を指示する信号である。
また、入力制御回路56は、出力制御回路57から、読み出し位置信号53を入力する。読み出し位置信号53は、データバッファ55に格納したデータを信号38aに出力する場合に、そのデータをデータバッファ55から読み出す際の、読み出し元であるデータバッファ55内の位置を指示する信号である。
入力制御回路56は、出力する書き込み位置信号52の値と、入力する読み出し位置信号53の値とから、データバッファ55にデータを格納する空きがあるか否かを判断する。空きがある場合は、データ応答信号45にデータを入力可能であることを示す値"1"を出力する。一方、空きがない場合には、データ応答信号45にデータを入力することができないことを示す値"0"を出力する。
入力制御回路56は、クロックP0を入力して、クロックP0のタイミングで、データ要求信号43、読み出し位置信号53の入力、および、データ応答信号45、入力制御信号51、書き込み位置信号52の出力を行う。
一方、出力制御回路57は、データバッファ55に一時的に格納したデータの、データバッファ55からの読み出し、および、信号38aへの出力を制御する。また、出力制御回路57は、次段のパイプライン・バッファ32bと、データ要求信号41aおよびデータ応答信号42aを介して、パイプライン・バッファ32bへのデータの出力に関するフロー制御を行う。
データ要求信号41aは、パイプライン・バッファ32aが信号38aにデータを出力したことを示す信号である。出力制御回路57は、データバッファ55に一時的に格納したデータを読み出して信号38aに出力する場合、その旨をデータ要求信号41aに出力する。一方、データ応答信号42aは、信号38aに出力されるデータを次段のパイプライン・バッファ32bが入力可能であることを示す信号である。出力制御回路57は、データ応答信号42aを参照して、信号38aに出力するデータを次段のパイプライン・バッファ32bが入力可能であることを認識する。
また、出力制御回路57は、セレクタ58および入力制御回路56に、読み出し位置信号53を出力する。データバッファ55にデータが格納されている場合、出力制御回路57は、読み出し位置信号53に、最も先に格納されたデータを読み出すようにセレクタ58を制御する値を出力する。
また、出力制御回路57は、入力制御回路56から、書き込み位置信号52を入力する。出力制御回路57は、出力する読み出し位置信号53の値と、入力する書き込み位置信号52の値とから、データバッファ55にデータが格納されているか否かを判断する。データが格納されている場合、読み出し位置信号53によりセレクタ58を制御して、最も先に格納されたデータを選択して信号38aに出力する。また、データ要求信号41aにデータを出力したことを示す値"1"を出力する。一方、データが格納されていない場合、出力制御回路57は、データ要求信号41aにデータを出力していないことを示す値"0"を出力する。
出力制御回路57は、クロックP1を入力して、クロックP1のタイミングでデータ応答信号42aの入力、および、読み出し位置信号53の出力を行う。一方、出力制御回路57において、書き込み位置信号52の入力およびデータ要求信号41aの出力に関する部分は、組み合わせ回路によって構成されている。したがって、出力制御回路57は、書き込み位置信号52の入力およびデータ要求信号41aの出力を、クロックP1のタイミングによらずに随時行う。
セレクタ58は、読み出し位置信号53を参照して、データバッファ55に格納された最大2つまでのデータのうち、いずれか1つを選択して信号38aに出力する。
以上、パイプライン・バッファ32aの構成の詳細を説明したが、本実施形態の他のパイプライン・バッファ32b〜32eについても、入力するクロック信号が異なるのみであり、前述したように、同様の構成である。例えば、パイプライン・バッファ32bの入力制御回路56とデータバッファ55とはクロックP1を入力し、出力制御回路57はクロックP2を入力する。
同様に、パイプライン・バッファ32cの入力制御回路56とデータバッファ55とはクロックP2を入力し、出力制御回路57はクロックP3を入力する。同様に、パイプライン・バッファ32dの入力制御回路56とデータバッファ55とはクロックP3を入力し、出力制御回路57はクロックP4を入力する。同様に、パイプライン・バッファ32eの入力制御回路56とデータバッファ55とはクロックP4を入力し、出力制御回路57はクロックP5を入力する。
(第3の実施形態の動作)
次に、図11、図12を参照して、図9の第3の実施形態によるパイプライン回路30の動作例について説明する。図11は、クロックFを分周比(M/N)=(7/10)で分周してクロックP0〜P5を生成した場合における、図9のパイプライン回路30によるデータ処理のタイミング関係の一例を説明するためのタイムチャートであり、フロー制御によるパイプライン動作の停止(パイプライン・ストール)が発生しない場合について示している。また、図12は、クロックFを分周比(M/N)=(7/10)で分周してクロックP0〜P5を生成した場合における、図9のパイプライン回路30によるデータ処理のタイミング関係の他の例を説明するためのタイムチャートであり、フロー制御によるパイプライン動作の停止(パイプライン・ストール)が発生する場合について示している。
(パイプライン停止が発生しない場合の動作)
まず、クロックFを分周比(M/N)=(7/10)で分周してクロックP0〜P5を生成した場合を例にとって、パイプライン回路30においてフロー制御によるパイプライン動作の停止(パイプライン・ストール)が発生しない場合について、図11のタイムチャートを参照して説明する。
まず、データD0の処理について説明する。図11のタイムチャートにおいて、前段の回路(図示せず)は、タイミングT0において、信号33にデータD0を出力するとともに、データ要求信号43にデータを出力したことを示す値"1"を出力する。次に、クロックP0の立ち上がりタイミングの一つであるタイミングT1において、パイプライン回路30のパイプライン・バッファ32aは、データ要求信号43から値"1"を入力して、信号33にデータが出力されていることを認識する。ここで、タイミングT1において、パイプライン・バッファ32aは、データを入力可能であるものとする。したがって、パイプライン・バッファ32aは、クロックP0の立ち上がりタイミングの一つであるタイミングT1でデータD0を入力して、パイプライン・バッファ32aのデータバッファ55に格納する。
このとき、パイプライン・バッファ32aは、データを入力可能な旨を前段の回路に通知するために、データ応答信号45に値"1"を出力している。前段の回路は、データ応答信号45から値"1"を入力して、パイプライン・バッファ32aに出力したデータD0がパイプライン・バッファ32aに入力されて、かつ、次のデータD1を出力することができるものと認識する。
また、タイミングT1におけるパイプライン・バッファ32aにおいて、読み出し位置信号53には、データバッファ55に最も先に格納されたデータを信号38aに出力するように、セレクタ58を制御する値が出力されている。したがって、パイプライン・バッファ32aは、入力したデータD0を、直ちに部分回路31aに出力するとともに、データ要求信号41aには、信号38aに部分回路31aを介してデータを出力したことを示す値"1"を出力する。部分回路31aは、該データD0の処理を行う。
次に、クロックP1の立ち上がりタイミングの一つであるタイミングT2において、パイプライン・バッファ32bは、データ要求信号41aから値"1"を入力して、信号38aにデータが出力されていることを認識する。ここで、タイミングT2において、パイプライン・バッファ32bは、データを入力可能であるものとする。したがって、パイプライン・バッファ32bは、クロックP1のタイミングの一つであるタイミングT2で、部分回路21aによって処理されたデータD0を入力して、パイプライン・バッファ32bのデータバッファ55に格納する。
このとき、パイプライン・バッファ32bは、データを入力可能な旨を前段のパイプライン・バッファ32aに通知するために、データ応答信号42aに値"1"を出力している。パイプライン・バッファ32aは、データ応答信号42aから値"1"を入力して、パイプライン・バッファ32bに出力したデータD0がパイプライン・バッファ32bに入力されて、かつ、次のデータD1を出力することができるものと認識する。
また、タイミングT2におけるパイプライン・バッファ32bにおいて、読み出し位置信号53には、データバッファ55に最も先に格納されたデータを信号38bに出力するように、セレクタ58を制御する値が出力されている。したがって、パイプライン・バッファ32bは、入力したデータD0を、直ちに部分回路31bに出力するとともに、データ要求信号41bには、信号38bに部分回路31bを介してデータを出力したことを示す値"1"を出力する。部分回路31bは、該データD0の処理を行う。
以降、同様にして、クロックP2の立ち上がりタイミングの一つであるタイミングT3において、パイプライン・バッファ32cは、部分回路31bによって処理された該データD0をパイプライン・バッファ32cのデータバッファ55に格納し、さらに、入力した該データD0を直ちに部分回路31cに出力する。部分回路31cは、該データD0の処理を行う。次に、クロックP3の立ち上がりタイミングの一つであるタイミングT4において、パイプライン・バッファ32dは、部分回路31cによって処理された該データD0をパイプライン・バッファ32dのデータバッファ55に格納し、さらに、入力した該データD0を直ちに部分回路31dに出力する。部分回路31dは、該データD0の処理を行う。
最後に、クロックP4の立ち上がりタイミングの一つであるタイミングT5において、パイプライン・バッファ32eは、部分回路31dによって処理された該データD0をパイプライン・バッファ32eのデータバッファ55に格納し、さらに、入力した該データD0を直ちに信号34に出力する。
次に、次のデータであるデータD1の処理について説明する。図11のタイムチャートにおいて、前段の回路(図示せず)は、タイミングT1において、データ応答信号45から値"1"を入力して、データD0がパイプライン・バッファ32aに入力されて、かつ、次のデータD1を出力することができると認識する。したがって、前段の回路(図示せず)は、タイミングT1において、信号33に次のデータであるデータD1を出力するとともに、データ要求信号43にデータを出力したことを示す値"1"を出力する。次に、クロックP0の立ち上がりタイミングの一つであるタイミングT2において、パイプライン回路30のパイプライン・バッファ32aは、データ要求信号43から値"1"を入力して、信号33に次のデータが出力されていることを認識する。ここで、タイミングT2において、パイプライン・バッファ32aは、データを入力可能であるものとする。したがって、パイプライン・バッファ32aは、クロックP0の立ち上がりタイミングの一つであるタイミングT2でデータD1を入力して、パイプライン・バッファ32aのデータバッファ55に格納する。
このとき、パイプライン・バッファ32aは、データを入力可能な旨を前段の回路に通知するために、データ応答信号45に値"1"を出力している。前段の回路は、データ応答信号45から値"1"を入力して、パイプライン・バッファ32aに出力したデータD1がパイプライン・バッファ32aに入力されて、かつ、次のデータD2を出力することができるものと認識する。
また、タイミングT2におけるパイプライン・バッファ32aにおいて、読み出し位置信号53には、データバッファ55に最も先に格納されたデータを信号38aに出力するように、セレクタ58を制御する値が出力されている。したがって、パイプライン・バッファ32aは、入力したデータD1を、直ちに部分回路31aに出力するとともに、データ要求信号41aには、信号38aに部分回路31aを介してデータを出力したことを示す値"1"を出力する。部分回路31aは、該データD1の処理を行う。
次に、クロックP1の立ち上がりタイミングの一つであるタイミングT3において、パイプライン・バッファ32bは、データ要求信号41aから値"1"を入力して、信号38aに次のデータが出力されていることを認識する。ここで、タイミングT3において、パイプライン・バッファ32bは、データを入力可能であるものとする。したがって、パイプライン・バッファ32bは、クロックP1のタイミングの一つであるタイミングT3で、部分回路21aによって処理されたデータD1を入力して、パイプライン・バッファ32bのデータバッファ55に格納する。
このとき、パイプライン・バッファ32bは、データを入力可能な旨を前段のパイプライン・バッファ32aに通知するために、データ応答信号42aに値"1"を出力している。パイプライン・バッファ32aは、データ応答信号42aから値"1"を入力して、パイプライン・バッファ32bに出力したデータD1がパイプライン・バッファ32bに入力されて、かつ、次のデータD2を出力することができるものと認識する。
また、タイミングT3におけるパイプライン・バッファ32bにおいて、読み出し位置信号53には、データバッファ55に最も先に格納されたデータを信号38bに出力するように、セレクタ58を制御する値が出力されている。したがって、パイプライン・バッファ32bは、入力したデータD1を、直ちに部分回路31bに出力するとともに、データ要求信号41bには、信号38bに部分回路31bを介してデータを出力したことを示す値"1"を出力する。部分回路31bは、該データD1の処理を行う。
以降、同様にして、クロックP2の立ち上がりタイミングの一つであるタイミングT4において、パイプライン・バッファ32cは、部分回路31bによって処理された該データD1をパイプライン・バッファ32cのデータバッファ55に格納し、さらに、入力した該データD1を直ちに部分回路31cに出力する。部分回路31cは、該データD1の処理を行う。次に、クロックP3の立ち上がりタイミングの一つであるタイミングT5において、パイプライン・バッファ32dは、部分回路31cによって処理された該データD1をパイプライン・バッファ32dのデータバッファ55に格納し、さらに、入力した該データD1を直ちに部分回路31dに出力する。部分回路31dは、該データD1の処理を行う。
最後に、クロックP4の立ち上がりタイミングの一つであるタイミングT6において、パイプライン・バッファ32eは、部分回路31dによって処理された該データD1をパイプライン・バッファ32eのデータバッファ55に格納し、さらに、入力した該データD1を直ちに信号34に出力する。
以降も、同様に、前段の回路(図示せず)が、タイミングT2、T4、T5、T6、T8、T10それぞれにおいて、信号33に出力したデータD2〜D7は、パイプライン回路30によって処理された後、タイミングT7、T9、T10、T11、T13、T15それぞれにおいて、信号34に出力される。
(パイプライン停止が発生する場合の動作)
次に、クロックFを分周比(M/N)=(7/10)で分周してクロックP0〜P5を生成した場合を例にとって、パイプライン回路30においてフロー制御によるパイプライン動作の停止(パイプライン・ストール)が発生する場合について、図12のタイムチャートを参照して説明する。図12は、前述したように、フロー制御によるパイプライン動作の停止(パイプライン・ストール)が発生する場合における図9のパイプライン回路30によるデータ処理のタイミング関係について示している。
図11と図12とのタイムチャートにおけるデータ処理例の違いは、図12においては、タイミングT7において、信号34に出力されたデータD1を後続の回路(図示せず)が入力することができない状態が発生していることにある。第1の実施形態や第2の実施形態の場合のように、フロー制御機能を備えていないパイプライン回路10やパイプライン回路20においては、かくのごとく、後続の回路や次段のパイプライン・レジスタにデータを入力することができない状況が発生すると、データを紛失してしまうという問題がある。なぜなら、データを入力することができないにも関わらず、次のデータが、パイプライン回路の前段から順々に出力されてくるからである。
一方、本第3の実施形態のように、フロー制御機能を備えたパイプライン回路30においては、データを入力することができない状況が発生する場合であっても、適宜、パイプライン動作を停止することにより、データの紛失を回避することができる。
以降では、まず、図12のタイムチャートにおいて、タイミングT7において、後続の回路(図示せず)が入力することができなくなるデータD1の処理について説明する。
(タイミングT2〜T6における動作)
まず、クロックP0の立ち上がりタイミングの一つであるタイミングT2において、パイプライン回路30のパイプライン・バッファ32aは、前段の回路(図示せず)が信号33に出力したデータD1を入力して、パイプライン・バッファ32aのデータバッファ55に格納し、さらに、入力した該データD1を直ちに信号38aに出力し、部分回路31aに出力する。部分回路31aは、該データD1の処理を行う。
次に、クロックP1の立ち上がりタイミングの一つであるタイミングT3において、パイプライン・バッファ32bは、部分回路31aによって処理された該データD1をパイプライン・バッファ32bのデータバッファ55に格納し、さらに、信号38bに出力し、部分回路31bに出力する。部分回路31bは、該データD1の処理を行う。
次に、クロックP2の立ち上がりタイミングの一つであるタイミングT4において、パイプライン・バッファ32cは、部分回路31bによって処理された該データD1をパイプライン・バッファ32cのデータバッファ55に格納し、さらに、信号38cに出力し、部分回路31cに出力する。部分回路31cは、該データD1の処理を行う。
次に、クロックP3の立ち上がりタイミングの一つであるタイミングT5において、パイプライン・バッファ32dは、部分回路31cによって処理された該データD1をパイプライン・バッファ32dのデータバッファ55に格納し、さらに、信号38dに出力し、部分回路31dに出力する。部分回路31dは、該データD1の処理を行う。
次に、クロックP4の立ち上がりタイミングの一つであるタイミングT6において、パイプライン・バッファ32eは、部分回路31dによって処理された該データD1をパイプライン・バッファ32eのデータバッファ55に格納し、さらに、信号34に出力する。
ここで、クロックP3の立ち上がりタイミングの一つでもあるタイミングT6においては、パイプライン・バッファ32eの前段のパイプライン・バッファ32dは、次のデータD2を信号38dに出力し、部分回路31dに出力する。部分回路31dは、該データD2の処理を行っている。
(タイミングT7における動作)
ところが、後続の回路(図示せず)は、前述したように、パイプライン・バッファ32eからタイミングT6で信号34に出力されたデータD1を、タイミングT7において、入力することができないものと仮定する。このとき、後続の回路(図示せず)は、データ応答信号46に値"0"を出力することによって、データを入力することができないことを、パイプライン・バッファ32eに通知してくる。
したがって、パイプライン・バッファ32eは、クロックP5の立ち上がりタイミングの一つであるタイミングT7において、データ応答信号46から値"0"を入力して、後続の回路がデータD1を入力することができなかったことを認識する。その結果、パイプライン・バッファ32eは、読み出し位置信号53の値を変更することなく、引き続き、信号34にデータD1を出力するように制御する。また、パイプライン・バッファ32eは、タイミングT7において、データD1をパイプライン・バッファ32eのデータバッファ55に継続して格納することに加えて、前段のパイプライン・バッファ32dから信号38dに出力されている次のデータD2を入力してパイプライン・バッファ32eのデータバッファ55に格納する。
ここで、パイプライン・バッファ32a〜32eの各データバッファ55は、データを最大2つまで格納可能としている。したがって、パイプライン・バッファ32eに、データD1と次のデータD2とを同時に格納することができる。しかし、2つを超えるデータは、パイプライン・バッファ32eのデータバッファ55には格納することができないので、かかる場合には、パイプライン・バッファ32eは、データ応答信号42dに値"0"を出力することによって、その旨を、前段のパイプライン・バッファ32dに通知する。
(タイミングT8における動作)
ここで、タイミングT8において、後続の回路(図示せず)は、データD1を入力することができるものと仮定する。かかる場合には、後続の回路は、パイプライン・バッファ32eから信号34に出力されたデータD1を入力するとともに、データ応答信号46に値"1"を出力することによって、データD1を入力して、かつ、次のデータD2を入力することができることをパイプライン・バッファ32eに通知する。したがって、パイプライン・バッファ32eは、データ応答信号46から値"1"を入力して、後続の回路がデータD1を入力して、かつ、次のデータD2を出力することができることを認識する。その結果、パイプライン・バッファ32eは、クロックP5の立ち上がりタイミングの一つであるタイミングT8において、読み出し位置信号53の値を変更して、パイプライン・バッファ32eのデータバッファ55に格納している次のデータD2を信号34に出力する。
また、パイプライン・バッファ32eは、データD1の出力が完了して、パイプライン・バッファ32eのデータバッファ55には空きが1つできたため、データ応答信号42dに値"1"を出力することによって、データを入力可能であることを、前段のパイプライン・バッファ32dに通知する。
また、クロックP3の立ち上がりタイミング一つでもあるタイミングT8においては、パイプライン・バッファ32eの前段のパイプライン・バッファ32dは、次のデータD3を信号38dに出力し、部分回路31dに出力する。部分回路31dは、該データD3の処理を行っている。
(タイミングT9における動作)
ここで、タイミングT9においては、後続の回路(図示せず)は、データD2を入力することができるものと仮定する。かかる場合には、後続の回路は、パイプライン・バッファ32eから信号34に出力されたデータD2を入力するとともに、データ応答信号46に値"1"を出力することによって、データD2を入力したことをパイプライン・バッファ32eに通知する。したがって、パイプライン・バッファ32eは、データ応答信号46から値"1"を入力して、後続の回路がデータD2を入力して、かつ、次のデータD3を出力することができることを認識する。
しかし、タイミングT9は、クロックP5の立ち上がりタイミングではないので、パイプライン・バッファ32eは、読み出し位置信号53の値を変更しないで、信号34にデータD2を引き続き出力する。
一方、タイミングT9は、クロックP4の立ち上がりタイミングの一つであるので、パイプライン・バッファ32eは、データD2を継続してパイプライン・バッファ32eのデータバッファ55に格納していることに加えて、信号38dに出力されている次のデータD3を入力してパイプライン・バッファ32eのデータバッファ55に格納する。しかし、2つのデータを超えて、パイプライン・バッファ32eのデータバッファ55にはデータを格納することができないので、パイプライン・バッファ32eは、データ応答信号42dに値"0"を出力することによって、その旨を、前段のパイプライン・バッファ32dに通知する。
(タイミングT10における動作)
次に、クロックP5の立ち上がりタイミングの一つであるタイミングT10において、パイプライン・バッファ32eは、データ応答信号46から値"1"を入力して、後続の回路がデータD2を入力して、かつ、次のデータD3を出力することができることを認識する。その結果、パイプライン・バッファ32eは、読み出し位置信号53の値を変更して、次のデータD3を信号34に出力する。一方、後続の回路は、パイプライン・バッファ32eから信号34に出力された該データD3を入力するとともに、データ応答信号46に値"1"を出力することによって、データD3を入力し、かつ、次のデータD4を入力することができることをパイプライン・バッファ32eに通知する。
(タイミングT11以降における動作)
以降も、同様に、パイプライン回路30によって処理されたデータD4〜D7それぞれは、タイミングT11、T13、T15、T16それぞれにおいて、パイプライン・バッファ32eがデータ応答信号46から値"1"を入力することにより、パイプライン・バッファ32eから信号34に出力される。後続の回路は、それらのデータD4〜D7を順次入力する。
以上、クロックP0〜P5の順に位相がTcycずつ遅れた6本のクロック信号(クロックP0〜P5)を使用する場合について、説明した。しかし、本実施形態は、かかる場合に限らず、任意の本数のクロック信号を用いる場合であっても、同様に適用することができる。具体的には、パイプライン回路30の前段のパイプライン・バッファから後段のパイプライン・バッファに対して、任意の本数のクロック信号のうち、順に、あらかじめ定めた位相ずつ位相が遅れたクロック信号を、それぞれ2つずつ、順に、割り当て、かつ、隣接するパイプライン・バッファ間で、同一位相の1つのクロック信号を共有するように割り当てれば良い。
(第3の実施形態の効果)
以上に説明したように、本第3の実施形態によるパイプライン回路30は、クロック周波数を(M/N)倍(Mは正の整数、NはMよりも大きい正の整数)で規定される有理数倍で分周して低下させる場合において、後続の回路やパイプライン回路を構成する各パイプライン・バッファが、データを入力することができない場合があったとしても、データ応答信号42a〜42d、46を用いたフロー制御を行うことによって、データを正常に処理することができる。
その理由は、本第3の実施形態によるパイプライン回路30は、前段のパイプライン・バッファから後段のパイプライン・バッファに対して、クロックP0〜P5のうち、あらかじめ定めた位相ずつ位相が遅れた連続する2つのクロックをそれぞれ順に割り当て、かつ、隣接するパイプライン・バッファ間で同一位相の1つのクロック信号を共有するように割り当てているからである。その結果、有理数倍分周してクロック周波数を低下させた場合であっても、フロー制御機能が正常に動作するからである。而して、該フロー制御機能が、適宜、パイプライン動作の停止制御を行うので、データの紛失を回避することができる。
一方、第1の実施形態や第2の実施形態の場合のように、パイプライン回路を構成する各パイプライン・バッファにそれぞれ単一のクロック信号を割り当てた構成では、仮に、フロー制御機能を付加したとしても、有理数倍分周してクロック周波数を低下させた場合に、フロー制御機能が正常に動作しないという問題がある。この問題は、パイプライン回路において、データ応答信号42a〜42dのように、処理するデータが転送される方向とは逆の信号がある場合、あるデータ応答信号を出力するパイプライン・バッファに割り当てたクロック信号と、該データ応答信号を入力する前段のパイプライン・バッファに割り当てたクロック信号との位相が異なると、前段のパイプライン・バッファは、次段のパイプライン・バッファからの該データ応答信号を入力することができない場合が発生することに、その原因がある。
例をあげて、この原因をより詳細に説明する。仮に、図9のパイプライン回路30におけるパイプライン・バッファ32cがすべてクロックP2のタイミングのみで動作するものと仮定する。このとき、パイプライン・バッファ32cは、次段のパイプライン・バッファ32dからのデータ応答信号42cをクロックP2の立ち上がりのタイミングで入力することになる。
図11において、例えば、パイプライン・バッファ32dは、クロックP3の立ち上がりタイミングの一つである、タイミングT5やタイミングT6でデータ応答信号42cを出力する。一方、パイプライン・バッファ32dがタイミングT5で出力したデータ応答信号42cを、前段のパイプライン・バッファ32cが入力するのは、クロックP2の次の立ち上がりのタイミングであるタイミングT7である。同様に、パイプライン・バッファ32dがタイミングT6で出力したデータ応答信号42cを、前段のパイプライン・バッファ32cが入力するのも、同様に、タイミングT7である。
すわなち、次段のパイプライン・バッファ32dがタイミングT5で出力したデータ応答信号42cを、前段のパイプライン・バッファ32cがタイミングT7で入力する前に、次段のパイプライン・バッファ32dからは次のデータ応答信号42cがタイミングT6で出力されるので、前段のパイプライン・バッファ32cは、次段のパイプライン・バッファ32dがタイミングT5で出力したデータ応答信号42cを入力することができない。
一方、本第3の実施形態によるパイプライン回路30は、前段のパイプライン・バッファから後段のパイプライン・バッファに対して、クロックP0〜P5のうち、あらかじめ定めた位相ずつ位相が遅れた連続する2つのクロック信号をそれぞれ順に割り当て、かつ、隣接するパイプライン・バッファ間で同一位相の1つのクロック信号を共有するように割り当てることによって、あるデータ応答信号を出力する後段のパイプライン・バッファの入力制御回路56と、該データ応答信号を入力する前段のパイプライン・バッファの出力制御回路57とが、同一のクロック信号で動作する。このため、前段のパイプライン・バッファは、次段のパイプライン・バッファからの該データ応答信号を入力できない場合が発生することがないので、有理数倍分周してクロック周波数を低下させた場合であっても、本第3の実施形態のフロー制御機能は正常に動作するという特徴を奏することができる。
また、フロー制御によってパイプライン動作の停止が発生しない図11の例においては、前段の回路が出力したデータが、パイプライン回路30において処理された後、信号34に出力されるまでに、クロックFの5サイクル分の時間がかかる(例えば、データD0はタイミングT0で信号33を介してパイプライン回路30に入力され、タイミングT5でパイプライン回路30から信号34に出力される)。すなわち、パイプライン回路30のデータ処理のレイテンシは、クロックFの5サイクルである。
一方、パイプライン回路30は、部分回路31a、31b、31c、31dの4ステージのパイプライン回路によって構成されていて、データ処理がパイプライン動作により実現されている。そのため、レイテンシが5サイクルであるにも関わらず、クロックP0〜P5の各サイクルごとにデータ処理を行うことができる。すなわち、クロックFの10サイクルのうち7サイクルごとにデータ処理を行うことができるので、パイプライン回路30のデータ処理のスループットは、(7/10)データ/サイクル(クロックFの1サイクル当たり(7/10)のデータを処理することを示す)である。
すなわち、本第3の実施形態では、フロー制御によってパイプライン動作の停止が発生しない場合には、クロック周波数を(7/10)倍にした場合、スループットは(7/10)倍になる一方、レイテンシは1倍のままであり、従来技術のように増大することはない。
また、フロー制御によってパイプライン動作の停止が発生する図12の例では、前段の回路が出力したデータが、パイプライン回路30において処理された後、信号34に出力されるまでに、最大クロックFの6サイクル分の時間がかかる(例えば、データD2はタイミングT2で信号33を介してパイプライン回路30に入力され、タイミングT8でパイプライン回路30から信号34に出力される)。すなわち、パイプライン回路30のデータ処理のレイテンシは、クロックFの6サイクルである。これは、パイプライン回路30がクロックFの1サイクル分だけ停止したからである。
一方、スループットについても、パイプライン回路30がクロックFの1サイクル分だけ停止した分だけ低下する。具体的には、停止した1サイクルも含めたクロックFの11サイクルのうち7サイクルにおいてデータ処理を行ったので、パイプライン回路30のデータ処理のスループットは、(7/11)データ/サイクル(クロックFの1サイクル当たり(7/11)のデータを処理することを示す)である。
より一般的には、本第3の実施形態によると、フロー制御によってパイプライン動作が停止しない場合、周波数を(M/N)倍(Mは正の整数、NはMより大きい正の整数)にすると、スループットは(M/N)倍になる。一方、レイテンシは1倍すなわち増大することはない。また、フロー制御によってパイプライン動作がSサイクル(Sは正整数)停止した場合、周波数を(M/N)倍(Mは正の整数、NはMより大きい正の整数)にすると、スループットは{M/(N+S)}倍になる。一方、レイテンシはSサイクルだけしか増加しない。
このため、スループットが必要性能に十分足りている場合、処理レイテンシを増大させることなく、クロック周波数を(M/N)倍で規定される任意の有理数倍で柔軟に低下させることができるので、パイプライン回路30の消費電力を低減することができるという効果が得られる。また、クロック周波数を低下させても、処理レイテンシが増大しないか、あるいは、パイプラインが停止した分だけしか増大しないので、パイプライン回路30の処理結果を後続の処理で使用する場合でも、処理全体のスループットが低下しないという効果が得られる。
以上、本発明の好適実施例の構成を説明した。しかし、斯かる実施例は、本発明の単なる例示に過ぎず、何ら本発明を限定するものではないことに留意されたい。本発明の要旨を逸脱することなく、特定用途に応じて種々の変形変更が可能であることが、当業者には容易に理解できよう。例えば、本発明の実施態様は、課題を解決するための手段における構成(1)及び(6)に加え、次のような構成として表現できる。下記(2)−(5)及び(7)−(8)なる番号は、請求項の項番号にそれぞれ対応している。
(2)前記P本のクロック信号は、(M/N)倍(Mは正整数、NはMより大きい正整数)で規定された分周比に基づいて、高速クロック信号の連続するN個のクロックパルスのうち、(N−M)個分のクロックパルスをマスクすることにより、当該高速クロック信号を(M/N)分周して生成したクロック信号であって、前記P本のクロック信号は、前記第1のクロック信号から第Pのクロック信号の順に、前記高速クロック信号のサイクル時間に等しい時間ずつ位相が遅い上記(1)のパイプライン回路。
(3)隣接する2つのパイプライン・バッファのうち、後段のパイプライン・バッファが出力し、前段のパイプライン・バッファが入力する信号について、前記後段のパイプライン・バッファが備える前記信号を出力する回路と、前記前段のパイプライン・バッファが備える前記信号を入力する回路とは、同一のクロック信号で動作する上記(1)または(2)のパイプライン回路。
(4)パイプライン回路を搭載する半導体装置において、当該パイプライン回路として、上記(1)ないし(3)のいずれかのパイプライン回路を搭載する半導体装置。
(5)当該半導体装置が、多数のイベントをリアルタイムに処理する通信用サーバ装置である上記(4)の半導体装置。
(7)前記P本のクロック信号は、(M/N)倍(Mは正整数、NはMより大きい正整数)で規定された分周比に基づいて、高速クロック信号の連続するN個のクロックパルスのうち、(N−M)個分のクロックパルスをマスクすることにより、当該高速クロック信号を(M/N)分周して生成したクロック信号であって、前記P本のクロック信号は、前記第1のクロック信号から第Pのクロック信号の順に、前記高速クロック信号のサイクル時間に等しい時間ずつ位相が遅い上記(6)のパイプライン制御方法。
(8)隣接する2つのパイプライン・バッファのうち、後段のパイプライン・バッファが出力し、前段のパイプライン・バッファが入力する信号について、前記後段のパイプライン・バッファが備える前記信号を出力する回路と、前記前段のパイプライン・バッファが備える前記信号を入力する回路とは、同一のクロック信号で動作する上記(6)または(7)のパイプライン制御方法。
上述の実施の形態では、本発明をハードウェアの構成として説明したが、本発明は、これに限定されるものではない。本発明は、任意の処理を、CPU(Central Processing Unit)にコンピュータプログラムを実行させることにより実現することも可能である。)
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(random access memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2009年7月8日に出願された日本出願特願2009−161813を基礎とする優先権を主張し、その開示の全てをここに取り込む。