開示された主題に従って、低電力コンピュータイメージングを提供するシステム及び方法が提供される。
開示された主題は、コンピュータデバイスを含む。当該コンピュータデバイスは、複数のベクトルプロセッサであって、該複数のベクトルプロセッサの一つが、第一値アレイについて作用する命令を実行するように構成された、複数のベクトルプロセッサを含むことができる。当該コンピュータデバイスは、第二値アレイについてフィルタリングオペレーションを行うように構成されたハードウェアアクセラレータを含むこともできる。当該コンピュータデバイスは、複数のメモリスライスと、第一インタフェース及び第二インタフェースを有する相互接続システムと、を含むメモリファブリックであって、該第一インタフェースは前記複数のベクトルプロセッサを該複数のメモリスライスに結合するように構成され、該第二インタフェースは前記ハードウェアアクセラレータを該複数のメモリスライスに結合するように構成された、メモリファブリックを含むこともできる。さらに、当該コンピュータデバイスは、前記メモリファブリックに、前記第一インタフェースを介して前記複数のベクトルプロセッサの一つに前記第一値アレイを提供させ、前記第二インタフェースを介して前記ハードウェアアクセラレータに前記第二値アレイを提供させて、前記複数のベクトルプロセッサの一つが前記命令に従って前記第一値アレイを処理することを可能にし、前記ハードウェアアクセラレータが前記フィルタリングオペレーションに従って前記第二値アレイを処理することを可能にするように構成されたホストプロセッサを含むことができる。
いくつかの実施形態においては、当該コンピュータデバイスは、それぞれが少なくとも一つの電力ドメインを含む複数のパワーアイランドをさらに含むことができ、前記複数のパワーアイランドのうちの第一のものは、第一供給電圧に結合されて、前記複数のベクトルプロセッサの一つに該第一供給電圧を提供し、前記複数のパワーアイランドのうちの第二のものは、第二供給電圧に結合されて、前記ハードウェアアクセラレータに該第二供給電圧を提供する。
いくつかの実施形態においては、当該コンピュータデバイスは、前記複数のパワーアイランドの第一のものを前記第一供給電圧に結合するスイッチにイネイブル信号を提供して、前記複数のベクトルプロセッサの一つをアクティブモードにするように構成された電力管理モジュールをさらに含むことができる。
いくつかの実施形態においては、前記複数のベクトルプロセッサの一つは、前記第一値アレイを処理する論理回路領域と、前記第一値アレイの少なくともサブセットを記憶するローカルメモリと、を含むことができ、前記電力管理モジュールは、前記第一供給電圧が前記論理回路領域に供給されるようにし、第三供給電圧が前記ローカルメモリに供給されるようにして、前記論理回路領域及び前記ローカルメモリの電力消費を独立的に制御するように構成されることができる。
いくつかの実施形態においては、前記電力管理モジュールは、前記スイッチをオフにし、前記複数のパワーアイランドの第一のものを前記第一供給電圧から切り離して、前記複数のベクトルプロセッサの一つを低電力モードにするように構成されることができる。
いくつかの実施形態においては、前記電力管理モジュールは、有効信号を生成するように構成された有効信号生成器を含むことができ、前記有効信号は、前記複数のパワーアイランドの第一のものの回路ブロックが入力データを処理する準備が整うタイムインスタンスを示し、前記有効信号生成器は、前記複数のパワーアイランドの第一のものにある前記回路ブロックに前記第一供給電圧を提供する、スイッチ連鎖を含む。
いくつかの実施形態においては、当該コンピュータデバイスは、複数の入出力(I/O)ピンに結合された周辺デバイスをさらに含むことができ、前記周辺デバイスは、前記複数のベクトルプロセッサの少なくとも一つと外部デバイスとの間の通信チャネルを提供するように構成される。
いくつかの実施形態においては、前記周辺デバイスは、常時パワーオンのパワーアイランド内にあることができる。
いくつかの実施形態においては、前記周辺デバイスは、前記外部デバイスからの信号を監視して、前記複数のベクトルプロセッサの一つが応答するべきイベントを検出し、前記周辺デバイスが前記イベントを検出したときは、前記複数のベクトルプロセッサの一つを前記アクティブモードにするように前記電力管理モジュールにさせるように構成されることができる。
いくつかの実施形態においては、前記周辺デバイスは、前記I/Oピンの共通セットを介して複数の標準プロトコルインタフェースの機能をエミュレートするように前記周辺デバイスにさせるように構成されたエミュレーションモジュールを含むことができる。
いくつかの実施形態においては、前記周辺デバイスは、I/Oピンの差動対に結合されていることができ、前記周辺デバイスは、極性制御信号に基づき、該差動対の極性を変更するように構成される。
いくつかの実施形態においては、前記I/Oピンの差動対は、モバイルインダストリプロセッサインタフェース(MIPI)のレーンの差動対を含むことができる。
いくつかの実施形態においては、前記周辺デバイスは、入力I/Oピンと出力I/Oピンとの間のバイパスを行うように構成されたバイパスバッファを含むことができ、前記複数のベクトルプロセッサの一つをアクティブモードにすることなく、該入力I/Oピンと該出力I/Oピンとの間に通信チャネルを提供する。
開示された主題は、方法を含む。当該方法は、複数のメモリスライスと、第一インタフェース及び第二インタフェースを有する相互接続システムを含むメモリファブリックを提供する工程を含むことができる。当該方法は、前記第一インタフェースを用いて、前記複数のメモリスライスと複数のベクトルプロセッサとを結合する工程と、前記第二インタフェースを用いて、前記複数のメモリスライスとハードウェアアクセラレータとを結合する工程と、を含むことができる。当該方法は、前記メモリファブリックによって、前記第一インタフェースを介して前記複数のベクトルプロセッサの一つに第一値アレイを提供し、前記第二インタフェースを介して前記ハードウェアアクセラレータに第二値アレイを提供する工程と、前記複数のベクトルプロセッサの一つで、前記第一値アレイについて作用する命令を実行する工程と、前記ハードウェアアクセラレータによって、前記第二値アレイについてフィルタリングオペレーションを行う工程と、をさらに含むことができる。
いくつかの実施形態においては、当該方法は、前記複数のベクトルプロセッサの一つに第一供給電圧を提供する工程と、前記ハードウェアアクセラレータに第二供給電圧を提供する工程と、を含むことができ、前記複数のベクトルプロセッサの一つ及び前記ハードウェアアクセラレータは、それぞれ第一パワーアイランド及び第二パワーアイランドに関連付けられる。
いくつかの実施形態においては、当該方法は、電力管理モジュールによって、前記第一パワーアイランドを前記第一供給電圧に結合するスイッチにイネイブル信号を提供して、前記複数のベクトルプロセッサの一つをアクティブモードにする工程を含むことができる。
いくつかの実施形態においては、当該方法は、前記複数のベクトルプロセッサの一つの回路ブロックに前記第一供給電圧を提供するスイッチ連鎖を用いて、前記第一パワーアイランドの回路ブロックが入力データを処理する準備が整うタイムインスタンスを示す有効信号を生成する工程を含むことができる。
いくつかの実施形態においては、当該方法は、複数の入出力(I/O)ピンに結合された周辺デバイスを含むことができ、前記周辺デバイスは、常時パワーオンのパワーアイランドに関連付けられる。
いくつかの実施形態においては、当該方法は、外部デバイスからの信号を監視して、前記複数のベクトルプロセッサの一つが応答するべきイベントを検出する工程と、前記複数のベクトルプロセッサの一つをアクティブモードにするように電力管理モジュールにさせる工程と、を含むことができる。
いくつかの実施形態においては、当該方法は、前記周辺デバイスによって、前記I/Oピンの共通セット介して複数の標準プロトコルインタフェースの機能をエミュレートする工程を含むことができる。
いくつかの実施形態においては、前記周辺デバイスは、I/Oピンの差動対に結合されており、当該方法は、極性制御信号に基づき、前記差動対の極性を変更する工程をさらに含む。
いくつかの実施形態においては、当該方法は、バイパスバッファを用いて、入力I/Oピンと出力I/Oピンとの間のバイパスを行って、前記複数のベクトルプロセッサの一つをアクティブモードにすることなく、該入力I/Oピンと該出力I/Oピンとの間に通信チャネルを提供する工程を含むことができる。
開示された主題は、電子デバイスを含む。当該電子デバイスは、複数のベクトルプロセッサであって、該複数のベクトルプロセッサの一つが、第一値アレイについて作用する命令を実行するように構成された、複数のベクトルプロセッサを含むことができる。当該電子デバイスは、ソフトウェアモジュールから受けた設定情報を用いてプログラムされたプログラマブルデータパスパイプラインを含み、該プログラマブルデータパスパイプラインは、該設定情報に従って第二値アレイについてのフィルタリングオペレーションを行うように構成された、ハードウェアアクセラレータを含むこともできる。当該電子デバイスは、複数のメモリスライスを含むメモリファブリックを含むこともできる。当該電子デバイスは、前記メモリファブリックに、前記複数のベクトルプロセッサの一つに前記第一値アレイを提供させ、前記ハードウェアアクセラレータに前記第二値アレイを提供させて、前記複数のベクトルプロセッサの一つが前記命令に従って前記第一値アレイを処理することを可能にし、前記ハードウェアアクセラレータが前記設定情報に従って前記第二値アレイを処理することを可能にするように構成されたホストプロセッサと、をさらに含むことができる。
いくつかの実施形態においては、前記ハードウェアアクセラレータは、前記プログラマブルデータパスパイプラインにより処理された画像の走査ラインを受ける出力バッファと、前記出力バッファがフルであるときに、前記プログラマブルデータパスパイプラインのオペレーションをストールするように構成されたパイプラインストールコントローラと、を含むことができる。
いくつかの実施形態においては、前記ハードウェアアクセラレータは、前記フィルタリングオペレーションを行うのにまとめてつなげられた複数の機能ユニットを含むことができる。
いくつかの実施形態においては、前記複数の機能ユニットがまとめてつなげられた順序は、前記ソフトウェアモジュールから受けた前記設定情報を用いて決定される。
いくつかの実施形態においては、前記複数の機能ユニットの第一のものの出力は、前記メモリファブリック内のバッファに提供され、前記複数の機能ユニットの第二のものの入力は、該バッファから受けられる。
いくつかの実施形態においては、前記ハードウェアアクセラレータは、前記画像の走査ライン内の画素によって表される物体の深さを示す深度情報を受けるように構成された深度マップクライアントを含むことができる。
いくつかの実施形態においては、前記ハードウェアアクセラレータは、前記深度情報の解像度を前記画像の走査ラインの解像度に合致させるように前記深度情報を処理するように構成された深度マップモジュールを含むことができる。
いくつかの実施形態においては、前記深度マップモジュールは、前記深度情報を前記画像の走査ラインに時間的に同期させるようにさらに構成される。
いくつかの実施形態においては、前記メモリファブリックは、前記複数のベクトルプロセッサの一つにより、共有リソースへの排他的アクセスを要求する排他的アクセス要求の状況を監視し、前記複数のベクトルプロセッサの一つが前記共有リソースへの排他的アクセスを受けたときは、該複数のベクトルプロセッサの一つに、該複数のベクトルプロセッサの一つが前記共有リソースへの前記排他的アクセスを有することを示す認メッセージを送るように構成されたミューテックスコントローラを含むことができる。
いくつかの実施形態においては、前記メモリファブリックは、複数のバッファを含むことができ、前記複数のバッファの第一のものは、前記複数のベクトルプロセッサの第一のものに関連付けられ、前記複数のベクトルプロセッサの第二のものは、前記複数のバッファの第一のもの内にデータを記憶することによって、前記複数のベクトルプロセッサの第一のものに該データを送るように構成される。
いくつかの実施形態においては、前記メモリファブリックは、前記複数のベクトルプロセッサの第一のものに伝えられたデータ量に基づいて、前記複数のバッファの第一もののキャパシティを動的に修正するように構成されることができる。
いくつかの実施形態においては、前記メモリファブリックは、前記複数のベクトルプロセッサの第一のものに伝えられたデータ量に基づいて、前記複数のバッファの二つ以上を前記複数のベクトルプロセッサの第一のものに動的に関連付けるように構成されることができる。
いくつかの実施形態においては、前記複数のバッファは、前記メモリファブリック内の前記複数のメモリスライスの一つの一部であることができる。
いくつかの実施形態においては、前記メモリファブリックは、前記複数のベクトルプロセッサの一つが低電力モードに入ったときは、該複数のベクトルプロセッサの一つの状態情報を記憶するように構成されることができる。
いくつかの実施形態においては、前記状態情報は、前記メモリファブリック内のスタティックランダムアクセスメモリ内に記憶される。
いくつかの実施形態においては、前記メモリファブリックは、直接メモリアクセス(DMA)コントローラを含むことができ、前記DMAコントローラは、複数のDMAオペレーションが実行される順番を示すオペレーションリストを含む。
いくつかの実施形態においては、前記DMAコントローラは、イネイブルバッファに基づいて、前記オペレーションリスト内のDMAオペレーションのサブセットを行うように構成されることができ、前記イネイブルバッファは複数のビットを含み、前記複数のビットの一つは、前記DMAオペレーションの一つに関連付けられており、前記複数のビットの一つの値は、前記DMAオペレーションの一つが前記DMAコントローラによって行われるか否かを示す。
開示された主題は、方法を含む。当該方法は、複数のメモリスライスを含むメモリファブリックによって、複数のベクトルプロセッサの一つに第一値アレイを提供する工程を含むことができる。当該方法は、前記メモリファブリックによって、プログラマブルデータパスパイプラインを含むハードウェアアクセラレータに第二値アレイを提供する工程と、前記複数のベクトルプロセッサの一つによって、前記第一値アレイに作用する命令を実行する工程と、設定情報を用いて、前記ハードウェアアクセラレータ内のプログラマブルデータパスパイプラインを構成する工程と、前記ハードウェアアクセラレータ内のデータパスパイプラインを用いて、前記設定情報に従い、前記第二値アレイについてフィルタリングオペレーションを行う工程と、を含むこともできる。
いくつかの実施形態においては、当該方法は、出力バッファで、前記プログラマブルデータパスパイプラインによって処理された画像の走査ラインを受ける工程と、パイプラインストールコントローラによって、前記出力バッファがフルであるときは、前記プログラマブルデータパスパイプラインのオペレーションをストールする工程と、を含むことができる。
いくつかの実施形態においては、前記ハードウェアアクセラレータは、複数の機能ユニットを含み、当該方法は、前記設定情報に従って前記複数の機能ユニットをつないで、前記フィルタリングオペレーションを行う。
いくつかの実施形態においては、前記複数の機能ユニットは、第一機能ユニット及び第二機能ユニットを含み、前記複数の機能ユニットをつなぐ工程は、前記第一機能ユニットの出力を前記第二機能ユニットの入力につなぐ工程を含む。
いくつかの実施形態においては、当該方法は、前記画像の走査ライン内の画素によって表される物体の深さを示す深度情報を受ける工程と、前記深度情報と前記画像の走査ラインとを同期させる工程と、を含むことができる。
いくつかの実施形態においては、当該方法は、前記メモリファブリック内のメモリコントローラによって、前記複数のベクトルプロセッサの一つにより、共有リソースへの排他的アクセスを要求する排他的アクセス要求の状況を監視する工程と、前記複数のベクトルプロセッサの一つが前記共有リソースへの排他的なアクセスを受けたときは、該複数のベクトルプロセッサの一つに、該複数のベクトルプロセッサの一つが前記共有リソースへの前記排他的アクセスを有することを示す確認メッセージを送る工程と、を含むことができる。
いくつかの実施形態においては、前記メモリファブリックは、複数のバッファを含むことができ、前記複数のバッファの第一のものは、前記複数のベクトルプロセッサの第一のものに関連付けられ、当該方法は、前記複数のベクトルプロセッサの第二のものによって、前記複数のバッファの第一のもの内にデータを記憶することによって、前記複数のベクトルプロセッサの第一のものに該データを送る工程を含む。
いくつかの実施形態においては、当該方法は、前記複数のベクトルプロセッサの第一のものに伝えられたデータ量に基づいて、前記複数のバッファの第一もののキャパシティを動的に修正する工程を含むことができる。
いくつかの実施形態においては、当該方法は、前記複数のベクトルプロセッサの第一のものに伝えられたデータ量に基づいて、前記複数のバッファの二つ以上を前記複数のベクトルプロセッサの第一のものに動的に関連付ける工程を含むことができる。
いくつかの実施形態においては、当該方法は、前記複数のベクトルプロセッサの一つが低電力モードに入ったときは、前記メモリファブリック内の該複数のベクトルプロセッサの一つの状態情報を記憶する工程をさらに含むことができる。
いくつかの実施形態においては、前記状態情報は、前記メモリファブリック内のスタティックランダムアクセスメモリ内に記憶される。
いくつかの実施形態においては、当該方法は、直接メモリアクセス(DMA)コントローラで、複数のDMAオペレーションが実行される順番を示すオペレーションリストを保持する工程を含むことができる。
いくつかの実施形態においては、当該方法は、イネイブルバッファに基づいて、前記オペレーションリスト内のDMAオペレーションのサブセットを行う工程を含むことができ、前記イネイブルバッファは複数のビットを含み、前記複数のビットの一つは、前記DMAオペレーションの一つに関連付けられており、前記複数のビットの一つの値は、前記DMAオペレーションの一つが前記DMAコントローラによって行われるか否かを示す。
次の記載においては、開示された主題のシステム及び方法並びにそのようなシステム及び方法が動作し得る環境等に関して、多くの具体的な詳細が説明される。これは、開示された主題の十分な理解を提供するためである。しかし、開示された主題がそのような具体的な詳細がなくとも実施され得ることや、本技術分野で周知である所定の特徴が開示された主題の複雑性を回避するため、詳細には記載されないことは、当業者には明らかなものである。さらに、当然のことながら、下記に提供される例は、例示的なものであり、開示された主題の範囲内にある他のシステム及び方法があると予期される。
コンピュータイメージングは、マシンが物理世界を撮り、これと相互作用するやり方を変換することができる。例えば、コンピュータイメージングを介して、マシンは伝統的なイメージング技術を用いて撮ること極めて難しかった画像を撮ることができる。他の例として、コンピュータイメージングを介して、マシンは、その周囲を理解し、その周囲に従った応答をすることができる。
コンピュータイメージングを大衆市場に投入する際の課題の一つは、コンピュータイメージングが本質的かつ計算的に高くつくことである。コンピュータイメージングは、高い解像度での大量の画像及び/又は高いフレームレートでの大量の動画をしばしば用いる。このため、コンピュータイメージングは、パワフルな計算プラットフォームのサポートを必要とする。さらに、コンピュータイメージングは、例えば、スマートフォン又はタブレットコンピュータを用いたモバイル設定において用いられることが多く、コンピュータイメージングは、低電力消費で動作することのできるパワフルな計算プラットフォームのサポートを必要とすることが多い。
本願は、コンピュータイメージングのための低電力で、優秀な計算プラットフォームを提供することができるコンピュータデバイスを開示し、プラットフォームの性能に寄与することができるベクトルプロセッサの特定の特徴を特定する。図1は、いくつかの実施形態に従うコンピュータデバイスの高レベルな図である。コンピュータデバイス100は、例えば、一つ以上のベクトルプロセッサ102と、一つ以上のハードウェアアクセラレータ104と、知的なメモリファブリック106(intelligent memory fabric)と、周辺デバイス108と、電力管理モジュール110と、を含むことができる。
一つ以上のベクトルプロセッサ102は、ベクトルと呼ばれるデータアレイに作用する命令を含む命令セットを実装する中央処理ユニット(CPU)を含む。より詳細には、一つ以上のベクトルプロセッサ102は、同時に大量のデータの一般的な演算オペレーションを行うように構成されることができる。いくつかの実施形態においては、一つ以上のベクトルプロセッサ102は、シングルインストラクションマルチプルデータの超長命令ワード(SIMD−VLIW)プロセッサを含むことができる。いくつかの実施形態においては、一つ以上のベクトルプロセッサ102は、コンピュータビジョン及びイメージングアプリケーションに関連した命令を実行するように設計されることができる。
一つ以上のハードウェアアクセラレータ104は、より汎用のCPU上で動作するソフトウェアでも行うことが可能な機能と同じ機能をより高速に行うコンピュータハードウェアを含む。非ビジョン(non-vision)アプリケーションにおけるハードウェアアクセラレータの例としては、ラスタオペレータ(raster operator)を用いて複数のビットマップを一つに組み合わせるように構成されたグラフィクス処理ユニット(GPU)内のビリッティングアクセラレイション(blitting acceleration)モジュールを含む。
いくつかの実施形態においては、一つ以上のハードウェアアクセラレータ104は、画像処理及びコンピュータビジョンアプリケーションに合わせた構成可能なインフラストラクチャを提供することができる。ハードウェアアクセラレータ104は、アプリケーション特有の計算コアを取り巻く画像処理及びコンピュータビジョンオペレーションを加速する(accelerate)汎用ラッパーハードウェア(wrapper hardware)を含むとみなされることができる。例えば、ハードウェアアクセラレータ104は、画像フィルタリングオペレーションを行う専用フィルタモジュールを含むことができる。フィルタモジュールは、画像にわたってカスタマイズされたフィルタカーネル(filter kernel)を効率のよいやり方で動作させるように構成されることができる。いくつかの実施形態においては、ハードウェアアクセラレータ104は、一クロック周期で十分に計算された一つの出力画素を出力することができる。
知的なメモリファブリック106は、短い待ち時間(latency)で低電力メモリシステムを提供するように構成されることができる。画像及び動画は大量のデータを含むため、メモリと処理ユニット間に高速インタフェースを提供することは重要である。いくつか実施形態においては、知的なメモリファブリック106は、例えば、64ブロックのメモリで、それぞれが64ビットインタフェースを含むことができるものを含むことができる。そのような実施形態においては、600MHzで動作する知的なメモリファブリック106は、307.2GB/秒でデータを転送することができる。別の実施形態においては、知的なメモリファブリック106は、任意の数のブロックのメモリで、それぞれが一つ以上のインタフェースプロトコルを実装する任意の数のインタフェースを含むことができるものを含むことができる。
周辺デバイス108は、画像センサ、加速度計等の外部デバイスとデータビットを送受信するための通信チャネルを提供するように構成されることができる。周辺デバイス108は、ベクトルプロセッサ102、ハードウェアアクセラレータ104及びメモリファブリック106が外部デバイスと通信するための通信メカニズムを提供することできる。
電力管理モジュール110は、コンピュータデバイス100内の指定ブロックの活動を制御するように構成されることができる。より詳細には、電力管理モジュール110は、コンピュータデバイス100内のパワーアイランド(power island)とも呼ばれる、指定ブロックの電力供給電圧を制御するように構成されることができる。例えば、電力管理モジュール110がパワーアイランドの電力供給を可能にすると、コンピュータデバイス100は、そのパワーアイランドに適切な電力供給電圧を提供するようにトリガされることができる。いくつかの実施形態においては、各パワーアイランドは独立した電力ドメインを含むことができる。このため、パワーアイランドの電力供給は独立して制御されることができる。いくつかの実施形態においては、電力管理モジュール110は、コンピュータデバイス100内の一つ以上の入出力ピンを介してコンピュータデバイス100に外部連結(externally attached to)されたパワーアイランドの活動も制御するように構成されることもできる。
図2は、いくつかの実施形態に従うコンピュータデバイスの詳細図を示す。コンピュータデバイス100は、複数のベクトルプロセッサ102を含むことができる。この図示において、コンピュータデバイス100は、12個のベクトルプロセッサ102を含む。ベクトルプロセッサ102は、プロセッサ間相互接続(IPI)202を介して互いに通信することができる。ベクトルプロセッサ102は、IPI202とアクセラレータメモリコントローラ(AMC)クロスバー204又はメモリマッププロセッサバス208を介して、メモリファブリック106及び/又はハードウェアアクセラレータ104を含む、コンピュータデバイス100内の他のコンポーネントと通信することもできる。
いくつかの実施形態においては、一つ以上のベクトルプロセッサ102は、プロプライエタリ命令(proprietary instruction)セットを実行するように設計されることができる。プロプライエタリ命令セットは、プロプライエタリ命令を含むことができる。プロプライエタリ命令は、命令ヘッダと一つ以上のユニット命令を含む可変長のバイナリ列である。命令ヘッダは、関連するプロプライエタリ命令用の命令長と、アクティブユニットの情報を含むことができる。ユニット命令は、固定又は可変のいずれかである多くのフィールドを含む可変長のバイナリ列であることができる。ユニット命令におけるフィールドは、命令を特定するオペコードと、ユニット命令実行の際に用いる値を特定するオペランドを含むことができる。
ベクトルプロセッサ102の詳細については、本願と同日に出願された、代理人整理番号第2209599.127US1号で特定される、「VECTOR PROCESSOR」と題する、出願番号未定の米国特許出願で提供される。この出願の全ては参照により本願に援用される。
コンピュータデバイス100は、複数のハードウェアアクセラレータ104を含むことができる。ハードウェアアクセラレータ104は、所定の処理機能を実行するように構成された様々なアクセラレータモジュールを含むことができる。いくつかの実施形態においては、所定の処理機能はフィルタリングオペレーションを含むことができる。例えば、ハードウェアアクセラレータ104は、ロー(raw)画像処理モジュール、レンズシェーディング補正(LSC)モジュール、ベイヤパターンデモザイクモジュール、シャープ化フィルタモジュール、多相スカラモジュール、ハリスコーナー(Harris Corner)検出モジュール、色合成モジュール、輝度チャネルノイズ除去モジュール、彩度チャネルノイズ除去モジュール、メジアンフィルタモジュール、検索(look-up)テーブル、畳み込みモジュール、エッジ検出モジュール及び/若しくは他の好適なモジュール又はモジュールの組み合わせを含むことができる。ハードウェアアクセラレータ104は、メモリファブリック106内に存するメモリデバイス内のデータを取り出す、及び記憶するように構成されることができる。
メモリファブリック106は、コンピュータデバイス100内でメモリオペレーションをコーディネイト(coordinate)する中央メモリシステムを含むことができる。メモリファブリック106は、ベクトルプロセッサ102、ハードウェアアクセラレータ104等の処理ユニット間の不必要なデータ転送を低減するように設計されることができる。メモリファブリック106は、複数の処理ユニットが、データ及びストーリング(stalling)なしにプログラムコードメモリに並列的にアクセスすることができるように構築される。さらに、メモリファブリック106は、ホストプロセッサが、アドバンストエクステンシブルインタフェース(AXI)等の並列バス又は他の好適なバス208を介して、メモリファブリック106内のメモリシステムにアクセスするための準備をすることができる。
いくつかの実施形態においては、処理ユニットは、ロードストアユニット(LSU)ポートを通じて一周期で128ビットまで読み書きすることができ、その命令ポートを通じて一周期で128ビットまでのプログラムコードを読むことができる。プロセッサ102及びハードウェアアクセラレータ104それぞれのためのIPI202及びAMC204のインタフェースに追加して、メモリファブリック106は、アドバンストマイクロコントローラバスアーキテクチャ(AMBA)高性能バス(AHB)及びAXIバスインタフェースを通じてメモリシステムに同時的な読み書きアクセスを提供することができる。AHB及びAXIは、処理ユニット、メモリシステム、周辺デバイスが共有バスインフラストラクチャを用いて接続されることを可能にする標準的な並列インタフェースバスである。他の任意の好適なバスが用いられることができる。いくつかの実施形態においては、メモリファブリック106は一クロック周期でピークには18x128ビットのメモリアクセスを扱うように構成されることができる。別の実施形態において、メモリファブリック106は高速インタフェースを用いて、一クロック周期で大量のビットで任意の数のメモリアクセスを扱うように設計されることができる。
メモリファブリック106内のメモリシステムは、複数のメモリスライスを有することができ、各メモリスライスは複数のベクトルプロセッサ102の一つに関連付けられており、他のベクトルプロセッサ102に対してそのプロセッサへの優先アクセスを与える。各メモリスライスは、複数のランダムアクセスメモリ(RAM)タイルを有することができ、各RAMタイルは読みポートと書きポートを含むことができる。いくつかの場合においては、各メモリスライスは、関連するメモリスライスへのアクセスを提供するメモリスライスコントローラを設けてよい。
プロセッサ及びRAMタイルはIPI202とも呼ばれるバスを介して互いに結合されることができる。いくつかの場合において、IPI202は、任意のベクトルプロセッサ102と任意のメモリスライスとを結合することができる。好適には、各RAMタイルは、そのタイルへのアクセスを許可するタイル制御ロジックブロックを含むことができる。タイル制御ロジックブロックは、タイル制御ロジック又はアービトレーション(arbitration)ブロックと呼ばれるときがある。
いくつかの実施形態において、各メモリスライスは、複数のRAMタイル又は物理的RAMブロックを含むことができる。例えば、128kBのサイズを有するメモリスライスは、4kx32ビットワードとして組織化された4つの32kBの単一ポートRAMタイル(例えば、物理的RAM要素)を有することができる。他の実例としては、256kBのサイズを有するメモリスライスが、8kx32ビットワードとして組織化された8つの32kBの単一ポートRAMタイル(例えば、物理的RAM要素)を有することができる。いくつかの実施形態においては、メモリスライスは16kB位小さい容量を有することもあれば、16MB位大きい容量を有することもある。別の実施形態においては、メモリスライスは、コンピュータデバイスによって扱われる様々なアプリケーションを収容する必要とされるだけの容量を有するように構成されることができる。
いくつかの実施形態において、RAMタイルは、単一ポートの相補型金属酸化物半導体(CMOS)RAMを含むことができる。単一ポートのCMOS RAMの利点は、概して、大体の半導体プロセスにおいて利用可能であることである。別の実施形態において、RAMタイルは、マルチポートのCMOS RAMを含むことができる。いくつかの実施形態において、各RAMタイルは、16ビット幅、32ビット幅、64ビット幅、128ビット幅又はコンピュータデバイスの特定のアプリケーションによって必要とされるだけの幅であることができる。
単一ポートのメモリデバイスの使用は、メモリサブシステムの電力及び領域効率を上げる可能性があるが、メモリシステムのバンド幅を制限する可能性がある。いくつかの実施形態において、メモリファブリックは、これらのメモリデバイスが、複数のソース(プロセッサ及びハードウェアブロック)からの複数の同時的な読み書き要求をサービスすることのできる仮想的なマルチポートのメモリサブシステムとして振る舞うことができるように設計されることができる。これは、複数の物理的RAMインスタンス(instance)を用いること、及び複数のソースにサービスするため、それらへの任意のアクセスを提供することによって達成されることができる。
いくつかの実施形態においては、各RAMタイルは、タイル制御ロジックに関連付けられることができる。タイル制御ロジックは、ベクトルプロセッサ102又はハードウェアアクセラレータ104からの要求を受けるとともに、関連するRAMタイルの個別の読み書きポートへのアクセスを提供するように構成される。例えば、ベクトルプロセッサ102がRAMタイル内のデータにアクセスする準備が整うと、ベクトルプロセッサ102がRAMタイルにメモリデータ要求を直接送る前に、ベクトルプロセッサ102は、そのRAMタイルに関連付けられたタイル制御ロジックにメモリアクセス要求を送ることができる。メモリアクセス要求は、処理要素によって要求されたデータのメモリアドレスを含むことができる。それに続き、タイル制御ロジックはメモリアクセス要求を分析し、ベクトルプロセッサ102がその要求されたRAMタイルにアクセスすることができるか否かを決定する。ベクトルプロセッサ102がその要求されたRAMタイルにアクセスできる場合には、タイル制御ロジックは、アクセス許可メッセージをベクトルプロセッサ102に送ることができ、それに続いて、ベクトルプロセッサ102はメモリデータ要求をRAMタイルに送ることができる。
いくつかの実施形態においては、タイル制御ロジックは、多くの処理ユニット(例えば、ベクトルプロセッサ及びハードウェアアクセラレータ)が同一のRAMタイルにアクセスする順序を決定し、実施するように構成される。例えば、タイル制御ロジックが衝突検出器を含むことができ、その衝突検出器は、二つ以上の処理ユニットがRAMタイルに同時にアクセスしようとするインスタンスを検出するように構成される。衝突検出器は、アクセス衝突が発生し、そのアクセス衝突は解決されるべきであることをランタイムスケジューラに報告するように構成されることができる。
メモリファブリック106は、メモリからベクトルプロセッサ102若しくはハードウェアアクセラレータ104への、又はベクトルプロセッサ102若しくはハードウェアアクセラレータ104からメモリへのデータビットを転送するためのメモリバスを含むこともできる。メモリファブリック106は、ベクトルプロセッサ102、ハードウェアアクセラレータ104及びメモリ間のデータ転送をコーディネイトする直接メモリアクセス(DMA)コントローラを含むこともできる。
いくつかの実施形態においては、ハードウェアアクセラレータ104は、別々のバスを介してメモリファブリック106に結合されることができる。別々のバスは、アクセラレータメモリコントローラ(AMC)を含むことができ、これは、少なくとも一つハードウェアアクセラレータからの要求を受け、関連するメモリスライスコントローラを介して、メモリスライスへのアクセスをハードウェアアクセラレータに対して許可するように構成される。ハードウェアアクセラレータ104により採用されるメモリアクセスパスは、ベクトルプロセッサ102により採用されるパスとは異なる可能性があることが理解されるだろう。実際、AMC204は、アドレスフィルタリング、アービトレーション(arbitration)及び多重化を行うことができる。いくつかの実施形態においては、ハードウェアアクセラレータ104は、メモリファブリック106にアクセスする際の遅延を考慮する内部バッファ(例えば、FIFOメモリ)を含むことができる。
いくつかの実施形態においては、AMC204は、例えば、複数のモバイルインダストリプロセッサインタフェース(MIPI:Mobile Industry Processor Interface)カメラインタフェースを含む一つ以上の周辺デバイス108に結合されることができる。AMC204は、二つのシステムRISCプロセッサがAMC204を介してメモリファブリック106内のメモリスライスにアクセスするのを可能にするAXIインタフェース及びAPBインタフェースに接続されることもできる。
いくつかの実施形態において、AMC204は、メモリファブリック106の各メモリスライスへの一対の64ビットポートを含むことができる。AMC204は、ハードウェアアクセラレータ104からの要求を部分アドレス復号化によって、適切なメモリスライスに転送する(route)ように構成されることができる。
いくつかの実施形態において、AMC204は、様々な処理ユニットに結合されて、メモリファブリック106内のメモリスライスへのアクセスを提供することができる。例えば、任意のタイプのハードウェアアクセラレータ又はサードパーティー要素に結合されて、メモリファブリック106内のメモリスライスへのアクセスを提供することができる。AMC204は、コンピュータデバイス100の外部にあるメモリデバイスを含む、コンピューティングシステムのより広いメモリ空間へのアクセスを提供するように構成されることもできる。
いくつかの実施形態において、AMC204は、同一のメモリスライスへの同時のメモリアクセス要求をラウンドロビン方式で調停する(arbitrate)ことができる。例えば、ハードウェアアクセラレータ104等の処理ユニットは、AMC204にメモリアドレスを含むメモリアクセス要求を送ることができる。AMC204がメモリアクセス要求を受けると、AMC204はメモリアクセス要求内のメモリアドレスが、メモリファブリック106内のメモリスライスに関連付けられているかを決定する。メモリアクセス要求内のメモリアドレスがメモリファブリック106内のメモリスライスに関連付けられていない場合は、AMC204はそのメモリ要求をAMCのAXIマスタに転送する(forward)ことができる。メモリアクセス要求内のメモリアドレスがメモリファブリック106内のメモリスライスに関連付けられている場合、AMC204はメモリアクセス要求を調停して、所望のメモリロケーションへのアクセスを提供する。
周辺デバイス108は、複数の異機種環境にある画像センサ、加速度計等の外部デバイスとデータビットを送受信する通信チャネルを提供するように構成されることができる。周辺デバイス108は、ベクトルプロセッサ102、ハードウェアアクセラレータ104及びメモリファブリック106が外部デバイスと通信するための通信メカニズムを提供することができる。
伝統的に、周辺デバイスの機能は固定的であり、ハードコード化(hard-code)されている。例えば、モバイルインダストリプロセッサインタフェース(MIPI)の周辺デバイスは、SPI、I2C、I2S、その他の好適な規格等の低速(lower-rate)なデジタルインタフェースも実装する外部デバイスと適合する(interface with)ことしかできなかった。
しかし、本開示のいくつかの実施形態においては、周辺デバイス108の機能はソフトウェアを用いて規定されることができる。より詳細には、周辺デバイス108は、SPI、I2C、I2S、その他の好適なプロトコル等の標準インタフェースプロトコルの機能をエミュレートすることができるエミュレーションモジュールを含むことができる。
電力管理モジュール110は、コンピュータデバイス100内のブロックの活動を制御するように構成される。より詳細には、電力管理モジュール110は、パワーアイランド(power island)とも呼ばれる、指定ブロックの電力供給電圧を制御するように構成されることができる。例えば、電力管理モジュール110がパワーアイランドの電力供給を可能にすると、コンピュータデバイス100は、そのパワーアイランドに適切な電力供給電圧を提供するように構成される。電力管理モジュール110は、レジスタ内又はバス上の信号ラインにイネイブル信号(enable signal)を印加することによって、パワーアイランドの電力供給を可能にするように構成されることができる。いくつかの実施形態においては、電力管理モジュール110は、コンピュータデバイス100内の一つ以上の入出力ピンを介して外部デバイスの活動を制御するように構成されることもできる。
いくつかの実施形態においては、あるパワーアイランドは常にパワーオン(powered-on)されていることができる(例えば、電力供給電圧がパワーアイランドに常に供給されている)。そのようなパワーアイランドは、常時オンパワーアイランドと呼ばれることができる。いくつかの実施形態においては、常時オンパワーアイランドは、例えば、汎用入出力(GPIO)ピン、外部インタフェース及び/又は低周波タイマ、パワーオンリセット等の内部機能ブロックからの信号を監視するのに用いられることができる。このように、コンピュータデバイス100は、イベント又は一連のイベントに対応し、そのイベント又はそれら一連のイベントに対応するのに必要とされるパワーアイランドのみを適応的にパワーオンすることができる。
図3は、いくつかの実施形態に従うハードウェアアクセラレータを示す。ハードウェアアクセラレータ104は、ハードウェア画像処理フィルタの一群を含むことができる。ハードウェアアクセラレータ104は、いくつかの計算的に集約された機能をベクトルプロセッサ102から解放する(offloaded)ことを可能にする。ハードウェアアクセラレータ104は、AMC20に結合されることができ、高帯域でメモリファブリック106内のメモリスライスにアクセスする。
いくつかの実施形態においては、ハードウェアアクセラレータ104は、AMC204を介してメモリファブリック106に結合されることができる。いくつかの実施形態においては、ハードウェアアクセラレータ104は、MIPI受信フィルタ及びMIPI送信フィルタを含む一つ以上のフィルタモジュール(例えば、20個のフィルタモジュール)を含むことができる。いくつかの実施形態において、フィルタモジュールは、一つの読み出し専用AMCインタフェース(読み出しクライアントインタフェース)と、一つの書き込み専用AMCインタフェース(書き込みクライアントインタフェース)と、を含んでよい。別の実施形態においては、フィルタモジュールは、複数の読み出し専用AMCインタフェースを有することもできる。例えば、フィルタモジュールは、複数の入力バッファ、(同一バッファからの)複数のプレーン(plane)への並列アクセスのための複数の読み出し専用AMCインタフェースを有してよい。複数の読み出し専用AMCインタフェースは、フィルタモジュールの処理スループットを維持するための追加の(extra)メモリ読み出し帯域を提供するに用いられることができる。ハードウェアアクセラレータ104は単一のフィルタモジュールのみを有する可能性があるため、ハードウェアアクセラレータ104の説明は、各フィルタモジュールに等しく適用可能であることができる。同様に、そのフィルタモジュールがハードウェアアクセラレータ内の唯一のフィルタモジュールである可能性があるため、フィルタモジュールの説明は、ハードウェアアクセラレータに等しく適用可能であることができる。
いくつかの実施形態においては、AMC204は、メモリファブリック106内の各メモリスライスへの一つ以上の両方向(例えば、読み出し/書き込み)ポートを有する。ポートは、多数のビットに対応する(accommodate)ことができる。例えば、ポートは64ビット通信を対応することができる。いくつかの実施形態においては、AMC204は、外部DRAMデバイスへの直接的な接続を提供するAXIマスタを含むこともできる。
いくつかの実施形態においては、フィルタモジュールは、主に、メモリファブリック106内のバッファを処理するように設計されることができる。例えば、MIPI受信フィルタ及びMIPI送信フィルタの例外(exception)により、フィルタモジュールはAMCクライアントを介してのみデータを入出力することができる。バッファベースアドレスを含む、フィルタモジュールの構成は、複数のAPBスレーブインタフェースを介して達成されることができる。
いくつかの実施形態においては、ハードウェアアクセラレータ104は、MIPI受信フィルタモジュール及びMIPI送信フィルタモジュールを介して画像を受けることができる。MIPI受信フィルタモジュール及びMIPI送信フィルタモジュールは、ハードウェアアクセラレータ104内の他のフィルタモジュールがMIPI受信コントローラ及びMIPI送信コントローラへの直接的な接続を確立することができるようにすることができる。MIPI受信フィルタモジュール及びMIPI送信フィルタモジュールは並列インタフェースを介して、MIPIコントローラに接続することができ、メモリファブリック106からMIPIコントローラへ及びMIPIコントローラからメモリファブリック106に直接的にデータを流すのに用いられることができる。
いくつかの実施形態においては、ハードウェアアクセラレータ104は、AMC204を介してアクセスされた、メモリファブリック106内にバッファされた画像データの走査ラインに作用することができる。AMC204は、クライアントインタフェースからのトランザクションを対象のメモリスライス(又はAXIマスタ)に転送し、各メモリスライスでの異なるクライアントからの同時に起こるトランザクション間の調停をすることができる。いくつかの実施形態においては、ハードウェアアクセラレータ104内の複数のフィルタモジュールは、一つ以上のフィルタモジュール(プロデューサ/ペアレントとも呼ばれる)の出力バッファを他のフィルタモジュール(コンシューマ/チルドレンとも呼ばれる)の入力バッファに結合することによって、ストリーミング形式で互いに接続されることができる。
いくつかの実施形態においては、ハードウェアアクセラレータ104内のフィルタモジュールは、現画素(current pixel)を中心とする複数の画素についての2次元カーネルを作用させることができる。カーネル内の全ての画素が、現画素を中心とする複数の画素を処理するのに貢献する。
いくつかの実施形態においては、ハードウェアアクセラレータ104内のフィルタモジュールは、ラインごとに画像を処理することができる。例えば、フィルタモジュールは、上から下に向かって画像を走査することができ、画像の走査ラインを生成する。そして、それらの走査ラインを処理する。例えば、左から右に移動させることがある。別の例においては、フィルタモジュールは、フィルタリング処理に好適な任意の方向/順序で画像を走査することによって画像の走査ラインを生成することができる。
いくつかの実施形態においては、フィルタモジュールは、データを読み込むことによって画像の走査ラインを処理して、走査ライン上の第一画素に対するカーネルを形成することができる。フィルタモジュールは、スライディングウィンドウ方式で、カーネルをスライドさせることによって走査ラインを処理することができる。一旦処理が完了すると、フィルタモジュールは出力画素を出力バッファ又はメモリロケーションに書き込むことができる。
いくつかの実施形態においては、フィルタリングのためのカーネルは、代表的には、正方であり、各辺に奇数個の画素を有することが多い。例えば、3×3、5×5又は7×7である。フィルタモジュールがK×K画素カーネルを用いる場合、処理される画像データの各ラインに対して、K本の画像の走査ラインが入力バッファから読み出され、出力バッファに書き出されることができる。
いくつかの実施形態においては、ハードウェアアクセラレータ104はサーキュラー入力バッファを有することができる。ここで、対象のフィルタモジュールが他のフィルタモジュール(ペアレントフィルタモジュールとも呼ばれる)の出力走査ラインを入力して受けるように構成されていると想定する。また、対象のフィルタモジュールはK×K画素カーネルを用いると想定する。すると、対象のフィルタモジュールのための入力バッファは、画像データの少なくとも(K+1)本の走査ラインを維持するように設計されることができる。つまり、フィルタモジュールのためのK本の走査ラインと、同時にペアレントフィルタモジュールの出力走査ラインを受け取るための一本(以上の)走査ラインである。ほとんどの場合においては、ペアレントフィルタモジュールは、入力画像内の現ライン番号の観点からは対象のフィルタモジュールに先んじている(be ahead of)。初期設定(initial configuration)の後、フィルタモジュールによるAMCクライアントへの読み書きは、フィルタモジュールの入出力バッファにアクセスするときに、サーキュラーバッファアドレスラッピング(wrapping)に対処することができる。
いくつかの実施形態においては、ハードウェアアクセラレータ104内のバッファは、所定バイト数で調整されることができる。例えば、ハードウェアアクセラレータ104内のバッファは8バイト境界で調整されることができる。トランザクションのルーチンを簡単にするため、読み出し及び買い込みクライアント並びにAMCは、調整されたバッファアクセスのみを提供するように構成されることができる。画像の幅が所定バイト数の倍数でないときは、ハードウェアアクセラレータ104は、ヌルバイト(null byte)を書き込んで、(調整されてない)走査ラインの端と次のバイト境界との間のバッファの間のバッファを出力するように構成されることができる。
図3は、入力データストリーム(例えば、一つ以上の画像の走査ライン)について、フィルタカーネルレジスタ302内に記憶されたフィルタカーネルを作用させるハードウェアアクセラレータの実装を示す。入力データストリームは、一つ以上の画像の画素に対応することができる。ハードウェアアクセラレータ104は、データパスパイプライン304、パイプラインストールコントローラ306、ラインバッファクライアント読み出しクライアント308、ライン開始コントローラ310、ラインバッファ書き込みクライアント312と、を含むことができる。いくつかの実施形態においては、ハードウェアクライアント1−4は、メモリファブリック内のメモリスライスにアクセスするための、少なくとも一つのAMC読み出しクライアントインタフェース314及び/又は少なくとも一つのAMC書き込みクライアントインタフェース316を含む。AMC204上の読み出し/書き込みクライアントインタフェースの数は、好適に構成されることができる。
いくつかの実施形態においては、フィルタカーネルレジスタ320は、入力データストリームについて作用するカーネルを修正するようにプログラムされることができる。フィルタカーネルレジスタ302は、様々なカーネルサイズを収容することができる。例えば、フィルタカーネルレジスタ302は、3×3カーネル、5×5カーネル、7×7カーネル、9×9カーネル、その他のm×nで表されるカーネルサイズを収容することができる。いくつかの場合においては、mはnと同じであることができ、その他の場合においては、mはnと異なることができる。いくつかの実施形態においては、フィルタカーネルレジスタ302は様々な次元のカーネルを収容することができる。例えば、フィルタカーネルレジスタ302は1次元フィルタ、2次元フィルタ、3次元フィルタ、その他の任意の整数次元フィルタを含むように構成されることができる。
いくつかの実施形態においては、ラインバッファ読み出しクライアント308は、画像の走査ライン(例えば、画像グリッド上での画像の行又は列)を受け、走査ラインをデータパスパイプライン304に提供するように構成されることができる。ラインバッファ読み出しクライアント308は、AMC読み出しインタフェース314を介して画像の走査ラインを受けることができる。一旦、データパスパイプライン304はカーネル及び画像の走査ラインを受けると、データパスパイプライン304は、フィルタリングオペレーションを行うことができる。一旦、データパスパイプライン304はフィルタリングオペレーションを完了すると、データパスパイプライン304は、ラインバッファ書き出しクライアント312内に結果ラインを記憶することができる。ラインバッファ書き込みクライアント312は、任意で、AMC書き込みインタフェース316を介してメモリスライス内に結果ラインを記憶することができる。パイプラインストールコントローラ306は、パイプラインの所定の部分をストールして、ラインバッファ書きこみクライアント312がオーバーフローしないことを保証することができる。
いくつかの実施形態においては、ライン開始コントローラ310は、データパスパイプライン304が、画像の受けた走査ラインの処理を開始するタイムインスタンスを制御することができる。ライン開始コントローラ310は、選択的に、データパスパイプライン304の一つ以上の部分がカスタムされたオペレーションを行えるようにするように構成される。いくつかの場合においては、ライン開始コントローラ310は、データパスパイプライン304によってフィルタリングオペレーション時に用いられる係数を制御することもできる。
いくつかの実施形態においては、データパスパイプライン304及びライン開始コントローラ310はプログラマブルであることができる。データパスパイプライン304及びライン開始コントローラ310は、様々なタイプのフィルタリングオペレーションがハードウェアアクセラレータ104により行われることができるようにプログラムされることができる。例えば、データパスパイプライン304及びライン開始コントローラ310は、係数セット、閾値等のフィルタリングオペレーションパラメータでプログラムされることができ、これによりカスタムされたフィルタリングオペレーションがハードウェアアクセラレータ104により実行されることができる。フィルタリングオペレーションパラメータは、フィルタカーネルサイズ、係数、拡大率、ゲイン、閾値、ルックアップテーブル、その他の好適なパラメータを含むこともできる。このため、ハードウェアアクセラレータ104は、様々なフィルタリングオペレーションを収容する汎用ラッパー(wrapper)と見なされることができる。
いくつかの実施形態においては、データパスパイプライン304は一つ以上の数値フォーマットで表された数を処理するように構成されることができる。例えば、データパスパイプライン304は、例えば、fp16(IEEE754のような16ビット浮動小数点数フォーマット)である浮動小数点数、整数、固定小数点数、その他の画像処理に好適な数値フォーマットで動作するように設計されることができる。
ハードウェアアクセラレータ104は、データパスパイプライン304が入力データバッファ308からの走査ラインをどのように消費するか、及び、データパスパイプライン304が処理された走査ラインを出力データバッファ312にどのように記憶するかを制御するように構成されることができる。ハードウェアアクセラレータ104は、2つの制御モードのうち一つを実装するように構成されることができる。それは、バッファフィル制御(BFC)(Buffer fill control)モード及び同期モード(synchronous mode)
いくかの実施形態において、BFCモードでは、ハードウェアアクセラレータ104は、フィルイベント(例えば、入力バッファ内に記憶される走査ライン数)の内部カウントを維持するように構成されることができる。ハードウェアアクセラレータ104は、(1)ハードウェアアクセラレータがイネイブル(enabled)され、(2)その入力バッファが十分な走査ラインを有し、かつ(3)その出力バッファ内に処理された走査ラインを記憶するスペースがあるときにその入力バッファからの走査ラインを自律的に処理するように構成されることができる。いくつかの場合において、データパスパイプライン304を動作させるに必要なバッファフィルレベルは、カーネルの高さに依存することができる。例えば、カーネルが3×3であるときは、ハードウェアアクセラレータ104は、フィルタを作用させるため、少なくとも3本の走査ラインを必要とすることができる。
いくつかの実施形態において、同期制御モードでは、ハードウェアアクセラレータ内のフィルタモジュールは、フィルタモジュールに対する開始ビットがオンにされたときに動作するように構成されることができる。開始ビットは、例えば、ソフトウェアモジュールを用いてオンにされることができる。同期制御では、ソフトウェアモジュールは、フィルタモジュールに対する入力バッファが十分な走査ライン数を有し、そのフィルタモジュールに対する出力バッファが、フィルタモジュールから処理された走査ラインを記憶するのに十分なスペースを有しているかを決定するように構成されることができる。一旦、これらの条件が満たされると、ソフトウェアモジュールはフィルタモジュールの開始ビットをオンにすることができる。
いずれのモードでも、一旦、フィルタモジュールが走査ラインを処理すると、そのフィルタモジュールは、バッファ内及び入力画像内での現ラインインデクスを更新する。いくつかの実施形態においては、出力画像が入力画像と同一のサイズを有していないときは、フィルタモジュールは、その上、出力画像内の現ラインインデクスを更新することができる。ラインインデクス(及びバッファフィル制御に対するバッファフィルレベル)の値は、フィルタモジュールの内部状態を表すことができる。この内部状態は、ソフトウェアモジュールによってアクセスされることができ、フィルタモジュールの次の周期での動作の前にフィルタモジュールの内容が切り替わることができるように、記憶、更新及び回復されることができる。
いくつかの実施形態においては、ハードウェアアクセラレータ104内のバッファは、複数のデータプレーンを維持するように構成されることができる。例えば、ハードウェアアクセラレータ104内のバッファは、別々のプレーン内で画像の赤チャネル、緑チャネル、青チャネルを維持するように構成されることができる。いくつかの例においては、ハードウェアアクセラレータ104内のバッファは16までのプレーンをサポートするように構成されることができる。各プレーン内の画像データの走査ラインは、継続的に記憶されることができ、それらの数及びプレーンストライド(plane stride)によってプレーンが規定されることができる。
いくつかの実施形態においては、ハードウェアアクセラレータ104内のフィルタモジュールは、一度に連続して各データプレーンからの走査ラインを処理するように構成されることができる。連続的な処理のため、制御の観点からは、全てのプレーンからの走査ラインは、同一のタイムスタンプを有すると見なされることができる。他の実施形態においては、ハードウェアアクセラレータ104内のフィルタモジュールは、複数のデータプレーンを並列で処理するように構成されることができる。
いくつかの実施形態においては、画像/動画ストリームを処理する前に、又はコンテンツが切り替えられた場合に、フィルタモジュールが適切に構成され、イネイブルされることができる。各フィルタモジュールは、入力バッファ及び出力バッファ構成を規定するソフトウェアプログラマブルなレジスタのセットを含むことができる。
いくつかの実施形態においては、フィルタモジュール内のバッファは、一つ以上の次のパラメータを用いてプログラムされることができる。
・ base:このパラメータは、バッファのベースアドレスを特定することができる。アドレスはバイト境界(例えば、AMCクライアントデータバスの幅)で調整されることができる。
・ nl:スキャンライン数。サーキュラーバッファモードにおいては、このパラメータは、スキャンラインにおけるサーキュラーバッファのサイズを特定することができる。サーキュラーバッファに対する最大走査ライン数は、1023であることができる。しかし、他の上限境界も可能である。バッファがnl=0で構成される場合、バッファが非サーキュラーモードであることを示す。このため、nl=0では、読み出し/書きこみクライアントが、非サーキューラー又は非ラップ(no-wrap)モードでバッファにアクセスする。ここでは、バッファ内の走査ライン数が画像の高さに対応し、サーキュラーバッファポインタラッピング(pointer wrapping)が起きない。
・ ls:ラインストライド。ラインストライドは、例えば、8バイトである、固定バイト数の倍数(a multiple of)であることができる。最大ラインストライドは、予め決められることができる。例えば、最大ラインストライドは、(32MB−8)バイトであることができる。ラインストライド及びライン数は、サーキュラーバッファポインタ演算を行う読み出し/書き込みクライアントに用いられることができる。ラインストライドは、画像の幅よりも大きい又はこれと等しくあることができる。
・ np:プレーン数。このパラメータは、バッファによって表されるプレーン数を示す。np=0であるときは、バッファが非プレーンデータを表すことを示す(たとえば、単一プレーンデータ)。バッファ内のラインバッファストレージ量はプレーン数を乗じることができる。
・ ps:プレーンストライド。プレーンストライドは、例えば、8バイトである、固定バイト数の倍数である。最大プレーンストライドは、予め決められることができる。例えば、最大プレーンストライドは、(32MB−8)バイトであることができる。通常、プレーンストライドは、lsを乗ずるnlよりも大きい又はこれと等しくあることができる。しかし、他のプレーンストライドが可能である。
・ format:バッファデータフォーマット。このパラメータは、バイトで画素データのサイズを特定することができる。例えば、FP16バッファに対しては、画素当たり2バイトを示す、2にフォーマットは設定されることができる。
いくつかの実施形態においては、バッファモジュール内の出力バッファは、次の一つ以上のパラメータを用いてプログラムされることができる。
・ offset:オフセットは、ベースアドレス(及び各ラインの開始)から第一画素までのオフセットを特定することができる。このパラメータは、バイト境界で調整されたバッファの制限に対処する(work-around)のに用いられることができる。オフセットを用いると、出力バッファコンシューマによって、例えば、水平方向の画素パディング(padding)に対して、走査ラインの左側でスペースが予約されることができる。デフォルトのオフセットはゼロである。非ゼロのオフセットが特定される場合、ヌルバイトが、第一出力ピクセルの前の各出力走査ラインに書き込まれることができる。
いくつかの実施形態においては、フィルタモジュールは種々なデータタイプをサポートすることができる。フィルタモジュールによってサポートされる最も一般的なデータタイプは、以下に挙げられる。
・ U8:符号なし8ビット整数データ
・ U8F:符号なし8ビット小数データ。範囲[0,1.0]
・ U16:符号なし16ビット整数データ
・ U32:符号なし32ビット整数データ
・ FP16:半精度(16ビット)浮動小数点
・ FP32:全精度(32ビット)(full-precision)浮動小数点
いくつかの実施形態においては、フィルタモジュールのデータパスパイプラインは、その動作に対して最適化されることができる。つまり、半精度浮動小数(FP16)演算は、高ダイナミックレンジを含むオペレーションに用いられることができ、最適化された固定浮動小数点演算は、高い精度を維持することがより重要である場合に用いられることができる。
いくつかの実施形態においては、FP16演算を用いて実装されたフィルタモジュールは、FP16バッファのみの読み出し/書き込みに制限されなくてよい。U8FバッファがFP16との変換によりアクセスされてもよく、それはフィルタモジュール内で自動的に起きる。
いくつかの実施形態においては、フィルタモジュールがFP16演算を用いて実装された場合、バッファはFP16又はU8Fのいずれかになる。バッファがFP16であるときは、バッファ構成フォーマットは、2に設定されることができる。バッファがU8Fである場合は、バッファ構成フォーマットは1に設定されることができる。FP16データパスパイプラインでのフィルタモジュールに対して、入力バッファフォーマットが1である場合、読み出しクライアントは、処理前にU8F入力データをFP16に自動的に変換することができる。出力バッファフォーマットが1である場合、書き込みクライアントは、ストレージ前にデータパスパイプラインからのFP16をU8Fに変換することができる。
いくつかの実施形態においては、U8Fは、1.0/255を乗ずることによって範囲[0,1.0]内で正規化FP16に変換される。正規化FP16は、255を乗じて、丸めることによってU8Fに変換されることができ、浮動小数点数を8ビットに効率的に量子化する。いくつかの実施形態において、FP16データパスパイプラインでのフィルタモジュールからの出力データは、任意で、正規化範囲[0,1.0]に固定される(clamped)ことができる。U8Fへの変換が有効(enabled)である場合は、正規化範囲への固定は暗黙的に有効であり、上述したU8Fへの変換の前に行われる。FP16データパスパイプラインを用いて実装されたフィルタモジュールは正規化範囲[0,1.0]内のデータを処理するのに制限されず、FP16の全範囲もサポートされることができる。
いくつかの実施形態においては、フィルタモジュールは入力画像内の垂直方向での位置を追跡するように構成される。フィルタモジュールはこの情報を用いて、ライン複製又は反射(reflection)により画像の上端及び下端での垂直方向パディングを行うことができる。垂直方向パディングを行わないフィルタモジュールは、入力画像より小さい出力画像を生成することができるが、いくつかの場合においては望ましくない可能性がある。
いくつかの実施形態においては、フィルタモジュールが垂直パディングを行うように構成されたとき、入力バッファにより維持されることができる最小走査ラインMは、
M=(K>>1)+1
であることができる。ここで、>>は右シフト演算子を示す。画像の上端では、(走査ラインの観点での)入力バッファの容量がMより小さいとき、フィルタリングオペレーションを行うのに十分なバッファ内の走査ラインがない。(走査ラインの観点での)入力バッファの容量がMより大きい又はこれと等しいとき、垂直パディングが行われる場合にデータは処理されることができる。同様に、画像の下端では、最後(K>>1)ラインを処理するときに、フィルタモジュールはラインN−1の複製(又は、ラインN−1及びそれの上方のラインの反射)を行うことができる。
いくつかの実施形態においては、垂直方向パディングはカーネルが偶数次元を有するときに行われる。偶数次元を備えたカーネルに対する垂直方向パディングは、奇数次元を備えたカーネルに対する垂直方向パディングと実質的に同一であることができるが、一つ少ないラインが下端でパディングされるべきであることを除く。
いくつかの実施形態においては、フィルタモジュールは、水平方向パディングを行うことができる。画素カーネルの水平方向パディングは、データが入力バッファから読み出され、画素カーネルレジスタに書き込まれるときに行われることができる。そのフィルタモジュールは、現ラインでの位置及びラインの開始と終了を知っていることができる。このため、有効な画素カーネルレジスタは、有効データを保持しないものに複製されることができる。垂直パディングのように、水平方向パディングが行われるか否かは、所与のフィルタモジュールの特定の機能及び要件に依存する可能性がある。
いくつかの実施形態において、サーキュラーバッファモードにおいては、フィルタモジュールはその入力バッファから一本の走査ラインを処理して、処理された走査ラインをその出力バッファに書き込むように構成されることができる。このオペレーションセットは、フィルタ動作(filter run)として参照されることができる。
いくつかの実施形態においては、フレキシビリティについて、フィルタ動作が制御される2つの異なる制御メカニズムが提供されることができる。一つ目のメカニズムにおいては、バッファフィルコントロールと呼ばれ、フィルタモジュールはその現バッファのフィルイベントを追跡することができ、それ自身において、それが動作することができるか否かを決定することができる。このアプローチは、事実上、非同期である。フィルタモジュールは、要求された条件が満たされる限り、場合により繰り返し動作することができる。レジスタ内に制御ビットが提供されて、ソフトウェアは、走査ラインが入力バッファに加えられた又は出力バッファから除かれたときにフィルタモジュールに知らせることができる。走査ラインが入力バッファに加えられたときは、フィルレベルは上げることができる。走査ラインが出力バッファから除かれたときは、フィルレベルは下げることができる。このモードにおいては、フィルタモジュールは、入出力バッファとまとめて、走査ラインがエントリを占有し、走査ライン数により構成されるFIFOの深さを備えた、入出力バッファについてプログラムされたFIFOとして捉えられることができる。
いくつかの実施形態においては、フィルタモジュールの入力バッファがフルでない場合には、他のフィルタモジュールがFIFOに走査ラインを加えることができる。他のフィルタモジュールが入力バッファに走査ラインを加えるのを許可する前に、ソフトウェアは入力バッファのフィルレベルをチェックする。それに続いて、ソフトウェア又はフィルタモジュールは入力バッファに関連したフィルレベルを上げることができる。出力側では、出力バッファのフィルレベルを下げる前に(例えば、フィルタの出力バッファ内のラインが他のフィルタがより処理された後、FIFOを読み出す等)、ソフトウェアは出力バッファのフィルレベルをチェックする、又はフィルタモジュールが新たな走査ラインをその出力バッファに加えたことを示す割り込みイベントに応答することができる。
二つ目のメカニズムは、同期モードと呼ばれ、ソフトウェアに依存して、各フィルタ動作の予定を明確に立てる。各フィルタモジュールについての開始ビットが、ソフトウェアが書き込むことができるレジスタ内に提供されることでフィルタ動作を即座に開始する。このメカニズムによって開始されると、フィルタモジュールは厳密に一度だけ実行されることができる。
いくつかの実施形態においては、フィルタモジュールは、それが割り込み要求を受けたときに中断されることができる。いくつかの場合においては、外部の割り込み要求ラインにマップされ、中断コントローラにより転送される(routed)複数の割り込み要求ソースを有することができる。フィルタモジュールが割り込みにフラグを立てて、その割り込みが使用可能であるときは、対応する外部割り込み要求ラインがフラグ付けされることができる。
いくつかの実施形態においては、複数の割り込み要求ソースは、
・ 入力バッファのフィルレベルのデクリメント割り込み
・ 出力バッファのフィルレベルのインクリメント割り込み
・ フレーム完了(frame done)割り込み
出力バッファのフィルレベルのデクリメント割り込みは、フレームモジュールが、同期モードで作用するように構成されているとき、フィルタモジュールがそのフィルタ動作を完了したことを示すものとみなされることもできる。
いくつかの実施形態において、ハードウェアアクセラレータ104は、深度情報に基づいたフィルタリングオペレーションを適用することができる。例えば、ハードウェアアクセラレータ104は、30ヤードよりも離れた物体に関連付けられた画素のみを条件的にぼやかす、又は5ヤードを超える画素は、10ヤードを超える画素よりも少なめにぼやかされるようにする等となるように構成されることができる。
図4は、いくつかの実施形態に従う、深度情報に基づいたフィルタリングオペレーションを適用することができるハードウェアアクセラレータを示す。深度認識ハードウェアアクセラレータ402は、図3のハードウェアアクセラレータのモジュール内のモジュールに加えて、深度マップ読み出しクライアント404と、深度マップモジュール406と、を含む。深度マップ読み出しクライアント404は、対応する画像内の画素で表される物体の深さを示す深度マップを受けるように構成される。例えば、ラインバッファ読み出しクライアント308は、画像の走査ラインを受け、深度マップ読み出しクライアント404は、その画像の走査ラインに対応する深度マップを受けるように構成されることができる。
それに続いて、深度マップ読み出しクライアント404は、深度マップを深度マップモジュール406に提供することができる。深度マップの解像度が画像の走査ラインの解像度よりも低いときは、深度マップモジュール406は、深度マップをアップサンプルして、深度マップの解像度と走査ラインの解像度とを合致させるように構成されることができる。深度マップが画像の走査ラインと時間的に同期していないときは、深度マップモジュール406は、深度マップと走査ラインとを同期させるように構成されることができる。それに続いて、深度マップモジュール406は、ライン開始コントローラ310がデータパスパイプライン304の動作を制御することができるように、処理された深度マップをライン開始コントローラ310に提供することができる。より一般的には、演算機能は、比較器を用いた、画素位置での深さと一つ以上の閾値との比較に基づく、あるいは、バイパスマルチプレクサを用いて出力される比較器の代わりに適用されることができる各画素に関連したバイナリ制御ビットをもちって直接的に、のいずれかによって条件的に適用されることができる。
伝統的には、画像処理オペレーションのためのハードウェアアクセラレータは、予め定められた順序でアレンジされたハードワイヤードの画像信号処理(ISP)機能の固定セットを含んでいた。図5は、伝統的なハードウェアアクセラレータを示す。伝統的なハードウェアアクセラレータ500は、メモリデバイス504から画像を受け、設計時に予め定められた順序のISP機能502A〜502Hを用いて受けた画像を処理する。図5に示された例においては、ハードウェアアクセラレータ500は図示された順序の8つのISP機能を用いて、受けた画像を処理する。このアプローチは、かなり非フレキシブルであり、ハードウェアアクセラレータ500が用いられることができる用途領域を限ってしまう。画像センサ技術は、高速に進展し、現在及び詳細の全てのセンサに対して単一の固定のISPパイプラインを用いることを予測するのは難しい。さらに、ISP機能が複数の走査ラインについてのフィルタを作用させるときは、ISP機能はバッファ内に、十分な数の走査ラインが存在するまで到来する走査ラインを記憶しなくてはならない。これらのバッファは、代表的には、画像の解像度に従ったサイズのRAMデバイスを用いて実装される。そして、バッファのサイズは、ハードウェアアクセラレータ500の設計時に予め定められる。このため、ISPに対するバッファは、ハードウェアアクセラレータ500により扱われることのできる画像の解像度に厳しい制約を効果的に課す可能性がある。追加的に、バッファはISP機能にプライベートなものであるため、バッファは、他の状況(例えば、ソフトウェアによって)で用いられることができず、大量のダイ(die)領域を消費する可能性がある。
いくつかの実施形態においては、ハードウェアアクセラレータ104は、汎用的で主要なISP機能をつなぐことによって、伝統的なハードウェアアクセラレータの非フレキシブル性に対処する。しばしば、ハードウェアアクセラレータの間の違いはハードウェアアクセラレータにより実装されたISP機能の機能性にはあまりなく、ISP機能が呼び出される順序(及び、いくつかの場合においては、回数)にある。このため、ハードウェアアクセラレータ104は、効率的に実装された一つ以上の汎用的で主要なISP機能モジュールをつなぐことによって所望の機能を行うように構成されることができる。
例えば、畳み込みオペレーションは掛け算及び足し算として表されることができる。同様に、有限インパルス応答(FIR)フィルタリングオペレーションも掛け算及び足し算として表されることができるが、FIRフィルタリングオペレーションが掛け算及び足し算を行う順序は、畳み込みオペレーションのものとは異なり得る。畳み込みオペレーションとFIRフィルタリングオペレーションとの間には違いがあるにもかかわらず、掛け算オペレーション及び足し算オペレーションは、畳み込みオペレーション及び有限インパルス応答オペレーションに対して主要な機能である。このため、ハードウェアアクセラレータ104は、同一の掛け算モジュール及び同一の足し算モジュールを用いて、畳み込みオペレーション及び有限インパルス応答フィルタリングオペレーションを行うように設計されることができる。
いくつかの実施形態においては、汎用的で主要な機能が呼び出される順序はソフトウェアを用いて決定されることができる。例えば、ソフトウェアは、ハードウェアアクセラレータをプログラムして、掛け算モジュール及び足し算モジュールを呼び出し、その掛け算モジュール及びその足し算モジュールを異なる順序でつなぐことによって、畳み込みオペレーション又はFIRフィルタリングオペレーションのいずれかを行うことができる。
図6は、いくつかの実施形態に従う、汎用機能に基づいたハードウェアアクセラレータを図示する。ハードウェアアクセラレータ104は、複数の汎用ISP機能モジュール602A〜602Hと、処理のための画像の一本以上の走査ラインを受けるデータ受信モジュール604と、一つ以上の汎用ISP機能モジュール602A〜602Hにより処理された一本以上の走査ラインを出力するデータ出力モジュール606と、を含む。いくつかの実施形態においては、一つ以上の汎用ISP機能モジュール602A〜602Hは、構成レジスタ及び制御レジスタを含むことができる。これらのレジスタに対する値は、ソフトウェアを用いて制御されることができる。いくつかの実施形態においては、複数の汎用ISP機能モジュール602A〜602Hはデータパスパイプライン304の一部であることができる。
いくつかの実施形態においては、汎用ISP機能モジュール602A〜602Hの一つ以上は、直接メモリアクセス(DMA)能力も含む自己完結型のハードウェアフィルタを含むことができる。汎用ISP機能モジュール602A〜602Hの一つ以上は、DMA能力を用いて、メモリファブリック106内のメモリスライスからデータを読み込む又はこれにデータを記憶することができる。DMA能力はソフトウェアを用いて制御されることができる。
いくつかの実施形態においては、データ受信モジュール604は、画像の一本以上の走査ラインを読み込む(retrieve)DMAモジュールを含むことができる。他の実施形態においては、データ受信モジュール604は、MIPIモジュール等のセンサインタフェースモジュールを含むことができる。いくつかの実施形態においては、データ出力モジュールは、画像の一本以上の処理された走査ラインを記憶するDMAモジュールを含むことができる。他の実施形態においては、データ出力モジュール606は、ディスプレイデバイスを含むことができる。
いくつかの実施形態においては、ハードウェアアクセラレータ102は、ISPテーブルを含むメモリファブリック106に結合されることができる。ISPテーブルは、一つ以上のバッファ608を含むことができる。各バッファは、汎用ISP機能モジュール602A〜602Hの一つへのポインタを含むことができる。メモリファブリック106はマルチポートの共通(又は単一)メモリを有することができるので、複数のデバイスがISPテーブル内の一つ以上のバッファ608にアクセスして、利用可能な汎用ISP機能モジュールを特定することができる。
いくつかの実施形態において、プロセッサ610上で動作するソフトウェアISP機能612A〜612Cは、ハードウェアアクセラレータ102内の一つ以上の汎用ISP機能モジュール602A〜602Hを実行するように設計されることができる。例えば、ソフトウェアISP機能612Aは、(1)所望の機能を行うために実行される汎用ISP機能モジュール602A〜602Hのリストと、(2)その汎用ISP機能モジュール602A〜602Hのリストが実行されるべき順序と、を決定することができる。次いで、ソフトウェアISP機能612Aは、汎用ISP機能モジュール602A〜602Hのリストに対応する一つ以上のバッファ608を用いて、汎用ISP機能モジュールをつなぎ、これにより、所望の機能を行う。基本的には、ハードウェアアクセラレータの機能は、ISPテーブル内のバッファ608の検索においてソフトウェアにより決定されることができる。
いくつかの実施形態においては、ISP機能モジュールの入力インタフェースは、小さいメモリマップ先入れ先出し(FIFO)バッファを用いて他のISP機能モジュールの出力インタフェースに直接的に結合されることができる。図7は、いくつかの実施形態に従う、ISP機能モジュール間の通信のためのFIFOバッファを含むハードウェアアクセラレータを図示する。ISP機能モジュール602は、メモリバスインタフェース702に結合されることができ、そのメモリバスインタフェースが今度はFIFOバッファ704及びメモリファブリック106に結合される。
第一ISP機能モジュール602Aが画像の走査ラインについての処理を完了したときは、第一ISP機能モジュール602Aは処理された走査ラインをFIFOバッファ704内に記憶することができる。第一ISP機能モジュール602Aは追加の走査ラインを引き続き処理するので、第一ISP機能モジュール602Aは、FIFOバッファ704がフルとなるまでは、処理された走査ラインをFIFOバッファ704に引き続き記憶することができる。FIFOバッファ704がフルであるときは、第一ISP機能モジュール602Aは、FIFOバッファ704がフルでなくなるまでストールされることができる。その間、第二ISP機能モジュール602Bが、FIFOバッファが空となるまで、さらなる処理のためにFIFOバッファ704から、処理された走査ラインを回収する。実際には、第一ISP機能モジュール602Aはデータのプロデューサ−とみなされることができ、第二ISP機能モジュール602Bはデータのコンシューマとみなされることができ、FIFOバッファ704は調停人とみなされることができる。第二ISP機能モジュール602Bは、FIFOバッファ704から、処理された走査ラインを回収することができる。そのFIFOバッファは、メモリファブリック106内のメモリスライスと比較して待ち時間が短く、FIFOバッファ704はISP機能モジュール602のつなぎの待ち時間を短くすることができる。
いくつかの実施形態においては、コンピュータデバイス100は、複数のパワーアイランドを含むことができる。各パワーアイランドは、専用電力ドメインに関連付けられることができる。このため、各パワーアイランドの電力供給電圧は独立して制御されることができる。例えば、コンピュータデバイス100はあるオペレーションを行うのにどのパワーアイランドが必要とされるかを決定することができ、必要とされるそのパワーアイランドのみの電力供給電圧をオンにする。このようにし、コンピュータデバイス100は、漏れ電力消費を低減することができる。
いくつかの実施形態においては、コンピュータデバイス100は、あるパワーアイランドが現在、低電力モードにあり(例えば、電力供給電圧が提供されていない)、そのパワーアイランドが特定のオペレーションに必要であると決定すると、コンピュータデバイス100は、そのパワーアイランドのための起動(power-up)シーケンスを呼び出して、そのパワーアイランドに電力供給電圧を提供することができる。
いくつかの実施形態においては、各ベクトルプロセッサは、固有の(unique)パワーアイランドに関連付けられることができる。いくつかの実施形態においては、ハードウェアアクセラレータ104は、固有のパワーアイランドに関連付けられることができる。いくつかの実施形態においては、メモリファブリック106は、固有のパワーアイランドに関連付けられることができる。いくつかの実施形態においては、周辺デバイス108は、固有のパワーアイランドに関連付けられることができる。
いくつかの実施形態においては、コンピュータデバイス100は、イネイブル信号をパワーアイランドに提供することによって、起動シーケンスを呼び出すことができる。それに続いて、イネイブル信号は、電力供給電圧とパワーアイランドとの間に位置するスイッチを閉じることができ、それにより、電力供給電圧をパワーアイランドに提供する。このオペレーションは、電力供給ゲーティングと呼ばれることがある。
図8は、いくつかの実施形態に従う、パワーアイランドの電力供給ゲーティングを図示する。図8は、パワーアイランド802を示す。そのパワーアイランドは、入力データを処理する回路ブロックと、パワーアイランド802に電力供給電圧又はグラウンド信号を提供するための一つ以上のスイッチ804A〜804Bと、パワーアイランド802が入力データを処理する準備が整うまで入力データを保持する入力レジスタ806と、を含むことができる。いくつかの実施形態においては、入力レジスタ806が有効信号生成器808から、パワーアイランド802が入力データを処理する準備が整ったことを示す有効信号を受けたときは、パワーアイランド802に入力データを提供するようにトリガされる。
いくつかの実施形態においては、コンピュータデバイス100は、パワーアイランドの電力供給電圧が適切な動作電圧に達したことを示す有効信号を生成するように構成される。有効信号は、パワーアイランド内の回路が所望のオペレーションを行うのに用いられることができるタイムインスタンスを示すことができる。有効信号は有効信号生成器808によって生成されることができる。
有効信号生成器808は、タイマを用いて有効信号を生成することができる。例えば、有効信号生成器808は、イネイブル信号がパワーアイランドに印加されたタイムインスタンスを決定し、タイマを用いて予め決められた量の時間待機し、次いで有効信号を生成する。しかし、設計時にその予め決められた量の時間を決定することは難しい。これは、パワーアイランドの電力供給電圧を上昇させるにかかる時間の量は、プロセス−電圧―温度(PVT)変化次第であるからである。PVT変化に対処するためには、最悪のPVTコーナー(corners)を包含する予め決められた量の時間が伝統的に設定されることが多く、起動シーケンスに不必要に待ち時間を加えてしまう可能性がある。
この問題に対処するため、いくつかの実施形態においては、有効信号生成器808は有効信号を適応的に生成するように構成されることができる。より詳細には、パワーアイランドは、パワーアイランドに提供されるイネイブル信号を適応的に遅らせることによって有効信号を生成するように構成されることができる。
図9は、いくつかの実施形態に従う有効信号生成器を図示する。有効信号生成器808は、複数の電力スイッチを含むことができる。その複数の電力スイッチは、その複数の電力スイッチに結合された論理セルに電力供給電圧を提供するように構成される。いくつかの実施形態においては、電力スイッチは各論理セルの一部であることができる。例えば、電力スイッチは正の供給に直列に存在する一つ以上のPチャネルデバイス及び/又は負の供給(グラウンド)に直列に存在する1つ以上のNチャネルデバイスを含むことができる。これらの電力スイッチ、パワーアイランドを備える論理ブロックのいたるところに分散されていることができる。図9においては、簡潔性のため、N及びPチャネル電力スイッチは、各論理セルに関連付けられた単一の電力スイッチブロックとして示されている。
いくつかの実施形態において、有効信号生成器808は電力スイッチの連鎖にイネイブル信号に印加し、イネイブル信号が電力スイッチの連鎖の最後に到達するまで待機することができる。一旦、イネイブル信号が電力スイッチの最後に到達すると、パワーアイランドの全ての論理セルが適切にパワーオンされることが保証される。このため、有効信号生成器808は、電力スイッチの連鎖により遅延したイネイブル信号を有効信号として用いることができる。この自己キャリブレーションメカニズムは、特定のコンピュータデバイスの任意の処理−電圧−温度(PVT)変化を適応的に捉えることができる。このように、コンピュータデバイスは、パワーアイランドが起動するために不必要に長い時間待つ必要はない。コンピュータデバイスは、パワーアイランドを適切に起動するのに必要な時間の量だけを待つことができる。
いくつかの実施形態においては、パワーアイランドは常時パワーオンであることができる。言い換えると、パワーアイランドは、電力供給電圧が供給されない低電力モードに入らないように設計されることができる。そのようなパワーアイランドは、常時オンパワーアイランドと呼ばれることができる。
いくつかの実施形態においては、常時オンパワーアイランドは外部信号を監視するのに用いられることができる。例えば、常時オンパワーアイランドは、汎用入出力(GPIO)ピン、外部インタフェース及び/又は低周波タイマ又は電力オンリセット等の内部機能ブロックからの信号を監視するのに用いられることができる。このように、コンピュータデバイス100は、外部信号を分析し、外部信号に応答するため一つ以上のパワーアイランドが起動される必要があるか否かを決定し、外部信号に応答するのに必要とされるパワーアイランドのみを適応的に起動することができる。
図10は、いくつかの実施形態に従うイベント信号監視メカニズムを図示する。図10は、常時オンパワーアイランド802及び電力管理モジュール110を示す。常時オンパワーアイランド802は、周辺デバイス108に対する電力ドメインを含むことができる。常時オンパワーアイランド802は低電力モードに入らないので、常時オンパワーアイランド802内の周辺デバイス108は、コンピュータデバイス100のクロックとは非同期の信号を監視することができる。周辺デバイス108が、コンピュータデバイス100が応答するべきイベント信号を検出したときは、周辺デバイス108は電力管理モジュール110に警告を出すことができる。今度は、電力管理モジュール110は、コンピュータデバイス100内のどのパワーアイランドの一つがオンされるべきかを決定することができる。それに続いて、電力管理モジュール110は一つ以上のパワーアイランドがパワーオンされるようにすることができる。
いくつかの実施形態においては、周辺デバイス108は、ソフトウェア定義インタフェースを含むことができる。そのソフトウェア定義インタフェースの機能は、ソフトウェアを用いて定義されることができる。より詳細には、周辺デバイス108は、SPI、I2C、I2S、その他の好適なプロトコル等の標準インタフェースプロトコルの機能をエミュレートすることができるインタフェースプロトコルエミュレーション(IPE)を含むことができる。周辺デバイス108が、一つの特定インタフェースプロトコルにそれぞれ専用の複数のインタフェースを維持する代わりに、複数のインタフェースプロトコルに対応するようにプログラムされることができる単一ソフトウェア定義インタフェースのみを維持することができるため、ソフトウェア定義インタフェースは有益である。単一ソフトウェア定義インタフェースは、複数の専用インタフェースに比べてかなり少ないダイ領域を消費することができるので、単一ソフトウェア定義インタフェースは、インタフェースに関連付けられたコストを劇的に低減することができる。
図11は、いくつかの実施形態に従うソフトウェア定義インタフェースを示す。図11は、汎用入出力(I/O)インタフェース1104と、IPEモジュール1106と、コンピュータデバイス100のための内部バス1108と、を含むソフトウェア定義インタフェースを示す。汎用入出力インタフェース1104は、センサ、カメラモジュール等の外部デバイスと通信するためのインタフェースを含むことができる。
I/Oインタフェース1104の機能は、IPEモジュール1106を用いて構成されることができる。例えば、I/Oインタフェース1104がI2Cインタフェースとして動作すべきとIPEモジュール1106が決定したときは、IPEモジュール1106はI/Oインタフェース1104をプログラムして、外部デバイスとの通信のためのI2Cインタフェースプロトコルを用いることができる。いくつかの実施形態においては、IPEモジュール1106は、ソフトウェアを用いてプログラムされることができる。IPEモジュール1106がI/Oインタフェース1104を構成して、SPI、I2C、I2S、その他の好適な標準のもの等の標準インタフェースプロトコルを実施することができるように、IPEモジュール1106はプログラムされることができる。
図12は、いくつかの実施形態に従うソフトウェア定義インタフェースの詳細な実装を示す。ソフトウェア定義インタフェース1102は、汎用入出力(GPIO)インタフェース1202と、そのレジスタ1204と、を含むことができる。ホストプロセッサは、GPIOレジスタ1204内のビットを設定することによって、GPIO1202の動作を制御することができる。GPIO1202は、I/Oインタフェース1104内のいくつかのピンを制御して、加速度計、環境光センサ、音響センサ等の外部デバイスと通信することができる。
ソフトウェア定義インタフェース1102は、IEPモジュール1106と、そのレジスタ1206と、を含むこともできる。ホストプロセッサは、IPEレジスタ1206内のビットを設定することによって、IPEモジュール1106の動作を制御することができる。IPEモジュール1106は、(1)ソフトウェア定義インタフェース1102により実装されるインタフェースプロトコル及び(2)そのインタフェースプロトコルを実装するのに用いられるI/Oインタフェースピンを決定するように構成されることができる。一旦、IPEモジュール1106がインタフェースプロトコルを実装するのに用いられるI/Oインタフェースピンを決定すると、IPEモジュール1106は、IPEモジュール1106に対して選択されたI/Oインタフェースピンを多重化するマルチプレクサ1208に制御信号を送ることができる。IPEモジュール1106は、インタフェースプロトコルに従って、制御信号及びデータをI/Oインタフェースピンに送信させることによって、I/Oインタフェースピンがインタフェースプロトコルをエミュレートするようにさせる。
いくつかの実施形態においては、タイマ1214及び/又はプレスケーラ1216は、高周波基準信号(例えば、数百メガヘルツの範囲内)を低周波クロック(例えば、数百キロヘルツの範囲内)に変換して、IPEに十分なクロック信号を提供するのに用いられることができる。いくつかの実施形態においては、プレスケーラ1216からの出力クロックの周波数に整数値を乗じて所定のインタフェースをエミュレートする。例えば、プレスケーラ1216の出力クロックが500kHzで動作するときは、プレスケーラ1216からの出力クロックの周波数に3を乗じてI2Cインタフェースをエミュレートする。このように、500kHzクロックは、IPEロジックを動作させ、I/Oピンに接続された出力レジスタをサンプルするのに用いられることができる。
いくつかの実施形態においては、周辺デバイス108内のIPEモジュール1106は、I/Oインタフェース1104の入力ピンと出力ピンとの間のバイパスを行うことができ、それにより、実際に処理ユニットを起動することなく、コンピュータデバイス100の一方側の入力及びコンピュータデバイス100の他方側の出力をエミュレートする。これにより、コンピュータデバイス100にI2Cを介して接続される加速度計等の第一外部デバイスが、コンピュータデバイス100の処理ユニットを起こすことなく、アプリケーションプロセッサSoC等の第二外部デバイスと通信することができる。
ソフトウェア定義インタフェース1102は、イベントプロセッサ1210と、そのレジスタ1212と、を含むこともできる。イベントプロセッサ1210は、外部信号を受信して、コンピュータデバイス100が応答するべき任意のイベントを検出する。イベントプロセッサ1210の機能は、EPレジスタ1212を用いて構成されることができる。いくつかの実施形態においては、一旦、イベントプロセッサが応答するイベントを検出すると、イベントプロセッサ1210は、そのイベントに応答するのに必要な、ベクトルプロセッサ102、ハードウェアアクセラレータ104及び/又はメモリファブリック106を決定し、その決定されたベクトルプロセッサ102、ハードウェアアクセラレータ104及び/又はメモリファブリック106に関連付けられたパワーアイランドに電力イネイブル信号を送る。
図13は、いくつかの実施形態に従うイベントプロセッサを図示する。上述したように、イベントプロセッサ1210は、外部デバイスと通信し、外部デバイスから信号を受信することができる。信号は、音響サンプル、加速度計値、環境光センサ値又はGPIO等の通信インタフェースを介して提供されることができる他の入力を含むことができる。イベントプロセッサ1210は、受信した信号を特定の構成と比較して、イベント又はイベントシーケンスを理解するように構成されることができる。一旦、イベントプロセッサ1210がイベント又はイベントシーケンスを理解すると、イベントプロセッサ1210は、低電力モードから起き、オペレーションを開始するようにコンピュータデバイス100内の一つ以上コンポーネントにさせることができる。
いくつかの実施形態においては、イベントプロセッサ1210は、一つ以上のフィルタ1302A〜1302Nを含むことができる。イベントフィルタ1302は、インタフェース1104から入力信号を受け取るように構成され、特定のイベントが起きたか否かを決定する。特定のイベントが起きた場合は、イベントフィルタ1302は、コンピュータデバイス100内の複数のパワーアイランドの一つに、制御信号及び/又はパワーアイランドイネイブルを送ることができる。
図14は、いくつかの実施形態に従うイベントフィルタの実装を示す。イベントフィルタ1302は、レジスタ1402と、比較器1404と、ブーリンアンオペレータ1406と、を含むことができる。イベントフィルタ1302は、イベントプロセッサ制御レジスタ1212及びタイマ1214を介して制御されることができる。
入力レジスタ1402は、一つ以上の外部デバイスから入力信号を受信し、受信された入力信号を比較器1404のバンクに提供するように構成されることができる。比較器1404は、ブーリアン、整数、固定小数及び浮動小数の表現を含む幅広い入力信号の表現をサポートするように構成されることができる。
次いで、比較器1404からの出力は、特定のイベント又はイベントシーケンスが起きたか否かを決定するために、EPタイマ1214からのタイマ値に基づいて論理的に組み合わせられることができる。いくつかの場合においては、比較器の出力間の特定の関係が予め定められた期間で持続するときは、特定のイベント又はイベントシーケンスが起きたと見なされる。一旦、イベントフィルタ1302が、特定のイベント又はイベントシーケンスが起きたと決定すると、イベントフィルタ1302はベクトルプロセッサ102、ハードウェアアクセラレータ104、周辺デバイス108に結合された外部デバイス等の、コンピュータデバイス100内の他のコンポーネントを制御する制御信号を出力することができる。
イベントプロセッサ1210は、ユーザが電子デバイスの使用を開始したイベントを検出するように構成されることができる。それに続いて、イベントプロセッサ1210は、コンピュータデバイス100内のコンポーネントをオンにして、スタートアップイベントに応答することができる。例えば、イベントプロセッサ1210は、電子デバイスがポケットから取り出されたことを示す、環境光における変化を検出するように構成されることができる。環境光が数ミリ秒以上にわたって高いレベルのままであるときは、イベントプロセッサ1210は音響入力をチェックして、入力音響信号に変化があるか否かを決定することができる。イベントプロセッサ1210が入力音響信号における変化を検出したときは、イベントプロセッサ1210は、コンピュータデバイス100内のデジタル信号プロセッサが音声指示を検出できるようにすることができる。このように、イベントプロセッサ1210により、コンピュータデバイス100内のコンポーネントは低電力モードを維持し、イベント又はイベントシーケンスが起きたときのみオペレーションを行うことができる。このため、イベントプロセッサ1210はコンピュータデバイス100の平均的な待機電力を著しく低減することができる。
図15は、いくつかの実施形態に従う、周辺デバイスのバイパスモードを示す。図15においては、コンピュータデバイス100は、一つ以上のパワーアイランドが低電力モードにある(例えば、一つ以上のパワーアイランドに電力供給電圧が印加されていない)低電力モードにあることができる。この場合、IPEモジュール1106が、入力MIPIレーン1502と出力MIPIレーン1504等、I/Oインタフェース1104の入力ピンと出力ピンとの間のバイパスを行うように構成されることができる。この例において、入力MIPIレーン1502は、カメラモジュールに結合され、出力MIPIレーン1504はアプリケーションプロセッサに結合される。このため、カメラモジュールは、低電力モードにある一つ以上のパワーアイランドを実際に起こすことなくアプリケーションプロセッサに結合されることができる。
いくつかの実施形態において、異なるインタフェースプロトコルに対する周辺デバイス108は、コンピュータデバイス100の物理ピン(又はパッド)を共有することができる。例えば、周辺デバイス108は、第一通信プロトコルのための第一インタフェースと、第二通信プロトコルのための第二インタフェースと、を含むことができる。第一インタフェース及び第二インタフェースは、周辺デバイス108に専用のI/Oピンの数が低減されることができるように、物理的I/Oピンを時分割多重にするように構成されることができる。いくつかの場合において、周辺デバイス108は、第一及び第二インタフェース内の信号と物理ピンとの間のマッピングを含むテーブルを含むことができる。
コンピュータデバイス100が、カメラ、ディスプレイ等のMIPIデバイスの範囲又はアプリケーションプロセッサ若しくはコンピュータデバイス100がカメラとして表れる他のデバイスに接続されるアプリケーションにおいては、コンピュータデバイス100の構成は、MIPIインタフェースブロック及びこれに関連するピンの数の観点について、設計時にはわからない可能性がある。この理由のため、特定のMIPI使用ケースをサポートするのに必要とされるMIPI入力及び出力の数がソフトウェアを介してランタイムで構成されることができるように、MIPI I/Oピンのセットを、複数のプログラマブルMIPI I/Oプロトコル制御ブロックに接続することが有利である。
図16は、いくつかの実施形態に従うプログラマブルMIPIインタフェースを示す。プログラマブルMIMPインタフェース1600は、図15に関して図示されるように、MIPIメディアアクセス制御(MAC)プロトコルブロック1602と、MIPI送信機1604と、MIPI受信機1606と、MIPI送信機1604又はMIPI受信機1606のいずれかからの信号をチャネルするように構成されたマルチプレクサ1608と、差動MIPI I/O パッド1612の極性を変更するように構成されたMIPI極性スイッチ1610と、バイパスマルチプレクサ1614と、I/Oインタフェース1104の入力ピンと出力ピンとの間のバイパスを行うバイパスバッファ1616と、を含むことができる。
いくつかの実施形態においては、MIPI MACプロトコルブロック1602は、MIPI送信機1604及び/又はMIPI受信機1606のオペレーションがMIPIプロトコルに準拠する(conforms with)ようにMIPI送信機1604及び/又はMIPI受信機1606のオペレーションを制御するように設計される。
いくつかの実施形態においては、プログラマブルMIPIインタフェース1600により、MIPI送信機1604又はMIPI受信機1606の一つのみが特定のタイムインスタンスでMIPI I/Oパッド1612を介して通信することができることを可能にする。例えば、プログラマブルMIPIインタフェース1600は、MIPI送信機1604又はMIPI受信機1606の一つのみをマルチプレクサ1608を介してMIPI I/Oパッド1612と結合することができる。このように、外部デバイスに対して、MIPI I/O パッド1612は両方向MIPIインタフェースと見なされることができる。
いくつかの実施形態においては、プログラマブルMIPIインタフェース1600は、MIPI極性スイッチ1610を用いて、差動MIPI I/Oパッドの極性を反転させることができる。これにより、ネットワークなしでの外部PCB設計における、よりよいインピーダンスマッチングを達成する、又はエラーを訂正するように差動MIPI I/Oパッドの極性が、ランタイムで反転させられることができる。図17は、いくつかの実施形態に従って、入出力インタフェースのための極性反転メカニズムの適用を図示する。図17は、MIPI I/Oパッドのための極性反転メカニズムの適用を図示するが、極性反転メカニズムは、信号ラインの差動対を用いる様々な他のインタフェースにおいて用いられることができる。
いくつかの実施形態において、図15に関して概して上述されているように、プログラマブルMIPIインタフェース1600は、コンピュータデバイス100の処理ユニットが起動されることを必要とせずに、MIPI I/Oパッド1612が出力に接続されることを可能にするMIPIマルチプレクサ1614及びバッファ1616を提供することにより、低電力MIPIバイパスモードを提供することができる。この特徴は、複数のカメラがコンピュータデバイス100に接続されて、他の場合においては、コンピュータデバイス100は必要とされず、アプリケーションプロセッサが同一のセンサセットを用いて静止画又は動画のキャプチャを行うとともに、コンピュータビジョンタスクを実行するモードにおいて望ましい。内部MIPIマルチプレクサ1614を用意しておくことにより、そのような使用ケースは外部コンポーネントを用いるのではなく内部バイパスマルチプレクサ1614を介してサポートされることができ、チップが組み込まれるPCBのコスト及び複雑性をかなり簡潔にすることができる。
いくつかの実施形態においては、メモリファブリック106は、空間的及び時間的な局所性のいずれもの観点から、データを局所的に利用するように設計されたキャッシュメモリを含むことができる。コンピュータデバイス100が外部メモリデバイスに結合されていないときは、メモリファブリック106により、ベクトルプロセッサ102及びハードウェアアクセラレータ104は、汎用メモリデバイスとしてキャッシュメモリを用いることができる。いくつかの実施形態においては、キャッシュメモリは複数のセクションに分割される。各セクションは、複数のベクトルプロセッサの一つ又は複数のハードウェアアクセラレータの一つにより排他的に用いられるようになっている。
いくつかの実施形態においては、メモリファブリック106は、コンピュータデバイス100が節電モードにあるときに、コンピュータデバイス100の状態情報を保持するように構成される。このように、コンピュータデバイス100は再び切り替えられるときに、コンピュータデバイス100は、「起動(wake-up)」プロシージャに関連した遅延が低減されるように、状態情報を適切なデバイス再分配することができる。
いくつかの場合においては、状態情報はキャッシュメモリに保持(maintained)される。そのような場合においては、状態情報を記憶するキャッシュメモリは、コンピュータデバイス100が節電モードに入ったときでさえもパワーオンされていることができる。状態情報は、ブート時又はランタイム中にロードされるアプリケーションのバイナリを含む。状態情報は、ブート時又はランタイム中にロードされる、それ以外の場合は、外部不揮発性メモリに記憶され、停止又は起動シーケンスのイベントの際に読み出される、レジスタ設定、動作モード、パイプライン構成、ラインタイム環境設定等の設定情報を含むこともできる。状態情報は、画像データ等のデータ及び他のセンサからの値を含むこともできる。状態情報は、外部不揮発性メモリに記憶され、停止又は起動シーケンスのイベントの際に読みされる必要がある、コンピュータデバイス100と他のシステムコンポーネントとの間の通信プロトコルの状態を含むこともできる。
いくつかの実施形態においては、メモリファブリックは、ハードウェアベースの相互排他的(ミューテックス)コントローラ206を含むことができる。図18は、いくつかの実施形態に従うハードウェアベースのミューテックスコントローラを含むメモリファブリックを図示する。図18は、複数の処理ユニット1802A〜1802P、メモリファブリック106及びミューテックスコントローラ206を示す。処理ユニット1802は、ベクトルプロセッサ102又はハードウェアアクセラレータ104を含むことができる。ミューテックスコントローラ206は、データ要素を共有する処理ユニット1802のマルチタスクをコーディネートするように構成された、独立してアドレス可能な一つ以上のミューテックス要素を含むことができる。より詳細には、ミューテックス要素は、メモリファブリック106又はコンピュータデバイス100の他の部分内に記憶された共有データ要素を第一処理ユニット1802Aのためにロックし、その共有データ要素を用いる他の処理ユニット1802Pが、第一処理ユニット1802Aがその共有データ要素を解放するまでは待機することができるようにする。ミューテックスコントローラ206は、メモリファブリック内に存在し、共有リソースを解放又はロックする時間が、共有バス又は他の手段を用いるのと比べて低減される。
伝統的には、ミューテックスコントローラが共有リソースへの排他的アクセスの要求を受けるときは、ミューテックスコントローラは、要求している処理ユニットがその共有リソースへの排他的アクセスを取得することができるか否かを示すものを、その要求に対して即座に応答する。このため、要求している処理ユニットが排他的アクセスを取得しない場合、その要求している処理ユニットは、その要求している処理ユニットがミューテックスコントローラから排他的アクセスを受けるまでは、ミューテックスコントローラに継続的に要求しなくてはならない。これは、伝統的なミューテックスコントローラと処理ユニットとの間のバス上のトラフィックを増加させる可能性がある。
この問題に対処するため、いくつかの実施形態においては、処理ユニット1802Aが、共有リソースへの排他的アクセスを要求する排他的アクセス要求を送るとき、ミューテックスコントローラ206は、自分でその要求の状態(status)を監視することができる。一旦、ミューテックスコントローラ206が、処理ユニット1802Aに排他的アクセスが認められると決定すると、ミューテックスコントローラ206は、処理ユニット1802Aが共有リソースへの排他的アクセスを有することを示す確認メッセージを処理ユニット1802Aに送ることができる。このように、処理ユニット1802Aは、処理ユニット1802Aが排他的アクセスを受けるまでに何度も排他的アクセス要求を送る必要がなく、処理ユニット1802Aは、排他的アクセス要求を一度だけ送り、ミューテックスコントローラ206からの排他的アクセスを受けるのを待つことができる。このメッセージメカニズムは、メモリファブリック106上の通信負荷を減らすことができる。
いくつかの実施形態においては、メモリファブリック106は、処理ユニット間の通信を提供するフレキシブルなバスアーキテクチャを含むことができる。しばしば、処理ユニット間での通信のためのインタフェースは先入れ先出し(FIFO)等のバッファを含む。例えば、第一処理ユニットが第二処理ユニットにメッセージを送る準備が整ったときは、第一処理ユニットは、第二処理ユニットに割り当てられたバッファにそのメッセージを送信することができる。第二処理ユニットがメッセージを受信する準備が整ったときは、第二処理ユニットはバッファからメッセージを読み出すことができる。
しかし、伝統的なインタフェースにおけるバッファは制限されたストレージキャパシティを有する。このため、伝統的なインタフェースにおけるバッファは、制御メッセージを記憶するのに制限されることが多く、画像及び動画データ等の大量のデータを収容することができない。さらに、各バッファは、恒久的に複数の処理ユニットの一つに割り当てられる。このため、第一処理ユニットに割り当てられた第一バッファがオーバーフローしている可能性がある一方で、第二処理ユニットに割り当てられた第二バッファは空っぽである可能性がある。ゆにえ、バッファのキャパシティはシステムレベルで十分に利用されていない可能性がある。
メモリファブリック106は、バッファのキャパシティを増加させ、通信のためのリアルタイムのニーズに基づいて処理ユニットにバッファを動的に割り当てることによって、伝統的なインタフェースのこれらの欠点に対処する。メモリファブリック106は、バッファを生成する、管理する及び解放するのにフレキシブルなメカニズムを提供する。バッファは、プロセスの継続のために作成されることができ、一旦その処理が完了すると解放されることができる。解放されたバッファは、ソフトウェアプログラムの制御下で他のアプリケーション又は処理ユニットに利用可能にされることができる。
図19は、いくつかの実施形態に従うバッファの動的割り当てを図示する。メモリファブリック106は、複数のバッファ1902A〜1902Pを含むことができ、それぞれ、ベクトルプロセッサ又はハードウェアアクセラレータ等の複数の処理ユニットの一つに排他的に割り当てられることができる。いくつかの場合においては、複数のバッファ1902は同じ処理ユニットに割り当てられることができる。
いくつかの実施形態においては、複数のバッファ1902は、分割され、複数の処理ユニットの一つに排他的に割り当てられることができるバッファのリポジトリ(repository)の一部であることができる。リポジトリは、メモリファブリック106からのメモリスライスを含むことができる。いくつかの実施形態においては、複数のバッファ1902の各々は、同じキャパシティを有することができる。他の実施形態においては、複数のバッファ1902の一つ以上は、可変のキャパシティを有することができる。例えば、第一処理ユニット1802Nが少ない数の制御メッセージを第二処理ユニット1802Cに送ろうとするとき、メモリファブリック106は、第二処理ユニット1802Cがその少ない数の制御メッセージを受けることができるように、第二処理ユニット1802Cに対して小さいバッファ1902Cを割り当てることができる。しかし、第一処理ユニット1802Nが大量の動画データを第二処理ユニット1802Mに送ろうとするとき、メモリファブリック106は、第二処理ユニット1802Mが大量の動画を受けることができるように、第二処理ユニット1802Mに対して大きいキャパシティを有するバッファを割り当てることができる。
いくつかの実施形態においては、複数のバッファの一つ以上は、デバイス(システムオンチップ)設計時に想定されることができる、USB、MIPI又はEthernet(登録商標)を含む通信コミュニケーション等の特定のアプリケーションに関連付けられることができる。
いくつかの実施形態においては、電力管理モジュール110は、論理回路及びメモリデバイスに異なる電力供給電圧を提供するように構成されることができる。図20は、いくつかの実施形態に従う論理回路メモリデバイスに異なる電圧を提供する電力管理メカニズムを図示する。単一パワーアイランド2002Aは、論理回路領域2004と、メモリ領域2006と、を含むことができる。電力管理モジュール110は、第一電圧V1を論理回路領域2004に、第二電圧V2をメモリ領域2006に提供するように構成されることができる。いくつかの実施形態においては、第一電圧及び第二電圧は、異なる電力レギュレータによって提供されることができる。このため、第一電圧及び第二電圧は独立して制御されることができる。
いくつかの実施形態においては、論理回路領域2004及びメモリ領域2006は、低電力モードに独立して入ることができる。例えば、電力管理モジュール110は、ローカルスイッチ2008、2010を用いて、論理回路領域2004及びメモリ領域2006への電力供給電圧をそれぞれ切断することができる。いくつかの実施形態においては、電力管理モジュール110は、グローバルスイッチ2012を用いて、一つ以上のパワーアイランド2002A〜2002N内のメモリ領域2006への電力供給電圧を切断することができる。
いくつかの実施形態においては、メモリファブリックは、直接メモリアクセス(DMA)エンジンを含むことができる。DMAエンジンは、DMAデータ構造のダブルリンクリストを含むオペレーションリストを保持することができる。各DMAデータ構造は、DMAエンジンにより実行される特定のオペレーションを示す。DMAデータ構造は、DMAエンジンがDMAデータ構造に関連付けられたオペレーションを実行すべき順序で保持される。
オペレーションリストは、DMAデータ構造のダブルリンクリストを含むので、ダブルリンクリストにより表されたオペレーションシーケンスにDMAオペレーションを取り除くのはかなりの時間を要する。いくつかの実施形態においては、DMAエンジンは、DMA構造データが実行されるべきであるか否かを示すバッファを保持することによってこの問題に対処することができる。バッファ内の各ビットは、関連付けられたDMAデータ構造のためのイネイブル信号と見なされることができる。
図21は、いくつかの実施形態に従うバッファベースのDMAデータ構造イネイブルメカニズムを実装するDMAエンジンを図示する。DMAエンジンは、複数のDMAデータ構造2104を有するオペレーションリスト2102を含む。複数のDMAデータ構造2104は、互いにダブルリンクリストとして結合されることができる。DMAエンジンはイネイブルバッファ2106も含む。イネイブルバッファ2106は複数のビットを含むことができる。イネイブルバッファ2106内ビット数は、オペレーションリスト内のDMAデータ構造の数と同一であることができる。イネイブルバッファ2106内の各ビットは、ビットに関連づけられたDMAデータ構造がイネイブルであるか否かを示すことができる。例えば、バッファ内の第一ビットが1であるときは、DMAエンジンは第一DMAデータ構造がイネイブルであると決定し、第一DMAデータ構造を実行することができる。バッファ内の第二ビットが0であるときは、DMAエンジンは第二DMAデータ構造がイネイブルではないと決定し、第二DMAデータ構造を実行することができない。このように、DMAエンジンは実際にDMAデータ構造をオペレーションリストから実際に取り除くことなく、オペレーションリスト内のDMAデータ構造のサブセットを選択的に実行することができる。DMAエンジンはDMAデータ構造を取り除く必要はないので、一つ以上のDMAデータ構造を無効かするのに関連付けられた治安は小さくすることができる。
いくつかの実施形態において、並列コンピュータデバイス100は、電子デバイス内に存する。図22は、いくつかの実施形態に従うコンピュータデバイスを含む電子デバイスを示す。電子デバイス2200は、プロセッサ2202と、メモリ2204と、一つ以上のインタフェース2206と、コンピュータデバイス100と、を含むことができる。
電子デバイス2200は、コンピュータ読み取り可能媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブルリードオンリーメモリ(PROM)、リードオンリーメモリ(ROM)等のメモリ2204を有することができる。電子デバイス2200は、メモリ内に記憶されることができる、命令を処理しかつソフトウェアを動作させる一つ以上のプロセッサ2202を備えて構成されることができる。プロセッサ2202は、メモリ2204及び他のデバイスと通信するためのインタフェース2206とも通信することができる。プロセッサ2202は、CPU、アプリケーションプロセッサ及びフラッシュメモリを組み合わせたシステムオンチップ等の任意の適用可能なプロセッサ又は縮小命令セットコンピュータ(RISC)プロセッサであることができる。
メモリ2204は、非一時的なコンピュータ読み取り可能媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブルリードオンリーメモリ(PROM)、リードオンリーメモリ(ROM)、その他のメモリ又はメモリの組み合わせであることができる。ソフトウェアは、コンピュータ命令又はコンピュータコードを実行することができるプロセッサ上で動作することができる。プロセッサは、特定用途向け集積回路(ASIC)、プログラマブルロジックアレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、その他の集積回路を用いてハードウェアで実装されてもよい。
インタフェース2206は、ハードウェア又はソフトウェアで実装されることができる。インタフェース2206は、テレビへのリモート制御等、ローカルソース及びネットワークからのデータ及び制御情報のいずれも受信するのに用いられることできる。電子デバイスは、キーボード、タッチスクリーン、トラックボール、タッチパッド、マウス等の様々なユーザインタフェースを提供することもできる。電子デバイスは、いくつかの実施形態においては、スピーカ及びディスプレイデバイスを含んでもよい。
いくつかの実施形態においては、コンピュータデバイス100内のベクトルプロセッサ102及びハードウェアアクセラレータ104等の処理ユニットは、コンピュータ命令又はコンピュータコードを実行することができる集積回路を含むことができる。プロセッサは、特定用途向け集積回路(ASIC)、プログラマブルロジックアレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、その他の集積回路を用いてハードウェアで実装されてもよい。
いくつかの実施形態においては、コンピュータデバイス100は、システムオンチップ(SOC)上のシステムとして実装されることができる。別の実施形態においては、並列コンピュータデバイス内の一つ以上のブロックが別々のチップとして実装されることができ、並列コンピュータデバイスがシステムインパッケージ(SIP)でパッケージされることができる。いくつかの実施形態においては、並列コンピュータデバイス400はデータ処理アプリケーションに用いられることができる。データ処理アプリケーションは、画像処理アプリケーション及び/又は動画処理アプリケーションを含むことができる。画像処理アプリケーションは、画像フィルタリングプロセスを含む画像処理プロセスを含むことができる。動画処理アプリケーションは、動画復号化オペレーション、動画符号化オペレーション及び、動画内の動き又は物体を検出する動画分析オペレーションを含むことができる。本発明の追加的なアプリケーションは、画像列、複数の物体又は動画に基づいたマシンラーニング及び分類と、深度可能(depth enabled)カメラを含む複数のカメラビューからのジオメトリを抽出し、ワイヤフレームジエオメトリ(例えば、ポイントクラウドを介して)がその後のGPUによる頂点シェーディング(vertex shading)のために抽出されることができる複数のビューから特徴を抽出するゲームアプリケーションを含む拡張現実アプリケーションと、を含む。
電子デバイス2200は、携帯電話等のモバイルデバイスを含むことができる。モバイルデバイスは、複数のアクセス技術を用いた複数の無線アクセスネットワーク及び無線通信ネットワークと通信することができる。モバイルデバイスは、文書処理、ウェブブラウズ、ゲーム、e-book能力、オペレーティングシステム、フルキーボード等の進化した能力を提示するスマートフォンであることができる。モバイルデバイスは、Symbian(登録商標) OS、iPhone(登録商標) OS、RIM’s BlackBerry(登録商標)、Windows Mobile(登録商標)、Linux(登録商標)、Palm(登録商標) WebOS、Android(登録商標)等のオペレーティングシステムで動作することができる。スクリーンは、データをモバイルデバイスに入力するのに用いられることができるタッチスクリーンであってよく、スクリーンはフルキーボードの代わりに用いられることができる。モバイルデバイスは、アプリケーションを動作させる又は通信ネットワーク内のサーバによって提供されるアプリケーションと通信する能力を有してもよい。モバイルデバイスは、ネットワーク上のこれらのアプリケーションからアップデート及び他の情報を受信することができる。
電子デバイス2200は、テレビ(TV)、ビデオプロジェクタ、セットトップボックス又はセットトップユニット、デジタルビデオレコーダ(DVR)、コンピュータ、ネットブック、ラップトップ、タブレットコンピュータ、ネットワークで通信することができる他の聴覚/視覚イクイップメント等の多くの他の装置を収容することができる。電子デバイスは、全地球測位システム、プロファイル情報、又はスタック若しくはメモリ内に他のロケーション情報を保持することもできる。
複数の異なるアレンジメントが本開示において記載されているが、それぞれの特徴が有利的には様々な形式でまとまって組み合わせられてよく、それにより利点を得るものと理解される。
前述の明細書においては、本願は特定の例を参照して記載されている。しかし、様々な修正及ぶ変更が、添付の特許請求の範囲に明記されるような発明の広い精神及び範囲を逸脱することなく本願においてなされてよいことは明らかである。例えば、接続は、例えば、中間ノードを介した、各ノード、ユニット又はデバイスとの信号を転送するのに適した任意のタイプの接続であることができる。従って、黙示的に又は明示的にそうであるとされない限り、接続は、例えば、直接接続又は間接接続であってよい。
本開示で示されたアーキテクチャは例示的に過ぎず、事実、同一の機能性を達成する多くの他のアーキテクチャが実装されることができると理解されるものである。抽象的ではあるが依然として確定された意味においては、同一の機能を達成するためのコンポーネントの任意のアレンジメントは、所望の機能が達成されるように効果的に関連付けられる(associated)。つまり、特定の機能を達成するため、本開示において組み合わせられた任意の2つのコンポーネントは、アーキテクチャ又は中間コンポーネントに関わらず、その所望の機能が達成されるように互いに「関連付けられた」とみることができる。同様に、そのように関連付けられた2つのコンポーネントは、所望の機能を達成するため、「動作可能に接続された」又は「動作可能に結合された」とみることもできる。
さらに、当業者であれば、上述されたオペレーションの機能間の境界は例示に過ぎないと理解するものである。複数のオペレーションの機能は、単一のオペレーションに組み合わせられてよく、及び/又は単一のオペレーションの機能は、追加のオペレーションに分散されてよい。さらに、別の実施形態が特定のオペレーションの複数のインスタンスを含んでよく、オペレーションの順序が種々の他の実施形態で変更されてよい。
他の修正、バリエーション及び変更も可能である。従って、明細書及び図面は、限定的な意味ではなく例示的なものとみなされる。
特許請求の範囲において、丸括弧の間にある任意の符号は、請求項を限定するものと解釈されるべきではない。文言「含む(comprising)」は、請求項内に挙げられたもの以外の他の要素又は工程の存在を排除しない。さらに、本開示で用いられるような文言「ある(a or an)」は、一つ以上として定義される。また、請求項内にある「少なくとも一つ」、「一つ以上」等の導入句の使用は、同一の請求項が「一つ以上」又は「少なくとも一つ」の導入句と「ある(a or an)」等の非限定的な冠詞を含む場合も含め、他のクレーム要素が非限定的冠詞「ある(a or an)」を導入したものとすると、そのように導入されたクレーム要素を含む特定の請求項が、ただ一つしかそのような要素を含まない発明に限定されることを示唆していると解釈されるべきではない。同じことが、定冠詞を用いることに対しても当てはまる。明示される場合を除き、「第一」、「第二」等の文言は、そのような文言が記載する要素同士を任意に区別するのに用いられる。つまり、これらの文言は、そのような要素の経時性又は他の優先順位付けを示すことを必ずしも意図していない。所定の手段が相互に異なる請求項に規定されるという事実だけでは、これらの手段の組み合わせが効果を有するように用いられることができないということを示さない。