本開示は、新規の特徴を定義する特許請求の範囲で締めくくるが、本開示内で説明される様々な特徴は、図面とともにその説明を考慮することにより、より良く理解されると考えられる。本明細書で説明される(1つまたは複数の)プロセス、(1つまたは複数の)機械、(1つまたは複数の)製造物およびその任意の変形形態は、例示のために提供される。本開示内で説明される特定の構造的および機能的詳細は、限定するものとして解釈されるべきではなく、単に、特許請求の範囲のための基礎として、およびほぼすべての適切に詳細な構造において説明される特徴を様々に採用するように当業者に教示するための代表的基礎として解釈されるべきである。さらに、本開示内で使用される用語および句は、限定するものではなく、むしろ、説明される特徴の理解可能な説明を提供するものである。
本開示は、ICに関し、より詳細には、異種SoC内に複数のドメインを作成し、分離することに関する。本明細書で開示される本発明の構成によれば、異なるドメイン、たとえば、ソフトウェアドメインが、異種SoC内での実装のために作成され得る。各ドメインは、事実上、異種SoCのサブシステムを実装する。ドメインは、ハードウェア設計ツールとは対照的にアプリケーションレベルツールを使用して作成され得る。異種SoCのための各ドメインは、ハードウェアおよび/またはソフトウェアかどうかにかかわらず、様々なリソースを含むように作成され得る。各ドメインは、異種SoC中で実装されたとき、異種SoC中で利用可能なハードウェア分離特徴を活用することによって1つまたは複数の埋込みアプリケーションを実装および/または実行するために使用され得る。説明のために、「SoC」または「システムオンチップ」という用語は、本開示内では異種SoCを指す。
1つまたは複数の実施形態では、ハードウェア設計ツール(たとえば、電子設計オートメーション(EDA)ツール)が、設計のためのハードウェア記述ファイルを生成するために使用され得る。ハードウェア設計ツールによって生成されたような、ハードウェア記述ファイルは、SoC内に実装されるために、インスタンス化され、したがって、所与の設計による使用のために利用可能である、SoCの特定のハードウェアリソースを指定する。たとえば、ハードウェア記述ファイルは、SoCのどのプロセッサが使用のために利用可能であるかと、SoCのどの周辺デバイスが設計による使用のために利用可能であるかとを指定し得る。ハードウェア記述ファイルは、埋込みアプリケーション、たとえば、SoC上で稼働または実行するために作成されるプログラムコードによって使用され得る、SoCのハードウェアリソースを指定する。この点について、SoCは、ハードウェア設計ツールによって生成されたハードウェア記述ファイル内で定義されるよりも多くのハードウェアリソースを含み得る。
1つまたは複数の実施形態では、ハードウェア記述ファイルは、ハードウェア設計ツールからエクスポートされ、コンピュータベースドメイン作成ツールによってインポートされ得る。ドメイン作成ツールは、ハードウェア記述ファイルに基づいて複数のドメインを生成することが可能である。ドメイン作成ツールは、たとえば、ハードウェア記述ファイルから、各ドメインがプロセッサを含む複数のドメインを定義することが可能である。ドメイン作成ツールは、ハードウェア記述ファイル内で指定された異なるハードウェアリソースを、作成される異なるドメインに割り当てることが可能である。
ドメイン作成ツールは、作成されたドメインを指定するプラットフォームを生成することが可能である。プラットフォームは、異なるドメインのための様々な異なるソフトウェアアーティファクトを含み得る。一例として、ドメイン作成ツールは、様々なドメインを実装するためにSoCにロードされ得る設定データを生成することが可能である。設定データは、SoCにロードされたとき、ドメインを作成し、ドメインを互いから分離することが可能である。別の例では、ドメイン作成ツールは、異なるドメインに合わせられた1つまたは複数のソフトウェアアーティファクトを生成することが可能である。ソフトウェアアーティファクトは、ドメインのうちの特定のドメイン中での実行を目的とする実行可能プログラムコード(たとえば、埋込みアプリケーション)を生成するために使用され得る。
1つまたは複数の実施形態では、ドメイン作成ツールは、ハードウェア設計システムから作成されたドメインを修正することも可能である。たとえば、ソフトウェア開発者が、元のドメインを作成するために最初に使用された元のハードウェア記述ファイルに基づいて異なるドメインのうちの1つまたは複数を修正するために、ドメイン作成ツールを利用し得る。したがって、SoCのドメインを変更および/または修正するために、新しいおよび/または異なるハードウェア記述ファイルがハードウェア設計アプリケーションによって生成される必要がない。
図を参照しながら、本発明の構成のさらなる態様が以下でより詳細に説明される。例示を単純および明快にするために、図に示されている要素は、必ずしも一定の縮尺で描かれているとは限らない。たとえば、要素のうちのいくつかの寸法は、明快のために、他の要素に対して誇張され得る。さらに、適切と見なされる場合、対応する、類似する、または同様の特徴を示すために、参照番号が図の間で繰り返される。
図1は、本明細書で説明される1つまたは複数の実施形態とともに使用するための例示的なシステム100を示す。システム100は、コンピュータ、サーバ、ラップトップまたはタブレットコンピュータなどのポータブルコンピュータ、あるいは他のデータ処理システムを実装するために使用され得るコンピュータハードウェアの一例である。コンピュータハードウェアを使用して実装されるシステムまたはデバイスは、SoC内に複数のドメインを作成し、分離すること、および/またはSoC内での実装のために回路設計を処理することに関係する、本明細書で説明される様々な動作を実施することが可能である。
図1の例では、システム100は、少なくとも1つのプロセッサ105を含む。プロセッサ105は、インターフェース回路115を通してメモリ110に連結される。システム100は、メモリ110内に(「プログラムコード」とも呼ばれる)コンピュータ可読命令を記憶することが可能である。メモリ110は、コンピュータ可読記憶媒体の一例である。プロセッサ105は、インターフェース回路115を介してメモリ110からアクセスされるプログラムコードを実行することが可能である。
メモリ110は、たとえば、ローカルメモリおよびバルク記憶デバイス(bulk storage device)など、1つまたは複数の物理メモリデバイスを含み得る。ローカルメモリは、概してプログラムコードの実際の実行中に使用される(1つまたは複数の)非永続的メモリデバイスを指す。ローカルメモリの例は、ランダムアクセスメモリ(RAM)、および/または、プログラムコードの実行中のプロセッサによる使用のために好適である様々なタイプのRAM(たとえば、ダイナミックRAMまたは「DRAM」あるいはスタティックRAMまたは「SRAM」)のいずれかを含む。バルク記憶デバイスは、永続的データ記憶デバイスを指す。バルク記憶デバイスの例は、限定はしないが、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、フラッシュメモリ、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、または他の好適なメモリを含む。システム100は、プログラムコードが実行中にバルク記憶デバイスから取り出されなければならない回数を低減するために少なくともあるプログラムコードの一時的記憶を行う1つまたは複数のキャッシュメモリ(図示せず)をも含み得る。
メモリ110は、プログラムコードおよび/またはデータを記憶することが可能である。たとえば、メモリ110は、様々なルーチン、プログラム、オブジェクト、構成要素、論理、他の好適な命令、および/または他のデータ構造を記憶することが可能である。例示のために、メモリ110は、オペレーティングシステム125と、1つまたは複数のアプリケーション130と、ハードウェア記述ファイル135とを記憶する。メモリ110は、回路設計をも記憶し得る。1つまたは複数の実施形態では、(1つまたは複数の)アプリケーション130は、ハードウェア設計アプリケーション(たとえば、電子設計オートメーションまたはEDAアプリケーション)および/またはドメイン作成アプリケーションを含み得る。ハードウェア設計アプリケーションは、ハードウェアシステムを生成し、ハードウェアシステムをハードウェア記述ファイル135として記憶することが可能である。ハードウェア記述ファイル135は、ターゲットSoC中で実装されるために、インスタンス化され、したがって、設計による使用のために利用可能である、ターゲットSoCの異なるハードウェアリソースを指定し得る。ハードウェアリソースの例は、限定はしないが、インスタンス化され、使用のために利用可能である、プロセッサ(および/またはプロセッサコア)、メモリ、周辺機器、記憶デバイス、および/またはSoCの他のハードウェア構成要素を含む。
ドメイン作成アプリケーションは、SoC内でのドメインの作成および分離に関係する、本明細書で説明される動作を実施することが可能である。ハードウェア設計アプリケーションも、SoC内に回路設計を実装するために、設計フローの1つまたは複数の動作(たとえば、合成、配置、ルーティング、および/またはビットストリーム生成)を実施し得る。
システム100、たとえば、プロセッサ105は、本開示内で説明される動作を実施するために、オペレーティングシステム125と(1つまたは複数の)アプリケーション130とを実行することが可能である。したがって、オペレーティングシステム125と(1つまたは複数の)アプリケーション130とは、システム100の一体部分と見なされ得る。さらに、システム100(たとえば、プロセッサ105)によって使用され、生成され、および/または作用されるデータは、システムの一部として採用されたときに機能性を与える機能的データ構造であることを諒解されたい。
インターフェース回路115の例は、限定はしないが、システムバスと入出力(I/O)バスとを含む。インターフェース回路115は、様々なバスアーキテクチャのいずれかを使用して実装され得る。バスアーキテクチャの例は、限定はしないが、拡張業界標準アーキテクチャ(EISA)バス、アクセラレーテッドグラフィックスポート(AGP)、ビデオエレクトロニクス規格協会(VESA)ローカルバス、ユニバーサルシリアルバス(USB)、および周辺構成要素相互接続エクスプレス(PCIe)バスを含み得る。
システム100は、インターフェース回路115に連結された1つまたは複数のI/Oデバイス120をさらに含み得る。I/Oデバイス120は、直接、または介在するI/Oコントローラを通してのいずれかで、システム100、たとえば、インターフェース回路115に連結され得る。I/Oデバイス120の例は、限定はしないが、キーボード、ディスプレイデバイス、ポインティングデバイス、1つまたは複数の通信ポート、およびネットワークアダプタを含む。ネットワークアダプタは、システム100が、介在するプライベートまたは公衆ネットワークを通して他のシステム、コンピュータシステム、リモートプリンタ、および/またはリモート記憶デバイスに連結されるようになることを可能にする回路を指す。モデム、ケーブルモデム、イーサネットカード、およびワイヤレストランシーバが、システム100とともに使用され得る異なるタイプのネットワークアダプタの例である。
システム100は、実装されるデバイスおよび/またはシステムの特定のタイプに応じて、図示された構成要素よりも少数の構成要素、または図1に示されていない追加の構成要素を含み得る。さらに、含まれる特定のオペレーティングシステム、(1つまたは複数の)アプリケーション、および/またはI/Oデバイスは、システムタイプに基づいて変動し得る。さらに、例示的な構成要素のうちの1つまたは複数は、別の構成要素に組み込まれるか、またはさもなければ、別の構成要素の一部分を形成し得る。たとえば、プロセッサが、少なくともあるメモリを含み得る。システム100は、図1のアーキテクチャまたはそれと同様のアーキテクチャを使用して各々実装される単一のコンピュータあるいは複数のネットワーク化されたまたは相互接続されたコンピュータを実装するために使用され得る。
本開示内で説明される本発明の構成は、SoC内に複数の異なるドメインを作成することが可能である。たとえば、ドメイン作成アプリケーションを実行するシステム100は、埋込みソフトウェアによる使用のために利用可能なハードウェア環境を定義するハードウェア記述ファイル135を受信することが可能である。埋込みソフトウェアは、SoCの特定のドメイン中で稼働または実行することを意図されるプログラムコードを指す。
システム100は、ドメイン作成アプリケーションを実行する際に、SoC内に実装され得る複数の異なるドメインの各々を定義することが可能である。各ドメインは、ハードウェア記述ファイル135からSoCの利用可能なプロセッサのうちの1つを割り当てられる。さらに、システム100は、ドメインの各々中のプロセッサによって実行されるべき特定のオペレーティングシステムを指定することが可能である。
システム100は、ドメイン作成アプリケーションを実行する際に、ハードウェア記述ファイル135からハードウェアリソースのうちの異なるハードウェアリソースをドメインのうちの異なるドメインに割り当てることも可能である。特定の実施形態では、システム100は、SoCにロードされたとき、ドメインを作成し、SoCの動作中にドメインの間で分離を実施する、設定データなどのソフトウェアアーティファクトを生成することが可能である。たとえば、SoC内に実装されるべき設計が完成し、SoCにロードされると、SoC内の回路は、あるドメインが、他のドメインに割り当てられたSoCの要素にアクセスするのを防ぎ、それにより、それぞれのドメインによる独立性およびセキュアな動作を保証する。
従来のシステムでは、ハードウェア設計が、設計ツールを使用して作成される。ハードウェア設計は、設計のプロセッサのためのオペレーティングシステム割当ておよび関係するセッティングに気づいていない。ハードウェア設計は、ソフトウェア開発者にハードウェア記述ファイルとして出力される。しかしながら、ハードウェア記述ファイルは、ユーザ(たとえば、ソフトウェア開発者)が変えることができない、ハードウェアの厳格な(rigid)ブロックとして提供された。ソフトウェア開発者は、所与のプロセッサにとって利用可能なリソースを修正することができなかった。
本明細書で説明される本発明の構成によれば、システム100は、ユーザ(たとえば、ソフトウェア開発者)が、ハードウェア記述ファイルに基づいて異なるドメインを指定し、作成することを可能にする。システム100は、たとえば、既存のハードウェア記述ファイルを使用し、作成される様々なドメインに同じく割り振られるプロセッサを稼働するための、割り当てられたハードウェアリソースおよびオペレーティングシステムを含む境界を割り振ることが可能である。ドメインは、元の(および不変の)ハードウェア記述ファイルを使用して修正され得る。
図2は、異種SoC200の一例を示す。図2の例では、SoC200は、プロセッサシステム202と、プログラマブル回路204とを含む。プロセッサシステム202は、プログラムコードを実行するように設定された2つまたはそれ以上のプロセッサを含む、SoC200のハードワイヤード領域である。1つまたは複数の実施形態では、プログラマブル回路204は、フィールドプログラマブルゲートアレイ(FGPA)回路および/またはプログラマブル論理として実装され得る。プログラマブル回路204を含むことにより、SoC200は、プログラマブルSoCと呼ばれることもある。
概して、プログラマブル回路204の機能性は、設定データがSoC200の設定メモリセル(図示せず)にロードされるまで確立されない。プログラマブル回路204をプログラムするために、設定ビットのセットが使用され得る。(1つまたは複数の)設定ビットは、一般に、「設定ビットストリーム」または「ビットストリーム」と呼ばれる。概して、プログラマブル回路は、設定ビットストリームをSoC200に最初にロードしなければ、動作可能でないか、または機能可能でない。設定ビットストリームは、プログラマブル回路204内に特定の回路設計または回路構造および接続を効果的に実装する。回路設計は、たとえば、プログラマブル回路ブロックの機能的態様と、プログラマブル回路204の様々なプログラマブル回路ブロックの間の物理的接続性とを指定する。
「ハードワイヤード」または「ハード化(harden)」される、すなわち、プログラマブルでない回路が、SoC200の一部として製造される。プログラマブル回路204とは異なり、ハード化された回路またはハード化された回路ブロックは、設定ビットストリームのローディングを通してSoC200の製造後に実装されない。ハード化された回路は、概して、たとえば、設定ビットストリームをSoC200に最初にロードすることなしに機能可能である専用回路ブロックおよび相互接続を有すると見なされる。
プロセッサシステム202は、様々な異なるプロセッサを含む。一態様では、プロセッサシステム202の異なるプロセッサは、物理的に別個のインスタンスであるが、同じアーキテクチャを有する(同じ命令セットを使用する)。別の態様では、プロセッサシステム202の異なるプロセッサは、物理的に別個のインスタンスであり、2つまたはそれ以上の異なるアーキテクチャを利用する(たとえば、異なる命令セットを利用する)。図2の例では、プロセッサシステム202は、アプリケーション処理ユニット(APU)206、リアルタイム処理ユニット(RPU)208、および/またはプロセッサ210を含む。
APU206は、1つまたは複数のコアを含み得る。本開示内での議論のために、コアが、プログラムコードを実行するように設定された「プロセッサ」と見なされる。RPU208は、1つまたは複数のコアを含み得る。1つまたは複数の実施形態では、RPU208は、リアルタイムアプリケーションを実行することが可能である。リアルタイムアプリケーションの例は、限定はしないが、自動車アプリケーション、大容量記憶アプリケーション、モバイルベースバンドアプリケーション、医療用アプリケーション、および/または工業用アプリケーションを含む。APU206とRPU208の両方が、それぞれ、分離回路230−1および230−5を通してプログラマブル回路204に直接接続され得る。
述べられたように、一態様では、(たとえば、コアを含む)異なるプロセッサは、異なるアーキテクチャを有し得る。一例では、プロセッサ210は、San Jose,CAのXilinx,Inc.からのMicroBlaze(商標)プロセッサのハード化されたバージョンとして実装される。APU206は、ARM CORTEX−A9など、Cambridge,UKのArm Ltd.からのマルチコアプロセッサとして実装され得る。RPU208は、同じくArm Ltd.から入手可能なARM CORTEX−R5プロセッサとして実装され得る。本明細書で説明される例示的なプロセッサアーキテクチャは、例示のために提供される。x86プロセッサアーキテクチャなどのプロセッサをSoC200中に実装するために他のアーキテクチャが使用され得ることを、当業者は諒解されよう。
プロセッサシステム202は、入出力(I/O)サブシステム212と、相互接続214と、メモリコントローラ216と、オンチップメモリ(OCM)218とをさらに含み得る。図2の例では、相互接続214は、RPU208、OCM218、APU206、プロセッサ210、I/Oサブシステム212、およびメモリコントローラ216に連結される。描かれているように、相互接続214は、それぞれ、介在する分離回路230−2、230−6、230−4、および230−7を通してそのような要素に接続され得る。
1つまたは複数の実施形態では、相互接続214は、オンチップ相互接続として実装される。オンチップ相互接続の一例は、AMBA拡張可能インターフェース(AXI)バスである。AMBA AXIバスは、回路ブロックおよび/またはシステムの間にオンチップ接続を確立する際に使用するための埋込みマイクロコントローラバスインターフェースである。相互接続の他の例示的な実装形態は、限定はしないが、バス、クロスバー、ネットワークオンチップ(NoC)、スイッチなどを含み得る。
I/Oサブシステム212は、I/Oデバイス220および222など、複数のI/Oデバイスを含む。I/Oサブシステム212は、3つ以上のI/Oデバイスを含み得る。I/Oデバイス220および222の各々は、マルチプレクサI/O(MIO)224に連結される。MIO224は、SoC200の外部のノードへの、およびSoC200の様々なI/Oデバイスへのアクセスを、プロセッサシステム202および/またはプログラマブル回路204に提供するように設定可能である。MIO224は、ピンごとに設定され得、プロセッサシステム202および/またはプログラマブル回路204によるI/Oデバイス220および/または222への同時アクセスを容易にし得る。
図2の例では、分離回路230のインスタンスは、SoC200内に含まれる。1つまたは複数の実施形態では、分離回路230の各々は、SoC200中のハードウェアリソースへのアクセスを調節または制御するように設定可能である。各分離回路230は、たとえば、設定データのローディングを通して、選択されたハードウェアリソースのみが他のハードウェアリソースにアクセスすることを可能にするように設定され得る。設定データはまた、プロセッサシステム202内の要素のための実装オプションを指定し得る。したがって、設定データは、SoC200内の異なるドメインを指定し、および/または、SoC200内に異なるドメインを実装し得る。
たとえば、分離回路230−2は、RPU208と相互接続214との間の信号経路中にあり、SoC200のどのハードウェアリソースがRPU208と対話することを許可されるかを調節することが可能である。分離回路230−6は、OCM218と相互接続214との間の信号経路中にあり、SoC200のどのハードウェアリソースがOCM218と対話することを許可されるかを調節することが可能である。分離回路230−4は、APU206と相互接続214との間の信号経路中にあり、SoC200のどのハードウェアリソースがAPU206と対話することを許可されるかを調節することが可能である。分離回路230−7は、プロセッサ210と相互接続214との間の信号経路中にあり、SoC200のどのハードウェアリソースがプロセッサ210と対話することを許可されるかを調節することが可能である。
さらに、分離回路230−8は、相互接続214とI/Oサブシステム212との間の信号経路中(たとえば、I/Oデバイスの各々への信号経路中)にある。分離回路230−8は、たとえば、I/Oデバイスごとに、SoC200のどのハードウェアリソースがI/Oサブシステム212と対話することを許可されるかを調節することが可能である。分離回路230−9は、相互接続214とメモリコントローラ216との間の信号経路中にあり、SoC200のどのハードウェアリソースがメモリコントローラ216と対話し、および/またはメモリコントローラ216に連結されたメモリ(図示せず)の特定の領域にアクセスする(たとえば、読み取るおよび/または書き込む)ことを許可されるかを調節することが可能である。さらに、分離回路230−1、230−3、および230−5は、それぞれ、プログラマブル回路204と、RPU208、相互接続214、およびAPU206との間の信号経路中にある。分離回路230−1は、RPU208へのプログラマブル回路204中の回路のアクセスおよび/またはプログラマブル回路204中の回路へのRPU208のアクセスを調節することが可能である。分離回路230−3は、相互接続214へのプログラマブル回路204中の回路のアクセスおよび/またはプログラマブル回路204中の回路への相互接続214のアクセスを調節することが可能である。分離回路230−5は、APU206へのプログラマブル回路204中の回路のアクセスおよび/またはプログラマブル回路204中の回路へのAPU206のアクセスを調節することが可能である。
概して、分離回路230は、SoC200内に異なるドメインを実装するようにプログラムされ得る。分離回路230は、同じドメインに属するハードウェアリソースのみが互いと通信することを許可するようにプログラムされ得る。特定の実施形態では、分離回路230は、異なるドメインへのSoC200のハードウェアリソースの論理的区分を実装する。たとえば、分離回路230は、アクセスされるアドレスおよび/または別のハードウェアリソースにアクセスすることを試みる回路の識別子に基づいて、アクセスを許可するかまたはアクセスを拒否し得る。
例示的なおよび非限定的な例として、I/Oデバイス220および/または222のうちの異なるI/Oデバイスが、プロセッサのうちの特定の1つに割り当てられ得る。たとえば、APU206と、メモリコントローラ216(たとえば、RAMの特定の領域)と、I/Oデバイス220とを含む第1のドメインが作成され得る。RPU208と、I/Oデバイス222と、メモリコントローラ216(たとえば、RAMの第2のおよび異なる領域)と、OCM218とを含む第2のドメインが作成され得る。この例では、分離回路230は、ドメイン分離を実施し、たとえば、RPU208がI/Oデバイス220にアクセスするのを防ぎ、APU206がI/Oデバイス222にアクセスするのを防ぐ。分離回路230は、さらに、APU206がRAMの第2の領域にアクセスするのを防ぎ、RPU208がRAMの第1の領域にアクセスするのを防ぐ。
1つまたは複数の実施形態では、分離回路230のうちの特定の分離回路は、メモリ保護ユニットとして実装され得る。たとえば、分離回路230−6および230−9は、メモリ保護ユニットとして実装され得る。1つまたは複数の他の実施形態では、分離回路230のうちの特定の分離回路は、プロセッサ保護ユニットとして実装され得る。たとえば、分離回路230−1、230−2、230−4、230−5、および230−7は、プロセッサ保護ユニットとして実装され得る。
図3は、分離回路230の一例である。図3の例はメモリ保護ユニットであり得る。例示のために、図3は、AXIインターフェース専門用語を利用する。図3の分離回路230は、様々な異なるバスおよび/または相互接続プロトコルのいずれかと協働するように実装され得ることを諒解されたい。
図3の例では、アドレス範囲検査回路305が、受信されたトランザクションのアドレスが、開始アドレスおよび終了アドレスによって定義された領域内にあるかどうかを検査し、これは、分離回路230の設定レジスタに(たとえば、設定データを設定レジスタに書き込むことによって)記憶され得る。さらに、マスタID(識別子)回路310が、分離回路230の設定レジスタに記憶された設定データに基づいて、着信トランザクションのマスタIDが許容されるかどうかを検査することが可能である。
分離回路230は、アドレス範囲検査回路305およびマスタID回路310によって実施された検査を満たさないトランザクションを許容しないことがある。分離回路230はまた、トランザクションを阻害する(poison)(たとえば、「阻害」信号を出す)ことがある。分離回路230の設定に応じて、実施された検査をトランザクションが満たさないおよび/または阻害信号がアサートされる場合、割込みが生成され得る。
図4は、分離回路230の別の例である。図4の例はプロセッサ保護ユニットであり得る。例示のために、図4は、AXIインターフェース専門用語を利用する。図4の分離回路230は、様々な異なるバスおよび/または相互接続プロトコルのいずれかと協働するように実装され得ることを諒解されたい。
図4の例では、周辺機器にアクセスすることを可能にされるマスタを定義するために、分離回路230内に記憶されたマスタIDリストが使用される。分離回路230内に記憶されたアパーチャ(aperture)許可リストが、マスタがアクセスすることができる周辺機器アドレスに関する許可を指定する。マスタID検査回路410が、受信されたトランザクションのAXIマスタIDがアパーチャ許可リスト中にあることを検査する。許可はマスタIDに基づく。AXIスレーブエントリが、許可フィールド中の対応するビットから来る。アドレス範囲回路405が、設定データに従って、マスタによってアクセスされるアドレス範囲が許容されることを検査することが可能である。要件が満たされない場合、トランザクションは阻害され、割込みが随意に生成される。
図3と図4の両方を参照すると、エラー応答信号、たとえば、阻害信号は、トランザクションが違法である(たとえば、トランザクションが、分離回路230によって実施された一方または両方の検査に不合格になった)と決定したことに応答して生成され得る。エラー信号は、データアボートまたは割込み信号が生成されることを引き起こす。
図5は、異種SoC内に複数のドメインを作成し、分離することの一例を示す。図5の例では、ハードウェア設計アプリケーション505が、ハードウェア記述ファイル510を生成する。ハードウェア記述ファイル510は、使用のために利用可能である、SoCの異なるハードウェアリソースを指定する。ドメイン作成アプリケーション515が、ハードウェア記述ファイル510を受信する。ドメイン、たとえば、どのプロセッサが各それぞれのドメイン中に含まれるか、各プロセッサによって実行されるべきオペレーティングシステム、各ドメイン中の各プロセッサにとって利用可能であるべき周辺機器および/またはメモリを指定するユーザ入力520に基づいて、ドメイン作成アプリケーション515は、ドメインを指定するプラットフォーム525を出力する。
1つまたは複数の実施形態では、プラットフォーム525は、1つまたは複数のソフトウェアアーティファクトを含む。ソフトウェアアーティファクトは、SoCの異なるドメインについて埋込みアプリケーションを構築する際に使用され得る設定データ、第1ステージブートローダ、および/または他のソフトウェアアーティファクトを含み得る。たとえば、ソフトウェアアーティファクトは、異なるドメインの各々中に含まれる周辺機器のためのドライバを含み得る。
図6は、異種SoC600のための複数のドメインの一例を示す。図6の例では、ドメイン602、604、606、および660が示されている。一態様では、(オペレーティングシステムを除いて)ドメイン602、604、606、および660内に示されているリソースの各々は、ハードウェア記述ファイル内で利用可能であるものとして指定される。例示のために、ドメイン602、604、および606の各々は、オペレーティングシステムを利用する。ドメイン660は、オペレーティングシステムを使用せず、1つまたは複数のベアメタル(bare−metal)および/またはスタンドアロンアプリケーションをサポートしないことがある。
示されているように、ドメイン602は、プロセッサ608と、汎用機器モデル(GEM:General Equipment Model)インターフェース614と、シリアル周辺インターフェース(SPI)616と、ウォッチドッグタイマー(WDT)618と、クワッドシリアル周辺インターフェース(QSPI:Quad Serial Peripheral Interface)620と、プログラマブル論理知的財産(PL IP:programmable logic Intellectual Property)622とを含む。プログラマブル論理IPは、プログラマブル回路中に実装されるIPまたはコアを指す。ドメイン604は、プロセッサ610と、タイミングトリガおよび制御(TTC:timing trigger and control)インターフェース630と、WDT632と、ユニバーサル非同期受信機送信機(UART)634と、PL IP636とを含む。ドメイン606は、プロセッサ612と、GEMインターフェース638と、セキュアデジタル入出力(SDIO:Secure Digital Input Output)640と、ユニバーサルシリアルバス(USB)642と、SPI644と、インター集積回路(I2C)インターフェース646と、I2Cインターフェース648と、UART650と、QSPI652と、WDT654と、周辺構成要素相互接続エクスプレス(PCIe)656とを含む。ドメイン660は、(たとえば、オペレーティングシステムをもたない)プロセッサ662と、TTCインターフェース664と、WDT668と、UART670と、PL IP672とを含む。
図7は、SoC内に複数のドメインを作成し、分離する例示的な方法700を示す。方法700は、ドメイン作成アプリケーションを実行する、図1に関して本明細書で説明されたようなコンピューティングシステムによって実施され得る。
ブロック705において、システムは、ハードウェア記述ファイルをロード、または受信する。ハードウェア記述ファイルは、SoC中で利用可能になるハードウェアリソースをハードウェア設計者がインスタンス化するハードウェア設計アプリケーションから取得され得る。ハードウェア記述ファイルは、インスタンス化され、設計のために利用可能であるハードウェアリソースを指定する。ハードウェア記述ファイルは、リストされたハードウェアリソースに関係する追加の詳細をさらに含み得る。
ブロック710において、システムはドメインを作成する。たとえば、ユーザが、ドメインの作成を要求するユーザ入力を提供し得る。1つまたは複数の実施形態では、システムはグラフィカルユーザインターフェース(GUI)を提供し、GUIを通して、ユーザはドメインの作成を要求し得る。1つまたは複数の他の実施形態では、システムはコマンドラインインターフェースを提供し、コマンドラインインターフェースを通して、ユーザはドメインを作成するためのコマンドを提供し得る。ドメインを作成するための要求に応答して、システムは、SoCのためのドメインを作成する。
ブロック715において、システムは、ドメインのためのプロセッサを決定する。たとえば、ドメインを作成するためのコマンドの後に、システムは、ドメインに割り当てるべき、ハードウェア記述ファイルにリストされているプロセッサを指定する、さらなるユーザ入力を受信し得る。特定の実施形態では、プロセッサは、ドメインを作成するための、コマンドの一部として、たとえば、コマンドのパラメータまたは引数として、指定され得る。プロセッサを指定するユーザ入力を受信したことに応答して、システムは、ドメインを作成し、プロセッサをドメインに割り当てる。たとえば、システムは、プロセッサをドメインに関連付けるデータ構造をメモリ中に作成する。
ブロック720において、システムは、ドメインのためのオペレーティングシステムを決定する。たとえば、システムは、ドメインのために使用されるべき特定のオペレーティングシステムを指定する、さらなるユーザ入力を受信し得る。1つまたは複数の実施形態では、ドメインを作成するためのコマンドは、コマンドのさらなるパラメータまたは引数としてオペレーティングシステムを含むかまたは指定し得る。ドメイン中で使用するために選択され得る異なるタイプのオペレーティングシステムの例は、限定はしないが、Linux、フリーリアルタイムオペレーティングシステム(RTOS)などのRTOS、あるいは、プロセッサまたは埋込みプロセッサによる実行のために好適である任意の他のオペレーティングシステムを含む。他の実施形態では、ドメインが、オペレーティングシステムを含まず、1つまたは複数のベアメタルおよび/またはスタンドアロンアプリケーションをサポートしないことがある。
従来の埋込みシステム開発技法では、ソフトウェア開発者は、ハードウェア設計に基づいて、プロセッサに関連付けられた特定のオペレーティングシステムを利用することに制限された。本開示内で説明される本発明の構成によれば、ソフトウェア開発者は、異なるオペレーティングシステムを自由に選定することができる。ソフトウェア開発者は、異なるオペレーティングシステム/プロセッサペアリングおよび/または異なるオペレーティングシステム設定(たとえば、以下のブロック725によれば、異なるアドレス空間マッピング、異なるドライバなど)を試み得る。
ブロック725において、システムは、1つまたは複数のリソースを、ブロック710および715において作成されたドメインに追加することが可能である。1つまたは複数の実施形態では、システムは、(1つまたは複数の)リソースをドメインに割り当てることによって、(1つまたは複数の)リソースをドメインに追加する。リソースは、ハードウェア記述ファイルから選択されたハードウェアリソースであり得る。ハードウェアリソースの例は、限定はしないが、メモリおよびデバイス(たとえば、メモリコントローラ、I/Oデバイス、および/または他の周辺機器)を含むことができる。リソースは、選択されたオペレーティングシステムのためのソフトウェアリソースをも含み得る。ソフトウェアリソースの例は、限定はしないが、ドライバ、物理アドレス空間マッピング、および/またはファームウェアを含むことができる。
1つまたは複数の実施形態では、システムは、ドメインに追加されたハードウェアリソースのプロパティをプルーニングすることが可能である。たとえば、システムは、そのようなハードウェアリソースの設定可能なレジスタを変えること、たとえば、レジスタに書き込まれた設定データを変えることによって、ハードウェアリソースのプロパティを修正することが可能である。例示的なおよび非限定的な例として、システムは、UARTのクロック周波数を変更することが可能である。
ブロック725内で、追加のプロパティもドメインに追加され、および/または、ドメインに追加されたリソースにアタッチされ得る。たとえば、サービス品質(QoS)セッティングが、ドメインに追加された特定のハードウェアリソースについて指定され得る。分離セッティングも、ドメインについて、および/またはドメインに追加された特定のハードウェアリソースについて指定され得る。クロック周波数が、ドメインのハードウェアリソースについて指定され得る。システムは、そのようなプロパティを受信したことに応答して、プロパティを、ドメインおよび/またはドメインの関連するハードウェアリソースに割り当てる。
ブロック730において、システムは、ドメインを実装する設定データを生成することが可能である。設定データは、SoC内のドメインを分離することが可能である。設定データは、たとえば、ドメインに割り当てられた特定のハードウェアリソースへのアクセスを調節するために使用される特定の分離回路について、設定レジスタにロードされるデータであり得る。たとえば、ドメインがAPU206を含む場合、ブロック730において生成される設定データは、分離回路230−5および/または230−4についてのものであり得る。述べられたように、SoCの分離回路は、ドメインを作成し、設定されるとドメイン間の分離を実施する。
ブロック735において、システムは、ドメインに追加されるべきより多くのリソースがあるかどうかを決定する。たとえば、ユーザは、ドメインが完了したことを示す入力を提供し得る。別の例では、ユーザは、追加のリソースがドメインに追加されるべきであることを示す入力を提供し得る。より多くのリソースがドメインに追加されるべきであると決定したことに応答して、方法700は、ブロック725にループバックして、より多くのリソースをドメインに追加する。さらなるリソースがドメインに追加されるべきでないと決定したことに応答して、方法700は、ブロック740に進む。
ブロック740において、システムは、ドメインのオペレーティングシステムを設定する。たとえば、システムは、ドメインのためのRAM(たとえば、メモリコントローラを介してアクセス可能なオフチップRAM)をパーティショニングすることが可能である。一例として、設定されている現在のドメインについて、オペレーティングシステムはLinuxであり得る。現在のドメインのために使用されるLinuxのバージョンは、RAMの最高4GBにアクセスすることが可能であり得る。ユーザは、ハードウェア記述ファイルにおいて指定される利用可能なRAMのうち、ブロック710および715において作成されたドメインは、RAMの1GBを割り振られるべきであることを指定する入力を提供し得る。異なるドメインを設定するときの方法700のさらなる反復中に、RAMのさらなる部分が、異なるプロセッサおよび/またはオペレーティングシステムを有するそのような他のドメインに割り振られ得る。
ブロック740の一部として、システムは、ドメインに追加されたデバイスを決定し、各特定のデバイスのためのドライバを含めることがさらに可能である。たとえば、ドメインが、UART(たとえば、UART0)と、別のUART(たとえば、UART1)と、USBインターフェースとを含む場合、システムは、ドメイン中に含めるために選択された各特定のタイプ(およびインスタンス)のデバイスのための、およびドメインについて選択された特定のオペレーティングシステムのための、ドライバを選択することが可能である。Linuxがドメインのためのオペレーティングシステムである、前の例を参照すると、システムは、ドメインに追加された各デバイスについて、ドライバのLinuxバージョンを選定する。
ブロック740の一部として、システムは、ドメインのオペレーティングシステムのためのイメージファイルをさらに生成し得る。前の例を続けると、システムは、RAMの1GBのみにアクセスするように設定され、ドメイン中に含まれるデバイスの各々のためのLinuxドライバを含む、Linuxイメージファイルを生成する。
ブロック745において、システムは、SoCのための別のドメインを追加すべきかどうかを決定する。たとえば、ユーザは、別のドメインの作成を要求するユーザ入力を提供し得る。ユーザ入力は、GUIを通してなのか、ウィザードを通してなのか、および/またはコマンドラインを通してなのかにかかわらず、本明細書で説明される機構のいずれかを介して提供され得る。ユーザは、さらなるドメインが作成されるべきでないことを示す入力をも提供し得る。別のドメインが追加されるべきである場合、方法700は、ブロック710にループバックし、さらなるドメインが作成され、処理が続く。さらなるドメインが作成されるべきでない場合、方法700はブロック750に進む。
ブロック750において、システムは、プラットフォームを生成することが可能である。プラットフォームは、SoCのために作成されたドメインをサポートする1つまたは複数のソフトウェアアーティファクトを含み得る。1つまたは複数の実施形態では、プラットフォームは、第1ステージブートローダタイプのソフトウェアアーティファクトを含む。第1ステージブートローダは、ブート時間においてSoCにロードされ得るプログラムである。たとえば、第1ステージブートローダは、SoCにロードされ得るブートイメージ中に含まれ得る。システムは、第1ステージブートローダを生成し、作成されたドメインの各々についてブロック730において生成された設定データを含めることが可能である。
SoCのブートシーケンスは、第1ステージブートローダおよび/またはブートイメージをSoCにロードしたことに応答して第1ステージブートローダを稼働することが可能である。第1ステージブートローダは、SoC内での実行に応答して、様々な異なる機能を実施することが可能である。一態様では、第1ステージブートローダは、SoCのプロセッサシステム内のハードウェアリソースおよび設定レジスタを初期化することが可能である。
別の態様では、第1ステージブートローダは、SoCのアーキテクチャを設定することが可能である。たとえば、第1ステージブートローダは、プロセッサシステムについての設定データをSoCの適切な設定レジスタに書き込むことによってSoCのプロセッサシステムを設定することが可能である。設定データは、ドメインの各々を同時に実装するためのプロセッサシステム中に含まれる様々なハードウェアリソースについての動作セッティングを指定する。さらに、設定データは、プロセッサシステム中の分離回路についての設定データを含む。したがって、第1ステージブートローダは、異種SoCにロードされたとき、ドメインを実装し、定義されたドメインを分離する。
別の態様では、第1ステージブートローダは、ブートイメージ中に含まれ得る設定ビットストリームをSoCの設定メモリにロードすることが可能である。説明されたように設定ビットストリームをロードすることは、設定ビットストリームによって定義されるSoCのプログラマブル回路内の物理回路を実装する。
1つまたは複数の実施形態では、システムによって生成されたソフトウェアアーティファクトが、プロセッサ初期化ファイルを含む。特定の実施形態では、プロセッサ初期化ファイルは、「C設定ファイル」であり得る。プロセッサ初期化ファイルは、プロセッサシステムのためのシステム初期化コードを含み得る。プロセッサ初期化ファイルは、たとえば、mask_write、mask_poll、およびmask_readなど、レジスタシーケンスを含み得る。プロセッサ初期化ファイルは、プロセッサシステム設定を指定するユーザ入力に基づいて生成され得る。プロセッサ初期化ファイルは、第1ステージブートローダアプリケーション中に含まれる。ユーザが、ドメインを作成し、ドメインに、メモリ、UARTなど、ハードウェアリソースを割り当てるとき、分離回路は、再設定される必要がある。分離回路のための設定レジスタシーケンスは、変化する。これらの変化、たとえば、分離回路のための設定レジスタシーケンスは、プロセッサ初期化ファイルの一部であり得る。
1つまたは複数の実施形態では、プラットフォームは、1つまたは複数のオペレーティングシステムタイプソフトウェアアーティファクトを含む。たとえば、システムは、プラットフォームのために作成されたドメインの各々のための1つまたは複数のオペレーティングシステムアーティファクトを生成することが可能である。オペレーティングシステムアーティファクトを作成する際に、たとえば、ドメインに追加されたリソースについての、ブロック725内で指定されたセッティングおよび/またはプロパティが、受け付けられる。
ブロック750の一部として生成され得るオペレーティングシステムアーティファクトの一例は、デバイスツリーである。システムは、作成され、デバイスツリーを利用する、ドメインの各々のオペレーティングシステムのためのデバイスツリーを生成することが可能である。生成されるデバイスツリーは、ブロック725において指定されたセッティング、アドレス範囲、および/またはプロパティを受け付ける。所与のドメインのためのデバイスツリーは、そのドメインに割り振られたまたは割り当てられたハードウェアリソースのみを含む。したがって、オペレーティングシステムは、ドメイン中で利用可能なデバイスに対応する、デバイスツリーにリストされているデバイスのみを「見る」。
1つまたは複数の実施形態では、プラットフォームは、SoCの設定およびその中に含まれるドメインに関する情報を指定する1つまたは複数のデータ構造および/またはファイルなど、ソフトウェアアーティファクトを含む。プラットフォーム、または特定のソフトウェアアーティファクトは、たとえば、アプリケーション開発環境(たとえば、コンピューティングシステム中で実行するアプリケーション)にロードされ得る。アプリケーション開発環境は、SoCのドメイン上で稼働することを意図されるアプリケーションおよび/またはプログラムを開発するように設定され得る。その場合、ソフトウェア開発者が、ドメインのためのプログラムを作成するためにアプリケーション開発環境を使用するとき、設定に関する情報を指定するソフトウェアアーティファクトは、アプリケーション開発のためにインポートされ、使用され得る。
アプリケーション開発環境にインポートされ得るソフトウェアアーティファクトの一例は、リンカスクリプトである。システムは、ドメインの各々のためのリンカスクリプトを生成し、リンカスクリプトとソフトウェアアーティファクトとを出力することが可能である。概して、各リンカスクリプトは、SoCの特定のドメインのための実行可能アプリケーションを生成するためのリンカの動作を制御する。たとえば、特定のドメインのためのリンカスクリプトは、入力ファイルを出力ファイルにマッピングし、ドメインの確立されたプロパティ、たとえば、ドメインのアドレス指定可能なメモリなどが与えられれば、出力ファイルのメモリレイアウトを制御することが可能である。リンカスクリプトを使用する際に、たとえば、アセンブルされているアプリケーションは、開発されているアプリケーションを実行するドメインにとって利用可能でないメモリの部分を見ることができない。アプリケーションは、ドメインに割り当てられたメモリ(たとえば、RAM)の部分のみを見るか、またはその部分のみにアクセスすることが可能である。
たとえば、ソフトウェア開発者がアプリケーション開発環境を開き、プラットフォームをロードするとき、ソフトウェア開発者は、アプリケーションが開発されるべきである、プラットフォームの特定のドメインを指定し得る。アプリケーション開発環境は、指定されたドメインのためのソフトウェアアーティファクトを、ソフトウェア開発者にとって利用可能にすることが可能である。例示的なおよび非限定的な例として、各異なるオペレーティングシステムは、ドメインのオペレーティングシステムと、ドメイン中に含まれるデバイスとに基づいて、特定のドライバ呼出しを利用する。たとえば、FreeRTOSを使用するドメインのためのアプリケーションを開発する際に、ソフトウェア開発環境は、特定のデバイスを対象とする特定のステートメント(たとえば、「印刷」ステートメント)を、そのデバイスのためのドライバ呼出しに変換し得る。たとえば、ドメインのためのアプリケーションが、UART0を介してデータを書き込むことを試み、UART0がドメインの一部である場合、アプリケーション開発環境は、UART0にアクセスするステートメント、たとえば、「印刷」ステートメントを、UART0のためのデバイスドライバ呼出しと置き換えることが可能である。アプリケーションが、ドメイン中に含まれないデバイスにアクセスすることを試みるステートメントを含む場合、アプリケーションの構築は失敗する。たとえば、アプリケーションが、UART0を対象とする印刷ステートメントを含むが、UART0がドメイン中に含まれない場合、アプリケーションの構築動作は失敗する。
他の場合には、ソフトウェア開発者が、アプリケーションが開発されているドメイン中にないデバイスのアドレスを知り、アプリケーションがSoC中で実行されるとき、そのアドレスにアクセスするためにプログラムコードを書き込む(たとえば、そのようなアドレスを手動で指定する)場合、その中に含まれる(1つまたは複数の)分離回路は、アプリケーションのドメインの一部でないハードウェアリソースを対象とするそのようなトランザクションを拒否する。
本発明の構成は、ソフトウェア開発者が、所与の異種SoCのためのドメインを再定義するためにハードウェア開発ツールを利用する必要なしに、プロセッサ、デバイス、および/またはオペレーティングシステムの異なる組合せを試みることを可能にする。本明細書で説明されるツールを使用して、ソフトウェア開発者は、ドメインを定義し、また、ハードウェア設計アプリケーションから生成された同じハードウェア記述ファイルを使用しながらドメインを再定義することが可能である。(たとえば、ハードウェア設計アプリケーションを使用する)ハードウェアレベルにおいてではなくソフトウェアレベルにおいてドメインを指定する能力は、ソフトウェア開発者が、通常ならば生じるよりも著しく少ない時間においてドメインを修正および/または再定義することを可能にする。ソフトウェア開発者が(1つまたは複数の)ドメインへの修正を行うたびに、ドメイン作成ツールは、プラットフォームの更新されたバージョンを出力することが可能である。
アプリケーション開発者は、たとえば、GUIを通しておよび/またはコマンドラインインターフェースを介してプラットフォームを修正し得る。アプリケーション開発者は、たとえば、ドメインの間のメモリパーティショニングを調整し、ドメインのオペレーティングシステムを変更し、および/またはドメインの間でデバイスを再割り当てし得る。修正を完了すると、および/またはプラットフォームを生成するためのコマンドに応答して、ドメイン作成アプリケーションは、修正を実装する更新されたプラットフォームを生成する。更新されたプラットフォームは、ハードウェア設計アプリケーションにおいて再生成された、修正されたハードウェア記述ファイルとは対照的に、元のハードウェア記述ファイルに基づいて生成される。
得られたプラットフォーム、たとえば、第1ステージブートローダは、ブートイメージ内に含まれ得る。ブートイメージは、1つまたは複数の設定ビットストリーム、および/またはドメイン中での実行のための他の実行可能プログラムコードをも含み得る。議論されるように、実行可能プログラムコード(たとえば、ドメインのためのオペレーティングシステムおよび/またはアプリケーション)は、本明細書で説明される本発明の構成を使用して、および/または本明細書で説明される本発明の構成を使用して生成されるソフトウェアアーティファクトを使用して、作成され得る。
ブートイメージは、ターゲットSoCにロードされ、ターゲットSoCを設定するために使用され得る。ブートイメージをロードしたことに応答して、第1ステージブートローダは、説明されるように稼働され得る。さらに、プログラマブル回路は、ブートイメージから設定ビットストリームをロードすることによって設定され得る。ブートイメージ中に含まれ得る実行可能プログラムコード(たとえば、オペレーティングシステムおよび/またはアプリケーション)は、それぞれのドメインのための適切なメモリ領域またはパーティションにロードされ、実行され得る。
図8は、ICのための例示的なアーキテクチャ800を示す。一態様では、アーキテクチャ800は、プログラマブルIC内に実装され得る。たとえば、アーキテクチャ800は、フィールドプログラマブルゲートアレイ(FPGA)を実装するために使用され得る。アーキテクチャ800はまた、ICのSoCタイプ(たとえば、異種SoC)を表し得る。
図示のように、アーキテクチャ800は、いくつかの異なるタイプのプログラマブル回路、たとえば、論理、ブロックを含む。たとえば、アーキテクチャ800は、マルチギガビットトランシーバ(MGT:multi−gigabit transceiver)801、設定可能論理ブロック(CLB)802、ランダムアクセスメモリブロック(BRAM)803、入出力ブロック(IOB)804、設定およびクロッキング論理(CONFIG/CLOCKS)805、デジタル信号処理ブロック(DSP)806、特殊なI/Oブロック807(たとえば、設定ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理808を含む、多数の異なるプログラマブルタイルを含み得る。
いくつかのICでは、各プログラマブルタイルは、プログラマブル相互接続要素(INT)811を含み、INT811は、各隣接するタイル中の対応するINT811との間の規格化された接続を有する。したがって、INT811は、まとめると、示されているICのためのプログラマブル相互接続構造を実装する。各INT811は、図8の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素との間の接続をも含む。
たとえば、CLB802は、ユーザ論理を実装するようにプログラムされ得る設定可能論理要素(CLE)812と、単一のINT811とを含み得る。BRAM803は、1つまたは複数のINT811に加えてBRAM論理要素(BRL)813を含み得る。一般に、タイル中に含まれるINT811の数は、タイルの高さに依存する。描かれているように、BRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル806は、適切な数のINT811に加えてDSP論理要素(DSPL)814を含み得る。IOB804は、たとえば、INT811の1つのインスタンスに加えてI/O論理要素(IOL)815の2つのインスタンスを含み得る。IOL815に接続された実際のI/Oパッドは、IOL815のエリアに制限されないことがある。
図8に描かれている例では、ダイの中心の近くの、たとえば、領域805、807、および808から形成された、列状エリアが、設定、クロック、および他の制御論理のために使用され得る。この列から延びる水平エリア809が、プログラマブルICの幅にわたってクロックおよび設定信号を分散させるために使用され得る。
図8に示されているアーキテクチャを利用するいくつかのICは、ICの大部分を作り上げる規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用回路であり得る。たとえば、PROC810およびPROC816として示されている2つまたはそれ以上のプロセッサブロックが、CLBおよびBRAMのいくつかの列にまたがる。
一態様では、PROC810および/またはPROC816は、ICのプログラマブル回路を実装するダイの一部として作製される専用回路として、たとえば、ハードワイヤードプロセッサとして実装され得る。PROC810および/またはPROC816は、個々のプロセッサ、たとえば、プログラムコードを実行することが可能な単一のコアから、1つまたは複数のコア、モジュール、コプロセッサ、インターフェースなどを有するプロセッサシステム全体まで、複雑さに幅がある様々な異なるプロセッサタイプおよび/またはシステムのいずれかを表し得る。
別の態様では、PROC810および/またはPROC816は、アーキテクチャ800から省略され、説明されるプログラマブルブロックの他の種類のうちの1つまたは複数と置き換えられ得る。さらに、そのようなブロックは、PROC810および/またはPROC816の場合のようにプログラムコードを実行することができるプロセッサを形成するためにプログラマブル回路の様々なブロックが使用され得るという点で、「(1つまたは複数の)ソフトプロセッサ」を形成するために利用され得る。
「プログラマブル回路」という句は、IC内のプログラマブル回路要素、たとえば、本明細書で説明される様々なプログラマブルまたは設定可能回路ブロックまたはタイル、ならびに、ICにロードされた設定データに従って様々な回路ブロック、タイル、および/または要素を選択的に連結する相互接続回路を指す。たとえば、CLB802およびBRAM803など、PROC810の外部にある、図8に示されている回路ブロックは、ICのプログラマブル回路と見なされる。
本明細書で議論されるように、PROC810は、第1のオペレーティングシステムを実行することが可能であり、PROC816は、第2のおよび異なるオペレーティングシステムを実行することが可能である。さらに、PROC810およびPROC816の各々にとって利用可能なデバイスは、異なり、ブート時間においてアーキテクチャ800内で実行される第1ステージブートローダによって作成されるドメインによって定義され得る。
概して、プログラマブル回路の機能性は、設定データがICにロードされるまで確立されない。FPGAなど、ICのプログラマブル回路をプログラムするために、設定ビットのセットが使用され得る。(1つまたは複数の)設定ビットは、一般に、「設定ビットストリーム」と呼ばれる。概して、プログラマブル回路は、設定ビットストリームをICに最初にロードしなければ、動作可能でないか、または機能可能でない。設定ビットストリームは、プログラマブル回路内に特定の回路設計を効果的に実装する。回路設計は、たとえば、プログラマブル回路ブロックの機能的態様と、様々なプログラマブル回路ブロックの間の物理的接続性とを指定する。
「ハードワイヤード」または「ハード化」される、すなわち、プログラマブルでない回路が、ICの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、設定ビットストリームのローディングを通してICの製造後に実装されない。ハードワイヤード回路は、概して、たとえば、設定ビットストリームを、IC、たとえば、PROC810および/またはPROC816に最初にロードすることなしに機能可能である、専用回路ブロックおよび相互接続を有すると見なされる。
いくつかの事例では、ハードワイヤード回路は、IC内の1つまたは複数のメモリ要素に記憶されたレジスタセッティングまたは値に従ってセットまたは選択され得る1つまたは複数の動作モードを有し得る。動作モードは、たとえば、ICへの設定データのローディングを通してセットされ得る。この能力にもかかわらず、ハードワイヤード回路が、ICの一部として製造されたとき、動作可能であり、特定の機能を有するので、ハードワイヤード回路はプログラマブル回路と見なされない。
図8は、プログラマブル回路、たとえば、プログラマブルファブリックを含むICを実装するために使用され得る例示的なアーキテクチャを示すことを意図される。たとえば、1つの列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図8の上部に含まれる相互接続/論理実装形態は、例示にすぎない。実際のICでは、たとえば、CLBの2つ以上の隣接する列は、一般に、ユーザ回路設計の効率的な実装を容易にするために、CLBが現れるところならどこでも含まれる。しかしながら、隣接するCLB列の数は、ICの全体的サイズとともに変動し得る。さらに、IC内のPROC810などのブロックのサイズおよび/または配置は、例示のためのものにすぎず、限定として意図されていない。
説明のために、特定の名称が、本明細書で開示される様々な発明概念の完全な理解を提供するために記載される。しかしながら、本明細書で使用される専門用語は、本発明の構成の特定の態様を説明するためのものにすぎず、限定するものではない。
本明細書で定義される単数形「a」、「an」および「the」は、文脈が別段に明確に示さない限り、複数形をも含むものとする。
本明細書で定義される「少なくとも1つ」、「1つまたは複数」、および「および/または」という用語は、別段に明記されていない限り、運用において連言的と選言的の両方である、オープンエンド表現である。たとえば、「A、B、およびCのうちの少なくとも1つ」、「A、B、またはCのうちの少なくとも1つ」、「A、B、およびCのうちの1つまたは複数」、「A、B、またはCのうちの1つまたは複数」、および「A、B、および/またはC」という表現の各々は、Aのみ、Bのみ、Cのみ、AとBを一緒に、AとCを一緒に、BとCを一緒に、またはAとBとCを一緒に、を意味する。
本明細書で定義される「自動的に」という用語は、ユーザ介入なしに、を意味する。本明細書で定義される「ユーザ」という用語は、人間を意味する。
本明細書で定義される「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスが使用するための、あるいはそれとともに使用するためのプログラムコードを含んでいるかまたは記憶する記憶媒体を意味する。本明細書で定義される「コンピュータ可読記憶媒体」は、それ自体は、一時的な伝搬信号でない。コンピュータ可読記憶媒体は、限定はしないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の好適な組合せであり得る。本明細書で説明される、様々な形態のメモリが、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読取り専用メモリ(ROM)、消去可能プログラマブル読取り専用メモリ(EPROMまたはフラッシュメモリ)、電子的消去可能プログラマブル読取り専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読取り専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスクなどを含み得る。
本明細書で定義される「する場合(if)」という用語は、文脈に応じて、「するとき(when)」または「すると(upon)」または「に応答して(in response to)」または「に反応して(responsive to)」を意味する。したがって、「それが決定された場合」または「[述べられた条件またはイベント]が検出された場合」という句は、文脈に応じて、「決定すると」または「決定したことに応答して」あるいは「[述べられた条件またはイベント]を検出すると」または「[述べられた条件またはイベント]を検出したことに応答して」または「[述べられた条件またはイベント]を検出したことに反応して」を意味すると解釈され得る。
本明細書で定義される「に反応して」という用語および上記で説明されたような同様の言い回し、たとえば、「する場合」、「するとき」、または「すると」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は、自動的に実施される。したがって、第2のアクションが第1のアクション「に反応して」実施される場合、第1のアクションの発生と第2のアクションの発生との間に因果関係がある。「に反応して」という用語は、因果関係を示す。
本明細書で定義される「一実施形態(one embodiment)」、「一実施形態(an embodiment)」、「1つまたは複数の実施形態」、「特定の実施形態」という用語、または同様の言い回しは、実施形態に関して説明される特定の特徴、構造、または特性が、本開示内で説明される少なくとも1つの実施形態に含まれることを意味する。したがって、本開示全体にわたる、「一実施形態では(in one embodiment)」、「一実施形態では(in an embodiment)」、「1つまたは複数の実施形態では」、「特定の実施形態では」という句、および同様の言い回しの出現は、必ずしもそうとは限らないが、すべて、同じ実施形態を指し得る。「実施形態」および「構成」という用語は、本開示内では互換的に使用される。
本明細書で定義される「プロセッサ」という用語は、少なくとも1つのハードウェア回路を意味する。ハードウェア回路は、プログラムコード中に含まれている命令を行うように設定され得る。ハードウェア回路は集積回路であり得る。プロセッサの例は、限定はしないが、中央処理ユニット(CPU)、アレイプロセッサ、ベクトルプロセッサ、デジタル信号プロセッサ(DSP)、プログラマブル論理アレイ(PLA)、ASIC、およびコントローラを含む。
本明細書で定義される「出力」という用語は、物理メモリ要素、たとえば、デバイスに記憶すること、ディスプレイまたは他の周辺出力デバイスに書き込むこと、別のシステムに送ることまたは送信すること、エクスポートすることなどを意味する。
本明細書で定義される「リアルタイム」という用語は、ユーザまたはシステムが、特定のプロセスまたは決定が行われるのに十分に即時であると感じる、あるいは、プロセッサが、何らかの外部プロセスについていくことを可能にする、処理応答性のレベルを意味する。
本明細書で定義される「実質的に」という用語は、具陳された特性、パラメータ、または値が正確に達成される必要がないこと、ただし、たとえば、当業者に知られている許容差、測定誤差、測定精度限界、および他のファクタを含む、偏差または変動が、特性が提供することを意図された効果を妨げない量で生じ得ることを意味する。
第1の、第2のなどの用語は、様々な要素を説明するために本明細書で使用され得る。これらの用語は、別段に述べられていない限り、または文脈が別段に明確に示さない限り、ある要素を別の要素と区別するために使用されるにすぎないので、これらの要素はこれらの用語によって限定されるべきでない。
コンピュータプログラム製品は、プロセッサに本明細書で説明される本発明の構成の態様を行わせるためのコンピュータ可読プログラム命令をその上に有する(1つまたは複数の)コンピュータ可読記憶媒体を含み得る。本開示内では、「プログラムコード」という用語は、「コンピュータ可読プログラム命令」という用語と互換的に使用される。本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、たとえば、インターネット、LAN、WANおよび/またはワイヤレスネットワークを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバー、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むエッジデバイスを含み得る。各コンピューティング/処理デバイス中のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するためにフォワーディングする。
本明細書で説明される本発明の構成のための動作を行うためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、あるいは、オブジェクト指向プログラミング言語および/または手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書き込まれたソースコードまたはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、状態セッティングデータを含み得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的にリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含む任意のタイプのネットワークを通してユーザのコンピュータに接続され得るか、あるいは接続は、(たとえば、インターネットサービスプロバイダを使用してインターネットを通して)外部コンピュータに対して行われ得る。いくつかの場合には、たとえば、プログラマブル論理回路、FPGA、またはPLAを含む電子回路が、本明細書で説明される本発明の構成の態様を実施するために、電子回路を個人化するためにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
本発明の構成のいくつかの態様が、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート例示図および/またはブロック図を参照しながら本明細書で説明された。フローチャート例示図および/またはブロック図の各ブロック、ならびにフローチャートの例示図および/またはブロック図中のブロックの組合せが、コンピュータ可読プログラム命令、たとえば、プログラムコードによって実装され得ることを理解されよう。
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を作り出すための他のプログラマブルデータ処理装置のプロセッサに提供され得、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された機能/行為を実装するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体に記憶され得、その結果、命令が記憶されたコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された動作の態様を実装する命令を含む製造品を備える。
コンピュータ可読プログラム命令はまた、コンピュータ実装プロセスを作り出すために、一連の動作をコンピュータ、他のプログラマブルデータ処理装置または他のデバイス上で実施させるように、コンピュータ、他のプログラマブル装置、または他のデバイスにロードされ得、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックにおいて指定された機能/行為を実装する。
図中のフローチャートおよびブロック図は、本発明の構成の様々な態様によるシステム、方法、およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この点について、フローチャートまたはブロック図中の各ブロックは、指定された動作を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表し得る。
いくつかの代替実装形態では、ブロック中で言及される動作は、図中で言及される順序から外れて行われ得る。たとえば、関与する機能性に応じて、連続して示されている2つのブロックが、実質的に同時に実行され得るか、またはブロックが、時々、逆の順序で実行され得る。他の例では、ブロックは、概して小さい数字から順に実施され得、さらに他の例では、1つまたは複数のブロックは、変動順で実施され得、結果は、記憶され、後続の、または直後にこない他のブロックにおいて利用される。また、ブロック図および/またはフローチャート例示図の各ブロック、ならびにブロック図および/またはフローチャート例示図中のブロックの組合せが、指定された機能または行為を実施するかあるいは専用ハードウェアとコンピュータ命令との組合せを行う専用ハードウェアベースシステムによって実装され得ることに留意されたい。
以下の特許請求の範囲において見られ得るすべての手段またはステップおよび機能要素の対応する構造、材料、行為、および等価物は、特に主張されるように、他の請求される要素と組み合わせて機能を実施するための任意の構造、材料、または行為を含むことを意図される。
1つまたは複数の実施形態では、方法が、異種SoC内で利用可能な複数のプロセッサおよび複数のハードウェアリソースを指定するハードウェア記述ファイルを受信することと、コンピュータハードウェアを使用して、異種SoCのための複数のドメインを作成することであって、各ドメインが、複数のプロセッサから選択されたプロセッサと、複数のハードウェアリソースから選択されたハードウェアリソースとを含む、異種SoCのための複数のドメインを作成することとを含み得る。本方法は、コンピュータハードウェアを使用して、オペレーティングシステムを各ドメインに割り当てることと、コンピュータハードウェアを使用して、異種SoC内に複数のドメインを実装するように設定されたプラットフォームを生成することとを含み得る。
一態様では、プラットフォームは、異種SoCの分離回路を設定するための設定データを含む。
別の態様では、プラットフォームは、異種SoCのプロセッサシステムを初期化するように設定された第1ステージブートローダを含む。
別の態様では、プラットフォームは、複数のドメインのうちの選択されたドメインについて、選択されたドメインに割り当てられたオペレーティングシステムのためのデバイスツリーを含み、デバイスツリーは、複数のハードウェアリソースから選択されたハードウェアリソースに基づいて生成される。
別の態様では、各ドメインは異種SoC内で論理的に実施される。
別の態様では、本方法は、ハードウェア記述ファイルを使用して異種SoCのための複数のドメインのうちの少なくとも1つのドメインを修正することを含み得る。
別の態様では、プラットフォームは、ソフトウェア開発環境による使用のための複数のドメインのための複数のアーティファクトを含む。したがって、本方法は、複数のドメインのうちの選択されたドメインのための実行可能プログラムコードを、選択されたドメインに対応する、複数のアーティファクトから選択されたアーティファクトを使用して生成することを含み得る。
別の態様では、各ドメインは、利用可能なランダムアクセスメモリの一部分を割り当てられる。
1つまたは複数の実施形態では、システムが、プログラムコードを記憶するように設定されたメモリと、メモリに連結されたプロセッサとを含む。プロセッサは、プログラムコードを実行したことに応答して、動作を始動するように設定される。実行可能な動作は、異種SoC内で利用可能な複数のプロセッサおよび複数のハードウェアリソースを指定するハードウェア記述ファイルを受信することと、異種SoCのための複数のドメインを作成することであって、各ドメインが、複数のプロセッサから選択されたプロセッサと、複数のハードウェアリソースから選択されたハードウェアリソースとを含む、異種SoCのための複数のドメインを作成することとを含み得る。動作は、オペレーティングシステムを各ドメインに割り当てることと、異種SoC内に複数のドメインを実装するように設定されたプラットフォームを生成することとを含み得る。
一態様では、プラットフォームは、異種SoCの分離回路を設定するための設定データを含む。
別の態様では、プラットフォームは、異種SoCのプロセッサシステムを初期化するように設定された第1ステージブートローダを含む。
別の態様では、プラットフォームは、複数のドメインのうちの選択されたドメインについて、選択されたドメインに割り当てられたオペレーティングシステムのためのデバイスツリーを含み、デバイスツリーは、複数のハードウェアリソースから選択されたハードウェアリソースに基づいて生成される。
別の態様では、各ドメインは異種SoC内で論理的に実施される。
別の態様では、プロセッサは、ハードウェア記述ファイルを使用して異種SoCのための複数のドメインのうちの少なくとも1つのドメインを修正することを含み得る実行可能な動作を始動するように設定される。
別の態様では、プラットフォームは、ソフトウェア開発環境による使用のための複数のドメインのための複数のアーティファクトを含む。したがって、プロセッサは、複数のドメインのうちの選択されたドメインのための実行可能プログラムコードを、選択されたドメインに対応する、複数のアーティファクトから選択されたアーティファクトを使用して生成することを含み得る実行可能な動作を始動するように設定される。
別の態様では、各ドメインは、利用可能なランダムアクセスメモリの一部分を割り当てられる。
1つまたは複数の実施形態では、コンピュータプログラム製品が、プログラムコードがその上に記憶されたコンピュータ可読記憶媒体を含む。プログラムコードは、動作を始動するためにコンピュータハードウェアによって実行可能である。動作は、異種SoC内で利用可能な複数のプロセッサおよび複数のハードウェアリソースを指定するハードウェア記述ファイルを受信することと、異種SoCのための複数のドメインを作成することであって、各ドメインが、複数のプロセッサから選択されたプロセッサと、複数のハードウェアリソースから選択されたハードウェアリソースとを含む、異種SoCのための複数のドメインを作成することとを含み得る。動作は、オペレーティングシステムを各ドメインに割り当てることと、異種SoC内に複数のドメインを実装するように設定されたプラットフォームを生成することとを含み得る。
一態様では、プラットフォームは、異種SoCの分離回路を設定するための設定データを含む。
別の態様では、プラットフォームは、異種SoCのプロセッサシステムを初期化するように設定された第1ステージブートローダを含む。
別の態様では、プラットフォームは、複数のドメインのうちの選択されたドメインについて、選択されたドメインに割り当てられたオペレーティングシステムのためのデバイスツリーを含み、デバイスツリーは、複数のハードウェアリソースから選択されたハードウェアリソースに基づいて生成される。
別の態様では、各ドメインは異種SoC内で論理的に実施される。
別の態様では、プログラムコードは、ハードウェア記述ファイルを使用して異種SoCのための複数のドメインのうちの少なくとも1つのドメインを修正することを含み得る動作を始動するために、コンピュータハードウェアによって実行可能である。
別の態様では、プラットフォームは、ソフトウェア開発環境による使用のための複数のドメインのための複数のアーティファクトを含む。したがって、プログラムコードは、複数のドメインのうちの選択されたドメインのための実行可能プログラムコードを、選択されたドメインに対応する、複数のアーティファクトから選択されたアーティファクトを使用して生成することを含み得る動作を始動するために、コンピュータハードウェアによって実行可能である。
別の態様では、各ドメインは、利用可能なランダムアクセスメモリの一部分を割り当てられる。
本明細書で提供される本発明の構成の説明は、例示のためであり、網羅的なものでも、開示される形式および例に限定されるものでもない。本明細書で使用される専門用語は、本発明の構成の原理、実際的適用例、または市場で見られる技術に対する技術的改善を説明するために、および/あるいは、他の当業者が本明細書で開示される本発明の構成を理解することを可能にするために選定された。説明される本発明の構成の範囲および趣旨から逸脱することなく、修正および変形が当業者に明らかになり得る。したがって、そのような特徴および実装形態の範囲を示すものとして、上記の開示に対してではなく、以下の特許請求の範囲に対して参照が行われるべきである。