(57)【特許請求の範囲】
【請求項１】
コンピュータ実行可能プログラムコードが記憶されている非一時的なコンピュータ可読記憶媒体であって、前記コンピュータ実行可能プログラムコードは、コンピュータシステムにおいて実行されるときに前記コンピュータシステムに、
集積回路の素子を定義する第１プログラムモデルを含むソースコードの一部を受信する工程と、
前記ソースコードの前記一部に基づき、第１レジスタ転送レベル（ＲＴＬ）記述を生成する第１生成工程と、
前記第１ＲＴＬ記述に基づきライブラリコンポーネントを定義する定義工程であって、前記ライブラリコンポーネントは、前記集積回路の前記素子に関連付けられている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースとを有し、前記入力インターフェースは少なくとも１つの入力変数を第１メモリ位置に対してマッピングするように構成され、前記出力インターフェースは少なくとも１つの出力変数を第２メモリ位置に対してマッピングするように構成されている、前記ライブラリコンポーネントの前記定義工程と、
前記集積回路を定義する第２プログラムモデルを含む前記ソースコードを受信する工程と、
前記第１プログラムモデルに対応する前記ソースコードの前記一部を、前記ライブラリコンポーネントに置き換える工程と、
前記ソースコードに基づき第２ＲＴＬ記述を生成する第２生成工程と
を実行させ、
前記第２ＲＴＬ記述を生成する前記第２生成工程において、
前記ライブラリコンポーネントは、受信された入力と同じクロックサイクルにおいて出力を生成する、
非一時的なコンピュータ可読記憶媒体。
【請求項２】
前記第１プログラムモデルは、マルチプレクサ論理を含む状態機械を定義する、
請求項１記載の非一時的なコンピュータ可読記憶媒体。
【請求項３】
前記第１プログラムモデルは、算術デコーダを定義する、
請求項１記載の非一時的なコンピュータ可読記憶媒体。
【請求項４】
前記第１ＲＴＬ記述を生成する前記第１生成工程は、
高水準言語によって前記ソースコードの前記一部に基づき、前記第１プログラムモデルのシミュレーションを行う第１シミュレーション工程と、
前記第１ＲＴＬ記述に基づき前記第１プログラムモデルのシミュレーションを行う第２シミュレーション工程と、
前記第１シミュレーション工程の出力を、前記第２シミュレーション工程の出力と比較する工程と
を含む、請求項１記載の非一時的なコンピュータ可読記憶媒体。
【請求項５】
前記第１ＲＴＬ記述を生成する前記第１生成工程は、
前記第１ＲＴＬ記述を、前記集積回路の前記素子と、前記集積回路とのうちの少なくとも１つの設計仕様と比較する工程を含む、
請求項１記載の非一時的なコンピュータ可読記憶媒体。
【請求項６】
前記入力インターフェースと前記出力インターフェースとは、高水準プログラミング言語によって定義されるハードウェアインターフェースである、
請求項１記載の非一時的なコンピュータ可読記憶媒体。
【請求項７】
コンピュータ実行可能プログラムコードが記憶されている非一時的なコンピュータ可読記憶媒体であって、前記コンピュータ実行可能プログラムコードは、コンピュータシステムにおいて実行されるときに前記コンピュータシステムに、
集積回路の素子を定義する第１プログラムモデルを含むソースコードの一部を受信する工程と、
前記ソースコードの前記一部に基づき、第１レジスタ転送レベル（ＲＴＬ）記述を生成する第１生成工程と、
前記第１ＲＴＬ記述に基づきライブラリコンポーネントを定義する定義工程であって、前記ライブラリコンポーネントは、前記集積回路の前記素子に関連付けられている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースとを有し、前記入力インターフェースは少なくとも１つの入力変数を第１メモリ位置に対してマッピングするように構成され、前記出力インターフェースは少なくとも１つの出力変数を第２メモリ位置に対してマッピングするように構成されている、前記ライブラリコンポーネントの前記定義工程と、
前記集積回路を定義する第２プログラムモデルを含む前記ソースコードを受信する工程と、
前記第１プログラムモデルに対応する前記ソースコードの前記一部を、前記ライブラリコンポーネントに置き換える工程と、
前記ソースコードに基づき第２ＲＴＬ記述を生成する第２生成工程と
を実行させ、
前記第２ＲＴＬ記述を生成する前記第２生成工程において、
前記ライブラリコンポーネントは、前記第２メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第１メモリ位置への出力を書き込む、
非一時的なコンピュータ可読記憶媒体。
【請求項８】
コンピュータ実行可能プログラムコードが記憶されている非一時的なコンピュータ可読記憶媒体であって、前記コンピュータ実行可能プログラムコードは、コンピュータシステムにおいて実行されるときに前記コンピュータシステムに、
集積回路の素子を定義する第１プログラムモデルを含むソースコードの一部を受信する工程と、
前記ソースコードの前記一部に基づき、第１レジスタ転送レベル（ＲＴＬ）記述を生成する第１生成工程と、
前記第１ＲＴＬ記述に基づきライブラリコンポーネントを定義する定義工程であって、前記ライブラリコンポーネントは、前記集積回路の前記素子に関連付けられている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースとを有し、前記入力インターフェースは少なくとも１つの入力変数を第１メモリ位置に対してマッピングするように構成され、前記出力インターフェースは少なくとも１つの出力変数を第２メモリ位置に対してマッピングするように構成されている、前記ライブラリコンポーネントの前記定義工程と、
前記集積回路を定義する第２プログラムモデルを含む前記ソースコードを受信する工程と、
前記第１プログラムモデルに対応する前記ソースコードの前記一部を、前記ライブラリコンポーネントに置き換える工程と、
前記ソースコードに基づき第２ＲＴＬ記述を生成する第２生成工程と
を実行させ、
前記第２ＲＴＬ記述を生成する前記第２生成工程において、
前記ライブラリコンポーネントは、前記第２プログラムモデルの合成に基づく入力を受信し、前記入力に基づき時間非依存型出力を生成する、
非一時的なコンピュータ可読記憶媒体。
【請求項９】
コンピュータ可読記憶媒体に記憶され、プロセッサによって実行される高位合成（ＨＬＳ）ツールであって、ＨＬＳツールは集積回路のレジスタ転送レベル（ＲＴＬ）記述を生成するように構成され、前記ＨＬＳツールは、
前記集積回路の素子を定義するＲＴＬ記述に基づき、ライブラリコンポーネントを定義するように構成されているライブラリ処理モジュールであって、前記ライブラリ処理モジュールは、前記集積回路の前記素子に関連付けられている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースとを含み、前記入力インターフェースは少なくとも１つの入力変数を第１メモリ位置に対してマッピングするように構成され、前記出力インターフェースは少なくとも１つの出力変数を第２メモリ位置に対してマッピングするように構成されている、前記ライブラリ処理モジュールと、
第１プログラムモデルに対応するソースコードの一部を前記ライブラリコンポーネントに置き換えることと、前記ソースコードに基づき前記集積回路の前記ＲＴＬ記述を生成することとを行うように構成されている合成モジュールであって、前記ソースコードは前記集積回路を定義する、前記合成モジュールと
を備え、
前記合成モジュールはさらに、
前記ライブラリコンポーネントとのインターフェースを行う際に、前記集積回路の前記ＲＴＬ記述の生成において受信された入力と同じクロックサイクルにおいて出力を生成するように構成されている、
ＨＬＳツール。
【請求項１０】
前記入力インターフェースと前記出力インターフェースとは、高水準言語によって定義されるハードウェアインターフェースである、
請求項９記載のＨＬＳツール。
【請求項１１】
コンピュータ可読記憶媒体に記憶され、プロセッサによって実行される高位合成（ＨＬＳ）ツールであって、ＨＬＳツールは集積回路のレジスタ転送レベル（ＲＴＬ）記述を生成するように構成され、前記ＨＬＳツールは、
前記集積回路の素子を定義するＲＴＬ記述に基づき、ライブラリコンポーネントを定義するように構成されているライブラリ処理モジュールであって、前記ライブラリ処理モジュールは、前記集積回路の前記素子に関連付けられている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースとを含み、前記入力インターフェースは少なくとも１つの入力変数を第１メモリ位置に対してマッピングするように構成され、前記出力インターフェースは少なくとも１つの出力変数を第２メモリ位置に対してマッピングするように構成されている、前記ライブラリ処理モジュールと、
第１プログラムモデルに対応するソースコードの一部を前記ライブラリコンポーネントに置き換えることと、前記ソースコードに基づき前記集積回路の前記ＲＴＬ記述を生成することとを行うように構成されている合成モジュールであって、前記ソースコードは前記集積回路を定義する、前記合成モジュールと
を備え、
前記合成モジュールはさらに、
前記ライブラリコンポーネントとのインターフェースを行う際に、前記第２メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第１メモリ位置への出力を書き込むように構成されている、
ＨＬＳツール。
【請求項１２】
高位合成（ＨＬＳ）ツールを用いて集積回路を設計する、集積回路の設計方法であって、前記設計方法は、
合成ツールモジュールを用いて第１レジスタ転送レベル（ＲＴＬ）記述に基づきライブラリコンポーネントを定義する定義工程であって、前記第１ＲＴＬ記述は前記集積回路の素子を定義するように構成されている、前記定義工程と、
前記合成ツールモジュールを用いて、第１プログラムモデルに対応するソースコードの一部を前記ライブラリコンポーネントに置き換える置換工程であって、前記ソースコードは前記集積回路を定義する、前記置換工程と、
前記合成ツールモジュールを用いて、前記ソースコードに基づき、前記集積回路を表す第２ＲＴＬ記述を生成する生成工程であって、前記第２ＲＴＬ記述の生成において、第２メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて第１メモリ位置への出力が書き込まれる、前記生成工程と
を備え、
前記第２ＲＴＬ記述の前記生成工程は、
前記ライブラリコンポーネントとのインターフェースを行う際に、前記第２メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第１メモリ位置への出力を書き込む工程を含む、
集積回路の設計方法。
【請求項１３】
前記第１プログラムモデルは、マルチプレクサ論理を含む状態機械を定義する、
請求項１２記載の集積回路の設計方法。
【請求項１４】
前記第１プログラムモデルは、算術デコーダを定義する、
請求項１２記載の集積回路の設計方法。
【請求項１５】
前記設計方法はさらに、
前記集積回路の前記素子に関連付けられている入力ハードウェアインターフェースを定義する工程と、
前記集積回路の前記素子に関連付けられている出力ハードウェアインターフェースを定義する工程と
を備え、
前記入力ハードウェアインターフェースは、少なくとも１つの入力変数を前記第１メモリ位置に対してマッピングするように構成され、
前記出力ハードウェアインターフェースは、少なくとも１つの出力変数を前記第２メモリ位置に対してマッピングするように構成される、
請求項１２記載の集積回路の設計方法。
【請求項１６】
前記設計方法はさらに、
前記集積回路の前記素子に関連付けられている入力ハードウェアインターフェースを定義する工程と、
前記集積回路の前記素子に関連付けられている出力ハードウェアインターフェースを定義する工程と
を備え、前記入力ハードウェアインターフェースと前記出力ハードウェアインターフェースとは高水準言語によって定義される、
請求項１２記載の集積回路の設計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高位合成を用いて高効率のエントロピーデコーダを実装するための方法に関する。
【背景技術】
【０００２】
高位合成ツールは、高水準ソースコード（たとえば、Ｃ、Ｃ＋＋）からレジスタ転送レベル（ＲＴＬ）（たとえば、ＶＨＤＬ／ヴェリログ（ｖｅｒｉｌоｇ）／システムヴェリログ（ｓｙｓｔｅｍＶｅｒｉｌоｇ））コードを生成することが可能である。高位合成では、遅くエラーが発生しやすいプロセスであるＲＴＬ書換を行うことに代えて、変更を高水準ソースコードに行うことができるため、ハードウェアのテストおよび変更の効率が高くなる。算術コーディング（算術符号化）は近年の動画圧縮規格（たとえば、ＶＰ８／ＶＰ９／ＨＥＶＣ／Ｈ２６４）において複雑な要素である場合があり、ハードウェアアクセラレータがＲＴＬに実装される場合、算術コーディングのデバッグ／テストを行うことは時間を要する作業となり得る。この問題に対処するために、高位合成が用いられる。しかしながら、算術コーディングはデータ依存性が高い場合があり、非線形アルゴリズム高位合成ツールは高水準ソースコードからＲＴＬコードを生成しようと試みる際に問題を有し得る。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第８４０２４００号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
結果として、ハードウェアアクセラレータの高位合成は、算術コーディングを合成する際の不具合が原因で機能しなくなることが多い。これらの不具合によって、ハードウェアアクセラレータの設計について過度にデバッグ／テストが行われることになる。類似の複雑なシステムも、システム合成中に部分要素が繰り返し機能しなくなる場合、過度なデバッグ／テストが実行されることになるという同様の欠点を有する。
【課題を解決するための手段】
【０００５】
本開示は、ハードウェア定義に対応するソースコード素子を、ハードウェア定義を含むシステムに関するソースコードを合成する前に、システムソースコードから合成したレジスタ転送レベル（ＲＴＬ）定義に置き換えることに関する。
【０００６】
一般的な態様では、コンピュータ実行可能プログラムコードが記憶されている非一時的なコンピュータ可読記憶媒体が開示される。コンピュータ実行可能プログラムコードは、コンピュータシステムにおいて実行されるときに前記コンピュータシステムに以下の工程を実行させる。実行される工程としては、集積回路の素子を定義する第１プログラムモデルを含むソースコードの一部を受信する工程と、前記ソースコードの前記一部に基づき第１レジスタ転送レベル（ＲＴＬ）記述を生成する第１生成工程とがある。さらに前記第１ＲＴＬ記述に基づきライブラリコンポーネントを定義する工程と、前記集積回路を定義する第２プログラムモデルを含む前記ソースコードを受信する工程とがある。さらに前記第１プログラムモデルに対応する前記ソースコードの前記一部を前記ライブラリコンポーネントに置き換える工程と、前記ソースコードに基づき第２ＲＴＬ記述を生成する第２生成工程とを含む。前記ライブラリコンポーネントは、前記集積回路の前記素子に関連付けられている入力インターフェースであって、少なくとも１つの入力変数を第１メモリ位置に対してマッピングするように構成されている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースであって、少なくとも１つの出力変数を第２メモリ位置に対してマッピングするように構成されている出力インターフェースとを含む。
【０００７】
別の一般的な態様では、集積回路のレジスタ転送レベル（ＲＴＬ）記述を生成するように構成されている高位合成（ＨＬＳ）ツールが開示される。ＨＬＳツールは、前記集積回路の素子を定義する第１ＲＴＬ記述に基づきライブラリコンポーネントを定義するように構成されているライブラリ処理モジュールを備える。ライブラリ処理モジュールは、集積回路の素子に関連付けられている入力インターフェースであって、少なくとも１つの入力変数を第１メモリ位置に対してマッピングするように構成されている入力インターフェースと、前記集積回路の前記素子に関連付けられている出力インターフェースであって、少なくとも１つの出力変数を第２メモリ位置に対してマッピングするように構成されている出力インターフェースと、を有する。前記ＨＬＳツールは合成モジュールを備え、合成モジュールは、第１プログラムモデルに対応して前記集積回路を定義するソースコードの一部を。前記ライブラリコンポーネントに置き換え、前記ソースコードに基づき前記集積回路の前記ＲＴＬ記述を生成するように構成されている。
【０００８】
さらに別の一般的な態様では、高位合成（ＨＬＳ）ツールを用いて集積回路を設計するための方法が開示される。前記方法は、合成ツールモジュールを用いて、前記集積回路の素子を定義するように構成されている第１レジスタ転送レベル（ＲＴＬ）記述に基づきライブラリコンポーネントを定義する工程と、前記合成ツールモジュールを用いて、第１プログラムモデルに対応するソースコードの一部を前記ライブラリコンポーネントに置き換える工程であって、前記ソースコードは前記集積回路を定義する工程と、前記合成ツールモジュールを用いて、前記ソースコードに基づき前記集積回路を表す第２ＲＴＬ記述を生成する生成工程であって、前記第２ＲＴＬ記述の生成において、第２メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて第１メモリ位置への出力を書き込む生成工程とを備える。
【０００９】
複数の実施形態は、以下の特徴のうち１以上を含み得る。たとえば、前記第１プログラムモデルはマルチプレクサ論理を含む状態機械を定義し得る。前記第１プログラムモデルは算術デコーダを定義し得る。前記第１生成工程は、高水準言語による前記ソースコードの前記一部に基づき前記第１プログラムモデルのシミュレーションを行う第１シミュレーション工程と、前記第１ＲＴＬ記述に基づき前記第１プログラムモデルのシミュレーションを行う第２シミュレーション工程と、前記第１シミュレーション工程の出力を前記第２シミュレーション工程の出力と比較する工程と、を含み得る。前記第１生成工程は、前記第１ＲＴＬ記述を、前記集積回路の前記素子と前記集積回路とのうち少なくとも１つの設計仕様と比較する工程を含む。前記入力インターフェースと前記出力インターフェースとは、高水準プログラミング言語によって定義されるハードウェアインターフェースである。
【００１０】
たとえば、前記第２生成工程において、前記ライブラリコンポーネントは受信された入力と同じクロックサイクルにおいて出力を生成し得る。前記第２生成工程において、前記ライブラリコンポーネントは前記第２メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて前記第１メモリ位置への出力を書き込み得る。前記第２生成工程において、前記ライブラリコンポーネントは第２プログラムの合成に基づく入力を受信し、前記入力に基づき時間非依存型出力を生成し得る。
【００１１】
たとえば、前記入力インターフェースと前記出力インターフェースとは、高水準プログラミング言語によって定義されるハードウェアインターフェースであり得る。前記合成モジュールは、前記ライブラリコンポーネントのインターフェースを行う際、前記生成において受信された入力と同じクロックサイクルにおいて出力を生成するようにさらに構成され得る。前記合成モジュールは、前記ライブラリコンポーネントのインターフェースを行う際、第２メモリ位置からの入力を読み取るのと同じクロックサイクルにおいて第１メモリ位置への出力を書き込むようにさらに構成され得る。
【図面の簡単な説明】
【００１２】
【図１】少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャート。
【図２】少なくとも一例の実施形態による算術デコーダシステムを示すブロック図。
【図３Ａ】少なくとも一例の実施形態による算術デコーダシステムを示すブロック図。
【図３Ｂ】少なくとも一例の実施形態による算術デコーダシステムを示すブロック図。
【図４】少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャート。
【図５】少なくとも一例の実施形態によるシステムを示すブロック図。
【図６】本明細書に記載される技術を実装するために用いられるコンピュータデバイスとモバイルコンピュータデバイスとを示す概略図。
【発明を実施するための形態】
【００１３】
例示的実施形態は様々な修正形態と他の形式とを含んでもよいが、それらの実施形態は図面に例示されるものであって、明細書内では詳細に記載されないであろう。しかしながら、例示的実施形態を記載される特定の形式に限定する意図はなく、むしろ、例示的実施形態は特許請求の範囲内である全ての修正形態、均等物、および代替物を包含するものと理解される。
【００１４】
さらに、図面は、ある例示的実施形態で用いられる方法および／または構造の一般的な特徴を図示することと、以下に示される明細書を補足することを意図している。しかしながら、これらの図面は原寸に比例しておらず、任意の所与の実施形態の正確な構造的または性能的特徴を正確に反映しない可能性もあり、例示的実施形態によって包含される値または特性の範囲を定義または限定するものとして解釈されるべきではない。たとえば、構造的要素は、明確性のために縮小または誇張される場合がある。様々な図面における類似または同一の参照符号の使用は、類似または同一の要素または特徴の存在を示唆することを意図している。
【００１５】
図１は、少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャートである。図１に関して説明される工程は、装置（例えば、図５および図６に示されるようなもの）に関連付けられているメモリ（たとえば、少なくとも１つのメモリ５１０および／または６０４）に記憶されるソフトウェアコードを実行することによって実施されてもよいし、該装置に関連付けられている少なくとも１つのプロセッサ（たとえば、１つのプロセッサ５０５および／または６０２）によって実行されてもよい。しかしながら、他の実施形態（たとえば、特定用途のプロセッサとして具体化されるシステム）も想定される。下記工程は、プロセッサによって実行されるものとして説明されるが、必ずしも同じプロセッサによって実行されなくてもよい。言い換えると、少なくとも１つのプロセッサは図１に関する下記工程を実行してもよい。
【００１６】
さらに、下記工程はデコーダまたはエントロピーデコーダの一例の実施形態に関して記載され得る。しかしながら、例示的実施形態はこれに限定されない。たとえば、記載される技術は、任意の集積回路またはＡＳＩＣ（特定用途向け集積回路）に関する記述／設計を合成するために用いられてもよい。したがって、本明細書に記載される技術は、デコーダだけでなくエンコーダを設計するのに用いられてもよい。合成とは、デジタルシステムを動作仕様から該動作を実装するように構成されている構造に変換するプロセスであってもよい。動作仕様は、より高水準のソースコード（たとえば、Ｃ、Ｃ＋＋）を用いて開発されてもよい。該構造は、ハードウェア（たとえば、レジスタ）とレジスタ間のデータフローとを定義するレジスタ転送レベル（ＲＴＬ）記述であってもよい。一方、ソフトウェアコードをコンパイルすることには、ソースコード（たとえば、Ｃ、Ｃ＋＋）記述をターゲットプロセッサ（たとえば、Ｘ８６）上で動作するアセンブリコードにコンパイルするコンパイラが用いられる。
【００１７】
図１に示すように、工程Ｓ１０５において、ソフトウェアコードの一部は、該ソフトウェアコードを合成する前に隔離されている。ソフトウェアコードを隔離することは、特定の機能または一群の機能を実行するソフトウェアコードを識別することと、該機能または一群の機能を用いるソフトウェアシステムから該コードを除去することとを含んでもよい。たとえば、ソフトウェアコードの一部は、複雑な合成、あるいは処理集約型の合成に関連付けられてもよい。言い換えると、ソフトウェアコードの一部は、コーディングエラーが生じやすくてもよいし、合成を行うのに時間がかかってもよい。ソフトウェアコードの一部は、それ自体が、集積回路またはＡＳＩＣに関連付けられているモデルを定義してもよい。あるいは、ソフトウェアコードの一部は、それ自体が、集積回路またはＡＳＩＣの素子および／またはサブコンポーネントに関連付けられているモデルを定義してもよい。
【００１８】
したがって、ソフトウェアコードの一部を隔離することによって、開発者および／またはハードウェア設計者がソフトウェアコードの隔離部分に対して１または複数の合成ツールを用いることができるようになる可能性がある。したがって、工程Ｓ１１０において、ソフトウェアコードの隔離部分が合成される。一例の実施形態では、ソフトウェアコードの隔離部分は（たとえば、メモリから）合成ツールによって読み出されてもよい。その後、合成ツールはソフトウェアコードの隔離部分を合成するために用いられてもよい。ソフトウェアコードの隔離部分を合成することは、ソフトウェアコードの隔離部分によって定義される集積回路のレジスタ転送レベル（ＲＴＬ）記述を生成することを含んでもよい。
【００１９】
工程Ｓ１１５において、ソフトウェアコードの合成隔離部分とソフトウェアコードとの間におけるインターフェースが開発される。たとえば、インターフェースは、入出力（Ｉ／О）インターフェースであってもよい。言い換えると、インターフェースは、入力（たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など）を受信するように構成されてもよい。インターフェースは、出力（たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など）を通信するように構成されてもよい。インターフェースは、ソフトウェアインターフェース（たとえば、メモリの読み書き）および／またはハードウェアインターフェース（たとえば、ピンレイアウトまたはバスインターコネクション）であってもよい。
【００２０】
工程Ｓ１２０において、ソフトウェアコードは、隔離部分を含めて、合成隔離部分が時間非依存型入力および／または時間非依存型出力コンポーネントとして構成されるように合成される。たとえば、ソフトウェアコードの合成隔離部分は、合成ツールを用いることでソフトウェアコードと統合されてもよい。統合は、ソフトウェアコードの隔離部分をソフトウェアコードの合成隔離部分と置き換えることを含んでもよい。統合は、インターフェースおよび／またはソフトウェアコードが（たとえば合成ツールを用いて）ソフトウェアコードとソフトウェアコードの合成隔離部分との間における通信を行うことが可能になるように構成することを含んでもよい。一例の実施形態において、ソフトウェアコードがソフトウェアコードの合成隔離部分と通信を行う場合、ソフトウェアコードはインターフェースを用いる。したがって、通信は時間非依存型であってもよい（たとえば、１クロックサイクル内で行われる）。言い換えると、出力は、入力が受信される（および読み出される）のと同じクロックサイクルにおいて生成される（および書き込まれる）。
【００２１】
したがって、例示的実施形態では、開発者が、動作仕様の複雑な要素（たとえば、アルゴリズム）の合成およびトラブルシュートを行い、その後、動作仕様の複雑な要素をＲＴＬ定義と置き換えられるようになる。ＲＴＬ定義は、動作仕様の合成中に入力を受信するのと同じクロックサイクルにおいて、結果を返すものである。したがって、開発者は、複雑な要素が所望の通りに機能すると認識しているシステム動作に集中することができる。
【００２２】
図２、図３Ａ、および図３Ｂは、少なくとも一例の実施形態による算術デコーダシステムのブロック図を示す。図２に示すように、算術デコーダ２０５は、状態機械マルチプレクサ（ｍｕｘ）論理２１０と、エンジン２１５と、ストリームバッファリングシフタ２２０とを備える。
【００２３】
状態機械マルチプレクサ論理２１０は、少なくとも１つの入力値に基づき少なくとも１つの出力値を選択するように構成されている。一例の実施形態では、状態機械マルチプレクサ論理２１０は、状態機械または有限状態機械（ＦＳＭ）として実装されてもよい。したがって、出力値は現在状態と入力値とに基づき決定されてもよい。クロックをトリガーすると、ＦＳＭは出力値を含む新しい状態に切り替わる。ＦＳＭはソフトウェアまたはハードウェアに実装されてもよい。たとえば、ＦＳＭはマイクロプロセッサに関する一組の命令として実装されてもよい。たとえば、ＦＳＭ回路は、以前の状態を保持するように構成されているいくつかのフリップフロップと、入力を受信するように構成されているいくつかのデコード論理ゲートとから構成されてもよい。出力値または信号は、以前の状態とフリップフロップがクロックされる際の入力との両方に依存してもよい。ＦＳＭは、ＦＳＭが特定の状態にあって特定の入力を受信するたびに出力状態信号が同じである、という点で固定されてもよい。
【００２４】
エンジン２１５は、映像伸長を実行するように構成されている。たとえば、エンジン２１５は、映像伸長を実行するよう詳細に構成されているプロセッサであってもよい。エンジン２１５は、ピクチャ層から下部に伸長を実行してもよい。たとえば、エンジン２１５は、ピクチャ層、スライス層、マクロブロック層、およびブロック層の伸長を実行してもよい。言い換えると、エンジンは、フレーム毎に復号（伸長）を行うようプログラミングされてもよいし、ピクチャ層において開始する可変長復号、逆ジグザグ、逆量子化、ならびに逆離散コサイン変換、およびフレーム再構成（動きベクトル補償）を１つのピクチャの最後までブロック毎に実行するようプログラミングされてもよい。エンジン２１５は、状態機械マルチプレクサ論理２１０に対する入力として用いられる復号化されたビンを生成するように構成されている。
【００２５】
ストリームバッファリングシフタ２２０は、エンジン２１５にロードされるコードストリームのキャッシュであるように構成されている。たとえば、ストリームバッファリングシフタ２２０は、状態機械マルチプレクサ論理２１０から受信される復号／伸長されたコードストリームを記憶してもよい。ストリームバッファリングシフタ２２０の出力は、算術デコーダ２０５の出力であってもよい。
【００２６】
図３Ａに示すように、状態機械マルチプレクサ論理２１０は、複数の状態機械３０５（状態１、状態２、状態３、および状態４として図示）をさらに備える。上述の通り、複数の状態機械３０５の各々は、以前の状態と状態機械マルチプレクサ論理２１０がクロックされる際の入力との両方に依存する出力状態または信号を含んでもよい。複数の状態機械は、ＲＴＬ記述を用いてモデリングされてもよい。したがって、複数の状態機械３０５は高水準ソースコード（たとえば、Ｃ、Ｃ＋＋）から高位合成（ＨＬＳ）ツール（商用のＣａｔａｐｕｌｔ−Ｃ（Ｃａｌｙｐｔｏ）、 ＡｃｃｅｌＦＰＧＡ、（ＡｃｃｅｌＣｈｉｐ）、ＳｙｓｔｅｍＣ  Ｃｏｍｐｉｌｅｒ（Ｓｙｎｏｐｓｙｓ）、およびＧＡＵＴ、ＳＰＡＲＫ、Ｃａｔｈｅｄｒａｌなど）を用いて合成されてもよい。
【００２７】
ＨＬＳツールは、設計者とシステム制約とに基づきアーキテクチャについてのＲＴＬ記述を生成する。ＲＴＬ記述は、ハンドコーディングされた設計（たとえば、ＲＴＬにおいて直接コーディングを行う）と比べて信頼できるものである（たとえば、エラーが発生しない）。言い換えると、ＨＬＳツールは、レジスタ転送レベルのハンドコーディングと比較して、設計時間を速めることができる。高位合成は、ハードウェア領域に置換されるソフトウェアコンパイルと類似し得る。ソース仕様は、複雑なハードウェアコンポーネントのアルゴリズム動作をモデリングする高水準言語（たとえば、Ｍａｔｌａｂ、Ｃ、Ｃ＋＋など）で書かれている。自動精密化プロセスによって、記述された動作を対象となる制約に依存する指定の技術対象上にマッピングさせることが可能になる。
【００２８】
したがって、状態機械３０５は、高水準言語で書かれているソースコードの合成の結果（たとえば、ＲＴＬ記述）であってもよい。たとえば、ループおよび／またはケース文を用いるアルゴリズムは、複数の状態機械３０５へと合成されてもよい。上述の制約のうち１つは、状態機械が特定の状態にあって特定の入力を受信する場合に、出力状態信号が複数の状態機械３０５の各々について同じである、というものであってもよい。さらに、アーキテクチャは１以上のフリップフロップを含んでもよい。
【００２９】
条件文の場合、ＨＬＳは該条件文の各分岐によって記述される複数の回路の全部および／または一部を生成してもよい。したがって、ソフトウェア条件文のランタイム実行は、２つの実行可能な結果（たとえば、状態）間の選択を含む。ＨＬＳツールがソースコードをＲＴＬ記述に合成する場合、多数の分岐が生成される可能性がある。分岐が機能しなくなると、合成も機能しなくなる可能性がある。さらに、ＨＬＳツールは、必ずしも最善の／最適な結果をもたらす（たとえば、最適な分岐に続く）とは限らない。さらに、複数の状態機械３０５はＦＳＭに対応していてもよい。したがって、複数の分岐が該ＦＳＭ内の状態に対応していなくてもよい。したがって、ソースコードはトラブルシュートが行われる必要があってもよく、および／または、新しい合成を開始する前に削除された非最適な結果であってもよい。さらに、非線形アルゴリズムは、ＨＬＳツールが非線形アルゴリズムを線形（あるいは略線形）定義にフィッティングするよう試みるため、更なる複雑性を提示する。
【００３０】
したがって、例示的実施形態では、複数の状態機械３０５は別々に合成されてもよい。図３Ｂに示すように、算術デコーダ２０５において、状態機械マルチプレクサ論理２１０は有限状態機械ライブラリコンポーネント３１０に置き換えられる。有限状態機械ライブラリコンポーネント３１０は、状態機械マルチプレクサ論理２１０を表すソースコードの隔離合成のＲＴＬ定義に基づいてもよい。有限状態機械ライブラリコンポーネント３１０は、関連する入力ハードウェアインターフェースを含んでもよい。入力ハードウェアインターフェースは、高水準プログラミング言語によって定義されてもよい。有限状態機械ライブラリコンポーネント３１０は、関連する出力ハードウェアインターフェースを含んでもよい。出力ハードウェアインターフェースは、高水準プログラミング言語によって定義されてもよい。入出力ハードウェアインターフェースは、ＩＣまたはＡＳＩＣのバスおよび／またはピン位置に関連付けられてもよい。入出力ハードウェアインターフェースは、算術デコーダ２０５に関連付けられているソースコードの合成中、ＨＬＳツールによるＩＣまたはＡＳＩＣのＲＴＬ記述の生成において受信された入力と同じクロックサイクルにより出力を生成するように構成されてもよい。
【００３１】
これに代えて、またはこれに加えて、有限状態機械ライブラリコンポーネント３１０は、関連するソフトウェア入力インターフェースを含んでもよい。ソフトウェア入力インターフェースは、少なくとも１つの入力変数を１つのメモリ位置（たとえば、レジスタ５６５）に対してマッピングするように構成されてもよい。有限状態機械ライブラリコンポーネント３１０は、関連するソフトウェア出力インターフェースを含んでもよく、ソフトウェア出力インターフェースは、少なくとも１つの入力変数をメモリ位置に対してマッピングするように構成されている。入出力ソフトウェアインターフェースは、レジスタ位置および／またはメモリ位置に対してのポインタに関連付けられてもよいし、対応する読み書き方法を有していてもよい。入出力ソフトウェアインターフェースは、ＨＬＳツールを用いてＩＣまたはＡＳＩＣのＲＴＬ記述の生成において受信された入力と同じクロックサイクルにおいて出力を生成するように構成されてもよい。言い換えると、入出力ソフトウェアインターフェースは、ＨＬＳツールが算術デコーダ２０５に関連付けられているソースコードを合成しているときに別のメモリ位置（たとえば、レジスタ５７０）から入力を読み取るのと同じクロックサイクルにおいて、メモリ位置に対して出力を書き込むように構成されてもよい。
【００３２】
図４は、少なくとも一例の実施形態によるハードウェアを表すソフトウェアコードを合成するための方法を示すフローチャートである。図４に関して説明される工程は、装置（例えば、図５および図６に示されるようなもの）に関連付けられているメモリ（たとえば、少なくとも１つのメモリ５１０および／または６０４）に記憶されるソフトウェアコードを実行することによって実施されてもよいし、該装置に関連付けられている少なくとも１つのプロセッサ（たとえば、１つのプロセッサ５０５および／または６０２）によって実行されてもよい。しかしながら、他の実施形態（たとえば、特定用途のプロセッサとして具体化されるシステム）も想定される。下記工程は、プロセッサによって実行されるものとして説明されるが、必ずしも同じプロセッサによって実行されなくてもよい。言い換えると、少なくとも１つのプロセッサは図４に関する下記工程を実行してもよい。
【００３３】
さらに、下記工程はデコーダまたはエントロピーデコーダの一例の実施形態に関して記載され得る。しかしながら、例示的実施形態はこれに限定されない。たとえば、記載される技術は、任意の集積回路またはＡＳＩＣ（特定用途向け集積回路）に関する記述／設計を合成するために用いられてもよい。
【００３４】
図４に示すように、工程Ｓ４０５において、集積回路の素子を定義する第１プログラムモデルを含むソースコードの一部が受信される。たとえば、ＨＬＳツールは、ＦＳＭを表すコードの一部をメモリ位置から読み取ってもよい。ＨＬＳツールは、算術デコーダ２０５に関連付けられている状態機械マルチプレクサ論理２１０を表すコードを読み取ってもよい。あるいは、ＨＬＳツールは、算術デコーダ２０５に関連付けられているソースコードの全てを読み取ってもよいし、状態機械マルチプレクサ論理２１０に関連付けられているソースコードを算術デコーダ２０５から分離／隔離させてもよい。
【００３５】
工程Ｓ４１０において、ソースコードの一部は第１レジスタ転送レベル（ＲＴＬ）記述に合成される。ソースコードの一部を合成することは、ソースコードの一部によって定義される集積回路のレジスタ転送レベル（ＲＴＬ）記述を生成することを含んでもよい。たとえば、ソースコードの一部のＲＴＬ記述は、より大きい集積回路の素子（たとえば、ビデオレコーダ）である場合もあるし、そうではない場合もあるエントロピーデコーダの素子を定義してもよい。一例の実施形態において、ソフトウェアコードの隔離部分のＲＴＬ記述は、算術デコーダおよび／または該算術デコーダの素子またはサブコンポーネント（たとえば、状態機械）を定義してもよい。
【００３６】
たとえば、ＨＬＳツールは、ＦＳＭを表すコードの読取部分を合成してもよい。ソースコードの一部を合成することは、たとえば、チップサイズ、速度、クロックレートなどに関する最終ＲＴＬ記述を最適化することを含んでもよい。ソースコードを合成することは、たとえば多数の状態を同一または初期状態にマッピングすることによって最終ＲＴＬコードを修正することを含んでもよい。マッピングは、規格（たとえば、ビデオエンコーディング規格）に関する設計者の知識に基づき得る。
【００３７】
一例の実施形態において、第１ＲＴＬ記述は集積回路の素子と該集積回路とのうちの少なくとも一方の設計仕様と比較される。一例の実施形態において、ＲＴＬ記述にはテストまたはベンチテストが行われる。ＲＴＬ記述をテストすることは、高水準言語によるソースコードの一部に基づきプログラムモデル（たとえば、ＦＳＭを表す）について第１シミュレーションを行うことと、第１ＲＴＬ記述に基づきプログラムモデルについて第２シミュレーションを行うことと、第１シミュレーションの出力を第２シミュレーションの出力と比較することとを含んでもよい。
【００３８】
工程Ｓ４１５において、第１ＲＴＬ記述に基づくライブラリコンポーネントが定義される。たとえば、ＦＳＭを表すコードの合成部分は、既存のライブラリに追加される可能性もあるし、新しいコードライブラリの初期の要素として用いられる可能性もある。インターフェースは、ライブラリコンポーネントと関連付けられてもよい。たとえば、インターフェースは、入出力（Ｉ／Ｏ）インターフェースであってもよい。言い換えると、インターフェースは、入力（たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など）を受信するように構成されてもよい。インターフェースは、出力（たとえば、データ、信号、ビット、ビットストリーム、バイト、レジスタ値など）を通信するように構成されてもよい。インターフェースは、ソフトウェアインターフェース（たとえば、メモリ読み書き）および／またはハードウェアインターフェース（たとえば、ピンレイアウトまたはバスインターコネクション）であってもよい。ライブラリコンポーネントは、有限状態機械ライブラリコンポーネント３１０であってもよい。
【００３９】
工程Ｓ４２０において、集積回路を定義する１または複数の第２プログラムモデルを含むソースコードが受信される。たとえば、ＨＬＳツールは、算術デコーダ２０５に関連付けられているソースコードの全てを読み取ってもよい。
【００４０】
工程Ｓ４２５において、第１プログラムモデルを含むソースコードの一部がライブラリコンポーネントに置き換えられる。たとえば、ＨＬＳツールは、状態機械マルチプレクサ論理２１０に関連付けられているソースコードを有限状態機械ライブラリコンポーネント３１０に置き換えてもよい。ソースコードを置き換えることは、ライブラリコンポーネントに関連付けられているインターフェースをソースコードとリンクさせることを含んでもよい。たとえば、有限状態機械ライブラリコンポーネント３１０に関連付けられているＩ／Ｏインターフェースは、ＨＬＳツールにおいて算術デコーダ２０５に関連付けられているソースコードとリンクされてもよい。
【００４１】
工程Ｓ４３０において、ソースコードが第２ＲＴＬ記述に合成される。たとえば、ＨＬＳツールは、有限状態機械ライブラリコンポーネント３１０を含む算術デコーダ２０５に関連付けられているソースコードを合成してもよい。一例の実施形態では、ソースコードの第２ＲＴＬ記述への合成において、有限状態機械ライブラリコンポーネント３１０は、Ｉ／Ｏインターフェースを介して受信された入力と同じクロックサイクルにおいて出力を生成してもよい。たとえば、有限状態機械ライブラリコンポーネント３１０は、第２メモリ位置から入力を読み取るのと同じクロックサイクルにおいて第１メモリ位置に対して出力を書き込んでもよい。
【００４２】
図５は、少なくとも一例の実施形態によるシステムを示すブロック図である。図５に示すように、システム（または装置）５００は、少なくとも１つのプロセッサ５０５と少なくとも１つのメモリ５１０とを備える。少なくとも１つのプロセッサ５０５と少なくとも１つのメモリ５１０とは、バス５１５を介して通信可能に結合される。システム５００は、たとえば、コンピューティングデバイス（たとえば、クラウドコンピューティングデバイスまたはサーバ）の要素であってもよい。
【００４３】
図５の例において、システム５００は少なくとも１つのコンピューティングデバイスであってもよく、本明細書に記載される方法を実行するように構成されている実質的に任意のコンピューティングデバイスを表すものと理解される。そのようなものとして、システム５００は、本明細書に記載される技術または該技術の異なるバージョンもしくは将来のバージョンを実装するように用いられ得る様々な標準コンポーネントを含むものと理解される。たとえば、システム５００は、少なくとも１つのプロセッサ５０５（たとえば、シリコンベースのプロセッサ）に加えて、少なくとも１つのメモリ５１０（非一時的なコンピュータ可読記憶媒体）をそれぞれ有するものとして図示されている。
【００４４】
したがって、認められるように、少なくとも１つのプロセッサ５０５は、少なくとも１つのメモリ５１０上に記憶される命令を実行するように用いられ、それによって、本明細書に記載される様々な機能および特徴、または、追加あるいは代替機能および特徴を実装するようにしてもよい。もちろん、少なくとも１つのプロセッサ５０５と少なくとも１つのメモリ５１０とは、他の様々な用途で用いられてもよい。特に、少なくとも１つのメモリ５１０は、本明細書に記載されるモジュールのうち任意の１つを実装するように用いられ得る様々な種類のメモリと関連するハードウェアおよびソフトウェアとの例を表すと理解される、と認められる。下記のシステムおよび／または方法は、データおよび／または記憶要素を含んでもよい。データおよび／または記憶要素（たとえば、データベーステーブル）は、たとえば、少なくとも１つのメモリ５１０に記憶される。
【００４５】
図５に示すように、少なくとも１つのメモリ５１０は、合成ツールモジュール５２０と、ソースコードブロック５５０と、ＲＴＬ記述ブロック５６０とを備える。合成ツールモジュール５２０は、レキシカル（ｌｅｘ）モジュール５２５と、合成モジュール５３０と、最適化モジュール５３５と、ライブラリ処理モジュール５４０と、照合モジュール５４５とを備える。
【００４６】
合成ツールモジュール５２０は、高水準プログラミング言語（たとえば、Ｃ、Ｃ＋＋など）で書かれているソースコードを合成するように構成されてもよい。合成ツールモジュール５２０は、上述のＨＬＳツールであってもよい。合成ツールモジュール５２０は、上述の機能／工程のうち１以上を実行するように構成されてもよい。たとえば、合成ツールモジュール５２０は、集積回路の素子を定義するように構成されている第１レジスタ転送レベル（ＲＴＬ）に基づきライブラリコンポーネントを定義し、第１プログラムモデルに対応するソースコードの一部をライブラリコンポーネントに置き換えるように構成されてもよく、該ソースコードは該集積回路を定義する。
【００４７】
ソースコードブロック５５０は、高水準プログラミング言語（たとえば、Ｃ、Ｃ＋＋など）によるソースコード（またはその一部）を記憶するように構成されてもよい。ソースコードは、１つの集積回路（たとえば、ソースコード部５５５として）、１つの集積回路全体（たとえば、ＡＳＩＣ）、および／または、複数の集積回路の素子を定義してもよい。ソースコードは、たとえば、規格（ビデオコーデック規格など）についてのプログラムモデルに基づいてもよい。ＲＴＬ記述ブロック５６０は、上記で詳述されたソフトウェアインターフェースのレジスタ５６５および５７０のシミュレーションを行うように構成されているメモリを含む合成ソースコードのＲＴＬ記述を記憶するように構成されてもよい。
【００４８】
レキシカルモジュール５２５は、入力として（たとえば文字列として）ソースコードを受信し、一連のシンボル（トークン）を生成するように構成されてもよい。トークンとは、集合的な意味を有する文字列（単語または句読点）である。レキシカルモジュール５２５は、コメントと、ブランク、タブおよび改行文字の形式による空白とを削除してもよい。レキシカルモジュール５２５は、合成モジュール５３０からのエラーメッセージをソースコードと相関させてもよい（たとえば、行数を記録する）。エラーが発見される場合、レキシカルモジュール５２５は処理を停止してもよい。したがって、例示的実施形態では、ハードウェアの複雑な要素について第１合成を行うこと（たとえば、動画圧縮コーデックの要素としての算術コーディング）によって、ハードウェアの複雑な要素についてのソースコードに関連付けられているレキシカルエラーの任意のデバッグが可能になる。
【００４９】
合成モジュール５３０は、高水準プログラミング言語（たとえば、Ｃ、Ｃ＋＋など）ソースコードに基づきレジスタ転送レベル（ＲＴＬ）定義を生成するように構成されてもよい。最適化モジュール５３５は、最適化を最終ＩＣのサイズ（たとえば、小さければ小さいほど良い）またはレイアウト（たとえば、標準チップに取り付けるための）について行うように構成されてもよい。最適化モジュール５３５は、温度分布を最適化するように構成されてもよい。たとえば、発熱コンポーネントがレイアウトにおいて広がり得る。最適化モジュール５３５は、メモリの空き容量を最適化するように構成されてもよい。たとえば、追加メモリがＲＴＬ定義に追加されてもよい。最適化は、ＲＴＬ定義のハンドコーディングを行うことを含んでもよい。
【００５０】
ライブラリ処理モジュール５４０は、ソースコード合成中にソースコードとリンクされる可能性のある少なくとも１つのライブラリコンポーネントを記憶するように構成されてもよい。各ライブラリコンポーネントは、関連するインターフェースを含んでもよい。たとえば、インターフェースは、上記で詳述された入出力（Ｉ／Ｏ）インターフェースであってもよい。照合モジュール５４５は、合成ＲＴＬ定義の動作を照合するように構成されてもよい。一例の実施形態において、合成ＲＴＬ定義の操作を照合することは、テストまたはベンチテストを行うことを含んでもよい。ＲＴＬ記述をテストすることは、高水準言語によるソースコードまたはソースコードの一部を表すプログラムモデルについて第１シミュレーションを行うことと、ＲＴＬ記述に基づきプログラムモデルについて第２シミュレーションを行うことと、第１シミュレーションの出力を第２シミュレーションの出力と比較することとを含んでもよい。
【００５１】
認められるであろうように、図５に示されるシステム５００は、図６に関して以下に記載される一般的なコンピュータデバイス６００および／または一般的なモバイルコンピュータデバイス６５０の要素および／または拡張機能として実装されてもよい。これに代えて、またはこれに加えて、図５に示されるシステム５００は、一般的なコンピュータデバイス６００および／または一般的なモバイルコンピュータデバイス６５０に関して以下に記載される特徴のいくつかあるいは全てを有する一般的なコンピュータデバイス６００および／または一般的なモバイルコンピュータデバイス６５０とは別体のシステムにより実装されてもよい。これに代えて、またはこれに加えて、一般的なコンピュータデバイス６００および／または一般的なモバイルコンピュータデバイス６５０とは別体のシステム内にある図５に示されるシステム５００は、一般的なコンピュータデバイス６００および／または一般的なモバイルコンピュータデバイス６５０のコンポーネント（たとえば、ビデオデコーダ）を設計および／または開発するために用いられてもよい。
【００５２】
図６は、本明細書に記載される技術を実装するために用いられるコンピュータデバイスとモバイルコンピュータデバイスとを示す概略図である。図６は、本明細書に記載される技術とともに用いられ得る一般的なコンピュータデバイス６００と一般的なモバイルコンピュータデバイス６５０との例である。コンピューティングデバイス６００は、様々な形式のデジタルコンピュータ（ラップトップ、デスクトップ、ワークステーション、携帯情報端末（ＰＤＡ）、サーバ、ブレードサーバ、メインフレーム、他の適当なコンピュータなど）を表すことを意図している。コンピューティングデバイス６５０は、様々な形式のモバイルデバイス（携帯情報端末、携帯電話、スマートフォン、他の類似するコンピューティングデバイスなど）を表すことを意図している。本明細書に示すコンポーネントと、それらの接続および関係と、それらの機能とは例示に限ることを意図しており、本文書内で記載および／または請求される発明の実施形態を限定することを意図していない。
【００５３】
コンピューティングデバイス６００は、プロセッサ６０２と、メモリ６０４と、記憶装置６０６と、メモリ６０４および高速拡張ポート６１０に接続される高速インターフェース６０８と、低速バス６１４および記憶装置６０６に接続される低速インターフェース６１２とを備える。各コンポーネント６０２，６０４，６０６，６０８，６１０，６１２は様々なバスを用いて相互接続され、共通のマザーボード上に、または、他の方法によって適宜取り付けられ得る。プロセッサ６０２は、外部入出力装置（たとえば、高速インターフェース６０８に結合されるディスプレイ６１６）上のＧＵＩに対してグラフィック情報を表示するためにメモリ６０４または記憶装置６０６に記憶される命令を含むコンピューティングデバイス６００内で実行される命令を処理することができる。他の実施形態では、複数のメモリと各種のメモリとともに、複数のプロセッサおよび／または複数のバスが適宜用いられ得る。さらに、複数のコンピューティングデバイス６００が接続されてもよく、各デバイスは（たとえば、サーババンク、一群のブレードサーバ、または、マルチプロセッサシステムとして）必要な動作の一部を提供し得る。
【００５４】
メモリ６０４は、コンピューティングデバイス６００内に情報を記憶する。一実施形態において、メモリ６０４は１以上の揮発性記憶装置である。別の実施形態において、メモリ６０４は１以上の不揮発性記憶装置である。さらに、メモリ６０４は、他の形式のコンピュータ可読媒体（たとえば、磁気または光ディスク）であり得る。
【００５５】
記憶装置６０６は、コンピューティングデバイス６００に対して大容量記憶を提供することができる。一実施形態において、記憶装置６０６は、コンピュータ可読媒体（たとえば、フロッピー（登録商標）ディスク装置、ハードディスク装置、光ディスク装置、またはテープ装置、フラッシュメモリ、または他の類似する固体記憶装置、記憶エリアネットワークまたは他の構成中の装置を含む一連の装置）であるか、それらを含み得る。コンピュータプログラム製品は、情報担体により有形に具体化される。さらに、コンピュータプログラム製品は、該コンピュータプログラム製品が実行されるとき１以上の方法（たとえば、上述の方法）を行う命令を含み得る。情報担体は、コンピュータまたは機械可読媒体（たとえば、メモリ６０４、記憶装置６０６、プロセッサ６０２上のメモリ）である。
【００５６】
高速コントローラ６０８はコンピューティングデバイス６００に対して帯域幅集約型操作を管理し、低速コントローラ６１２は低帯域幅集約型操作を管理する。このような機能の割り当ては例示のみである。一実施形態において、高速コントローラ６０８は（たとえば、グラフィックプロセッサまたはアクセラレータを介して）メモリ６０４と、ディスプレイ６１６と、様々な拡張カード（図示せず）を受け入れ得る高速拡張ポート６１０とに結合される。該実施形態において、低速コントローラ６１２は、記憶装置６０６と低速拡張ポート６１４とに結合されている。様々な通信ポート（たとえば、ＵＳＢ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ｗｉｒｅｎｅｓｓ  Ｅｔｈｅｒｎｅｔ（登録商標））を含み得る低速拡張ポートは、１以上の入出力装置（たとえば、キーボード、ポインティングデバイス、スキャナ、またはネットワーキングデバイス（たとえば、スイッチまたはルータ））に、たとえばネットワークアダプタを介して結合され得る。
【００５７】
図示するように、コンピューティングデバイス６００は複数の異なる形式にて実装され得る。たとえば、コンピューティングデバイス６００は、標準サーバ６２０として、または、そのようなサーバの一群により複数回、実装され得る。さらに、コンピューティングデバイス６００は、ラックサーバシステム６２４の一部として実装され得る。さらに、コンピューティングデバイス６００は、パーソナルコンピュータ（たとえば、ラップトップコンピュータ６２２）に実装され得る。あるいは、コンピューティングデバイス６００からのコンポーネントは図示しないモバイルデバイス（たとえば、デバイス６５０）内の他のコンポーネントと組み合わされてもよい。そのような装置の各々は１以上のコンピューティングデバイス６００，６５０を含んでもよく、システム全体が互いに通信し合う複数のコンピューティングデバイス６００，６５０から構成されてもよい。
【００５８】
コンピューティングデバイス６５０は、プロセッサ６５２と、メモリ６６４と、入出力装置（たとえば、ディスプレイ６５４）と、通信インターフェース６６６と、トランシーバ６６８とを、他のコンポーネントに加えて備える。さらに、デバイス６５０は、追加記憶を提供するための記憶装置（マイクロドライブまたは他の装置など）が設けられ得る。コンポーネント６５０，６５２，６６４，６５４，６６６，６６８の各々は様々なバスを使って相互接続され、該コンポーネントのうちいくつかは、共通のマザーボード上に、または、他の方法によって適宜搭載され得る。
【００５９】
プロセッサ６５２は、メモリ６６４に記憶される命令を含むコンピューティングデバイス６５０内の命令を実行することができる。プロセッサは、個別および複数のアナログおよびデジタルプロセッサを含むチップのチップセットとして実装され得る。プロセッサは、たとえば、デバイス６５０の他のコンポーネントの調整（ユーザインターフェースの制御、デバイス６５０によって動作するアプリケーション、デバイス６５０によるワイヤレス通信など）を提供し得る。
【００６０】
プロセッサ６５２は、制御インターフェース６５８とディスプレイ６５４に結合されたディスプレイインターフェース６５６とを介して、ユーザと通信し得る。ディスプレイ６５４は、たとえばＴＦＴ  ＬＣＤ（Ｔｈｉｎ−Ｆｉｌｍ−Ｔｒａｎｓｉｓｔｏｒ  Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）、ＯＬＥＤ（Ｏｒｇａｎｉｃ  Ｌｉｇｈｔ  Ｅｍｉｔｔｉｎｇ  Ｄｉｏｄｅ）ディスプレイ、または他の適切なディスプレイ技術であり得る。ディスプレイインターフェース６５６は、グラフィック情報と他の情報とをユーザに対して提示するディスプレイ６５４を駆動する適切な回路を備え得る。制御インターフェース６５８は、ユーザからコマンドを受け取り、それをプロセッサ６５２に送るために変換する。さらに、外部インターフェース６６２は、プロセッサ６５２と通信することで、他の装置とデバイス６５０との近距離通信を可能にするために提供され得る。外部インターフェース６６２は、たとえば、いくつかの実施形態において有線通信を、他の実施形態において無線通信を提供してもよく、複数のインターフェースが使用され得る。
【００６１】
メモリ６６４は、コンピューティングデバイス６５０内の情報を記憶する。メモリ６６４は、１以上のコンピュータ可読媒体、１以上の揮発性記憶装置、または１以上の不揮発性記憶装置として実装される可能性がある。さらに、拡張メモリ６７４が提供され、たとえば、ＳＩＭＭ（Ｓｉｎｇｌｅ  Ｉｎ  Ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）カードインターフェースを含み得る拡張インターフェース６７２を介して、デバイス６５０に接続される。このような拡張メモリ６７４は、デバイス６５０のための追加記憶スペースを供給してもよく、デバイス６５０のためのアプリケーションまたは他の情報を記憶してもよい。具体的には、拡張メモリ６７４は、上述のプロセスを実行または補足する命令を含む場合があり、セキュアな情報を含む場合がある。したがって、たとえば、拡張メモリ６７４は、デバイス６５０のセキュリティモジュールとして提供されてもよく、デバイス６５０のセキュアな使用を許可する命令を用いてプログラミングされてもよい。さらに、セキュアなアプリケーションは、追加情報とともにＳＩＭＭカードを介して（たとえば、識別情報をハッキング不可能な方法でＳＩＭＭカード上に配置して）提供され得る。
【００６２】
メモリは、下記の通り、たとえばフラッシュメモリおよび／またはＮＶＲＡＭメモリを含み得る。一実施形態において、コンピュータプログラム製品は、情報担体により有形に具体化される。コンピュータプログラム製品は、該コンピュータプログラムが実行されるとき１以上の方法（たとえば、上述の方法）を行う命令を含む。情報担体は、コンピュータまたは機械可読媒体（たとえば、トランシーバ６６８または外部インターフェース６６２を介して受信され得るメモリ６６４、拡張メモリ６７４、プロセッサ６５２上のメモリ）である。
【００６３】
デバイス６５０は、必要に応じて、デジタルシグナル処理回路を含み得る通信インターフェース６６６を介して無線で通信し得る。通信インターフェース６６６は、様々な様式またはプロトコル（たとえば、ＧＳＭ（登録商標）ボイスコール、ＳＭＳ、ＥＭＳ、またはＭＭＳメッセージ、ＣＤＭＡ、ＴＤＭＡ、ＰＤＣ、ＷＣＤＭＡ（登録商標）、ＣＤＭＡ２０００、またはＧＰＲＳ）のもと、通信を提供し得る。このような通信は、たとえばラジオ周波数トランシーバ６６８を介して発生し得る。さらに、狭域通信（たとえば、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＷｉＦｉ（登録商標）、または他のそのような図示しないトランシーバを用いる通信）が発生し得る。さらに、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）レシーバーモジュール６７０は、デバイス６５０上で動作しているアプリケーションによって適宜使用され得るデバイス６５０に、ナビゲーションおよび位置に関係する追加の無線データを提供し得る。
【００６４】
さらに、デバイス６５０は、ユーザから発言情報を受信して該情報を使用可能なデジタル情報に変換し得る音声コーデック６６０を用いて、音声で通信し得る。同様に、音声コーデック６６０は、たとえば、デバイス６５０の受話器でスピーカーを介してユーザ用に可聴音を生成し得る。そのような音は、音声通話からの音、記録される音（たとえば、音声メッセージ、音楽ファイルなど）、デバイス６５０で動作しているアプリケーションによって生成される音を含み得る。
【００６５】
図示するように、コンピューティングデバイス６５０は、様々な形式で実装され得る。たとえば、コンピューティングデバイス６５０は、携帯電話６８０として実装され得る。さらに、コンピューティングデバイス６５０は、スマートフォン６８２、携帯情報端末、または他の類似するモバイルデバイスの一部として実装され得る。
【００６６】
上述の例示的実施形態のうちいくつかは、フローチャートとして示されるプロセスまたは方法として記載される。フローチャートは順次プロセスとして動作を記載するが、該動作のうちの多くは、並列的に、同時に、または一斉に実行されてもよい。さらに、動作の順番は並び替えられてもよい。プロセスは、操作が完了するときに終了されてもよいが、図に含まれない追加工程を有してもよい。プロセスは、方法、機能、手順、サブルーチン、サブプログラムなどに対応してもよい。
【００６７】
上記方法は、その一部がフローチャートによって図示されるが、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組み合わせによって実装されてもよい。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードにおいて実装される場合、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、機械またはコンピュータ可読媒体（たとえば、記憶媒体）に記憶されてもよい。１または複数のプロセッサは、必要なタスクを実行してもよい。
【００６８】
本明細書に記載される具体的な構造的および機能的詳細は、単に例示的実施形態を記載するための典型である。しかしながら、例示的実施形態は、多くの別の形式で具体化されるべきであって、本明細書に示される実施形態にのみ限定するものとして解釈されるべきではない。
【００６９】
第１、第２などの用語は本明細書において様々な要素を記載するために用いられ得るが、これらの要素はこれらの用語によって限定されるべきではない、と理解されるであろう。これらの用語は、ある要素を別の要素と区別するためにのみ用いられる。たとえば、例示的実施形態の範囲を逸脱することなく、第１要素は第２要素と称される可能性があるし、同様に第２要素は第１要素と称される可能性がある。本明細書で用いられるように、用語「および／または」は、１以上の関連する列挙項目のうち任意および全ての組み合わせを含む。
【００７０】
要素が別の要素に「接続される（ｃｏｎｎｅｃｔｅｄ）」または「結合される（ｃｏｕｐｌｅｄ）」と称される場合、その要素はその別の要素に直接的に接続または結合される可能性もあるし、介在する要素が存在している場合もある、と理解されるであろう。一方、要素が別の要素と「直接的に接続される（ｄｉｒｅｃｔｌｙ  ｃｏｎｎｅｃｔｅｄ）」または「直接的に結合される（ｄｉｒｅｃｔｌｙ  ｃｏｕｐｌｅｄ）」と称される場合、介在する要素は存在しない。要素間の関係を記載するために用いられる他の用語も同様に解釈されるべきである（たとえば、「間に（ｂｅｔｗｅｅｎ）」と「直接的に間に（ｄｉｒｅｃｔｌｙ  ｂｅｔｗｅｅｎ）」、「隣接する（ａｄｊａｃｅｎｔ）」と「直接的に隣接する（ｄｉｒｅｃｔｌｙ  ａｄｊａｃｅｎｔ）」など）。
【００７１】
本明細書で用いられる用語は、特定の実施形態のみを記載するためのものであって、例示的実施形態に限定することを意図していない。本明細書で用いられるように、文脈が別途明らかに示唆しない限り、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は複数形も含むことを意図している。用語「ｃｏｍｐｒｉｓｅｓ」、「ｃｏｍｐｒｉｓｉｎｇ」、「ｉｎｃｌｕｄｅｓ」、および／または「ｉｎｃｌｕｄｉｎｇ」は、本明細書で用いられる場合、記載される特徴、要件、工程、操作、要素、および／またはコンポーネントの存在を指定するが、１以上の他の特徴、要件、工程、操作、要素、コンポーネント、および／または、それらの群の存在または追加を阻害するものではない、とさらに理解されるであろう。
【００７２】
さらに、いくつかの別の実施形態では、記載される機能／作用は、図面に示される順番通りに起きなくてもよい、ということに留意すべきである。たとえば、連続して示される２つの図面は、含まれる機能／作用に応じて同時に実行されてもよいし、反対の順番で実行されてもよい。
【００７３】
別途定義されない限り、本明細書で用いられる全ての用語（技術および科学用語を含む）は、例示的実施形態が属する技術の当業者によって通常理解されるのと同じ意味を有する。用語（たとえば、通常用いられる辞書に定義されるもの）は、関連技術の文脈における意味と一致した意味を有すると解釈されるべきであって、明細書内で明示的に定義されない限り、理想的なまたは過度に公式的な意味で解釈されるものではない、とさらに理解されるであろう。
【００７４】
上記の例示的実施形態と対応する詳細な説明との一部は、ソフトウェア、または、コンピュータメモリ内のデータビットに関するアルゴリズムと記号表現との観点から提示されている。これらの記載および表現は、ある当業者が他の当業者に仕事の要点を効率的に伝達するためのものである。アルゴリズムは、その用語が本明細書で用いられるように、および、その用語が一般的に用いられるように、望まれる結果を導く工程の首尾一貫とした配列と考えられる。該工程は、物理量の物理的操作を必要とするものである。通常これらの量は、必ずという訳ではないが、記憶され、転送され、組み合わされ、比較され、あるいは操作されることが可能である光、電気および磁気信号の形式をとる。これらの信号は、時折、主に通常用いられるという理由から、ビット、値、要素、記号、文字、用語、数などと称されると都合が良いということが判明している。
【００７５】
上述の実施形態において、プログラムモジュールまたは機能的プロセスとして実装される動作の作用と記号表現とへの参照（たとえば、フローチャートの形式で）は、特定のタスクを実行または特定の抽象データタイプを実装し、既存の構造的要素における既存のハードウェアを用いて記載および／または実装される可能性のあるルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。そのような実在のハードウェアは、１以上の中央処理装置（ＣＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）コンピュータなどを含んでもよい。
【００７６】
しかしながら、これらの用語および類似する用語のうち全てが、適切な物理量に関連付けられるべきであって、これらの量に適応される単なる便宜的な表示であることを、念頭に置くべきである。特に別途記載のない限り、あるいは、上記議論から明白な通り、「処理（ｐｒｏｃｅｓｓｉｎｇ）」、「コンピューティング（ｃｏｍｐｕｔｉｎｇ）」、「計算（ｃａｌｃｕｌａｔｉｎｇ）」、「決定（ｄｅｔｅｒｍｉｎｉｎｇ）」、「表示（ｄｉｓｐｌａｙｉｎｇ）」などの用語は、コンピュータシステムのレジスタおよびメモリ内の物理、電子量として表されるデータを操作し、そのデータをコンピュータシステムのメモリおよびレジスタまたは他のそういった情報記憶、伝送、あるいはディスプレイデバイス内の物理量として同様に表されるデータに転換するコンピュータシステムまたは類似する電子コンピューティングデバイスの作用およびプロセスを指す。
【００７７】
さらに、例示的実施形態のソフトウェア実装態様は、典型的には非一時的なプログラム記憶媒体のある形式で符号化されるか、または、ある種類の伝送媒体に実装されるということにも留意すべきである。プログラム記憶媒体は、磁気（たとえば、フロッピー（登録商標）ディスクまたはハードドライブ）または光（コンパクトディスク読み出し専用メモリ、すなわち「ＣＤ−ＲＯＭ」）であってもよいし、読み出し専用またはランダムアクセスであってもよい。同様に、伝送媒体は、ツイストワイヤペア、同軸ケーブル、光ファイバ、または当該技術において公知である他の適切な伝送媒体であってもよい。例示的実施形態は、任意の所与の実施形態のこれらの態様によって限定されない。
【００７８】
最後に、添付した特許請求の範囲は本明細書に記載される特徴の特定の組み合わせを提示しているが、本開示の範囲は以下に特許請求される特定の組み合わせに限定されず、特定の組み合わせが添付している現在の特許請求の範囲内で具体的に列挙されているか否かを問わず、本明細書に記載される特徴または実施形態の任意の組み合わせを包含するよう拡張する、ということにも留意すべきである。
【図１】
0006345814.tif 000002
【図２】
0006345814.tif 000003
【図３Ａ】
0006345814.tif 000004
【図３Ｂ】
0006345814.tif 000005
【図４】
0006345814.tif 000006
【図５】
0006345814.tif 000007
【図６】
0006345814.tif 000008