(57)【要約】【課題】バスにおいてデータ転送の競合が発生しても、データの転送効率を低下させることなく、アンダーランの発生を抑制することができるデータ転送プログラムを提供する。【解決手段】バスにデータをシリアル転送させる手順と、データのシリアル転送中に、バスによる他のデータの転送開始要求を受付ける手順と、他のデータを、バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期以下の時間でバスが転送可能なデータサイズのデータブロックに分割処理する手順と、分割処理されたデータブロックをバスにシリアル転送させる手順とをコンピュータに実行させるデータ転送プログラムとした。【選択図】        図８
2010073162.tif 000002
【特許請求の範囲】
【請求項１】
バスによるデータ転送を制御するデータ転送プログラムであって、
前記バスにデータをシリアル転送させる手順と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける手順と、
前記他のデータを、前記バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する手順と、
分割処理された前記データブロックを前記バスにシリアル転送させる手順と、
をコンピュータに実行させることを特徴とするデータ転送プログラム。
【請求項２】
バスによるデータ転送を制御するデータ転送プログラムであって、
前記バスにデータをシリアル転送させる手順と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける手順と、
前記他のデータを、他の装置から所定周期でデータを受信するための受信用クロックの周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する手順と、
分割処理された前記データブロックを前記バスにシリアル転送させる手順と、
をコンピュータに実行させることを特徴とするデータ転送プログラム。
【請求項３】
バスによるデータ転送を制御するデータ転送プログラムであって、
前記バスにデータをシリアル転送させる手順と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける手順と、
前記他のデータを、前記バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期と、他の装置から所定周期でデータを受信するための受信用クロックの周期とのうち、短い方の周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する手順と、
分割処理された前記データブロックを前記バスにシリアル転送させる手順と、
をコンピュータに実行させることを特徴とするデータ転送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送プログラムに関するものである。
【背景技術】
【０００２】
従来、外部記憶装置と他の装置との間でデータの転送を行うデータ転送装置が知られている。データ転送装置では、外部記憶装置に記憶されているデータを他の装置へ転送する際に、外部記憶装置から内部バスを介して読み出したデータを一旦内部記憶装置に記憶して、所定のデータ処理を施した後、そのデータを同じく内部バスを介して他の装置へ転送していた（たとえば、特許文献１参照。）。
【０００３】
この種のデータ転送装置では、一旦内部記憶装置に読み出したデータを、データ転送用のクロックの周期等に同期した所定の時間間隔で他の装置へ転送していた。
【０００４】
【特許文献１】特開平７−２５０１２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところが、上記従来のデータ転送装置では、他の装置へのデータの転送中に、内部バスを利用して、比較的データ量の大きな他のデータ転送（以下、「バースト転送」という。）が開始された場合に、他の装置へ転送するデータにデータの欠落（アンダーラン）が発生するおそれがあった。
【０００６】
一般的な内部バスは、あるデータの転送が終了するまで、他のデータの転送ができないように構成されている。そのため、たとえば、内部バスを使用して所定の時間間隔で他の装置へデータの転送を行っている合間に、ユーザの操作等によって、内部バスを用いてバースト転送が開始されると、内部バスにおいてデータ転送の競合が発生する場合がある。
【０００７】
この場合、内部バスでは、バースト転送が終了するまで、他の装置への次のデータの転送を開始することができない。そのため、データ転送装置では、他の装置へ次のデータを転送するタイミングが来たときに、バースト転送が終了していなかった場合、他の装置へ転送するデータを送信することができないので、他の装置へ転送するデータに、データの欠落が生じてアンダーランが発生してしまう。
【０００８】
データ転送装置に、他の装置へデータを送信する時間間隔を長くする設定を行えば、アンダーランの発生を抑制できると予想されるが、かかる設定を行った場合、単位時間に他の装置へ転送可能なデータ量が低減してしまい、他の装置へのデータの転送効率が低下するおそれがある。
【０００９】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、バスにおいてデータ転送の競合が発生しても、データの転送効率を低下させることなく、アンダーランの発生を抑制することができるデータ転送プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本願に開示するデータ転送プログラムは、バスによるデータ転送を制御するデータ転送プログラムであって、前記バスにデータをシリアル転送させる手順と、前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける手順と、前記他のデータを、前記バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する手順と、分割処理された前記データブロックを前記バスにシリアル転送させる手順とをコンピュータに実行させる。
【発明の効果】
【００１１】
本願に開示したデータ転送プログラムによれば、バスによるデータのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付けた場合に、当該他のデータを、バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期以下の時間でバスが転送可能なデータサイズのデータブロックに分割処理してバスにシリアル転送させるため、バスにおいてデータ転送の競合が発生しても、データの転送効率を低下させることなく、アンダーランの発生を抑制することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１２】
以下に添付図面を参照して、この発明に係るデータ転送プログラムの一実施形態について説明する。なお、ここでは、通信回線を介して接続された複数の装置間におけるデータの転送に関する処理を行う一般的なネットワークプロセッサ（以下、「CPU：Central Processing Unit」という。）に対して、本実施形態のデータ転送プログラムを適用した場合について説明するが、本実施形態のデータ転送プログラムは、通信用のバスを介して各種データの転送を行う任意のプロセッサに対して適用することができるものである。
【００１３】
まず、本実施形態のデータ転送プログラムを適用する一般的なCPUの構成について、図１を参照して説明する。図１は、一般的なCPU1の内部構成を示す機能ブロック図である。
【００１４】
図1に示すように、CPU1は、コア演算器2と、一次メモリコントローラ3と、一次メモリ（キャッシュ）4と、二次メモリコントローラ5と、二次メモリ6と、外部メモリコントローラ7と、DMA（Direct Memory Access）コントローラ8と、シリアルコントローラ9と、内部バス10とを備えている。なお、このCPU1は、外部メモリコントローラ7を介して外部メモリ11に接続され、シリアルコントローラ9を介して、他の装置と接続されている。
【００１５】
DMAコントローラ8、二次メモリコントローラ5、外部メモリコントローラ7、シリアルコントローラ9は、それぞれ内部バス10により接続され、互いにデータの送受信が可能に構成されている。
【００１６】
また、DMAコントローラ8は、コア演算器2と接続されており、このコア演算器8から入力される所定の制御信号に基づいて、内部バス10におけるデータ転送経路の切り替え等を行う。
【００１７】
一次メモリコントローラ3は、一次メモリ4からのデータの読み出し、及び一次メモリ4へのデータの書き込みを行う。同様に、二次メモリコントローラ5は、二次メモリ6からのデータの読み出し、及び二次メモリ6へのデータの書き込みを行う。
【００１８】
コア演算器2は、一次メモリコントローラ3と二次コントローラ5を介して、それぞれ一次メモリ4と二次メモリ6とに接続されている。このコア演算器2は、一次メモリコントローラ3や二次メモリコントローラ5により読み出された所定のデータを演算処理すると共に、その演算処理の結果を一次メモリコントローラ3や二次メモリコントローラ5により一次メモリ4、二次メモリ6に書き込ませる。
【００１９】
また、このコア演算器2は、ユーザの操作などにより、内部バス10を用いたデータの転送開始要求を受け付けた場合には、DMAコントローラ8へ内部バス10におけるデータ転送経路の切り替え要求、及びデータの転送元、転送先等を設定し、ユーザの操作に応じたデータ転送を実行させる。
【００２０】
外部メモリコントローラ7は、外部メモリ11からのデータの読み出し、及び外部メモリ11へのデータの書き込みを行う。
【００２１】
シリアルコントローラ9は、シリアル転送により他の装置へデータの出力（シリアル出力12）を行う他、他の装置からシリアル転送によりデータの入力（シリアル入力13）が行われる。すなわち、このCPU1は、シリアルコントローラ9を介して、シリアル転送により、他の装置との間でデータの送受信を行うように構成している。
【００２２】
そして、このシリアルコントローラ9は、送信バッファ14、送信メモリ15、トランスミッタ16、受信バッファ17、受信メモリ18、レシーバ19とを備えている。
【００２３】
送信バッファ14は、内部バス10から入力されるデータを一時記憶し、そのデータを所定のタイミングで、送信メモリへ出力する。送信メモリ15は、送信バッファ14から入力されたデータを一時記憶し、そのデータを所定のタイミングでトランスミッタ16へ出力する。トランスミッタ16は、送信メモリ15から入力された「1」と「0」からなる二値のデータを「High」と「Low」との2種類の電圧からなるデータに変換して、所定のタイミングで他の装置へ送信する。
【００２４】
本実施形態のシリアルコントローラ9は、当該CPU1の内部クロックに基づいて生成された所定の送信用クロックに同期して、データの送信を行う。すなわち、このシリアルコントローラ9では、送信用クロックが入力されるタイミングで、送信バッファ14から送信メモリ15へ、送信メモリ15からトランスミッタ16へ、トランスミッタ16から他の装置へ、それぞれデータが出力される。
【００２５】
レシーバ19は、他の装置から入力される「High」と「Low」との2種類の電圧からなるデータを「1」と「0」とからなるデータに変換して、所定のタイミングで受信メモリ18へ出力する。受信メモリ18は、レシーバ19から入力されるデータを一時記憶し、そのデータを所定のタイミングで受信バッファ17へ出力する。受信バッファ17は、受信メモリ18から入力されたデータを一時記憶し、そのデータを所定のタイミングで内部バス10へ出力する。
【００２６】
本実施形態のシリアルコントローラ9は、当該CPU1の内部クロックに基づいて生成された所定の受信用クロックに同期して、データの受信を行う。すなわち、このシリアルコントローラ9では、受信用クロックが入力されるタイミングで、レシーバ19から受信メモリ18へ、受信メモリ18から受信バッファ17へ、受信バッファ17から内部バス10へ、それぞれデータが出力される。
【００２７】
ここで、CPU1において実行されるデータのシリアル転送の一例について、図2を参照して説明する。図2は、外部メモリ11に記憶されているデータを他の装置へシリアル転送するときの内部バス10及びシリアルコントローラ9の動作状態を示すタイムチャートである。
【００２８】
図2において、上段のタイムチャートは、内部バス10におけるデータのシリアル転送タイミングを示しており、中段のタイムチャートは、送信バッファ14におけるデータの記憶状態（送信バッファ14におけるデータの有無）を示しており、下段のタイムチャートは、送信メモリ15におけるデータの記憶状態（送信メモリ15におけるデータの有無）を示しており、↓はトランスミッタ16に送信用クロックが入力されるタイミングを示している。送信メモリ15に記憶されたデータは、この送信用クロックの入力タイミングに同期して、他の装置へ順次シリアル出力12として出力される。
【００２９】
CPU1では、外部メモリ11に記憶しているデータを他の装置へシリアル転送する際（図1に符号（A）で示すシリアル転送参照。）、図2上段のタイムチャートに示すように、所定のクロック（たとえば、内部バス10の動作周波数：バスクロックの周波数）に同期したタイミングで周期的に、外部メモリ11から送信バッファ14へ内部バス10内をデータがシリアル転送される。以下、外部メモリ11から送信バッファ14への周期的なデータのシリアル転送をシリアル転送（A）という。なお、図2では、シリアル転送（A）の開始タイミングを符合（A）によって示している。
【００３０】
ここでは、n番目、n+1番目、n+2番目、n+3番目、n+4番目の各データが、順次内部バス10によって、バスクロックに同期したタイミングで周期的に外部メモリ11から送信バッファ14へシリアル転送（A）されている。
【００３１】
n番目のシリアル転送（A）により送信バッファ14へ出力されたデータは、その後、送信バッファ14に記憶される。そして、次に送信用クロックが入力されるタイミングで、送信バッファ14に記憶されていたn番目のデータは、送信メモリ15へ出力されて送信メモリ15に記憶され、同時に、n+1番目のデータが内部バス10により外部メモリ11から送信バッファ14へシリアル転送（A）されて送信バッファ14に記憶される。
【００３２】
そして、次に送信用クロックが入力されるタイミングで、送信メモリ15に記憶されていたn番目のデータがトランスミッタ16を介して他の装置へシリアル出力12として出力されると共に、送信バッファ14に記憶されていたn+1番目のデータが送信メモリ15へ出力されて送信メモリ15に記憶され、同時に、n+2番目のシリアル転送（A）により外部メモリ11から送信バッファ14へデータ出力されて送信バッファ14に記憶される。
【００３３】
送信メモリ15に順次記憶されるデータは、トランスミッタ16へ送信用クロックが入力されるタイミングで、トランスミッタ16から他の装置へ順次シリアル出力12として送信される。
【００３４】
シリアル転送（A）は、通常、周期的に起動されるようにコア演算器2に設定されており、DMAコントローラ8がコア演算器2の制御に従って順次実行する。
【００３５】
次に、CPU1において、周期的にシリアル転送（A）が実行されているときに、ユーザにより、二次メモリ6から外部メモリ11へ比較的データ量の大きなデータのシリアル転送（以下、「バースト転送（B）」という。）の転送開始要求が発生した場合のシリアルデータ転送の一例について、図3を参照して説明する。図3では、シリアル転送（A）の開始タイミングを符号（A）、バースト転送（B）の開始タイミングを符号（B）により示している。
【００３６】
ここでは、CPU1において、所定のクロックに同期したタイミングで順次シリアル転送（A）を行っているときに、ユーザにより所定のクロックとは非同期のタイミングで、バースト転送（B）（図1に符号（B）で示すバースト転送参照。）の転送開始要求が発生した場合を想定している。この場合、内部バス10では、一方のデータのシリアル転送が終了するまで、他のデータのシリアル転送を開始することができないため、内部バス10においてデータ転送の競合が発生する。
【００３７】
図3は、外部メモリ11から送信バッファ14へのデータのシリアル転送（A）中に、二次メモリ6から外部メモリ11へのデータのバースト転送（B）を行ったときの、内部バス10及びシリアルコントローラ9の動作状態を示すタイムチャートである。図3に示す上段、中段、下段のタイムチャート、及び矢印、並びに、符号（A）は、いずれも、図2と同一の対象を示すものである。
【００３８】
図3に示すように、n+1番目のシリアル転送（A）が実行された後、バースト転送（B）が開始された場合、次にn+2番目のシリアル転送（A）が実行されるタイミングになっても、そのときにバースト転送（B）が終了していなければ、n+2番目のシリアル転送（A）の開始は、バースト転送（B）が終了するまで待たされることとなり、その分、送信バッファ14へのデータの記憶が遅くなる。
【００３９】
このように、送信バッファ14へのデータの記憶が遅くなる場合であっても、送信用クロックの入力周期（図中の送信周期（t））を十分に長く設定していれば、図3に示すように、送信バッファ14から送信メモリ15へデータを出力するタイミングが来る前に、送信バッファ14にデータを記憶させておくことができる。
【００４０】
そのため、次の送信用クロックが入力されるタイミングで、送信バッファ14から送信メモリ15へデータを記憶させることができ、その次に送信用クロックが入力されるタイミングで、送信メモリ15から他のトランスミッタ16を介して、他の装置へデータをシリアル出力12として送信することができる。
【００４１】
送信用クロックの入力周期を長く設定するということは、シリアルコントローラ9から他の装置へ単位時間にシリアル転送するデータ量が低減することにつながる。そのため、他の装置へ単位時間にシリアル転送するデータ量を増大させるためには、送信用クロックの入力周期を短く設定することが必要である。しかし、送信用クロックの入力周期を短く設定した場合、他の装置へシリアル出力するデータにデータの欠落が生じ、アンダーランが発生する場合がある。
【００４２】
ここで、送信用クロックの入力周期を短く（送信周期を（1／2t）に）設定した場合に、アンダーランが発生する場合の一例について、図4を参照して説明する。
【００４３】
図4は、送信用クロックの入力周期を図2及び図3に示した場合の1／2に設定した場合の内部バス10及びシリアルコントローラ9の動作状態を示すタイムチャートである。図4に示す上段、中段、下段のタイムチャート、及び矢印、並びに、符号（A）、（B）は、いずれも、図3と同一の対象を示すものである。
【００４４】
ここでは、図4に示すように、n+3番目のシリアル転送（A）が実行された後にバースト転送（B）が開始され、その後、送信用クロックが2回入力された後にバースト転送（B）が終了した場合を想定している。
【００４５】
図4に示すように、CPU1において、n+3番目のシリアル転送（A）が実行された後に、バースト転送（B）が開始され、そのバースト転送（B）が終了する前に、次の送信用クロック（バースト転送（B）が開始されてから1回目の送信用クロック）が入力されると、送信バッファ14に記憶されているn+3番目のシリアル転送（A）により転送されたデータが送信メモリ15へ出力されて、送信メモリ15に記憶される。
【００４６】
ここでは、次の送信用クロック（バースト転送（B）が開始されてから2回目の送信用クロック）が入力されるまでに、バースト転送（B）が終了していないため、n+4番目のシリアル転送（A）は開始されない。
【００４７】
そのため、バースト転送（B）が開始されてから1回目の送信用クロックが入力されてから、バースト転送（B）が開始されてから2回目の送信用クロックが入力されるまでの間に内部バス10から送信バッファ14へデータの出力が行われないので、この間、送信バッファ14は、データが記憶されていない状態となる。
【００４８】
その後、バースト転送（B）が開始されてから2回目の送信用クロックが入力されると、送信メモリ15に記憶されているn+3番目のシリアル転送（A）により転送されたデータが、トランスミッタ16を介して他の装置へ送信される。
【００４９】
このとき、送信バッファ14には、データが記憶されていないため、送信バッファ14から送信メモリ15へ出力するデータが存在しないことになり、送信メモリ15は、データを記憶していない状態となる。
【００５０】
その後、バースト転送（B）が終了すると、n+4番目とn+5番目のシリアル転送（A）が開始され、そのシリアル転送（A）により転送されたデータが送信バッファ14へ記憶される。
【００５１】
そして、次に送信用クロック（バースト転送（B）が開始されてから3回目の送信用クロック）が入力されると、送信バッファ14から送信メモリ15へ、n+4番目とn+5番目のシリアル転送（A）により転送されたデータ出力されて、送信メモリ15に記憶される。
【００５２】
このとき同時に、送信メモリ15からトランスミッタ16を介して、他の装置へデータのシリアル出力が行われるが、送信メモリ15には、他の装置へ送信するデータが記憶されていないため、他の装置へ送信するデータにデータの欠落が生じてアンダーランが発生する。
【００５３】
ここまでは、CPU1から他の装置へデータを送信する場合について説明したが、CPU1が他の装置からシリアル入力13されたデータを、内部バス10を使用して、外部メモリ11等の他の装置へ転送する場合にも、単位時間に転送するデータ量を増大させるためには、受信用クロックの入力周期を短く設定することが望ましい。
【００５４】
しかし、受信用クロックの入力周期を短く設定した場合には、受信メモリ18、受信バッファ17において、データのオーバーフローが発生する可能性がある。
【００５５】
すなわち、受信用クロックを設定した場合、内部バス10を使用して、他の装置から受信したデータを外部メモリ11へシリアル転送（A）しているときに、内部バス10を使用して比較的データ量の大きなデータのバースト転送（B）の転送開始要求が発生すると、バースト転送（B）が終了するまで、シリアル転送（A）が開始できない事態が発生する場合がある。
【００５６】
この場合、シリアル転送（A）が開始できない期間に受信用クロックが入力されると、受信バッファ17にデータが記憶されているにもかかわらず、受信メモリ18から受信バッファ17へデータが出力されることとなり、データのオーバーフローが発生する。同じく、受信メモリ17においても、データを記憶しているにもかかわらず、レシーバ19からデータが入力されるため、データのオーバーフローが発生する。
【００５７】
このように、単位時間あたりのデータの転送量を増大させるために、送信用クロック及び受信用クロックの入力周期を短くする一般的なデータ転送プログラムをCPU1に組み込んだ場合、データのアンダーランやオーバーフローが発生するおそれがあるため、本実施形態では、内部バス10において、データ転送の競合が発生しても、データの転送効率を低下させることなく、データのアンダーランやオーバーフローの発生を抑制することができるデータ転送プログラムをCPU1に組み込んでいる。
【００５８】
特に、本実施形態では、内部バス10におけるデータの転送レートと、送信用クロック及び受信用クロックの単位時間あたりのクロック数とを考慮して、バースト転送（B）により内部バス10内を転送するデータを複数のデータブロックに分割して、DMAコントローラ8に転送させるデータ転送プログラムをCPU1に組み込んでいる。
【００５９】
このデータ転送プログラムは、コア演算器2内の記憶装置（図示略）に記憶されており、コア演算器2が、シリアル転送（A）の実行中に、バースト転送（B）の転送開始要求を受け付けた場合に実行される。
【００６０】
コア演算器2は、このデータ転送プログラムを実行することによって、DMAコントローラ8にバースト転送（B）に必要な各種DMA関数を設定する処理を行い、DMAコントローラ8が設定されたDMA関数に基づいて、分割処理されたデータブロックのバースト転送（B）を実行する。
【００６１】
このデータ転送プログラムは、内部バス10にデータをシリアル転送（A）させる手順と、データのシリアル転送（A）中に、内部バス10による他のデータの転送（たとえば、バースト転送（B）等）の転送開始要求を受付ける手順と、他のデータを、バスによりシリアル転送（A）されたデータを所定周期で他の装置へ送信するための送信用クロックの周期と、他の装置から所定周期でデータを受信するための受信用クロックの周期とのうち、短い方の周期以下の時間で内部バス10が転送可能なデータサイズのデータブロックに分割処理する手順と、分割処理されたデータブロックを内部バス10にシリアル転送させる手順とをCPU1に実行させるように構成されている。
【００６２】
具体的には、CPU1の送信用クロック数（X［MHz］）と、受信用クロック数（X´［ＭＨz］）と、内部バス10の動作クロック（以下「バスクロック」という。）（Y［MHz］）と、内部バス10が1秒間に転送可能なデータ量（以下、「バス幅」という。）（Z［bit］）というシリアル転送に関するハードウェア情報と、ユーザ等により指定されたバースト転送（B）の転送元アドレスと、転送先アドレスと、転送するデータのサイズ（以下、「データ転送サイズ」という。）（S［byte］）とに基づいて、コア制御器2がバースト転送（B）に必要な各種値を算出してDMAコントローラ8に設定するように構成している。
【００６３】
ここで、本実施形態に係るデータ転送プログラムがコア演算器2によって実行される際の各処理の手順について、図5を参照して説明する。図5は、本実施形態に係るデータ転送プログラムを実行した際の処理手順を示すフローチャートである。
【００６４】
コア演算器2は、シリアル転送（A）の実行中に、バースト転送（B）の開始要求を受け付けると、図5に示すように、まず、送信用クロック数Xと受信用クロック数X´とのうち、クロック数（周波数）の大きい方からシリアル転送周期A［μs］を求める処理を行う（ステップS101）。このステップS101において、コア演算器2は、バースト転送（B）におけるシリアル転送周期：A［μs］＝1／max（X、X´）という式により、シリアル転送周期Aを求める。
【００６５】
次に、コア演算器2は、内部バス10のバスクロック数Yとバス幅Zとより、単位時間当たりの内部10の転送レートB［bit／μs］を求める（ステップS102）。このステップS102において、コア演算器2は、転送レート：B［bit／μs］＝バスクロック数：Y［ＭＨz］×バス幅：Z［bit］という式により、内部バス10の転送レートBを求める。
【００６６】
次に、コア演算器2は、シリアル転送周期Aと内部バス10の転送レートBとより、シリアル転送周期あたりの転送可能ビット数C［bit］を算出する（ステップS103）。このステップS103において、コア演算器2は、転送可能ビット数：C［bit］＝シリアル転送周期：A［μs］×転送レートB［bit／μs］という式により、転送可能ビット数：C［bit］を算出する。
【００６７】
次に、コア演算器2は、バースト転送（B）するデータのサイズ（DMA転送サイズ）S［byte］と、ステップS103で算出した転送可能ビット数C［bit］から、データブロックのデータサイズとなる転送ブロックサイズD［byte］と、分割されたデータブロックの個数となる転送ブロック数E［回］と、余り転送サイズF［byte］とを算出する（ステップS104）。
【００６８】
このステップS104において、コア演算器2は、転送ブロックサイズ：D［byte］＝転送可能ビット数：C［bit］／8［Bit］という式により、転送ブロックサイズD［byte］を算出し、転送ブロック数：E［回］＝データ転送サイズ：S［byte］／転送ブロックサイズ：D［byte］という式により、転送ブロック数：E［回］を算出する。
【００６９】
また、コア演算器2は、余り転送サイズ：F［byte］＝データ転送サイズ：S［byte］−（転送ブロック数：E［回］×転送ブロックサイズ：D［byte］）if（余り転送サイズ：Fが0）{余り転送サイズ：F＝転送ブロックサイズ：D}else{転送ブロック数：E＝転送ブロック数：E＋1}という式により、余り転送サイズF[byte]と、転送ブロック数E（回）とを算出する。
【００７０】
次に、コア演算器2は、ステップS101〜ステップS104で求めた各データをDMAコントローラ8に設定する処理を行う（ステップS105）。
【００７１】
このステップS105において、コア演算器2は、ステップS101〜ステップS104で求めた各データを一覧形式としたテーブル表を作成し、このテーブル表をDMAコントローラ8に設定する。このとき、コア演算器2は、図6に示すようなテーブル表を作成する。
【００７２】
図6に示すように、このテーブル表には、バースト転送（B）するデータを分割処理したデータブロックである各転送ブロック毎に、その転送ブロックの送信元アドレス、送信先アドレス、転送サイズ、リンク先番号がそれぞれ対応付けて登録される。なお、ここでのリンク先番号は、次に転送する転送ブロックのブロック番号を示しており、最後の転送ブロックのリンク番号には、終了コードが登録される。
【００７３】
DMA転送の単位は、各転送ブロック単位で行われ、一つの転送ブロックの転送中においては、内部バス10への他のバスアクセスは待たされるが、次の転送ブロックの転送に変わるときに、他の優先度の高いバスアクセス要求（例えば、シリアル転送（A）の開始要求）が存在すると、その優先度が高いバスアクセスに対応したDMA転送が行われる。なお、DMA転送の切り替えは、図示しないバスコントローラ等により行われる。
【００７４】
最後に、コア制御器2は、DMAコントローラ8にDMA転送を起動させることによって（ステップS106）、バースト転送（B）を開始させて処理を終了する。
【００７５】
ここで、コア演算器2が、図5のフローチャートに示した各処理を実行した際の一具体例について説明する。ここでは、シリアル転送（A）により、CPU1から他の装置へデータを転送中に、コア演算器2がバースト転送（B）の転送開始要求を受付けた場合を例に挙げて説明する。
【００７６】
また、ここでは、送信用クロック数が10[KHｚ]、受信用クロック数が10[KHｚ]、バスクロック数が400[MHｚ]、バス幅が32[bit]、バースト転送（B）するデータ量が200[byte]であった場合を例に挙げて説明する。
【００７７】
この場合、シリアル転送周期＝1／10[ＫＨz]＝0.1[μs]、転送レート＝400[MHｚ]×32[bit]＝12.8[Gbit／s]、転送可能ビット数＝0.1[μs]×12.8[Kbit／s]＝1.26[Kbit]、転送ブロックサイズ＝1.26[Kbit]／8[bit]＝157[byte]、転送ブロック数＝200[byte]／157[byte]＝1[回]→（＋1で2[回]）、余り転送サイズ＝200[byte]−157[byte]×1[回]＝43[byte]となる。そして、コア演算器2は、この計算結果に基づいて、図7に示すようなテーブル表を作成して、DMAコントローラ8に設定する。
【００７８】
図7に示すようなテーブル表がDMAコントローラ8に設定された場合、CPU1では、図8のタイムチャートに示すタイミングで、シリアル転送（A）とバースト転送（B）とが実行される。
【００７９】
すなわち、CPU1では、図8に示すように、n+3番目のシリアル転送（A）が実行された後、コア演算器2は、バースト転送（B）の開始要求を受け付けると、図7に示したテーブル表をDMAコントローラ8に設定して、DMAコントローラ8にバースト転送（B）を開始させる。
【００８０】
このとき、DMAコントローラ8は、バースト転送（B）するデータを、転送ブロック（B）と、転送ブロック（B）´という2つの転送ブロックに分割して、まず、内部バス10により転送ブロック（B）を転送する。
【００８１】
この転送ブロック（B）を転送している間、n+4番目のシリアル転送（A）は、開始を待たされることになるが、本実施形態のデータ転送プログラムでは、送信用クロックの周期と受信用クロックの周期とのうち短い方の一周期の間に内部バス10を転送可能なデータサイズとなるように、バースト転送（B）するデータを2つの転送ブロック（ここでは、転送ブロック（B）と（B）´）に分割して転送しているため、転送ブロック（B）の転送が終了するまでの間に、次の送信用クロックが入力されることがない。
【００８２】
つまり、このデータ転送プログラムによれば、転送ブロック（B）の転送が開始されてから、2回目の送信用クロックが入力される前に、n+4番目のシリアル転送（A）を開始されることとなる。
【００８３】
これにより、内部バス10を使用してシリアル転送（A）とバースト転送（B）とを実行している期間において、送信用クロックが入力されたときには、常に送信バッファ14にデータが記憶された状態となるので、アンダーランの発生を防止することができる。
【００８４】
その後、このn+4番目のシリアル転送（A）が終了すると、DMAコントローラ8は、残りの転送ブロック（B）´の転送を開始し、この転送ブロック（B）´の転送が終了すると、再度、所定周期で、n+5番目〜n+9番目のシリアル転送（A）を順次実行する。
【００８５】
ここでは、コア演算器2が、図5のフローチャートに示した各処理を実行した際の一具体例について説明する。ここでは、シリアル転送（A）により、CPU1から他の装置へデータを転送中に、コア演算器2がバースト転送（B）の転送開始要求を受付けた場合を例に挙げて説明したが、本実施形態のデータ転送プログラムでは、送信用クロック数と受信用クロック数との内、クロック数の大きい方のクロックを用いて、内部バス10のシリアル転送周期を求め、このシリアル転送周期を用いて、バースト転送（B）するデータを分割する際の転送ブロックサイズを決定しているため、他の装置からデータが入力された場合に、データのオーバーフローが発生することも防止することができる。
【００８６】
すなわち、CPU1に他の装置からデータがシリアル入力13され、そのデータを内部バス10を介して所定の記憶装置（たとえば、外部メモリ11等）へシリアル転送（A）により転送しているときに、コア演算器2がバースト転送（B）の転送開始要求を受付けた場合、DMAコントローラ8がコア演算器2から設定されるテーブル表に従って、バースト転送（B）により転送するデータを分割処理して転送する。
【００８７】
このとき、バースト転送（B）により転送するデータは、送信用クロックと受信用クロックのうちクロック数が大きい方のクロック、すなわち、クロックの周期が短い方のクロックの一周期の間に、内部バス10を転送可能な転送ブロックサイズとなるように分割される。
【００８８】
そのため、シリアル転送（A）は、最大でも受信用クロックが2回入力されるまで開始を待たされることがないので、受信用クロックが入力されたときには、受信メモリ18及び受信バッファ17は、常に次のデータを記憶可能な状態となっており、データのオーバーフローが発生することがない。
【００８９】
また、ここでは、送信用クロックと受信用クロックとが入力され、送信用クロックの入力タイミングに同期して、他の装置へデータを送信し、受信用クロックの入力タイミングに同期して、他の装置からデータを受信するCPU1に対して、本実施形態のデータ転送プログラムを適用した場合について説明したが、本実施形態のデータ転送プログラムは、送信用クロックと受信用クロックとのうち、いずれか一方だけが入力される他のCPUの場合にも同様に適用することができる。
【００９０】
この場合、CPUに入力される送信用クロック又は受信用クロックの周期以下の時間でバスが転送可能なデータサイズとなるように、データを複数のデータブロックに分割処理して、バスにシリアル転送させる。
【００９１】
これにより、送信用クロックだけが入力されるCPUの場合、データのアンダーランの発生することを抑制することができ、受信用クロックだけが入力されるCPUの場合、データのオーバーフローの発生を抑制することができる。
【００９２】
以上の実施形態に関し、さらに以下の付記を開示する。
【００９３】
（付記１）バスによるデータ転送を制御するデータ転送プログラムであって、
前記バスにデータをシリアル転送させる手順と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける手順と、
前記他のデータを、前記バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する手順と、
分割処理された前記データブロックを前記バスにシリアル転送させる手順と、
をコンピュータに実行させることを特徴とするデータ転送プログラム。
【００９４】
（付記２）バスによるデータ転送を制御するデータ転送プログラムであって、
前記バスにデータをシリアル転送させる手順と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける手順と、
前記他のデータを、他の装置から所定周期でデータを受信するための受信用クロックの周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する手順と、
分割処理された前記データブロックを前記バスにシリアル転送させる手順と、
をコンピュータに実行させることを特徴とするデータ転送プログラム。
【００９５】
（付記３）バスによるデータ転送を制御するデータ転送プログラムであって、
前記バスにデータをシリアル転送させる手順と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける手順と、
前記他のデータを、前記バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期と、他の装置から所定周期でデータを受信するための受信用クロックの周期とのうち、短い方の周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する手順と、
分割処理された前記データブロックを前記バスにシリアル転送させる手順と、
をコンピュータに実行させることを特徴とするデータ転送プログラム。
【００９６】
（付記４）バスによるデータ転送を制御するデータ転送装置であって、
前記バスにデータをシリアル転送させるデータ転送処理手段と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける転送開始要求受付処理手段と、
前記他のデータを、前記バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する分割処理手段と、
分割処理された前記データブロックを前記バスにシリアル転送させる分割データ転送処理手段と、
を有することを特徴とするデータ転送装置。
【００９７】
（付記５）バスによるデータ転送を制御するデータ転送装置であって、
前記バスにデータをシリアル転送させるデータ転送処理手段と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける転送開始要求受付処理手段と、
前記他のデータを、他の装置から所定周期でデータを受信するための受信用クロックの周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する分割処理手段と、
分割処理された前記データブロックを前記バスにシリアル転送させる分割データ転送処理手段と、
を有することを特徴とするデータ転送装置。
【００９８】
（付記６）バスによるデータ転送を制御するデータ転送装置であって、
前記バスにデータをシリアル転送させるデータ転送処理手段と、
前記データのシリアル転送中に、前記バスによる他のデータの転送開始要求を受付ける転送開始要求受付処理手段と、
前記他のデータを、前記バスによりシリアル転送されたデータを所定周期で他の装置へ送信するための送信用クロックの周期と、他の装置から所定周期でデータを受信するための受信用クロックの周期とのうち、短い方の周期以下の時間で前記バスが転送可能なデータサイズのデータブロックに分割処理する分割処理手段と、
分割処理された前記データブロックを前記バスにシリアル転送させる分割データ転送処理手段と、
を有することを特徴とするデータ転送装置。
【図面の簡単な説明】
【００９９】
【図１】ネットワークプロセッサの構成を示す機能ブロック図である。
【図２】シリアル転送（A）時におけるCPUの動作を示すタイムチャートである。
【図３】シリアル転送（A）＋バースト転送（B）時におけるCPUの動作を示すタイムチャートである。
【図４】送信用クロックの周期を短くしたケースにおけるCPUの動作を示すタイムチャートである。
【図５】本実施形態に係るデータ転送プログラムによる処理を示すフローチャートである。
【図６】コア演算器がDMAコントローラに設定するテーブル表を示す図である。
【図７】コア演算器がDMAコントローラに設定するテーブル表を示す図である。
【図８】本実施形態のデータ転送プログラムによるシリアル転送（A）＋バースト転送（B）時のCPUの動作を示すタイムチャートである。
【符号の説明】
【０１００】
1  CPU
2  コア演算器
8  DMAコントローラ
9  シリアルコントローラ
10  内部バス
11  外部メモリ
14  送信バッファ
15  送信メモリ
16  トランスミッタ
（A）  シリアル転送
（B）  バースト転送
【図１】
2010073162.tif 000003
【図２】
2010073162.tif 000004
【図３】
2010073162.tif 000005
【図４】
2010073162.tif 000006
【図５】
2010073162.tif 000007
【図６】
2010073162.tif 000008
【図７】
2010073162.tif 000009
【図８】
2010073162.tif 000010