(57)【特許請求の範囲】
【請求項１】
ターゲットハードウェアプラットフォームにより実行されるソフトウェアアプリケーション（２１０）の実行に使用される方法であって、
ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述を決定すること、
ＨＤＬ記述に基づいてターゲットハードウェアプラットフォームと機能的に等価にプログラマブルハードウェアコンポーネントを構成すること、
前記プログラマブルハードウェアコンポーネントが、ネイティブ仮想化レイヤが、第１の仮想Ｉ／Ｏ装置及び第２の仮想Ｉ／Ｏ装置間のデータを経路指定するよう構成されるよう実行すること、
並びに
構成されたプログラマブルハードウェアコンポーネントを使用してソフトウェアアプリケーション（２１０）を実行すること
を含む方法。
【請求項２】
ソフトウェアアプリケーション（２１０）の実行が、
構成されたハードウェアコンポーネントを使用して仮想マシン（ＶＭ）（２０５）を実行すること、並びに
ＶＭ（２０５）を使用してソフトウェアアプリケーション（２１０）を実行すること
を含み、
ターゲットハードウェアプラットフォーム（２１５）が第１のハードウェアプラットフォームであり、
ソフトウェアアプリケーション（２１０）が第２のハードウェアプラットフォームに関連付けられており、且つ
第２のハードウェアプラットフォームをエミュレートする仮想ハードウェアプラットフォームを提供するように、ＶＭ（２０５）を構成する、
請求項１に記載の方法。
【請求項３】
ソフトウェアアプリケーション（２１０）が第１のソフトウェアアプリケーションであって、前記方法が、さらに、
構成されたプログラマブルハードウェアコンポーネントを用いて第２のソフトウェアアプリケーションを実行することであって、第２のソフトウェアアプリケーションが、第１のソフトウェアアプリケーションには含まれていない追加の機能性を含むこと、並びに
第１のソフトウェアアプリケーションから第２のソフトウェアアプリケーションへとデータを経路指定することであって、データがリクエスト及びコマンドの少なくとも一方を含むこと
を含む、請求項１又は２に記載の方法。
【請求項４】
プログラマブルハードウェアコンポーネントを構成することが、プログラマブルハードウェアコンポーネントをプログラムすることである、請求項１ないし３のいずれか一項に記載の方法。
【請求項５】
さらに、ＨＤＬ記述にエミュレーションの加速を含めることを含み、エミュレーションの加速が、ターゲットハードウェアプラットフォーム（２１５）に対応する少なくとも一つのアセンブリ命令の実施を含む、請求項１ないし４のいずれか一項に記載の方法。
【請求項６】
仮想マシン（ＶＭ）（２０５）を用いたソフトウェアアプリケーション（２１０）の実行に使用される装置であって、
仮想マシン（ＶＭ）（２０５）とソフトウェアアプリケーション（２１０）とを記憶するように構成されている記憶装置、及び
前記記憶装置に連結されたプログラマブルハードウェアコンポーネントであって、ターゲットハードウェアプラットフォーム（２１５）のハードウェア記述言語（ＨＤＬ）記述に基づいてプログラムされており、第１の仮想Ｉ／Ｏ装置及び第２の仮想Ｉ／Ｏ装置間のデータを経路指定するよう構成されたネイティブ仮想化レイヤを実行し、且つソフトウェアアプリケーション（２１０）を実行するようにプログラムされているプログラマブルハードウェアコンポーネント
を備えており、ソフトウェアアプリケーション（２１０）が、ターゲットハードウェアプラットフォーム（２１５）及びＨＤＬ記述の少なくとも一方により実行されることについて認証されている、装置。
【請求項７】
前記プログラマブルハードウェアコンポーネントがターゲットハードウェアプラットフォームと機能的に等価である、請求項６に記載の装置。
【請求項８】
前記プログラマブルハードウェアコンポーネントが、ＶＭ（２０５）を用いてソフトウェアアプリケーション（２１０）を実行するようにプログラムされている、請求項６に記載の装置。
【請求項９】
前記プログラマブルハードウェアコンポーネントがターゲットハードウェアプラットフォームのＨＤＬ記述に基づいてプログラムされており、ソフトウェアアプリケーション（２１０）は、前記ＨＤＬ記述によって実行されることについて認証されており、且つこの認証が前記プログラマブルハードウェアコンポーネントによるソフトウェアアプリケーション（２１０）の実行に適用可能である、請求項６に記載の装置。
【請求項１０】
前記プログラマブルハードウェアコンポーネントがＨＤＬ記述に基づいてプログラムされており、ソフトウェアアプリケーション（２１０）は、前記ＨＤＬ記述によって実行されることについて認証されており、且つこの認証が前記プログラマブルハードウェアコンポーネントによるソフトウェアアプリケーション（２１０）の実行に適用可能である、請求項６に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ハードウェア抽象化を用いたソフトウェアアプリケーションのための方法と装置に関する。詳しく述べると、本発明は、概して既存のソフトウェアの再利用に関し、具体的にはハードウェア抽象化を用いたソフトウェアアプリケーション（例えば、認証されたソフトウェアアプリケーション）を実行するための方法と装置に関する。
【背景技術】
【０００２】
既存のソフトウェアアプリケーションは、時間をかけて書き込まれた何千億ものソースコードの行に関連付けられている。このようなソースコードは、通常、特定の物理的なハードウェアプラットフォームにより実行可能なオブジェクトコードに変換される（例えば、コンパイルされる）。物理的なハードウェアデバイスは、最後には旧式となる。このようにハードウェアが旧式になってしまったら、元の設計に所望の機能性が残っているとしても、特定のハードウェアプラットフォームを取得することはもはや現実的でない。システムの生産者は、一般に、ハードウェアの製造者がハードウェアチップの生産中止を決定する時期をコントロールすることはできない。したがって、ターゲットハードウェアプラットフォームが旧式となったとき、特にソフトウェアアプリケーションのソースコードがもはや利用できない場合、従来のソフトウェア開発及び納品方法を用いて、特定のハードウェアプラットフォームに関連付けられたソフトウェアアプリケーションを再実装（例えば、再書込み）しなければならない場合がある。
【０００３】
さらに、幾つかのソフトウェアアプリケーションは、ミッションクリティカルな意味で、ソフトウェアアプリケーションの使用に先立ってターゲットハードウェアプラットフォームについて認証されなければならない。新規のハードウェアプラットフォーム上でこのようなソフトウェアの認証を行うことは、何の機能的価値も追加しないのに、使用のためにソフトウェアを納品するプロセスに有意な遅延及び／又はコストを生じさせる。
【発明の概要】
【０００４】
一態様では、ターゲットハードウェアプラットフォームにより実行されることが認証されたソフトウェアアプリケーションの実行に使用される方法が提供される。この方法は、ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述を決定することを含む。ハードウェアコンポーネントは、ＨＤＬ記述に基づいてターゲットハードウェアプラットフォームと機能的に等価に構成される。ソフトウェアアプリケーションは、そのように構成されたハードウェアコンポーネントを用いて実行される。
【０００５】
別の態様では、仮想マシン（ＶＭ）を用いたソフトウェアアプリケーションの実行に使用されるデバイスが提供される。このデバイスは、記憶装置と、記憶装置に連結されたプログラマブルハードウェアコンポーネントとを含んでいる。記憶装置は、仮想マシン（ＶＭ）とソフトウェアアプリケーションとを記憶するように構成されている。プログラマブルハードウェアコンポーネントは、ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述に基づいてプログラムされている。プログラマブルハードウェアコンポーネントはソフトウェアアプリケーションを実行するようにプログラムされており、このソフトウェアアプリケーションは、ターゲットハードウェアプラットフォーム及びＨＤＬ記述の少なくとも一方により実行されることについて認証されている。
【０００６】
また別の態様では、仮想マシン（ＶＭ）を用いたソフトウェアアプリケーションの実行に使用される方法が提供される。この方法は、ＶＭの実行のためのターゲットハードウェアプラットフォームを選択することを含む。ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述が決定される。プログラマブルハードウェアコンポーネントはＨＤＬ記述に基づいてプログラムされており、ＶＭは、プログラムされたプログラマブルハードウェアコンポーネントを用いて実行される。
【図面の簡単な説明】
【０００７】
【図１】例示的なコンピューティング装置のブロック図である。
【図２】仮想マシンを用いたソフトウェアアプリケーションの実行に使用可能なコンピューティング装置の例示的な構成を示すブロック図である。
【図３】ＶＭを用いたソフトウェアアプリケーションの実行に使用される例示的方法のフロー図である。
【図４】ホストオペレーティングシステムにより実行される第２の仮想マシンを用いてソフトウェアアプリケーションに機能性を追加するために使用可能なコンピューティング装置の例示的な構成を示すブロック図である。
【図５】ネイティブ仮想化レイヤにより実行される第２の仮想マシンを用いてソフトウェアアプリケーションに機能性を追加するために使用可能なコンピューティング装置の例示的な構成を示すブロック図である。
【図６】仮想マシンを実行するホストＯＳにより実行される第２のソフトウェアアプリケーションを用いて仮想マシンにより実行されるソフトウェアアプリケーションに機能性を追加するために使用可能なコンピューティング装置の例示的な構成を示すブロック図である。
【発明を実施するための形態】
【０００８】
本明細書に提供される実施形態は、ハードウェア記述言語（ＨＤＬ）及び仮想化により提供されるハードウェア抽象化を利用することにより、新規のハードウェアプラットフォーム上でレガシーソフトウェアを再利用することを容易にする。具体的には、ハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）による記述及び仮想化を使用して、特定のプラットフォームの使用可能期間より長い延長された期間（例えば、数十年間）にわたって使用出来るハードウェア及びソフトウェアを実現することができる。このような実施形態により、さらに、ソフトウェアのソースコードが既に利用不能となったときでも、及び／又は新規のハードウェアプラットフォームに関してソフトウェアを認証するために費用をかけず、ソフトウェアを継続使用することが可能になる。
【実施例】
【０００９】
図１は、例示的なコンピューティング装置１００のブロック図である。このような例示的実施形態では、コンピューティング装置１００は、プロセッサユニット１０４、メモリ素子１０６、固定記憶域１０８、通信ユニット１１０、入出力（Ｉ／Ｏ）ユニット１１２、及びディスプレイ１１４のような表示インターフェースの間で通信を行う通信ファブリック１０２を含んでいる。これに加えて、又はこれに代えて、表示インターフェースは、音響装置（図示しない）及び／又はユーザに情報を提供できる任意の装置を含むことができる。
【００１０】
プロセッサユニット１０４は、メモリ素子１０６にローディング可能なソフトウェアのための命令を実行する。プロセッサユニット１０４は、特定の実装態様に応じて、一又は複数のプロセッサの組とすることができるか、或いは複数のプロセッサコアを含むことができる。さらに、プロセッサユニット１０４は、単一のチップ上に主要プロセッサと共に二次プロセッサが存在する一又は複数の異種プロセッサシステムを使用して実施されてもよい。別の実施形態では、プロセッサユニット１０４は、同種のプロセッサを複数個含む同種プロセッサシステムである。
【００１１】
メモリ素子１０６及び固定記憶域１０８は、記憶装置の例である。本明細書で使用する場合、記憶装置は、一時的に及び／又は恒久的に情報を保存することができる何らかのハードウェア部分である。メモリ素子１０６は、例えば、限定しないが、ランダムアクセスメモリ、及び／又は他のいずれかの適切な揮発性又は非揮発性の記憶装置とすることができる。固定記憶域１０８は、特定の実装態様に応じて種々の形態をとることができ、且つ一又は複数のコンポーネント又は素子を含むことができる。例えば、固定記憶域１０８は、ハードドライブ、フラッシュメモリ、書換え形光ディスク、書換え可能磁気テープ、及び／又はそれらの何らかの組み合わせである。固定記憶域１０８によって使用される媒体は、取り外し可能なものでもよい。例えば、限定しないが、取り外し可能なハードドライブを固定記憶域１０８に使用することができる。
【００１２】
メモリ素子１０６及び／又は固定記憶域１０８のような記憶装置は、本明細書に記載のプロセスに使用できるデータを保存することができる。例えば、記憶装置は、仮想マシン、及び／又はその他のソフトウェアアプリケーション、及び／又は本明細書に記載の方法に使用するのに適切な他のいずれかの情報といった、一又は複数のソフトウェアアプリケーション（例えば、ソースコード及び／又はコンピュータで実行可能な命令を含む）を保存することができる。
【００１３】
このような実施形態では、通信ユニット１１０が他のコンピューティング装置又はシステムとの通信を行う。例示的な実施形態では、通信ユニット１１０は、一又は複数のネットワークインターフェースカードを含む。通信ユニット１１０は、物理的通信リンク及び／又は無線通信リンクを介して通信することができる。
【００１４】
入出力ユニット１１２は、コンピューティング装置１００に接続される他のデバイスとのデータの入出力を可能にする。例えば、限定しないが、入出力ユニット１１２は、ユーザ入力デバイス（例えばキーボード及び／又はマウス）によるユーザ入力のための接続部となる。さらに、入出力ユニット１１２は、プリンタに出力を送ることができる。ディスプレイ１１４は、ユーザに対して情報を表示する機構を提供する。例えば、ディスプレイ１１４のような表示インターフェースは、本明細書に記載されるようなグラフィカルユーザインターフェースを表示することができる。
【００１５】
オペレーティングシステム及びアプリケーション又はプログラムのための命令は、固定記憶域１０８にローディングされる。このような命令は、メモリ素子１０６にローディングされて、プロセッサユニット１０４によって実行される。メモリ（例えばメモリ素子１０６）に位置させることができるコンピュータで実施可能な命令及び／又はコンピュータで実行可能な命令を使用して、プロセッサユニット１０４により様々な実施形態のプロセスを実行することができる。このような命令はプログラムコード（例えば、オブジェクトコード及び／又はソースコード）と呼ばれ、プロセッサユニット１０４に含まれる一のプロセッサによって読み取られ、実行される。種々の実施形態において、プログラムコードは、物理的な又は有形の様々なコンピュータ読み取り可能媒体（例えば、メモリ素子１０６又は固定記憶域１０８）上に具現化される。
【００１６】
プログラムコード１１６は、選択的に取り外し可能な一又は複数の記憶装置（例えば、メモリ素子１０６、固定記憶域１０８、及び／又はコンピュータで読み取り可能な媒体１１８）上に機能的な形態で位置させることができ、コンピューティング装置１００上にローディング又は転送されてプロセッサユニット１０４により実行される。プログラムコード１０６及びコンピュータで読み取り可能な媒体１１８は、このような実施例においてコンピュータプログラム製品１２０を形成する。一実施例では、コンピュータで読み取り可能な媒体１１８は、例えば、記憶装置（例えば、固定記憶域１０８の一部であるハードドライブ）上への転送のために、ドライブ又は固定記憶域１０８の一部である他のデバイスに挿入又は配置される光ディスク又は磁気ディスクのような有形の形態をとることができる。有形の形態では、コンピュータで読み取り可能な媒体１１８は、コンピューティング装置１００に接続されるハードドライブ、サムドライブ、又はフラッシュメモリの形態をとることもできる。コンピュータで読み取り可能な媒体１１８の有形形態は、コンピュータで記録可能な記憶媒体とも呼ばれる。場合によっては、コンピュータで読み取り可能な媒体１１８は取り外し可能でなくともよい。
【００１７】
別の構成では、プログラムコード１１６は、通信装置１１０への通信リンクを介して、及び／又は入出力ユニット１１２への接続を介して、コンピュータで読み取り可能な媒体１１８からコンピューティング装置１００へ転送可能である。このような実施例では、通信リンク及び／又は接続は物理的なものでもよく、無線でもよい。コンピュータで読み取り可能な媒体は、通信リンク又はプログラムコードを含む無線送信といった非有形媒体の形態をとることもできる。
【００１８】
幾つかの例示的実施形態では、プログラムコード１１６は、コンピューティング装置１００内部での使用のために、ネットワークを介して、別のコンピューティング装置又はコンピュータシステムから固定記憶域１０８へとダウンロードすることができる。例えば、サーバコンピューティング装置内でコンピュータ読み取り可能記憶媒体に保存されているプログラムコードは、ネットワークを介してサーバからコンピューティング装置１００にダウンロード可能である。プログラムコード１１６を供給するコンピューティング装置は、サーバコンピュータ、ワークステーション、クライアントコンピュータ、又はプログラムコード１１６を保存及び転送できるその他何らかのデバイスとすることができる。
【００１９】
プログラムコード１１６は、機能的に関連するコンピュータで実行可能な複数のコンポーネントに編成することができる。例えば、プログラムコード１１６は、仮想マシン、ソフトウェアアプリケーション、ハイパーバイザー、及び／又は本明細書に記載の方法に適した任意のコンポーネントを含むことができる。各コンポーネントは、プロセッサユニット１０４により実行されると、プロセッサユニット１０４に、本明細書に記載される一又は複数の工程を実行させるコンピュータで実行可能な命令を含むことができる。
【００２０】
コンピューティング装置１００について本明細書で例示した種々のコンポーネントは、種々の実施形態が実施される方法をアーキテクチャ的に限定するものではない。種々の例示的な実施形態を、コンピューティング装置１００について例示されたコンポーネントに追加の又はそれらコンポーネントに代わるコンポーネントを含むコンピュータシステムにおいて実施することができる。例えば、図１に示す他のコンポーネントを、図示されたものから変更することができる。
【００２１】
一実施例として、コンピューティング装置１００に含まれる記憶装置は、データを保存できる任意のハードウェア装置である。メモリ素子１０６、固定記憶域１０８、及びコンピュータで読み取り可能な媒体１１８は、有形形態の記憶装置の例である。
【００２２】
別の実施例では、バスシステムを使用して通信ファブリック１０２を実施することができ、このようなバスシステムには、システムバス又は入出力バスといった一又は複数のバスが含まれる。言うまでもなく、バスシステムは、バスシステムに取り付けられた種々のコンポーネント又はデバイスの間でデータ伝送を行う任意の適切な種類のアーキテクチャを使用して実施することができる。加えて、ネットワークインターフェースは、モデム又はネットワークアダプタといった、データの送受信に使用される一又は複数のデバイスを含むことができる。さらに、メモリは、例えば、限定しないが、メモリ素子１０６、又は通信ファブリック１０２中に存在するメモリコントローラハブ及びインターフェースに見られるようなキャッシュとすることができる。
【００２３】
図２は、仮想マシン（ＶＭ）を用いたソフトウェアアプリケーションの実行に使用可能なコンピューティング装置（例えば、コンピューティング装置１００）の例示的な構成２００を示すブロック図である。図３は、ＶＭ２０５を用いたソフトウェアアプリケーションの実行に使用される例示的方法のフロー図である。
【００２４】
図２及び３に示すように、例示的な実施形態において、ＶＭ、及び／又はオリジナルソフトウェアアプリケーション２１０を実行するためにターゲットハードウェアプラットフォームが選択される（３０５）。例えば、ターゲットハードウェアプラットフォームは、現在その上でソフトウェアアプリケーション２１０が直接実行されるハードウェアプラットフォーム、及び／又は現在その上でＶＭ２０５によってソフトウェアアプリケーション２１０が実行されるハードウェアである。これに加えて、又はこれとは別の構成として、ターゲットハードウェアプラットフォームは、その上でＶＭ２０５を実行したいと考えるハードウェアプラットフォームとすることができる。幾つかの実施形態では、ターゲットハードウェアプラットフォームは、命令セットアーキテクチャ（ＩＳＡ）、及び／又はＩＳＡを実装するマイクロアーキテクチャに関連付けられる。
【００２５】
ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述が決定される（３１０）。例えば、ＨＤＬ記述は、ターゲットハードウェアプラットフォームの供給業者（例えば、製造者）から取得され、ターゲットハードウェアプラットフォームのサンプルに基づいて作成される、及び／又は新規のハードウェアプラットフォームの所望の動作に基づいて作成される。ＨＤＬ記述は、ターゲットハードウェアプラットフォーム（例えば、マイクロアーキテクチャ）の抽象化と理解することができる。
【００２６】
ＨＤＬ記述に基づいて、プログラマブルハードウェアコンポーネント及び／又はプロセッサのようなハードウェアコンポーネントが構成される（例えば、プログラムされる及び／又は作成される）（３１５）。例えば、プログラマブルハードウェアコンポーネントは、限定しないが、プログラマブルロジックデバイス（ＰＬＤ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブルロジックアレイ（ＰＬＡ）、及び／又は再構成可能なデジタル回路の作成に使用できる任意のデバイスを含むことができる。プログラマブルハードウェアコンポーネントは、ＨＤＬ記述に基づいてプログラムすることができる。これに追加して、又はこれとは別の構成として、ＨＤＬ記述に基づいて、プロセッサ、例えば特定用途向け集積回路（ＡＳＩＣ）を作成することができる。構成されたハードウェアコンポーネントはＨＤＬハードウェアプラットフォーム２１５と呼ばれる。
【００２７】
例示的な実施形態では、ＨＤＬ記述に基づいてハードウェアコンポーネントを構成すること（３１５）には、ＨＤＬ記述によって記載されたターゲットハードウェアプラットフォームに少なくとも部分的に機能的に等価なハードウェアコンポーネントを構成することが含まれ、これにより、ターゲットハードウェアプラットフォームによって実行されることに関するソフトウェアアプリケーション２１０の認証が、ＨＤＬハードウェアプラットフォーム２１５によるソフトウェアアプリケーション２１０の実行に適用可能となる。
【００２８】
ターゲットハードウェアプラットフォームと機能的に等価であることに加えて、ＨＤＬハードウェアプラットフォーム２１５は、ターゲットハードウェアプラットフォームに含まれない機能を含むことができる。幾つかの実施形態では、ハードウェアコンポーネントは、エミュレーションを加速させ、このような加速がＨＤＬハードウェアプラットフォーム２１５に含まれるように構成される（３１５）。エミュレーションの加速は、仮想プラットフォームソフトウェア開発設計に有益であり、この場合仮想プラットフォームは基礎となるハードウェアの抽象化を表す。例えば、仮想プラットフォームは、組み込みシステム用のソフトウェアを開発するために使用することができる。従来の仮想プラットフォームの実行速度は、基礎となるハードウェアより有意に低く（例えば１０％未満の速度）、一般にソフトウェアの開発プロセスを長期化させる。
【００２９】
幾つかの実施形態では、コアプロセッサに追加アセンブリ命令を加えることにより、ＨＤＬハードウェアプラットフォーム２１５にエミュレーション加速器が追加される。一実施例では、ターゲットハードウェアプラットフォームに対応するアセンブリ命令（例えば、「ＡＤＤイミディエト（「ａｄｄｉ」）」命令）が、ソフトウェア機能において実施される。従来のエミュレーションでは、ソフトウェア機能は第２のハードウェアプラットフォームのためにコンパイルされる。エミュレーションの加速を達成するために、ソフトウェア機能のロジックをＨＤＬ記述におけるアセンブリ命令（例えば、「ｔｈｐ＿ａｄｄｉ」）として実施することができる。したがって、ハードウェアコンポーネントを構成すること（３１５）により、ＨＤＬハードウェアプラットフォーム２１５にアセンブリ命令の実施が含まれる。例示的な実施形態では、ＨＤＬ記述に含まれるエミュレーションの加速は、ＨＤＬ記述自体に含まれるレジスタ及び状態情報を処理する。割り込み及びソフトウェア障害も、ＨＤＬ記述に含まれるロジックによって調整される。さらに、ＨＤＬハードウェアプラットフォーム２１５内のリソースが限られている場合、物理的メモリ及びスタックをＨＤＬハードウェアプラットフォーム２１５とは別に配置することができ、エミュレートされたプロセッサのメモリ管理ユニットをＨＤＬ記述に含めることができる。
【００３０】
幾つかの実施形態では、エミュレーション加速器に、エミュレーションの読み取り−デコード−実行法（Ｒｅａｄ−Ｄｅｃｏｄｅ−Ｅｘｅｃｕｔｅ  ｅｍｕｌａｔｉｏｎ  ｍｅｔｈｏｄ）が使用される。すべての仮想化及びエミュレーションがＨＤＬ記述中に持ち込まれるわけではなく、幾つかの実施形態では、プロセッサのエミュレーションだけがＨＤＬ記述において実施され、Ｉ／Ｏ装置のような他のフィーチャはＨＤＬ記述から省かれる。
【００３１】
ソフトウェアアプリケーション２１０は、ＨＤＬハードウェアプラットフォーム２１５を用いて実行される。例示的実施形態では、ＶＭ２０５はＨＤＬハードウェアプラットフォーム２１５を用いて実行され（３２０）、ソフトウェアアプリケーション２１０は、ＶＭ２０５を用いて実行される（３２５）。具体的には、ＶＭ２０５は、ＨＤＬハードウェアプラットフォーム２１５によって直接実行されるホストオペレーティングシステム（ＯＳ）２２０により実行可能である。ホストＯＳ２２０は、ＶＭ２０５の仮想化レイヤ２２５を実行し、仮想化レイヤ２２５はゲストＯＳ２３０（ホストＯＳと同じでも異なってもよい）を実行する。次いで、ゲストＯＳ２３０は、ソフトウェアアプリケーション２１０を実行する。
【００３２】
仮想化レイヤ２２５及び／又はＶＭ２０５は、ゲスト２３０に対し、「仮想化された」ハードウェアと呼ばれるＨＤＬハードウェアプラットフォーム２１５の抽象化を提供する。仮想化されたハードウェアは、コンピューティング装置１００（図１に示す）に含まれる任意のコンポーネント、例えばプロセッサユニット１０４、及びメモリ１０６の抽象化を含むことができる。
【００３３】
幾つかの実施形態では、ＨＤＬハードウェアプラットフォーム２１５は、複数の入出力（Ｉ／Ｏ）装置２３５（例えば、図１に示す入出力ユニット１１２により提供される）を含み、これらの入出力装置は、センサ、ユーザ入力装置、被制御デバイス（例えばモータ）、並びに／或いは、コンピューティング装置１００（図１）への入力提供及び／又は同装置１００からの出力の受領を行うことができるその他任意のデバイスといったデバイスとの相互作用を容易にする。Ｉ／Ｏ装置２３５は、例えば、直列の通信ポート及び／又は並列の通信ポートを含むことができる。
【００３４】
ホストＯＳ２２０は、Ｉ／Ｏ装置２３５にアクセスするためにホストＯＳ２２０により実行されるソフトウェアが使用できるＩ／Ｏ装置ドライバ２４０を含む。例示的な実施形態では、仮想レイヤ２２５は、Ｉ／Ｏ装置ドライバ２４０を介してＩ／Ｏ装置２３５に対応する、又は同装置２３５に「対応して位置する（ｍａｐ  ｔｏ）」仮想Ｉ／Ｏ装置２４５を提供する。したがって、仮想レイヤ２２５は、ＶＭ２０５に対してＩ／Ｏ装置２３５を抽象化している。ホストＯＳ２２０と同様に、ゲストＯＳ２３０は、ゲストＯＳ２３０により実行されて仮想Ｉ／Ｏ装置２４５にアクセスするソフトウェアによって使用されるＩ／Ｏ装置ドライバ２５０を含む。幾つかの実施形態では、様々な種類のＩ／Ｏ装置が互いに対応して位置している。例えば、仮想ユニバーサルシリアルバス（ＵＳＢ）デバイスを物理的なイーサネット（登録商標）デバイスに対応させて位置づけて、仮想レイヤ２２５内において翻訳を起こすことができる。
【００３５】
特に、ＶＭ２０５は、仮想レイヤ２２５により提供される仮想化されたハードウェアにしかアクセスしないので、ＶＭ２０５、及びＶＭ２０５によって実行されるソフトウェア（例えば、ゲストＯＳ２３０、及び／又はソフトウェアアプリケーション２１０）は、仮想レイヤ２２５の下に位置する物理的ハードウェアに対する変更から絶縁される（例えば、そのような変更の影響を受けない）。例示的な実施形態では、ターゲットハードウェアプラットフォームは第１のハードウェアプラットフォームと考えられ、ソフトウェアアプリケーション２１０は、第１のハードウェアプラットフォームとは異なる第２のハードウェアプラットフォームに（例えば実行可能に）関連付けられる。ＶＭ２０５は、ソフトウェアアプリケーション２１０に対し、第２のハードウェアプラットフォームをエミュレートする仮想ハードウェアプラットフォームを提供するように構成される。したがって、ゲストＯＳ２３０及び／又はソフトウェアアプリケーション２１０に関連付けられたソースコードが、利用不能であるか、又は新規のハードウェアプラットフォームによる実行に合わせて修正することが実行不能である場合も、このようなソフトウェアはＶＭ２０５によって実行可能である。
【００３６】
例示的な実施形態では、ソフトウェアアプリケーション２１０は、ターゲットハードウェアプラットフォームによって、及び／又はターゲットハードウェアプラットフォームを記述するＨＤＬ記述に基づいて構成された一又は複数のデバイス（例えば、別のＨＤＬハードウェアプラットフォーム２１５）によって実行されることについて承認されている。例えば、ソフトウェアアプリケーション２１０の包括的な評価及び／又は確認試験は、ターゲットハードウェアプラットフォームにより実行されるソフトウェアアプリケーション２１０を用いて問題なく完了している。このような実施形態では、ターゲットハードウェアプラットフォームによる実行に関するソフトウェアアプリケーション２１０の認証は、ＨＤＬハードウェアプラットフォーム２１５によるソフトウェアアプリケーションの実行に適用可能である。したがって、認証プロセスに関する少なくとも何らかの努力（例えば、評価、及び／又は確認試験）を省くことができる。
【００３７】
幾つかの実施形態では、方法３００は繰り返し実行される。考えられる一の状況では、ＨＤＬ記述に基づいて構成された（３１５）ハードウェアコンポーネントが利用不能となる場合がある。例えば、ハードウェアコンポーネントの供給業者（例えば、製造者）が、そのハードウェアコンポーネントの製造を中止するかもしれない。そのような状況では、元々構成されていたハードウェアコンポーネント、又は最初のハードウェアコンポーネントは、最初のハードウェア仕様に関連付けられており、ソフトウェアアプリケーション２１０の実行を、第２のハードウェア仕様に関連付けられた代替えのハードウェアコンポーネント、又は第２のハードウェアコンポーネントによって実行することが望ましい。例えば、第２のハードウェアコンポーネントは、第１のハードウェアコンポーネントの改訂とすることができるか、又は第１のハードウェアコンポーネントとは無関係のものとすることができる。
【００３８】
このような実施形態では、ターゲットハードウェアプラットフォームのＨＤＬ記述が既に決定されている（３１０）ので、上述のように、第２のハードウェアコンポーネントをＨＤＬ記述に基づいて構成して第２のＨＤＬハードウェアプラットフォーム２１５を作成する（３１５）ことで、第２のハードウェアコンポーネントとのソフトウェアアプリケーション２１０の互換性が達成される。例示的な実施形態では、第１のハードウェアコンポーネントの構成（３１５）に使用したものと同じＨＤＬ記述に基づいて第２のハードウェアコンポーネントを構成すること（３１５）により、第２のハードウェアコンポーネントが第１のハードウェアコンポーネントと機能的に等価なものになる。したがって、上述のように、ソフトウェアアプリケーション２１０が第１のハードウェアコンポーネントによる実行について認証されている場合、第２のハードウェアコンポーネントを第１のハードウェアコンポーネントと機能的に等価に構成する（３１５）ことにより、この認証は、第２のハードウェアコンポーネントによるソフトウェアアプリケーション２１０の実行にも適用可能となる。
【００３９】
このような状況では、第１のハードウェアコンポーネントは、ＶＭ２０５の第１のインスタンスを実行し、これによりソフトウェアアプリケーション２１０の第１のインスタンスが実行されると考えられる。上述のように構成された（３１５）第２のハードウェアコンポーネントの場合、第２のハードウェアコンポーネントを用いてＶＭ２０５の第２のインスタンスが実行され（３２０）、このＶＭ２０５の第２のインスタンスを用いてソフトウェアアプリケーション２１０の第２のインスタンスが実行される（３２５）。
【００４０】
幾つかの実施形態では、ソフトウェアアプリケーション２１０に含まれていない機能性が、ソフトウェアアプリケーション２１０を直接修正することなく追加される。図４は、ソフトウェアアプリケーション２１０に機能性を追加するために使用可能なコンピューティング装置の例示的な構成４００を示すブロック図であり、これは、ホストオペレーティングシステム２２０により実行される第２の仮想マシン４１０を用いて第１のＶＭ４０５によって実行される。
【００４１】
図４に示される実施形態では、第１のＶＭ４０５が、上述のように、オリジナルソフトウェアアプリケーション２１０を実行する。ソフトウェアアプリケーション２１０の動作は、第１の仮想レイヤ４２０によって第１のＶＭ４０５に提供される第１の仮想Ｉ／Ｏ装置４１５により実行される。第１の仮想レイヤ４２０はホストＯＳ４２５によって実行され、ホストＯＳ４２５は第２の仮想レイヤ４３０の実行も行う。第２の仮想レイヤ４３０は、第２のＶＭ４１０に対し、第１の仮想Ｉ／Ｏ装置４１５に対応して位置する第２の仮想Ｉ／Ｏ装置４３５を提供し、第２のＶＭ４１０はＩ／Ｏ装置ドライバ４４０を介して第２の仮想Ｉ／Ｏ装置４３５にアクセスする。
【００４２】
第２のソフトウェアアプリケーション４４５は、第２のＶＭ４１０によって実行されて、オリジナルソフトウェアアプリケーション２１０には含まれていない追加の機能性を提供する。このような追加の機能性の少なくとも一部は、第１の仮想Ｉ／Ｏ装置４１５及び第２の仮想Ｉ／Ｏ装置４３５を用いてオリジナルソフトウェアアプリケーション２１０と第２のソフトウェアアプリケーション４４５との間でのデータの経路指定を行うことにより有効となる。例示的な実施形態では、第２のソフトウェアアプリケーション４４５は、ソフトウェアアプリケーション２１０からデータ（例えば、コマンド及び／又はリクエスト）を受け取り、第２のソフトウェアアプリケーション４４５に実装された要件及び／又は規則に基づいてこのようなデータに応答する。例えば、ソフトウェアアプリケーション２１０は、被制御デバイスのためのコマンドを第１の仮想Ｉ／Ｏ装置４１５に伝送することができる。このようなコマンドは、第１の仮想Ｉ／Ｏ装置４１５により、第２の仮想Ｉ／Ｏ装置４３５を介して、第２のソフトウェアアプリケーション４４５に経路指定される。第２のソフトウェアアプリケーション４４５は、元の宛先（例えば、被制御デバイス）にこのコマンドを渡すことができるか、第２のソフトウェアアプリケーション４４５に実装された要件及び／又は規則に基づいてこのコマンドを修正及び／又はブロックすることができる。さらに、第２のソフトウェアアプリケーション４４５は、このような要件及び規則に基づいて、第２の仮想Ｉ／Ｏ装置４３５及び第１の仮想Ｉ／Ｏ装置４１５を介してオリジナルソフトウェアアプリケーション２１０に応答を伝送することができる。
【００４３】
幾つかの実施形態では、追加の機能性は、仮想化の第２のレイヤによってサポートされる。図５は、ソフトウェアアプリケーション２１０に機能性を追加するために使用可能なコンピューティング装置の例示的な構成５００を示すブロック図であり、これは、第２のネイティブＶＭ５１５を用いて第１のネイティブＶＭ５１０内部において第１のＶＭ５０５によって実行される。
【００４４】
例示的実施形態では、第１のネイティブＶＭ５１０及び第２のネイティブ５１５は、ＨＤＬハードウェアプラットフォーム５２５によって直接実行される（たとえば、ＯＳを仲介させることなく）ネイティブ仮想化レイヤ５２０により提供される仮想化されたハードウェアにアクセスする。例えば、ネイティブ仮想化レイヤ５２０は、第１のネイティブＶＭ５１０に第１の仮想Ｉ／Ｏ装置５３０を、第２のネイティブＶＭ５１５には仮想Ｉ／Ｏ装置５３０に対応して位置する第２の仮想Ｉ／Ｏ装置５３５を、それぞれ提供する。したがって、コマンド及び／又はリクエストといったデータが、オリジナルソフトウェアアプリケーション２１０から、第２のネイティブＶＭ５１５により実行される第２のソフトウェアアプリケーション５４０に経路指定され、図４を参照して上述したように、機能性が拡張される。ネイティブ仮想レイヤ５２０により実行されるネイティブＶＭ５１０、５１５を使用することで、ソフトウェアアプリケーション２１０、５４０とＨＤＬハードウェアプラットフォーム５２５との間の抽象化レベルを取り除くことにより、システム性能が容易に向上する。
【００４５】
幾つかの実施形態では、追加の機能性は、ホストＯＳ内で直接実行するソフトウェアによってサポートされる。図６は、ソフトウェアアプリケーション２１０に機能性を追加するために使用可能なコンピューティング装置の例示的な構成６００を示すブロック図であり、これは、ＶＭ６０５も実行するホストＯＳ６１５により実行される第２のソフトウェアアプリケーション６１０を用いてＶＭ６０５によって実行される。例示的な実施形態では、ホストＯＳ６１５はＶＭ６０５に仮想レイヤ６２０を提供する。仮想レイヤ６２０は仮想Ｉ／Ｏ装置６２５を含み、この装置６２５により、ソフトウェアアプリケーション２１０はコマンド及び／又はリクエストといったデータの伝送を行う。第２のソフトウェアアプリケーション６１０は、図４を参照して上述したように第２のソフトウェアアプリケーション６１０によってオリジナルソフトウェアアプリケーション２１０の機能性が拡張されるように、仮想Ｉ／Ｏ装置６２５と直接通信する。
【００４６】
図１〜６及び詳細な説明に示すように、仮想マシン（ＶＭ）２０５を用いたソフトウェアアプリケーション２１０の実行に使用される方法が開示される。この方法は、ＶＭ２０５を実行するためのターゲットハードウェアプラットフォーム２１５を選択すること、ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述を決定すること、ＨＤＬ記述に基づいてプログラマブルハードウェアコンポーネントをプログラムすること（３１５）、並びに、プログラムされたプログラマブルハードウェアコンポーネント３１５を使用してＶＭ２０５を実行することを含む。一変形例では、この方法は、プログラムされたプログラマブルハードウェアコンポーネント３１５により実行されるＶＭ２０５を用いてソフトウェアアプリケーション２１０を実行することを含み、この場合、ソフトウェアアプリケーション２１０はターゲットハードウェアプラットフォーム２１５上で実行されることについて認証されており、ＨＤＬ記述に基づいてプログラマブルハードウェアコンポーネントをプログラムすることが、プログラマブルハードウェアコンポーネント３１５を、ターゲットハードウェアプラットフォーム２１５と機能的に等価に構成することを含み、且つターゲットハードウェアプラットフォーム２１５によって実行されることについてのソフトウェアアプリケーション２１０の認証がが、プログラムされたプログラマブルハードウェアコンポーネント３１５によるソフトウェアアプリケーション２１０の実行に適用可能である。一変形例では、ターゲットハードウェアプラットフォーム２１５を選択することが、その上でＶＭ２０５によりソフトウェアアプリケーション２１０が現在実行されているハードウェアプラットフォームを選択することを含む。一変形例では、ターゲットハードウェアプラットフォーム２１５を選択することは、その上でＶＭ２０５を実行したいと考えるハードウェアプラットフォームを含む。
【００４７】
また別の変形例では、ＶＭ２０５を実行することは、第１のハードウェア使用に関連付けられた第１のプログラマブルハードウェアコンポーネントを用いてＶＭ２０５の第１のインスタンスを実行することを含み、前記方法は、さらに、ＨＤＬ記述に基づいて、第２のハードウェア仕様に関連付けられた第２のプログラマブルハードウェアコンポーネントをプログラムすること、並びに第２のプログラマブルハードウェアコンポーネントを用いてＶＭ２０５の第２のインスタンスを実行することを含む。
【００４８】
また別の変形例では、ＨＤＬ記述に基づいて第２のプログラマブルハードウェアコンポーネント２１５をプログラムすることが、第２のプログラマブルハードウェアコンポーネント２１５を、第１のプログラマブルハードウェアコンポーネントと機能的に等価に構成することを含み、この場合、ソフトウェアアプリケーション２１０は第１のプログラマブルハードウェアコンポーネント３１５上で実行されることについて認証されており、第１のプログラマブルハードウェアコンポーネント３１５と機能的に等価に第２のプログラマブルハードウェアコンポーネント３１５を構成することにより、第１のプログラマブルハードウェアコンポーネント３１５による実行に関するソフトウェアアプリケーション２１０の認証が、第２のプログラマブルハードウェアコンポーネント２１５によるソフトウェアアプリケーション２１０の実行に適用可能となる。また別の変形例では、本方法は、さらに、ＶＭ２０５の第１のインスタンスを使用してソフトウェアアプリケーション２１０の第１のインスタンスを実行すること、並びにＶＭ２０５の第２のインスタンスを使用してソフトウェアアプリケーション２１０の第２のインスタンスを実行することを含み、この場合、ソフトウェアアプリケーション２１０はＨＤＬ記述により記述されたターゲットハードウェアプラットフォーム２１５上で実行されることについて認証されている。
【００４９】
上述した種々の有利な実施形態の説明は、例示及び説明を目的とするものであり、完全な説明であること、又はこれらの実施形態を開示された形態に限定することを意図していない。当業者には、多数の修正例及び変形例が明らかであろう。さらに、種々の有利な実施形態は、他の有利な実施形態とは異なる利点を提供する。選択された一又は複数の実施形態は、実施形態の原理と、実用的な用途とを最もよく説明するために、並びに、考慮される特定の用途に適した様々な修正点と共に種々の実施形態の開示内容を当業者が理解できるように、選ばれて説明されている。
【００５０】
本明細書では、ベストモードを含む種々の実施形態を開示するため、任意のデバイス又はシステムの作成及び使用と、包含された任意の方法の実行を含めて、当業者がこれらの実施形態を実行できるように、実施例を使用した。特許性を有する範囲は、特許請求の範囲によって規定され、当業者であれば想起できる他の実施例を含みうる。そのような他の実施例は、請求の範囲の記載内容と異ならない構造要素を有するのであれば、又は請求の範囲の記載内容との有意な差異を有さない等価な構造要素を含むのであれば、特許請求の範囲に含まれる。
また、本発明は以下に記載する態様を含む。
（態様１）
ターゲットハードウェアプラットフォームにより実行される（３０５）ソフトウェアアプリケーション（２１０）の実行に使用される方法であって、
ターゲットハードウェアプラットフォームのハードウェア記述言語（ＨＤＬ）の記述を決定すること（３１０）、
ＨＤＬ記述に基づいてターゲットハードウェアプラットフォーム（３０５）と機能的に等価にプログラマブルハードウェアコンポーネント（３１５）を構成すること（３１５）、並びに
構成されたプログラマブルハードウェアコンポーネント（３１５）を使用してソフトウェアアプリケーション（２１０）を実行すること（３１５）
を含む方法。
（態様２）
ソフトウェアアプリケーション（２１０）の実行が、
構成されたハードウェアコンポーネントを使用して仮想マシン（ＶＭ）（２０５）を実行すること（３２０）、並びに
ＶＭ（２０５）を使用してソフトウェアアプリケーション（２１０）を実行すること（３２５）
を含み、
ターゲットハードウェアプラットフォーム（２１５）が第１のハードウェアプラットフォーム（２１５）であり、
ソフトウェアアプリケーション（２１０）が第２のハードウェアプラットフォームに関連付けられており、且つ
第２のハードウェアプラットフォームをエミュレートする仮想ハードウェアプラットフォームを提供するように、ＶＭ（２０５）を構成する、
態様１に記載の方法。
（態様３）
ソフトウェアアプリケーション（２１０）が第１のソフトウェアアプリケーション（２１０）であって、前記方法が、さらに、
構成されたプログラマブルハードウェアコンポーネント（３１５）を用いて第２のソフトウェアアプリケーション（４４５、６１０）を実行することであって、第２のソフトウェアアプリケーション（４４５、６１０）が、第１のソフトウェアアプリケーション（２１０）には含まれていない追加の機能性を含むこと、並びに
第１のソフトウェアアプリケーション（２１０）から第２のソフトウェアアプリケーション（４４５、６１０）へとデータを経路指定することであって、データがリクエスト及びコマンドの少なくとも一方を含むこと
を含む、態様１又は２に記載の方法。
（態様４）
プログラマブルハードウェアコンポーネントを構成すること（３１５）が、プログラマブルハードウェアコンポーネントをプログラムすること（３１５）である、態様１ないし３のいずれか一つに記載の方法。
（態様５）
さらに、ＨＤＬ記述にエミュレーションの加速を含めることを含み、エミュレーションの加速が、ターゲットハードウェアプラットフォーム（２１５）に対応する少なくとも一つのアセンブリ命令の実施を含む、態様１ないし４のいずれか一つに記載の方法。
（態様６）
仮想マシン（ＶＭ）（２０５）を用いたソフトウェアアプリケーション（２１０）の実行に使用される装置であって、
仮想マシン（ＶＭ）（２０５）とソフトウェアアプリケーション（２１０）とを記憶するように構成されている記憶装置、及び
前記記憶装置に連結されたプログラマブルハードウェアコンポーネント（３１５）であって、ターゲットハードウェアプラットフォーム（２１５）のハードウェア記述言語（ＨＤＬ）記述に基づいてプログラムされており、且つソフトウェアアプリケーション（２１０）を実行するようにプログラムされているプログラマブルハードウェアコンポーネント（３１５）
を備えており、ソフトウェアアプリケーション（２１０）が、ターゲットハードウェアプラットフォーム（２１５）及びＨＤＬ記述の少なくとも一方により実行されることについて認証されている、装置。
（態様７）
前記プログラマブルハードウェアコンポーネント（３１５）がターゲットハードウェアプラットフォームと機能的に等価である、態様６に記載の装置。
（態様８）
前記プログラマブルハードウェアコンポーネント（３１５）が、ＶＭ（２０５）を用いてソフトウェアアプリケーション（２１０）を実行するようにプログラムされている、態様６に記載の装置。
（態様９）
前記プログラマブルハードウェアコンポーネント（３１５）がターゲットハードウェアプラットフォームのＨＤＬ記述に基づいてプログラムされており、ソフトウェアアプリケーション（２１０）は、前記ＨＤＬ記述によって実行されることについて認証されており、且つこの認証が前記プログラマブルハードウェアコンポーネント（３１５）によるソフトウェアアプリケーション（２１０）の実行に適用可能である、態様６に記載の装置。
（態様１０）
前記プログラマブルハードウェアコンポーネント（３１５）がＨＤＬ記述に基づいてプログラムされており、ソフトウェアアプリケーション（２１０）は、前記ＨＤＬ記述によって実行されることについて認証されており、且つこの認証が前記プログラマブルハードウェアコンポーネント（３１５）によるソフトウェアアプリケーション（２１０）の実行に適用可能である、態様６に記載の装置。
【図１】
0005976409.tif 000002
【図２】
0005976409.tif 000003
【図３】
0005976409.tif 000004
【図４】
0005976409.tif 000005
【図５】
0005976409.tif 000006
【図６】
0005976409.tif 000007