(57)【要約】  本発明は、一般に、データ処理ハードウェアに関し、より詳細には、行列因数分解、特に非負行列因子分解(NMF)のためのハードウェアアクセラレータおよび関連の方法に関する。本発明の実装形態は、特に、OLEDディスプレイなどの電子発光ディスプレイの駆動に有用である。掛け合わせると対象の行列に近づく1対の因子行列(R;C)を決定する行列因子分解ハードウェアアクセラレータであって、前記対象の行列を表す入力データ行列を受信する入力と、第1の因子行列(R)の行および列のデータを格納する第1の因子行列メモリであって、ブロックに格納されている第1の因子行列の列データにアクセスするための、前記第1の因子行列メモリのそれぞれのブロックにそれぞれ関連付けられている複数の第1のデータバスを有する第1の因子行列メモリとを備える。
2009530730.tif 000002
【特許請求の範囲】
【請求項１】
掛け合わせると対象の行列に近づく1対の因子行列(R;C)を決定する行列因子分解ハードウェアアクセラレータであって、
前記対象の行列を表す入力データ行列を受信する入力と、
第1の因子行列(R)の行および列のデータを格納する第1の因子行列メモリであって、ブロックに格納されている第1の因子行列の列データにアクセスするための、前記第1の因子行列メモリのそれぞれの前記ブロックにそれぞれ関連付けられている複数の第1のデータバスを有する第1の因子行列メモリと、
第2の因子行列(C)の行および列のデータを格納する第2の因子行列メモリであって、ブロックに格納されている第2の因子行列の行データにアクセスするための、前記第2の因子行列メモリのそれぞれの前記ブロックにそれぞれ関連付けられている複数の第2のデータバスを有する第2の因子行列メモリと、
前記第1のデータバスのうちの1つに結合されている第1のプロセッサブロックデータバスと、前記第2のデータバスのうちの1つに結合されている第2のプロセッサブロックデータバスと、結果データ出力と、前記因子行列の対の積と前記対象の行列との間の差を表す行列(Q)の一部分を格納するプロセッサメモリブロックと、少なくとも1つの積和ユニットを含むデータプロセッサであって、前記プロセッサメモリブロックに結合されている第1の入力と、前記第1および第2のプロセッサブロックデータバスの一方または両方に結合されており、前記結果データ出力に結合されている出力を有する第2の入力とを有するデータプロセッサとをそれぞれ有するプロセッサブロックの行列と、
前記入力からのデータの前記プロセッサブロックの行列の前記プロセッサメモリブロックへの書き込みを制御し、前記プロセッサブロックの行列に提供するための前記第1および第2の因子行列メモリからのデータの読み取りを制御し、前記行列因子分解を行うために、前記結果データ出力から導出されたデータの前記第1および第2の因子行列メモリへの書き戻しを制御する制御回路と
を備える行列因子分解ハードウェアアクセラレータ。
【請求項２】
前記プロセッサブロックのそれぞれが、前記プロセッサメモリブロックに結合されている第3のプロセッサブロックデータバスを有し、前記プロセッサメモリブロックが、前記第1のデータバスによってアクセスされる前記第1の因子行列メモリの列データのいくつかの行データ項目に対応する第1の次元を有し、前記第2のデータバスによってアクセスされる前記第2の因子行列メモリの行データのいくつかの列データ項目に対応する第2の次元を有する前記行列(Q)の一部分を格納するよう構成されている請求項1に記載の行列因子分解ハードウェアアクセラレータ。
【請求項３】
前記プロセッサブロックが、それぞれ前記プロセッサメモリブロックにデータを書き込み、そこからデータを読み出す前記第3のプロセッサブロックデータバスの対を有し、前記プロセッサブロックが、前記第3のプロセッサブロックデータバスによってデイジーチェーン接続されている請求項2に記載の行列因子分解ハードウェアアクセラレータ。
【請求項４】
前記プロセッサブロックが、前記2つの結果データ出力、および2つの結果データ入力を有し、前記プロセッサブロックの行列が、前記結果データ入力および出力によって2方向にデイジーチェーン接続されたプロセッサブロックの矩形行列を含む請求項1、2、または3に記載の行列因子分解ハードウェアアクセラレータ。
【請求項５】
前記それぞれの第1および第2の因子行列メモリに書き戻すために前記プロセッサブロックの行列から受信されたデータを累積するために、前記第1および第2の因子行列メモリに関連付けられている第1および第2の数値演算ブロックをさらに含む請求項1から4のいずれかに記載の行列因子分解ハードウェアアクセラレータ。
【請求項６】
前記第1および第2の数値演算ブロックのそれぞれが、1つのマスター数値演算ブロック、および1つまたは複数のスレーブ数値演算ブロックを含み、前記マスター数値演算ブロックが、前記1つまたは複数のスレーブブロックへの出力を有するデバイダユニットを含み、前記1つまたは複数のスレーブブロックのそれぞれが、前記デバイダユニット出力に結合されている入力を有する乗算器を含む請求項5に記載の行列因子分解ハードウェアアクセラレータ。
【請求項７】
前記第1および第2の因子行列メモリが、同時の前記プロセッサブロックの読み取りアクセス、および前記数値演算ブロックによる書き込みアクセスを可能にするために、デュアルポート式メモリを含む請求項5または6に記載の行列因子分解ハードウェアアクセラレータ。
【請求項８】
前記プロセッサブロックが、マスタープロセッサブロックおよび複数のスレーブプロセッサブロックを含み、前記マスターブロックが、前記スレーブプロセッサブロックにおいて、前記プロセッサブロックメモリのアドレス、および前記スレーブプロセッサブロックにおける前記データプロセッサの操作の一方または両方を制御するよう構成されている請求項1から7のいずれかに記載の行列因子分解ハードウェアアクセラレータ。
【請求項９】
前記積和ユニットが、前記第1および第2のプロセッサブロックデータバスに結合されている第1および第2の乗算入力、前記プロセッサメモリブロックの読み取り出力に結合されている加算入力、および前記プロセッサメモリブロックの書き込み入力に結合されている出力を有し、前記データプロセッサが、前記積和出力に結合されている第1の乗算入力と、前記第1および第2のプロセッサブロックデータバスのうちの一方に選択的に結合可能であり、前記データプロセッサ出力に結合されている出力を有する第2の乗算入力とを有する乗算-累積ユニットとして構成されている積和ユニットをさらに含む請求項1から8のいずれかに記載の行列因子分解ハードウェアアクセラレータ。
【請求項１０】
前記プロセッサメモリブロックが、前記格納されている行列(Q)の前記一部分のコピーを格納するバッファを含み、前記データプロセッサが、前記格納されている行列部分の2つの異なるバージョンで同時に操作可能である請求項1から9のいずれかに記載の行列因子分解ハードウェアアクセラレータ。
【請求項１１】
前記データプロセッサが、第1ビット長の変数で整数演算を使用するよう構成されており、前記プロセッサメモリブロックが、前記第1ビット長の2倍の整数変数を格納するよう構成されている請求項1から10のいずれかに記載の行列因子分解ハードウェアアクセラレータ。
【請求項１２】
前記データプロセッサが、前記格納されている行列(Q)の部分に対応するデータについて以下の演算を行うよう構成されており、
【数１】
2009530730.tif 000042
式中、xy、py、およびxpは、それぞれQ、R、およびCの列および行にラベル付けする請求項1から11のいずれかに記載の行列因子分解ハードウェアアクセラレータ。
【請求項１３】
前記行列因子分解が、非負行列因子分解(NMF)を含む請求項1から12のいずれかに記載の行列因子分解ハードウェアアクセラレータ。
【請求項１４】
請求項1から13のいずれかに記載の前記行列因子分解ハードウェアアクセラレータを含む集積回路。
【請求項１５】
請求項1から14のいずれかに記載の前記行列因子分解ハードウェアアクセラレータを含むOLEDディスプレイドライバ。
【請求項１６】
行列因子分解のための集積回路(IC)であって、
第1および第2の因子行列(R;C)への因子分解のための対象の行列を表す入力データ行列を受信する入力と、
第1の因子行列メモリ(R)のブロックに格納されているデータにそれぞれアクセスする複数の第1のデータバスと、
第2の因子行列メモリ(C)のブロックに格納されているデータにそれぞれアクセスする複数の第2のデータバスと、
プロセッサブロックの行列であって、前記第1のデータバスのうちの1つに結合されている第1のプロセッサブロックデータバスと、前記第2のデータバスのうちの1つに結合されている第2のプロセッサブロックデータバスと、結果データ出力と、前記因子行列の対の積と前記対象の行列との差を表す行列(Q)の一部分を格納するプロセッサメモリブロックと、少なくとも1つの積和ユニットを含み、前記プロセッサメモリブロックに結合されている第1の入力と、前記第1および第2のプロセッサブロックデータバスのうちの一方または両方に結合されており、前記結果データ出力に結合されている出力を有する第2の入力とを有するデータプロセッサとをそれぞれ有するプロセッサブロックの行列と
を備える集積回路。
【請求項１７】
ハードウェアが非負行列因子分解(NMF)計算を高速化する方法であって、前記計算が、以下を反復的に決定する段階を含み、
Qxy = Qxy + RpyCxp  xおよびyごと  (1)
【数２】
2009530730.tif 000043
【数３】
2009530730.tif 000044
Qxy = Qxy − RpyCxp  xおよびyごと  (4)
式(1)から(4)が、各反復のpの値ごとに評価され、式中、Wxypが重み係数を含み、この方法が、pごとに、
対応する複数のプロセッサブロックにわたって分散される複数のメモリブロックにQを格納する段階と、
式(2)の分母を評価する段階と、
QxyおよびRpyを決定するために、前記複数のプロセッサブロックにわたって実質的に同時に式(2)の分子および式(1)への貢献を評価する段階と、
式(3)の分母を評価する段階と、
CxpおよびQxyを決定するために、前記複数のプロセッサブロックにわたって実質的に同時に式(3)の分子および式(4)への貢献を評価する段階と
を含む方法。
【請求項１８】
ハードウェアが非負行列因子分解(NMF)計算を高速化するシステムであって、前記計算が、以下を反復的に決定する段階を含み、
Qxy = Qxy + RpyCxp  xおよびyごと  (1)
【数４】
2009530730.tif 000045
【数５】
2009530730.tif 000046
Qxy = Qxy − RpyCxp  xおよびyごと  (4)
式(1)から(4)が、各反復のpの値ごとに評価され、式中、Wxypが重み係数を含み、このシステムが、
対応する複数のプロセッサブロックにわたって分散される複数のメモリブロックにQを格納する手段と、
式(2)の分母を評価する手段と、
式(2)の分子および式(1)への貢献を評価する手段と、
式(3)の分母を評価する手段と、
CxpおよびQxyを決定するために、前記複数のプロセッサブロックにわたって実質的に同時に式(3)の分子および式(4)への貢献を評価する手段と
を含むシステム。
【請求項１９】
請求項18に記載の前記システムを含むディスプレイドライバまたはディスプレイ。
【請求項２０】
請求項17の前記方法または請求項18の前記システムを実施するハードウェアを記述するプロセッサ制御コードを運ぶキャリア。
【請求項２１】
入力行列(Q)を1対の第1および第2の因子行列(R;C)に因子分解する非負行列因子分解(NMF)ハードウェアアクセラレータであって、
前記第1の因子行列(R)の要素を格納する第1のメモリストアと、
前記第2の因子行列(C)の要素を格納する第2のメモリストアと、
複数のNMF演算を並列に行う、前記第1および第2のメモリストアに結合されているプロセッサの格子と、
前記入力行列(Q)の前記プロセッサの格子への書き込みを制御し、前記第1および第2の因子行列の要素を前記それぞれの第1および第2のメモリストアに書き込むよう前記プロセッサを制御するコントローラと
を含むNMFハードウェアアクセラレータ。
【請求項２２】
前記プロセッサを前記第1および第2のメモリストアにそれぞれ接続する複数の第1のデータバスおよび複数の第2のデータバスを有する請求項21に記載のNMFハードウェアアクセラレータ。
【請求項２３】
前記プロセッサのそれぞれが、前記入力行列(Q)の一部分を格納する記憶領域を含む請求項21または22に記載のNMFハードウェアアクセラレータ。
【請求項２４】
前記プロセッサのそれぞれが、前記プロセッサ記憶領域から導出されたデータを受信するための第1の入力を有し、前記第1および第2のデータバスのうちの一方に結合されており、前記第1および第2のメモリストアのうちの一方または両方にデータを提供するために、前記NMF演算を行うよう構成されている少なくとも1つの第2の入力を有する少なくとも1つの積和ユニットを含む請求項19に従属したときの請求項22に記載のNMFハードウェアアクセラレータ。
【請求項２５】
前記第1および第2の因子行列(R;C)の要素をそれぞれ格納する第1および第2のメモリストアにアクセスするための外部バスに結合されているプロセッサの格子を含む、入力行列(Q)を1対の第1および第2の因子行列(R;C)に因子分解するための非負行列因子分解(NMF)の集積回路(IC)。
【請求項２６】
前記プロセッサがそれぞれローカルメモリを含み、前記プロセッサが複数のスレーブプロセッサ、およびマスタープロセッサとして構成されている1つのプロセッサを含み、前記マスタープロセッサが、前記スレーブプロセッサにおいて、前記ローカルメモリのアドレスおよび前記スレーブプロセッサのデータ処理操作のうちの一方または両方を制御するよう構成されている請求項25に記載の集積回路(IC)。
【請求項２７】
前記プロセッサの格子の各プロセッサが、前記入力行列の領域が処理可能なように、前記入力行列の対応する部分を処理するよう構成されており、前記外部バスが、複数の前記入力行列領域を処理するために前記複数の集積回路を接続できるようにするよう構成されている請求項25または26に記載の集積回路(IC)。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、データ処理ハードウェアに関し、より詳細には、行列因子分解、特に非負行列因子分解(non-negative matrix factorisation:NMF)のためのハードウェアアクセラレータおよび関連の方法に関する。本発明の実装形態は、特に、OLED(有機発光ダイオード)ディスプレイなどの電子発光ディスプレイの駆動に有用である。
【背景技術】
【０００２】
非負行列因子分解の技術が、OLEDディスプレイの駆動にどのように有利に使用され得るかについては、以前説明した(特に、参照によりその全体が本明細書に組み込まれる、国際出願PCT/英国特許第2005/050219号を参照されたい)。次に、特に、リアルタイム表示の生成に必要な非常に大量の計算を十分速く行う問題に取り組むこれらの技術を実装するハードウェアの実装形態について説明する。ディスプレイの駆動を参照して、好ましい実施形態について説明するが、説明するハードウェアおよび方法は、それだけには限定されないが、画像データ(例えば顔認識)、コンピュータネットワークデータ(例えばセキュリティ監視のためのユーザアクティビティデータ)、データベースに格納されている多変量データ(例えばデータマイニング用)、センサデータ(例えば全結合スペクトル(combined spectrum)を作り上げる1組の要素スペクトルの決定用)、生物配列データおよび/またはマイクロアレイデータ(microarray data)(例えば配列分析用)、オブジェクト記述子データ(例えばマシンラーニング/認識技術)、および検索結果データ(分析および/またはパターン認識)などを含めて、実質的に任意のタイプのデータの高速な因子分解に使用され得ることを当業者は理解されよう。これらおよび他の用途のこれ以上の詳細は、本出願者の前の国際特許出願(同上)において探し出すことができる。背景技術は、米国特許第5692210号、米国特許第4739474号、米国特許第2002/0186311号、米国特許第5690211号、欧州特許第0293700号、および米国特許第2004/0268080号において探し出すことができる。
【０００３】
本発明の実装形態の理解を助けるために、まず、その好ましい特別な場合がトータルマトリックスアドレッシング(total matrix addressing:TMA)技術を含む、マルチラインアドレッシング(multi-line addressing:MLA)技術について再検討する。これらは、ピクセル(またはカラーサブピクセル)ごとの記憶素子を含んでおらず、したがって連続的にリフレッシュされなければならないディスプレイであるパッシブマトリックスOLEDディスプレイ(passive matrix OLED display)と共に使用されることが好ましい。本仕様書では、OLEDディスプレイは、ポリマー、いわゆる小さい分子(例えば米国特許第4,539,507)、デンドリマー、有機金属材を使用して製造されたディスプレイを含み、このディスプレイは、モノクロでもカラーでもよい。
【０００４】
従来のパッシブマトリックスディスプレイでは、ディスプレイは、ライン単位に駆動され、したがって、ラインごとに高駆動が必要である。というのは、このディスプレイは、わずかなフレーム周期のみに照らされるからである。MLA技術は、同時に複数ラインを駆動し、TMA技術では、すべてのラインが同時に駆動され、画像は、観察者の目において統合されると、所望の画像の印象を与える、連続して表示される複数のサブフレームから構築される。問題は、1組のサブフレームが所望の画像に近づくように、サブフレームの行および列の駆動信号の組を決定することである。この問題の解決策については、国際特許出願英国特許第2005/050167-9号(3つの出願はすべて、参照によりその全体が本明細書に組み込まれる)で以前説明している。好ましい技術は、所望の画像を表す行列の非負行列因子分解を使用する。OLED表示要素は、正(またはゼロ)の光放射を提供するため、その要素が正である因子行列は、本質的に、サブフレームの行および列の駆動信号を定義する。以下、1つの好ましいNMF技術について説明するが、他のものが使用されてもよい。さらに、これおよび他のNMF手順の実施に適したハードウェアアクセラレータの詳細について説明する。
【０００５】
本発明の理解を助けるために、まず、図1aを参照して、TMAを行うために本発明の実施形態を使用して実施され得るディスプレイ駆動データプロセッサ150を組み込むOLEDディスプレイシステム100全体について説明する。
【０００６】
図1aでは、パッシブマトリックスOLEDディスプレイ120は、行ドライバ回路112によって駆動される行電極124、および列ドライバ110によって駆動される列電極128を有する。図1bに、こうした行ドライバおよび列ドライバの詳細が示されている。列ドライバ110は、電流駆動を列電極のうちの1つまたは複数に設定する列データ入力109を有し、同様に、行ドライバ112は、現在の電流駆動比を2つ以上の行に設定する行データ入力111を有する。好ましくは、入力109および111は、インターフェイスを容易にするために、デジタル入力であり、好ましくは、列データ入力109は、ディスプレイ120のすべてのU列の電流駆動を設定する。
【０００７】
表示用データは、データおよび制御バス102上に提供され、これは、直列でも並列でもよい。バス102は、入力をフレームストアメモリ103に提供し、フレームストアメモリは、ディスプレイのピクセルごとに輝度データを格納する、またはカラーディスプレイでは、サブピクセルごとに輝度情報(別個のRGBカラー信号として、または輝度および彩度信号として、または他の何らかの方法で符号化され得る)を格納する。フレームメモリ103に格納されるデータは、ディスプレイのピクセル(またはサブピクセル)ごとに所望の外観の明度を決定し、この情報は、ディスプレイ駆動データプロセッサ150により、第2の読み取りバス105によって読み出すことができる。ディスプレイ駆動データプロセッサ150は、さらに後述するように、入力データ前処理、NMF、および後処理を行うことが好ましい。
【０００８】
図1bは、ディスプレイを駆動するのに適した行および列ドライバ、および因子分解された画像行列を示す。列ドライバ110は、連動され、電流を列電極のそれぞれに設定する可変基準電流Irefが提供される1組の調整可能な実質的に一定した電流源を含む。この基準電流は、NMF因子行列の行から導出される列ごとの異なる値によって変調されるパルス幅である。行ドライバ112は、好ましくはディスプレイの行ごとに(または同時に駆動される行のブロックの行ごとに)1つの出力を有する、プログラム可能なカレントミラーを含む。行駆動信号は、NMF因子行列の列から導出され、行ドライバ112は、行の電流が比率制御入力(ratio control input)(R)によって設定される比率であるように、行ごとに合計列電流を分配する。適したドライバのこれ以上の詳細は、本発明者のPCT出願英国特許第2005/010168号(参照により本明細書に組み込まれる)で探し出すことができる。
【０００９】
OLEDは、電流-電圧二次従属(quadratic current-voltage dependence)を有しており、これは、行および列の駆動変数(drive variable)の独立制御を抑制する。PWMは、列および行の駆動変数を互いから分離することができるため、有用である。さらに、上述した駆動配列では、電流は、行間で共有されるため、1つの行における電流が増加した場合、残りの行における電流は低減する。したがって、基準電流およびサブフレーム時間は、補正のためにスケーリングされることが好ましい。例えば、サブフレーム時間は、各サブフレームにおけるピークのピクセル明度を等しくする(また最悪の/ピークの明度の経年変化を低減する)目的で調整することができる。実際には、これは、最短の選択可能なサブフレーム時間、および最大列駆動電流によって限定されるが、調整は、二次最適化であるため、これは、問題とする必要はない。
【００１０】
好ましいNMF計算の一例を以下に示す。
【００１１】
入力画像は、要素Vxyを含む行列Vによって提供され、Rは、現在の行行列、Cは現在の列行列、QはVとR.Cとの間の残留誤差(remaining error)、pはサブフレーム数、averageは平均値、gammaはオプションのガンマ補正関数を示す。
【００１２】
変数は、以下のように初期化される。
av=average(gamma(Vxy)
【００１３】
【数１】
2009530730.tif 000003
【００１４】
Qxy=gamma(Vxy)-av
【００１５】
次いで、NMFシステムの一実施形態は、p=1からサブフレームの総数までについて以下の計算を行う。
開始
Qxy = Qxy + RpyCxp  xおよびyごと
【００１６】
【数２】
2009530730.tif 000004
【００１７】
yごと
【００１８】
【数３】
2009530730.tif 000005
【００１９】
xごと
Qxy =Qxy − RpyCxp  xおよびyごと
開始に折り返す(p←p+1)
【００２０】
変数biasは、ゼロ除算を防ぎ、RおよびCの値がこの値に近づく。biasの値は、initialRC×weight×no.of.columnsによって決定され得る。この場合、列数はxであり、重みは、例えば64と128の間である。
【００２１】
大まかに言えば、上記の計算を、最小2乗適合として特徴付けることができる。行列Qは、最初に、対象の行列の形として開始する。というのは、行Rおよび列Cの行列は、一般に、そのすべての要素が同じであり、平均値initialRCに等しいように初期化されるからである。しかし、その時から、行列Qは、画像とサブフレームの結合の結果との間の残差を表すため、理想的にはQ = 0である。したがって、大まかに言えば、手順は、サブフレームpの貢献を追加することによって開始し、次いで、行ごとに最適な列値を見つけ、その後、列ごとに最適な行値を見つける。次いで、更新された行および列の値は、Qから差し引かれ、手順は、次のサブフレームを続行する。一般に、1組のサブフレームについてのRおよびCが最適適合に収束するように、例えば1と100との間など、何度かの反復が行われる。使用されるサブフレームpの数は、実験的な選択であるが、例えば、1と1000との間とすることができる。
【００２２】
この説明において、行および列への言及は、置き換え可能であり、例えば、上記の式系において、更新されたRpyおよびCxpの値を決定するための処理の順序は交換され得ることを当業者であれば理解されよう。
【００２３】
上記の組の式において、すべての整数演算が使用されることが好ましく、RおよびCの値は、8ビット値を含み、Qは、符号付き16ビット値を含むことが好ましい。次いで、RおよびCの値の決定は、四捨五入を伴い得るが、Qにおける丸め誤差はない。というのは、Qは、四捨五入された値で更新されるからである(また、RおよびCの値の積がQ内に収容できる最大値を超えることはできない)。上記の手順は、カラーディスプレイのピクセルに直接適用され得る(詳細は後述)。不完全な黒に対して目が過度に敏感であるため、任意選択で、重みW行列を使用して、低輝度値における誤差により高く重み付けするようにしてもよい。緑の誤差に目が過度に敏感であるため、緑色チャネルにおける誤差の重みを高めるために、同様の重み付けを適用してもよい。
【特許文献１】国際出願PCT/英国特許第2005/050219号
【特許文献２】米国特許第5692210号
【特許文献３】米国特許第4739474号
【特許文献４】米国特許第2002/0186311号
【特許文献５】米国特許第5690211号
【特許文献６】欧州特許第0293700号
【特許文献７】米国特許第2004/0268080号
【特許文献８】米国特許第4,539,507号
【特許文献９】国際特許出願英国特許第2005/050167-9号
【特許文献１０】PCT出願英国特許第2005/010168号
【発明の開示】
【発明が解決しようとする課題】
【００２４】
上記のNMF手順に基づくディスプレイドライバシステムの実践的な実装のための一般的な1組のパラメータは、例えば160個のサブフレームに対する手順の20回の反復をそれぞれ含む、毎秒25フレームの所望のフレームレートを有し得る。20回の反復および160個のサブフレームを使用した150MHzで稼働している上記の手順の逐次的な実施は、結果的に0.25fpsのフレームレートをもたらす。したがって、非常に高速で高価な、電力を強く求めるデジタル信号プロセッサの必要性無く、一般のビデオフレームレートの達成を容易にするための向上した技術が必要である。
【課題を解決するための手段】
【００２５】
したがって、本発明によれば、掛け合わせると対象の行列に近づく1対の因子行列(R;C)を決定する行列因子分解ハードウェアアクセラレータを提供し、ハードウェアアクセラレータは、前記対象の行列を表す入力データ行列を受信する入力と、第1の因子行列(R)の行および列のデータを格納する第1の因子行列メモリであって、ブロックに格納されている第1の因子行列の列データにアクセスするための、前記第1の因子行列メモリのそれぞれのブロックにそれぞれ関連付けられている複数の第1のデータバスを有する第1の因子行列メモリと、第2の因子行列(C)の行および列のデータを格納する第2の因子行列メモリであって、ブロックに格納されている第2の因子行列の行データにアクセスするための、前記第2の因子行列メモリのそれぞれのブロックにそれぞれ関連付けられている複数の第2のデータバスを有する第2の因子行列メモリと、前記第1のデータバスのうちの1つに結合されている第1のプロセッサブロックデータバスと、前記第2のデータバスのうちの1つに結合されている第2のプロセッサブロックデータバスと、結果データ出力と、前記因子行列の対の積と前記対象の行列との間の差を表す行列(Q)の一部分を格納するプロセッサメモリブロックと、少なくとも1つの積和ユニット(multiply-add unit)を含むデータプロセッサであって、前記プロセッサメモリブロックに結合されている第1の入力と、前記第1および第2のプロセッサブロックデータバスの一方または両方に結合されており、前記結果データ出力に結合されている出力を有する第2の入力とを有するデータプロセッサとをそれぞれ有するプロセッサブロックの行列と、前記入力からのデータの前記プロセッサブロックの行列の前記プロセッサメモリブロックへの書き込みを制御し、前記プロセッサブロックの行列に提供するための前記第1および第2の因子行列メモリからのデータの読み取りを制御し、前記行列因子分解を行うために、前記結果データ出力から導出されたデータの前記第1および第2の因子行列メモリへの書き戻しを制御する制御回路とを備える。
【００２６】
上述したハードウェアアクセラレータの実施形態は、様々な行列因子分解技術を実施するために使用することができ、特に、非負行列因子分解(NMF)に適する。これは、概要に記載された特定の技術を使用して実施され、または他のNMF方法は、ハードウェアを使用して実施され得る。しかし、ハードウェアアクセラレータのアプリケーションは、NMFに限定されず、特に、第1および第2の因子行列におけるデータが周期的または反復的な方法で変更される広範な反復技術を含む。次いで、こうしたアプリケーションにおけるプロセッサブロックは、繰り返しの、反復の、または周期的な計算を行うために使用され得る。非負の制約を含まない方法を実施するために、例えばデータストレージおよび/または処理における符号ビットの提供を行うことによって、符号付きデータが操作され得る。
【００２７】
大まかに言えば、実施形態において、処理および残差行列Qの格納を分散させることによって、複数の部分計算を、各プロセッサブロックにおいて並列に行うことができるようになる。こうした構成は、FPGA(フィールドプログラマブルゲートアレイ)など、ハードウェアにおける実装にとって便利であり、プロセッサブロック、より詳細には、Qの一部分を格納するプロセッサメモリブロックは、画像のエリアにわたって分散させることができるため、処理の速度は、実質的に、画像のサイズまたは解像度に依存しない可能性がある。さらに、実施形態において、上述したデータ構造がNMF式のペアワイズ評価を可能にし、まず、サブフレームpの対象を決定するためにQを実質的に同時に更新すると同時に、RおよびCの一方を更新し、次いで、CおよびRの他方を更新すると実質的に同時に、更新されたサブフレームをQから差し引く(Qからサブフレームを差し引くのを開始する前に、第1のC(またはR)値を計算するために必要な待ち時間を伴うとしても)。したがって、好ましい実施形態において、データプロセッサは、1対のデジタル信号プロセッサ(積和ユニット)を含み、2つの式、上記の例では、Qを更新するための式、およびR(またはC)を更新するための式のそれぞれを同時に評価する(しかし、別の実施形態では、単一のDSPユニットは、並行性が低減するとしても、何らかのメリットを達成するために、多重化されてもよい)。
【００２８】
好ましくは、上記の待ち時間を考慮に入れるために、「古い」バージョンのQを使用して、例えばCを更新することができ、例えばCの更新された値を使用して、Qを更新することができるように、プロセッサブロックに格納されているQの一部分は、ダブルバッファされる。上述したように、残差行列Qは、事実上、対象の行列として開始するが、次いで、RおよびCが所望の対象に徐々によりよく近づき、残差が低減するにつれて、変更される。実施形態において、残差行列Q自体必要ではない、すなわちその行列は、単に、第1および第2の因子行列RおよびCを計算するのに役立つだけであり、したがって、ブロック内部における内部的なものを除いて、プロセッサブロックに格納されているQの一部分を読み取るためのどんな準備も必要ない(Qへの外部読み取りアクセスは、ハードウェアアクセラレータによって提供する必要はない)。入力データ行列は、例えば、概要で示したように、ガンマ補正を適用することによって、対象の行列を生成するために前処理され得る。同様に、第1および第2の因子行列におけるデータは、ハードウェアアクセラレータによって、または外部で後処理され得る。実施形態において、ハードウェアアクセラレータからの読み出しは、第1および第2の因子行列メモリへの読み取りアクセスによって提供され得る。また、メモリへの書き込みアクセスは、例えば、第1および第2の因子行列を初期化するために提供され得る、または、初期化は、ハードウェアアクセラレータによって内部で行われ得る。上述したように、好ましくは、RまたはCの値の計算は、整数演算を使用してプロセッサブロック内で行われ、その結果、RまたはCの要素の値は、四捨五入されるか、そうでない場合は切り捨てられるか近似されてもよい。したがって、好ましくは、プロセッサブロックは、丸められた値を使用してQの要素を更新する。したがって、好ましくは、プロセッサメモリブロックは、データプロセッサへの入力より2倍のデータ幅(ビット長)の変数を使用する。
【００２９】
一部の好ましい実施形態において、ハードウェアアクセラレータ制御回路は、ハードウェアアクセラレータのグローバル制御回路、第1および第2の因子行列メモリを制御(特にアドレッシング)するメモリ制御回路、およびプロセッサブロックのローカル制御のためのプロセッサブロック制御回路の間に分散される。しかし、以下でさらに説明するように、一部の好ましい実施形態において、1つのプロセッサブロックのみが、例えば残差行列Qの一部分を格納するメモリブロックのアドレッシングを行うためにこうした制御回路を組み込んでおり、そこでこれをマスタープロセッサブロックと呼び、他のプロセッサブロックのうちの1つまたは複数(好ましくはすべて)は、このマスターの制御下におかれ、マスタープロセッサブロックから導出されたタイミング信号および制御信号を使用する。
【００３０】
一部の好ましい実施形態において、メモリ制御回路は、プロセッサブロックによって処理される1組の要素の、因子行列のうちのいずれか一方または両方の各要素の連続的な選択を制御する。言い換えれば、プロセッサブロックの行はそれぞれ、行因子行列の列値のブロック(プロセッサブロックの連続する行に符号が付けられる1つの/各列の部分)を処理し得る。次いで、プロセッサブロックの行によって処理される列値の組のそれぞれは、選択され、処理のためにプロセッサブロックに提供され得る。列因子行列におけるデータの行は、プロセッサブロックの列によって同様に扱われ得る。したがって、メモリ制御回路は、第1および第2の因子行列の要素を、例えば上述したように、NMF計算式に従って処理するために、順々に処理ブロックに提供するよう構成され得る。また、メモリ制御回路は、因子行列メモリへの外部の読み取りおよび/または書き込みアクセスを制御することができる。
【００３１】
ハードウェアアクセラレータの好ましい実施形態において、プロセッサブロックは、残差行列Qを分散されたメモリアレイに書き込むために、第3のプロセッサブロックデータバスを使用してデイジーチェーン接続される(しかし、これは、変形体では、例えば行および列の行列メモリデータバスを使用して行われ得る)。好ましくは、これらは、都合よく北、南、東、西の接続として見ることができる、1対の結果データ入力および1対の結果データ出力を提供することによってもデイジーチェーン接続されており、結果を、(制御回路の制御下で)行列内のプロセッサブロックからプロセッサブロックへと、プロセッサブロックの行列の行端および/または列端まで渡すことができるようになる。データが渡される端の反対の後続の入力は、ゼロにしておいてもよい。好ましくは、結果データは、行および列の結果の数値演算ブロック(math block)によって受信される。これらの数値演算ブロックは、好ましくは、ブロックの関連の行または列における各プロセッサブロックから受信された部分的な結果データを累積する。さらに、実施形態において、行および列の因子行列値(上記の式を参照)の更新に除算が必要とされるため、数値演算ブロックは、この除算を行うよう構成され得る。しかし、所与のサブフレームにおいて、行および列の行列更新の式の分母は、常に同じであるため、この除算は、一度行われるだけでよい。したがって、例えば、プロセッサブロックの行および列ごとに1つずつ、複数の行および列のブロックが提供されてもよく、こうした構成において、数値演算ブロックの1つは、マスターブロックとして指定され、他はスレーブ数値演算ブロックとして指定され得る。次いで、マスターブロックは、関連の分母の逆数を計算するためのデバイダを含むことができ、スレーブ数値演算ブロックは、次いで、マスター(行または列)数値演算ブロックから受信されたこの逆数値を掛ける乗数を含むだけでよい。好ましくは、行および列の行列メモリは、プロセッサブロックおよび数値演算ブロックによる同時の読み取りおよび書き込みアクセスを可能にするために、デュアルポートメモリを使用して実施される。
【００３２】
一部の好ましい実施形態において、プロセッサブロックは、第1および第2の積和ユニットを含む。このような方法で、これらのうちの一方は、積R.Cを計算するために使用され、他方は、積Q.Cを累積するために使用されて、これらの演算は、並列に行われる。積Q.Cは、R.CがQに追加された後に決定されるため、これらの積和ユニットのうちの一方の出力は、第2のユニットの入力に結合されることが好ましい。同じ構造を使用して、積Q.Rを累積し、次いで、(Cの第1の要素の計算における待ち時間が考慮に入れられると)積R.Cを再度並列に差し引くことによって、残差行列Qを更新することができる。これら両方の計算を行うために、好ましくは、積和ユニットの一方への入力は、例えばマルチプレクサを使用することによって、RとCとの間で切り替えることができる。さらに、一部の好ましい実施形態において、積和ユニットの一方は、積C.CおよびR.Rを決定するために使用することもできる。これを実施するために、積和ユニットの一方の両方の入力は、例えば、マルチプレクサの対によってCまたはRのいずれかに選択的に結合され得ることが好ましい。さらに、NMF手順の好ましい実施形態は、ループの開始および終了時にQを変更することを伴うため、好ましくは、積和ユニットのうちの一方が、入力がQブロックメモリの出力に結合されており、この積和ユニットの出力がQブロックメモリ(デュアルポート)への書き込み入力を提供する状態で、加算ユニットを有する。
【００３３】
マルチプレクサによるRまたはCの計算および選択の順序付けは、プロセッサブロック内の状態機械によって制御することができ、これは、Qブロックメモリをアドレス指定するために使用することもできる。しかし、すべてのプロセッサブロックは、(残差行列Qの異なる部分、および行および列の因子行列RおよびCの対応する異なる部分を使用するにもかかわらず)実質的に同時に実質的に同じ計算を行うので、プロセッサブロックのうちの1つのみ、すなわち「マスター」プロセッサブロックのみがこうした制御回路を組み込む必要がある。次いで、他のプロセッサブロックは、「スレーブ」プロセッサブロックとみなされ、マスタープロセッサブロックからタイミング信号および制御信号を取得する。一部の好ましい実施形態において、状態機械は、他の値(特にQ.C;Q.R)を計算する前に、まず分母式の値(C.C;R.R)を計算するようにマルチプレクサおよび積和ユニットを制御する。
【００３４】
ハードウェアアクセラレータの全体的なアーキテクチャに戻って、上述したように、行行列におけるデータは、例えば、160行には8ブロック(160ラインディスプレイの場合。この例では、偶然にもサブフレームと同じライン数)など、1組のブロックに分割される。同様に、列行列は、10ブロックまたは360列ディスプレイなど、いくつかのブロックに分割される。したがって、各プロセッサブロックは、1組の行および列のデータ、上記の例では、20行および36列のデータを処理する。行データバスは、行のブロックごとに提供され、これは、行のブロックのデータを、この行データを処理するプロセッサブロックの組(列ブロックごとに1つ)に提供する。同様に、各列ブロックは、列のブロックのデータを、ブロックの列データを処理する対応するプロセッサブロック(行ブロックごとに1つ)に提供する関連の列データバスを有する。後述する実施形態では、行ブロックの行データバスおよび列ブロックの列データバスは、任意の時点に、例えば8ビット値など、単一の行(または列)値を運ぶ。この場合、プロセッサブロックは、単一の行値および単一の列値を任意の時点または処理時に受信する。プロセッサブロック状態機械は、処理前に、一度に1つ、それぞれの行行列および列行列ブロックから行および列の値を提供するよう制御するために、行および列のブロックメモリ制御回路に結合されており、完全なブロックが処理された後、結果データ(好ましくは、プロセッサブロック内でラッチされる)は、行または列プロセッサブロックの関連のチェーンに沿って、行および列の因子行列の累積および更新のために、数値演算ブロックに戻される。この場合も、上述したように、好ましい実施形態において、プロセッサブロックは、4つの結果データ接続、2つの入力、および2つの出力を有し、矩形行列を形成するため、行および列の結果データは、同時にプロセッサブロックの行列を通過し、後述するように、この例では、北方向(列の場合)および西方向(行の場合)に渡され得る。しかし、他の実施形態において、例えば、2つ以上の行および/または列の行列値をプロセッサブロックに同時に提供するために、より広い行および/または列ブロックデータバスを使用することもできることを当業者であれば理解されよう。これによって、データ処理のレートは向上するが、これらのより広いデータバスを利用するために、より多くの積和ユニットが提供されることが好ましい。例えば、2対の行および列のデータ値を同時に処理するために、2対の積和ユニットが提供されることが好ましい。一般的な場合、プロセッサブロックによって同時に処理される行および列のデータ要素の対ごとに、少なくとも1対の積和ユニットが提供されることが好ましい。潜在的に、それぞれの行および列のデータブロックのすべての行および列のデータ項目は、シリコン面積の増加を犠牲にして、高速化のために、プロセッサブロックによって同時に処理され得る。
【００３５】
本発明は、さらに、電気光学ディスプレイのドライバ、より詳細には、上述したようにNMFハードウェアアクセラレータを組み込むOLEDディスプレイなどの発光型ディスプレイを提供する。こうしたドライバと共に使用され得る発光型ディスプレイの例には、パッシブマトリックスOLEDディスプレイ、無機LEDディスプレイ、プラズマディスプレイ、真空蛍光ディスプレイ、およびiFire(登録商標)のような薄膜電子発光ディスプレイ(thick and thin film electroluminescent display)などがある。
【００３６】
一部の好ましい実施形態では、ハードウェアアクセラレータは、特に、上述した現在好ましいNMF手順において計算を行うよう構成されている。したがって、関連の態様において、本発明は、ハードウェアが非負行列因子分解(NMF)計算を高速化する方法を提供し、計算は、以下を反復的に決定することを含む。
Qxy = Qxy + RpyCxp  xおよびyごと (1)
【００３７】
【数４】
2009530730.tif 000006
【００３８】
【数５】
2009530730.tif 000007
【００３９】
Qxy=Qxy−RpyCxp xおよびyごと (4)
この場合、式(1)から(4)は、各反復のpの値ごとに評価され、式中、Wxypは、重み係数を含み、この方法は、pごとに、対応する複数のプロセッサブロックにわたって分散される複数のメモリブロックにQを格納する段階と、式(2)の分母を評価する段階と、QxyおよびRpyを決定するために、前記複数のプロセッサブロックにわたって実質的に同時に式(2)の分子および式(1)への貢献を評価する段階と、式(3)の分母を評価する段階と、CxpおよびQxyを決定するために、前記複数のプロセッサブロックにわたって実質的に同時に式(3)の分子および式(4)への貢献を評価する段階とを含む。
【００４０】
実施形態において、変数biasをゼロとすることができ、この場合、この変数の提供は、省略されてもよい。重み係数Wxypは、実装に応じてスカラー、ベクトル、または行列としてもよく、または、Wxypを省略することができる(この場合、1の値が提供される)。
【００４１】
大まかに言えば、式(1)および(2)は、並列に評価され、複数のプロセッサブロックにわたって分散され、その後、これらのプロセッサブロックからの部分的な結果を結合する。同様に、式(3)および(4)は、好ましくは、同じように実質的に並列に評価される。
【００４２】
別の態様において、本発明は、ハードウェアが非負行列因子分解(NMF)計算を高速化するシステムを提供し、計算は、以下を反復的に決定することを含む。
Qxy = Qxy + RpyCxp  xおよびyごと  (1)
【００４３】
【数６】
2009530730.tif 000008
【００４４】
【数７】
2009530730.tif 000009
【００４５】
Qxy = Qxy − RpyCxp  xおよびyごと  (4)
この場合、式(1)から(4)は、各反復のpの値ごとに評価され、式中、Wxypは、重み係数を含み、このシステムは、対応する複数のプロセッサブロックにわたって分散される複数のメモリブロックにQを格納する手段と、式(2)の分母を評価する手段と、式(2)の分子および式(1)への貢献を評価する手段と、式(3)の分母を評価する手段と、CxpおよびQxyを決定するために、前記複数のプロセッサブロックにわたって実質的に同時に式(3)の分子および式(4)への貢献を評価する手段とを含む。
【００４６】
この場合も、変数biasをゼロとすることができ、重み係数Wxypは、スカラー、ベクトル、行列、または1とすることができる。
【００４７】
さらに別の態様において、本発明は、入力行列(Q)を1対の第1および第2の因子行列(R;C)に因子分解する非負行列因子分解(NMF)ハードウェアアクセラレータを提供し、ハードウェアアクセラレータは、前記第1の因子行列(R)の要素を格納する第1のメモリストアと、前記第2の因子行列(C)の要素を格納する第2のメモリストアと、複数の(NMF)演算を並列に行う、前記第1および第2のメモリストアに結合されているプロセッサの格子と、前記入力行列(Q)の前記プロセッサの格子への書き込みを制御し、前記第1および第2の因子行列の要素を前記それぞれの第1および第2のメモリストアに書き込むよう前記プロセッサを制御するコントローラとを含む。
【００４８】
上述したハードウェアは、例えば、FPGA(フィールドプログラマブルゲートアレイ)またはASCI(特定用途向け集積回路)、またはカスタムシリコンに実装され得る。したがって、本発明は、さらにこうしたハードウェアを記述するプロセッサ制御コードを運ぶキャリア(例えば、CD-ROMなどのディスクまたは光または電気信号キャリア)を提供する。一般に、この性質のハードウェアは、RTL(レジスタトランスファレベルコード)などのコードを使用して、または、より高いレベルでは、例えば、SystemCなどの言語を使用して記述される。
【００４９】
一部の実施形態では、ハードウェアアクセラレータは、単一の集積回路上に実装される。第1および第2の因子行列メモリは、オンチップまたはオフチップとすることができる。
【００５０】
したがって、別の態様では、本発明は、行列因子分解のための集積回路(IC)を提供し、ICは、第1および第2の因子行列(R;C)への因子分解のための対象の行列を表す入力データ行列を受信する入力と、第1の因子行列メモリ(R)のブロックに格納されているデータにそれぞれアクセスする複数の第1のデータバスと、第2の因子行列メモリ(C)のブロックに格納されているデータにそれぞれアクセスする複数の第2のデータバスと、プロセッサブロックの行列を含み、各プロセッサブロックは、前記第1のデータバスのうちの1つに結合されている第1のプロセッサブロックデータバスと、前記第2のデータバスのうちの1つに結合されている第2のプロセッサブロックデータバスと、結果データ出力と、前記因子行列の対の積と前記対象の行列との差を表す行列(Q)の一部分を格納するプロセッサメモリブロックと、少なくとも1つの積和ユニットを含み、前記プロセッサメモリブロックに結合されている第1の入力と、前記第1および第2のプロセッサブロックデータバスのうちの一方または両方に結合されており、前記結果データ出力に結合されている出力を有する第2の入力とを有するデータプロセッサとを有する。
【００５１】
実施形態において、各ICは、プロセッサブロックのアレイを提供し、ICは、拡張性のあるハードウェア実装を提供するために、格子形式でスタックまたは結合され得る。上述した本発明の態様の特徴のいずれか、またはすべては、例えば、上述したように、プロセッサブロックおよび/または相互接続の特徴を含めて、オンチップで提供されてもよい。特に、ICは、プロセッサブロックのうちの1つが、タイミング信号および制御信号を提供する、他のもののマスターとして働くことができるようにする回路を含んでいてもよい。しかし、この特徴は、例えば信号によって外部から無効にすることができることが好ましい。それは、プロセッサの格子において、1つのみマスターとして機能する必要があるからである。したがって、タイミング信号および制御信号を、ICの外部接続でも使用可能にさせ、1つのICが1つまたは複数の他のものを制御することができるようにすることが好ましい。
【００５２】
関連の態様において、本発明は、入力行列(Q)を1対の第1および第2の因子行列(R;C)に因子分解するための非負行列因子分解(NMF)の集積回路(IC)を提供し、ICは、前記第1および第2の因子行列(R;C)の要素をそれぞれ格納する第1および第2のメモリストアにアクセスするための外部バスに結合されているプロセッサの格子を含む。
【００５３】
好ましくは、プロセッサはそれぞれ、ローカルメモリを含み、複数のスレーブプロセッサおよび1つのマスタープロセッサを含み、マスタープロセッサは、前記スレーブプロセッサにおいて、ローカルメモリのアドレスおよびスレーブプロセッサのデータ処理操作のうちの一方または両方を制御するよう構成されている。
【００５４】
実施形態において、格子の各プロセッサは、前記入力行列の領域が処理され得るように、前記入力行列の対応する部分を処理するよう構成されている。次いで、好ましくは、ICは、複数の前記入力行列の領域を処理するために、複数の集積回路を接続できるようにする外部バスを有する。例えば、格子は、矩形格子とすることができ、集積回路は、北、南、東、および西のデータ接続を有するようにすることができる。
【００５５】
因子行列メモリがオフチップである場合、第1および第2(行および列)の因子行列メモリのそれぞれについて1つの2組の(高速)オンチップメモリが提供されることが好ましい。各組は、入力バッファ(データの読み取り用)、出力バッファ(データの書き込み用)、およびキャッシュ(データの作業用)を含むことが好ましい。
【００５６】
一例にすぎないが、添付の図面を参照して、本発明のこれらおよび他の態様についてさらに説明する。
【発明を実施するための最良の形態】
【００５７】
次に図2を参照すると、これは、TMA(トータルマトリックスアドレッシング)を行うためにNMFハードウェアを組み込むOLEDディスプレイドライバシステム200の機能ブロック図を示している。示されているように、システムは、ビデオフィード入力を有し、TMA駆動ディスプレイ(図示せず)を駆動する行および列の駆動データ出力204および206を提供する。図2のシステムを実装する、特に、概要で説明した好ましいNMF計算を実行するNMFハードウェアアクセラレータの好ましい一実施形態について後述する。しかし、図2は、いくつかの機能ブロックにマッピングされたシステムの操作を示しており、ハードウェア実施形態において(後述するように)、ハードウェアブロックのこれらの機能への割当は、示されているブロックの機能的な割当とは異なり得ることを理解されよう。例えば、後述するハードウェアアクセラレータは、示されている(非NMFの)機能ブロックのすべてのうちのいくつかを実施するように、デジタル信号プロセッサ(DSP)上で稼働するソフトウェアによって制御され得る。しかし、一部の好ましい実施形態において、実質的に示されているすべての機能がFPGA上で実施される。
【００５８】
引き続き図2を参照すると、ブロックA208は、スケーリングを行う。特に、このブロックは、以下の機能を行う。
1.ビデオ入力202からの次のフレームを読み取り、これを所望の解像度、例えば360×160の解像度などにスケーリング(好ましくは、スケーリングするのにサンプリングではなく平均を使用する)し、任意選択で色変換(下記参照)を行った後、色ごとに8ビットでVメモリ210に格納する。読み取りの間、フレームの平均輝度も計算され(ガンマ参照用テーブルを介して、以下のブロックBのステップ2を参照)、16ビット値としてレジスタav212に格納される。
2.iRC=sqrt(av/160)を計算し、レジスタ214に8ビットとして格納される。
3.ブロックB216に対して完了のフラグを立てる。
4.ブロックBからの完了フラグを待つ。
5.ステップ1に折り返す。
【００５９】
ブロックB216は、セットアップ機能を行う。特に、このブロックは、以下の機能を行う。
1.ブロックAからの完了フラグを待つ。
2.Q = gamma(V) − avの各値を設定する。式中、gamma()は、8ビットグレイレベルを16ビット輝度に変換するための参照用テーブルを表す。
3.ブロックD220からの完了フラグを待つ。
4.CおよびRの各要素をiRCに設定する。
5.iRC'=iRCを設定する。
6.ブロックA208およびC218に対して完了のフラグを立てる。
7.ブロックCからの完了フラグを待ち、1に折り返す。
【００６０】
ブロックC218は、ハードウェアで高速化されたNMF機能を行う。特に、このブロックは、以下の機能を行う。
1.ブロックBからの完了フラグを待つ。
2.例えば、後述するように、NMF機能を行う。
3.ブロックDおよびBに対して完了のフラグを立てる。
4.1に折り返す。
【００６１】
ブロックD220は、パイプライン型の後処理を行う。特に、このブロックは、以下の機能を行う。
1.バッファ1  222を空白のディスプレイに設定する(C' = R' = i = 0, t = 1)。
2.バッファ2  224を確保する。
3.ブロックB216に対して完了のフラグを立てる。
4.ブロックC  218からの完了フラグを待つ。
5.例えば後述するようにR'、C'、tおよびiを生成し、現在のバッファに書き込む。
6.新しいバッファの用意ができていることを出力制御ブロック226に合図し、確認を待つ。
7.バッファを交換する。
8.3に折り返す。
【００６２】
出力ブロック226EおよびFは、出力制御機能を行う。これらのブロックは、フレームバッファからデータを読み取り、それを行および列のドライバに出力する。図3は、図2のシステムの行ドライバ回路の例の詳細を示しており、これは、図1bの構成と同じような方法で行駆動比を決定する。同様に、図1bに示されている列ドライバ回路も使用され得る。必要に応じて、スイスのSTMicroelectronics社のSTV8810(384 Column Driver for Colour/Monochrome Passive Matrix)など、適した列ドライバ集積回路が使用されてもよく、この場合、システムは、このICを駆動するためのタイミング信号を生成し得る。各ドライバ204、206は、シフトレジスタを介してサブフレームデータをクロック制御し、すべてのデータが定位置にある場合、データおよび直前のサブフレームは、タイムアウトしており、データが「ロードされ」、次いで、ディスプレイを駆動する。好ましい場合、1つのデータポートを使用することができ、行ドライバを介して列ドライバに、データトークンをクロック制御することができる。また、列ドライバによる電流出力は、実施形態では、列ドライバのシリアルポートを介して設定される。必要な場合、列ドライバは、シリアルポートを介してセットアップされてもよい。好ましくは、サブフレームタイミング(t)は、後述するように、システムによって制御される。サブフレーム表示期間の間、次のサブフレームのデータがロードされる。
【００６３】
一実施形態では、平均して、520個の(360 + 160)データサンプルがサブフレームにロードされる時間は、l/(90Hz)/(160サブフレーム) = 69μsである。サブフレーム時間は、10μsと11msとの間で可変であり、したがって、最大所要出力データレートは、47MB/sであった。この実施形態では、ピクセルクロックは、時間tにおいて63回クロック制御し、最小tは10usであり、6.4Mhzの最大クロックレートとなった。最大tは11msであり、5.7kHzの最小クロックレートとなった。好ましくは、クロック精度は、時間tにおいて、実質的に63サイクルを保証するのに十分であるべきである。あるサブフレームについてtが0である場合、このサブフレームは、スキップされる(ゼロ時間の連続したサブフレームがあり得る)。
【００６４】
次に、ディスプレイデータ処理、特に、前処理、基本的なコアのNMF手順の一実施形態、後処理、および任意選択であるが他の所望の構成要素についてより詳しく説明する。好ましい実装形態では、システムは、実質的にフルビデオレート(1秒当たり25フレーム)で動作することができる。
【００６５】
表1(下記)は、各変数の簡単な説明を格納要件と共に記載する。
【００６６】
【表１】
2009530730.tif 000010
【００６７】
まず、好ましい前処理、特に、色域のシフトについて説明する。
【００６８】
コア手順は、3つ(任意選択で4つ-下記参照)の行列、Q、R、およびC、およびiRCの値において行われる。これらの行列は、行列Vで保持された入力画像のいくつかのサンプル操作に基づいてシードされる。Vは、空き容量を節約するために、未ガンマ補正ピクセルの輝度(un-gamma'd pixel luminances)ではなく、画像の8ビットのグレイスケール値を保持する。
【００６９】
画像は、ビデオソースから読み取られ、ディスプレイの解像度にスケーリングされ(ピクセル平均により)、ディスプレイの形状に一致するように回転される。この結果は、Vに格納される。
【００７０】
以下の式は、必要な計算の残りを示す。言及されるgamma()関数は、8ビットグレイスケール値を16ビット輝度値に関連付ける参照用テーブルである。この参照用テーブルは、2.4のガンマを前提とし、最大8ビット値(255)が65024にマッピングされているものでもよい。ガンマ関数は、入力RGB信号を、PLED(ポリマーLED)原色に補正するために、以下のR'、G'、B'の式を使用して色変換を行うこともできる。指定された行列Mは、プログラム可能であり、符号付き12ビット整数のアレイとして格納され得る。最初に、行列は、256*単位行列(identity matrix)に設定することができる。
R' = (M11R + M12G + M13B) / 256
G' = (M21R + M22G + M23B) / 256
B' = (M31R + M32G + M33B) / 256
av = average(gamma(Vxy))
iRC = (av/160)0.5
Qxy = gamma(Vxy) − av
【００７１】
最後に、RおよびCのすべての要素は、iRCと等しくなるように設定されるべきである。avの値は、例えば、ガンマテーブル参照をブロックAおよびBの両方において使用することによって、Vの読み込み中に計算されてもよいが、いずれも同時にアクセスを要求してはならない。しかし、代替の実装形態が可能である。
【００７２】
再度ブロックC218(ハードウェアで高速化されたNMF)を参照すると、一実施形態において、基本的な手順は、反復i(i=1から20)ごと、および各反復内のサブフレームp(p=1から160)ごとに、以下の4ステップ(式)を順々に行う。
xおよびyごと; Qxy = Qxy + RpyCxp
yごと;
【００７３】
【数８】
2009530730.tif 000011
【００７４】
xごと;
【００７５】
【数９】
2009530730.tif 000012
【００７６】
xおよびyごと; Qxy = Qxy - RpyCxp
【００７７】
固定値biasは、重み付けであり、これは、ゼロとすることができるが、一実施形態では、64と128との間の値を有することができる。実施形態では、5から100、例えば約20の反復が、サブフレームごとに行われる。RpyおよびCxpについて得られた値は、好ましくは、RおよびCの符号無し8ビットの格納に切り捨てられる(また、<0、または>255である場合、適切な限界に設定される)。RpyおよびCxpの式において、分母は、変わらないため、y(Rpyの場合)またはx(Cxpの場合)ごとに再計算される必要はない(しかし、これは、後述するいくつかの変形体には当てはまらない)。分子および分母の一時的な格納値は、除算まで精度の損失がない十分なビットのものであることが好ましい。ハードウェアNMFは、上記の4つの式における和/積要素のうちの2つ以上の実質的に並列の評価を可能にするために、パイプライン型であることが好ましい。
【００７８】
次に、好ましい実施形態において、図2のシステムからの列電流(パルス幅変調による)および行比率の実質的に直接の駆動を可能にするために、実質的に、スケーリングを行う後処理について説明する。この後処理は、いくつかの異なる方法で行われ得るが、一般的なステップは、下記に与えられる式によって示される。与えられたスケーリング係数などは、特定の用途に従って変更することができることを当業者であれば理解されよう。
【００７９】
したがって、一実施形態において、出力用のRおよびCに保持されているデータの処理に使用されるステップは、以下の通りである。
pごとに
【００８０】
【数１０】
2009530730.tif 000013
【００８１】
かつ
【００８２】
【数１１】
2009530730.tif 000014
【００８３】
である場合、
【００８４】
【数１２】
2009530730.tif 000015
【００８５】
サブフレーム時間tpは、以下によって得られる。
【００８６】
【数１３】
2009530730.tif 000016
【００８７】
(10ビットに切り捨てられる。)
【００８８】
tpの値がオーバーフローする場合(1つのサブフレームのみが任意の情報を含む場合のみ)、これは、1023に設定されてもよい。
【００８９】
次に、tpおよび列基準電流を使用してCをスケーリングする(好ましい実施形態において、例えば、図1bを参照して説明したタイプの行ドライバなど、行は、自動的に比例化されるが、他の実施形態において、特定の行駆動値を、行ごとに計算することができる)。
pごとに
【００９０】
【数１４】
2009530730.tif 000017
【００９１】
および
【００９２】
【数１５】
2009530730.tif 000018
【００９３】
(好ましくは、赤、緑、青のそれぞれについて、6ビットに切り捨てられる。)
式中、i0cは、3つの6ビットの値の組であり、好ましくは、外部でプログラム可能であり、赤、緑、および青のピクセルについて、公称の基準電流を表す。デフォルトの値の例は、51,39,51である。
【００９４】
【数１６】
2009530730.tif 000019
【００９５】
が与えられた場合、Cを適切なPWM駆動までスケーリングする(引き延ばす)ことが好ましい(が、他の実施形態では、PWMクロックは、変えることができる)。
【００９６】
【数１７】
2009530730.tif 000020
【００９７】
(6ビットに切り捨てられる。)
【００９８】
この式において、x値は、色順RGBRGB...であるため、x=1の場合、io1およびip1を使用し、x=2の場合、i02およびip2を使用するなど、以下同様である。次いで、
pごとに、R'xp = 2nRxp、
【００９９】
【数１８】
2009530730.tif 000021
【０１００】
列および行のディスプレイドライバには、次いで、C'xpおよびR'xpが提供される。
【０１０１】
上記の手順への変更は可能である。例えば、画像の緑チャネルにおけるノイズが赤または青のチャネルにおけるノイズより顕著であるという観察に基づいて、少し余分な計算と引き換えに、知覚による色ノイズ低減が可能である。これによって、基本的なNMF手順の上記の式は、以下のように変更される。
yごと;
【０１０２】
【数１９】
2009530730.tif 000022
【０１０３】
この場合、色の重み付けは
【０１０４】
【数２０】
2009530730.tif 000023
【０１０５】
別の変形は、低グレイレベルノイズを低減するが、かなりの余分な計算を必要とし、それにもかかわらず、最終的な画像の潜在的に大幅な向上を提供する。上述した手順は、画面に生成される画像における線形誤差を最小限に抑えるよう働く。しかし、知覚がかなり非線形であるため、これは、低い輝度レベルにおいて知覚誤差の増大をもたらす傾向にある(1ビットの変化は、より大きい変化率を表す)。これは、Vに基づいて(任意選択で、実装に応じて)重み係数Wを含めることによって補正することができる。この実施形態では、Wは、以下に示すように定義される(上記で言及された重みWxypは、汎用重み係数であることに留意されたい)。
【０１０６】
【数２１】
2009530730.tif 000024
【０１０７】
Wの使用は、NMF式を次のように変更する。
yごと;
【０１０８】
【数２２】
2009530730.tif 000025
【０１０９】
xごと;
【０１１０】
【数２３】
2009530730.tif 000026
【０１１１】
さらに、例えば、Wを3ビットに増やし、緑のピクセルごとに1を追加することによって、または緑の列ごとにビットシフトをハードコーディングすることによって、上述した色の重み関数を含めることもできる。このオプションの特徴を含めることは、比率ごとに分母の再計算を必要とし、したがって、反復ごとに必要な計算数がかなり増加する。これに対する埋め合わせとして、結果として生じる解決策は、すぐれており、より迅速に収束する。
【０１１２】
次に、このシステムの好ましいハードウェアアーキテクチャのさらなる詳細について説明する。
【０１１３】
ハードウェア実装-詳細
160サブフレームごとに20回の反復で25fpsのフレームレートを達成するXilinx Virtex-4  SX35  FPGAにおいてなされたハードウェア実装について詳しく説明する。この実装は、上述したように、データの前および後処理を含む。
【０１１４】
前に説明したものと同じような方法で、手順の1回の反復は、サブフレームpごとに1回の、以下の式のNUM_ITERATIONSの反復実行を含む。
Qxy = Qxy + RpyCxp  (1)
【０１１５】
【数２４】
2009530730.tif 000027
【０１１６】
【数２５】
2009530730.tif 000028
【０１１７】
Qxy = Qxy − RpyCxp  (4)
式中、
0≦x≦NUM_COLS−1
0≦y≦NUM_ROWS−1
0≦p≦NUM_SUBFRAMES−1  (5)
biasは、何らかの重み値、iRCは、行および列のメモリの初期値である。
【０１１８】
アルゴリズムは、対象の画像またはそれから導出された画像行列に等しくなるように設定された行列Qで開始する。これは、メモリに保持され、次元NUM_ROWS×NUM_COLSを有し、RおよびCメモリのすべての要素は、iRCに等しくなるように設定される。アルゴリズムは、NUM_SUBFRAMESサブフレームを使用するため、RおよびCのデータを保持するためのメモリは、それぞれNUM_ROWS×NUM_SUBFRAMESおよびNUM_COLS×NUM_SUBFRAMESのサイズのものである。
【０１１９】
プロセッサブロックによる、第1の対の式(1および2)、および次いで第2の対の式(3および4)のペアワイズ計算に基づく、速度のためのこれらの式の並列実装について説明する。大まかに言えば、各プロセッサブロックによって部分計算が行われ、こうしたブロックの多くは、FPGAにおいて複製され、Q、R、およびCの複数の値を同時に読み取り、計算できるようにする。このように、25fpsのレートで必要な行および列の行列RおよびCを計算するのに十分な、アルゴリズムの演算の高速化が得られる。
【０１２０】
図4aは、並列ハードウェアアーキテクチャ400の概要図を示しており、Qメモリは、セグメント化され、x_blocks×y_blocksプロセッサブロック402に組み込まれており、そのそれぞれは、Qメモリのp×qセグメントを含む。
【０１２１】
【数２６】
2009530730.tif 000029
【０１２２】
適切な記憶域への、およびそこからの転送は、memory_controllerブロック404によって制御される。同じ行内のすべてのプロセッサブロック402は、共通のCメモリ406を共有し、同じ列内のものは、同じRメモリ408を共有する。各プロセッサブロックからの部分的な結果は、その隣に渡される。これは、結合器(数値演算)ブロック410および412に達するまで続行され、そこで結果が結合され、式2および3によって必要とされる除算が行われる。
【０１２３】
図4aに示されている並列ハードウェアアーキテクチャ400は、full_procモジュール500(図5に示されている)によって実装されており、ハードウェアへの入力および出力を定義し、プロセッサブロック402の複製によって、TMA(トータルマトリックスアドレッシング)NMF手順の高速化された計算を可能にする。図4aにおいて、さらに後述するように、これらのプロセッサブロック402*のうちの1つは、マスタープロセッサブロックであり、この制御回路の複製を省くために、制御信号(点線によって示される)を他のプロセッサブロックに提供する。
【０１２４】
共通C(列)メモリ406は、それぞれ1組の列を処理(そのデータを格納)するいくつかのブロックに分割され、共通R(行)メモリ408は、同様に、論理的に分割される。図4bおよび4cには、このことが概略的に示されており、360列のデータは、それぞれ36個の列を処理する10個のプロセッサブロックに「水平に」分割され、160行のデータは、それぞれ20個の行を処理する8個のプロセッサブロックに「垂直に」分割される。したがって、大まかに言えば、ハードウェアは、各プロセッサが北、南、東、西のデータ接続を有し、それによってプロセッサブロックが互いにデイジーチェーン接続される、タイル型のプロセッサアーキテクチャを有している。示されているように、結果データは、プロセッサブロックを介して北および西に、それぞれの列および行の数値演算ブロックおよびメモリの方に流れる。
【０１２５】
行列Qは、分散したやり方で、プロセッサブロック内に格納され、この例では、各ブロックは、36×20の単語記憶領域を有し、同時に読み取り、書き込みを行うことができるように、デュアルポート式であることが好ましい。これを好ましく複製するのは、Qxyを使用して式(3)におけるCxpの第1の値をいったん更新し、その後のCの値の計算に影響を与えることなくQを更新しながら、式(4)の評価を続行できるようにするためである。行列Qは、プロセッサブロックに格納されるが、退出することはない。単に、RおよびCを更新するために残りを格納するだけである。
【０１２６】
行における各プロセッサブロックは、それが処理する行の組の(読み取り/書き込み)データバスrに接続され、同様に、列における各プロセッサブロックは、それが処理する列の組の(読み取り/書き込み)データバスcに接続される。
【０１２７】
1つのバージョンのハードウェアにおけるこれらのデータバスの操作を例示するために、説明した36列×20行の例の場合の、プロセッサブロックの完全な1組のrおよびcの値を必要とする計算について考察する。列および行データのブロックにアクセスするために、r_valid信号がアサートされる一方、r値のインデックス0が出力され、c_validがアサートされ、対応する(36個の)c-値が読み取られる。その後、このc_validが1クロックサイクル間アサート停止された後、再度アサートされ、次いでr_index=lで同じ組の36個のc値が読み取られ、以後、ブロックのすべてのr値が読み取られるまで行われる。次いで、c_validおよびr_validの両方がアサート停止される。別のバージョンのハードウェアでは、r値ごとにc値の完全な1組が同時に読み取られる、あるいはc値ごとにr値の完全な1組が同時に読み取られる、または、あるブロックのr値およびc値は、上述したように、(r値ごとに1組のc値ではなく)c値ごとにブロックのr値の完全な1組を読み込みながら、連続して読み取られてもよい。一般に、データが読み取られる順序は、特定の製品の計算に必要とされる順序に従って選択されることを、当業者であれば理解されよう。好ましい実施形態において、計算することが望ましい製品について、図11を参照して、下記でより詳しく説明する。
【０１２８】
各プロセッサブロックは、(結果)データの入力および出力を有し、これらは、図4aに示されているように、デイジーチェーン接続されている(各チェーンの入力端で0に接続する)。すべてのプロセッサからの結果が同時に用意できているため、データ(単一のスカラー結果値)は、クロックサイクル当たり1ブロックのレートで、チェーンに沿って数値演算ブロック410、412にシフトされる。したがって、数値演算ブロックによって累積し、さらに処理し、その後行メモリに格納するために、10個のクロックサイクルを使用して、例えば、(スカラー)結果を、さらに10個のプロセッサブロックに沿って西に渡す。
【０１２９】
次に図5を参照すると、これは、fu11_procモジュール500(全TMA手順を実施する)のブロック図、特にモジュールへの外部接続を示している。以下の表2に、好ましい実施形態の図5に示されている信号のそれぞれのタイプ、幅、および説明が示されている。
【０１３０】
【表２】
2009530730.tif 000030
【０１３１】
好ましい実施形態において、full_procモジュール500は、次のように初期化される。
1.適したクロック信号は、clk_inに適用される。
2.reset_inは、最初にhighに設定されており、次いで、少なくとも100ns後、lowに設定される。
3.reset_out信号がlowになる以前は、データはfull_procモジュールに渡されない。これは、バッファされたバージョンのclk_inによって制御されるFPGAのデジタルクロックマネージャ(DCM)のLOCKED出力の逆であるため、reset_out信号が有効になる前に遅延が観察される。
【０１３２】
reset_outラインがlowになると、ユーザは、QおよびiRCデータをfull_procモジュールに渡すことができるようになる。
【０１３３】
次に、ブロック間にデータを渡すことについて説明する。Qメモリがセグメント化されているため、またRおよびCメモリが複数のサブフレームのデータの価値を含むため、データは、正しい順序でQ、R、およびCメモリにロードされるべきである。図6は、RおよびCメモリのロードの順序(すなわち、ブロックワイズの、一度に1組のサブフレームデータ)を示しており、これは、いくつかの画像サブフレームの存在によって複雑になる。矢印は、iRCがメモリにロードされるアルゴリズムの開始時に一度、およびそれらが所望の結果を含む終了時に一度、各メモリのデータ要素がアクセスされる順序を示している。
【０１３４】
以下の手順は、RおよびCメモリのロード時に使用されるのが好ましい。
1.アルゴリズムの開始時に、iRCの適切な値が選択され、init_rowsおよびinit_colsのラインがそれぞれNUM_ROWS×NUM_SUBFRAMESおよびNUM_COLS×NUM_SUBFRAMESのクロックサイクルの(すなわち、iRCをすべての行および列に書き込む)間にアサートされるべきである。
2.信号kr_bias、kc_bias、kr_bias_iRCおよびkc_bias_iRCは、常に正しい値に設定されるべきである。
kr_bias = NUM_ROWS×bias
kc_bias = NUM_COLS×bias
kr_bias_iRC = NUM_ROWS×iRC×bias
kc_bias_iRC = NUM_COLS×iRC×bias  (7)
【０１３５】
Qメモリデータは、図7の矢印によって示されるように、プロセッサブロックを介して南の方向に順次シフトすることによって、各プロセッサのメモリにロードされる(これは、画像ピクセルをQメモリ内の位置に配列し直すことを伴うことがわかる)。各プロセッサのQブロックメモリの列に、同時にアクセスする。
【０１３６】
すべてのセグメント化されたQメモリのロードは、NUM_COLS×NUM_ROWSクロックサイクルかかるため、Qメモリのロードの好ましい手順は、次の通りである。
画像行列の第1の値がfull_procに渡されると、信号Q_validはアサートされ、Q行列の値がQメモリにロードされるNUM_COLS×NUM_ROWSの間、highに保持される。
【０１３７】
次に、図5に示されているfull_procモジュールのサブモジュールの操作の詳細について説明する。rc_mem_controlから開始する。
【０１３８】
図8に、データのロードおよびアンロード信号、行/列メモリ制御ライン、およびデバッグ信号を含むrc_mem_controlモジュールへの接続が示されている。rc_mem_controlモジュールは、行および列のメモリのメモリコントローラとして働く。その内部状態機械の現在の状態に応答して、rc_mem_controlは、行および列のメモリに適したアドレスを提供する。図8に示されている信号のそれぞれの説明が、以下の表3に示されている。
【０１３９】
【表３】
2009530730.tif 000031
2009530730.tif 000032
【０１４０】
好ましい実施形態では、状態機械は、どの記憶域がアクセスされるかを決定するために使用され、これは、評価される式に依存する。以下の表4に、状態機械の値、rc_mem_controlモジュールの操作、および評価される式の間の関係が示されており、これは、事実上、機械の機能を定義する。
【０１４１】
【表４】
2009530730.tif 000033
【０１４２】
次に、いずれも図9に示されているブロック図に従って、row_col_math_cおよびrow_col_math_rモジュールについて説明する。
【０１４３】
row_col_mathブロックの機能は、procブロックから来るデータを取得し、累積し、特に式2および3によって記載されているように、それ相応に除算を行うことである。デバイダブロックは、リソースに関して高価であるため、式2および3の被除数は、分母の逆数を掛けた分子として計算される。分母の逆数は、すべてのprocブロックについて同じであるため、この値は、row_col_mathマスターブロックにおいて計算され、次いでスレーブブロックに渡されるだけでよい。したがって、マスターブロックのみがデバイダを含んでおり、残りのスレーブは、比較的簡単な乗算を行う。
【０１４４】
【数２７】
2009530730.tif 000034
【０１４５】
および
【０１４６】
【数２８】
2009530730.tif 000035
【０１４７】
が累積されると、これらは、その逆数を計算するために、デバイダブロックに渡される。次いで、式2および3によって必要とされる除算を有効に行うために、1031を掛けた結果が乗算器に渡される。逆数計算は、累積に比べて比較的長い時間かかるため、小さいFIFOを使用して中間結果を保持する。図9に示されている信号のそれぞれの説明が、以下の表5に示されている。
【０１４８】
【表５】
2009530730.tif 000036
【０１４９】
次に、procブロックについて説明する。この例は、図10に示されている。式1〜4によって示されている計算の部分を実行するprocブロックは、以下の構成要素を含む。
1.2つの「DSP48」(積和)ブロック。これらは、式2および3によって必要とされる乗算-累積機能を実行する
2.セグメント化されたQメモリとして働くブロックRAM
3.Qメモリ用のアドレス生成器
4.例えば、計算の開始および終了、およびプロセスブロックが計算する式1および2または3および4の対を決定する状態機械など、コントローラ
【０１５０】
上述したように、プロセッサブロックを図4aに示すようなやり方で接続する1つの利点は、すべてのブロック間に相互接続があるため、1つのprocブロックは、マスターとして働くことができ、残りは、スレーブとして働くことができることである。この設計において、マスターブロックは、すべての構成要素1〜4を含むが、スレーブブロックは、アドレス生成器または状態機械を含まないため、ロジック量の実質的な節約がもたらされる。
【０１５１】
以下の表6に、マスターprocブロックの操作、その内部状態機械の状態、および評価される式の間の関係が示されており、これは、事実上、機械の機能を定義する。
【０１５２】
【表６】
2009530730.tif 000037
【０１５３】
full_procモジュール内のデータの個々のプロセッサ間の移動は、北、南、東、西のデータおよびデータ有効ラインを介して達成される。データが移動されることを示すc_shiftおよびr_shiftがアサートされ、d_southおよびd_eastからのデータは、隣接するプロセッサブロックのd_northおよびd_westにラッチされる。これは、データ有効ラインdv_north、dv_south、dv_east、およびdv_westについても当てはまり、各procブロックが計算を終了したとき、アサートされる。このように、データは、常に列/行の数値演算ブロックに到達するように、full_procモジュールの北および西の方に動かされる。図10に示されている信号のそれぞれの説明が、以下の表7に示されている。
【０１５４】
【表７】
2009530730.tif 000038
【０１５５】
次に図11aから11dを参照すると、これらは、プロセッサブロック402の構成における4つの連続的な段階を示す。図11aからわかるように、プロセッサブロックは、行列Qの一部分を格納するBRAM(ブロックランダムアクセスメモリ)1100を含む。このメモリは、例えば、図11bおよび11dに示されるように、デュアルポート式であり、一実施形態では、36×20の16ビットの記憶域が提供される。また、プロセッサブロック402内には、2つのデジタル信号処理モジュール1102、1104(上記のFPGAでは「DSP48sと呼ばれる」)も含まれている。これらのモジュールのそれぞれは、加算器1108に結合されている乗算器1106を含み、モジュール1104のうちの1つは、乗算-累積ユニットとして構成されている。DSPモジュール1104、1106への入力は、DSPモジュールへのデータ入力の、行rまたは列cのバスのいずれか、またはQメモリブロック1100への選択的接続を可能にするマルチプレクサ(図11には図示せず)によって選択可能である。また、プロセッサブロック402は、同期化のためにクロックトラッチ(clocked latch)を含む。特に、ラッチ1110は、結果データをプロセッサブロックのチェーンに沿って渡すことができるように、信号スカラー結果値をラッチする。これらのラッチは、選択可能な入力を有しており、マルチプレクサ1112を使用して、DSPモジュールの出力、またはチェーンにおける前のプロセッサブロックからのデータをラッチする。図11dからわかるように、プロセッサブロック1102内の加算器は、減算器としても構成され得る。図11dは、上述したように、実質的に並列に式3および4の計算を行うために、Qブロックメモリ1100からのデータを格納するバッファ1114も示す。
【０１５６】
引き続き図11aから11dを参照すると、図11aにおいて、DSPモジュール1104は、示されているように、c.cを計算するよう構成されている。したがって、プロセッサブロックは、上述した例では、この計算を行うために、Cの36個の値を受信する。次いで、プロセッサブロックは、DSPモジュール1102が図示のように1組のQの値を計算し、DSPモジュール1104が図示のようにQおよびCの積を計算するように、図11bに示されているように再構成される。この計算では、Rの20個の値のそれぞれについて、Cの36個の値が提供され得る。図11aおよび11bにおいて、結果データは、東から西に渡される。
【０１５７】
図11cにおいて、プロセッサブロック402は、r.rを計算するために、図11aと同じように構成され、結果データは、北に渡される。図11dにおいて、プロセッサブロック402は、Qの更新された値を計算し、QおよびRのデータの積を累積するよう構成され、これは、プロセッサブロックのチェーンを上って北に渡される。上述したように、上記の式2および3の除算は、それぞれの行および列の数値演算ブロックのうちの1つにおいて、一度行うだけでよく、次いで、逆数を掛けることによって実施され得る。
【０１５８】
次に、図12aから12eを参照して、ハードウェア、特に、プロセッサブロックの操作についてさらに説明する。まず、アルゴリズムの前半の評価について説明する。
【０１５９】
アルゴリズムの前半は、まず、次を評価する。
d = cp・cp  (8)
次いで同様に、以下を評価する。
Qnew = Q + rp・cp  (9)
【０１６０】
【数２９】
2009530730.tif 000039
【０１６１】
式中、knおよびkdは、適切な定数である。
【０１６２】
好ましい実施形態において、式(8)を解くために最も北(すなわち上)のブロックのみが必要である。というのは、cpは、プロセッサブロックを介して、一般に、北-南に進むからである。これを最初に解き、プロセッサブロックが
【０１６３】
【数３０】
2009530730.tif 000040
【０１６４】
の部分和を渡し出すときに式(10)の分母dを用意しておくこともできるようにする。式9が解かれ、全部プロセッサブロックの内部に格納される。そのインスタンス化された全名前は、図のすべての信号に先行し、例えば、信号r_validは、「/proc_test2_tb_v/uut/r_valid」として表される。
【０１６５】
図12aにおけるタイミング図は、式(8)について、一番左上のブロック(すなわち、最も北西のブロック)に渡されるデータを示している。これは、信号c_validがアサートされるとき、cの36個の値を受信する。バス信号rは、定義する必要はない(式8によって必要とされない)。一番上のプロセッサブロックの結果として得られたcp・cpの部分和は、プロセッサブロック内のレジスタに配置され、次いで、適切な数値演算ブロックによって累積されるように、d_eastを介してd_westに、西方に渡される(信号dv_eastは、東からプロセッサブロックに入ってくる有効なデータを示し、dv_westは、プロセッサブロックから西に出る有効なデータを示す)。
【０１６６】
図12bおよび12cは、式9および10を解くために提供されるデータのタイミングを示す。特に、図12bは、一番左上のブロックに渡される最初の2つの行値のタイミング図を示し、図12cは、一番左上のブロックに渡されるすべてのデータのタイミング図を示す。この場合もまた、数値演算ブロックによって累積されるように、部分和が、東から西に渡され(行および列データの各供給の後、かつ次の行および列データ値の提供中)、したがって、アルゴリズムの後半の用意ができている行メモリに格納される。
【０１６７】
次に、アルゴリズムの後半の評価について説明する。
【０１６８】
アルゴリズムの後半は、まず、次を評価する。
d = rp・rp  (11)
次いで同様に、以下を評価する。
【０１６９】
【数３１】
2009530730.tif 000041
Q'new = Qnew + rp/cpnew  (13)
【０１７０】
式13は、cpnewを必要とする(評価するのに時間がかかるため、式12を最初に解く必要がある)ため、プロセッサブロックは、内部でQnewの遅延なく、式を同時に解くことができない。図12dは、式4を解くために、一番左上のブロックに渡されるすべてのデータのタイミング図を示している。ブロックの部分和は、南から北に渡される。
【０１７１】
rp・rpが評価された後、cpnewの最初の値が解かれる。各r_validパルスの後の機能停止(cpnewを解くために、乗算器の待ち時間の間、機能停止が必要となる)を避けるために、式12は、式13と比較して、1つのr_validパルスずつ進められ、Qは、(正しい値rpにQの現在の値を掛けるように)2×_R_BLOCK_SIZE = 40ずつプロセッサブロックの内部にバッファされる。これは、図12eに示されており、図12eは、式12について、一番左上のブロックに渡されるすべてのデータについてのタイミング図を示している。
【０１７２】
図12fは、式12および13を同時に解くときの、一番左上のブロックに渡されるすべてのデータのタイミング図を示している。cpnewの部分和は、南から北に、列累算器ブロックに渡され、ここで、cpnewは、評価され、次の反復の用意ができている列メモリに格納される。
【０１７３】
任意選択ではあるが、好ましくは、ハードウェアは、入力データ前プロセッサも含み得る。これは、次の機能、4:2:2輝度-色度データのデコーダ、色空間変換器(上述したように、R'、G'、B'を計算するための行列乗算器を組み込み得る)、およびインタレースビデオの場合、(x方向に2ライン、4ピクセルの2×4アレイにわたる)平均化関数を実行するモジュールのうちの1つまたは複数を実施することができる。
【０１７４】
上述した技術の実施形態は、アクティブマトリックス均等物よりほんのわずか高い消費電力、および非常に低いコストで、可能なパッシブマトリックスTVサイズ画面(例えば8インチ以上)を作る画像データ処理を提供する。また、概要で説明したように、ハードウェアアクセラレータを様々な他の用途に使用することができる。したがって、実施形態において、データは、いくつかの組において存在し、対象は、各組からのデータを1つまたは複数の軸上、およびデータの特性(例えば、1組のタイプ、分類、低減されたパラメータ分析)を別の軸上に含む。実施形態において、特性は、付加的であり、したがって複数の組にわたる構成要素または特性の合計は有意である。これらの技術は、顔および他の画像照合/認識に、ネットワークセキュリティ、例えば内容ベースのテキストフィルタリングによって構築されたユーザのプロファイルのセマンティック表現を処理するために、入力データの低減された表現を提供するためのデータベース内の多変量データの処理に、多くの異なる種類のセンサデータ処理、例えば、主成分分析を行うために、遺伝子、プロテオーム、ヌクレオチド、アミノ酸配列データなどのマイクロアレイデータまたは生物配列データの処理、分析、または成分分析、例えば表現空間において局部的な特徴を見つけるため、または結合部位や相互作用部位を識別するために、機械学習、例えばオブジェクトやオブジェクト、画像、音、テキスト、単語などの一部分を記述するデータを分析するために、および一般に、データ分析およびパターン認識のための画像データの処理に使用してもよい。
【０１７５】
もちろん、他の多くの有効な代替を当業者であれば思い付くであろう。本発明は、記載の実施形態に限定されるものではなく、本明細書に添付の特許請求の範囲の意図および範囲内に含まれる当業者には明らかな変更を含むことを理解されたい。
【図面の簡単な説明】
【０１７６】
【図１ａ】本発明の一実施形態によるNMFハードウェアアクセラレータを含むOLEDディスプレイおよびドライバを示す図である。
【図１ｂ】ディスプレイの行および列のドライバの例の詳細を示す図である。
【図２】NMFハードウェアを組み込むOLEDディスプレイドライバシステムを示す機能ブロック図である。
【図３】図2のシステムの行ドライバハードウェア例の詳細を示す図である。
【図４ａ】本発明の一実施形態によるハードウェアNMFアーキテクチャを示す図である。
【図４ｂ】最初の対象/残留行列Qおよび関連の行(R)および列(C)の因子行列の略図を示す図である。
【図４ｃ】図4aの並列ハードウェアNMFアーキテクチャの行および列のメモリブロック-プロセッサブロックの割り振りの詳細を示す図である。
【図５】図4aおよび4cのハードウェアNMFアーキテクチャを実装するfull_procモジュールを示すブロック図である。
【図６】RおよびCメモリをロードする手順を示す図である。
【図７】分散されたQメモリブロックをロードする手順を示す図である。
【図８】メモリ制御モジュールを示すブロック図である。
【図９】行/列の数値演算モジュールを示すブロック図である。
【図１０】プロセッサブロックモジュールを示すブロック図である。
【図１１ａ】プロセッサブロックの構成における4つの連続的な段階を示す図である。
【図１１ｂ】プロセッサブロックの構成における4つの連続的な段階を示す図である。
【図１１ｃ】プロセッサブロックの構成における4つの連続的な段階を示す図である。
【図１１ｄ】プロセッサブロックの構成における4つの連続的な段階を示す図である。
【図１２ａ】システムの好ましい実施形態の操作を示すプロセッサブロックタイミング図である。
【図１２ｂ】システムの好ましい実施形態の操作を示すプロセッサブロックタイミング図である。
【図１２ｃ】システムの好ましい実施形態の操作を示すプロセッサブロックタイミング図である。
【図１２ｄ】システムの好ましい実施形態の操作を示すプロセッサブロックタイミング図である。
【図１２ｅ】システムの好ましい実施形態の操作を示すプロセッサブロックタイミング図である。
【図１２ｆ】システムの好ましい実施形態の操作を示すプロセッサブロックタイミング図である。
【符号の説明】
【０１７７】
100    OLEDディスプレイシステム
102    データおよび制御バス
103    フレームストアメモリ
105    第2の読み取りバス
109    列データ入力
110    列ドライバ
111    行データ入力
112    行ドライバ回路
120    パッシブマトリックスOLEDディスプレイ
124    行電極
128    列電極
150    ディスプレイ駆動データプロセッサ
200    OLEDディスプレイドライバシステム
202    ビデオ入力
204    駆動データ出力
206    駆動データ出力
208    ブロックA
210    Vメモリ
212    レジスタav
214    レジスタ
216    ブロックB
218    ブロックC
220    ブロックD
222    バッファ1
224    バッファ2
226    出力制御ブロック
400    並列ハードウェアアーキテクチャ
402    プロセッサブロック
404    memory_controllerブロック
406    Cメモリ
408    Rメモリ
410    結合器ブロック
412    結合器ブロック
500    full_procモジュール
1100    BRAM(ブロックランダムアクセスメモリ)
1102    デジタル信号処理モジュール
1104    デジタル信号処理モジュール
1106    乗算器
1108    加算器
1110    ラッチ
1112    マルチプレクサ
1114    バッファ
【図１ａ】
2009530730.tif 000047
【図１ｂ】
2009530730.tif 000048
【図３】
2009530730.tif 000049
【図４ａ】
2009530730.tif 000050
【図４ｂ】
2009530730.tif 000051
【図４ｃ】
2009530730.tif 000052
【図５】
2009530730.tif 000053
【図６】
2009530730.tif 000054
【図７】
2009530730.tif 000055
【図８】
2009530730.tif 000056
【図１１ａ】
2009530730.tif 000057
【図１１ｂ】
2009530730.tif 000058
【図１１ｃ】
2009530730.tif 000059
【図１１ｄ】
2009530730.tif 000060
【図１２ａ】
2009530730.tif 000061
【図１２ｂ】
2009530730.tif 000062
【図１２ｃ】
2009530730.tif 000063
【図１２ｄ】
2009530730.tif 000064
【図１２ｅ】
2009530730.tif 000065
【図１２ｆ】
2009530730.tif 000066
【図２】
2009530730.tif 000067
【図９】
2009530730.tif 000068
【図１０】
2009530730.tif 000069
【国際調査報告】
2009530730.tif 000070
2009530730.tif 000071
2009530730.tif 000072