(57)【特許請求の範囲】
【請求項１】
画像データの入力手段と、
前記画像データを記憶するフレームメモリと、
レーザー光を照射するレーザー発振器と、
スクリーン上のレーザー光の包絡線が所定形状となるよう、反射光学素子を互いに略直交する２つの軸を中心に振動させる偏向方向可変手段と、
レーザー光の照射中心方向が照射面に対し垂直でない投射角を有する場合に、前記反射光学素子の角度から三角関数を用いずにレーザー光の照射位置を求める多項式の係数情報が記憶された係数情報記憶手段と、
前記係数情報記憶手段に記憶された前記係数情報に演算を施して求めた係数、及び、前記反射光学素子の角度を前記多項式に適用することで、レーザー光の前記照射位置を演算する照射位置演算手段と、
前記照射位置演算手段が演算した前記照射位置に対応する前記フレームメモリのアドレスを演算するアドレス演算手段と、
前記フレームメモリへの連続アクセス時に非連続アクセス時よりも高速なデータの読み出し及び書き込みが可能であり、前記アドレスの画素情報を読み出すメモリ制御手段と、
前記画素情報に応じた輝度で前記レーザー発振器を発振させるレーザー駆動手段と、を有し、
前記メモリ制御手段は、
入力側からの前記画像データを一時的に記憶し、前記フレームメモリに記憶する入力バッファと、
読出しアドレスを生成するアドレス生成手段から、同じアドレスに対し連続した読み出し要求があるか否か、及び、描画対象外の前記画像データが記憶されたブランクアドレスに対する読み出し要求であるか否か、を判定する判定手段と、
同じアドレスに対する連続した読み出し要求でなく、かつ、ブランクアドレスに対する読み出し要求でない場合に、前記フレームメモリに読み出し要求を出力する読み出し要求出力手段と、
前記フレームメモリから前記画像データを取得する画像データ取得手段と、
前記フレームメモリから読み出されなかった前記画像データ及びブランクアドレスの前記画像データを再生するデータ再生手段と、を有することを特徴とする画像投影装置。
【請求項２】
前記照射位置演算手段が演算した前記照射位置が、前記入力手段から入力された前記画像データのアスペクト比を維持する矩形内又は所定の矩形内か否かが登録された判定テーブルを有し、
レーザー光の照射中心方向が照射面に対し垂直でないため前記所定形状が歪む場合であって、前記照射位置が前記画像データのアスペクト比を維持する矩形内又は所定の矩形内であると前記判定テーブルにより判定されない場合、
前記アドレス演算手段は、輝度が黒レベルの前記画素情報を前記メモリ制御手段に出力する、ことを特徴とする請求項１記載の画像投影装置。
【請求項３】
前記アドレス演算手段は、前記照射位置が前記画像データのアスペクト比を維持する矩形内又は所定の矩形内であると前記判定テーブルにより判定される場合にのみ、前記照射位置に対応する前記フレームメモリのアドレスを演算する、
ことを特徴とする請求項２記載の画像投影装置。
【請求項４】
前記入力手段から入力された前記画像データのアスペクト比を維持する矩形内又は所定の矩形内の前記照射位置を、前記照射位置演算手段が演算した前記照射位置に対応づける座標変換テーブルを有し、
前記照射位置が前記画像データのアスペクト比を維持する矩形内又は所定の矩形内である場合、前記アドレス演算手段は、前記座標変換テーブルを参照して変換後の前記照射位置に対応する前記フレームメモリのアドレスを演算する、
ことを特徴とする請求項２記載の画像投影装置。
【請求項５】
前記反射光学素子が第１の方向及び前記第１の方向と略直交する第２の方向にそれぞれ振動する場合、
前記多項式は、前記第１の方向の前記反射光学素子の水平角度を固定した場合に、前記第２の方向の振動範囲を前記反射光学素子が走査した場合のレーザー光の前記照射位置を近似する第１の多項式、及び、前記第２の方向の前記反射光学素子の垂直角度を固定した場合に、前記第１の方向の振動範囲を前記反射光学素子が走査した場合のレーザー光の前記照射位置を近似する第２の多項式である、
ことを特徴とする請求項１〜４いずれか１項記載の画像投影装置。
【請求項６】
前記第１の多項式は垂直角度に対する１次の多項式であり、前記第２の多項式は水平角度に対する２次の多項式である、ことを特徴とする請求項５記載の画像投影装置。
【請求項７】
前記第１の多項式の前記係数は垂直角度に応じて異なり、前記照射位置演算手段は垂直角度に対する２次の近似式に前記係数情報を適用して垂直角度毎に前記係数を求め、
前記第２の多項式の前記係数は水平角度に応じて異なり、前記照射位置演算手段は水平角度に対する２次の近似式に前記係数情報を適用して水平角度毎に前記係数を求める、ことを特徴とする請求項５記載の画像投影装置。
【請求項８】
前記判定手段は、同じアドレスに対する連続した読み出し要求の数を連続読み出し要求数としてカウントして前記データ再生手段に通知し、
前記データ再生手段は、前記判定手段により同じアドレスに対する連続した読み出し要求でないと判定されるまでの前記連続読み出し要求数に応じて前記フレームメモリから読み出された前記画像データを複製する、ことを特徴とする請求項１に記載の画像投影装置。
【請求項９】
前記判定手段は、アドレスが異なっていてもブランクアドレスに対する連続した読み出し要求の前記連続読み出し要求数をカウントして前記データ再生手段に通知し、
前記データ再生手段は前記連続読み出し要求数に応じて、予め定められたブランクの画像データを複製する、ことを特徴とする請求項８に記載の画像投影装置。
【請求項１０】
前記画像データ取得手段が取得した画像データ及び前記データ再生手段が再生した画像データを一時的に記憶する出力バッファと、
前記入力バッファと前記出力バッファの状態フラグを取得して、前記フレームメモリに対する書き込みのみ、又は、前記フレームメモリからの読み込みのみの連続転送が起こるように、前記入力バッファからの書き込み要求と前記出力バッファからの読み込み要求を調停する調停手段と、を有することを特徴とする請求項１、８又は９のいずれか１項に記載の画像投影装置。
【請求項１１】
前記調停手段は、前記出力バッファの容量の半分以上になるまで連続して前記フレームメモリから書き込みが生じ、前記入力バッファが空になるまで連続して前記フレームメモリに対して書き込みが生じるように、書き込み要求と読み込み要求を調停する、
ことを特徴とする請求項１０に記載の画像投影装置。
【請求項１２】
前記判定手段は、
前記アドレス生成手段が生成した現在のアドレスと1つ前のアドレスがブランクアドレスの場合、又は、現在のアドレスと1つ前のアドレスが同じで、現在のアドレスと1つ前のアドレスの少なくともどちらかがブランクアドレスでない場合に、同じアドレスに対する連続した読み出し要求であると判定する、
ことを特徴とする請求項１又は８〜１１いずれか１項に記載の画像投影装置。
【請求項１３】
前記読み出し要求手段は、前記判定手段が同じアドレスに対する連続した読み出し要求であると判定しても、同じアドレスに対する連続した読み出し要求が所定回数以上連続すると、前記フレームメモリに読み出し要求を出力する、
ことを特徴とする請求項１２に記載の画像投影装置。
【請求項１４】
さらに、レーザー発振器、共振型ＭＥＭＳミラー、及び、レンズを有する光学エンジン、を有する請求項１〜１３いずれか１項に記載の画像投影装置。
【請求項１５】
画像データの入力手段と、
前記画像データを記憶するフレームメモリと、
レーザー光を照射するレーザー発振器と、
スクリーン上のレーザー光の包絡線が所定形状となるよう、反射光学素子を互いに略直交する２つの軸を中心に振動させる偏向方向可変手段と、
レーザー光の照射中心方向が照射面に対し垂直でない投射角を有する場合に、前記反射光学素子の角度から三角関数を用いずにレーザー光の照射位置を求める多項式の係数情報が記憶された係数情報記憶手段と、
前記係数情報記憶手段に記憶された前記係数情報に演算を施して求めた係数、及び、前記反射光学素子の角度を前記多項式に適用することで、レーザー光の前記照射位置を演算する照射位置演算手段と、
前記照射位置演算手段が演算した前記照射位置に対応する前記フレームメモリのアドレスを演算するアドレス演算手段と、
前記フレームメモリへの連続アクセス時に非連続アクセス時よりも高速なデータの読み出し及び書き込みが可能であり、前記アドレスの画素情報を読み出すメモリ制御手段と、
前記画素情報に応じた輝度で前記レーザー発振器を発振させるレーザー駆動手段と、を有する画像投影装置のメモリアクセス方法であって、
入力バッファが、入力側からの前記画像データを一時的に記憶し、前記フレームメモリに記憶するステップと、
判定手段が、読出しアドレスを生成するアドレス生成手段から、同じアドレスに対し連続した読み出し要求があるか否か、又は、描画対象外の前記画像データが記憶されたブランクアドレスに対する読み出し要求であるか否か、を判定するステップと、
読み出し要求出力手段が、同じアドレスに対する連続した読み出し要求でなく、かつ、ブランクアドレスに対する読み出し要求でない場合に、前記フレームメモリに読み出し要求を出力するステップと、
画像データ取得手段が、前記フレームメモリから前記画像データを取得するステップと、
データ再生手段が、前記フレームメモリから読み出されなかった前記画像データ及びブランクアドレスの前記画像データを再生するステップと、
を有することを特徴とするメモリアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロジェクタのフレームメモリの読み書きを制御するメモリ制御装置に関し、特に、フレームメモリからフリースキャンするメモリ制御装置に関する。
【背景技術】
【０００２】
レーザーを光源に用いた映像投影装置(以下『プロジェクタ』という)が開発されるようになってきた。レーザーを光源に用いる事により、非常に彩度が高くなおかつ色再現性が高いプロジェクタの実現が可能になる。レーザー光を面に投射するための偏向光学素子としては、ＤＬＰ（Digital Light Processing）やＬＣＯＳ（Liquid crystal on silicon）及びＭＥＭＳミラーを利用する方法が既に知られている。
【０００３】
しかしながら投影時に投影中心部の光線と投影面のなす角が垂直でない場合(以降『斜め投射』という)、プロジェクタが投影した投影画像は、台形状に歪むことが知られている。
【０００４】
図３８は、斜め投射による投影画像を説明する図の一例である。図３８（ａ）は斜め投射でない場合の投影画像の一例を、図３８（ｂ）は斜め投射（打ち上げ投射）の場合の投影画像の一例を、図３８（ｃ）は斜め投射（打ち下げ投射）の場合の投影画像の一例を、それぞれ示す。
【０００５】
図３８（ａ）では、光学系の設計時に想定されている壁面までの角度、距離でプロジェクタが投影しているため、投影画像は歪みなく投影されている。図３８（ｂ）では、光学系の設計時に想定されている角度よりも上向きにプロジェクタが投影しているため、投影画像の上辺の投影距離が、投影画像の下辺よりも長くなり、投影画像の上辺は下辺に比べ拡大している。その結果、投影画像は台形歪みの状態となる。
【０００６】
図３８（ｃ）では、光学系の設計時に想定されている角度よりも下向きにプロジェクタが投影しているため、投影画像の下辺の投影距離が、投影画像の上辺よりも長くなり、投影画像の下辺は上辺に比べ拡大している。その結果、投影画像は台形歪みの状態となる。
【０００７】
このような台形歪みを正方形に補正するいくつかの技術が知れているが、ＤＬＰ方式やＬＣＯＳ方式の投射型のプロジェクタは、偏向光学素子上の１画素が投影面上の1画素に1対1で対応しているため、投影面上での画像の歪みを補正するためには、画素の間引きや補間等、偏向光学素子に入力する前段階の画像に対して画像処理を施す必要があった。
【０００８】
図３９（ａ）は、ＤＬＰ方式のプロジェクタの概略を説明するための図である。ＤＬＰ方式のプロジェクタは画素単位でミラーが集積されたＤＭＤ（Digital Micromirror Device）を使用する。図３９（ａ）は２ｘ２の４画素のＤＭＤを示し、右上のミラーがOFFで、その他のミラーはONの状態となっている。このため、光源から投影された投光画面では、ＤＭＤの状態に対応して右上画素が黒い画像になっている。このようにＤＬＰ方式のプロジェクタでは偏向素子のミラー１つと投影される画素の１つが対応している。
【０００９】
図３９（ｂ）は、ＤＬＰ方式のプロジェクタにおける台形補正を説明する図の一例である。ＤＬＰ（又はＬＣＤ方式でも同じ）では、マイクロミラーが投影画像の画素と1対１に対応しているため、プロジェクタが投射中の画素の位置を変更することはできない。図３９（ｂ）の左のような投影画像を長方形に補正するには、長方形に対応するマイクロミラーのみに光を反射させる必要があるため有効画素が減ってしまう。また、有効画素が減った分、元の画像データから画素が間引きされるので、画像が劣化するという問題がある。
【００１０】
図４０（ａ）は、レーザースキャン方式の概略を説明するための図である。レーザースキャン方式のプロジェクタはレーザー光を２Ｄスキャナ（ｘ−ｙスキャナ）で偏光し、投影面に画像を形成する。図４０（ａ）では、レーザー発振器から照射されたレーザーは、ハーフミラーを透過して２Ｄスキャナによって偏向された後、ハーフミラーで光路を変更されスクリーン上に画面を形成している。２Ｄスキャナは連続的に動作しているため、レーザーの照射タイミングを調整することによって１画素以下の描画位置の調整が可能である。
【００１１】
図４０（ｂ）は、レーザースキャン方式のプロジェクタにおける台形補正を説明する図の一例である。レーザースキャン方式のプロジェクタでは、レーザーの照射タイミングによって画素位置を微調整することで、有効画素を減らすことなく台形補正が可能である。
【００１２】
例えば、特許文献１には、振動ミラーの振幅を縦軸の位置によって制御することで同等の歪み補正を実現できることが開示されている。また、特許文献２には、振動ミラーにレーザー光を照射するタイミングを制御することで、画素位置を微調整して有効画素を減らすことなく台形補正する技術が提案されている。また、特許文献３には、描画タイミング生成部が、次に描画を行う垂直方向の位置を制御して非描画領域を設ける台形補正方法が示唆されている。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、特許文献１に開示されているように、振動ミラーの振幅を縦軸の位置によって制御することは、振動ミラーが共振状態で振動していることを考慮すると、その振幅制御は非常に難しく、現実的ではない。
【００１４】
また、特許文献２では、レーザー光を照射するタイミングを制御しているが、共振状態の振動ミラーが描く光線の軌跡は三角関数や逆算各関数を含んだ実数演算なので、リアルタイムに光線の描画位置を演算しながらレーザー光を照射するタイミングを補正することは計算が追いつかないという問題がある。
【００１５】
また、特許文献３には、非描画位置の計算方法や計算後のレーザー光の制御について具体的な制御が開示されておらず、実現にはなお多くの課題がふくまれていると推測される。
【００１６】
本発明は、上記課題に鑑み、斜め投射時に発生する投影画像の歪みを偏向光学素子への入力段階で施さず、また、実用的な制御負荷にて補正可能なプロジェクタを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記課題に鑑み、本発明は、画像データの入力手段と、前記画像データを記憶するフレームメモリと、レーザー光を照射するレーザー発振器と、スクリーン上のレーザー光の包絡線が所定形状となるよう、反射光学素子を互いに略直交する２つの軸を中心に振動させる偏向方向可変手段と、レーザー光の照射中心方向が照射面に対し垂直でない投射角を有する場合に、前記反射光学素子の角度から三角関数を用いずにレーザー光の照射位置を求める多項式の係数情報が記憶された係数情報記憶手段と、前記係数情報記憶手段に記憶された前記係数情報に演算を施して求めた係数、及び、前記反射光学素子の角度を前記多項式に適用することで、レーザー光の照射位置を演算する照射位置演算手段と、前記照射位置演算手段が演算した照射位置に対応する前記フレームメモリのアドレスを演算するアドレス演算手段と、前記フレームメモリへの連続アクセス時に非連続アクセス時よりも高速なデータの読み出し及び書き込みが可能であり、前記アドレスの画素情報を読み出すメモリ制御手段と、前記画素情報に応じた輝度で前記レーザー発振器を発振させるレーザー駆動手段と、を有し、前記メモリ制御手段は、入力側からの画像データを一時的に記憶し、前記フレームメモリに記憶する入力バッファと、読出しアドレスを生成するアドレス生成手段から、同じアドレスに対し連続した読み出し要求があるか否か、及び、描画対象外の画像データが記憶されたブランクアドレスに対する読み出し要求であるか否か、を判定する判定手段と、同じアドレスに対する連続した読み出し要求でなく、かつ、ブランクアドレスに対する読み出し要求でない場合に、前記フレームメモリに読み出し要求を出力する読み出し要求出力手段と、前記フレームメモリから画像データを取得する画像データ取得手段と、前記フレームメモリから読み出されなかった前記画像データ及びブランクアドレスの画像データを再生するデータ再生手段と、を有することを特徴とする画像投影装置を提供する。
【発明の効果】
【００１８】
斜め投射時に発生する投影画像の歪みを偏向光学素子への入力段階で施さず、また、実用的な制御負荷にて補正可能な画像投影装置を提供することを目的とする。
【図面の簡単な説明】
【００１９】
【図１】プロジェクタと入力端末の概略構成図の一例である。
【図２】レーザープロジェクタの構成図の一例である。
【図３】フレームメモリに記憶される画像データを模式的に説明する図の一例である。
【図４】描画位置演算器のブロック図の一例である。
【図５】ＭＥＭＳミラーの構成を説明する図の一例である。
【図６】ＭＥＭＳミラーが反射するレーザー光の座標位置を説明する図の一例である。
【図７】ＭＥＭＳミラーの二つの回転軸を模式的に示す図の一例である。
【図８】プロジェクタが想定する投射画像の歪み例の一例を示す図である。
【図９】主走査方向の各振れ角φが-１〜-７度の時に副走査方向の振れ角θを振ることで得られるレーザー光の軌跡を示す図の一例である。
【図１０】副走査方向の各振れ角θが１〜５度の時に主走査方向の振れ角φを振ることで得られるレーザー光の軌跡を示す図の一例である。
【図１１】主走査の振れ角φとａ（ｘ）の関係、主走査の振れ角φとｂ（ｘ）の関係を、示す図の一例である。
【図１２】副走査の振れ角θとｃ（ｙ）の関係、副走査の振れ角θとｄ（ｙ）の関係、副走査の振れ角θとｅ（ｙ）の関係を示す図の一例である。
【図１３】画像出力系回路の全体的な動作手順を示すシーケンス図の一例である。
【図１４】シミュレーションによる（Ｘ、Ｙ）のデータから計１５個の係数ｄを求めるまでの手順を示すフローチャート図の一例である。
【図１５】シミュレーションソフトがｄｙ１〜ｄｘ９を利用して求められたａ（ｘ）〜ｅ（ｙ）によりプロットしたレーザ光の軌跡の一例を示す図である。
【図１６】歪み補正を説明する図の一例である。
【図１７】糸巻き型歪みと歪み補正の結果を模式的に示す図の一例である。
【図１８】フリースキャンを説明する図の一例である。
【図１９】レーザープロジェクタのメモリアクセスの特徴を簡略化して模式的に説明する図の一例である。
【図２０】画像サイズをメモリ容量の関係の一例を示す図である。
【図２１】リードサイクルのシーケンス図の一例である。
【図２２】連続アクセスの際のリードサイクルのシーケンス図の一例を示す図である。
【図２３】ラスタースキャンを説明する図の一例である。
【図２４】フリースキャンを模式的に説明する図の一例である。
【図２５】歪み補正を模式的に説明する図の一例である。
【図２６】メモリ制御ブロックの全体ブロック図の一例である。
【図２７】入力側バッファのブロック図の一例である。
【図２８】出力側バッファのブロック図の一例である。
【図２９】出力側バッファのアドレス部のブロック図の一例である。
【図３０】アドレス部へアドレスが入力されてから２PortFIFOへ書き込まれるまでの流れを示すフローチャート図の一例である。
【図３１】アドレス部が2PortFIFOに保存されたデータをアービタ又はデータ部に渡すまでの流れを説明するフローチャート図の一例である。
【図３２】データ部のブロック図の一例である。
【図３３】データ部が重複情報・ブランク情報の書き込みと読み出しを制御する手順を示すフローチャート図の一例である。
【図３４】重複・ブランク再生部のブロック図の一例である。
【図３５】重複・ブランク再生部が重複・ブランクのデータを再生する手順を示すフローチャート図の一例である。
【図３６】アービタに入出力される信号の一例を示す図である。
【図３７】アービトレーションポリシーに基づき生成されたアービトレーションテーブルの一例を示す図である。
【図３８】斜め投射による投影画像を説明する図の一例である。
【図３９】ＤＬＰ方式のプロジェクタの概略を説明するための図である。
【図４０】レーザースキャン方式の概略を説明するための図である。
【発明を実施するための形態】
【００２０】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【実施例１】
【００２１】
図１は、レーザープロジェクタと入力端末の概略構成図の一例である。入力端末は画像データをレーザープロジェクタ(以下、ＬＰＪという)２００に入力する端末で、例えばＰＣ（Ｐｅｒｓｏｎａｌ Ｃｏｍｐｕｔｅｒ）やテレビ受像器、ＢＤプレーヤ、又は、画像データを記憶した記憶媒体である。プロジェクタは画像データからレーザー光を生成して、２Ｄスキャナに反射させてスクリーンに投射画像を形成する。レンズなどの光学系を有さない場合、常に焦点が合うようになっている。また、図では、レーザー光の照射部が、投射画像の中央になるように投射画面が形成されるが、レーザー光の照射部が投射画像の下端付近になるように投射画像を形成することもできる。
【００２２】
投射画面のサイズはＬＰＪ２００とスクリーンとの間の投射距離によって変わるが、例えば対角線が３０〜３００〔ｃｍ〕の広範囲で変倍される。また、ＬＰＪ２００がズーム機構及びレンズを備えていればＬＰＪ２００が同じ位置でも投射画像のサイズを変更できる。
【００２３】
図２は、ＬＰＪ２００の構成図の一例を示す。ＬＰＪ２００は、画像入力系回路４９、画像出力系回路４８、フレームメモリ５８、２Ｄスキャナ５３、及び、レーザー発振器６０を有する。
【００２４】
画像入力系回路４９は、いくつかのVideo入力の入力インタフェースを有する。入力インタフェースは、デジタルの画像データを入力するためのＤＶＩ、ＨＤＭＩ端子、アナログの画像データを接続するためのＤ−Ｓｕｂ、Ｓ−Ｖｉｄｅｏ端子等である。また、フラッシュメモリなどの記憶手段と接続するためのＵＳＢ端子等も入力インタフェースとなる。
【００２５】
入力される画像データの映像信号はＲＧＢ信号であるが、ＹＵＶ信号の場合はＬＰＪ２００がＶｉｄｅｏ入力前にＲＧＢ信号に変換する。画像データは、WXGA、XGA、SVGA、VGA等の所定の解像度で入力される。なお、画像入力系回路４９はVideo入力がアナログ信号ならＡ／Ｄ変換してメモリ制御ブロック１００に出力する。
【００２６】
メモリ制御ブロック１００は、画像入力系回路４９から入力された画像データをいったんフレームメモリ５８に記憶して、フレームメモリ５８から読み出して画像出力系回路４８に出力する。
図３は、フレームメモリ５８に記憶される画像データを模式的に説明する図の一例である。フレームメモリ５８は後述する外部メモリ１５の一部の領域（アドレス範囲）に設けられている。外部メモリにはフレームメモリ５８の他、プログラム等が記憶されている。画像データは１画素がＲ8bit・Ｇ8bit・Ｂ8bitの計２４bit（３Byte）で表される。図では1つのマスが８bitである。メモリ制御ブロック１００は、２Ｄスキャナ５３の投射位置に対応したアドレスの画像データを読み出し、レーザードライバ５９に出力する。なお、メモリ制御ブロック１００については実施例２にて詳述する。
【００２７】
図２に戻り、画像出力系回路４８は、２次元スキャナ駆動タイミング生成器５１、タイミング補正指示器５４、描画位置演算器５７、スキャナ角度演算器５５、スキャナドライバ５２、ＡＤＣ５６、及び、レーザードライバ５９を有する。
【００２８】
本実施形態のＬＰＪ２００はレーザー光を光源とするためＲＧＢ各色のレーザー光を１つに重ねて出力するレーザー発振器６０を有する。レーザードライバ５９はレーザー発振器６０を駆動する回路であり、ＲＧＢ各色毎にＬＤ（レーザーダイオード）６０ｒ〜６０ｂを駆動するためＲＧＢ各色のレーザードライバ５９ｒ〜５９ｂを有する。レーザードライバ５９rはある画素のＲの画像データに基づき赤ＬＤ６０ｒを駆動する赤ＬＤ駆動波形を生成し、レーザードライバ５９ｇはＧの画像データに基づき緑ＬＤ６０ｇを駆動する緑ＬＤ駆動波形を生成し、レーザードライバ５９ｂはＢの画像データに基づき青ＬＤ６０ｂを駆動する青ＬＤ駆動波形を生成する。これにより赤ＬＤ、緑ＬＤ、及び、青ＬＤは、画像データに基づく強度で発振し、レーザー発振器６０は画像データに対応した輝度（色）のレーザー光を照射する。
【００２９】
２Ｄスキャナ５３はこのレーザー光を２次元にスキャンして投射画像を投射する。２Ｄスキャナ５３については後述するが、２Ｄスキャナ５３は２軸のＭＥＭＳスキャナである。２軸のＭＥＭＳスキャナにはＭＥＭＳミラーの振れ角を検出するセンサー（角度検出器）が配置されており、角度検出器はＭＥＭＳミラーの振れ角に応じた電圧をＡＤＣ（Analog to Digital Converter）５６に出力する。ＡＤＣ５６は振れ角に応じた電圧をデジタルの振れ角に変換する。
【００３０】
２次元スキャナ駆動タイミング生成器５１は、ＭＥＭＳミラー駆動波形の元情報となるクロックカウントを描画位置演算器５７に出力する。ＭＥＭＳミラーは低エネルギーで大きな振れ角が得られるように、共振周波数で駆動される。共振周波数はＭＥＭＳミラーや梁部それぞれの材質、形状、寸法で決まってくるので、例えば開発者にとっておよその値は既知である。または、ＭＥＭＳミラーの周波数を検出するセンサを配置すればより精度良く求めることができる。共振周波数は図示されないマイコンなどの外部機器によって２次元スキャナ駆動タイミング生成器５１に設定される。
【００３１】
２次元スキャナ駆動タイミング生成器５１は設定された共振周波数とシステムクロック周波数に基づき、主走査、副走査それぞれの1周期に相当するクロック数をカウントする。例えば、
水平方向の共振周波数：１０００Ｈｚ（１周期は１ｍｓ）
システムクロック周波数：１００ＭＨｚ（１０μｓ）
とすると、１ｍｓをカウントするために１００カウントが必要なので、クロックカウントは最大１００回となる。同様に、垂直方向の共振周波数から垂直方向の最大のクロックカウントも決まっている。２次元スキャナ駆動タイミング生成器５１は、水平方向のクロックカウント（例えば、１００回に到達すると１に戻り、再度１００までの増大することを繰り返す）と垂直方向のクロックカウントをカウントし、タイミング補正指示器５４と描画位置演算器５７に出力する。なお、クロックカウントを水平方向と垂直方向に分けることなく、１つの画面に１つのクロックカウントとしてもよい。以下では、水平方向と垂直方向を区別せずにクロックカウントという。
【００３２】
また、２次元スキャナ駆動タイミング生成器５１は、クロックカウントを用いてＭＥＭＳミラーが共振周波数で振動するようにＭＥＭＳミラーの駆動波形を生成しスキャナドライバ５２に出力する。駆動波形は矩形波、ＰＷＭ、正弦波、三角波など一般的な波形を用いればよく、本実施形態では主走査側を矩形波、副走査側をＰＷＭとする。
【００３３】
クロックカウントはＭＥＭＳミラーを駆動するための駆動波形の元情報だが、諸々遅延要素（スキャナドライバ５２の遅延、ＭＥＭＳミラーの物理的応答特性等）のために実際のＭＥＭＳミラーの動作とはズレが生じる。また、ＭＥＭＳミラーは温度変化や経時変化で共振周波数が変わるため、同じ駆動波形で振動していても振幅に変化が生じる。
【００３４】
これを補正するために、スキャナ角度演算器５５は、共振周波数から既知のＭＥＭＳミラーの最大振れ角時タイミングを駆動波形から検出し、ＡＤＣ５６が出力する振れ角をサンプリングする。振れ角はタイミング補正指示器５４に入力される。
【００３５】
タイミング補正指示器５４は、スキャナ角度演算器５５から入力された実角度と、駆動波形が期待する振れ角に差異があるか否かを判定し、所定以上の差異があれば、補正量を演算し、２次元スキャナ駆動タイミング生成器５１に入力する。これにより、２次元スキャナ駆動タイミング生成器５１は、補正量に応じてクロックカウントを補正するので、駆動波形の周波数又は駆動電圧が調整され、ＭＥＭＳミラーの振れ角が所望の角度に調整される。
【００３６】
また、タイミング補正指示器５４は、ＭＥＭＳミラー駆動タイミング（最大振幅時）と実際のＭＥＭＳミラー振幅の位相差を描画位置演算器５７へ出力する。位相差はクロック数（クロック補正分）で表される。
【００３７】
次いで、描画位置演算器５７について説明する。
図４は描画位置演算器５７のブロック図の一例を示す。描画位置演算器５７は補正済クロックカウント演算器６１、スクリーン座標計算器６２、歪補正パラメータ保存器６３、及び、メモリアドレス計算器６４を有する。
【００３８】
描画位置演算器５７はＭＥＭＳミラーがある振れ角であった場合に、スクリーン上のどの点にレーザー光が照射されるかを計算する。描画位置演算器５７は主に以下の２つの動作を行う。
動作１：タイミング補正指示器５４から受け取ったクロック補正分と、クロックカウントに基づき、描画位置を特定するための補正済クロックカウントを演算する。主に補正済クロックカウント演算器６１により演算される。
動作２：補正済クロックカウントに基づきスクリーン座標を計算する。また、スクリーン座標に基づき描画すべき画素のデータアドレスを特定し、メモリ制御ブロック１００へ読み出すよう指示する。主にスクリーン座標計算器６２とメモリアドレス計算器６４により処理される。
【００３９】
補正済クロックカウント演算器６１は、２次元スキャナ駆動タイミング生成器５１が出力するクロックカウントに、タイミング補正指示器５４が出力するクロック補正分（遅延時間）を加えて、また、さらに定数を乗じるなどの演算を行い、補正済クロックカウントを演算する。
【００４０】
２Ｄスキャナ５３はクロックカウントにより走査位置が決まるので、クロックカウントによりスクリーン上の座標も一意に定まる。このため、スクリーン座標計算器６２は、補正済クロックカウントから幾何学的な演算により一意にスクリーン座標を計算できる。計算方法については後に詳述する。
【００４１】
ここで、ＬＰＪ２００の出射光軸がスクリーンと垂直でない場合、そのなす角（以下、投射角という）により、投射画像が台形状に歪むが、この場合でもある瞬間にレーザー光がスクリーン上のどこを照射するのかは、投射角を用いれば計算することができる。このため、スクリーン座標計算器６２には歪補正パラメータ保存器６３から投射角に応じたパラメータが供給される。歪補正パラメータ保存器６３には、ある投射角の時にスクリーン座標を演算するための多項式の係数が記述されている。パラメータについては後述するが、パラメータを用いて演算することで演算時間や処理負荷を低減して１クロック毎のスクリーン座標の演算が可能になる。また、２Ｄスキャナ５３が台形状の範囲をスキャンしても、１クロック毎のスクリーン座標を演算できる。なお、投射角はセンサや設定により取得されるので、描画位置演算器５７にとって投射角は既知である。
【００４２】
メモリアドレス計算器６４は、スクリーン座標から描画すべき画素のデータアドレスを算出し、メモリ制御ブロック１００に出力する。フレームメモリ５８の全領域のアドレスとスクリーン上の座標（Ｘ，Ｙ）は１対１に対応する。このため、クロックカウント（実際には補正済クロックカウント）が分かれば、フレームメモリ５８のアドレスを一意に特定できる。すなわち、メモリアドレス計算器は、予め定められた変換演算を行ったり、変換テーブルを参照することで、クロックカウントをフレームメモリ５８のデータアドレスに変換することができる。
【００４３】
正面投射の場合と斜め投射の場合とではスクリーン座標とアドレスの対応関係が異なるので、メモリアドレス計算機６４は投射角によって異なる変換演算を行ったり、異なる変換テーブルを参照して、クロックカウントをデータアドレスに変換する。これについては後述する。
【００４４】
なお、画像データの解像度（フルＨＤ、ＷＸＧＡ、ＸＧＡ、ＳＶＧＡ、ＶＧＡ等）によっては、画素値が格納されていないアドレスが存在することになるが、このアドレスは実施例２で説明するブランク扱いとなる。
【００４５】
〔２Ｄスキャナ〕
２Ｄスキャナ５３について説明する。本実施形態の２Ｄスキャナ５３は一般的なものであればよく、下記の構成は一例である。
【００４６】
図５（ａ）は、ＭＥＭＳミラー７０の平面図の一例を示す。ミラー基板５３１、２本のねじり梁５３２、５４６、及び、ねじり梁を外側から固定している上部フレーム５４７は、低抵抗の単結晶シリコン基板で一体成形されている。ミラー基板５３１は同軸上に設けられた２本のねじり梁５３１、５３２でその一辺の中央部分を支持されており、ミラー基板５３１上にはレーザー光の波長に対して十分な反射率をもつ金属薄膜５３３が形成されている。ミラー基板５３１と２本のねじり梁５３２、５４６の各部寸法は、必要とする共振周波数が得られるように設計されている。
【００４７】
上部フレーム５４７は絶縁膜５４８を介して下部フレーム５４９に接合されている。下部フレーム５４９はミラー基板５３１が振動する部分が除去されている。
【００４８】
上部フレーム５４７、ねじり梁５３２、５４６、及び、ミラー基板５３１は、同一基板を貫通エッチングすることによって一体成形されている。エッチングの際、ミラー基板５３１のねじり梁が結合されていない側面は、櫛歯形状に加工形成されている。ミラー基板５３１の櫛歯形状には静電引力による駆動のための可動電極５４１、５３５が形成されている。
【００４９】
可動電極５４１、５３５に対向する櫛歯形状の両側面には、駆動用の固定電極５４３、５３７が形成されている。この固定電極５４３、５３７が形成されている上部フレーム５４７の一部は、スリット５３４、５３８、５４５、５４０によりねじり梁が結合されている上部フレーム領域からは絶縁分離されている。
【００５０】
上部フレーム５４７の表面にはスパッタ法でマスク成膜したＡｌ薄膜による電極パット５４２、５３６、５３９が形成されている。電極パットとしてはＡｕ等の他の材料も適用可能である。
【００５１】
電極パット５４２、５３６から、固定電極５４３、５３７に同時に電圧を印加すると、微小ギャップを介して向かい合った固定電極５４３、５３７と可動電極５４１、５３５の間に静電引力が働く。両電極間に微少量の初期位置ずれがあった場合、両者が最短距離となるようにミラー基板５３１に回転のモーメントが働く。初期位置ずれは静電引力の印加により、共振振動を生じさせ振れ角を増大していく。なお、ここではミラー基板を共振振動させるための駆動力として静電引力を用いた場合を説明したが、電磁力を駆動に用いてもよい。
【００５２】
図５（ｂ）は、圧電素子を用いたＭＥＭＳミラー７０の構成図の一例を示す。第１ミラー支持部５６３ａは連結点Ｑａ、Ｑｂにおいて第１梁部５６７ａのほぼ中央と連結している。第２ミラー支持部５６３ｂと第２梁部５６７ｂも同様である。
【００５３】
第１圧電体５６５ａは第１梁部５６７ａと第１固定部５６１ａとに、第２圧電体５６５ｂは第１梁部５６７ａと第２固定部５６１ｂとにそれぞれ跨って導電性接着剤により固定されている。同様に、第３圧電体５６５ｃと第４圧電体５６５ｄも、第２梁部５６７ｂと第３固定部５６１ｃ及び第２梁部５６７ｂと第４固定部５６１ｄにそれぞれ跨って導電性接着剤により固定されている。
【００５４】
第１圧電体５６５ａと第３圧電体５６５ｃには、第１配線５７１ａ、共通配線５６９及び導電性材料からなる枠部５６４を介して駆動回路５７０から交流電圧が印加される。同様に、第２圧電体５６５ｂと第４圧電体５６５ｄとには、第２配線５７１ｂ、共通配線５６９及び枠部５６４を介して駆動回路５７０から上記交流電圧とは逆相の交流電圧が印加される。各圧電体５６５ａ〜５６５ｄは駆動回路５７０からの交流電圧により振動し、第１梁部５６７ａと第２梁部５６７ｂに対してこの振動を伝達する。
【００５５】
第１梁部５６７ａ及び第２梁部５６７ｂの振動により、第１ミラー支持部５６３ａ及び第２ミラー支持部５６３ｂに回転トルクが与えられ捻れ変位が発生する。このため、各ミラー支持部を揺動軸としてミラー部５６２に揺動振動が発生する。このミラー部５６２の揺動振動の周波数は、高周波な共振周波数となる。
【００５６】
図５（ａ）（ｂ）のＭＥＭＳミラーはいずれも１軸のＭＥＭＳミラーのため１つの走査方向にしか走査できないので、振動方向が９０度異なるように２つのＭＥＭＳミラーを組み合わせることで、２Ｄスキャナを構成する。また、９０度異なる２つの軸を中心に独立に振動する１つのミラーを備えた２軸のＭＥＭＳミラーにより２Ｄスキャナを構成してもよい。
【００５７】
〔ＭＥＭＳミラーの振れ角とレーザー光が投光されるスクリーン座標〕
図６は、ＭＥＭＳミラーが反射するレーザー光の座標位置を説明する図の一例である。説明を容易にするため、レーザー発振器６０が照射したレーザー光はＭＥＭＳミラーが静止していると仮定した面に垂直に入射するものとする。また、拡大光学系としてのレンズは省略した。レーザー光はＭＥＭＳミラーにより反射され、スクリーン状の１点（Ｘ，Ｙ）に到達する。
・主走査方向（ｙ軸を中心に回転）のミラーの振れ角をθ
・副走査方向（ｘ軸を中心に回転）のミラーの振れ角をψ
・ＭＥＭＳミラーとスクリーンの距離をｄ
とすると、スクリーン上のレーザー光の座標（Ｘ，Ｙ）は、
（√ｄ・sinθ・cosφ，√ｄ・sinφ）
となる。
【００５８】
しかし、図７に示すように、実際のＭＥＭＳミラーは二つの回転軸の中心が一致しない。２つの回転軸の中心が一致するなら、円の中心と２つの直線の交点が一致するが、実際のＭＥＭＳミラーは図示するように他方の（図では垂直の回転軸）が円の中心からずれる。
【００５９】
この様に二つの回転軸が存在すると座標（Ｘ，Ｙ）は上記の三角関数では表すことができず、次の様になる。
（ｄ・tanφ，ｄ・tan{arctan(cosφ・tanθ)}）
しかしながら解析的にはこの様に数式で表現できても、描画位置演算器５７がこの三角関数の計算を行うには非常に長い時間がかかり、例えば100MHzの１クロック毎にこれを計算することは困難である。クロックカウントと（Ｘ，Ｙ）の対応テーブルを予め用意しておき、参照すれば１クロック毎の計算も可能だが、上式には逆三角関数(arctan)が入っているため、逆三角関数(arctan)のためのテーブルが必要になるなど、この方法も実現は困難である。
【００６０】
また、上記の数式はＭＥＭＳミラーの後段に拡大用のレンズが入っていない構成で求められているが、拡大用のレンズを入れた光学系の場合、上記の解析式以上に複雑な式になる。
【００６１】
そこで、本実施形態のＬＰＪ２００は、φとθを用いた多項式によりスクリーン座標(Ｘ，Ｙ)を算出する。
【００６２】
〔モデル式〕
図８は、本実施例のＬＰＪ２００が想定する投射画像の歪み例の一例を示す。この図では、ＭＥＭＳミラーの主走査方向の振れ角が横軸、副走査方向の振れ角が縦軸となっている。投射画像の形状はレーザ光の走査範囲の包絡線である。
【００６３】
図８では、ＭＥＭＳミラー面がスクリーン面と並行でないことを想定している。このため、図３９（ｂ）に示したように、投射画像が台形状に変形している。また、図８の投射画像は、像面拡大用のレンズを用いたＬＰＪ２００が投射したため、包絡線が湾曲するという特徴的な歪みを示している。
【００６４】
以下では、このような特徴的な歪みの投射画像を矩形に補正するため、所定の投射角の際に、ＭＥＭＳミラーの演算上の振れ角φ、θから、スクリーン座標（Ｘ，Ｙ）をどのように表すかについて説明する。スクリーンとの距離が変わっても、投射画像の形状は変わらない（互いに相似）ので、スクリーンとの距離は規定する必要はないが、一般的な距離を想定すればよい。
【００６５】
まず、多項式をモデル化するため、開発者が、所定の投射角の場合、ＭＥＭＳミラーの振れ角φ、θの時に拡大光学系を通過したレーザー光が到達するスクリーン座標（Ｘ，Ｙ）をシミュレーションソフトを利用して計算する。
【００６６】
ＭＥＭＳミラーの運動状態は以下の様に表現できると仮定する。
Ｍｘ＝φ＝Ａ・sin（ωｔ＋α）    …（１）
ＭＹ＝θ＝Ｂ・sin（ω'ｔ＋β）  …（２）
すなわち、角度φ、θの変化が時間の1次関数で表現できる単振動運動とモデリングする。
【００６７】
次に、開発者（実際の処理はシミュレーションソフトが行う）は、主走査方向の振れ角φをいくつかに固定して、副走査方向の振れ角θを振った場合のレーザー光の軌跡を求める。
【００６８】
図９は、主走査方向の各振れ角φが-１〜-７度の時に副走査方向の振れ角θを振ることで得られるレーザー光の軌跡を示す図の一例である。主走査方向の振れ角φが固定で副走査方向の振れ角θを変化させたので、軌跡は上下方向に描画される。所定の投射角を図３９（ｂ）のように上向きに設定しているため、主走査方向の振れ角φが大きいほどＭＥＭＳミラーからスクリーン面までの距離が伸びるため、副走査方向の振れ角θの変化量が同じでも、主走査方向の振れ角φが大きいほど軌跡が外側（図では左側）に広がる。
【００６９】
図９の各ラインは完全には直線ではないが、概ね直線の様な形状をしているので、スクリーン座標系の座標Ｘは、ＭＥＭＳミラーの振れ角θの一次式により表すことができる。スクリーン座標系（Ｘ，Ｙ）を、ＭＥＭＳミラー座標系で表すため、振れ角φを"ｘ"、θを"ｙ"とする。
Ｘ（ｘ,ｙ）＝ａ（ｘ）ｙ＋ｂ（ｘ）…（３）
すなわち、振れ角φ毎に、振れ角θが決まればＸ（ｘ、ｙ）が決まるａ（ｘ）とｂ（ｘ）が存在することになり。後述する方法でａ（ｘ）とｂ（ｘ）を求めればＸ（ｘ、ｙ）を求めることができる。
【００７０】
なお、図９では振れ角φを-１〜-７度としたが、振れ角φを正側の１〜７度としても、同様に式（３）によりＸ（ｘ、ｙ）を定めることができる。
【００７１】
次に、開発者は、副走査方向の振れ角θをいくつかに固定して、主走査査方向の振れ角φを振った場合のレーザー光の軌跡を求める。
【００７２】
図１０（ａ）は、副走査方向の各振れ角θが１〜５度の時に主走査方向の振れ角φを振ることで得られるレーザー光の軌跡を示す図の一例である。副走査方向の振れ角θが固定で主走査方向の振れ角φを変化させたので、軌跡は左右方向に描画される。図１０（ａ）では、湾曲の程度が分かりにくいので、副走査査方向の振れ角θが1度の軌跡のみをピックアップした図が図１０（ｂ）である。
【００７３】
図１０（ｂ）より、各軌跡は概ね放物線の様な形状をしているとしてよい。したがって、スクリーン座標のＹは、ＭＥＭＳミラーの振れ角φにより表すことができる。スクリーン座標系（Ｘ，Ｙ）を、ＭＥＭＳミラー座標系で表すため、振れ角φを"ｘ"、θを"ｙ"とする。
Ｙ（ｘ,ｙ）＝ｃ（ｙ）ｘ２＋ｄ（ｙ）ｘ＋ｅ（ｙ）…（４）
すなわち、振れ角θ毎に、振れ角φが決まればＹ（ｘ、ｙ）が決まるｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）が存在することになる。後述する方法でｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）を求めればＹ（ｘ、ｙ）を求めることができる。
【００７４】
この様に式（１）（２）を近似可能な多項式により（Ｘ，Ｙ）を求めることは、最終的に次のａ（ｘ）〜ｅ（ｙ）を数値的に決定する問題に帰着する。ａ（ｘ）、ｂ（ｘ）はｘ（φ）の関数であり、ｃ（ｙ）、ｄ（ｙ）、ｅ（ｙ）はｙ（θ）の関数であるので、５つの関数を求めることになる。
【００７５】
〔５つの関数の求め方〕
５つの関数の数値解を求める方法について説明する。ａ（ｘ）とｂ（ｘ）は振れ角φにより異なり、ｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）は振れ角θにより異なる。よって、ａ（ｘ）とｂ（ｘ）が振れ角φに応じてどのように変化するかが分かれば、振れ角φからａ（ｘ）とｂ（ｘ）を求めることができる。また、ｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）が振れ角θに応じてどのように変化するかが分かれば振れ角θからｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）を求めることができる。本実施形態では、最小二乗法を使用してａ（ｘ）とｂ（ｘ）、ｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）を求める。
【００７６】
まず、シミュレーションソフトが算出した図９の各直線から、最小二乗法によりａ（ｘ）とｂ（ｘ）を求める。これと同じことを主走査の振れ角φの全範囲（例えば、０．０１度〜０．１度間隔）で行うと、主走査の振れ角φの全範囲に渡るａ（ｘ）とｂ（ｘ）を求めることができる。
【００７７】
なお、フィッティング対象の多項式は直線（式（３））である必要はなく、二次以上の多項式や、双曲線（Ｘ２（ｘ,ｙ）/２ａ（ｘ）−ｙ2/２ａ（ｘ）＝１）でもよい。また、振れ角φの全範囲に同じ多項式を用いるのでなく、振れ角φに応じてフィッティング対象の多項式を変える（例えば、-３度＜振れ角φ＜３度では直線に、振れ角φ≦-３度  又は  ３度≦振れ角φでは曲線にそれぞれフィッティングする）こともできる。ただし、字数の少ない多項式の方が計算時間が短くて済むので、本実施例では直線にフィッティングする。
【００７８】
図１１（ａ）は、副走査方向の振れ角θとａ（ｘ）の関係を、図１１（ｂ）は、副走査方向の振れ角θとｂ（ｘ）の関係を、示す図の一例である。いずれもおおむね曲線とみなすことができる。また、図１１（ａ）は無理関数（ａ（ｘ）＝√｛-（ｘ-ｂ）｝＋ｃ）の形状の一部とも類似しているし、図１１（ｂ）は指数関数（ｂ（ｘ）＝ｅｘ＋ｆ）の形状の一部とも類似している。
【００７９】
また、開発者は、シミュレーションソフトが算出した図１０の各曲線から、最小二乗法によりｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）を求める。これと同じことを副走査の振れ角θの全範囲（例えば、０．０１度〜０．１度間隔）で行うと、副走査方向の振れ角θの全範囲に渡るｃ（ｙ）、ｄ（ｙ）及びｅ（ｙ）を求めることができる。
【００８０】
なお、フィッティング対象の多項式は式（４）の曲線に限られるものではなく、極小値を示す曲線（４次以下の多項式）を用いることもできる。ただし、字数の少ない多項式の方が計算時間が短くて済むので、二次の多項式にフィッティングする。
【００８１】
図１２（ａ）は、主走査方向の振れ角φとｃ（ｙ）の関係を、図１２（ｂ）は、主走査方向の振れ角φとｄ（ｙ）の関係を、図１２（ｃ）は、主走査方向の振れ角φとｅ（ｙ）の関係を示す図の一例である。いずれもおおむね曲線とみなすことができる。図１２（ａ）と（ｃ）は下に凸の放物線、図１２（ｂ）は上の凸の放物線（二次の多項式）の形状の一部と類似しているし、三次以上の多項式の一部とみなすこともできる。
【００８２】
したがって、以上の結果から、ａ（ｘ）〜ｅ（ｙ）の全てを曲線の式で近似する事が可能であることが分かる。ここでは計算量を考慮するのと、計算を容易にするため、ａ（ｘ）〜ｅ（ｙ）に共通に、最も簡単な曲線の式として２次の多項式で近似する。すなわち、以下の様な２次の多項式の係数ｄを最小二乗法で数値的に求めれば、振れ角φ、θからａ（ｘ）〜ｅ（ｙ）を求めることができる。
ａ（ｘ）＝ｄｙ１ｘ２＋ｄｙ２ｘ＋ｄｙ３
ｂ（ｘ）＝ｄｙ４ｘ２＋ｄｙ５ｘ＋ｄｙ６
ｃ（ｙ）＝ｄｘ１ｙ２＋ｄｘ２ｙ＋ｄｘ３
ｄ（ｙ）＝ｄｘ４ｙ２＋ｄｘ５ｙ＋ｄｘ６
ｅ（ｙ）＝ｄｘ７ｙ２＋ｄｘ８ｙ＋ｄｘ９          …（５）
このようにして求められた計１５個の係数ｄは、マイコンの不揮発メモリに記憶されており、ＬＰＪ２００が起動するとマイコンが不揮発メモリから読み出して描画位置演算器５７の例えばレジスタに設定する。このレジスタが上記の歪補正パラメータ保存器６３に相当する。描画位置演算器５７は式（５）によりある振れ角φ、θの時のａ（ｘ）〜ｅ（ｙ）を求め、ａ（ｘ）ｂ（ｘ）と式（３）からスクリーン座標のＸを、ｃ（ｙ）ｄ（ｙ）ｅ（ｙ）と式（４）からスクリーン座標のＹを算出することができる。
【００８３】
このように、本実施形態のＬＰＪ２００は、スクリーン座標を演算する際に、三角関数を用いない多項式に近似して計算を簡素化することで、描画位置演算器５７の回路規模を小さくするという特徴部を備えるということができる。
【００８４】
なお、図９や１０はＬＰＪ２００が所定の投射角の場合のスクリーン座標の一例なので、投射角がほぼゼロの場合は１５個の係数ｄも変わってくる。しかし、投射角がほぼゼロの場合、描画位置演算器５７はスクリーン座標を演算しなくてもクロックカウントからフレームメモリのアドレスを１対１に特定できる。
【００８５】
〔振れ角φ、θとクロックカウントの関係〕
これまで振れ角φ、θをパラメータにすることで、ＭＥＭＳミラーの運動が単純な２軸の単振動の重ね合わせで表現できると説明したが、これは、角度の変化は時間の一次関数で近似できることを意味する。
【００８６】
描画位置演算器５７には同期のためのクロックカウントが入力されるが、クロックカウントと時間とは等価である。上記のように、角度をパラメータとして座標を表すことと、時間をパラメータとして座標を表すことが等価であることを考慮すると、描画位置演算器５７に入力されるクロックのカウントを利用して座標（Ｘ，Ｙ）を表すことが可能である。
【００８７】
〔全体的な動作手順〕
図１３は、画像出力系回路４８の全体的な動作手順を示すシーケンス図の一例である。
Ｓ１：２次元スキャナ駆動タイミング生成器５１は、システムクロック周波数に基づきカウントした主走査方向と副走査方向のクロックカウントを補正済クロックカウント演算器６１に出力する。
Ｓ２：タイミング補正指示器５４が、スキャナ角度演算器５５から入力された実角度と、駆動波形が期待する振れ角の差異に基づき補正量を演算しクロック補正量を補正済クロックカウント演算器６１に出力する。
Ｓ３：補正済クロックカウント演算器６１はクロックカウントにクロック補正量を加えて補正済クロックカウントを演算する。
Ｓ４：スクリーン座標計測器６２は歪み補正パラメータから１５個の係数ｄを読み出す。なお、係数ｄが固定であるならＳ４までに読み出しておけばよい。
Ｓ５：スクリーン座標計測器６２は係数ｄを式（５）に適用してａ（ｘ）〜e（ｙ）を求め、さらにａ（ｘ）ｂ（ｙ）を式（３）に、ｃ（ｙ）〜e（ｙ）を式（４）にそれぞれ適用して、スクリーン座標Ｘ、スクリーン座標Ｙを計算する。
Ｓ６：メモリアドレス計算器６４はスクリーン座標から描画対象の画像データのデータアドレスを算出し、メモリ制御ブロック１００に出力する。
【００８８】
この後は、実施例２にて説明されるフレームメモリ５８からの読み出し処理になる。
【００８９】
〔係数ｄの演算手順〕
図１４は、シミュレーションによる（Ｘ、Ｙ）のデータから計１５個の係数ｄを求めるまでの手順を示すフローチャート図の一例である。シミュレーションを行うのは開発者が操作するコンピュータである。
【００９０】
まず、コンピュータは、シミュレーションソフトが作成したデータを読み込む（Ｓ１０）。
【００９１】
コンピュータは、ＭＥＭＳミラーの実振れ角の範囲内のデータのみを抜き出す（Ｓ２０）。シミュレーションでは、ＭＥＭＳミラーが振れることのできない範囲もシミュレートすることができるためである。シミュレート範囲を予め実振れ角の範囲内に制限することもできる。
【００９２】
コンピュータは、ＭＥＭＳミラーの振れ角φ、θをクロックカウントに変換する（Ｓ３０）。
【００９３】
コンピュータは、主走査位置が同じクロックカウントの（Ｘ、Ｙ）を取り出して、副走査のクロックカウントでソートしたデータに分割する（Ｓ４０）。これにより、図９のような軌跡が得られる。
【００９４】
コンピュータは、主走査位置毎に（Ｓ４０で分割したデータの集まり毎に）、直線の係数であるa(ｘ)とb(ｘ)を、最小二乗法により算出する（Ｓ５０）。
【００９５】
コンピュータは、各主走査位置のa(ｘ)とb(ｘ)を２次の多項式にフィッティングした際の係数を最小二乗法で求める（Ｓ６０）。これにより、ｄｙ１〜ｄｙ６  が求まる。
【００９６】
コンピュータは、副走査位置が同じクロックカウントの（Ｘ、Ｙ）を取り出して、主走査のクロックカウントでソートしたデータに分割する（Ｓ７０）。
【００９７】
コンピュータは、副走査位置毎に（Ｓ７０で分割したデータの集まり毎に）、曲線の係数であるｃ(ｙ)、ｄ(ｙ)、ｅ（ｙ）を、最小二乗法により算出する（Ｓ８０）。
【００９８】
コンピュータは、各副走査位置のｃ(ｙ)、ｄ(ｙ)、ｅ（ｙ）を２次の多項式にフィッティングした際の係数を最小二乗法で求める（Ｓ９０）。
【００９９】
以上により、コンピュータはｄｙ１〜ｄｘ９を求めることができるので、歪み補正パラメータ保存器６３に記憶させる。
【０１００】
図１５は、シミュレーションソフトがｄｙ１〜ｄｘ９を利用してａ（ｘ）〜ｅ（ｙ）を求め、ａ（ｘ）〜ｅ（ｙ）から演算したスクリーン座標の軌跡の一例を示す図である。横方向に往復している曲線が軌跡を、曲線の包絡線が投射画像を、矩形が投射角がゼロの場合の理想的な投射画像を、それぞれ示す。
【０１０１】
まず、図１５によると、実際のレーザー光線の軌跡と同様の軌跡が得られるため、上述した数値計算的なレーザー光線の座標計算が適切であることが確認できる。
【０１０２】
また、これまで説明したように、ＬＰＪ２００が上向きに所定の投射角で傾いて設定されているため、投射画像が理想的な投射画像よりも大きくなりかつ歪んでいる。具体的には矩形外のレーザー光は本来、矩形内に照射されるべきである。本実施形態のＬＰＪ２００は、矩形内でのみレーザー光を照射させるため、メモリ制御ブロック１００が選択的に画像データをレーザードライバ５９に送る様に制御する。これにより歪みが解像度を落とすことなく補正される。
【０１０３】
〔歪み補正〕
上述したように所定の投射角が分かれば投射画像がどのくらい歪むかは容易に算出できる。例えば、台形の上辺と下辺の比率は投射角度に依存する。矩形の理想的な投射画像の縦横の長さの比率（いわゆるアスペクト比）は、Ｖｉｄｅｏ入力される画像データのアスペクト比をそのまま維持することが好ましいと考えられる。よって、歪んだ投射画像を元の画像データのアスペクト比が維持されるように、歪んだ投射画像のレーザー光の照射位置を所定のアスペクト比の領域に対応づけることで、画素を落とすことなく歪みを補正することができる。なお、必ずしもＶｉｄｅｏ入力される画像データのアスペクト比と同一とする必要はなく、矩形であればよい。
【０１０４】
図１６は歪み補正を説明する図の一例である。描画位置検算器５７はVideo入力される画像データのアスペクト比を検知しておく。そしてメモリアドレス計算器６４は、以下の２つの動作を行う。
(i)各アスペクト比毎に用意された、各スクリーン座標がアスペクト比を維持する矩形内の座標か否かを登録された判定テーブルを参照し、スクリーン座標がアスペクト比を維持する矩形内の座標でない場合は、ブランク画素であることをメモリ制御ブロック１００に通知する。この場合、メモリ制御ブロック１００は輝度が黒レベルのレーザー光を表示する（レーザー光を照射しないと表現することもできる）。
(ii) スクリーン座標がアスペクト比を維持する矩形内の座標の場合は、スクリーン座標からデータアドレステーブルを演算し、メモリ制御ブロック１００に出力する。ここで、図１６（ａ）の歪んだ投射画像のレーザー光を図１６（ｂ）の所定のアスペクト比の投射画像に投射するには、符号１のレーザー光は符号１'のレーザー光に、…、符号１３のレーザー光は符号１３'のレーザー光に投射タイミングを調整する必要がある。このため、メモリアドレス計算器６４は各アスペクト比毎に用意された、歪みのあるスクリーン座標をアスペクト比を維持する領域内にマッピングするマッピングテーブルを有する。例えば、レーザー光１'のスクリーン座標の時にスクリーン座標１に対応したフレームメモリのデータアドレスを生成する。こうすることで、歪んだレーザー光が欠けることなく矩形領域にマッピングされる。
【０１０５】
以上のように、メモリアドレス計算器６４は、ＭＥＭＳミラーが矩形領域外にレーザー光を照射する角度の場合、ブランク画素を出力するようメモリ制御ブロック１００に通知し、ＭＥＭＳミラーの角度が入力された画像データのアスペクト比を保ちつつ表示する角度の場合、メモリアドレス計算器６４は、フレームメモリ５８から読み出すアドレスを調整する。このように、選択的にレーザードライバ５９を駆動する事により歪みを解消して、かつ、画素を捨てることなく、表示を行うことができる。
【０１０６】
なお、本実施例の歪み補正は傾斜による歪みだけでなく光学系の歪みにも対応できる。
図１７は糸巻き型歪みと歪み補正の結果を模式的に示す図の一例である。投影画角を大きくするために拡大光学系を用いると糸巻き型歪み（又は樽型歪み）が生じることがある。一般には光学系を設計することで正面投射では歪みが目立たない歪みレベルに抑制することができる。しかし、正面投射では歪みが目立たない状態でも斜めに投射すると糸巻き型歪み等がより顕著に表れることがある。本実施例のＬＰＪ２００は、このような場合にも光学系を調整することなくレーザー照射のタイミングを調整することで歪みを補正することができる。
【０１０７】
また、さらに描画位置演算器５７とメモリ制御ブロック１００を高速に（例えば、従来は６０MHzであったものを２００MHz等）動かすことにより、画素値を補間することなどが可能になり、１画素以下（この例では約1/3）の高精細な描画が可能になる。
【０１０８】
以上説明したように、本実施例のＬＰＪ２００は、スクリーン座標を複雑な式を用いずに近似多項式により求めることで高速な演算を可能にし、アスペクト比を維持するようにレーザー照射のタイミングを補正するので、ＬＰＪ２００が傾斜していても画像が歪まないようにすることができる。
【実施例２】
【０１０９】
実施例１にて説明したように、共振型ＭＥＭＳを用いたＬＰＪ２００では、メモリ制御ブロック１００はスクリーン座標に応じてフレームメモリをスキャンする。しかしながら、このようなスキャン方法ではフレームメモリのアドレス順に画素を読み出すとは限らないため、メモリからの読み出しが間に合わなくなるおそれがある。そこで、本実施例では、このような課題に対応した、ＬＰＪ２００のメモリアクセスについて詳細に説明する。以下、本実施例のメモリアクセスをフリースキャンという。フリースキャンはラスタースキャンと対比するための用語であり、アクセスされるアドレスが連続とは限らないことをいう。
【０１１０】
まず、フリースキャンでは、入力画像と出力画像のタイミングを合わせることができず、投射用画像データを一時保存しておくフレームメモリ５８が必要になる。
【０１１１】
図１８は、フリースキャンを説明する図の一例である。図１８（ａ）は説明の対比のため、ラスタースキャンを模式的に示す図である。ラスタースキャンでは、入力画像上の原点からＸ方向へ入力画素を読み出していってＸ方向の終端まで到達すると、次にＹ方向に１つラインを移って、そのラインについてＸ方向の終端まで入力画素を読み出す。
【０１１２】
これ対し、フリースキャンでは、Ｘ方向に走査しながらＹ方向にも走査するので、入力画素を連続アドレスで読み出すことができず、途切れ途切れのアクセスになる。したがって、投射用画像データがフリースキャンできるように投射用画像データを一時保存しておくフレームメモリ５８が必要になる。
【０１１３】
図示するように、フレームメモリ５８へのアクセスでは、連続アドレスのアクセスが出来ず、またアクセスアドレスの予測による先読みやデータ格納時の適正な並べ替えもできない。このため、バーストアクセスが基本のＤＤＲ/ＤＤＲ２/ＤＤＲ３などのＳＤＲＡＭでは余分なアクセスが発生する。この不都合を解決して必要なアクセス帯域を確保するには、高価なDual Port SRAMを使用するか、安価ではあるが消費電力の大きい必要以上に高速なＳＤＲＡＭを使用しなければならないという問題がある。
【０１１４】
ここで、メモリへのアクセス効率を高める技術が考案されている（例えば、特許文献４参照。）。特許文献４には、映像データをメモリへ格納する際に複数画素をデータ圧縮して格納し、読出し要求によって読み出した圧縮データを複数画素に復号してバッファ（キャッシュ）に格納し、次の読み出し時にはキャッシュされたデータを使用することによってメモリとデータ転送量を軽減する方法が開示されている。
【０１１５】
しかしながら、特許文献４に開示されているように、映像データを圧縮／復号化することでアクセス帯域は確保できても上記の問題は解決できない。すなわち、フリースキャンの場合はアクセスアドレスがスキャン毎に違っており、読み出すデータは特定の連続アドレスに格納されないので、読み出した圧縮データを復号した複数画素を利用できるとは限らない。このため、結局は再読み込みが必要となり、メモリとデータ転送量の軽減という問題を解消することはできない。
【０１１６】
本実施例では、この課題を鑑みて、フレームメモリ５８へのアクセスをより効率的に行うメモリ制御装置について説明する。このメモリ制御装置は実施例１のメモリ制御ブロックに相当するので、メモリ制御装置とメモリ制御ブロックの符号はいずれも１００とした。
【０１１７】
図１９は、本実施形態のＬＰＪ２００のメモリアクセスの特徴を簡略化して模式的に説明する図の一例である。
【０１１８】
まず、ＬＰＪ２００は、読み出すデータのアドレスの重複チェックを常に行い、読み出し先が同じであればフレームメモリ５８にアクセスせずに、再生する（同じデータを複製する）。また、ＬＰＪ２００は、歪み補正することを利用して、読み出すデータがブランクか否かのチェックを行い、ブランクの場合にはフレームメモリ５８にアクセスしない。この２つによって、連続アドレスが基本のフレームメモリ５８に対し、同じアドレスに連続してアクセスすることや、不要にアクセスすることを抑制できる。
【０１１９】
また、ＬＰＪ２００は、入力側バッファと出力側バッファのデータの残量を把握しており、可能な限り連続アクセスになるように、入力側バッファと出力側バッファの状態に応じて、入力側バッファからの書き込みと出力側バッファへの読み出しの優先度を調停する。これにより、フレームメモリ５８に対して集中的に書き込み、集中的に読み出すことが可能になる。
〔ＤＲＡＭについて〕
まず、フレームメモリ５８に一般的に使用されるＤＲＡＭについて説明する。フレームメモリ５８に使用される記憶素子は、以下のような理由でＤＲＡＭメモリが多いとされている。
・価格が安い（ＰＣ（パーソナルコンピュータ）で大量に使用されるため低価格化が早い）
・高速アクセスが可能（ＤＤＲの動作周波数333ＭＨz、ＤＤＲ３は1333MHz等）
・調達が安定している
・記憶容量が大きい（１２８Mbits、５１２Mbits等）
低価格の組み込み機器においてＬＳＩコストは製品全体のコストのうち大きな比重を占めるため、特に価格が安いことは製品への搭載を決定する上で重要で、安い記憶素子を選択することが必須になっている。
【０１２０】
また、フレームメモリ５８に必要な記憶容量は、画像サイズに応じて変わってくる。
図２０は、画像サイズとメモリ容量の関係の一例を示す。例えば、ＶＧＡでは約７．１Mbits、Ｆｕｌｌ-ＨＤでは約４５Mbitsのメモリ容量が必要である。なお、メモリ容量の括弧内の数値は1ピクセルの階調値であり、３２bitで階調を表すとＶＧＡでは約９．４Mbits、Ｆｕｌｌ-ＨＤでは約６０Mbitsのメモリ容量が必要になる。
【０１２１】
例えば、ＨＤ(720p)用にＳＲＡＭを選択するとなると、２７．３Mbitsの記憶が可能な３２Mbit品が必要だが、1個当たり数千円のコストが必要になり、製品の価格にもよるが、事実上選択対象から除外せざるを得ない。これに対し、ＤＤＲ/ＤＤＲ２／ＤＤＲ３を採用したＳＤＲＡＭであれば５１２Mbitでも1個あたり５００円以下で調達可能である。
【０１２２】
しかしながら、ＤＲＡＭにはアクセスレイテンシ（遅延）が大きいという不都合な特徴がある。例えば、ＤＤＲ３メモリでは1回の読み出しアクセスでプリチャージから読み出し終了まで最大３３Cycleかかることがある。
図２１は、リードサイクルのシーケンス図の一例を示す。図２１の上段はＣＡＳレイテンシＣＬ＝２であり、下段はＣＬ＝２．５である。
(i)  メモリコントローラは、ＡＣＴ(バンク・アクティブ・コマンド)と共に、Row（ロウ）アドレス及びバンクアドレスを入力して該当バンクの特定ロウアドレスをアクティブにする。
(ii) ＡＣＴを入力してからtRCD後、カラム・アドレス、バンク・アドレス、及びＲＥＡＤ（リードコマンド）を入力する。
(iii)  リードコマンドを入力してからＣＡＳレイテンシ後に上記で指定したアドレスから始まるバーストデータ出力が開始される。
(iv)  ＡＣＴを入力してからtRAS後、メモリコントローラがＰＲＥ(プリチャージコマンド)を入力する。
(v)  メモリは、ＤＱＳ信号（データストローブ信号）と、ＤＱＳ信号に同期するＤＱ信号（データ信号）を出力する。メモリコントローラは、ＤＱＳ信号の立ち上がり／立ち下がりエッジを参照してＤＱ信号を取り込む。
【０１２３】
このようなレイテンシを隠蔽するためにＳＤＲＡＭ系のメモリでは連続アクセスが基本になる。
【０１２４】
図２２は、連続アクセスの際のリードサイクルのシーケンス図の一例を示す図である。図２２では、ＣＡＳレイテンシＣＬ＝２とした。
【０１２５】
連続アクセスでは、最初の１回（図２２のＲＥＡＤ  a）だけ、上記の全ての手順を踏み、２回目以降のアクセスについてはカラム・アドレスの指示（図２２のＲＥＡＤ ｂ）だけでアクセスする。すなわち、メモリコントローラは、２回目のアクセスでは、ＡＣＴ(アクティブコマンド)、バンクアドレス、及び、ロウアドレスの出力を省略し、さらにプリチャージ（図２１のPRE）を省略する。
【０１２６】
これによって、レイテンシは大きくともスループットは高いアクセスを実現することができる。図２２はカラム・アドレスの指示を２回続けて行った場合のシーケンスだが、２回目のリードコマンド（ＲＥＡＤ ｂ）の直後からデータの読み出しが可能になっている。
【０１２７】
このように、ＤＤＲメモリへのアクセスにて高いスループットを実現するためには、バンク・アドレス及びロウ・アドレスを変更せず（連続アクセスではバンクアドレス、及び、ロウアドレスが省略されるため）、カラム・アドレスの変更のみで連続アクセスする必要がある。
【０１２８】
〔ラスタースキャン〕
図２３は、ラスタースキャンを説明する図の一例である。フレームメモリ５８への書き込みや読み出しとしてはラスタースキャンが知られている。ラスタースキャンの一例としては映像などをＰＣのディスプレイに表示することが挙げられるが、ラスタースキャンとは元の映像の走査線の一列がデータに戻され、走査時と同じ順番で表示するスキャン方法である。
【０１２９】
共振型ＭＥＭＳミラーを用いたＬＰＪ２００のフレームメモリ５８においても、ＰＣや携帯電話本体からＬＰＪへ入力された画像データはフレームメモリ５８に記憶される。ＬＰＪはＰＣから取得した画像データを記録する際は、一般的にライン順次のラスタースキャンで記憶する。
【０１３０】
水平方向へライン順次のラスタースキャンでは、入力画像上の原点（０，０）から入力が始まり、ｘ方向へ入力画素が進んでいってｘ方向の終端まで画像データを記憶する。次に、ＬＰＪはｙ方向に１つラインを移って、そのラインについてｘ方向へ入力画像を記憶しておき、ｘ方向の終端まで画像入力する。この繰り返しで１つのフレーム画像が入力完了する。ここで、特徴的なのは、データはｘ方向に連続したアドレスに記憶されるため、フレームメモリ５８への書き込みも連続書込みすることができることである。
【０１３１】
〔フリースキャン〕
図２４は、フリースキャンを模式的に説明する図の一例である。ＬＰＪでは共振型のＭＥＭＳミラーを使用するため、ｘ方向の振動周波数とｙ方向の振動周波数を特定の値にすることが非常に困難になる。このため、ｘ方向の走査周波数とｙ方向の走査周波数が任意（ＭＥＭＳミラーの物理特性（製造ばらつき）依存）になる。ｘ方向の走査周波数とｙ方向の走査周波数が特定の周波数であれば、その周波数でスキャンした際にラスタースキャンとなるように、画像データを記憶することもできる。しかしながら、ｘ方向の走査周波数とｙ方向の走査周波数が任意だと、予め決まった順番で画像データをフレームメモリ５８に書き込むことができないので、その結果、ＬＰＪの画像出力はフリースキャンとなる。
【０１３２】
図示するように、ＬＰＪはフリースキャンにおいてｘ方向に走査しながらｙ方向にも走査する（走査線が斜めになっている）。このためｘ方向1ラインは連続アドレスでのアクセスは出来ず、ある程度ｘ方向に連続して読みとったら、ｙ方向に移動してＸ方向への読み取りを再開するため、フレームメモリ５８へのアクセスが途切れ途切れになる。アクセスが途切れるため、アクセスのオーバーヘッドが増加してしまう。
【０１３３】
〔歪み補正〕
図２５は、歪み補正を模式的に説明する図の一例である。ＬＰＪでは小さい光学エンジン（レーザー発振器、ＭＥＭＳミラー、レンズ等を有する）から大きな画面を投影するために拡大レンズを使用する。拡大レンズは投影画像の歪みを低減するように設計されるが、ＬＰＪでは正面投射だけでなく斜め投射も想定して、いずれの場合でも歪みが少なくなるように拡大レンズが設計される。
【０１３４】
しかし、両方の投影方法を実装すると、例えば正面投射に合わせて拡大レンズを作り込んだ場合には斜め投射では歪みが大きくなり、斜め投射に合わせて拡大レンズを作り込んだ場合には正面投射では歪みが大きくなる。
【０１３５】
図２５（ａ）はレンズ歪みがある正面投射時の歪みを、図２５（ｂ）はレンズ歪みがある斜め投射時の歪みの一例をそれぞれ示す。図では枠線が実際にレーザー走査される歪み時の映像の外縁を示し、枠線の中の映像は歪み補正によって補正された映像を示している。
【０１３６】
歪み補正では、歪みのある映像が正面投射時のように投射されるように、歪みのある映像と正面投射時の映像をマッピングして、投射位置をずらす処理を行う。本実施形態ではフリースキャンによりフレームメモリ５８へアクセスするので、フリースキャン時のアクセス順を歪み補正に応じて調整する。
【０１３７】
このため図２５（ｃ）に示すように、フリースキャン時のアクセスがアクセス位置によっては湾曲するようになるが、こうすることによって、ＬＰＪがフリースキャンした際に、レンズ歪みがあっても正面投射時のように映像を表示できる。
【０１３８】
また、歪み補正によりブランク画素が生じることになる。図２５（ａ）や図２５（ｂ）において、枠線がＬＰＪのレーザー光の走査範囲であるのに対し、映像としては正面投射の範囲でレーザー光を照射すればよい。このため、正面投射時の映像と枠線の間の画像データは投射されないブランク画素となる。ブランク画素はフレームメモリ５８から読み出す必要がないので、ＬＰＪはフレームメモリ５８からの読み出しを省略できることになる。
【０１３９】
〔構成〕
図２６は、メモリ制御ブロック１００の全体ブロック図の一例を示す。メモリ制御ブロック１００は、ＡＳＩＣなどのＩＣを実体とする。メモリ制御ブロック１００は、入力側バッファ１１、アービタ１３、メモリコントローラ１４、及び、出力側バッファ１２を有する。なお、以下では、画像データと各種の信号を区別せずにデータという場合、書き込み時の画像データを入力データ、読み出し時の画像データを出力データという場合がある。
【０１４０】
入力側バッファ１１はVideo入力から入力された画像データを一時的に記憶する。アービタ１３は、入力側バッファ１１からメモリコントローラ１４への画像データの入力要求と出力側バッファ１２からの画像データの出力要求を調停（選択）する。メモリコントローラ１４は外部メモリ（フレームメモリに相当する）１５にＡＣＴ、ＲＥＡＤ、ＰＲＥ、及び、各種のアドレスを出力して、外部メモリ１５を操作し画像データを読み書きする。出力側バッファ１２は、読出しアドレス生成部１６から入力されたデータアドレスを一時保管すると共に、アービタ１３に画像データの読み出しを要求し、Video出力へ出すための画像データを一時的に記憶する。この読出しアドレス生成部１６は、実施例１の少なくとも描画位置演算器５７又は描画位置演算器５７に必要な画像出力系回路４８となる。データアドレスを  以下、読出しアドレスという。
【０１４１】
データの流れは下記のようになる。
・データ入力：メモリ制御ブロック１００はVideo入力から入力される画像データを外部メモリ１５へ保存する。
Video入力→入力側バッファ１１→アービタ１３（調停器）→メモリコントローラ１４→外部メモリ１５
・データ出力：メモリ制御ブロック１００は、読出しアドレス生成部１６から指示された読出しアドレスに従い、外部メモリ１５から画像データを読出し、Video出力へ出力する。
読出しアドレス：読出しアドレス生成部１６→出力側バッファ１２→アービタ１３（調停器）→メモリコントローラ１４→外部メモリ１５
画像データ：外部メモリ１５→メモリコントローラ１４→アービタ１３（調停器）→出力側バッファ１２→Video出力
本実施形態のメモリ制御ブロック１００は、以下のような特徴を有する。
・入力側バッファ１１は、1ライン〜数ライン程度の画像データの保持が可能で、アービタ１３（調停器）の指示に従って連続的に書込みデータ（画像データ）を渡す。
・アービタ１３（調停器）は、後述するように、入力データが出来るだけ連続アクセスになるように工夫されている。
・出力側バッファ１２は、同じ読出しアドレスに対して複数回連続で読出し要求があった場合に、外部メモリ１５の読出しを１回だけにして、２回目以降はコピーした画像データを使用する。
・出力側バッファ１２は、描画領域外の画像データ（ブランク）を要求された場合に、外部メモリ１５の読出しは行わず、ブランク値をVideo出力へ渡す。
【０１４２】
＜入力側バッファ＞
図２７は、入力側バッファ１１のブロック図の一例を示す。図２７以下では、信号の流れを黒線で、データの流れを白線で示す。入力側バッファ１１は、Video入力から入力される画像データを２PortFIFO２１に一度ため込み、アービタ１３からの要求に応じて、画像データにアドレスを付加してアービタ１３に渡す動作を行う。
・外部メモリ１５へのバースト・ライトをＸ走査の１／４ラインから１／２ライン程度とするならば、２PortFIFO２１に蓄積できるデータ量はＸ走査の１ライン程度が適切と考えられる。
・アドレス生成部２２は、基本的には単純増加のアドレスを生成し、pix_in_vsync（入力画像の垂直同期）が入力された時にゼロクリアする。
・入力側バッファ１１は、２PortFIFO２１のステータスを示す信号flag_in_*をアービタ１３へ渡す。アービタ１３ではこの信号を元にアービトレーション（データパスの調停）を行う。flag_in_*は、flag_in_empty flag_in_halｍ、flag_in_full、又は、flag_in_over_run_errのいずれかである。
・なお、入力側バッファ１１は、一般的な入力画像の非同期吸収バッファであり、特に特別な構造は不要である。
【０１４３】
信号の内容は以下のとおりである。
pix_in[23:0]           ：  入力データ
clk_pix_in             ：  入力データの1画素のクロック
pix_in_en              ：  入力データの受け付けを要求する時に「１」となる
pix_in_size_x          ：  入力データのｘ方向のサイズ
pix_in_size_y          ：  入力データのｙ方向のサイズ
pix_in_vsync           ：  入力データの垂直同期信号
flag_in_empty          ：  ２PortFIFOが空である時に「１」になるフラグ
flag_in_half           ：  ２PortFIFOに半分以上データがある時に「１」になるフラグ
flag_in_full           ：  ２PortFIFOが満タン（例えば９０％以上）である時に「１」になるフラグ
flag_in_over_run_err   ：   ２PortFIFOの読み出しが間に合わず、入力データがあふれてしまった時に「１」となるフラグ
mem_wr_req             ：  ２PortFIFOへの書き込み要求
mem_wr_data[23:0]      ：  ２PortFIFOがアービタに書き込む画像データ
mem_wr_addr[:0]        ：  アドレス生成部２２が生成したアドレス
＜出力側バッファ＞
図２８は出力側バッファ１２のブロック図の一例を示す。出力側バッファ１２は外部メモリ１５への読出し要求と、出力された画像データの一時保存、及び、Video出力への出力を行う。出力側バッファ１２は機能的にアドレス部３１とデータ部３２の２つに分けられる。
【０１４４】
アドレス部３１は、チェック部３３、２PortFIFO３４、及び、ＦＩＦＯ制御部３５を有し、データ部３２は２PortFIFO３６、重複・ブランク再生部３７、及び、２PortFIFO３８を有する。
【０１４５】
＜＜出力側バッファのアドレス部＞＞
図２９は、出力側バッファ１２のアドレス部３１のブロック図の一例を示す。チェック部３３は、重複チェック、ブランクチェックを行う。
・重複チェック：  同じアドレスに対し連続して複数回の読出し要求があるか否かをチェックする。ここの説明では最大４連続までチェックするとして説明するが、実装に合わせて変更してもよい。
・ブランクチェック：ＬＰＪで歪み補正有りの場合に絵を描画しない領域が存在する。読出しアドレス生成部１６は描画する座標から読出しアドレス(pix_out_addr)を計算するが、描画しない座標については「pix_out_addr_en = 0」を出力して描画しない事を出力側バッファ１２に通知する。チェック部３３は、この信号を認識して該当のタイミングではブランクを描画すると判断する。ブランクについても重複チェックは行われるが、ブランクの重複チェックについて、アドレスは無視される。
【０１４６】
信号の内容は以下のとおりである。
pix_out_addr[:0]    ：  読出しアドレス生成部１６が生成した読出しアドレス
clk_pix_out         ：  読出しアドレス生成部１６が読み出し要求する際のクロック
pix_out_addr_en     ：  読出しアドレスがブランクである時に「０」になる
flag_out_addr_empty ：  ２PortFIFO３４に読み出し対象のアドレスのデータが記憶されていない時に「１」になる
mem_rd_addr_duplication_info[1:0]  ：重複回数が格納される
mem_rd_addr_blank   ：  ブランクの場合に「１」になる
mem_rd_addr_param_en：  ２PortFIFO３４に読み出し対象のアドレス等が記憶されている時に「１」になる
mem_rd_req          ：  アービタが出力側バッファを選択すると「１」になる
mem_rd_addr[:0]     ：  アービタに読み出し要求するアドレス
mem_rd_addr_en      ：  アービタに読み出し要求がある時に「１」になる
図３０は、アドレス部３１へ読出しアドレスが入力されてから２PortFIFO３４へ書き込まれるまでの流れを示すフローチャート図の一例である。なお、読出しアドレス生成部１６からの入力は毎クロック入力され、入力信号サンプリングからブランクチェック、重複チェック、２PortFIFO３４への書込み、及び、後処理までは1クロックで処理される。
【０１４７】
フローチャート図で使用される変数の意味は下記のとおりである。
overlapping_count    重複回数が格納される変数
pre_pix_addr        前回入力された読出しアドレスが格納される変数
pre_pix_blank        前回入力された読出しアドレスがブランクの時「１」が格納される変数
new_pix_addr        今回入力された読出しアドレスが格納される変数
new_pix_blank        今回入力された読出しアドレスがブランクの時「１」が格納される変数
まず、アドレス部３１は変数を初期化する（Ｓ１０）。
overlapping_count = 0
pre_pix_addr = 0
pre_pix_blank = 0
次に、アドレス部３１は、入力信号をサンプリングする。pix_out_addrとpix_out_addr_enを１クロック毎にサンプリングする（Ｓ２０）。
【０１４８】
チェック部３３は、「pix_out_addr_en==0」か否かを判定する（Ｓ３０）。「pix_out_addr_en==0」の場合、その読出しアドレスの画像データがブランクであることを示すので、チェック部３３はnew_pix_blankに「１」を設定する（Ｓ４０）。また、チェック部３３は、new_pix_addrに任意のアドレスを設定する。「任意の」アドレスとしたのは、画像データがブランクの場合、アドレス部３１は外部メモリ１５にはアクセスしないためである。
【０１４９】
「pix_out_addr_en==0」でない場合、その読出しアドレスがブランクでないことを示すので、チェック部３３は、pre_pix_blankに「０」を設定する（Ｓ５０）。また、チェック部３３は、new_pix_addrに今回の読出しアドレスを設定する。
【０１５０】
次に、チェック部３３は、重複があるか否かを判定する（Ｓ６０）。この判定は次式で現すことができる。
if {  ((new_pix_blank & pre_pix_blank)==1) or
(((new_pix_blank or pre_pix_blank)==0)  & (new_pix_addr== pre_pix_addr)) 
}    ：  重複している
else ：重複してない
すなわち、現在の読出しアドレスと1つ前の読出しアドレスの両方の画像データがブランク、又は、現在の読出しアドレスと1つ前の読出しアドレスが同じで、現在の読出しアドレスと1つ前の読出しアドレスのどちらかがブランクでない場合に、連続した読出しアドレスが重複していると判定される。現在の読出しアドレスと1つ前の読出しアドレスの画像データが共にブランクの場合にアドレスの一致を問題としないので、重複を多く検出できる。
【０１５１】
なお、図３０のフローチャート図では２つの連続したアドレスが読み込まれた後、重複の是非が判定され、判定結果に応じて２PortFIFO３４への書き込みの有無が定まる点に注意されたい。
【０１５２】
連続した読出しアドレスが重複している場合、チェック部３３はoverlapping_countを１つ大きくする（Ｓ７０）。連続した読出しアドレスが重複している場合は、チェック部３３は２PortFIFO３４に何も書き込まないので、ＦＩＦＯ制御部３５がアービタ１３に読み出し要求することもない。
【０１５３】
しかし、連続した読出しアドレスが重複していても、チェック部３３はoverlapping_countが３になったか否かを判定する（Ｓ８０）。overlapping_count（重複回数）が３になるまでは、チェック部３３はpre_pix_blankにnew_pix_blankを複写し、pre_pix_addrにnew_pix_addrを複写する（Ｓ９０）。
【０１５４】
連続した読出しアドレスが重複していない場合、画像データを読み出すため、チェック部３３は２PortFIFO３４に、overlapping_count、pre_pix_blank及びpre_pix_addrを書き込む（Ｓ１００）。"pre_pix_blank及びpre_pix_addr"なので、読み込まれた２つの連続した読出しアドレスのうち、先の読出しアドレスの重複情報やブランク情報が２PortFIFO３４に書き込まれる。
【０１５５】
そして、overlapping_countを初期化する（Ｓ１１０）。この場合も、チェック部３３はpre_pix_blankにnew_pix_blankを複写し、pre_pix_addrにnew_pix_addrを複写する（Ｓ９０）。
【０１５６】
このような処理により、連続して読出しアドレスが重複しても３回までは、２PortFIFO３４に、重複回数、前回入力された読出しアドレスがブランクかどうか、及び、前回入力された読出しアドレスが書き込まれないので、同じ読出しアドレスへのメモリアクセスを抑制できる。なお、３回としたのは一例であり、４回以上でもよい。
【０１５７】
図３１は、ＦＩＦＯ制御部３５が２PortFIFO３４に保存されたデータをアービタ１３又はデータ部３２に渡すまでの流れを説明するフローチャート図の一例である。
【０１５８】
まず、ＦＩＦＯ制御部３５がアービタ１３にアドレス・データを渡す条件は下記のようになる。
・アービタ１３からmem_rd_req=1が出力されていて、
・アドレス部３１の２PortFIFO３４のテータスとして flag_out_addr_empty = 0 （読み出し先のアドレスが記憶されていること）が出力されていて、
・２PortFIFO３４にブランクでない読出しアドレスが記憶されているため、ＦＩＦＯ制御部３５が出力するmem_rd_addr_blank = 0 になっている、こと。
【０１５９】
また、ＦＩＦＯ制御部３５がデータ部３２に重複情報、ブランク情報を渡す条件は下記のようになる。
・２PortFIFO３４のテータスとして flag_out_addr_empty = 0 が出力されている。
【０１６０】
まず、ＦＩＦＯ制御部３５は自身の使う変数等を初期化する（Ｓ２１０）。
次に、ＦＩＦＯ制御部３５は「flag_out_addr_empty == 0」か否かを判定する（Ｓ２２０）。
「flag_out_addr_empty == 0」であることは、２PortFIFO３４にアドレス等が記憶されていることを意味するので、ＦＩＦＯ制御部３５は２PortFIFO３４から１ワードを読み出す（Ｓ２３０）。なお、１ワードとは一連の情報が記憶されたひとかたまりのデータをいう（例えば３２ビットである）。
【０１６１】
次に、ＦＩＦＯ制御部３５は読み出したデータを一時保管用のＦＦにセットする（Ｓ２４０）。すなわち、
mem_addr_duplication_infoにoverlapping_countを、
mem_rd_addr_blankにpre_pix_blankを、
mem_rd_addrにpre_pix_addrを、それぞれ設定する。
【０１６２】
次に、ＦＩＦＯ制御部３５はデータ部３２にデータを渡す（Ｓ２５０）。すなわち、ＦＩＦＯ制御部３５は、
mem_addr_duplication_infoとmem_rd_addr_blankをデータ部３２に出力する。なお、この時、mem_rd_addr_param_enは「１」となる。
【０１６３】
次に、ＦＩＦＯ制御部３５は「mem_rd_addr_blank = １」か否かを判定する（Ｓ２６０）。
「mem_rd_addr_blank =１」の場合、読出しアドレスはブランクなので処理はステップＳ２２０に戻る。
「mem_rd_addr_blank =１」でない場合、読出しアドレスはブランクでないので、ＦＩＦＯ制御部３５は「mem_rd_req=1」になるまで待機する（Ｓ２７０）。「mem_rd_req=1」の場合、アービタ１３が出力側バッファ１２を選択可能なことを意味するので、ＦＩＦＯ制御部３５は、アービタ１３にデータを出力する（Ｓ２８０）。すなわち、ＦＩＦＯ制御部３５は、mem_rd_addrをアービタ１３に出力する。なお、この時、mem_rd_addr_enは「１」となる。
【０１６４】
このように、ステップＳ２６０において、「mem_rd_addr_blank =１」の場合、読出しアドレスがブランクであるとして外部メモリ１５にアクセスしないことで、不要なアクセスを抑制できる。
【０１６５】
＜＜出力側バッファのデータ部＞＞
続いてデータ部３２について説明する。
図３２は、データ部３２のブロック図の一例である。出力側バッファ１２のデータ部３２は下記の３つのブロックを有する。
・２PortFIFO３６：重複情報とブランク情報を一時蓄積する
・重複・ブランク再生部３７：重複した読出しアドレスとブランクの読出しアドレスの画像データを再生する
・２PortFIFO３８：出力データを一時的に保存する
重複情報とブランク情報の一時蓄積、及び、２PortFIFO３６の動作について説明する。
２PortFIFO３６は、mem_rd_addr_param_en = 1を条件に、アドレス部３１からデータをどんどん受け取り、蓄積する。
【０１６６】
次段へデータを渡すタイミングは下記のとおりである。
・次に渡すべきデータがブランク（mem_rd_addr_blank=1）だったら、そのまま重複・ブランク再生部３７に渡す
・ブランクでなかったら（mem_rd_addr_blank=0）、アービタ１３からの画像データの入力(mem_rd_data_en=1)を待って、重複・ブランク再生部３７に渡す。
【０１６７】
図３３は、データ部３２が重複情報・ブランク情報の書き込みと読み出しを制御する手順を示すフローチャート図の一例である。
【０１６８】
図３３（ａ）はＦＩＦＯ制御部３５が重複情報・ブランク情報を書き込む手順の一例を示す。まず、データ部３２は２PortFIFO３６を初期化する（Ｓ３１０）。
次に、データ部３２は「mem_rd_addr_param_en = 1」か否かを判定する（Ｓ３２０）。
【０１６９】
「mem_rd_addr_param_en = 1」の場合、アドレス部３１がアドレス等を保持しているので、２PortFIFO３６はアドレス部３１からmem_rd_addr_duplication_info（重複回数）とmem_rd_addr_blank（ブランク情報）の書き込みを受け付ける（Ｓ３３０）。
【０１７０】
「mem_rd_addr_param_en = 1」でない場合、アドレス部３１がデータを保持していないので、２PortFIFO３６は待機する。
【０１７１】
図３３（ｂ）は重複・ブランク再生部３７が２PortFIFO３６からデータを読み込み手順の一例を示す。
【０１７２】
まず、重複・ブランク再生部３７は必要であれば重複・ブランク再生部３７を初期化する（Ｓ４１０）。
【０１７３】
次に、重複・ブランク再生部３７は２PortFIFO３６が空か否かを判定する（Ｓ４２０）。空の場合は、データを読み出す必要がないので重複・ブランク再生部３７は待機する。
【０１７４】
空でない場合、重複・ブランク再生部３７は２PortFIFO３６から１ワード（重複情報・ブランク情報）を読み出す（Ｓ４３０）。
【０１７５】
次に、２PortFIFO３６はmem_rd_addr_blank（ブランク情報）に基づき読み出される対象の画像データがブランクか否かを判定する（Ｓ４４０）。
【０１７６】
読み出される対象の画像データがブランクの場合（Ｓ４４０のＹｅｓ）、アービタ１３に読出しアドレスも渡されておらず外部メモリ１５から画像データを読み出す必要がないので、重複情報とブランク情報を重複・ブランク再生部３７に書き込む（Ｓ４５０）。
【０１７７】
読み出される対象の画像データがブランクでない場合（Ｓ４４０のＮｏ）、２PortFIFO３６は「mem_rd_data_en==1」か否かを判定する（Ｓ４６０）。「mem_rd_data_en=1」の場合、アービタ１３が渡す画像データを保持していることを意味するので、重複・ブランク再生部３７がアービタ１３からmem_rd_dataによる画像データを受け取った後、重複・ブランク再生部３７が２PortFIFO３８に画像データを書き込む（Ｓ４５０）。
【０１７８】
このように、画像データがブランクでない場合にだけ、重複・ブランク再生部３７はアービタ１３から画像データを取得することができる。
【０１７９】
〔出力バッファにおける重複・ブランクの再生〕
図３４は重複・ブランク再生部３７のブロック図の一例を示す。重複・ブランク再生部３７はバッファ制御部３７１と一時バッファ３７２を有する。バッファ制御部３７１はブランク又は重複した画像データの再生を行う。
・上記のように、重複・ブランク再生部３７は、前段の２PortFIFO３６から重複情報とブランク情報を受け取る。
・重複・ブランク再生部３７は、mem_rd_data_en=1のときのみアービタ１３から出力されるmem_rd_dataを取り込む。
・重複・ブランク再生部３７は、重複情報に従い最大4画素を再生する。
・再生した画像データを出力データ側の２PortFIFO３８に書込む。
【０１８０】
なお、図３４のparam_0_duplication_infoにはmem_rd_duplication_info（重複情報）が設定され、param_0_blankにはmem_rd_addr_blank（ブランク情報）が設定され、param_0_enにはmem_rd_addr_param_enが設定されている。
【０１８１】
図３５は、重複・ブランク再生部３７が重複・ブランクを再生する手順を示すフローチャート図の一例である。
【０１８２】
まず、重複・ブランク再生部３７は必要であれば一時バッファ３７２を初期化する（Ｓ５１０）。
【０１８３】
重複・ブランク再生部３７は、「param_0_en==1」か否かを判定する（Ｓ５２０）。「param_0_en==1」でなければ、２PortFIFO３６はデータを保持していないので、重複・ブランク再生部３７は待機する。
【０１８４】
「param_0_en==1」の場合、２PortFIFO３６がデータを保持しているので、重複・ブランク再生部３７は、「param_0_blank==1」か否かを判定する（Ｓ５３０）。
【０１８５】
「param_0_blank==1」の場合、書き込み値はブランク値である（Ｓ５４０）。なお、ブランク値とは、例えば輝度がゼロとなるような画像データであり、ＲＧＢ値ではブラックの（０，０，０）となる画像データである。
【０１８６】
「param_0_blank==1」でない場合、書き込み値はアービタ１３から取得したmem_rd_data（画像データ）である（Ｓ５５０）。
【０１８７】
次に、重複・ブランク再生部３７は一時バッファ０〜７の空きをチェックする（Ｓ５６０）。一時バッファ０〜７には、１画素毎に２PortFIFO３８に出力されたか否かに応じてフラグがオン／オフするなどして、空きか否かが登録されている。
【０１８８】
重複・ブランク再生部３７は空いている一時バッファ０〜７のいずれかに、param_0_duplication_info＋１回、書き込み値を書く（Ｓ５７０）。すなわち、重複回数＋１回、ブランク値又はmem_rd_dataを書き込む。
【０１８９】
図３０のステップＳ６０の判定では、２つの連続した読出しアドレスが重複した時に重複回数は１回、３つの連続した読出しアドレスが重複した時に重複回数は２回、４つの連続した読出しアドレスが重複した時に重複回数は３回、となる。このため図３５のステップＳ５７０では、バッファ制御部３７１が重複回数＋１回、ブランク値又はmem_rd_dataを書き込む。
【０１９０】
なお、図３０のＳ６０にて、重複回数が１又は２回の場合で、次に連続した読出しアドレスが重複していないと判定された場合、２PortFIFO３４に書き込まれるのは重複しないと判定された読出しアドレスの直前の画像データのアドレスなので、重複しないと判定された読出しアドレスの画像データは考慮しなくてよい。重複しないと判定された読出しアドレスの画像データが２PortFIFO３４に書き込まれるのは、最短でも次のクロックである。
【０１９１】
以上から、バッファ制御部３７１は、重複回数＋１回、ブランク値又はmem_rd_dataを一時バッファ０〜７に複写する。
【０１９２】
次に、バッファ制御部３７１は、埋まった一時バッファの数が４個以上か否かを判定する（Ｓ５８０）。これは、ある程度画像データが溜まったら書き込むためである。
【０１９３】
埋まった一時バッファ０〜７の数が４個以上の場合、後段の２PortFIFO３８に画像データを書き込む（Ｓ５９０）。
【０１９４】
また、バッファ制御部３７１は、４画素分の一時バッファをアドレスのゼロ側に詰める（Ｓ６００）。例えば、すでに３個の画像データが一時バッファ０〜７に記憶された状態で、２つ以上の画像データが複製されると、４個以上の画像データが格納されることになるため、４個の画像データを後段の２PortFIFO３８に書き込んだ後、後段の２PortFIFO３８に書き込まれなかった画像データを読出しアドレスの小さい側に詰めるためである。また、一時バッファ０〜７は８個あるので、すでに３個の画像データが一時バッファ０〜７に記憶された状態で、４つの画像データが複製されても、１個余裕がある計算になる。
【０１９５】
〔出力側の２PortFIFO〕
出力側の２PortFIFO３８の動作は一般的な２PortFIFOと同様である。
・入力ポートと出力ポートはデータ幅が異なる。
・入力ポートは重複・ブランク再生部３７から４画素分(24bit x 4画素)を受け取る。
・出力ポートはVideo出力に対して1画素分(24bit)ずつ出力する。
・データ残量を示すステータス・フラグを持っている。
データ残量が無い        ：  flag_out_empty
データ残量が半分以上        ：  flag_out_half
データ残量がおおよそ満タン    ：  flag_out_almost_full
満タンとは２PortFIFO３８の容量の約９０%程度である。アービタ１３に既に渡してしまっている読出しアドレスに対応出来るだけの残量が必要となるためである。
これらのステータス・フラグはアービタ１３に出力される。
〔アービタ〕
図３６はアービタ１３に入出力される信号の一例を示す図である。
アービタ１３は入力側バッファIFと出力側バッファIFから入力されるバッファのステータス・フラグの状態を元に、入力側/出力側どちらのバッファからの要求を受け付けるかを選択する。
アービトレーションポリシーは下記の通りである。
・入力側
(A-1)  ２PortFIFO２１を満タンにしてはいけない
(A-2)  ２PortFIFO２１はなるべく半分以下を保つ
(A-3)  ２PortFIFO２１が空ならアクセス不要
アクセスするならなるべく連続アクセスになるようにする
・出力側
(B-1)  ２PortFIFO３８を空にしてはいけない
(B-2)  ２PortFIFO３８はなるべく半分以上を保つ
(B-3)  ２PortFIFO３８が満タンならアクセス不要
図３７は、このアービトレーションポリシーに基づき生成されたアービトレーションテーブルの一例を示す。図３７のステータス・フラグの組み合わせでは、組み合わせた２つのフラグ（２つあれば）が「１」であるとする。
【０１９６】
なお、アービタ１３が入力側を選択するとはmem_wr_reqを「１」にすることを、出力側を選択するとはmem_rd_reqを「１」にすることをいう。
Ｎｏ１：Flag_in_emptyが「１」であるため入力側はアクセス不要であり、 Flag_out_emptyが「１」なので(B-1)に着目して出力側を優先する。
Ｎｏ２：Flag_in_emptyが「１」であるため（A-3）により入力側はアクセス不要であり、出力側にはフラグがないが出力側を優先する。
Ｎｏ３：Flag_in_emptyが「１」であるため入力側はアクセス不要であり、 Flag_out_halfが「１」であるがさらに画像データを蓄積するよう出力側を優先する。
Ｎｏ４：Flag_in_emptyが「１」であるため入力側はアクセス不要であり、 Flag_out_almost_fullなのでアクセス不要だが出力側を優先して出力側を選択する。
Ｎｏ５：入力側はフラグがないが、 Flag_out_emptyが「１」なので(B-1)に着目して出力側を優先する。
Ｎｏ６：入力側も出力側もフラグがないので、（B-2）に着目して出力側を優先して出力側を選択する。
Ｎｏ７：入力側はフラグがないが、 Flag_out_halfが「１」なので（A-2）と(B-2)に着目してさらに画像データを蓄積するよう出力側を優先する。
Ｎｏ８：入力側はフラグがないが、 Flag_out_almost_fullが「１」なので（B-3）に着目して入力側を優先する。Ｆlag_in_emptyがでるまで選択先を入力バッファ側１１に固定することで、入力側バッファ１１が空になるまで転送することができる。
Ｎｏ９：Flag_in_halfが「１」であるため入力側画像データは半分以上であり、Flag_out_emptyが「１」なので(B-1)に着目して、出力側を優先する。Ｆlag_out_half又はＦlag_out_addr_emptyがでるまで出力側バッファに固定することで、出力側バッファ１２が半分以上になるまで転送することができる。
Ｎｏ１０：Flag_in_halfが「１」であるため入力側画像データは半分以上であり、出力側にはフラグがない（出力側データが半分以下）ので（B-2）に着目して出力側を優先する。Ｆlag_out_half又はＦlag_out_addr_emptyがでるまで出力側に固定することで、出力側バッファ１２が半分以上になるまで転送することができる。
Ｎｏ１１：Flag_in_halfが「１」であるため入力側画像データは半分以上であり、Flag_out_halfが「１」なので画像データが半分以上であるので、（A-2）に着目して入力側を優先する。Ｆlag_in_emptyがでるまで入力側に固定することで、入力側バッファ１１が空になるまで転送することができる。
Ｎｏ１２：Flag_in_halfが「１」であるため入力側画像データは半分以上であり、Flag_out_almost_fullが「１」なので、出力側は画像データが必要でないため、（A-2）に着目して入力側を優先する。Ｆlag_in_emptyがでるまで入力側に固定することで、入力側バッファ１１が空になるまで転送することができる。
Ｎｏ１３：Flag_in_fullかつFlag_out_emptyなので、入力側も出力側もエラーとなるが、先に出力側バッファ１２を満たすため出力側を選択する。
Ｎｏ１４：Flag_in_fullなので入力側のエラーとなり入力側を選択する。
Ｎｏ１５：Flag_in_fullなので入力側のエラーとなるため、Flag_out_halfでも入力側を選択する。
Ｎｏ１６：Flag_in_fullなので入力側のエラーとなり、かつ、Flag_out_almost_fullなので出力側は画像データが必要でないため、入力側を選択する。
【０１９７】
このようにアービタ１３が入力側と出力側を選択することで連続転送が起こりやすくなる。
例えば、No.９及びNo10では、出力側バッファ１２が半分以上になるまで転送し、
No.8、No１１及びNo12では、入力側バッファ１１が空になるまで転送する。したがって、読み込みのみ又は書込みのみの連続転送が起こることが期待できる。
【０１９８】
以上説明したように、本実施形態のＬＰＪ２００は、同じ読出しアドレスの連続読み出しを抑制し、読み出し不要な描画領域については不要な読み出しを抑制するので、画像データの読み出しを高速にすることができる。また、入力側バッファへの画像データの書き込みと、出力側バッファからの画像データの読み出しが継続するようにアービタが調停するので連続アクセスを生じやすくできる。
【符号の説明】
【０１９９】
１１      入力側バッファ
１２      出力側バッファ
１３      アービタ（調停器）
１４      メモリコントローラ
１５      外部メモリ（フレームメモリ）
１６      読出しアドレス生成部
２１、３４、３６、３８    ２PortFIFO
２２      アドレス生成部
３１      アドレス部
３２      データ部
３３      チェック部
３５      ＦＩＦＯ制御部
３７      重複・ブランク再生部
５１      ２次元スキャナ駆動タイミング生成器
５２      スキャナドライバ
５３      ２Ｄスキャナ
５４      タイミング補正指示器
５５      スキャナ角度演算器
５６      ＡＤＣ
５７      描画位置演算器
５８      フレームメモリ
５９      レーザードライバ
６０      レーザー発振器
１００    メモリ制御ブロック（メモリ制御ブロック）
２００    レーザープロジェクタ
【先行技術文献】
【特許文献】
【０２００】
【特許文献１】特開２００７−１９９２５１号公報
【特許文献２】特開２００４−２９５０２９号公報
【特許文献３】特開２０１０−２３０７３０号公報
【特許文献４】特開平０８−０６５６８６号公報
【図１】
0005803184.tif 000002
【図２】
0005803184.tif 000003
【図３】
0005803184.tif 000004
【図４】
0005803184.tif 000005
【図５】
0005803184.tif 000006
【図６】
0005803184.tif 000007
【図７】
0005803184.tif 000008
【図８】
0005803184.tif 000009
【図９】
0005803184.tif 000010
【図１０】
0005803184.tif 000011
【図１１】
0005803184.tif 000012
【図１２】
0005803184.tif 000013
【図１３】
0005803184.tif 000014
【図１４】
0005803184.tif 000015
【図１５】
0005803184.tif 000016
【図１６】
0005803184.tif 000017
【図１７】
0005803184.tif 000018
【図１８】
0005803184.tif 000019
【図１９】
0005803184.tif 000020
【図２０】
0005803184.tif 000021
【図２１】
0005803184.tif 000022
【図２２】
0005803184.tif 000023
【図２３】
0005803184.tif 000024
【図２４】
0005803184.tif 000025
【図２５】
0005803184.tif 000026
【図２６】
0005803184.tif 000027
【図２７】
0005803184.tif 000028
【図２８】
0005803184.tif 000029
【図２９】
0005803184.tif 000030
【図３０】
0005803184.tif 000031
【図３１】
0005803184.tif 000032
【図３２】
0005803184.tif 000033
【図３３】
0005803184.tif 000034
【図３４】
0005803184.tif 000035
【図３５】
0005803184.tif 000036
【図３６】
0005803184.tif 000037
【図３７】
0005803184.tif 000038
【図３８】
0005803184.tif 000039
【図３９】
0005803184.tif 000040
【図４０】
0005803184.tif 000041