(57)【要約】      （修正有）【課題】ハードウェア回路、例えば、パーソナルコンピュータのディスプレイサブシステムの一つ以上の回路部へのクロックを有効化又は無効化するためのシステム及び方法を提供する。【解決手段】プロセッサは、少なくともコマンド又はデータに基づいて機能を実行するように構成された第１の回路へのコマンド又はデータを生成する。クロック生成器は、第１及び第２の機能を実行するように構成された第２の回路にクロックを選択的に与える。プロセッサ及びクロック生成器に接続されたソフトウェアインタフェース回路は、第２の回路が次回の周期において第２の機能を実行するか又はアイドル状態になるかどうかを、少なくともコマンド又はデータに基づいて自律的に判定し、第２の回路が次回の周期においてアイドル状態になる場合に第２の回路へのクロックの一つ以上を無効化する。【選択図】図３
2007293852.tif 000002
【特許請求の範囲】
【請求項１】
コマンド又はデータを生成するためのプロセッサと、
前記コマンド又はデータを受信し、少なくとも該コマンド又はデータに基づいて第１の機能を実行するように構成された第１の回路と、
第２の機能を実行するように構成された第２の回路と、
一つ以上のクロックを前記第１の回路及び前記第２の回路に選択的に与えるように構成されたクロック生成器と、
前記プロセッサ及び前記クロック生成器に接続されたソフトウェアインタフェース回路と、
を備え、
前記ソフトウェアインタフェース回路が、前記第２の回路が次回の周期において前記第２の機能を実行するか又はアイドル状態になるかどうかを、少なくとも前記コマンド又はデータに基づいて自律的に判定し、前記第２の回路が前記次回の周期においてアイドル状態になる場合に前記第２の回路への前記クロックの一つ以上を無効化するように構成された、システム。
【請求項２】
前記ソフトウェアインタフェース回路が、前記第１の回路が現在アイドル状態であり前記次回の周期において機能を作動すると判定し、前記次回の周期より前に前記第１の回路への前記一つ以上のクロックを有効化するように構成された、請求項１に記載のシステム。
【請求項３】
前記プロセッサが、前記ソフトウェアインタフェース回路に状態コマンドを送信するように構成され、
前記ソフトウェアインタフェース回路が、前記第２の回路が前記次回の周期において前記第２の機能を実行するか又はアイドル状態になるかどうかを、少なくとも前記状態コマンドに基づいて判定するように構成された、請求項１に記載のシステム。
【請求項４】
当該システムが複数のクロック領域を備え、
前記ソフトウェアインタフェース回路が、前記次回の周期においてアイドル状態になり無効化することが可能な前記複数のクロック領域に対するクロック領域数を、少なくとも前記コマンド又はデータに基づいて自律的に判定し、前記次回の周期において前記クロック領域数を無効化するように構成された、請求項１に記載のシステム。
【請求項５】
走査出力エンジンを備える、請求項１に記載のシステム。
【請求項６】
プロセッサにおいてコマンド又はデータを生成するステップと、
少なくとも前記コマンド又はデータに基づいて第１の機能を実行するように構成された第１の回路に前記プロセッサから前記コマンド又はデータを送信するステップと、
前記第１の回路及び第２の機能を実行するように構成された第２の回路に一つ以上のクロックを選択的に与えるステップと、
前記プロセッサ及びクロック生成器に接続されたソフトウェアインタフェース回路において前記第２の回路が次回の周期で前記第２の機能を実行する又はアイドル状態になるかどうかを、少なくとも前記コマンド又はデータに基づいて自律的に判定するステップと、
前記第２の回路が前記次回の周期においてアイドル状態になる場合に前記第２の回路への前記クロックの一つ以上を無効化するステップと、
を備える、方法。
【請求項７】
コマンド又はデータを生成するためのプロセッサと、
前記コマンド又はデータを受信し、少なくとも該コマンド又はデータに基づいて第１の機能を実行するように構成された第１の回路と、
第２の機能を実行するように構成された第２の回路と、
一つ以上のクロックを前記第１の回路及び第２の回路に選択的に与えるように構成されたクロック生成器と、
前記第２の回路が次回の周期において前記第２の機能を実行するか又はアイドル状態になるかどうかを少なくとも前記コマンド又はデータに基づいて自律的に判定し、前記第２の回路が前記次回の周期においてアイドル状態になる場合に前記第２の回路への前記クロックの一つ以上を無効化するための手段と、
を備えた、システム。  
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
[0001]本発明は、参照することによりそのすべての開示が本明細書に組み込まれている、米国特許仮出願第６０／７９４２２１号明細書の利益を主張するものである。この米国特許仮出願は、２００６年４月２０日に出願され、発明の名称が“WORK BASED CLOCK MANAGEMENT FOR DISPLAY SUB-SYSTEM”とされる。
【発明の背景】
【０００２】
[0002]概略的にいえば、本発明の開示は、電子回路における電力節約に関し、例えば、パーソナルコンピュータ（ＰＣ）又はラップトップＰＣで見られるディスプレイサブシステム用のクロック管理において実施される。
【０００３】
[0003]図１は、従来技術におけるコンピュータシステム１００の概略的なブロック図である。コンピュータシステム１００において、中央演算装置（ＣＰＵ）１０５は、バスインタフェース１１０を経由してシステムメモリ１１５に通信する。Ｉ／Ｏインタフェース１３０は、一つ以上のユーザ入力装置１３５（例えば、キーボード、マウス）からユーザ入力を受け、その入力をＣＰＵ１０５に送る。視覚的な出力は、グラフィックスサブシステム１４０の方式によってディスプレイ装置１４５（例えば、ＣＲＴ又はＬＣＤモニタ）になされる。システムディスク１２０（例えば、ハードディスク）は、Ｉ／Ｏインタフェース１３０又はバスインタフェース１１０に接続される。
【０００４】
[0004]クロック生成器１５０は、コンピュータシステム１００の様々なコンポーネントに対して種々の周波数のクロックを与える。例えば、クロック生成器１５０は、多数の異なるクロック（例えば、異なる周波数のクロック）を与え、グラフィックスサブシステム１４０内の様々なハードウェアを駆動するようにすることができる。クロック生成器１５０は、グラフィックスサブシステム１４０のディジタル・アナログコンバータ（ＤＡＣ、不図示）に一つ以上のクロックを与えることができる。そのため、クロック生成器１５０がＩ／Ｏインタフェース１３０のような他の回路コンポーネントに他のクロックを与えながら、ＤＡＣはディスプレイ装置１４５へのアナログ信号を生成することができる。様々なコンピュータシステム１００のハードウェア回路部がそれぞれの機能を実行できるようにするため、クロックが必要とされる。
【０００５】
[0005]しかしながら、コンピュータシステム１００のいくつかの回路部は、任意の時点でアイドル状態になり、必要とされる機能を実行しない場合がある。その回路部がアイドル状態である間、コンピュータシステム１００は、電力節約のため、アイドル状態の回路部へのクロックを無効化することができる。例えば、コンピュータシステム１００がラップトップＰＣである場合、バッテリ寿命を延ばすため、ＣＰＵ１０５で動作するソフトウェアコンポーネントがクロック生成器１５０にコマンドを送り、アイドル状態の回路部に提供されるクロックの一つ以上を無効化するようにすることができる。
【０００６】
[0006]しかしながら、コンピュータシステム１００においてクロック生成器１５０によって提供されるクロックの有効化及び無効化を制御するソフトウェアコンポーネントを用意することには、制限がある。例えば、ソフトウェアコンポーネントにおいてクロック管理機能を用意すると、ＣＰＵ１０５上で動作するソフトウェアの全体の複雑さが増大する。さらに、ソフトウェアによる介入は、遅延を招く。なぜなら、コンピュータシステム１００の回路部がアイドル状態であることを判定すること、アイドル状態の回路部へのクロックが安全に無効化され得るかどうかを判定すること及びコマンド又は信号をクロック生成器１５０に送信してクロックを無効化するようにすることをソフトウェアが行うには、比較的長い時間がかかり得るためである。
【０００７】
[0007]さらに、ＣＰＵ１０５上で動作するソフトウェアコンポーネントは、コンピュータシステム１００のハードウェアの正確な状態をいつも「認識」できるわけではない。したがって、どのクロックを無効化するかを決定することにおける非効率的さ又はクロックを安全に無効化することが可能な時期に関する不確定さを伴う場合があり得る。一方のソフトウェアコンポーネントが論理の一部を無効化し他方のソフトウェアコンポーネントが無効化された論理に書き込みを行おうとする場合、甚だしいときには、ソフトウェアが「ハング」したり異常終了したりする。ある状況では、ハードウェアへの書き込みの前にソフトウェアがハードウェアの状態を読み込むことができる。しかしながら、そのようなメカニズムを用意すると、コンピュータシステム１００のソフトウェア及びハードウェア両方の複雑さが増大する。
【発明の簡潔な概要】
【０００８】
[0008]一態様によれば、システムは、少なくともコマンド又はデータに基づいて第１の機能を実行するように構成された第１の回路へのコマンド又はデータを生成するためのプロセッサと、第２の機能を実行するように構成された第２の回路と、一つ以上のクロックを第１の回路及び第２の回路に選択的に与えるように構成されたクロック生成器と、プロセッサ及びクロック生成器に接続されたソフトウェアインタフェース回路と、を備える。ソフトウェアインタフェース回路は、第２の回路が次回の周期において第２の機能を実行するか又はアイドル状態になるかどうかを、少なくともコマンド又はデータに基づいて自律的に判定し、第２の回路が次回の周期においてアイドル状態になる場合に第２の回路へのクロックの一つ以上を無効化するように構成される。
【０００９】
[0009]ある実施形態においては、ソフトウェアインタフェース回路が、第１の回路が現在アイドル状態であり次回の周期において機能を作動すると判定し、次回の周期より前に第１の回路への一つ以上のクロックを有効化するように構成される。ある実施形態においては、プロセッサが、ソフトウェアインタフェース回路に状態コマンドを送信するようにさらに構成され得る。ソフトウェアインタフェース回路は、第２の回路が次回の周期において第２の機能を実行するか又はアイドル状態になるかどうかを、少なくとも状態コマンドに基づいて判定するように構成される。ある実施形態においては、次回の周期が、第１の回路にデータを書き込む期間を含み得る。例えば、システムが等時性のグラフィックスエンジンを備え、次回の周期がリフレッシュサイクルであってもよい。ある実施形態においては、第２の回路への一つ以上のクロックを無効化するための所定の時間後に、ソフトウェアインタフェース回路にクロック生成器が通知を行うように構成されていてもよい。
【００１０】
別の態様によれば、方法は、プロセッサにおいてコマンド又はデータを生成するステップと、少なくともコマンド又はデータに基づいて第１の機能を実行するように構成された第１の回路にプロセッサからコマンド又はデータを送信するステップと、第１の回路及び第２の機能を実行するように構成された第２の回路に一つ以上のクロックを与えるステップと、プロセッサ及びクロック生成器に接続されたソフトウェアインタフェース回路において第２の回路が次回の周期で第２の機能を実行する又はアイドル状態になるかどうかを、少なくともコマンド又はデータに基づいて自律的に判定するステップと、第２の回路が次回の周期においてアイドル状態になる場合に第２の回路へのクロックの一つ以上を無効化するステップと、を備える。
【発明を実施するための最良の形態】
【００１１】
［0015］概略的に言えば、本発明の開示は、コマンド及び／又はデータ（プロセッサからハードウェア回路部に送信される）に基づいて、一つ以上のハードウェア回路部へのクロックを有効化又は無効化するためのシステム及び方法に関する。ソフトウェアインタフェース回路は、通常、通信経路内にあること及び通信を「察知する（sniffing）」ことのうちのどちらかによって、プロセッサからハードウェア回路へのすべて又はほぼすべての通信を受信する。ソフトウェアインタフェース回路は、次回の周期（upcoming period）にどのハードウェア回路部が有効化されどのハードウェア回路部がアイドル状態になるかを、コマンド及び／又はデータ（プロセッサによって送信される）に基づいて判定する。次回の周期にアイドル状態になるハードウェア回路部に対して、ソフトウェアインタフェース回路は、例えば一つ以上のクロックを無効化するようにクロック生成器にコマンドを送ることによって、アイドル状態になる回路への一つ以上のクロックを無効化する。典型的な実施形態において、ハードウェア回路は、パーソナルコンピュータにおける等時性のディスプレイサブシステムである。
【００１２】
［0016］図２は、本発明の実施形態に係るコンピュータシステム２００のブロック図である。コンピュータシステム２００は、システムバス２０６を経由して通信するシステムメモリ２０４及び中央演算装置２０２（ＣＰＵ）を含む。ユーザ入力は、システムバス２０６に接続された一つ以上のユーザ入力装置２０８（例えば、キーボード、マウス）から受信される。視覚的な出力は、画素型のディスプレイ装置２１０（例えば、従来のＣＲＴ又はＬＣＤ型のモニタ）において与えられる。このディスプレイ装置２１０は、システムバス２０６に接続されたグラフィックス処理用サブシステム２１２の制御のもとで動作する。システムディスク２４０及び一つ以上のリムーバブル記憶装置２２９［例えば、フロッピーディスクドライブ、コンパクトディスク（ＣＤ）ドライブ及び／又はＤＶＤドライブ］のような他のコンポーネントは、システムバス２０６に接続してもよい。システムバス２０６の実装には、ＰＣＩ（Peripheral Component Interconnect）、ＡＧＰ（Advanced Graphics Processing）及び／又はＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｅ）を含む一つ以上のバスプロトコルを用いることができる。そのため、ノースブリッジ、サウスブリッジのような適切な「ブリッジ」チップ（不図示）を設け、コンポーネント及び／又はバスを相互接続するようにすることができる。
【００１３】
[0017]グラフィックス処理用サブシステム２１２は、等時性のパイプライン化されたプロセッサであり、ディスプレイ装置２１０において画像を生成するための決定論的な制御を有する。ここで用いられているように、等時性のプロセッサは、任意のデータ処理デバイスを含む。このデータ処理デバイスは、出力データの配信及び／又は入力データの受信を所定スケジュールで行う。例えば、等時性のグラフィックス処理用サブシステム２１２は、所定のフレームレートで出力信号をディスプレイ装置２１０に転送するように構成することができる。このフレームレートは、プログラム可能なレートとしてもよい。等時性のパイプライン化されたプロセッサは、米国特許出願第１０／９０１８８７号明細書にさらに記載される。この米国出願明細書は、２００４年７月２８日に出願され、発明の名称を“Isochronous Pipelined Processor with Deterministic Control”とし、参照することにより、あたかも完全に開示したかの如く本明細書に組み込まれる。本発明に焦点をあわせるため、等時性のパイプライン化されたグラフィックスプロセッサについては、以下、概略的に記載し、本発明の理解に不必要と考えられる特定の詳細部については本明細書から省略した。
【００１４】
[0018]グラフィックス処理用サブシステム２１２は、グラフィックス処理ユニット（ＧＰＵ）２１４及びグラフィックスメモリ２１６を含む。このグラフィックス処理用サブシステム２１２は、一つ以上の集積回路デバイスを用いて実装することができる。この集積回路デバイスには、例えば、プログラマブルプロセッサ、特定用途向け集積回路（ＡＳＩＣ）及びメモリデバイスを用いることができる。ＧＰＵ２１４は、グラフィックスパイプライン２２０、メモリインタフェースモジュール２２２及び走査出力（scanout）モジュール２２４を含む。グラフィックスパイプライン２２０は、さまざまなタスクを実施するように構成することができる。そのタスクは、システムバス２０６によって与えられたグラフィックスデータから画素データを生成すること（例えば、様々な２Ｄ及び／又は３Ｄレンダリングアルゴリズムを実施すること）、グラフィックスメモリ２１６と相互作用し画素データを格納及び更新することなどに関する。グラフィックスパイプライン２２０及び走査出力モジュール２２４と通信するメモリインタフェースモジュール２２２は、グラフィックスメモリ２１６とのすべての相互作用を管理する。メモリインタフェースモジュール２２２は、システムバス２０６からグラフィックスメモリ２１６に受信される画素データを、グラフィックスパイプライン２２０による処理なしで書き込むための経路を含んでもよい。
【００１５】
[0019]グラフィックスメモリ２１６は、従来の一般的な設計を有する一つ以上の集積回路メモリデバイスを用いて実装することができ、様々な物理的又は論理的細分割部（subdivisions）を含んでもよい。この細分割部は、画素バッファ２２６、コマンドバッファ２２８などである。画素バッファ２２６は、画像に対する（又は画像の一部に対する）画素データを格納する。この画素データは、走査出力モジュール２２４によって読み込まれ、処理され、表示用のディスプレイ装置２１０に送られる。この画素データは、例えば、システムバス２０６を経由してＧＰＵ２１４のグラフィックスパイプライン２２０に与えられる２−Ｄ又は３−Ｄのシーンデータから生成されるか、ＣＰＵ２０２において実行される様々なプロセスによって生成されるかされ、システムバス２０６を経由して画素バッファ２２６に与えられる。いくつかの実施形態において、画素バッファ２２６をダブルバッファ方式とすることができる。そのため、第１の画像に対するデータが表示用として「フロント」バッファから読み込まれ、現在表示されている画像に影響されることなく第２の画像に対するデータが「バック」バッファに書き込まれるようにすることができる。コマンドバッファ２２８は、システムバス２０６を経由して受信したコマンドを待ち行列に入れる（queue）。このコマンドは、グラフィックスパイプライン２２０及び／又は走査出力モジュール２２４による実行用である。グラフィックスメモリ２１６の他の部分は、ＧＰＵ２１４、ＧＰＵ２１４用の実行可能プログラムコードなどによって要求されるデータ（例えば、テクスチャデータ、色探査テーブルなど）を格納するために用いることができる。
【００１６】
[0020]走査出力モジュール２２４は、ＧＰＵ２１４を有する単一チップに一体化すること又は別個のチップに実装することが可能である。走査出力モジュール２２４は、画素バッファ２２６から画素色データを読み込み、画素色データを処理し、処理された画素色データを表示すべきディスプレイ装置２１０に転送する。一実施形態においては、走査出力モジュール２２４が、等時性を伴って動作し、ＧＰＵ２１４又はコンピュータシステム２００の他の場所において発生する任意の他の動作に関係なく、所定のリフレッシュレート（例えば、８０Ｈｚ）で画素データのフレームを走査出力する。いくつかの実施形態において、所定のリフレッシュレートをユーザ選択パラメータとし、走査出力の順序を表示形式（例えば、インターレース走査又はプログレッシブ走査）に適するように変化させることができる。走査出力モジュール２２４は、他の動作を実施してもよい。例えば、ビデオオーバレイ画像、カーソルオーバレイ画像又は同様のもの用のデータに画素バッファ２２６からの画素データを結合することによって複合スクリーン画像（composite screen images）を生成する動作及び／又は特定のディスプレイハードウェアに対する色値を調整する動作である。上記のデータは、グラフィックスメモリ２１６、システムメモリ２０４又はその他のデータ元（不図示）から得ることができる。上記の走査出力モジュール２２４の動作は、走査出力モジュール２２４のディスプレイパイプラインにおいて行われる。
【００１７】
[0021]コンピュータシステム２００の動作中に、ＣＰＵ２０２は、システムメモリ２０４に（一時的に）常駐する様々なプログラムを実行する。一実施形態において、これらのプログラムは、グラフィックス処理用サブシステム２１２に対する一つ以上のドライバプログラム２３６、一つ以上のアプリケーションプログラム２３４及び一つ以上のオペレーティングシステム（ＯＳ）プログラム２３２を含む。これらのプログラムがシステムメモリ２０４に常駐しているように示されているが、ＣＰＵ２０２による実行用プログラム動作命令を提供するためのいかなる特定のメカニズムにも本発明が限定されないことが理解されよう。例えば、いくつか又はすべてのプログラム動作命令は、ＣＰＵ２０２（例えば、オンチップの動作命令キャッシュ及び／又は様々なバッファとレジスタ）、システムディスク２４０のページファイル又はメモリマップファイル及び／又は他の格納空間において、任意の与えられた時間存在することができる。
【００１８】
[0022]オペレーティングシステムプログラム２３２及び／又はアプリケーションプログラム２３４は、従来の設計を有することができる。例えば、アプリケーションプログラム２３４は、ビデオゲームプログラムであってもよく、グラフィックスデータを生成し、ＧＰＵ２１４（例えば、グラフィックスパイプライン２２０）の適当なレンダリング機能を呼び出し、グラフィックスデータを画素データに変換する。別のアプリケーションプログラム２３４が、画素データを生成し、表示のためのグラフィックス処理用サブシステム２１２に画素データを与えることもできる。理解すべきことは、任意の数のアプリケーションプログラム（画素データ及び／又はグラフィックスデータ）をＣＰＵ２０２で同時に実行することができる点である。オペレーティングシステムプログラム２３２（例えば、Microsoft Windowsオペレーティングシステムのグラフィカルデバイスインタフェース（ＧＤＩ）コンポーネント）が、グラフィックス処理用サブシステム２１２によって処理されるグラフィックスデータ及び／又は画素データを生成してもよい。
【００１９】
[0023]ドライバプログラム２３６は、グラフィックスパイプライン２２０及び走査出力モジュール２２４の両方を含むグラフィックス処理用サブシステム２１２との通信が可能である。ドライバプログラム２３６は、一つ以上の標準的なアプリケーションプログラムインタフェース（ＡＰＩ）を実装することが有効である。このＡＰＩは、例えば、グラフィックス処理用サブシステム２１２と通信するためのD3D、Microsoft DirectX又はOpen GLである。そのため、任意の数のＡＰＩ又はＡＰＩの組み合わせをサポートすることができる。いくつかの実施形態においては、別個のドライバプログラム２３６が設けられ、様々なＡＰＩを実装することができるようにする。オペレーティングシステムプログラム２３２及び／又はアプリケーションプログラム２３４は、適切なＡＰＩ関数呼び出しを行うことによって、システムバス２０６を経由してグラフィックスデータ又は画素データをグラフィックス処理用サブシステム２１２に転送すること、グラフィックスパイプライン２２０の動作を制御すること、走査出力モジュール２２４用の状態パラメータを修正すること、などをドライバプログラム２３６に対して命令する。ＡＰＩ関数コールに応答してドライバプログラム２３６によってグラフィックス処理用サブシステム２１２に転送される特定のコマンド及び／又はデータは、ＧＰＵ２１４の実装によって変化させることができる。また、ドライバプログラム２３６は、オペレーティングシステムプログラム２３２又はアプリケーションプログラム２３４による制御なしに、付加的な機能（例えば、特別な視覚的効果）を実装するコマンド及び／又はデータを送信してもよい。
【００２０】
[0024]いくつかの実施形態において、コマンドバッファ２２８は、システムバス２０６を経由して受信された、ＧＰＵ２１４による実行用のコマンドを待ち行列に入れる。より詳細には、ドライバプログラム２３６は、コマンドストリームをコマンドバッファ２２８に書き込むことができる。そのストリームは、グラフィックスパイプライン２２０用のデータ及びレンダリングコマンドを走査出力モジュール２２４用の状態コマンドと同様に含むことができる。いくつかの実施形態において、コマンドバッファ２２８は、論理的又は物理的に分離したセクションを含むことができる。このセクションは、グラフィックスパイプライン２２０及び走査出力モジュール２２４に関するコマンド用のものである。他の実施形態においては、コマンドを、コマンドバッファ２２８内で混合し、ＧＰＵ２１４内の適切な制御回路によって適切なパイプラインに向けることができる。
【００２１】
[0025]コマンドバッファ２２８（又はその各セクション）はファーストインファーストアウト（ＦＩＦＯ）バッファであり、ＣＰＵ２０２によって書き込まれ、ＧＰＵ２１４によって読み込まれる。読み込み及び書き込みは、非同期的に行うことができる。一実施形態において、ＣＰＵ２０２は、コマンドバッファ２２８の「プット」ポインタ（“put” pointer）によって決定される位置に新しいコマンド及びデータを周期的に書き込む。プットポインタは、ＣＰＵ２０２によって各書き込み後にインクリメントされる。ＧＰＵ２１４は、コマンドバッファ２２８に以前に格納されたコマンド及びデータセットの連続的な読み込み及び処理を非同期的に行うことができる。ＧＰＵ２１４は、コマンドバッファ２２８における読み込み位置を識別する「ゲット」ポインタ（“get” pointer）を保持する。ＣＰＵ２０２がＧＰＵ２１４に比べて十分先に進んでいる場合、ＧＰＵ２１４は、ＣＰＵ２０２を待つためのアイドル時間の影響を受けることなく、画像をレンダリングすることができる。いくつかの実施形態において、コマンドバッファの大きさ及び場面の複雑さに応じて、ＣＰＵ２０２は、ＧＰＵ２１４によってレンダリングされるフレームの数フレーム先のフレーム用のコマンド及びデータセットを書き込むことができる。コマンドバッファ２２８は、固定サイズ（例えば、５ＭＢｙｔｅｓ）を有してもよく、ラップアラウンド（wraparound）方式（例えば、最終位置に書き込み後、ＣＵＰ２０２が「プット」ポインタを初期位置にリセットしてもよい）で書き込み及び読み込みを行うことができる。
【００２２】
[0026]いくつかの実施形態において、グラフィックスパイプライン２２０によるレンダリングコマンドの実行は、走査出力モジュール２２４の動作に同期する必要がない。例えば、上述のように画素バッファ２２６がダブルバッファ方式である場合、走査出力モジュール２２４がフロントバッファから読み出ししている間も、グラフィックスパイプライン２２０は自由にバックバッファを上書きすることができる。したがって、グラフィックスパイプライン２２０は、コマンドを受信したままにコマンドの読み込み及び処理をすることができる。バックバッファ及びフロントバッファの切り替え（flipping）は、走査出力フレームの端に同期することができる。例えば、グラフィックスパイプライン２２０がバックバッファにおいて新画像を完成させた場合、バッファの切り替えが可能な、カレントフレームに対する走査出力の端までグラフィックスパイプライン２２０の動作を休止することができる。そのような同期化の特徴を実装するための様々な技術については、本発明の理解において重要ではないので除外する。
【００２３】
[0027]図３は、ソフトウェアインタフェース回路３９０を含む図２の走査出力モジュール２２４の詳細を示す。本発明に係る一実施形態において、ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４の一つ以上の部分に対するクロックを自律的に無効化するように構成される。この実施形態において、走査出力モジュール２２４は、２つの物理的な集積回路（ＩＣｓ）、ローカルＩＣ３０１及びリモートＩＣ３０２に分割される。しかしながら、走査出力モジュール２２４は、一つ又は任意の数のＩＣを備えてもよい。
【００２４】
[0028]ディスプレイ装置２１０用の画素データを処理するため、メモリインタフェース３１０は、２つの並列な画素処理ヘッド、第１ヘッド３１５及び第２ヘッド３２０のうちの一つ又は両方によって処理するためのデータを受信する。いくつかの実施形態において、ヘッド３１５及びヘッド３２０は、例えば、２つのディスプレイ装置２１０を同時に駆動することができる。ヘッド３１５は、コンポジタ３１６、データパイプライン３１７及びラスタ生成器３１８を含む。同様に、ヘッド３２０は、コンポジタ３２１、データパイプライン３２２及びラスタ生成器３３３をヘッド３１５に対して並列に含む。一つ以上のディスプレイ装置２１０を駆動するために、処理されたビデオデータは、ヘッド３１５及び／又はヘッド３２０からバーチャルクロスバー３３０を経由して一つ以上の出力リソース３４０に出力される。この出力リソース３４０は、ＤＡＣ３５０、シリアル出力リソース３５５及びパラレル出力リソース３６０を含む。
【００２５】
[0029]ローカルクロック制御モジュール３８０は、ローカルクロック生成器３８１と協働して、ローカルＩＣ３０１内への分配用のクロックを選択的に与える。同様に、リモートクロック制御モジュール３８５は、リモートクロック生成器３８６と協働して、リモートＩＣ３０２内への分配用のクロックを選択的に与える。分離したモジュールとして図示及び記載がなされているが、いくつかの実施形態において、ローカルクロック制御モジュール３８０は、ローカルクロック生成器３８１に一体化された機能のうちのすべて又は一部を有し、リモートクロック制御モジュール３８５は、リモートクロック生成器３８６に一体化された機能のうちのすべて又は一部を有する。さらにここで記載されるように、ソフトウェアインタフェース回路３９０は、選択的なクロック分配を制御する。
【００２６】
[0030]ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４によって受信されるコマンド及び／又はデータに基づいて、走査出力モジュール２２４のどの部分が次回の周期で有効化される必要がありどの部分が次回の周期でアイドル状態になるか、を判定するように構成されている。ソフトウェアインタフェース回路３９０は、次回の周期に走査出力モジュール２２４内の様々なコンポーネントによって実施される機能に応じて動的に走査出力モジュール２２４の機能コンフィギュレーション（一部が機能し、一部がアイドル状態になる）を判定し制御する。ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４において次回の周期で機能するが現在アイドル状態の部分に対して、次回の周期の開始と同時又は前もって回路のクロックを有効化する。走査出力モジュール２２４の次回の周期でアイドル状態になる部分に対して、ソフトウェアインタフェース回路３９０は、アイドル状態になる回路への一つ以上のクロックを無効化することができる。
【００２７】
[0031]一実施形態において、ソフトウェアインタフェース回路３９０は、機能コンフィギュレーションに従ってローカルＩＣ３０１用のローカルクロック制御モジュール３８０及びリモートＩＣ３０２用のリモートクロック制御モジュール３８５にコマンドを送る。その結果、ソフトウェアインタフェース回路３９０は、ローカルクロック生成器３８１及びリモートクロック生成器３８６によって走査出力モジュール２２４のコンポーネントにそれぞれ与えられる一つ以上のクロックを、適切に有効化又は無効化する。
【００２８】
[0032]ソフトウェアインタフェース回路３９０は、次回の周期における走査出力モジュール２２４の機能コンフィギュレーションを判定するために、走査出力モジュール２２４に到達する実質的にすべての通信を受信し解釈する。いくつかの実施形態において、ソフトウェアインタフェース回路３９０は、ＣＰＵ２０２からの状態コマンドを直接受信し、次回の周期における機能コンフィギュレーションを指示する。例えば、ＣＰＵ２０２又はグラフィックス処理用サブシステム２１２においてソフトウェアが動作すると、メモリマップレジスタ書き込みによってソフトウェアインタフェース回路３９０へコマンド及び／又はデータが送信される。ソフトウェアインタフェース回路３９０は、そのコマンド及び／又はデータから次回の周期の状態情報を判定する。その状態情報は、原子的に更新され、走査出力モジュール２２４の機能コンフィギュレーションになる。その機能コンフィギュレーションに基づいて、ソフトウェアインタフェース回路３９０は、次回の周期において有効化される必要がある又は無効化が可能である走査出力モジュール２２４の部分を判定する。
【００２９】
[0033]他の実施形態において、ソフトウェアインタフェース回路３９０は、例えばバストラフィックを「察知」することによってコマンド及び／又はデータを間接的に受信し、それらから機能コンフィギュレーションを解釈する。ソフトウェアインタフェース回路３９０と走査出力モジュール２２４内の他のコンポーネントとの間には多数のバスインタフェース（不図示）が存在し、次回の周期は、バスの一つ及び対応するハードウェアへ一回の書き込みを超えるデータ受信用の継続期間になり得る。例えば、ソフトウェアがヘッド３１５のレジスタに書き込もうとし次回のレジスタ書き込み時間においてヘッド３１５へのクロックが現在無効化されるとソフトウェアインタフェース回路３９０がソフトウェアコマンドを解釈した場合、ソフトウェアインタフェース回路３９０はヘッド３１５のレジスタにデータを送る前にクロックを所定の時間無効化する。一旦、レジスタが書き込まれると、ヘッド３１５に書き込まれるべきレジスタがない場合、ソフトウェアインタフェース回路３９０はヘッド３１５へのクロックを無効化することができる。その他の例において、ソフトウェアインタフェース回路３９０は、データが書き込まれ、次回の周期においてＤＡＣ３５０の一つを構成するようにすると判定する。ソフトウェアインタフェース回路３９０は、ソフトウェアインタフェース回路３９０からＤＡＣ３５０に達するデータに対して、適切なＤＡＣ３５０へのクロックを有効化する。また、ソフトウェアインタフェース回路３９０は、次回の周期においてＤＡＣ３５０に書き込む。一旦、データが書き込まれ、ＤＡＣ３５０に書き込むべきさらなるデータがない場合、ソフトウェアインタフェース回路３９０はＤＡＣ３５０へのクロックを無効化することができる。
【００３０】
[0034]次回の周期は、垂直走査出力周期又はラスタスキャン周期に対応してもよい。例えば、垂直走査出力周期又はラスタスキャン周期に一度、ソフトウェアインタフェース回路３９０は、次々回（next upcoming）のラスタスキャン周期に対する機能コンフィギュレーションを判定することができる。次回のラスタスキャン周期において、例えば、ヘッド３２０がアイドル状態にありヘッド３１５の表示論理がビデオデータを生成するように機能する場合、ソフトウェアインタフェース回路３９０は、次回のラスタスキャン周期においてヘッド３２０回路部へのクロックを無効化する。さらに他の例では、次回のラスタスキャン周期においてＤＡＣ３５０の一つがヘッド３１５及びヘッド３２０のうちのどちらか一方に接続され、ディスプレイ装置２１０に画像を表示するようなプログラムシーケンスである場合、ソフトウェアインタフェース回路３９０は、ＤＡＣ３５０が画像データを生成することになっている周期に対して適切なＤＡＣ３５０へのクロックを有効化することができる。ＤＡＣ３５０がもはや表示に必要ないとソフトウェアインタフェース回路３９０が判定した場合、ソフトウェアインタフェース回路３９０は、ＤＡＣ３５０へのクロックをオフすることができる。
【００３１】
[0035]ソフトウェアインタフェース回路３９０において様々なハードウェア機能コンフィギュレーションを有効に管理するために、走査出力モジュール２２４におけるリソースは、所定の数の個別的なクロック領域に細分化される。一実施形態において、ソフトウェアインタフェース回路３９０、メモリインタフェース３１０、ローカルクロック制御モジュール３８０及びリモートクロック制御モジュール３８５は、定常的にオン状態で４００ＭＨｚクロックを与えるクロック領域を備える。第１の動的クロック領域は、ヘッド３１５の表示論理（コンポジタ３１６、データパイプライン３１７及びラスタ生成器３１８）を備える。第２の動的クロック領域は、ヘッド３２０の表示論理（コンポジタ３２１、データパイプライン３２２及びラスタ生成器３３３）を備える。各クロック領域は、複数のクロック周波数又は位相を含むことができる。例えば、ラスタ生成器３１８，３３３は、コンポジタ３１６，３２１及びデータパイプライン３１７，３２２に与えられるクロックと異なるクロック及び／又は前記与えられるクロックに追加のクロックを受信することができる。
【００３２】
[0036]他のクロック領域は、一つ以上の出力リソース３４０に対して予め決定することができる。出力リソース３４０は、例えば、ＤＡＣ３５０、シリアル出力リソース３５５及びパラレル出力リソース３６０である。これらは、互いに独立に動作するが、ヘッド３１５表示論理及び／又はヘッド表示論理３２０に接続されて動作する。他のクロック領域は、走査出力モジュール２２４において他の論理を含むことができ、例えば、任意のヘッド又は出力リソースに特有でない論理又は回路部である。
【００３３】
[0037]走査出力モジュール２２４が典型的な実施形態において等時性を有するので、ソフトウェアインタフェース回路３９０は、クロック状態を最適に管理するために、走査出力モジュール２２４におけるリアルタイムの機能コンフィギュレーション又はハードウェアの状態を必要とする。例えば、ソフトウェアインタフェース回路３９０は、ヘッド３１５へのクロックを有効化又は無効化することができるのみではない、なぜなら、ヘッド３１５へのクロックは、ヘッド３１５がデータパイプライン３１７を通るデータを処理している間、絶えず動作している必要があるためである。
【００３４】
[0038]走査出力モジュール２２４の自律的なクロック管理の確度を高めるため、いくつかの実施形態において、ローカルクロック制御モジュール３８０及び／又はリモートクロック制御モジュール３８５は、適切なクロックを有効化又は無効化するための所定時間が経過した後にソフトウェアインタフェース回路３９０に対して通知（ACK）を送信する。したがって、「クロックマスタ」としてのソフトウェアインタフェース回路３９０は、走査出力モジュール２２４内のハードウェアの状態の原子的な情報を有し、特定のクロックを有効化又は無効化する場合に正しく計時することができる。例えば、ソフトウェアインタフェース回路３９０を、ヘッド３１５へのクロックを有効化するための所定の時間（例えば、所定の最悪値）によってプログラムすることができる。コマンド又はデータがヘッド３１５におけるレジスタに接続することになっている場合、ソフトウェアインタフェース回路３９０はヘッド３１５を有効化するべき時間を正確に計時し、次回の書き込み周期においてレジスタ書き込みが発生する前にのみヘッド３１５はオンすることができるようにする。ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４のハードウェアコンポーネントに関するクロックマスタとして動作する。そのため、ソフトウェア動作命令は、ヘッド３１５のレジスタにデータを送信しヘッド３１５に対して有効化／無効化されるクロックをソフトウェアインタフェース回路３９０が調整する要求とみなされ、ヘッド３１５への関連のあるコマンドストリームを有効化し、ヘッド３１５に接続するさらなる通信がなされることになっていない場合にヘッド３１５へのクロックを無効化する。この方法において有利なことに、ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４におけるクロックの有効化及び無効化を管理する必要性からソフトウェアを自由にする。
【００３５】
[0039]いくつかの実施形態において、クロック有効化／無効化の待ち時間を除くために、ＣＰＵ２０２又はグラフィックス処理用サブシステム２１２上でソフトウェアが動作すると、ソフトウェアインタフェース回路３９０によって行われる自律的なクロック管理を選択的に有効化又は無効化することができる。例えば、ソフトウェアは、コンピュータシステム２００の初期化又はブート中に、自動的なクロック管理モードを無効化し、コンピュータシステム２００のすべての要素が有効化されることを確認する。この確認においては、例えば、初期化中にレジスタへの書き込み又はレジスタからの読み出しが確実に可能であることを確認する。例えば、ソフトウェアは、ソフトウェアインタフェース回路３９０へのメモリマップによる（memory-mapped）書き込みによって自律的なクロック管理モードを有効化又は無効化することができる。
【００３６】
[0040]図４は、本発明に係る一実施形態において、図２及び３の走査出力モジュール２２４におけるワークベース型クロック管理のための単純化された方法を示す。ステップ４０５において、ＣＰＵ２０２又はグラフィックス処理サブシステム２１２上のソフトウェアが動作すると、走査出力モジュール２２４の第１の回路（例えば、ヘッド３１５）用のコマンド及び／又はデータが生成される。ステップ４１０において、ＣＰＵ２０２又はグラフィックス処理サブシステム２１２上のソフトウェアが動作すると、コマンド及び／又はデータがヘッド３１５に送信される。コマンド及び／又はデータは、選択的に、ソフトウェアインタフェース回路３９０用の状態コマンドを含むことができる。
【００３７】
[0041]ステップ４１５において、走査出力モジュール２２４のソフトウェアインタフェース回路３９０は、コマンド及び／又はデータ（又は、状態コマンド）を受信し、そのコマンド及び／又はデータに基づいて、次回の周期において走査出力モジュール２２４のどの部分が有効化され（例えば、ヘッド３１５におけるレジスタへのデータ書き込みサイクル中にヘッド３１５が有効化されることが必要である）、次回の周期においてどの部分（例えば、ＤＡＣ３５０）がアイドル状態になるかを判定する。ステップ４２０において、ソフトウェアインタフェース回路３９０は、ヘッド３１５を含むクロック領域へのクロックが現在無効化されている場合、次回の周期の前にヘッド３１５を含むクロック領域へのクロックを有効化する。加えて、ソフトウェアインタフェース回路３９０は、次回の周期においてアイドル状態になるＤＡＣ３５０を含むクロック領域へのクロックを無効化する。ステップ４２５において、ローカルクロック制御モジュール３８０及び／又はリモートクロック制御モジュール３８５は、ヘッド３１５へのクロックの有効化及びＤＡＣ３５０へのクロックの無効化を通知（ＡＣＫ）する。
【００３８】
[0042]図４に関して記載された方法は走査出力モジュール２２４における二つの回路用のクロックの有効化及び無効化を含むが、ソフトウェアインタフェース回路３９０は走査出力モジュール２２４における仮想的に無制限の数のクロック領域に対する機能コンフィギュレーションを維持することができる。いくつかの実施形態において、ソフトウェアインタフェース回路３９０において実装されたステートマシンによって管理されるクロック領域の数は、比較的大きく、複合的である。そのようなものとして、図４のステップ４１５において、ソフトウェアインタフェース回路３９０は、次回の周期において二つ以上のクロック領域が有効化される必要があり、二つ以上のクロック領域がアイドル状態になることを判定することができる。したがって、ステップ４２０において、ソフトウェアインタフェース回路３９０は、次回の周期において二つ以上のクロック領域用のクロックを有効化し、二つ以上のクロック領域用のクロックを無効化することができる。同様に、ステップ４２５において、多くのクロック制御は、多数のクロック領域用のクロックの有効化及び無効化をＡＣＫすることができる。
【００３９】
[0043]従来のソフトウェア指示型のクロック管理方式においては、クロック生成器がクロックをシステムの各機能単位に与え、ハードウェアへのメモリマップレジスタ書き込みによってソフトウェアはクロックのそれぞれを無効化することができる。システムがデータ処理パイプラインを含むところでは、ソフトウェアは、クロックがオフされるときにパイプラインステージにデータが存在しないことを確認する必要がある。典型的に、この同期化は、パイプラインからメモリマップの位置に戻るステータス信号によって行われる。このステータス信号は、パイプラインユニットにデータがありパイプラインがアイドル状態であるかどうかを示す。メモリリードによってステータス信号が読み込まれると、ソフトウェアは、パイプライン用のクロックが無効化されるようにする。
【００４０】
[0044]ソフトウェアがハードウェアの所定の部分へのクロックを動的に有効化又は無効化する役割を果たす従来のクロック管理方式と対照的に、ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４におけるクロックを動的に有効化及び／又は無効化するのに安全又は適切であるときを自律的に判定する。ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４内の他のハードウェア要素の機能コンフィギュレーションという原子的な観点を有するので、ソフトウェアインタフェース回路３９０は、走査出力モジュール２２４の特定の部分がクロックを無効化することによって無効化することができるかどうかの判定がより正確であるという点において有利である。従来のソフトウェア指示型のクロック無効化用メカニズムは、クロックを無効化することができるかどうかに関して少しでも疑いがある場合、有効化されたクロックを残さなければならない。それに対し、ソフトウェアインタフェース回路３９０は、比較的より頻繁により長い時間クロックを無効化することができ、ソフトウェア指示型のメカニズムに比べてより効率的にクロック管理を行う。
【００４１】
[0045]走査出力モジュール２２４においてクロックマスタとしてソフトウェアインタフェース回路３９０を有するので、ハードウェアの部分が機能するか否か、クロックが次回の周期において有効化されるか否か又はハードウェアがアイドル状態になる予定でありクロックを無効化できるかどうかを判定するための待ち時間が、従来のソフトウェア制御型のクロック管理方式に比べて、減少する。一つの有利な点は、論理リソースにソフトウェアが書き込む場合にクロック領域における適切な論理リソース用のクロックが有効化されることを、ソフトウェアインタフェース回路３９０による制御が保証する点である。ソフトウェアインタフェース回路３９０は、次回の周期においてクロック領域の一つを無効化することができるかどうかを判定する点に関して、その処理ループにソフトウェアがないのではるかに高速である。概略的に述べるならば、ソフトウェアインタフェース回路３９０は、ソフトウェア用のハードウェアにおける制御された状態を確保する。さらに有利な点は、クロックのオン／オフ状態遷移を行う場合、ソフトウェアインタフェース回路３９０が競合状態及び他の問題点の発生を妨げる点である。
【００４２】
[0046]ソフトウェアインタフェース回路３９０が有利な点は、走査出力モジュール２２４におけるクロック領域へのクロックの有効化又は無効化に関してソフトウェア及びハードウェアを同期する単一の調整点として作用する点である。ソフトウェア制御型のクロック管理方式においては、種々のソフトウェアのスレッドがハードウェアの様々な部分を有効化又は無効化するそれぞれの判定において競合する可能性がある。ハードウェア状態管理の単一のメカニズムは、一般的にソフトウェアにおいて存在しない。また、ソフトウェアインタフェース回路３９０の有利な点は、ソフトウェアの無秩序を超えた秩序を施行する点である。
【００４３】
[0047]さらに、ソフトウェアインタフェース回路３９０は、ソフトウェア制御型のクロック無効化メカニズムに比べてより頻繁にクロックを無効化することができる。ソフトウェア制御型のクロック無効化メカニズムにおける競合状態のようなエラー又はイベントを防止するには、ソフトウェアが論理の部分を無効化することができるかどうかに関して少しでも疑いがある場合、ソフトウェアは競合状態の発生を防止することが可能な論理を継続する。対照的に、ソフトウェアインタフェース回路３９０によるハードウェア制御を用いると、走査出力モジュール２２４において論理の部分をより安全に無効化することができるかどうかに関して正確な判定が行われる。このようにすれば、論理の部分を無効化することが可能な総時間がソフトウェア制御型の方式に比べて増大する。
【００４４】
[0048]上ではグラフィックスエンジンに関して記載したが、本システム及び方法は包括的にほぼ任意の回路部に適用される。本システム及び方法において、回路部は多数のクロック領域に分割され、クロック生成器は第１のクロック領域及び第２のクロック領域に一つ以上のクロックを選択的に与え、コントローラは一つ以上のクロック領域が次回の周期において利用されクロック領域が次回の周期中に利用されるか否かに応じて選択的に一つ以上のクロック領域を有効化及び／又は無効化するかどうかを次回の周期に対して判定する。
【図面の簡単な説明】
【００４５】
【図１】従来技術におけるコンピュータシステムの概略的なブロック図である。
【図２】本発明の実施形態に係るコンピュータシステムのブロック図である。
【図３】本発明に係る一実施形態において、走査出力モジュールの一つ以上の部分へのクロックを自律的に無効化するように構成されるソフトウェアインタフェース回路を含む図２の走査出力モジュールの詳細を示す図である。
【図４】本発明に係る一実施形態において、図２，３の走査出力モジュールにおけるワークベース型クロック管理用の単純化された方法を示す工程系統図である。
【符号の説明】
【００４６】
２００…コンピュータシステム、２０２…中央演算装置、２０４…システムメモリ、２０６…システムバス、２０８…ユーザ入力装置、２１０…ディスプレイ装置、２１２…グラフィックス処理用サブシステム、２１６…グラフィックスメモリ、２２０…グラフィックスパイプライン、２２２…メモリインタフェースモジュール、２２４…モジュール、２２４…走査出力モジュール、２２６…画素バッファ、２２８…コマンドバッファ、２２９…リムーバブル記憶装置、２３２…プログラム、２３２…オペレーティングシステムプログラム、２３４…アプリケーションプログラム、２３６…ドライバプログラム、２４０…システムディスク、３０１…ローカルＩＣ、３０２…リモートＩＣ、３１０…メモリインタフェース、３１５…ヘッド、３１６，３２１…コンポジタ、３１７，３２２…データパイプライン、３１８，３３３…ラスタ生成器、３２０…ヘッド、３３０…バーチャルクロスバー、３３３…ラスタ生成器、３４０…出力リソース、３５５…シリアル出力リソース、３６０…パラレル出力リソース、３８０…ローカルクロック制御モジュール、３８１…ローカルクロック生成器、３８５…リモートクロック制御モジュール、３８６…リモートクロック生成器、３９０…ソフトウェアインタフェース回路。
【図１】
2007293852.tif 000003
【図２】
2007293852.tif 000004
【図３】
2007293852.tif 000005
【図４】
2007293852.tif 000006
【外国語明細書】
2007293852000001.pdf