(57)【要約】【課題】  小さい容量のＦＩＦＯを用いることができるカウンタ装置およびカウント方法を提供する。【解決手段】  カウンタ装置は、カウント値の下位ビットをカウントする第１カウンタと、前記第１カウンタのカウントが終了した場合に発生するキャリーを中継するＦＩＦＯと、前記ＦＩＦＯによって中継された前記キャリーに応じて前記カウント値の上位ビットをカウントする第２カウンタと、を備え、前記ＦＩＦＯのデータ量がしきい値を超えている場合に前記キャリーが発生した場合には、当該キャリーは前記第１カウンタに仮書き込みされ、前記ＦＩＦＯのデータ量が前記しきい値以下であってかつキャリーが発生していない場合に、前記第１カウンタにキャリーが仮書き込みされている場合には、当該仮書き込みされているキャリーが前記ＦＩＦＯに送られる。【選択図】  図２
2014107793.tif 000002
【特許請求の範囲】
【請求項１】
カウント値の下位ビットをカウントする第１カウンタと、
前記第１カウンタのカウントが終了した場合に発生するキャリーを中継するＦＩＦＯと、
前記ＦＩＦＯによって中継された前記キャリーに応じて前記カウント値の上位ビットをカウントする第２カウンタと、を備え、
前記ＦＩＦＯのデータ量がしきい値を超えている場合に前記キャリーが発生した場合には、当該キャリーは前記第１カウンタに仮書き込みされ、
前記ＦＩＦＯのデータ量が前記しきい値以下であってかつキャリーが発生していない場合に、前記第１カウンタにキャリーが仮書き込みされている場合には、当該仮書き込みされているキャリーが前記ＦＩＦＯに送られることを特徴とするカウンタ装置。
【請求項２】
前記第１カウンタは、前記第１カウンタにキャリーが仮書き込みされているか、当該仮書き込みが解消したか、を識別するためのデータを格納することを特徴とする請求項１記載のカウンタ装置。
【請求項３】
前記ＦＩＦＯには、前記しきい値よりも小さい他のしきい値が設けられ、
キャリーが発生していない場合で、前記ＦＩＦＯのデータ量が前記しきい値を超えていなければ、前記仮書き込みされているキャリーが前記ＦＩＦＯに送られ、
キャリーが発生している場合には、前記ＦＩＦＯのデータ量が前記他のしきい値以下であれば、当該キャリーは前記第１カウンタに仮書き込みされることを特徴とする請求項１または２記載のカウンタ装置。
【請求項４】
前記第１カウンタは複数設けられ、
前記複数の第１カウンタから前記ＦＩＦＯに送られるキャリーの優先順位を決定する調停部を備えることを特徴とする請求項１〜３のいずれか一項に記載のカウンタ装置。
【請求項５】
カウント値の下位ビットをカウントする第１カウンタと、前記第１カウンタのカウントが終了した場合に発生するキャリーを中継するＦＩＦＯと、前記ＦＩＦＯによって中継された前記キャリーに応じて前記カウント値の上位ビットをカウントする第２カウンタと、を備えるカウンタ装置において、
前記ＦＩＦＯのデータ量がしきい値を超えている場合に前記キャリーが発生した場合には、当該キャリーを前記第１カウンタに仮書き込みし、
前記ＦＩＦＯのデータ量が前記しきい値以下であってかつキャリーが発生していない場合に、前記第１カウンタにキャリーが仮書き込みされている場合には、当該仮書き込みされているキャリーを前記ＦＩＦＯに送ることを特徴とするカウント方法。
【請求項６】
前記ＦＩＦＯには、前記しきい値よりも小さい他のしきい値が設けられ、
キャリーが発生していない場合で、前記ＦＩＦＯのデータ量が前記しきい値を超えていなければ、前記仮書き込みされているキャリーが前記ＦＩＦＯに送られ、
キャリーが発生している場合には、前記ＦＩＦＯのデータ量が前記他のしきい値以下であれば、当該キャリーは前記第１カウンタに仮書き込みされることを特徴とする請求項５記載のカウント方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カウンタ装置およびカウント方法に関する。
【背景技術】
【０００２】
伝送装置において、例えばユーザ毎の帯域を保証するためにカウンタを用いてデータ量の観測が行われている。例えば、全カウント値の下位ビットをカウントする高速カウンタと、該高速カウンタとは別個に設けられ全カウント値の上位ビットをカウントする低速カウンタとを備えたカウンタ回路（特許文献１参照）が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１６０３５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、例えば、異なるユーザのカウントが連続すると、異なるユーザに対して外部メモリへの書き込み（キャリー）が発生する可能性があり、外部メモリ（低速カウンタ相当）用のＦＩＦＯに大きな容量が必要となる。
【０００５】
本発明は上記課題に鑑みなされたものであり、小さい容量のＦＩＦＯを用いることができるカウンタ装置およびカウント方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、明細書開示のカウンタ装置は、カウント値の下位ビットをカウントする第１カウンタと、前記第１カウンタのカウントが終了した場合に発生するキャリーを中継するＦＩＦＯと、前記ＦＩＦＯによって中継された前記キャリーに応じて前記カウント値の上位ビットをカウントする第２カウンタと、を備え、前記ＦＩＦＯのデータ量がしきい値を超えている場合に前記キャリーが発生した場合には、当該キャリーは前記第１カウンタに仮書き込みされ、前記ＦＩＦＯのデータ量が前記しきい値以下であってかつキャリーが発生していない場合に、前記第１カウンタにキャリーが仮書き込みされている場合には、当該仮書き込みされているキャリーが前記ＦＩＦＯに送られる。
【発明の効果】
【０００７】
明細書開示のカウンタ装置およびカウント方法によれば、小さい容量のＦＩＦＯを用いることができる。
【図面の簡単な説明】
【０００８】
【図１】実施例１に係る伝送装置の構成を説明するためのブロック図である。
【図２】カウンタ装置の詳細な構成を説明するためのブロック図である。
【図３】（ａ）は加算器の真理値表であり、（ｂ）は参照加算器の真理値表であり、（ｃ）および（ｄ）は内部メモリの割り当てであり、（ｅ）および（ｆ）はＦＩＦＯの割り当てであり、（ｇ）は外部メモリの割り当てである。
【図４】カウンタ装置の動作の一例を表すフローチャートである。
【図５】カウンタ装置の動作の一例を表すフローチャートである。
【図６】実施例２に係るカウンタ装置の詳細な構成を説明するためのブロック図である。
【図７】（ａ）は加算器の真理値表であり、（ｂ）は参照加算器の真理値表であり、（ｃ）および（ｄ）は内部メモリの割り当てであり、（ｅ）および（ｆ）はＦＩＦＯの割り当てであり、（ｇ）は外部メモリの割り当てである。
【図８】カウンタ装置の動作の一例を表すフローチャートである。
【図９】カウンタ装置の動作の一例を表すフローチャートである。
【図１０】実施例３に係るカウンタ装置の詳細な構成を説明するためのブロック図である。
【図１１】調停器の真理値表である。
【図１２】調停器による調停処理を表すフロー図である。
【図１３】実施例４に係るカウンタ装置の詳細な構成を説明するためのブロック図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照しつつ、実施例について説明する。
【実施例１】
【００１０】
図１は、実施例１に係る伝送装置１００の構成を説明するためのブロック図である。図１を参照して、伝送装置１００は、フォーマット変換部１０、出力側帯域制御部２０、宛先決定部３０、入力側帯域制御部４０、装置内フォーマット変換部５０、外部メモリ６０、ＣＰＵ７０などを備える。伝送装置１００は、一例として、伝送装置の回線インタフェースボードに搭載される。
【００１１】
一例として、フォーマット変換部１０、出力側帯域制御部２０、宛先決定部３０、入力側帯域制御部４０および装置内フォーマット変換部５０は、ＦＰＧＡ（Ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）によって構成されている。外部メモリ６０は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュメモリなどである。ＣＰＵ７０は、中央演算処理装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１２】
フォーマット変換部１０は、外部機器から受け取った信号のフォーマットを、処理に適したフォーマットに変換する。出力側帯域制御部２０は、統計情報をカウントする機能を有し、パケット優先制御を行う。出力側帯域制御部２０は、カウンタ装置８０において統計情報をカウントする。宛先決定部３０は、中継判定データベースとして機能し、パケットの宛先決定処理を行う。入力側帯域制御部４０は、統計情報をカウントする機能を有する。装置内フォーマット変換部５０は、他のパッケージの処理に適したフォーマットへの変換処理を行う。
【００１３】
図２は、カウンタ装置８０の詳細な構成を説明するためのブロック図である。図２を参照して、カウンタ装置８０は、内部メモリ８１、加算器８２、ＦＩＦＯ（Ｆｉｒｓｔ−ｉｎ  Ｆｉｒｓｔ−ｏｕｔ）８３、位相調整器８４、加算器８５、位相調整器８６、参照加算器８７などを備える。カウンタ装置８０は、カウント値を内部メモリ８１および外部メモリ６０に分割して書き込むことによって、各ユーザの統計情報をカウントする。カウンタ装置８０は、外部メモリ６０にカウント値を書き込む際、当該カウント値を、ＦＩＦＯ８３を介して外部メモリ６０に書き込む。
【００１４】
ここで、内部メモリ８１は、高いアクセス速度を実現できるが、必要な容量を確保することが困難であるという性質を有している。一方、外部メモリ６０は、容量を大きくできるがアクセス速度が低いため、やはり必要な帯域を確保することが困難であるという性質を有している。そこで、本実施例に係るカウンタ装置８０は、カウント値の下位ビットを内部メモリ８１に書き込み、当該カウント値の上位ビットを外部メモリ６０に書き込む。具体的には、カウンタ装置８０は、内部メモリ８１のカウントが終了した場合に発生するキャリーを外部メモリ６０に書き込む。この場合、アクセス速度の高い内部メモリ８１（高速カウンタ）において、変化の多い下位ビットのカウントが行われ、アクセス速度の低い外部メモリ６０（低速カウンタ）において、変化の少ない上位ビットのカウントが行われる。それにより、全体として必要なアクセス速度が確保される。
【００１５】
一例として、１ｉｔｅｍ  ６４ビットのカウントについて、外部メモリ６０が３２ビットを担い、内部メモリ８１が残りの３２ビットを担う場合について検討する。カウントに必要な帯域を２９６Ｍｐｐｓ（Ｍｅｇａ  Ｐａｃｋｅｔ  Ｐｅｒ  Ｓｅｃｏｎｄ）とする。また、内部メモリ８１の容量が９４０×３２Ｋ＝３００８０Ｋｂｉｔであるとする。この場合、内部メモリ８１は、１９２Ｋ  ｉｔｅｍ×３２ｂｉｔ×４（送信、廃棄）＝２４５７６Ｋ＜３００８０Ｋｂｉｔであるため、内部メモリ８１の容量は足りることになる。アクセス速度は、（７４Ｍｐｐｓ×４ｉｔｅｍ）／６５Ｋ（≒２１６）＝４．５６Ｋｐｐｓ（４ｉｔｅｍ）＜２００ＭＨｚ（２ｉｔｅｍ）となる。すなわち、十分なアクセス速度が得られることになる。このように、内部メモリ８１にて下位ビットのカウントを行うことにより、カウントに必要な帯域を確保するとともに、外部メモリ６０のアクセスが下位カウンタからの桁上げ要因のみとなることにより、アクセス速度の制限を回避することができる。
【００１６】
ここで、例えば、異なるユーザのカウントが連続すると、異なるユーザに対して外部メモリ６０への書き込み（キャリー）が発生する可能性がある。この場合、外部メモリ６０用のＦＩＦＯ８３には大きな容量が必要となる。そこで、本実施例においては、ＦＩＦＯ８３の容量に対するデータ格納量にしきい値を設ける。ＦＩＦＯ８３のデータ格納量がしきい値を超えているときにキャリーが発生した場合には、当該キャリーは、ＦＩＦＯ８３ではなく内部メモリ８１に書き込まれる。また、内部メモリ８１に仮書き込みがされた記として、後述するｄａｔａ（ＭＳＢ）を「０１」とする。一方、ＦＩＦＯ８３がしきい値を超えておらず、かつ、キャリーが発生していない場合に、ｄａｔａ（ＭＳＢ）が「０１」であれば、ＦＩＦＯ８３へ書き込みを行い、ｄａｔａ（ＭＳＢ）を「００」にする。このようにｄａｔａ（ＭＳＢ）を用いることによって、比較的小さい容量のＦＩＦＯ８３を効率よく用いることができる。以下、カウンタ装置８０の動作の詳細について説明する。
【００１７】
カウンタ装置８０には、統計情報として、アドレス値ａｄｄとカウント値ｃｎｔとが入力される。アドレス値ａｄｄは、ユーザの識別のための情報である。カウント値は、パルス数などである。アドレス値ａｄｄは、内部メモリ８１および位相調整器８４に入力される。内部メモリ８１は、アドレス値ａｄｄを受け取ると、当該アドレス値に対応するアドレスのデータを加算器８２に入力する。当該データには、データｄａｔａ（値ＬＳＢ）とｄａｔａ（ＭＳＢ）とが含まれる。なお、値ＬＳＢは、内部メモリ８１に書き込まれている現時点での下位ビットのカウント値である。また、加算器８２は、ＦＩＦＯ８３の格納量がしきい値を超えているか否かを表す情報（ｆｕｌｌ）をＦＩＦＯ８３から受け取る。位相調整器８４は、位相（遅延量）を調整し、アドレス値ａｄｄをＦＩＦＯ８３に入力する。
【００１８】
加算器８２は、データｄａｔａ（値ＬＳＢ）とカウント値ｃｎｔとの加算の結果から、キャリーの発生の有無を判断する。加算器８２は、キャリーの発生の有無、ｄａｔａ（ＭＳＢ）、情報（ｆｕｌｌ）などに応じて、内部メモリ８１に加算結果を入力し、ｄａｔａ（ＭＳＢ）を更新し、ＦＩＦＯ８３にキャリーを送る。ＦＩＦＯ８３は、アドレス値ａｄｄを外部メモリ６０および位相調整器８６に送るとともに、キャリーを加算器８５に送る。なお、位相調整器８４によって位相（遅延量）が調整されているため、各信号は同期している。
【００１９】
外部メモリ６０は、アドレス値ａｄｄに対応するアドレスのデータｄａｔａＧ（値ＭＳＢ）を加算器８５に入力する。値ＭＳＢは、外部メモリ６０に書き込まれている現時点での上位ビットのカウント値である。加算器８５は、キャリーとデータｄａｔａＧとを足し合わせて外部メモリ６０に対して出力する。一方、位相調整器８６は、位相（遅延量）を調整してアドレス値ａｄｄを外部メモリ６０に対して出力する。それにより、外部メモリ６０において、アドレス値ａｄｄに対応するアドレスに加算器８５の加算結果が書き込まれる。なお、位相調整器８６によって位相（遅延量）が調整されているため、各信号は同期している。
【００２０】
内部メモリ８１および外部メモリ６０に書き込まれているカウント値を参照する場合には、参照アドレス（参照＿ａｄｄ）が内部メモリ８１およびＦＩＦＯ８３に入力される。この場合、内部メモリ８１から、参照アドレスの参照データ（値ＬＳＢ）が参照加算器８７に入力される。内部メモリ８１にキャリーが仮書き込みされている場合には、当該キャリーも参照加算器８７に入力される。外部メモリ６０からは、参照アドレスの参照データ（値ＭＳＢ）が参照加算器８７に入力される。参照加算器８７は、下記式に従ってカウント値を出力する。
カウント値＝（ＭＳＢ＋キャリー）×２（Ｎ＋Ｃ））＋ＬＳＢ
【００２１】
カウンタ装置８０の全ビット数Ｍは、一例として、６４ビットである。内部メモリ８１のカウンタ桁数Ｎ＋Ｃは、一例として、３２ビットである。１カウントのデータ数Ｃは、一例として、１６ビットである。外部メモリ６０のビット幅（Ｍ−Ｎ−Ｃ）は、一例として、３２ビットである。
【００２２】
図３（ａ）は、加算器８２の真理値表である。図３（ａ）において、ｃａｒｒｙが「１」の場合、キャリーが発生していることを意味し、ｃａｒｒｙが「０」の場合、キャリーが発生していないことを意味する。「内部メモリからの入力」のｄａｔａ（ＭＳＢ）が「００」であれば、内部メモリ８１にキャリーが仮書き込まれていないことを意味し、ｄａｔａ（ＭＳＢ）が「０１」であれば、内部メモリ８１にキャリーが仮書き込みされていることを意味する。情報「ｆｕｌｌ」が「１」の場合、ＦＩＦＯ８３におけるデータ格納量がしきい値を超えていることを意味し、情報「ｆｕｌｌ」が「０」の場合、ＦＩＦＯ８３におけるデータ格納量がしきい値以下であることを意味する。「ＦＩＦＯに出力」のｃａｒｒｙは、ＦＩＦＯ８３に入力されるキャリーの値を意味する。「内部メモリに出力」のｄａｔａ（ＭＳＢ）は、内部メモリ８１に書き込まれ、かつ、内部メモリ８１にキャリーが仮書き込みされているか否かを識別するための値を意味する。
【００２３】
図３（ｂ）は、参照加算器８７の真理値表である。図３（ｂ）は、参照加算器８７がカウント値を出力する際の式を表している。図３（ｃ）および図３（ｄ）は、内部メモリ８１の割り当てである。内部メモリ８１には、キャリーに２ビットが割り当てられている。また、カウント値ＬＳＢとして、（Ｎ＋Ｃ）ビットが割り当てられている。図３（ｅ）および図３（ｆ）は、ＦＩＦＯ８３の割り当てである。ＦＩＦＯ８３には、キャリーに２ビットが割り当てられ、残りのビットにアドレス情報が割り当てられている。図３（ｇ）は、外部メモリ６０の割り当てである。カウント値ＭＳＢとして、（Ｍ−（Ｎ＋Ｃ））ビットが割り当てられている。
【００２４】
図４および図５は、カウンタ装置８０の動作の一例を表すフローチャートである。以下、図２〜図５を参照しつつ、カウンタ装置８０の動作について説明する。まず、カウンタ装置８０には、統計情報として、アドレス値ａｄｄとカウント値ｃｎｔとが入力される（ステップＳ１）。次に、加算器８２は、内部メモリ８１のデータを読み込む（ステップＳ２）。具体的には、加算器８２は、アドレス値ａｄｄに対応するアドレスのデータを内部メモリ８１から読み込む。当該データには、ｄａｔａ（ＭＳＢ）と、データｄａｔａ´とが含まれる。
【００２５】
次に、加算器８２は、ステップＳ１で入力されたカウント値ｃｎｔにデータｄａｔａ´を加算する（ステップＳ３）。次に、加算器８２は、ｃａｒｒｙが「１」であるか否かを判定する（ステップＳ４）。すなわち、加算器８２は、キャリーが発生しているか否かを判定する。ステップＳ４で「Ｎｏ」と判定された場合、加算器８２は、ｄａｔａ（ＭＳＢ）が「０１」であるか否かを判定する（ステップＳ５）。すなわち、加算器８２は、内部メモリ８１にキャリーが仮書き込みされているか否かを判定する。
【００２６】
ステップＳ５において「Ｎｏ」と判定された場合、加算器８２は、内部メモリ８１に、アドレス値ａｄｄに対応するアドレスにデータを書き込む（ステップＳ６）。当該データには、ｄａｔａ（ＭＳＢ）＝「００」と、データｄａｔａ´＋カウント値ｃｎｔとが含まれる。この場合、内部メモリ８１にはキャリーが仮書き込みされず、データｄａｔａ＋カウント値ｃｎｔが値ＬＳＢとして書き込まれる。その後、フローチャートの実行が終了する。この場合、外部メモリ６０にもキャリーが書き込まれない。
【００２７】
ステップＳ５において「Ｙｅｓ」と判定された場合、加算器８２は、ＦＩＦＯ８３の情報（ｆｕｌｌ）が「０」であるか否かを判定する（ステップＳ７）。すなわち、加算器８２は、ＦＩＦＯ８３のデータ格納量がしきい値以下であるか否かを判定する。ステップＳ７で「Ｎｏ」と判定された場合、加算器８２は、内部メモリ８１に対し、アドレス値ａｄｄに対応するアドレスにデータを書き込む（ステップＳ８）。当該データには、ｄａｔａ（ＭＳＢ）＝「０１」と、データｄａｔａ´＋カウント値ｃｎｔとが含まれる。ｄａｔａ（ＭＳＢ）が「０１」に設定されているのは、ステップＳ５で既にキャリーが仮書き込みされていることが確認されているからである。その後、フローチャートの実行が終了する。この場合、外部メモリ６０にはキャリーが書き込まれない。
【００２８】
ステップＳ７において「Ｙｅｓ」と判定された場合、加算器８２は、ステップＳ８と同様に、内部メモリ８１に、アドレス値ａｄｄに対応するアドレスにデータを書き込む（ステップＳ９）。当該データには、ｄａｔａ（ＭＳＢ）＝「０１」と、データｄａｔａ´＋カウント値ｃｎｔとが含まれる。ｄａｔａ（ＭＳＢ）が「０１」に設定されているのは、ステップＳ５で既にキャリーが仮書き込みされていることが確認されているからである。
【００２９】
次に、加算器８２は、ＦＩＦＯ８３に、データを入力する（ステップＳ１０）。当該データには、キャリー（＝０１）と、アドレス値ａｄｄとが含まれる。ＦＩＦＯ８３は、外部メモリ６０に書き込み可能か否かを判定する（ステップＳ１１）。ステップＳ１１で「Ｎｏ」と判定された場合には、ステップＳ１１が再度実行される。ステップＳ１１で「Ｙｅｓ」と判定された場合には、加算器８５は、外部メモリ６０のデータを読み込む（ステップＳ１２）。具体的には、加算器８５は、アドレス値ａｄｄに対応するアドレスのデータを外部メモリ６０から読み込む。当該データには、データｄａｔａＧが含まれる。
【００３０】
次に、加算器８５は、データｄａｔａＧにキャリー（＝０１）を加算する（ステップＳ１３）。このキャリー（＝０１）は、内部メモリ８１に仮書き込みされた値である。次に、加算器８５は、外部メモリ６０に、アドレス値ａｄｄに対応するアドレスにデータを書き込む（ステップＳ１４）。当該データには、データｄａｔａＧ＋「０１」が含まれる。一方、ステップＳ１１で「Ｙｅｓ」と判定された場合、ステップＳ１２〜Ｓ１４と並行して、加算器８２は、内部メモリ８１のデータを読み込む（ステップＳ１５）。具体的には、加算器８２は、アドレス値ａｄｄに対応するアドレスのデータを内部メモリ８１から読み込む。当該データには、ｄａｔａ（ＭＳＢ）＝「０１」と、データｄａｔａ´´とが含まれる。次に、内部メモリ８１は、キャリー値をクリアする（ステップＳ１６）。具体的には、ＦＩＦＯ８３は、内部メモリ８１のアドレス値ａｄｄに対応するアドレスにデータを書き込む。当該データには、ｄａｔａ（ＭＳＢ）＝「００」とデータｄａｔａ´´が含まれる。すなわち、内部メモリ８１へのキャリーの仮書き込みが解消する。ステップＳ１４およびステップＳ１６の実行後、フローチャートの実行が終了する。
【００３１】
ステップＳ４において「Ｙｅｓ」と判定された場合、加算器８２は、ｄａｔａ（ＭＳＢ）が「０１」であるか否かを判定する（ステップＳ１７）。すなわち、加算器８２は、内部メモリ８１にキャリーが仮書き込みされているか否かを判定する。ステップＳ１７において「Ｎｏ」と判定された場合、加算器８２は、ＦＩＦＯ８３の情報（ｆｕｌｌ）が「０」であるか否かを判定する（ステップＳ１８）。すなわち、加算器８２は、ＦＩＦＯ８３のデータ格納量がしきい値以下であるか否かを判定する。ステップＳ１８で「Ｙｅｓ」と判定された場合、ステップＳ９〜Ｓ１６が実行される。それにより、内部メモリ８１へのキャリーの仮書き込みが解消する。
【００３２】
ステップＳ１８で「Ｎｏ」と判定された場合、加算器８２は、内部メモリ８１に、アドレス値ａｄｄに対応するアドレスにデータを書き込む（ステップＳ１９）。当該データには、ｄａｔａ（ＭＳＢ）＝「０１」と、データｄａｔａ´＋カウント値ｃｎｔとが含まれる。すなわち、内部メモリ８１には、キャリーが仮書き込みされる。その後、フローチャートの実行が終了する。この場合、外部メモリ６０にはキャリーが書き込まれない。
【００３３】
ステップＳ１７で「Ｙｅｓ」と判定された場合、加算器８２は、内部メモリ８１に、アドレス値ａｄｄに対応するアドレスにデータを書き込む（ステップＳ２０）。当該データには、ｄａｔａ（ＭＳＢ）＝「１０」と、データｄａｔａ´＋カウント値ｃｎｔとが含まれる。すなわち、既にキャリーが仮書き込みされている内部メモリ８１にキャリーがさらに仮書き込みされる。次に、加算器８２は、ＦＩＦＯ８３に、データを入力する（ステップＳ２１）。当該データには、ｄａｔａ（ＭＳＢ）＝「１０」と、アドレス値ａｄｄとが含まれる。
【００３４】
ＦＩＦＯ８３は、外部メモリ６０に書き込み可能か否かを判定する（ステップＳ２２）。ステップＳ２２で「Ｎｏ」と判定された場合には、ステップＳ２２が再度実行される。ステップＳ２２で「Ｙｅｓ」と判定された場合には、加算器８５は、外部メモリ６０のデータを読み込む（ステップＳ２３）。具体的には、加算器８５は、アドレス値ａｄｄに対応するアドレスのデータを内部メモリ８１から読み込む。当該データには、データｄａｔａＧが含まれる。
【００３５】
次に、加算器８５は、データｄａｔａＧにキャリー（＝１０）を加算する（ステップＳ２４）。このキャリー（＝１０）は、内部メモリ８１に仮書き込みされた値である。次に、加算器８５は、外部メモリ６０に、アドレス値ａｄｄに対応するアドレスにデータを書き込む（ステップＳ２５）。当該データには、データｄａｔａＧ＋「１０」が含まれる。一方、ステップＳ２２で「Ｙｅｓ」と判定された場合、ステップＳ２３〜Ｓ２５と並行して、加算器８５は、内部メモリ８１のデータを読み込む（ステップＳ２６）。具体的には、加算器８５は、アドレス値ａｄｄに対応するアドレスのデータを内部メモリ８１から読み込む。当該データには、ｄａｔａ（ＭＳＢ）＝「１０」と、データｄａｔａ´´とが含まれる。次に、内部メモリ８１は、キャリー値をクリアする（ステップＳ２７）。具体的には、ＦＩＦＯ８３は、内部メモリ８１のアドレス値ａｄｄに対応するアドレスにデータを書き込む。当該データには、ｄａｔａ（ＭＳＢ）＝「００」とデータｄａｔａが含まれる。すなわち、内部メモリ８１へのキャリーの仮書き込みが解消する。ステップＳ２５およびステップＳ２７の実行後、フローチャートの実行が終了する。
【００３６】
本実施例によれば、ＦＩＦＯ８３にしきい値が設けられていることから、ＦＩＦＯ８３のデータ格納量が多くなっているか否かを判定することができる。ＦＩＦＯ８３のデータ格納量がしきい値を超えている場合にキャリーが発生した場合には、ＦＩＦＯ８３ではなく内部メモリ８１にキャリーが仮書き込みされることから、ＦＩＦＯ８３にキャリーが入力されない。この構成により、小さな容量のＦＩＦＯ８３を用いることができる。内部メモリ８１に書き込みがされた記として、ｄａｔａ（ＭＳＢ）が「０１」とされる。
【００３７】
また、ＦＩＦＯ８３のデータ格納量がしきい値を超えておらず、かつ、キャリーが発生していない場合にｄａｔａ（ＭＳＢ）が「０１」であれば、仮書き込みされているキャリーがＦＩＦＯ８３に書き込まれる。すなわち、ＦＩＦＯ８３のデータ格納量が少ない場合には、既に内部メモリ８１に仮書き込みされているキャリーがＦＩＦＯ８３を介して外部メモリ６０に入力される。この構成により、内部メモリ８１を有効活用できるとともに、小さな容量のＦＩＦＯ８３を用いることができる。内部メモリ８１の仮書き込みが解消された記として、ｄａｔａ（ＭＳＢ）が「００」とされる。
【００３８】
また、本実施例によれば、内部メモリを有効活用できることから、外部メモリの増設を抑制することができる。それにより、消費電力、デバイスコスト、およびパッケージの実装面積の削減を図ることができる。
【００３９】
なお、本実施例においては、内部メモリ８１および加算器８２が第１カウンタとして機能し、加算器８５および外部メモリ６０が第２カウンタとして機能する。
【実施例２】
【００４０】
実施例１においては、ＦＩＦＯ８３に１段階のしきい値が設定されていたが、それに限られない。ＦＩＦＯ８３に複数段階にわたってしきい値が設定されていてもよい。図６は、実施例２に係るカウンタ装置８０ａの詳細な構成を説明するためのブロック図である。図６を参照して、ＦＩＦＯ８３に第１のしきい値に加えて、第２のしきい値（＜第１のしきい値）が設定されている。情報（ｆｕｌｌ）は、ＦＩＦＯ８３の格納量が第１のしきい値を超えているか否かを表す。情報（ｐｒｅ＿ｆｕｌｌ）は、ＦＩＦＯ８３の格納量が第２のしきい値を超えているか否かを表す。
【００４１】
図７（ａ）は、加算器８２の真理値表である。図７（ａ）の真理値表が図３（ａ）の真理値表と異なっている点は、情報「ｐｒｅ＿ｆｕｌｌ」が追加されている点である。情報「ｐｒｅ＿ｆｕｌｌ」が「１」の場合、ＦＩＦＯ８３におけるデータ格納量が第２のしきい値を超えていることを意味し、情報「ｐｒｅ＿ｆｕｌｌ」が「０」の場合、ＦＩＦＯ８３におけるデータ格納量が第２のしきい値以下であることを意味する。なお、情報「ｐｒｅ＿ｆｕｌｌ」が「１」であり、情報「ｆｕｌｌ」が「０」であれば、ＦＩＦＯ８３におけるデータ格納量が第２のしきい値を超えて第１のしきい値以下であることを意味する。図７（ｂ）〜図７（ｇ）は、図３（ｂ）〜図３（ｇ）と同じである。
【００４２】
図８および図９は、カウンタ装置８０ａの動作の一例を表すフローチャートである。図８および図９のフローチャートにおいては、ステップＳ３１が新たに追加され、ステップＳ１８の変わりにステップＳ３２が実行される。ステップＳ３１は、ステップＳ５で「Ｙｅｓ」と判定された場合に実行され、情報「ｐｒｅ＿ｆｕｌｌ」が「０」であるか否かを判定する。ステップＳ３１で「Ｎｏ」と判定された場合には、ステップＳ７が実行される。ステップＳ３１で「Ｙｅｓ」と判定された場合には、ステップＳ９が実行される。また、ステップＳ３２は、ステップＳ１７で「Ｎｏ」と判定された場合に実行され、情報「ｐｒｅ＿ｆｕｌｌ」が「０」であるか否かを判定する。ステップＳ３２で「Ｙｅｓ」と判定された場合、ステップＳ９が実行される。ステップＳ３２で「Ｎｏ」と判定された場合、ステップＳ１９が実行される。
【００４３】
本実施例においては、キャリーが発生していない場合には、ＦＩＦＯ８３のデータ格納量が第１のしきい値を超えていなければ、内部メモリ８１に仮書き込みされているキャリーがＦＩＦＯ８３を介して外部メモリ６０に書き込まされる。キャリーが発生している場合には、ＦＩＦＯ８３のデータ格納量が第２のしきい値以下でなければ、内部メモリ８１に仮書き込みされているキャリーが外部メモリ６０に書き込まれない。このような構成とすることで、内部メモリ８１およびＦＩＦＯ８３を効率よく用いることができる。
【実施例３】
【００４４】
実施例１，２では、内部メモリが１つ設けられていたが、複数設けられていてもよい。図１０は、実施例３に係るカウンタ装置８０ｂの詳細な構成を説明するためのブロック図である。図１０を参照して、カウンタ装置８０ｂは、２つの内部メモリ８１ａ，８１ｂが設けられ、２つの加算器８２ａ，８２ｂが設けられ、２つのＦＩＦＯ８３ａ，８３ｂ、および２つの位相調整器８４ａ，８４ｂ、が設けられている。また、図２のカウンタ装置８０と同様に、加算器８５、位相調整器８６および参照加算器８７が設けられている。さらに、調停器８８およびＦＩＦＯ８９が設けられている。
【００４５】
内部メモリ８１ａ、加算器８２ａ、ＦＩＦＯ８３ａ、および位相調整器８４ａは、カウンタＡとして、図２のカウンタ装置８０の内部メモリ８１、加算器８２、ＦＩＦＯ８３、および位相調整器８４と同様の機能を果たす。また、内部メモリ８１ｂ、加算器８２ｂ、ＦＩＦＯ８３ｂ、および位相調整器８４ｂは、カウンタＢとして、図２のカウンタ装置８０の内部メモリ８１、加算器８２、ＦＩＦＯ８３、および位相調整器８４と同様の機能を果たす。ＦＩＦＯ８３ａ，８３ｂの出力値は、調停器８８に入力される。調停器８８は、いずれかの出力値を優先してＦＩＦＯ８９に入力する。ＦＩＦＯ８９に入力された値は、外部メモリ６０に入力される。
【００４６】
カウンタ装置８０ｂの全ビット数Ｍは、一例として６４ビットである。内部メモリ８１ａ，８１ｂのカウンタ桁数Ｎ＋Ｃは、一例として３２ビットである。１カウントのデータ数Ｃは、一例として１６ビットである。外部メモリ６０のビット幅（Ｍ−Ｎ−Ｃ）は、一例として３２ビットである。加算器８２ａ，８２ｂの真理値表は、実施例１の加算器８２の真理値表と同様である。内部メモリ８１ａ，８１ｂの割り当ては、実施例１の内部メモリ８１の割り当てと同様である。ＦＩＦＯ８３ａ，８３ｂの割り当ては、実施例１のＦＩＦＯ８３の割り当てと同様である。
【００４７】
図１１は、調停器８８の真理値表である。図１１において、「ｖａｌｉｄ」は有効を意味し、「ｉｎｖａｌｉｄ」は無効を意味する。「ｃａｒｒｙ」は、２ビットで表されたキャリーを意味する。ｃａｒｒｙ（ｃｌｅａｒ）において、「ｖａｌｉｄ」は内部メモリ８１の仮書き込みが解消することを意味し、「ｉｎｖａｌｉｄ」は内部メモリ８１の仮書き込みが解消しないことを意味する。「ＰＲ」は、カウンタＡおよびカウンタＢのいずれかが優先されることを意味する。「参照ａｄｄｒｅｓｓ」が「ｖａｌｉｄ」であれば、内部メモリ８１ａ，８１ｂおよび外部メモリ６０に書き込まれている値が参照される。
【００４８】
カウンタＡおよびカウンタＢは、図２のカウンタ装置８０の内部メモリ８１、加算器８２、ＦＩＦＯ８３、および位相調整器８４と同様の機能を果たすため、一例として、図４および図５のフローチャートに従って動作する。調停器８８は、図１１の真理値表に従って、ＦＩＦＯ８９に出力するカウンタを選択する。それにより、複数のキャリーが同時に発生した場合においても、カウントの取りこぼしを抑制することができる。
【００４９】
図１２は、調停器８８による調停処理を表すフロー図である。図１２を参照して、カウンタＡに統計情報が入力されると、内部メモリ８１ａでカウントされ、キャリーがＦＩＦＯ８３ａに書き込まれる。一方、カウンタＢに統計情報が入力されると、内部メモリ８１ｂでカウントされ、キャリーがＦＩＦＯ８３ｂに書き込まれる。ＦＩＦＯ８３ａおよびＦＩＦＯ８３ｂの出力値は、調停器８８にて優先順位が決定され、優先順位に従ってＦＩＦＯ８９に入力される。また、カウンタＡに書き込まれているカウント値が参照される場合には、調停器８８に参照アドレスが入力される。この場合には、調停器８８は、ＦＩＦＯ８３ａ，８３ｂの出力値および参照アドレスの優先順位を決定する。
【００５０】
なお、本実施例においては、内部メモリ８１ａおよび加算器８２ａ、または、内部メモリ８１ｂおよび加算器８２ｂが第１カウンタとして機能し、加算器８５および外部メモリ６０が第２カウンタとして機能する。
【実施例４】
【００５１】
実施例３においては、ＦＩＦＯ８３ａ，８３ｂに１段階のしきい値が設定されていたが、それに限られない。実施例２と同様に、ＦＩＦＯ８３ａ，８３ｂに複数段階にわたってしきい値が設定されていてもよい。図１３は、実施例４に係るカウンタ装置８０ｃの詳細な構成を説明するためのブロック図である。図１３を参照して、ＦＩＦＯ８３ａ，８３ｂに第１のしきい値に加えて、第２のしきい値（＜第１のしきい値）が設定されている。情報（ｆｕｌｌ）は、ＦＩＦＯ８３ａ，８３ｂの格納量が第１のしきい値を超えているか否かを表す。情報（ｐｒｅ＿ｆｕｌｌ）は、ＦＩＦＯ８３ａ，８３ｂの格納量が第２のしきい値を超えているか否かを表す。
【００５２】
加算器８２ａ，８２ｂの真理値表は、実施例２の加算器８２の真理値表と同様である。内部メモリ８１ａ，８１ｂの割り当ては、実施例２の内部メモリ８１の割り当てと同様である。ＦＩＦＯ８３ａ，８３ｂの割り当ては、実施例２のＦＩＦＯ８３の割り当てと同様である。また、調停器８８の真理値表は、図１１と同様である。
【００５３】
以上、本発明の実施例について詳述したが、本発明は係る特定の実施例に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００５４】
１０  フォーマット変換部
２０  出力側帯域制御部
３０  宛先決定部
４０  入力側帯域制御部
５０  装置内フォーマット変換部
６０  外部メモリ
７０  ＣＰＵ
８０  カウンタ装置
８１  内部メモリ
８２  加算器
８３  ＦＩＦＯ
８４  位相調整器
８５  加算器
８６  位相調整器
８７  参照加算器
８８  調停器
８９  ＦＩＦＯ
１００  伝送装置
【図１】
2014107793.tif 000003
【図２】
2014107793.tif 000004
【図３】
2014107793.tif 000005
【図４】
2014107793.tif 000006
【図５】
2014107793.tif 000007
【図６】
2014107793.tif 000008
【図７】
2014107793.tif 000009
【図８】
2014107793.tif 000010
【図９】
2014107793.tif 000011
【図１０】
2014107793.tif 000012
【図１１】
2014107793.tif 000013
【図１２】
2014107793.tif 000014
【図１３】
2014107793.tif 000015