(57)【要約】【課題】  メモリへの２画素のデータの同時書き込み、２画素のデータの同時読み出しを可能とし、矩形画像データを高速に処理できる画像回転処理回路を実現する。【解決手段】  メモリ１の互いに隣接する上下左右の４画素の各々の記憶位置を互いに異なるブロックに分割し、書き込み制御回路２によって、矩形画像データを２画素ずつメモリ１の互いに異なるブロックに書き込み、読み出し制御回路３によってメモリ１に書き込まれた矩形画像データを、互いに隣接する上下左右の互いに異なるブロックから４画素ずつ読み出し、データセレクタ４によって、読み出された４画素データから指定された角度またはその鏡像に対応する２画素データを選択して出力する。【選択図】  図１
2005346668.tif 000002
【特許請求の範囲】
【請求項１】
１画素当りNビット（Nは自然数）のデータを有する矩形画像データを所定角度回転させた画像出力またはその鏡像出力を得る画像回転処理回路であって、
Mビット（Mは２N以上の自然数）単位にアクセス可能なメモリと、
前記矩形画像データを複数画素ずつ前記メモリに書き込む書込手段と、
前記書込手段によって前記メモリに書き込まれた前記矩形画像データを互いに隣接する上下左右の少なくとも４画素ずつ当該メモリから読み出す読出手段と、
前記読出手段によって前記メモリから少なくとも４画素ずつ読み出される度に、当該読み出された画素データから指定された角度またはその鏡像に対応する複数の画素データを選択して出力する出力手段とを具えたことを特徴とする画像回転処理回路。
【請求項２】
請求項１において、
前記メモリは、互いに隣接する上下左右の少なくとも４画素の各々の記憶位置を互いに異なるブロックに分割し、
前記書込手段は、前記矩形画像データを複数画素ずつ前記メモリの互いに異なるブロックに書き込み、
前記読出手段は、前記メモリに書き込まれた前記矩形画像データを、当該メモリの互いに隣接する上下左右の互いに異なるブロックから読み出すことを特徴とする画像回転処理回路。
【請求項３】
請求項１または２において、
前記書込手段は、１つの矩形画像データを前記メモリに全て書き込みした後は、前記読出手段により前記メモリから全ての画素データを読出したことを示す信号を入力するまでは前記メモリへの書き込みを禁止し、前記読出手段は、前記メモリから全ての画素データを読み出した後は、前記書込手段により１つの矩形画像データを前記メモリに全て書き込みしたことを示す信号を入力するまでは前記メモリからの読み出しを禁止することを特徴とする画像回転処理回路。
【請求項４】
１画素当りNビット（Nは自然数）のデータを有する矩形画像データを所定角度回転させた画像出力またはその鏡像出力を得る画像回転処理回路であって、
Mビット（Mは２N以上の自然数）単位にアクセス可能なメモリと、
前記矩形画像データを複数画素ずつ前記メモリに書き込む書込手段と、
前記書込手段によって前記メモリに複数画素ずつ書き込む際に、当該メモリの互いに隣接する上下左右の同時アクセス可能な少なくとも４画素の記憶位置のうちから指定された角度または鏡像に対応する複数の画素記憶位置を選択する選択手段と、
前記書込手段によって前記メモリに書き込まれた前記矩形画像データを複数画素ずつ当該メモリから読み出す読出手段とを具えたことを特徴とする画像回転処理回路。
【請求項５】
請求項４において、
前記メモリは、互いに隣接する上下左右の少なくとも４画素の各々の記憶位置を互いに異なるブロックに分割し、
前記選択手段は、前記メモリの互いに隣接する上下左右の同時アクセス可能な少なくとも４画素の記憶位置のうちから指定された角度または鏡像に対応する互いに異なるブロックの画素記憶位置を選択し、
前記読出手段は、前記メモリの互いに異なるブロックから複数画素ずつ読み出すことを特徴とする画像回転処理回路。
【請求項６】
請求項４または５において、
前記書込手段は、１つの矩形画像データを前記メモリに全て書き込みした後は、前記読出手段により前記メモリから全ての画素データを読出したことを示す信号を入力するまでは前記メモリへの書き込みを禁止し、前記読出手段は、前記メモリから全ての画素データを読み出した後は、前記書込手段により１つの矩形画像データを前記メモリに全て書き込みしたことを示す信号を入力するまでは前記メモリからの読み出しを禁止することを特徴とする画像回転処理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、矩形画像データをメモリに書き込み、書き込まれた順と異なる順番にメモリから読み出すことにより、所定角度（例えば、９０度、１８０度、２７０度）回転された画像データやそれらの鏡像データを得る画像回転処理回路に関するものである。
【背景技術】
【０００２】
矩形画像データの９０度、１８０度、２７０度回転された画像データやそれらの鏡像データを得るためには、矩形画像データの１画素のビット数かそれ以上のビット数の単位でアクセス可能なメモリを用意し、すべての矩形画像データをメモリに書き込んでから、すべての矩形画像データをメモリから読み出す。この際に書き込み時に与えるメモリアドレスの順番と読み出し時に与えるメモリアドレスの順番を回転、鏡像に従って変えることで、回転、鏡像された画像データが得られる（特許文献１参照）。
【０００３】
従来、書き込み時に与えるメモリアドレスの順番を先頭アドレスからインクリメントし、読み出し時に与えるメモリアドレスの順番を回転、鏡像に従って変える方法か、書き込み時に与えるメモリアドレスの順番を回転、鏡像に従って変えておき、読み出し時に与えるメモリアドレスの順番を先頭アドレスからインクリメントさせる方法がとられる。これら二つの方法は原理的に等価なものである。
【０００４】
図16は画像回転処理回路の従来例を示すブロック図である。この例は読み出し時に与えるメモリアドレスの順番を回転、鏡像の指定に従って、変化させるものである。1は画像データを記憶するためのメモリであり、write_enable信号により入力データが書き込まれ、read_enable信号によりデータが読み出される。2と3はそれぞれ書き込み制御部と読み出し制御部である。書き込み制御部2はwrite_enable信号からメモリ1の書き込むアドレスwrite_address信号を生成し、矩形画像データをすべてメモリ1へ書き込んだ時にそのことを読み出し制御部3に知らせるwrite_done信号を生成する。読み出し制御部3はread_enable信号と回転、鏡像の指定するrotate信号からメモリ1の読み出すアドレスread_address信号を生成し、矩形画像データをすべてメモリ1から読み出した時にそのことを書き込み制御部2に知らせるread_done信号を生成する。さらに、書き込み制御部2はwrite_done信号をアクティブにしてから読み出し制御部3からのread_done信号がアクティブになるまでの期間、メモリ1への書き込みの禁止を知らせるためにwrite_ready信号をインアクティブにし、読み出し制御部3はread_done信号をアクティブにしてから書き込み制御部2からのwrite_done信号がアクティブになるまでの期間、メモリ1からの読み出しの禁止を知らせるためにread_ready信号をインアクティブにする。
【０００５】
矩形画像データが16×16として説明する。図17はメモリ1の構成を説明するための図である。16×16の矩形画像データの画素数は256であり、アドレスに必要なビット数は8ビットである。メモリ1は1画素に必要なビット数、またはそれ以上のビット数単位でアクセスできる必要がある。
【０００６】
図18は書き込み制御部2の構成を示す図である。21はカウンタであり、write_enable信号でインクリメントし、write_address信号を0、1、2、…と変化させ、255に達した時に、つまり矩形画像データをすべてメモリ1に書き込んだ時にwrite_done信号をアクティブにする。22はRSフリップフロップ（RS-FF）であり、write_done信号のアクティブでリセット、read_done信号でセットされる。従って、RS-FF22の出力であるwrite_ready信号はwrite_done信号のアクティブからread_done信号がアクティブになるまでの期間だけインアクティブとなる。後で説明するが、矩形画像データをメモリ1に書き込み終えた後、そのデータをメモリ1からすべて読み出した後でないと、次の矩形画像データの書き込みが前の矩形画像データを上書きする可能性がある。write_ready信号は上書きの可能性がある期間、インアクティブとなるので、write_ready信号がアクティブの時にだけメモリ1に書き込むことで上書きを防ぐ。
【０００７】
図19は読み出し制御部3の構成を示す図である。31はカウンタであり、read_enable信号でインクリメントし、カウント出力を0、1、2、…と変化させ、255に達した時に、つまり矩形画像データをすべてメモリ1から読み出した時にread_done信号をアクティブにする。32はRSフリップフロップ（RS-FF）であり、read_done信号のアクティブでリセット、write_done信号でセットされる。従って、RS-FF32の出力であるread_ready信号はread_done信号のアクティブからwrite_done信号がアクティブになるまでの期間だけインアクティブとなる。後で説明するが、矩形画像データがメモリ1へすべて書き込まれた後でないと、矩形画像データの読み出し開始ができない。read_ready信号は読み出しができない期間、インアクティブとなるので、read_ready信号がアクティブの時にだけメモリ1から読み出すことで誤ったデータの読み出しを防ぐ。34はexchangerであり、rotate[2]が1であると、カウンタ31の出力の上位と下位を入れ替える。33、33’は排他的論理和回路であり、それぞれrotate[0]、rotate[1]が1であると、exchanger34の出力の下位4ビット、上位4ビット出力を反転する。rotate信号は回転、鏡像を指定する信号で、3ビットを有する。排他的論理和回路33、33’とexchanger34が回転、鏡像の指定に従って、書き込みアドレスの順番と異なる読み出しアドレスを生成する部分に当る。rotate信号の値とその意味は次に説明する。
【０００８】
矩形画像データの回転された画像を得る動作について説明する。初期状態では、write_ready信号はアクティブで、read_ready信号はインアクティブである。つまり、メモリ1への書き込みが許可、メモリ1からの読み出しが禁止状態である。図20上に示す画像データを例にすると、この画像データの左上から右下へ向かって、左右方向優先で1画素づつ、メモリ1に書き込む。この時、書き込み制御部2はwrite_address信号を0、1、2、…と変化させて出力するので、メモリ1には、同図上のような位置に各画素が書き込まれる。write_address信号が255（=0xff、0xはその値がヘキサデシマルであることを表す）で右下の最後の書き込まれた時点で、write_done信号がアクティブとなり、write_ready信号はインアクティブに、read_ready信号はアクティブに変化する。従って、メモリ1への書き込みが禁止、メモリ1からの読み出しが許可状態になる。
【０００９】
rotate信号が0b101（0bはその値が2進数であることを表す）の場合を考える。読み出し制御部3では、メモリ1からの読み出しで、カウンタ31の出力値cnt[7:0]を0x00、0x01、…、0x0e、0x0f、0x10、0x11、…、0x1e、0x1f、…、0xe0、0xe1、…、0xee、0xef、0xf0、0xf1、…、0xfe、0xffと変化させる。exchanger34では、rotate[2]=1なので、cnt[3:0]を上位4ビットとして、cnt[7:4]を下位4ビットとして出力する。排他的論理和回路33、33’では、rotate[0]=1、rotate[1]=0なので、exchanger34の出力の下位4ビットを反転し、上位4ビットはそのままで、read_address信号として出力する。従って、カウンタ31の出力から生成されるread_address信号は0x0f、0x1f、…、0xef、0xff、0x0e、0x1e、…、0xee、0xfe、…、0x01、0x11、…、0xe1、0xf1、0x00、0x10、…、0xe0、0xf0と変化する。このアドレスの順番でメモリ1から読み出された画素データを、左上から右下へ向かって、左右方向優先の順番であるとみなし、並べなおしたものが図20下の図であり、反時計回りに90度回転した画像データとなる。メモリ1のデータをすべて読み出した時点で、read_done信号がアクティブとなり、write_ready信号はアクティブに、read_ready信号はインアクティブに変化し、初期状態に戻る。
【００１０】
図21は上の説明と同様にして、各rotate信号に対応して得られる画像を示したものである。同図で、rotate=0b011とrotate=0b111で得られる画像データについて着目すると、最初に読み出される画素データはメモリ1のアドレスの255（0xff）からであり、これは最後に書き込まれる画素データである。よって、すべての矩形画像データが書き込まれた後でないと、画素データの読み出しを開始できないので、read_ready信号が前に説明した通り必要となる。また、最後に読み出される画素データはメモリ1のアドレスの0（0x00）からであり、これは次の画像データの最初の画素データが書き込まれるアドレスである。よって、すべての矩形画像データが読み出された後でないと、次の画像データの書き込みを開始できないので、write_ready信号が前に説明した通り必要となる。
【００１１】
【特許文献１】特開２００４−４０３８１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、上記従来例では次のような問題点がある。近年、データ転送の高速化に伴い、バス幅が増大する傾向にあり、バス幅が画像の画素データ幅を超えることも珍しくない。バス幅が2画素データを転送できる場合、上記従来例では同時に2画素のデータをメモリに書き込むことができないので、データ転送の高速化を妨げる。
【００１３】
たとえ、メモリを2画素分のデータ単位でアクセスできるようにしたとしても、90度や270度、及びそれらの鏡像を得たい場合には、2画素のデータを一度のアクセスで得ることは不可能であり、データ転送の高速化を妨げる。
【００１４】
本発明は上記従来例の問題点に鑑み、メモリへの複数画素（例えば２画素）のデータの同時書き込みを可能にし、さらにメモリからの複数画素（例えば２画素）のデータの同時読み出しを可能とし、矩形画像データを高速に処理できる画像回転処理回路を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明は、１画素当りNビット（Nは自然数）のデータを有する矩形画像データを所定角度回転させた画像出力またはその鏡像出力を得る画像回転処理回路であって、Mビット（Mは２N以上の自然数）単位にアクセス可能なメモリと、前記矩形画像データを複数画素ずつ前記メモリに書き込む書込手段と、前記書込手段によって前記メモリに書き込まれた前記矩形画像データを互いに隣接する上下左右の少なくとも４画素ずつ当該メモリから読み出す読出手段と、前記読出手段によって前記メモリから少なくとも４画素ずつ読み出される度に、当該読み出された画素データから指定された角度またはその鏡像に対応する複数の画素データを選択して出力する出力手段とを具えたことを特徴とする。
【発明の効果】
【００１６】
本発明によれば、メモリへの複数画素のデータの同時書き込みを可能にし、さらにメモリからの複数画素のデータの同時読み出しを可能とし、矩形画像データを高速に処理できる画像回転処理回路を実現できる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明を説明する。図1は、本発明に係る画像回転処理回路の一実施例の概略構成を示すブロック図である。同図において、1は矩形画像の画素データを記憶する4つのブロックから成るメモリ、2と3はそれぞれ書き込み制御部と読み出し制御部である。書き込み制御部2はwrite_enable信号からメモリ1の書き込むアドレスwrite_address信号とメモリ1のメモリブロックに対するwrite_enable0及びwrite_enable1信号を生成し、矩形画像データをすべてメモリ1へ書き込んだ時にそのことを読み出し制御部3に知らせるwrite_done信号を生成する。読み出し制御部3はread_enable信号からメモリ1の読み出すアドレスread_address信号とメモリ1のメモリブロックからの読み出しデータを選択するためのsel0及びsel1信号を回転、鏡像の指定に従って生成する。さらに、読み出し制御部3は回転処理された画像データをメモリ1からすべて読み出した時にそのことを書き込み制御部2に知らせるread_done信号を生成する。4はデータセレクタであり、読み出し制御部3からのsel0及びsel1信号により、4つのメモリブロックからの読み出しデータのうち、2つを選択する。
【００１８】
矩形画像データが16×16（画素）として説明する。図2はメモリ1の構成を説明するための図である。メモリ1は4つのメモリブロック100、101、110、111に分割される。同図上は矩形16×16の画像データの画素の並び順に並べたものであり、そこに記載される00、01、10、11はそれぞれメモリブロック100、101、110、111に対応する（以下、メモリブロック00,01,10,11と表現することもある）。つまり、画像データの隣り合う上下左右の画素は異なるメモリブロックに記憶される。図3は各メモリブロックに接続される書き込みデータと書き込み信号（write_enable0/1信号）、読み出しデータと読み出し信号（read_enable信号）を示す。同図では省略されているが、書き込みアドレスと読み出しアドレスは各メモリブロックに共通に接続される。すなわち、１つのアドレスには４つのメモリブロックの中の各１つが対応しており、write_enableがアクティブであるブロックのみが書き込み可能であり、read_enableがアクティブであるブロックのみが読み出し可能である。したがって、１つのアドレスがアクセスされると、最大で、４つの画素データが書き込みまたは読み出しされる。
【００１９】
図4は書き込み制御部2の構成を示すブロック図である。21はカウンタであり、write_enable信号でインクリメントし、カウント出力を0、1、2、…と変化させ、127に達した時に、つまり矩形画像データをすべてメモリ1へ書き込んだ時にwrite_done信号をアクティブにする。22はRSフリップフロップ（RS-FF）であり、write_done信号のアクティブでリセット、read_done信号でセットされる。従って、RS-FF22の出力であるwrite_ready信号はwrite_done信号のアクティブからread_done信号がアクティブになるまでの期間だけインアクティブとなる。write_ready信号は上書きの可能性がある期間、インアクティブとなるので、write_ready信号がアクティブの時にだけメモリ1に書き込むことで上書きを防ぐ。25は組み合わせ回路であり、同図下の２つの式（以下に、式１および式２として示す）に示す通り、カウンタ出力のビット3であるcnt[3]が0の時には、write_enable0信号が、1の時にはwrite_enable1信号がそれぞれアクティブになるようにwrite_enable信号をマスクする。
式１：    write_enable0=write_enable*cnt[3]'
式２：    write_enable1=write_enable*cnt[3]
【００２０】
なお、式中で’が後置された信号はその前の信号の反転をあらわすものとする(以下の各式も同様)。書き込みアドレスwrite_address信号（wa[5:0]）はカウンタ出力の上位3ビット（cnt[6:4]）とカウンタ出力の下位3ビット（cnt[2:0]）を連結したものである。
【００２１】
図5は読み出し制御部3の構成を示すブロック図である。31はカウンタであり、read_enable信号でインクリメントし、カウント出力を0、1、2、…と変化させ、127に達した時に、つまり矩形画像データをすべてメモリ1から読み出した時にread_done信号をアクティブにする。32はRSフリップフロップ（RS-FF）であり、read_done信号のアクティブでリセット、write_done信号でセットされる。従って、RS-FF32の出力であるread_ready信号はread_done信号のアクティブからwrite_done信号がアクティブになるまでの期間だけインアクティブとなる。矩形画像データがメモリ1へすべて書き込まれた後でないと、矩形画像データの読み出し開始ができない。read_ready信号は読み出しができない期間、インアクティブとなるので、read_ready信号がアクティブの時にだけメモリ1から読み出すことで誤ったデータの読み出しを防ぐ。35は組み合わせ回路であり、rotate信号とカウンタ31のカウント出力のビット3とからデータセレクタ4に対するセレクト信号sel0、sel1を同図下の式（以下に式３〜式６として示す）のごとく作り出す。なお、式中のXORは排他的論理和をあらわすものとする。
式３：    sel0[1]=rotate[2]'*(rotate[1] XOR cnt[3])+rotate[2]*rotate[1]
式４：    sel0[0]=rotate[2]'*rotate[0]+rotate[2]*(rotate[0] XOR cnt[3])
式５：    sel1[1]=rotate[2]'*(rotate[1] XOR cnt[3])+rotate[2]*rotate[1]'
式６：    sel1[0]=rotate[2]'*rotate[0]'+rotate[2]*(rotate[0] XOR cnt[3])
【００２２】
34はexchangerであり、rotate[2]が1であると、カウンタ31のカウント出力の上位と下位を入れ替える。33、33’は排他的論理和回路であり、それぞれrotate[0]、rotate[1]が1であると、入力されるexchanger34の出力の下位3ビット、上位3ビット出力を反転する。排他的論理和回路33、33’とexchanger34によりrotate信号に従って、生成される読み出しアドレスの順番が変化する。
【００２３】
図6はデータセレクタ4の構成を示すブロック図である。41と41’はセレクタであり、それぞれ読み出し制御部3からのセレクト信号sel0、sel1により、メモリ１の各メモリブロックから読み出されたデータを選択する。セレクト信号が00、01、10、11である場合、セレクタ41、41’はそれぞれmout00、mout01、mout10、mout11を出力する。
【００２４】
矩形画像データの回転された画像を得る動作について説明する。初期状態では、write_ready信号はアクティブで、read_ready信号はインアクティブである。つまり、メモリ1への書き込みが許可、メモリ1からの読み出しが禁止状態である。rotate信号の値は0b101（反時計回りの90度回転）として説明する。図7に示す画像データを例にすると、この画像データの左上から右下へ向かって、左右方向優先で2画素づつ、メモリ1に書き込む。din0が2画素のうち左側、din1が右側とする。書き込み制御部2では、カウンタ21の出力値（cnt[6:4]、cnt[3]、cnt[2:0]）を（0、0、0）、（0、0、1）、…、（0、0、6）、（0、0、7）、（0、1、0）、（0、1、1）、…、（0、1、6）、（0、1、7）、（1、0、0）、（１、0、1）、…、（1、0、6）、（1、0、7）、（1、1、0）、（１、1、1）、…、（1、1、6）、（1、1、7）、…、（7、0、0）、（７、0、1）、…、（7、0、6）、（7、0、7）、（7、1、0）、（７、1、1）、…、（7、1、6）、（7、1、7）と変化させる。矩形画像データの1行目に当る最初の8回の書き込みでは、cnt[3]は0なので、write_enable0信号のみアクティブになるので、din0とdin1はそれぞれメモリブロック00と01の先頭から書き込まれる。矩形画像データの2行目に当る次の8回の書き込みでは、cnt[3]は1なので、write_enable1信号のみアクティブになるので、din0とdin1はそれぞれメモリブロック10と11の先頭から書き込まれる。これを繰り返すことにより、図7の画像データは図8のようにメモリ1に記憶される。カウンタ21の出力値（cnt[6:4]、cnt[3]、cnt[2:0]）が（7、1、7）（cnt[6:0]=127）で右下の最後の2画素を書き込まれた時点で、write_done信号がアクティブとなり、write_ready信号はインアクティブに、read_ready信号はアクティブに変化する。従って、メモリ1への書き込みが禁止、メモリ1からの読み出しが許可状態になる。
【００２５】
次に、読み出し制御部3では、メモリ1からの読み出しで、カウンタ31の出力値（cnt[6:4]、cnt[3]、cnt[2:0]）を（0、0、0）、（0、0、1）、…、（0、0、6）、（0、0、7）、（0、1、0）、（0、1、1）、…、（0、1、6）、（0、1、7）、（1、0、0）、（１、0、1）、…、（1、0、6）、（1、0、7）、（1、1、0）、（１、1、1）、…、（1、1、6）、（1、1、7）、…、（7、0、0）、（７、0、1）、…、（7、0、6）、（7、0、7）、（7、1、0）、（７、1、1）、…、（7、1、6）、（7、1、7）と変化させる。exchanger34では、rotate[2]=1なので、cnt[6:3]とcnt[2:0]を入れ替える。排他的論理和回路33、33’では、rotate[0]=0、rotate[1]=1なので、exchanger34の出力の下位３ビットをそのままで、上位３ビットを反転して、read_address信号として出力する。
【００２６】
従って、カウンタ31の出力から生成されるread_address信号（ra[5:3]、ra[2:0]）は（0、7）、（1、7）、…、（6、7）、（7、7）、（0、7）、（1、7）、…、（6、7）、（7、7）、（0、6）、（1、6）、…、（6、6）、（7、6）、（0、6）、（1、6）、…、（6、6）、（7、6）、…、（0、0）、（1、0）、…、（6、0）、（7、0）、（0、0）、（1、0）、…、（6、0）、（7、0）と変化する。処理された矩形画像データの1行目に当る最初の8回の読み出しでは、read_address信号（ra[5:3]、ra[2:0]）が（0、7）、（1、7）、…、（6、7）、（7、7）の順番であり、各メモリブロック100、101、110、111は、８回の読み出しの各々の読み出しにおいて、対応したアドレスに記憶されたデータをそれぞれmout00、mout01、mout10、mout11に出力する。この間、cnt[3]は0であり、rotateは0b101なので、sel0[1:0]とsel1[1:0]にはそれぞれ0b01と0b11が出力される。したがって、最初の8回の読み出しでは、データセレクタ4の出力であるdout0とdout1にはそれぞれメモリブロック01とメモリブロック11の値が出力される。処理された矩形画像データの2行目に当る次の8回の読み出しでは、read_address信号は8回の読み出しと同じ順番であるが、cnt[3]は1なので、sel0[1:0]とsel1[1:0]がそれぞれ0b00と0b10となり、データセレクタ4の出力であるdout0とdout1にはそれぞれメモリブロック00とメモリブロック10の値が出力される。
【００２７】
さらに、処理された矩形画像データの3行目に当る次の8回の読み出しでは、read_address信号（ra[5:3]、ra[2:0]）が（0、6）、（1、6）、…、（6、6）、（7、6）の順番で、cnt[3]は0であることから、それらのアドレスに対応するメモリブロック01とメモリブロック11の値がdout0とdout1に出力されることがわかる。
【００２８】
このようにメモリ1から読み出した画素データを、左上から右下へ向かって、左右方向優先の順番で、dout0が左側であるとみなし、並べなおしたものが図9下であり、求める反時計回りに90度回転した画像データであることがわかる。
【００２９】
カウンタ31の出力値（cnt[6:4]、cnt[3]、cnt[2:0]）が（7、1、7）（cnt[6:0]=127）で最後の2画素を読み出した時点で、read_done信号がアクティブとなり、write_ready信号はアクティブに、read_ready信号はインアクティブに戻る。
【００３０】
rotate信号が他の値をとる場合について、同様に考えると、
rotate信号の値が0b000の時に、回転、鏡像なしの画像、
rotate信号の値が0b001の時に、左右に対して鏡像した画像、
rotate信号の値が0b010の時に、180度回転した後、左右に対して鏡像した画像、
rotate信号の値が0b011の時に、180度回転した画像、
rotate信号の値が0b100の時に、反時計回りに270度回転した後、左右に対して鏡像した画像、
rotate信号の値が0b101の時に、反時計回りに90度回転した画像、
rotate信号の値が0b110の時に、反時計回りに270度回転した画像、
rotate信号の値が0b111の時に、反時計回りに90度回転した後、左右に対して鏡像した画像、
がそれぞれ、得られることがわかる。
【００３１】
上の実施例では、メモリ1に対する生成される読み出しアドレスの順番を、rotate信号により変化させたが、書き込みアドレスをrotate信号により変化させる方法もある。図10は書き込みアドレスをrotate信号により変化させる方法である、本発明に係る情報処理装置の第二の実施例の概略構成を示すブロック図である。
【００３２】
前の説明と同様に矩形画像データが16×16として説明する。また、rotate信号と得られる処理された結果の画像データとの対応は同様に図21で示されるものとする。メモリ1は同様に4つのメモリブロック100、101、110、111に分割される。図11は各メモリブロックに接続される書き込みデータと書き込み信号（write_enable0/1信号）、読み出しデータと読み出し信号（read_enable信号）を示す。同図では省略されているが、書き込みアドレスと読み出しアドレスは各メモリブロックに共通に接続される。
【００３３】
図12は書き込み制御部2の構成を示すブロック図である。21はカウンタであり、write_enable信号でインクリメントし、カウント出力を0、1、2、…と変化させ、127に達した時に、つまり矩形画像データをすべてメモリ1へ書き込んだ時にwrite_done信号をアクティブにする。22はRSフリップフロップ（RS-FF）であり、write_done信号のアクティブでリセット、read_done信号でセットされる。従って、RS-FF22の出力であるwrite_ready信号はwrite_done信号のアクティブからread_done信号がアクティブになるまでの期間だけインアクティブとなる。write_ready信号は上書きの可能性がある期間、インアクティブとなるので、write_ready信号がアクティブの時にだけメモリ1に書き込むことで上書きを防ぐ。
【００３４】
25は組み合わせ回路であり、同図下の式（以下に式７〜式１１として示す）に示す通り、カウンタ出力のビット3であるcnt[3]に従って、write_enable信号をマスクしたwrite_enable00、write_enable01、write_enable10、write_enable11信号とデータセレクタ４’の選択信号であるsel信号を作成する。
式７：    sel=rotate[0]
式８：    write_enable00=write_enable*(cnt[3] XOR rotate[1]')
式９：    write_enable01=write_enable*(cnt[3] XOR rotate[1]' XOR rotate[2])
式１０：  write_enable10=write_enable*(cnt[3]' XOR rotate[1]' XOR rotate[2])
式１１：  write_enable11=write_enable*(cnt[3]' XOR rotate[1]')
【００３５】
23、23’は排他的論理和回路であり、それぞれrotate[0]、rotate[1]が1であると、カウンタ21のカウンタ出力の下位3ビット、上位3ビット出力を反転する。24はexchangerであり、rotate[2]が1であると、入力される信号の上位と下位を入れ替え、write_address信号とする。排他的論理和回路23、23’とexchanger24によりrotate信号に従って、生成される書き込みアドレスの順番が変化する。
【００３６】
図13は読み出し制御部3の構成を示すブロック図である。31はカウンタであり、read_enable信号でインクリメントし、カウント出力を0、1、2、…と変化させ、127に達した時に、つまり矩形画像データをすべてメモリ1から読み出した時にread_done信号をアクティブにする。32はRSフリップフロップ（RS-FF）であり、read_done信号のアクティブでリセット、write_done信号でセットされる。従って、RS-FF32の出力であるread_ready信号はread_done信号のアクティブからwrite_done信号がアクティブになるまでの期間だけインアクティブとなる。矩形画像データがメモリ1へすべて書き込まれた後でないと、矩形画像データの読み出し開始ができない。read_ready信号は読み出しができない期間、インアクティブとなるので、read_ready信号がアクティブの時にだけメモリ1から読み出すことで誤ったデータの読み出しを防ぐ。35は組み合わせ回路であり、カウンタ31のカウント出力にビット3からメモリ1に対するread_enable0、read_enable1信号を同図下の式（以下に式１２、式１３として示す）のごとく作り出す。
式１２：  read_enable0=read_enable*cnt[3]'
式１３：  read_enable1=read_enable*cnt[3]
【００３７】
図14はデータセレクタ4’の構成を示すブロック図である。42と42’はセレクタであり、それぞれ書き込み制御部2からのセレクト信号selにより、メモリ１の各メモリブロックへの書き込むべきデータを選択する。セレクト信号が0である場合、セレクタ42、42’はそれぞれdin0、din1を出力し、1である場合、セレクタ42、42’はそれぞれdin1、din0を出力する。
【００３８】
矩形画像データの回転された画像を得る動作について説明する。初期状態では、write_ready信号はアクティブで、read_ready信号はインアクティブである。つまり、メモリ1への書き込みが許可、メモリ1からの読み出しが禁止状態である。rotate信号の値は0b101（反時計回りの90度回転）として説明する。図7に示す画像データを例にすると、この画像データの左上から右下へ向かって、左右方向優先で2画素づつ、メモリ1に書き込む。din0が2画素のうち左側、din1が右側とする。書き込み制御部2では、カウンタ21の出力値（cnt[6:4]、cnt[3]、cnt[2:0]）を（0、0、0）、（0、0、1）、…、（0、0、6）、（0、0、7）、（0、1、0）、（0、1、1）、…、（0、1、6）、（0、1、7）、（1、0、0）、（１、0、1）、…、（1、0、6）、（1、0、7）、（1、1、0）、（１、1、1）、…、（1、1、6）、（1、1、7）、…、（7、0、0）、（７、0、1）、…、（7、0、6）、（7、0、7）、（7、1、0）、（７、1、1）、…、（7、1、6）、（7、1、7）と変化させる。排他的論理和回路23、23’では、rotate[0]=1、rotate[1]=0なので、カウンタ21の出力の下位4ビットを反転して、上位4ビットをそのままで、exchanger24に出力する。exchanger24では、rotate[2]=1なので、入力される信号の上位4ビットと下位4ビットを入れ替え、write_address信号として出力する。従って、カウンタ21の出力から生成されるwrite_address信号（ra[5:3]、ra[2:0]）は（7、0）、（6、0）、…、（1、0）、（0、0）、（7、0）、（6、0）、…、（1、0）、（0、0）、（7、1）、（6、1）、…、（1、1）、（0、1）、（7、1）、（6、1）、…、（1、1）、（0、1）、…、（7、7）、（6、7）、…、（1、7）、（0、7）、（7、7）、（6、7）、…、（1、7）、（0、7）と変化する。矩形画像データの1行目に当る最初の8回の書き込みでは、write_address信号（wa[5:3]、wa[2:0]）が（7、0）、（6、0）、…、（1、0）、（0、0）の順番であり、この間、cnt[3]は0であり、rotateは0b101なので、selと（write_enable00、write_enable01、write_enable10、write_enable11）はそれぞれ1と（1、0、1、0）が出力される。したがって、最初の8回の書き込みでは、din0とdin1がそれぞれメモリブロック10とメモリブロック00へ書き込まれる。矩形画像データの2行目に当る次の8回の書き込みでは、write_address信号は前の8回の書き込みと同じ順番であるが、cnt[3]は1なので、selと（write_enable00、write_enable01、write_enable10、write_enable11）がそれぞれ1と（0、1、0、1）となり、din0とdin1がそれぞれメモリブロック11とメモリブロック01へ書き込まれる。
【００３９】
さらに、矩形画像データの3行目に当る次の8回の書き込みでは、write_address信号（wa[5:3]、wa[2:0]）が（7、1）、（6、1）、…、（1、1）、（0、1）の順番で、cnt[3]は0であることから、それらのアドレスに対応するメモリブロック10とメモリブロック00の値がdin0とdin1に出力されることがわかる。
【００４０】
このようにして、すべてに矩形データをメモリ1に書き込むと、図15のような位置に各画素データが書き込まれる。
【００４１】
次に、読み出し制御部3では、メモリ1からの読み出しで、カウンタ31の出力値（cnt[6:4]、cnt[3]、cnt[2:0]）を（0、0、0）、（0、0、1）、…、（0、0、6）、（0、0、7）、（0、1、0）、（0、1、1）、…、（0、1、6）、（0、1、7）、（1、0、0）、（１、0、1）、…、（1、0、6）、（1、0、7）、（1、1、0）、（１、1、1）、…、（1、1、6）、（1、1、7）、…、（7、0、0）、（７、0、1）、…、（7、0、6）、（7、0、7）、（7、1、0）、（７、1、1）、…、（7、1、6）、（7、1、7）と変化させ、cnt[6:3]とcnt[2:0]をread_address信号として出力する。このアドレスの順番はrotate信号の値に関係ない。
【００４２】
従って、処理された矩形画像データの読み出しでは、左上から右下へ、左右方向優先で、cnt[3]=0の時メモリブロック00、01をdout0、dout1に出力し、cnt[3]=1の時メモリブロック10、11をdout0、dout1に出力するので、得られる画像データは図15と同じになる。これは求める反時計回りに90度回転した画像である。
【００４３】
rotate信号が他の値をとる場合について、同様に考えると、
rotate信号の値が0b000の時に、回転、鏡像なしの画像、
rotate信号の値が0b001の時に、左右に対して鏡像した画像、
rotate信号の値が0b010の時に、180度回転した後、左右に対して鏡像した画像、
rotate信号の値が0b011の時に、180度回転した画像、
rotate信号の値が0b100の時に、反時計回りに270度回転した後、左右に対して鏡像した画像、
rotate信号の値が0b101の時に、反時計回りに90度回転した画像、
rotate信号の値が0b110の時に、反時計回りに270度回転した画像、
rotate信号の値が0b111の時に、反時計回りに90度回転した後、左右に対して鏡像した画像、
がそれぞれ、得られることがわかる。
【図面の簡単な説明】
【００４４】
【図１】本発明に係る回転処理回路の一実施例の概略構成を示すブロック図である。
【図２】図1のメモリの構成を説明するための図である。
【図３】図1のメモリの概略構成を示すブロック図である。
【図４】図1の書き込み制御部の概略構成を示すブロック図である。
【図５】図1の読み出し制御部の概略構成を示すブロック図である。
【図６】図1のデータセレクタの概略構成を示すブロック図である。
【図７】図1における回転処理動作を説明するための入力画像データを示す図である。
【図８】図1におけるメモリに書き込まれた入力画像データを示す図である。
【図９】図1におけるメモリから読み出される画像データを示す図である。
【図１０】本発明に係る回転処理回路の第二の実施例の概略構成を示すブロック図である。
【図１１】図10のメモリの概略構成を示すブロック図である。
【図１２】図10の書き込み制御の概略構成を示すブロック図である。
【図１３】図10の読み出し制御の概略構成を示すブロック図である。
【図１４】図10のデータセレクタの概略構成を示すブロック図である。
【図１５】図10におけるメモリから読み出される画像データを示す図である。
【図１６】従来の回転処理回路の概略構成を示すブロック図である。
【図１７】図16のメモリ構成を説明するための図である。
【図１８】図16の書き込み制御部の概略構成を示すブロック図である。
【図１９】図16の読み出し制御部の概略構成を示すブロック図である。
【図２０】図16における回転処理を説明するための図である。
【図２１】図16における回転、鏡像のモードを説明するための図である。
【符号の説明】
【００４５】
1    メモリ
2    書き込み制御部
3    読み出し制御部
4    データセレクタ
21  カウンタ
22  RSフリップフロップ
23,23’  排他的論理和
24  exchanger
25  組み合わせ回路
31  カウンタ
32  RSフリップフロップ
33,33’  排他的論理和
34  exchanger
35  組み合わせ回路
41、41’  セレクタ
42、42’  セレクタ
【図１】
2005346668.tif 000003
【図２】
2005346668.tif 000004
【図３】
2005346668.tif 000005
【図４】
2005346668.tif 000006
【図５】
2005346668.tif 000007
【図６】
2005346668.tif 000008
【図７】
2005346668.tif 000009
【図８】
2005346668.tif 000010
【図９】
2005346668.tif 000011
【図１０】
2005346668.tif 000012
【図１１】
2005346668.tif 000013
【図１２】
2005346668.tif 000014
【図１３】
2005346668.tif 000015
【図１４】
2005346668.tif 000016
【図１５】
2005346668.tif 000017
【図１６】
2005346668.tif 000018
【図１７】
2005346668.tif 000019
【図１８】
2005346668.tif 000020
【図１９】
2005346668.tif 000021
【図２０】
2005346668.tif 000022
【図２１】
2005346668.tif 000023