(57)【要約】【課題】  ソフトウェアによるタイミング制御を無駄な命令コードを使わずに可能とし、かつ、CPUの命令拡張も必要としない汎用性の高い時間待ち方式を提供することを課題とする。【解決手段】  外部のレジスタASIC_R0にアクセスを要求すると当該要求に対する応答があるまで処理を停止する第１の処理手段１０と、時間待ちレジスタASIC_R0を備えた第２の処理手段２０とを備える。第２の処理手段２０の時間待ちレジスタASIC_R0には、処理の待ち時間を表すデータを格納する。そして、第２の処理手段２０は、第１の処理手段１０から時間待ちレジスタASIC_R0へのアクセスを要求されると、当該アクセスを受けた時点から時間待ちレジスタASIC_R0に格納されている待ち時間を経過した時にアクセスに対する応答を第１の処理手段１０に返す。【選択図】  図７
2009087221.tif 000002
【特許請求の範囲】
【請求項１】
外部のレジスタにアクセスを要求すると当該要求に対する応答があるまで処理を停止する第１の処理手段と、前記レジスタとして時間待ちレジスタを備えた第２の処理手段とを備え、
前記第２の処理手段の前記時間待ちレジスタには、処理の待ち時間を表すデータを格納し、
前記第２の処理手段は、前記第１の処理手段から前記時間待ちレジスタへのアクセスを要求されると、当該アクセスを受けた時点から当該時間待ちレジスタに格納されている待ち時間を経過した時に前記アクセスに対する応答を前記第１の処理手段に返すことを特徴とした処理時間待ち方法。
【請求項２】
前記アクセスがリードアクセスであることを特徴とした請求項１記載の処理時間待ち方法。
【請求項３】
請求項２記載の処理時間待ち方法において、
前記第２の処理手段は、前記リードアクセスを受けた時点から前記時間待ちレジスタに格納されている待ち時間を経過するまでの間、実際に待った時間を計測し、前記待ち時間を経過した時に当該計測した実際に待った時間を表すデータを前記リードアクセスへの応答として前記第１の処理手段に返すことを特徴とした処理時間待ち方法。
【請求項４】
前記アクセスがライトアクセスであることを特徴とした請求項１記載の処理時間待ち方法。
【請求項５】
請求項４記載の処理時間待ち方法において、
前記第１の処理手段が、前記ライトアクセスの際に前記時間待ちレジスタに格納すべき処理の待ち時間を表すデータを前記第２の処理手段に渡すステップと、
前記第２の処理手段が、前記第１の処理手段から受けた前記処理の待ち時間を表すデータを前記時間待ちレジスタに格納するステップと、
前記第２の処理手段が、前記ライトアクセスを受けた時点から当該時間待ちレジスタに格納した待ち時間を経過した時に前記ライトアクセスに対する応答を前記第１の処理手段に返すことを特徴とした処理時間待ち方法。
【請求項６】
外部のレジスタにアクセスを要求すると当該要求に対する応答があるまで処理を停止する第１の処理手段と、前記レジスタとして時間待ちレジスタを備えた第２の処理手段とを備え、
前記第２の処理手段は、更に、処理の待ち時間を表すデータを格納する待ち時間設定レジスタを備え、
前記第２の処理手段が、
前記待ち時間設定レジスタに処理の待ち時間を表すデータを設定するステップと、
前記第１の処理手段から前記時間待ちレジスタへのアクセスを要求されると、当該アクセスを受けた時点から前記待ち時間設定レジスタに設定されている待ち時間を経過した時に前記アクセスに対する応答を前記第１の処理手段に返すステップと、
を実行することを特徴とした処理時間待ち方法。
【請求項７】
前記時間待ちレジスタに格納された前記処理の待ち時間を表すデータが固定されていることを特徴とした請求項１記載の処理時間待ち方法。
【請求項８】
前記時間待ちレジスタとして、前記格納する処理の待ち時間を表すデータを異ならせた複数の時間待ちレジスタを備えたことを特徴とする請求項１又は７記載の処理時間待ち方法。
【請求項９】
請求項１記載の処理時間待ち方法において、
前記第１の処理手段が、前記アクセスの際に出力する前記時間待ちレジスタを指標するアドレス信号に前記処理の待ち時間を表すデータを含めるステップと、
前記第２の処理手段が、前記アドレス信号から前記処理の待ち時間を表すデータを抽出して前記時間待ちレジスタに格納するステップと、
前記第２の処理手段が、前記アクセスを受けた時点から当該時間待ちレジスタに格納した待ち時間を経過した時に前記アクセスに対する応答を前記第１の処理手段に返すことを特徴とした処理時間待ち方法。
【請求項１０】
外部のレジスタにアクセスを要求すると当該要求に対する応答があるまで処理を停止する第１の処理手段と、前記レジスタとして時間待ちレジスタを備えた第２の処理手段とを備え、
前記第２の処理手段の前記時間待ちレジスタには、処理の待ち時間を表すデータを格納し、
前記第２の処理手段が、前記第１の処理手段から前記時間待ちレジスタへのアクセスを要求されると、当該アクセスを受けた時点から当該時間待ちレジスタに格納されている待ち時間を経過した時に前記アクセスに対する応答を前記第１の処理手段に返す機能を備えたことを特徴とする処理時間待ち装置。
【請求項１１】
前記アクセスがリードアクセスであることを特徴とした請求項１０記載の処理時間待ち装置。
【請求項１２】
請求項１１記載の処理時間待ち装置において、
前記第２の処理手段は、前記リードアクセスを受けた時点から前記時間待ちレジスタに格納されている待ち時間を経過するまでの間、実際に待った時間を計測し、前記待ち時間を経過した時に当該計測した実際に待った時間を表すデータを前記リードアクセスへの応答として前記第１の処理手段に返す機能を備えたことを特徴とする処理時間待ち装置。
【請求項１３】
前記アクセスがライトアクセスであることを特徴とした請求項１０記載の処理時間待ち装置。
【請求項１４】
請求項１３記載の処理時間待ち装置において、
前記第１の処理手段が、前記ライトアクセスの際に前記時間待ちレジスタに格納すべき処理の待ち時間を表すデータを前記第２の処理手段に渡す機能と、
前記第２の処理手段が、前記第１の処理手段から受けた前記処理の待ち時間を表すデータを前記時間待ちレジスタに格納する機能と、
前記第２の処理手段が、前記ライトアクセスを受けた時点から当該時間待ちレジスタに格納した待ち時間を経過した時に前記ライトアクセスに対する応答を前記第１の処理手段に返す機能とを備えたことを特徴とする処理時間待ち装置。
【請求項１５】
外部のレジスタにアクセスを要求すると当該要求に対する応答があるまで処理を停止する第１の処理手段と、前記レジスタとして時間待ちレジスタを備えた第２の処理手段とを備え、
前記第２の処理手段は、更に、処理の待ち時間を表すデータを格納する待ち時間設定レジスタを備え、
前記第２の処理手段が、
前記待ち時間設定レジスタに処理の待ち時間を表すデータを設定する機能と、
前記第１の処理手段から前記時間待ちレジスタへのアクセスを要求されると、当該アクセスを受けた時点から前記待ち時間設定レジスタに設定されている待ち時間を経過した時に前記アクセスに対する応答を前記第１の処理手段に返す機能と、
を備えたことを特徴とする処理時間待ち装置。
【請求項１６】
前記時間待ちレジスタに格納された前記処理の待ち時間を表すデータが固定されていることを特徴とした請求項１０記載の処理時間待ち装置。
【請求項１７】
前記時間待ちレジスタとして、前記格納する処理の待ち時間を表すデータを異ならせた複数の時間待ちレジスタを備えたことを特徴とする請求項１０又は１６記載の処理時間待ち装置。
【請求項１８】
請求項１０記載の処理時間待ち装置において、
前記第１の処理手段が、前記アクセスの際に出力する前記時間待ちレジスタを指標するアドレス信号に前記処理の待ち時間を表すデータを含める機能と、
前記第２の処理手段が、前記アドレス信号から前記処理の待ち時間を表すデータを抽出して前記時間待ちレジスタに格納する機能と、
前記第２の処理手段が、前記アクセスを受けた時点から当該時間待ちレジスタに格納した待ち時間を経過した時に前記アクセスに対する応答を前記第１の処理手段に返す機能とを備えたことを特徴とする処理時間待ち装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理時間待ち方法及び装置に係り、特に、デバイスとの関係でタイミング制御を行うための処理時間待ち方法及び装置に関する。
【背景技術】
【０００２】
近年 CPU（Central Processing Unit）の命令実行時間はナノ秒単位にも高速化している。一方、CPUに制御されるデバイス等はマイクロ秒単位の制御を要求するものが多い。このため、CPUとデバイス等との間のタイミング制御が重要となっている。一方、ハードウェアのコストダウンが要求されており、CPUとデバイス等との間のタイミング制御を、ソフトウェアで実現することを要求される場合がある。
【０００３】
ここに、CPUとデバイス等との間のタイミング制御の例を述べる。例えば、そもそも割り込みを発生しないデバイスに対し、CPUは、当該デバイスに対してデータ要求をしてから一定時間待った後に、データ読み出し処理を実行する必要がある。また、デバイスに与えるクロック信号は、CPUの実行するソフトウェアによって、信号発生用のハードウェアポートに値を一定時間間隔で書き込むことにより生成させる必要がある。さらに、ハードウェアの不具合を回避する策として、CPUの実行するソフトウェアが、時間待ち処理を実行する場合がある。
【０００４】
このようなタイミング制御の要求は、ほとんどの場合、デバイス等が要求する制御仕様に沿って決められてしまう。このため、ソフトウェア設計においては、従来の時間待ち方式では対応が困難となる場合がある。
【０００５】
例えば、CPUがデバイスからの割り込みを解除した後、当該割り込み信号線の状態が安定するまでに 1μ（マイクロ）秒を待ったうえでないと、CPUが再び割り込みの許可を実行できないデバイスが搭載されているとする。
【０００６】
この１μ秒の時間待ちを行うとき、OS（Operating System）が利用している一定間隔のクロック割り込みの周期を利用することが考えられる。しかし、OSが利用している一定間隔のクロック割り込み周期は、通常はミリ秒単位であるため、マイクロ秒単位のタイミング制御を実現するためには粒度が荒すぎる。
【０００７】
一方、 ソフトウェアループを使ったタイミング制御を利用することも考えられる。しかし、ソフトウェアループを使ったタイミング制御には、下記のような問題点がある。
(1) 無駄な命令コードが必要
(2) CPU クロックに応じたループ回数の変更が必要
(3) 命令キャッシュの内容が変化してしまう
(4) 無駄なソフトウェアループがコード最適化の妨げになる
【０００８】
また、 カウントダウンタイマ等による割り込みを利用することも考えられる。しかし、カウントダウンタイマ等による割り込み方式では、下記のような問題点がある。
(1) 割り込み処理にともなうオーバヘッドが大きい
(2) 命令キャッシュの内容が大きく変化してしまう
(3) 単なる時間待ちなのに処理が複雑
【０００９】
さらに、一般的な時間待ち方式以外の例として、CPUの命令を拡張してタイムアウト機能を実装し、命令コードに与える引数によって待ち時間を設定する方式が提案されている（特許文献１）。
【００１０】
しかし、特許文献１の方式はCPUの機能拡張を伴う。このため、既存のCPUをそのまま利用する方式に比べ、実現可能性が非常に限られており、汎用性にも欠ける。
【特許文献１】特開平０６−３３２６９３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上述のように、CPUの命令実行時間がナノ秒単位であり、かつ、OSによるクロック割り込みがミリ秒単位である場合、従来の待ち時間方式を使ってマイクロ秒単位のタイミング制御をソフトウェアで実現するには問題が多い。
【００１２】
本発明は、上記の問題を解決するためになされたもので、ソフトウェアによるタイミング制御を無駄な命令コードを使わずに可能とし、かつ、CPUの命令拡張も必要としない汎用性の高い時間待ち方式を提供することを課題としている。
【課題を解決するための手段】
【００１３】
かかる課題を解決するために、本発明による時間待ち方式では、CPU等の第１の処理手段に接続されたASIC等の第２の処理手段の内部レジスタ群の中に、時間待ち用のレジスタを設け、ソフトウェアから当該レジスタにアクセスするだけで、所定の時間待ちを実現する方法を提案する。
【００１４】
第１の発明は、外部のレジスタにアクセスを要求すると当該要求に対する応答があるまで処理を停止する第１の処理手段と、レジスタとして時間待ちレジスタを備えた第２の処理手段とを備える。第２の処理手段の時間待ちレジスタには、処理の待ち時間を表すデータを格納する。そして、第２の処理手段は、第１の処理手段から前記時間待ちレジスタへのアクセスを要求されると、当該アクセスを受けた時点から当該時間待ちレジスタに格納されている待ち時間を経過した時にアクセスに対する応答を第１の処理手段に返す。
【００１５】
第２の発明は、前記アクセスがリードアクセスであることを特徴とする。
【００１６】
第３の発明は、第２の発明において、第２の処理手段は、リードアクセスを受けた時点から時間待ちレジスタに格納されている待ち時間を経過するまでの間、実際に待った時間を計測し、待ち時間を経過した時に当該計測した実際に待った時間を表すデータをリードアクセスへの応答として第１の処理手段に返す。
【００１７】
第４の発明は、前記アクセスがライトアクセスであることを特徴とする。
【００１８】
第５の発明は、第４の発明において、第１の処理手段が、ライトアクセスの際に時間待ちレジスタに格納すべき処理の待ち時間を表すデータを第２の処理手段に渡す。第２の処理手段は、第１の処理手段から受けた処理の待ち時間を表すデータを時間待ちレジスタに格納する。そして、第２の処理手段は、ライトアクセスを受けた時点から当該時間待ちレジスタに格納した待ち時間を経過した時にライトアクセスに対する応答を第１の処理手段に返す。
【００１９】
第６の発明は、外部のレジスタにアクセスを要求すると当該要求に対する応答があるまで処理を停止する第１の処理手段と、レジスタとして時間待ちレジスタを備えた第２の処理手段とを備える。第２の処理手段は、更に、処理の待ち時間を表すデータを格納する待ち時間設定レジスタを備える。第２の処理手段は、待ち時間設定レジスタに処理の待ち時間を表すデータを設定する。そして、第１の処理手段から時間待ちレジスタへのアクセスを要求されると、当該アクセスを受けた時点から待ち時間設定レジスタに設定されている待ち時間を経過した時にアクセスに対する応答を第１の処理手段に返す。
【００２０】
第７の発明は、時間待ちレジスタに格納された処理の待ち時間を表すデータが固定されていることを特徴とする。
【００２１】
第８の発明は、時間待ちレジスタとして、格納する処理の待ち時間を表すデータを異ならせた複数の時間待ちレジスタを備えたことを特徴とする。
【００２２】
第９の発明は、第１の発明において、第１の処理手段が、アクセスの際に出力する時間待ちレジスタを指標するアドレス信号に処理の待ち時間を表すデータを含める。第２の処理手段は、アドレス信号から処理の待ち時間を表すデータを抽出して時間待ちレジスタに格納する。そして、第２の処理手段が、アクセスを受けた時点から当該時間待ちレジスタに格納した待ち時間を経過した時にアクセスに対する応答を第１の処理手段に返す。これにより前述した課題を解決しようとするものである。
【発明の効果】
【００２３】
本発明によれば、時間待ちレジスタにアクセスする命令を実行するだけで、時間待ち処理を実現できる。したがって、従来の時間待ち方式のような無駄な命令コード実行を伴わず、命令キャッシュの内容にも影響を与えないため、プログラムの実行の高速化が期待できる。また、ソフトウェアループのような無駄なCPU命令コードが存在しないため、プログラムのサイズが小さくなる。
【発明を実施するための最良の形態】
【００２４】
［共通事項］
【００２５】
まず、後述する各実施形態に共通する構成および動作を説明しておく。図１は、本願発明の実施に用いる画像形成装置１００と、この画像形成装置１００に印刷指示を送る計算機２００とを示している。計算機２００は、例えばパーソナルコンピュータであり、本実施形態ではUSBインターフェースを介して画像形成装置１００に接続されている。そして、計算機２００は、Windows（登録商標）等のOS  の機能によって、USBインターフェースを介して印刷指示を画像形成装置１００に入力する。
【００２６】
画像形成装置１００は、本願発明を実施するための装置である。しかし、本願発明を実施するための装置は、必ずしも画像形成装置に限られない。本願発明は、タイミング制御を必要とするあらゆる装置で実施することができる。画像形成装置１００は、タイミング制御を必要とする装置の一例として示したものである。
【００２７】
画像形成装置１００は、媒体に印刷を行うデバイスである印字部１００ｂと、この印字部１００ｂの動作を制御するコントローラ１００ａとを備えている。
【００２８】
デバイスである印字部１００ｂは、コントローラ１００ａによるタイミング制御を必要とするデバイスである。
【００２９】
コントローラ１００ａは、第１の処理手段としてのCPU１０、第２の処理手段としてのASIC（Application Specific Integrated Circuit）２０、ROM（Read Only Memory）３０及びRAM（Random Access Memory）４０の動作により印字部１００ｂのタイミング制御を行う。
【００３０】
ASIC２０は、PCIインターフェースを介して印字部１００ｂと接続されている。また、ASIC２０は、USBインターフェースを介して計算機２００に接続されている。ASIC２０は、印字部１００ｂのタイミング制御に用いるPCI割込許可レジスタ２１及びPCI割込状態レジスタ２２を備えている。
【００３１】
また、ROM３０には、計算機２００から画像データを受信してRAM４０に格納する処理をASIC２０に実行させるデータ受信プログラムが格納されている。また、ROM３０には、RAM４０に格納された画像データを読み出してPCIインターフェース経由で印字部１００ｂに転送する処理をASIC２０に実行させるデータ印字プログラムが格納されている。更に、ROM３０には、印字部１００ｂとの関係で所定時間のタイミング制御をASIC２０に実行させる割り込み処理プログラムが格納されている。
【００３２】
次に、印字部１００ｂとの関係でコントローラ１００ａが実行するソフトウェア処理によるタイミング制御を説明する。
【００３３】
画像形成装置１００において、コントローラ１００ａのASIC２０は、ROM３０に格納されたデータ受信プログラムを読み出して実行する。図２は、当該データ受信プログラムの処理を示す流れ図である。ASIC２０は、USBインターフェースに計算機２００からのデータ着信があるか否かを監視している（Ｓ２１）。計算機２００から印刷対象の画像データが出力されると、ASIC２０は、USBインターフェースを介して画像データを受信する（Ｓ２２）。そして、ASIC２０は、受信した画像データをRAM４０に転送する（Ｓ２３）。続いて、ASIC２０は、計算機２００から１ページ分の画像データの受信を完了したか判断する（Ｓ２４）。この結果、１ページ分の画像データの受信を完了していない場合、ASIC２０は、Ｓ２２からの処理を繰り返す。一方、１ページ分の画像データの受信を完了した場合、ASIC２０は、データ印字プログラムを起動する（Ｓ２５）。即ち、ASIC２０は、ROM３０に格納されたデータ印字プログラムを読み出して実行する。
【００３４】
図３は、データ印字プログラムの処理を示す流れ図である。ASIC２０は、まず、RAM４０に１ページ分の画像データが格納されているか判断する（Ｓ３１）。この結果、RAM４０に１ページ分の画像データが格納されていた場合、ASIC２０は、RAM４０から画像データを読み出し、当該画像データをPCIインターフェースを経由して印字部１００ｂに転送する（Ｓ３２）。続いて、ASIC２０は、１ページ分の画像データを印字部１００ｂに転送したか判断する（Ｓ３３）。この結果、１ページ分の画像データの転送を完了していない場合、Ｓ３２からの処理を繰り返す。一方、１ページ分の画像データの転送が完了すると、印字部１００ｂは、当該１ページ分の画像データを印刷媒体に印刷し出力する。
【００３５】
印字部１００ｂは、１ページ分の印字を完了し、印刷媒体の排出を完了すると、PCIインターフェースを介してコントローラ１００ａに印刷完了の旨を通知する。この印刷完了の旨の通知は、PCIINTA信号をアサートすることにより行う。
【００３６】
ASIC２０は、印字部１００ｂから印刷完了の旨をPCI割込状態レジスタ２２に反映する。具体的には、PCIINTA信号の状態がPCI割込状態レジスタ２２に反映される。INTA信号がアサートのとき、PCI割込状態レジスタ２２の値は１とする。これは、デバイスである印字部１００ｂからの割込の発生を表す。一方、INTA信号がネゲートのとき、PCI割込状態レジスタ２２の値は０とする。これは、デバイスである印字部１００ｂからの割込が発生していない状態を表す。
【００３７】
CPU１０は、割り込み処理プログラムを実行することによって、デバイスである印字部１００ｂからの割り込みを処理する。CPU１０は、PCI割込許可レジスタ２１の値が１のとき、デバイスからの割り込みを受け付けるようになっている。CPU１０は、PCI割込許可レジスタ２１の値が１のとき、ROM３０に格納された割り込み処理プログラムを読み出して実行する。
【００３８】
図４は、割り込み処理プログラムによる処理の流れ図である。CPU１０は、PCI割込状態レジスタの値が１であるか否かを判定する（Ｓ４１）。この結果、PCI割込状態レジスタの値が１である場合、即ち、印字部１００ｂからの割り込みが発生している場合、CPU１０は、PCI割込許可レジスタ２１の値を０に変更して後続の割り込みを禁止すると共に、PCIインターフェース経由で印字部１００ｂからの割り込み要求を解除する（ｓ４２）。その後、CPU１０は、PCI割込許可レジスタ２１の値を１に戻し、再びデバイスからの割り込みを待機する。
【００３９】
本実施形態において、割り込み処理プログラムが PCI インターフェース経由で印字部１００ｂからの割り込みを解除すると、PCI INTA信号は約1マイクロ秒かかってアサートからネゲートに遷移するものとする。そこで、割り込み処理プログラムは、PCI INTA信号が確実にネゲートに遷移するまで待つために、割り込み解除から2マイクロ秒待ってから、PCI割込許可レジスタ２１に1をセットするものとする。このため、Ｓ４３において２マイクロ秒の時間待ち処理（タイミング制御）が必要となる。
【００４０】
もしも、PCI INTA 信号がネゲートに遷移する前の時点でPCI 割込許可レジスタに１をセットしてしまうと、すでに処理済みの割り込み要求が、再びCPUに検出されてしまうからである。
【００４１】
図５は、従来一般的な時間待ち処理を示す流れ図である。この時間待ち処理は、値を減算してゆくループ処理によって時間待ちを行うようものである。CPU１０は、時間待ち処理Ｓ４３の実行段になると、まずカウンタＮに値２０００をセットし（Ｓ５１）、その後Nの値を１ずつ減算してゆく（Ｓ５２）。そして、CPU１０は、Ｎの値が０になるとＳ４３の時間待ち処理を終了する。
【００４２】
この従来一般的な時間待ち処理のCPU命令コードは、図６のように記述できる。まず、loadi命令によって、CPU１０の汎用レジスタCPU_R0に値２０００をセットする。続いて、subi命令により、CPU１０の汎用レジスタCPU_R0の値から１を減算する。続いて、bne命令により、CPU１０の汎用レジスタCPU_R0の値が０になるまで上記処理を繰り返す。このように、従来一般的な時間待ち処理のCPU命令コードは、３つの命令コードを必要とする。これに対し、以下に開示する本願発明の時間待ち処理によれば、比較的少ないCPU命令コードで時間待ち処理を実現することができる。又は、従来と同じ数のCPU命令コードによって、従来よりも高度な時間待ち処理を実現することができる。
【００４３】
［第１実施形態］
【００４４】
以下に、本願発明である時間待ち処理の第１実施形態を説明する。図７は、本実施形態におけるCPU１０及びASIC２０の構成を示している。本実施形態では、CPU１０の汎用レジスタCPU_R0を利用することに加え、ASIC２０に時間待ちレジスタASIC_R0を設ける。この時間待ちレジスタASIC_R0はCPU１０からのリードアクセスが可能となっている。その他は、共通事項として既述した構成と同一である。
【００４５】
図８は、CPU１０とASIC２０との間で通信する信号図である。本実施形態において、図４に示した時間待ち処理Ｓ４３の実行段になると、CPU１０は、ASIC２０に対し、時間待ちレジスタASIC_R0のアドレスを指定するアドレス信号をCPUインターフェースを介して出力すると共に、当該時間待ちレジスタASIC_R0に対するリード要求信号を出力し、リードアクセスを実行する。なお、本願の信号図では、ローレベルがアサートを表し、ハイレベルがネゲートを表す（以下同じ）。CPU１０は、ASIC２０のレジスタに対するリード要求から、当該リード要求に対するリード応答があるまではプログラムの実行を停止する。
【００４６】
ASIC２０は、CPU１０から時間待ちレジスタASIC_R0に対するリードアクセスを受けると、リード要求信号がアサートになった時から、予め決められた待ち時間（本願の例では２マイクロ秒）が経過するまで当該リード要求信号に対するリード応答信号の出力を保留する。本実施形態において、この予め決められた待ち時間は、ASIC２０の設計時点で規定されているものとする。この間、ASIC２０は、実際の待ち時間を計測する。その後、ASIC２０は、リード要求信号がアサートになった時を起点として、予め決められた待ち時間が経過した時、その間に計測した実際に待った時間を表すデータを時間待ちレジスタASIC_R0に格納する。そして、CPU１０から受けたリード要求信号に対して時間待ちレジスタASIC_R0の値（実際に待った時間を表すデータ）を出力すると共に、CPU１０から受けたリード要求信号に対するリード応答信号をアサートに設定する。これにより、CPU１０は、時間待ちレジスタASIC_R0の値（ASIC２０が実際に待った時間を表すデータ）を取得し、当該時間待ちレジスタASIC_R0に対するアドレス信号及びリード要求信号の出力を解除する。以上によりＳ４３の時間待ち処理を完了する。
【００４７】
ここで、ASIC２０が行う上記の時間待ち処理を更に詳述しておく。ASIC２０は、内部に２個のカウンタ(カウンタA, カウンタB)と、当該2個のカウンタの値を比較する比較器とを備えている。ASIC２０は、カウンタBの値を単位時間（本実施形態では1マイクロ秒）毎に単位数（本実施形態では「1」）カウントアップする機能を備えている。また、ASIC２０は、CPU１０からのリード要求信号がアサートされたときに、予め決められた待ち時間（本実施形態では２マイクロ秒）を表す値「２」をカウンタＡに設定すると共に、カウンタBをリセット（「０」にセット）する機能を備えている。各機能が稼動すると、カウンタBは単位時間（1マイクロ秒）を経過する毎に、値が単位数「1」ずつカウントアップされる。そして、カウンタBの値が予め決められた待ち時間を表す値「２」に達すると、カウンタＡ及びＢの値を比較する比較器から、「値一致」を表す信号が出力される。ASIC２０は、当該信号の発生を検知すると、その時点におけるカウンタBの値を時間待ちレジスタASIC_R0に格納する。
【００４８】
後述する他の実施形態では、ASIC２０が行う時間待ち処理Ｓ４３において、待ち時間をCPU１０から指定する場合がある。この場合は、当該ＣＰＵ１０から指定された待ち時間を表す値をカウンタＡにセットすればよい。
【００４９】
また、上記において「待ち時間を表す値」の単位は「待ち時間」の単位と同一である必要はない。例えば、レジスタＢを10ナノ秒単位でカウントアップするように設計されたASICの場合、待ち時間として２マイクロ秒を待つためには、待ち時間を表す値を「２００」とすればよい。
【００５０】
同様に、ASIC２０がレジスタに格納する「実際に待った時間を表すデータ」の単位は「待ち時間」の単位と同一である必要はない。例えば、「待ち時間」がマイクロ秒単位であるのに対して「実際に待った時間を表すデータ」は10ナノ秒単位の値としてもよい。「実際に待った時間」の単位（解像度）が「待ち時間」の単位（解像度）よりも細かい方が、実際の待ち時間をより正確に表現することができる。
【００５１】
図９は、以上の本実施形態における動作を実現するためにCPU１０が実行する処理の流れ図である。本実施形態において、CPU１０は、ASIC２０に設けられた時間待ちレジスタASIC_R0に対するリードアクセスを実行するだけで、時間待ち処理を実現する（Ｓ９１）。
【００５２】
図１０は、この動作を実現するためのCPU命令コードを示している。move命令によって、ASIC２０に設けられた時間待ちレジスタASIC_R0の値を、CPU１０が持つ汎用レジスタCPU_R0に取得するように要求する。本実施形態が必要とするCPU命令コードは、この１つだけである。
【００５３】
このように、本実施形態によれば、時間待ちレジスタASIC_R0にアクセスする CPU 命令を実行するだけで、時間待ち処理を実現できる。したがって、従来の時間待ち方式のような無駄な命令コード実行を伴わず、命令キャッシュの内容にも影響を与えないため、プログラムの実行の高速化が期待できる。また、ソフトウェアループのような無駄なCPU命令コードが存在しないため、プログラムのサイズが小さくなる。
【００５４】
また、ひとつのCPU命令を実行するだけで時間待ち処理を実現できるため、プログラムの時間待ち処理が簡潔になる。
【００５５】
更に、時間待ち処理のためのCPU命令の実行完了後に、CPU１０がASIC２０において実際に待った時間を確認することが可能になるため、より精度の高い時間待ち処理の実現にデータを活用することができる。
【００５６】
［第２実施形態］
【００５７】
次に、本願発明である時間待ち処理の第２実施形態を説明する。図１１は、本実施形態におけるCPU１０及びASIC２０の構成を示している。本実施形態では、第１実施形態と同様に、CPU１０の汎用レジスタCPU_R0を利用することに加え、ASIC２０に時間待ちレジスタASIC_R0を設ける。ただし、第１実施形態と異なり、本実施形態における時間待ちレジスタASIC_R0は、CPU１０からのライトアクセスが可能となっている。その他は、共通事項として既述した構成と同一である。
【００５８】
図１２は、CPU１０とASIC２０との間で通信する信号図である。本実施形態において、図４に示した時間待ち処理Ｓ４３の実行段になると、CPU１０は、ASIC２０に対し、時間待ちレジスタASIC_R0のアドレスを指定するアドレス信号と、当該時間待ちレジスタASIC_R0に設定すべき待ち時間を表すデータ信号とをCPUインターフェースを介して出力すると共に、当該時間待ちレジスタASIC_R0に対するライト要求信号を出力し、ライトアクセスを実行する。CPU１０は、ASIC２０のレジスタに対するライト要求から、当該ライト要求に対するライト応答があるまではプログラムの実行を停止する。
【００５９】
ASIC２０は、CPU１０から時間待ちレジスタASIC_R0に対するライトアクセスを受けると、ライト要求信号がアサートになった時点で、データ信号線に乗っている待ち時間を表すデータを時間待ちレジスタASIC_R0に格納すると共に、その時点から当該待ち時間を表すデータが示す時間（本願の例では２マイクロ秒）が経過するまでライト要求信号に対するライト応答信号の出力を保留する。
【００６０】
その後、ASIC２０は、待ち時間を表すデータが示す時間の経過した時、CPU１０から受けたライト要求信号に対するライト応答信号をアサートに設定する。これにより、CPU１０は、時間待ちレジスタASIC_R0に対するアドレス信号、データ信号及びライト要求信号の出力を解除する。以上によりＳ４３の時間待ち処理を完了する。
【００６１】
図１３は、以上の本実施形態における動作を実現するためにCPU１０が実行する処理の流れ図である。本実施形態において、CPU１０は、ASIC２０に設けられた時間待ちレジスタASIC_R0に対するライトアクセスを実行するだけで、時間待ち処理を実現する（Ｓ１３１）。
【００６２】
図１４は、この動作を実現するためのCPU命令コードを示している。まずloadi命令によって、CPU１０の汎用レジスタCPU_R0に値２０００を設定する。次いで、move命令によって、CPU１０の汎用レジスタCPU_R0に設定した値を、ASIC２０に設けられた時間待ちレジスタASIC_R0に書き込むように要求する。本実施形態が必要とするCPU命令コードは、この２つだけである。
【００６３】
このように、本実施形態によれば、時間待ちレジスタASIC_R0にデータをライトするための CPU 命令を実行するだけで、時間待ち処理を実現できる。したがって、従来の時間待ち方式のような無駄な命令コード実行を伴わず、命令キャッシュの内容にも影響を与えないため、プログラムの実行の高速化が期待できる。また、ソフトウェアループのような無駄なCPU命令コードが存在しないため、プログラムのサイズが小さくなる。
【００６４】
また、２つのCPU命令を実行するだけで時間待ち処理を実現できるため、従来に比べプログラムの時間待ち処理が簡潔になる。
【００６５】
更に、CPU１０は、任意の待ち時間を指定することができるため、広い範囲の時間待ち処理に対して、本発明による時間待ち方式を適用可能になるとともに、より精度の高い時間待ち処理を実現できる。
【００６６】
［第３実施形態］
【００６７】
次に、本願発明である時間待ち処理の第３実施形態を説明する。図１５は、本実施形態におけるCPU１０及びASIC２０の構成を示している。本実施形態では、CPU１０の汎用レジスタCPU_R0を利用することに加え、ASIC２０に時間待ちレジスタASIC_R0及び待ち時間設定レジスタASIC_R1を設ける。本実施形態において、時間待ちレジスタASIC_R0は、CPU１０からのリードアクセスが可能となっている。また、待ち時間設定レジスタASIC_R1は、CPU１０からのライトアクセスが可能となっている。その他は、共通事項として既述した構成と同一である。
【００６８】
図１６は、CPU１０とASIC２０との間で通信する信号図である。本実施形態において、図４に示した時間待ち処理Ｓ４３の実行段になると、まず、第２実施形態に類似した処理が実行される。CPU１０は、ASIC２０に対し、待ち時間設定レジスタASIC_R1のアドレスを指定するアドレス信号と、当該待ち時間設定レジスタASIC_R1に設定すべき待ち時間を表すデータ信号とをCPUインターフェースを介して出力すると共に、当該待ち時間設定レジスタASIC_R1に対するライト要求信号を出力し、ライトアクセスを実行する。
【００６９】
ASIC２０は、CPU１０から待ち時間設定レジスタASIC_R1に対するライトアクセスを受けると、ライト要求信号がアサートになった時点で、データ信号線に乗っている待ち時間を表すデータを待ち時間設定レジスタASIC_R1に速やかに格納すると共に、直ちにCPU１０から受けたライト要求信号に対するライト応答信号をアサートに設定する。これにより、CPU１０は、待ち時間設定レジスタASIC_R1に対するアドレス信号、データ信号及びライト要求信号の出力を解除する。
【００７０】
続いて、第１実施形態に類似した処理が実行される。CPU１０は、ASIC２０に対し、時間待ちレジスタASIC_R0のアドレスを指定するアドレス信号をCPUインターフェースを介して出力すると共に、当該時間待ちレジスタASIC_R0に対するリード要求信号を出力し、リードアクセスを実行する。CPU１０は、ASIC２０のレジスタに対するリード要求から、当該リード要求に対するリード応答があるまではプログラムの実行を停止する。
【００７１】
ASIC２０は、CPU１０から時間待ちレジスタASIC_R0に対するリードアクセスを受けると、リード要求信号がアサートになった時から、待ち時間設定レジスタASIC_R1に設定されている待ち時間（本願の例では２マイクロ秒）が経過するまで当該リード要求信号に対するリード応答信号の出力を保留する。この間、ASIC２０は、実際の待ち時間を計測する。
【００７２】
その後、ASIC２０は、リード要求信号がアサートになった時を起点として、待ち時間設定レジスタASIC_R1に設定されている待ち時間が経過した時、その間に計測した実際に待った時間を表すデータを時間待ちレジスタASIC_R0に格納する。そして、CPU１０から受けたリード要求信号に対して時間待ちレジスタASIC_R0の値（実際に待った時間を表すデータ）を出力すると共に、CPU１０から受けたリード要求信号に対するリード応答信号をアサートに設定する。これにより、CPU１０は、時間待ちレジスタASIC_R0の値（ASIC２０が実際に待った時間を表すデータ）を取得し、当該時間待ちレジスタASIC_R0に対するアドレス信号及びリード要求信号の出力を解除する。以上によりＳ４３の時間待ち処理を完了する。
【００７３】
図１７は、以上の本実施形態における動作を実現するためにCPU１０が実行する処理の流れ図である。本実施形態において、CPU１０は、ASIC２０に設けられた待ち時間設定レジスタASIC_R1に対するライトアクセスを実行し、待ち時間設定レジスタASIC_R1に所望の待ち時間を表すデータをライトする（Ｓ１７１）。次いで、CPU１０は、ASIC２０に設けられた時間待ちレジスタASIC_R0に対するリードアクセスを実行するだけで、時間待ち処理を実現する（Ｓ１７２）。
【００７４】
図１８は、この動作を実現するためのCPU命令コードを示している。まずloadi命令によって、CPU１０の汎用レジスタCPU_R0に値２０００を設定する。次いで、move命令によって、CPU１０の汎用レジスタCPU_R0に設定した値を、ASIC２０に設けられた待ち時間設定レジスタASIC_R1に書き込むように要求する。その後、move命令によって、ASIC２０に設けられた時間待ちレジスタASIC_R0の値を、CPU１０が持つ汎用レジスタCPU_R0に取得するように要求する。本実施形態が必要とするCPU命令コードは、この３つである。
【００７５】
以上の本実施形態によれば、時間待ちレジスタASIC_R0にアクセスする CPU 命令を実行することで、時間待ち処理を実現できる。したがって、従来の時間待ち方式のような無駄な命令コード実行を伴わず、命令キャッシュの内容にも影響を与えないため、プログラムの実行の高速化が期待できる。また、ソフトウェアループのような無駄なCPU命令コードが存在しないため、プログラムのサイズが小さくなる。
【００７６】
また、時間待ち処理のためのCPU命令の実行完了後に、CPU１０がASIC２０において実際に待った時間を確認することが可能になるため、より精度の高い時間待ち処理の実現にデータを活用することができる。更に、CPU１０は、任意の待ち時間を指定することができるため、広い範囲の時間待ち処理に対して、本発明による時間待ち方式を適用可能になるとともに、より精度の高い時間待ち処理を実現できる。このように、単なる時間待ち処理だけでなく、追加のメリットをも、３つのCPU命令を実行するだけで得ることができる。
【００７７】
［第４実施形態］
【００７８】
次に、本願発明の第４実施形態を説明する。前述した第１実施形態では、ASIC２０に単一の時間待ちレジスタASIC_R0を備え、CPU１０から当該時間待ちレジスタASIC_R0へリードアクセスを行うことによって、当該時間待ちレジスタASIC_R0に予め規定された待ち時間だけ処理待ちを行うようになっていた。
【００７９】
一方、図１９に示すように、ASIC２０に予め異なる待ち時間を規定した複数の時間待ちレジスタを備えてもよい。図１９において、ASIC２０は、異なる待ち時間を格納した４つの時間待ちレジスタを備えている。時間待ちレジスタASIC_R01には待ち時間として１マイクロ秒が設定されている。時間待ちレジスタASIC_R02には待ち時間として２マイクロ秒が設定されている。時間待ちレジスタASIC_R04には待ち時間として４マイクロ秒が設定されている。時間待ちレジスタASIC_R08には待ち時間として８マイクロ秒が設定されている。
【００８０】
このような構成において、第１実施形態と同様にCPU１０が時間待ちレジスタへリードアクセスを行う際に、アドレス信号によってアクセスする時間待ちレジスタを選択することによって、待ち時間を可変とすることができる。
【００８１】
このようにすると、第１実施形態と同一の効果を得られることに加え、CPUが必要とする待ち時間に対して、予め用意された待ち時間の範囲から選択することができるため、広い範囲の時間待ち処理に対して、本発明による時間待ち方式を適用可能になる。
【００８２】
［第５実施形態］
【００８３】
次に、本願発明の第５実施形態を説明する。前述した第１実施形態では、ASIC２０に単一の時間待ちレジスタASIC_R0を備え、CPU１０から当該時間待ちレジスタASIC_R0へリードアクセスを行うことによって、当該時間待ちレジスタASIC_R0に予め規定された待ち時間だけ処理待ちを行うようになっていた。
【００８４】
一方、CPU１０から待ち時間レジスタへリードアクセスを行う際に、アドレス信号の一部に待ち時間を表すデータを埋め込むことによって、待ち時間を可変とすることが可能である。例えば、図２０に示すように、３２ビットのアドレス信号のうち、上位２９ビットをアドレスの指定に用い、下位３ビットで待ち時間０マイクロ秒〜７マイクロ秒を指定することが可能である。
【００８５】
この場合、ASIC２０は、CPU１０からリードアクセスを受けると、当該リードアクセスに伴うアドレス信号の上位２９ビットから時間待ちレジスタのアドレスを判定すると共に、同じアドレス信号の下位３ビットから待ち時間を判定し、当該リードアクセスを受けた時点から当該判定した待ち時間の間はCPU１０に対するリード応答信号の出力を保留する。
【００８６】
このようにすると、第１実施形態と同一の効果を得られることに加え、CPUが必要とする待ち時間に対して、予め用意された待ち時間の範囲から、任意の待ち時間を指定することができるため、広い範囲の時間待ち処理に対して、本発明による時間待ち方式を適用可能になる、という従来にない優れた時間待ち方法及び装置を提供することができる。
【図面の簡単な説明】
【００８７】
【図１】本願発明の各実施形態が前提とする画像形成システムのブロック構成図である。
【図２】画像形成処理におけるデータ受信処理（データ受信プログラム）の流れ図である。
【図３】画像形成処理におけるデータ印字処理（データ印字プログラム）の流れ図である。
【図４】画像形成処理における割り込み処理（割り込み処理プログラム）の流れ図である。
【図５】割り込み処理において実行される時間待ち処理の流れ図であって、従来一般的なループ処理を示した流れ図である。
【図６】図５の流れ図に対応するCPU命令コードである。
【図７】本願発明の第１実施形態におけるCPUとASICのブロック構成図である。
【図８】第１実施形態の動作を示す信号図である。
【図９】第１実施形態の動作を示す流れ図である。
【図１０】図９の流れ図に対応するCPU命令コードである。
【図１１】本願発明の第２実施形態におけるCPUとASICのブロック構成図である。
【図１２】第２実施形態の動作を示す信号図である。
【図１３】第２実施形態の動作を示す流れ図である。
【図１４】図１３の流れ図に対応するCPU命令コードである。
【図１５】本願発明の第３実施形態におけるCPUとASICのブロック構成図である。
【図１６】第３実施形態の動作を示す信号図である。
【図１７】第３実施形態の動作を示す流れ図である。
【図１８】図１７の流れ図に対応するCPU命令コードである。
【図１９】本願発明の第４実施形態におけるCPUとASICのブロック構成図である。
【図２０】本願発明の第５実施形態におけるCPUとASICのブロック構成図である。
【符号の説明】
【００８８】
１０  CPU（第１の処理手段）
２０  ASIC（第２の処理手段）
２１  PCI割込許可レジスタ
２２  PCI割込状態レジスタ
３０  ROM（記憶手段）
４０  RAM（記憶手段）
１００  画像形成装置
１００ａ  コントローラ（制御手段）
１００ｂ  印字部（デバイス）
２００  計算機（上位装置）
【図１】
2009087221.tif 000003
【図２】
2009087221.tif 000004
【図３】
2009087221.tif 000005
【図４】
2009087221.tif 000006
【図５】
2009087221.tif 000007
【図６】
2009087221.tif 000008
【図７】
2009087221.tif 000009
【図８】
2009087221.tif 000010
【図９】
2009087221.tif 000011
【図１０】
2009087221.tif 000012
【図１１】
2009087221.tif 000013
【図１２】
2009087221.tif 000014
【図１３】
2009087221.tif 000015
【図１４】
2009087221.tif 000016
【図１５】
2009087221.tif 000017
【図１６】
2009087221.tif 000018
【図１７】
2009087221.tif 000019
【図１８】
2009087221.tif 000020
【図１９】
2009087221.tif 000021
【図２０】
2009087221.tif 000022