JP4893621B2 - 信号処理装置 - Google Patents

信号処理装置 Download PDF

Info

Publication number
JP4893621B2
JP4893621B2 JP2007516362A JP2007516362A JP4893621B2 JP 4893621 B2 JP4893621 B2 JP 4893621B2 JP 2007516362 A JP2007516362 A JP 2007516362A JP 2007516362 A JP2007516362 A JP 2007516362A JP 4893621 B2 JP4893621 B2 JP 4893621B2
Authority
JP
Japan
Prior art keywords
data
signal processing
scu
input
pixel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007516362A
Other languages
English (en)
Other versions
JPWO2006123822A1 (ja
Inventor
裕司 山口
雅敏 今井
俊治 野田
直介 浅利
知生 光永
光晴 大木
和正 伊藤
秀敏 永野
澄人 荒川
慶 伊東
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP2007516362A priority Critical patent/JP4893621B2/ja
Publication of JPWO2006123822A1 publication Critical patent/JPWO2006123822A1/ja
Application granted granted Critical
Publication of JP4893621B2 publication Critical patent/JP4893621B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Image Processing (AREA)
  • Image Input (AREA)

Description

本発明は、信号処理装置に関する。
本発明は、特に、画像処理に好適な、信号処理装置に関する。
たとえば、特開平06−4690号公報は、CCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor )等の撮像素子から入力した動画あるいは静止画の撮像情報を処理し、表示あるいは記録を行うための画像処理装置を開示している。
この画像処理装置は、例えば、撮像情報を構成する画素データを並列に演算処理することで、処理時間の短縮を図っている。
また、この画像処理装置では、メモリに対する画素データの読み出しおよび書き込み処理(メモリアクセス)と、画素データを用いた演算処理とを同じスレッドに基づいて同期して行っている。
画像処理装置の処理能力をさらに向上したいという要請がある。
同様な要請は画像処理以外の処理においてもある。
本発明の目的は、記憶手段へのアクセスを向上させて信号処理能力を向上させる信号処理装置を提供することにある。
本発明によれば、記憶部と、前記少なくとも1つの記憶部のうちいずれか所定の1つの記憶部へのデータの読み出し及び/または書き込みを制御する入出力データ制御部(SCU)と、前記入出力データ処理部が読み出したデータに対して所定の信号処理を行う信号処理部(PUアレイ或いはPU_SIMD)と、を有する信号処理装置であって、前記入出力データ制御部と、前記信号処理部とは別のスレッドに基づいて動作する信号処理装置が提供される。
本発明によれば、記憶手段へのアクセスを伴う処理において、異なるスレッドを用いることにより、画像処理能力をさらに高めることができる信号処理装置が提供できた。
図1は本発明の信号処理装置の実施形態に係わる画像処理装置の全体構成図である。 図2は図1に示す画像処理エンジンの構成図である。 図3は図2に示すプロセッサユニット(PU)アレイの構成図である。 図4は図3に示すPUの構成図である。 図5はPUアレイに割り当てる画像領域を説明するための図である。 図6は複数のプロセッサエレメント(PE)に処理を割り当てる画素データを説明するための図である。 図7はフィルタ処理における複数のPEの割り当てを説明するための第1部分図である。 図8はフィルタ処理における複数のPEの割り当てを説明するための第2分図である。 図9はフィルタ処理における複数のPEの割り当てを説明するための第3部分図である。 図10はフィルタ処理における複数のPEの割り当てを説明するための第4部分図である。 図11は図4に示すPEの構成図である。 図12は複数のPEにおいて行うフィルタ処理を説明するための第1部分図である。 図13は複数のPEにおいて行うフィルタ処理を説明するための第2部分図である。 図14は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第1部分図である。 図15は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第2部分図である。 図16は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第3部分図である。 図17は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第4部分図である。 図18は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第5部分図である。 図19は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第6部分図である。 図20は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第7部分図である。 図21は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第8部分図である。 図22は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第9部分図である。 図23は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第10部分図である。 図24は図13に示すフィルタ処理における各PEのストリームレジスタの動作を説明するための第11部分図である。 図25はPU内の共有機能ユニットを説明するための図である。 図26は図3等に示すストリーム制御ユニット(SCU: Stream Control Unit)による記憶領域の管理方法を説明するための第1部分図である。 図27は図3等に示すSCUによる記憶領域の管理方法を説明するための第2部分図である。 図28は図3等に示すSCUによる記憶領域の管理方法を説明するための第3部分図である。 図29は図3等に示すSCUによる記憶領域の管理方法を説明するための第4部分図である。 図30は図3等に示すSCUによる記憶領域の管理方法を説明するための第5部分図である。 図31は図3等に示すSCUによる記憶領域の管理方法を説明するための第6部分図である。 図32は図3等に示すSCUによる記憶領域の管理方法を説明するための第7部分図である。 図33は図3等に示すSCUによる記憶領域の管理方法を説明するための第8部分図である。 図34は図3等に示すSCUによるコマンド「set_BR_lof4x4_sam」の実行処理を説明するための図である。 図35は図3等に示すSCUによるコマンド「set_bxy」の実行処理を説明するための図である。 図36は図3等に示すSCUによるコマンド「set_BR_8x1#to#bxy」の実行処理を説明するための図である。 図37は図3等に示すSCUによるコマンド「set_BR4567#lof4x4」の実行処理を説明するための図である。 図38は図3等に示すSCUによるコマンド「set_in#buf#straight」の実行処理を説明するための図である。 図39は図3等に示すSCUによるコマンド「set_in#buf#with#BR#2x1」の実行処理を説明するための図である。 図40は図3等に示すSCUによるコマンド「set_in#buf#with#BR#4x1」の実行処理を説明するための図である。 図41は図3等に示すSCUによるコマンド「set_BR#16x1」の実行処理を説明するための図である。 図42は図3等に示すSCUによるコマンド「set_BR#32x1」の実行処理を説明するための図である。 図43は図3等に示すSCUによるコマンド「set_BR#64x1」の実行処理を説明するための図である。 図44は図3等に示すSCUによるコマンド「set_BR#64x2」の実行処理を説明するための図である。 図45は図3等に示すSCUによるコマンド「set_BR#64x2x2」の実行処理を説明するための図である。 図46は図3等に示すSCUによるコマンド「set_BR#64x3」の実行処理を説明するための図である。 図47は図3等に示すSCUによるコマンド「set_BR#64x3x3」の実行処理を説明するための図である。 図48は図3等に示すSCUによるコマンド「set_BR#64x4」の実行処理を説明するための図である。 図49は図3等に示すSCUによるコマンド「set_BR#64x4x4」の実行処理を説明するための図である。 図50は図3等に示すSCUによるコマンド「set_BR#64x9」の実行処理を説明するための図である。 図51は図3等に示すSCUによるコマンド「set_BR#64x9x3」の実行処理を説明するための図である。 図52は図3等に示すSCUによる記憶領域の管理方法を説明するための図である。 図53は図3等に示すSCUによる記憶領域の管理方法を説明するための図である。 図54は図3等に示すSCUによる記憶領域の管理方法を説明するための図である。 図55は図3等に示すSCUによるコマンド「set#DR#mask#64x1」の実行処理を説明するための図である。 図56は図3等に示すSCUによるコマンド「set#DR#packed#64x1」の実行処理を説明するための図である。 図57は図3等に示すSCUによるコマンド「set#DR#64x1」の実行処理を説明するための図である。 図58は図3等に示すSCUによるコマンド「set#DR#128x1」の実行処理を説明するための図である。 図59は図3等に示すSCUによるコマンド「set#DR#192x1」の実行処理を説明するための図である。 図60は図3等に示すSCUによるコマンド「set#DR#256x1」の実行処理を説明するための図である。 図61はSCUが実行するコマンド「exec」を説明するための図である。 図62はSCUが実行するコマンド「Branch」を説明するための図である。 図63はSCUが実行するコマンド「set」を説明するための図である。 図64はSCUが実行するコマンド「addition」を説明するための図である。 図65はSCUが実行する特殊コマンド、並びにパラメータを説明するための図である。 図66はSCUと、プロセッサユニットとの処理の関係を説明するための図である。 図67はSCUにおけるコマンドおよびデータのキュー処理を説明するための図である。 図68は図2に示す画像処理エンジンのその他の構成図である。 図69は、第2実施形態の画像処理エンジン102の全体構成図である。 図70は、図69に示すPUアレイ202_0の構成図である。 図71は、第2実施形態におけるPEnの構成図である。 図72は、SCU#10の構造を示すブロック図である。 図73は、第2実施形態において、ストリーム制御ユニット(SCU: Stream Control Unit)による記憶領域の管理方法を説明するための部分図である。 図74は、SCU#10内部に設定される多重矩形画像領域に関する処理を行う機能を説明するための図である。 図75は、第2実施形態における記憶領域内の矩形画像領域WIR内の矩形画像領域BRの規定方法の一例を示す図である。 図76は、第2実施形態における記憶領域内の矩形画像領域WOR内の矩形画像領域DRの規定方法を一例を示す図である。
符号の説明
100…画像処理装置、101…ホストプロセッサ、102…画像処理エンジン、103…コーデックエンジン、104…メモリI/F、105…メモリシステム、106…センサI/F、107…カメラモジュール、108…記録媒体I/F、109…記録媒体、110…内蔵表示装置I/F、111…内蔵表示装置、112…ビデオI/F、201…制御プロセッサ、202_0〜3…プロセッサユニット(PU)アレイ、203_0〜3…SCU、204_0〜3…ローカルメモリ、PU…プロセッサユニット、401…入力ラインバッファ、403…共有機能ユニット、404…出力ラインバッファ、PE…プロセッサエレメント、SR0〜2…ストリームレジスタ、ALU…演算論理ユニット
<第1実施形態>
以下、本発明の信号処理装置の実施の形態について、画像データの処理を例示して述べる。
先ず、本実施形態の構成要素と、本発明の構成要素との対応関係を説明する。
図2等に示すストリーム制御ユニット(SCU:Stream Control Unit) 203_0〜3が本発明の入出力データ制御部の一例である。
図3等に示すプロセッサユニットPUが本発明の信号処理回路の一例である。
図4等に示すPEが本発明の信号処理エレメントの一例である。
図1に示すホストプロセッサ101が本発明のホスト処理回路の一例である。
図1等に示すメモリシステム105あるいは図2等に示すローカルメモリ204_0〜3が本発明の記憶部の一例である。
本発明の記録媒体は、半導体メモリ、磁気ディスク、光ディスク、光磁気ディスクなどの任意の記録媒体を適用することができる。
図1は、本発明の信号処理装置の1実施形態に係わる画像処理装置100の全体構成図である。
画像処理装置100は、例えば、ホストプロセッサ(Host CPU)101、画像処理エンジン102、コーデック(CODEC)エンジン103、メモリインターフェース(I/F)104、メモリシステム105、センサI/F106、カメラモジュール107、記憶媒体I/F108、記憶媒体109、内蔵表示装置I/F110、内蔵表示装置111、並びにビデオI/F112を有する。
画像処理装置100は、ホストプロセッサ101による画像処理エンジン102内の処理のスレッドの制御に特徴を有している。
[ホストプロセッサ101]
ホストプロセッサ101は、画像処理装置100全体を制御するプロセッサであって、例えば、実時間オペレーティングシステム(OS)を動作させ、画像処理装置100で実行される各種タスクのスケジューリング、記憶媒体109を用いたファイルシステムの実現、データ入出力制御などを行う。
[画像処理エンジン102]
画像処理エンジン102は、プログラマブルな画像プロセッサであって、画像処理装置100で実行されるアプリケーションプログラムに応じてホストプロセッサ101が指示する画像処理を実行する。
画像処理の対象となる画像データとしては、センサI/F106を介して入力されるカメラモジュール107で撮影されたデータ、メモリI/F104を介して入力されるメモリシステム105に格納されたデータ、記憶媒体I/F108を介して入力される記憶媒体109に格納されたデータ、あるいはコーデックエンジン103から与えられるデータ、コーデックエンジン103で処理されたデータがある。
画像処理エンジン102は、自らの処理結果を、メモリI/F104を介してメモリシステム105に格納し、記憶媒体I/F108を介して記憶媒体109に格納し、コーデックエンジン103に出力し、内蔵表示装置I/F110を介して内蔵表示装置111に表示し、あるいはビデオI/F112を介して外部の装置に出力する。
[コーデックエンジン103]
コーデックエンジン103は、画像および/または音声の圧縮伸長を行うユニットであり、例えばMPEG(Motion Picture Experts Group)−2,MPEG−4,H.264などの動画像用コーデックや、JPEG(Joint Photographic Coding Experts Group)やJPEG2000といった主に静止画に用いられるコーデックなどを実現する。
[メモリシステム105]
メモリシステム105は、ホストプロセッサ101、画像処理エンジン102、コーデックエンジン103で処理されるデータ、およびホストプロセッサ101、画像処理エンジン102、コーデックエンジン103で実行されるプログラムPRGを格納するメモリであり、例えばDRAMを用いる。
メモリI/F104は、上記メモリシステム105とシステムバス113を結ぶインターフェースである。
[カメラモジュール107]
カメラモジュール107は、レンズ、絞り、シャッターなどの光学系装置、CCDイメージセンサあるいはCMOSイメージセンサなどの撮像素子、それらを制御するコントロールユニットを含む装置である。
カメラモジュール107は、その撮像結果をデジタル信号に変換された後、センサI/F106を介して、画像処理エンジン102、または、メモリシステム105に出力する。
ホストプロセッサ101あるいは画像処理エンジン102は、センサI/F106を介して、カメラモジュール107に対して制御信号を出力する。
[記録媒体109]
記憶媒体109は、例えばハードディスク、フラッシュメモリなどの不揮発性メモリ、DVD(Digital Versatile Disk)などの光ディスク、あるいはテープ型の記憶媒体であって、記憶媒体I/F108を介して読み出し書き込みが行われる。
[内蔵表示装置111]
内蔵表示装置111は、カメラモジュール107で撮像された画像を画像処理エンジン102で処理した結果、あるいは記憶媒体109に格納されている画像データを表示する。
内蔵表示装置111は、内蔵表示装置I/F110を介して入力した画像データに応じた画像を表示する。
[ビデオインターフェース112]
ビデオI/F112は、外部の画像表示装置や画像記録装置に対して画像データを供給するためのインターフェースである。
[画像処理エンジン102]
図2は、図1に示す画像処理エンジン102の構成図である。
画像処理エンジン102は、制御プロセッサ(CPU)201、PU(プロセッサ・ユニット) アレイ202_0〜202_3、ストリーム制御ユニット(SCU:Stream Control Unit) 203_0〜203_3、並びにローカルメモリ204_0〜204_3を有する。
画像処理エンジン102では、SCU203_0〜3と、PUアレイ202_0〜202_3内のPEとが異なるスレッドで動作する。
制御プロセッサ201は、画像処理エンジン102全体を制御するプロセッサであって、PUアレイ202_0〜202_3およびSCU203_0〜203_3に対する設定や起動、およびSIMD(Single Instruction Multiple Data)型プロセッサアレイであるPUアレイ202での並列化が困難な処理の実行を担う。
PUアレイ202_0〜202_3は、プログラマブルな演算部であって、後述するように複数のSIMD型プロセッサアレイから構成される。
SCU203_0〜203_3は、PUアレイ202_0〜202_3が必要とするデータを内部バスを介してメモリシステム105から読み出す場合、あるいはPUアレイ202_0〜202_3が処理した結果を内部バスを介してメモリシステム105に書き込む場合のデータ入出力を制御する。
ローカルメモリ204_0〜204_3は、画像処理エンジン102のワーキングメモリであって、メモリシステム105に格納された画像データの一部の保持、それぞれPUアレイ202_0〜202_3で処理された中間結果の格納、それぞれPUアレイ202_0〜202_3で実行されるプログラムや各種パラメータの格納などを行う。
画像処理エンジン102は、ホストプロセッサ101の制御により、例えば、図2に示すPUアレイ202_0〜202_3を共通のスレッドで動作させる。
共通のスレッドとは、例えば、共通のプログラムに基づいて処理を進めることを意味する。
ホストプロセッサ101の制御により、SCU203_0〜203_3は、PUアレイ202_0〜202_3とは別のスレッドで動作させる。
[PUアレイ202_0〜202_3]
PUアレイ202_0について説明する。
PUアレイ202_1〜202_3は、PUアレイ202_0と同様の構成を有している。
図3は、図2に示すPUアレイ202_0の構成図である。
PUアレイ202_0は、4つのPU_SIMD(Single Instruction Multiple Data)処理回路#0〜#3を有する。
PU_SIMD処理回路#0〜#3は、SCU(Stream Control Unit)203_0に対して並列に接続されている。
PU_SIMD処理回路#0は、コントロールユニット303_0と、4つのプロセッサユニットPU#00〜#03を有する。
4つのプロセッサユニットPU#00〜#03は、同一命令で動作するSIMD型プロセッサを構成する。
4つのプロセッサユニットPU#00〜#03は、一次元状に横接続されている。
プロセッサユニットPU#00〜#03間の接続を隣接するプロセッサユニット間に限定するとともに、SCU203_0からのデータ供給に用いるI_BUS0を4つのプロセッサユニットで共有することで、配線を少なく出来るとともに、バス制御を簡単にできる。
プロセッサユニットPU#00〜#03は、シリアルに接続したことで、隣接画素データを頻繁に使用する画像処理において、SCU203_0を介さずに画素データを直接的に、隣接するプロセッサユニットに出力でき、処理時間を短縮できる。
PU_SIMD処理回路#1〜#3は、PU_SIMD処理回路#0と同様の構成を有している。
[プロセッサユニットPU#00]
図4は図3に示すプロセッサユニットPU#00の構成図である。
プロセッサユニットPU#00は、例えば、入力ラインバッファ(In Line Buffer)401、複数個のプロセッサエレメントPE0〜15、PE間で共有する共用機能ユニット(Shared Function Unit)403、出力ラインバッファ404を有する。
図4に示す入力ラインバッファ401は、図3に示す入力データバスI_BUS0に接続されている。
出力ラインバッファ404は、34に示す出力データバスO_BUS0に接続されている。
共有機能ユニット403およびPE0〜15は、入力ラインバッファ401と出力ラインバッファ404との間に並列に接続されている。
PE0〜15は、図中左右に隣接するPE間で接続を有し、隣接するPE間でデータの受け渡しを行うことができる。
図3および図4で示した例では、一つのプロセッサユニットPUあたり16個のプロセッサエレメントPEを有し、一つのPU_SIMD処理回路あたり4個のプロセッサユニットPUを有するので、合計64個のPEでPUアレイ202_0〜202_3の各々が構成されている。
図3に示すように、プロセッサユニットPU間は、図4におけるプロセッサエレメントPE間と同様の接続を有する。
すなわち、あるプロセッサユニットPUにおける右端のPE15は、その右側のプロセッシングユニットにおける左端のPE0と接続する。
具体的には、図3に示すプロセッサユニットPU#01の図4に示すPE15は、図3に示すプロセッサユニットPU#02の図4に示すPE0と接続されている。
図4に示すように、プロセッサエレメントPE0〜15が、隣接する両側のPE間でのみ直接データ入出力をできるように構成したことで、配線構造を非常に簡単にできる。また、隣接するPE0〜15間で画素データを入出力して共用することで、記憶領域へのアクセス回数を低減することができる。
SCU(Stream Control Unit)203_0から入力データバスI_BUS0を介してプロセッサユニットPU#00に入力したデータは、PU#00内の入力ラインバッファ401に書き込まれる。
プロセッサエレメントPE0〜15の各々は、入力ラインバッファ401から読み出したデータを用いて演算を行い、その演算結果を出力ラインバッファ404に書き込む。
SCU203_0は、出力ラインバッファ404から演算結果を読み出す。
図3に示すように、PUアレイ202_0は、4つのPU_SIMD処理回路#0〜#3を独立して並列に動作させることも、直列動作させることもできる。当該動作制御は、SCU203_0が、入力データバスI_BUS0〜3および出力データバスO_BUS0〜3を切り換えることで実現される。
図3に示すコントロールユニット303_0は、図示されない命令格納用メモリを有し、当該命令格納用メモリから読み出した命令をデコードして得た制御信号を、PU_SIMD#0内の全てのPEに出力する。
コントロールユニット303_0内には、ここには図示されないプログラムフロー制御用ループレジスタや、後述するPE内のストリームレジスタにアクセスするためのポインタレジスタが含まれる。
ループレジスタは、プログラム中のループ回数を制御するレジスタであり、制御プロセッサ201が設定するか、あるいはプログラム実行時に命令により設定することができる。
命令によりループレジスタを設定する場合に、PE内のレジスタ値をソースオペランドとして指定することができる。その際には複数のPEのうち、予め決められたPE、例えば図中左端のPE、例えば、プロセッサユニットPU#00のPE0、のレジスタ値を使用する。
ポインタレジスタについても、PE内のレジスタ値をソースオペランドとして指定することができるが、ループレジスタの場合と同様特定のPEのレジスタ値を使用する。
コントロールユニット303_1から303_3についても同様である。
カメラモジュール107を用いて撮像された静止画像を記録する場合を例に取り上げ、画像処理装置100における処理手順ならびに処理分配を説明する。
カメラモジュール107内の撮像素子で撮影されたデータは、水平スキャンラインごとにセンサI/F106を介して読み出され、画像処理エンジン102に出力されると共に、メモリシステム105に格納される。この際、画像処理エンジン102では、検波処理の一部が実行される。
メモリシステム105に1フレーム分の画像データが格納されると、画像処理エンジン102は、内部のPU_SIMD処理回路を効率よく並列動作させるため、1フレーム分の画像データのうち、必要な矩形画像領域を読み出しながら検波処理の残りや各種カメラ信号処理、ならびに各種画像処理を実行する。
画像処理エンジン102の処理結果は、メモリシステム105に格納される。
画像処理エンジン102は、解像度変換も行う。解像度変換された画像データは、内蔵表示装置I/F110を介して内蔵表示装置111に表示される。
コーデックエンジン103は、メモリシステム105に格納されている画像処理エンジン102により処理された複数フレームの画像データを用いて画像圧縮を行う。圧縮された画像データは、記憶媒体I/F108を介して記憶媒体109に記録される。
画像処理エンジン102は、複数個のPUアレイ202_0〜202_3で構成されるが、ぞれぞれのPUアレイ202_0〜202_3は、フレーム内の異なる領域を処理する。
本実施形態のように4つのPUアレイ202_0〜202_3で構成する場合、例えば図5に示すように各PUアレイ202_0〜202_3に領域を割り当てることができる。
PUアレイ202_0〜202_3の各々は、前述したように64個のPEから成るPU SIMD処理回路を複数個有し、例えば図6に示すように、各PUアレイ202_0〜202_3に割り当てた領域を、さらに横64ピクセル幅の矩形画像領域に分割し、各ピクセルを1つのPEに割り当てることができる。
この時、各PEは、図7に示すように、自らの割り当てられた縦方向のピクセル列を順に処理する。
例えば、PUアレイ202_0が図8に示すように、5×5画素のフィルタ処理を行う場合を考える。
この時、PUアレイ202_0内の各PEは、図8に示すように、処理対象の画素位置Pixelの画素データのフィルタ処理を行うために、画素位置Pixelを中心とした5×5の画素位置の画素データを用いる。
PUアレイ202_0内の各PEは、図8に示す矢印(図中下向き)に順に処理対象の画素位置を移動させる。
PUアレイ202_0内の各PEが画素位置Pixelの上記5×5画素のフィルタ処理を終了すると、SCU203_0は、図9に示すように、次の1ライン分の画素位置の画素データをローカルメモリ204_0あるいはメモリシステム105から読み出して図4に示すPUアレイ202_0内のプロセッサユニットPUの入力ラインバッファ401に書き込む。
そして、PUアレイ202_0内の各PEは、図10に示すように、次の画素位置Pixel_nextの画素データの5×5画素のフィルタ処理を行う。
図3に示すPU_SIMD#0を中心に説明したが、PU_SIMD#1〜#3はPU_SIMD#0と同様である。
PUアレイ202_1〜202_3は、PUアレイ202_0と同様である。
[プロセッサエレメントPE]
図4に示すPEn(n=1〜14)を説明する。
なお、PE0はPE間ではPE1との間でのみデータ入出力を行い、PE15はPE14との間でのみデータ入出力を行う点を除いてPEnと同一である。
図11は、図4に示すPEnの構成図である。
PEnは、マルチプレクサMUX1000〜1005、ストリームレジスタSR0,SR1,SR2、レジスタin0,in1などの各種レジスタ、演算論理ユニットALUを有する。
PEnは、入力ラインバッファ401からストリームレジスタSR0,SR1,SR2にデータ、または、制御フラグが転送され、ストリームレジスタSR0,SR1,SR2から演算論理ユニット用レジスタ群の一部にデータ、または、制御フラグが取り込まれる。
演算論理ユニットALUでは、演算論理ユニット用レジスタ群を一時格納先として用いながら演算が行なわれ、演算結果は出力ラインバッファ404に書き込まれる。これらの一連の動作は、内容が個別に定められた命令の同時、あるいは、順次実行により行われる。
入力ラインバッファ401には、データ用と制御フラグ用があり、それぞれ1つのPEあたり16ビットと4ビットである。
出力ラインバッファ404にも、入力ラインバッファ401と同じく、データ用と制御フラグ用があり、それぞれ1つのPEあたり16ビットと4ビットである。
ストリームレジスタSR0,SR1,SR2のエントリ数は、それぞれ16である。
ストリームレジスタSR0,SR1のデータ長は16ビットであり、ストリームレジスタSR2のデータ長は4ビットである。
ここで、ストリームレジスタSR2が4ビットであるのは、ストリームレジスタSR2が主に制御フラグの格納に用いられるためであり、演算論理ユニット用レジスタ群のcondレジスタのデータ長と同じである。
ストリームレジスタSR0,SR1,SR2は、主にSCU203_0から入力ラインバッファ401を通して供給される演算に必要なデータの格納や、演算結果の一時待避を行う際に使用され、直接参照の他にポインタによる参照が可能である。
なお、各ストリームレジスタSR0,SR1,SR2毎に最大4つのポインタを定義可能であり、各ポインタは、ポインタ定義領域の始点を示すStart値、ポインタ定義領域の終点を示すEnd値、現在のポインタ位置を示すCurrent値の3つの値を有する。
ポインタの操作については、下記(1)〜(5)に示すようなポインタ操作を実現する命令がある。
(1)前述の4つのポインタ中から選択した1つのポインタが持つ3つの値から選択した1つの値を即値で書き換える命令。
(2)前述の4つのポインタ中から選択した1つのポインタが持つ3つの値から選択した1つの値をPE0内の一時退避用レジスタtemp0〜3、tempsの任意の1つの値で書き換える命令。ただし、指定した値が反映されるには所定のレイテンシがかかる。
(3)前述の4つのポインタ中から選択した1つのポインタが持つCurrent値に正負の即値を加算して書き換える命令。
(4)前述の4つのポインタ中から選択した1つのポインタが持つCurrent値を同じポインタのStart値に書き換える命令。
(5)前述の4つのポインタ中から選択した1つのポインタが持つ3つの値から選択した1つの値を読み出し、その値でPU_SIMD内の全PEにおいて一時退避用レジスタtemp0〜3、tempsの任意の1つを書き換える命令。
以上のような構成によるストリームレジスタSR0,SR1,SR2は、例えば、2種類のポインタを用い、第1のポインタをライト(WRite)ポインタ、第2のポインタをリード(read)ポインタとし、データの書き込みとライトポインタのインクリメントを繰り返し、書き込みが済んだエントリのデータの読み出しとリードポインタのインクリメントを繰り返すことにより、ストリームレジスタをFIFO(First-In First-Out)として使用可能である。
ストリームレジスタSR0,SR1,SR2のエントリ数は16であるが、3本あるストリームレジスタのうち、ストリームレジスタSR0とSR1とを連結し、32エントリのストリームレジスタとして使用することもできるが、連結モード時には、32エントリのストリームレジスタSR0として動作するため、ストリームレジスタSR0のポインタのみ使用可能で、ストリームレジスタSR1は参照できない。
通常モードと連結モードは、すべての命令の実行前に所定の方法により設定し、命令の順次実行中には変更できない。
ストリームレジスタSR0,SR1,SR2の参照やポインタ操作を行った際に、[Start, End]で定義される領域、または、[0, EN−1]の領域を超えることがある。ここで、ENは、ストリームレジスタSR0,SR1,SR2のエントリ数(通常モード時16、連結モード時32)とする。この場合には、ポインタの値が存在するエントリになるように以下のような回り込み処理が行われる。
ストリームレジスタSR0,SR1,SR2のエントリへの回り込み処理前と後のindexをそれぞれidx、idxwとする。なお、2種類の回り込み処理の方式は、ストリームレジスタ参照命令に付加して指定する。
[Start, End]で定義される領域で回り込み処理する場合
if(idx > End) idxw = Start+ (idx−End−1) % (End−Start+1);
else if (idx < Start) idxw =End − (Start−idx−1) % (End−Start+1);
else idxw = idx;
[0, EN−1]の領域で回り込み処理する場合
if(idx≧ EN) idxw = idx % EN;
else if (idx≦ 0) idxw = (EN×(1−idx/EN) + idx) % EN;
else idxw = idx;
演算論理ユニット用レジスタ群に属するレジスタは、PE0において行われる演算のソースオペランド、あるいは、デスティネーションオペランドに指定可能なレジスタである。図11のレジスタin0、in1、temp0〜3、 temps、acc.H/L、cond、penum、constがそれにあたる。
レジスタin0およびin1、はデータ長が16ビットの入力レジスタであり、ストリームレジスタから読み出した内容を格納する。算術論理演算命令のソースオペランドとして指定できるが、デスティネーションオペランドには指定できない。
レジスタtemp0〜3ならびにtempsはデータ長が16ビットの一時退避用レジスタである。
このうち、レジスタtempsは、後述する共有機能ユニット403を利用する際に用いられるレジスタであり、共有機能ユニット403へのアクセス以外の場合では、レジスタtemp0〜3と全く同様にワーキングレジスタとして使用できる。これらのレジスタは、算術論理演算命令のソースオペランドとデスティネーションオペランドの両方に指定できる。
レジスタacc.H/Lは主に累積加算命令で用いられ、データ長が合わせて32ビットの累積加算用レジスタであり、算術論理演算命令のソースオペランドとデスティネーションオペランドの両方に指定できる。32ビットのうち、上位16ビットをレジスタacc.Hとし、下位16ビットをレジスタacc.Lとし、ソースオペランドとして用いる際に上位か下位かの指定を行う。
レジスタcondは、主に条件実行を行う際に用いられるデータ長が4ビットのコンディションレジスタである。算術論理演算のデスティネーションオペランドとして指定可能で、その際には、演算結果のうちの任意の1ビット、演算論理ユニットALUにおける演算の結果、キャリーが立った事を示すキャリーフラグ、あるいは演算結果が0であることを示すゼロフラグのどれかの選択とコンディションレジスタのどのビットに反映させるかを指定する。
レジスタpenumは、自身のプロセッシングエレメント番号(0〜63)が格納されているデータ長が6ビットのプロセッサ番号レジスタであり、読み出し専用である。
レジスタconstは、定数値を格納するデータ長が16ビットの定数レジスタであり、エントリ数は64である。定数レジスタは、各プロセッシングエレメント毎に持つわけではなく、共有機能ユニット403内に持つ。
PU_SIMD処理回路内の全PE共通で1つのエントリを指定して使用するが、算術論理演算のソースオペランドとして直接指定可能なので、演算論理ユニット用レジスタ群に含めている。
演算論理ユニット用レジスタ群の中には、隣接PEから参照可能なレジスタも用意されている。PU_SIMD処理回路内のn番目のPE#nに注目する。
この場合、当該PE#nは、演算を行う際、当該PE#n内のレジスタだけでなく、隣接PE#n−1,#n+1のレジスタin0、in1、acc.H、acc.Lを参照可能である。
PE#nのレジスタcond、acc.H、acc.L、並びに隣接PE#n−1,#n+1のレジスタin0、in1、acc.H、acc.Lについては、その値をPE#nのストリームレジスタSR0,SR1,SR2に書き戻すことができる。
PE#nにおいては、演算論理ユニットALUにおける演算効率を高めるために、演算論理ユニットALUにおける演算処理と複数のレジスタへのロード、または、ストアが同時に実行可能となっている。
同時実行可能なオペレーションは下記のA〜Jである。なお、A〜Iについては、命令の条件実行が可能である。命令の条件実行とは、主に制御フラグが格納されているレジスタcondの任意のビットを指定し、その値が1の時に命令を実行し、0の時に命令を実行しないという動作である。
A:ストリームレジスタSR0への書き込み
B:ストリームレジスタSR1への書き込み
C:ストリームレジスタSR2への書き込み
D:レジスタin0の書き込み
E:レジスタin1への書き込み
F:ストリームレジスタSR2からレジスタcondへの書き込み
G:共有機能ユニット403へのファンクション呼び出し
H:出力ラインバッファ404への書き込み
I:算術論理演算
J:フロー制御命令
PE#n内の演算論理ユニットALUで実行可能な算術論理演算を下記表1に示す。逆数は後述の共有機能ユニット403のルックアップテーブル機能を用いて実現する。
表1中、ビット番号命令とは、ソースの16ビットの最上位ビットから数えて最初に1が現れたビット番号を返す命令である。
Figure 0004893621
以下、5x3画素データのフィルタ処理を例に、プロセッサユニットPUおよびPEの動作例を、図11に示すストリームレジスタSR0,SR1に着目して説明する。
図12に示すように、各PEは縦の画素データ列を担当し、近傍の画素データに対して重み付け加算を行った結果をローカルメモリ204あるいはメモリシステム105に書き戻す。
例えば5x3のフィルタ処理を行う場合、図13に示すように、801の領域にある画素データ00、01、02、10、11、12、20、21、22、30、31、32、40、41、42の15個の画素データに対して重み付け加算を行い、802の位置の画素データを算出する。
以下、隣接するPE間でどのようにデータの受け渡しが行われるか図を用いて説明する。以下で用いる図は、データの受け渡しに注目するため模式的に示している。
図13に示す802の位置の画素データを含む縦の画素データ列を担当するPEがPE#nだとすると、図14に示すように、画素データ20、21、22の縦3画素データがPE#nのストリームレジスタSR0保持され、画素データ10、11、12は隣接するプロセッサエレメントPE #(n-1)、画素データ00、01、02はさらにその隣のプロセッサエレメントPE #(n-2)のストリームレジスタSR0に保持されている。
同様に、画素データ30、31、32はPE #(n+1)、画素データ40、41、42はPE #(n+2)のストリームレジスタSR0保持されている。
本実施形態では、ストリームレジスタごとに最大4つのポインタを定義可能である。ただし、PU_SIMD処理回路#0〜#3内の全PEに共通であり、コントロールユニット303_0内に含まれる。以下の例では、ストリームレジスタSR0、SR1それぞれ一つのポインタをリードポインタ、一つのポインタをライトポインタとして定義し、ストリームレジスタをFIFOとして利用している。図では、リードポインタの位置が最下段になるように模式的に示している。
本実施例では、レジスタin0にはストリームレジスタSR0,SR1の両方からデータのロードが可能である。同様にレジスタin1にもストリームレジスタSR0、SR1の両方からデータのロードが可能である。一方、ストリームレジスタSR0,SR1,SR2には、隣接するPEのレジスタin0,in1,acc.H/Lからのデータを書き込むことができるが、レジスタin0はストリームレジスタSR0、レジスタin1はストリームレジスタSR1にのみ書き込むことができる。しかし、回路規模は増えるが両方から書き込み可能としてもよい。
第1のサイクルでは、図15に示すように、ストリームレジスタSR0におけるリードポインタのCurrent値にある画素データがレジスタin1に書き込まれる。すなわち、PE #nの場合には、画素データ20がレジスタin1書き込まれる。演算論理ユニットALUでは、レジスタin1に書き込まれた画素データ値をソースオペランドとして読み出し、係数を乗算する。演算に必要な係数は、定数レジスタであるレジスタconstに格納されている。
ストリームレジスタSR0,SR1,SR2にアクセスする場合、ポインタレジスタのCurrent値の位置だけでなくCurrent置からのオフセットを指定してアクセスすることができる。第2のサイクルでは、図16に示すように、ストリームレジスタSR0におけるリードポインタのCurrent値にオフセット1を加えた位置にある画素データがレジスタin1に書き込まれる。すなわち、PE #nの場合には、画素データ21がレジスタin1に書き込まれる。演算論理ユニットALUでは、in1(1102)に書き込まれた画素データ値をソースオペランドとして読み出し、係数を乗算する。また、前サイクルでレジスタin1に格納された画素データは、右隣りのPEのストリームレジスタSR1に書き込まれる。
以後同様の動作を続けることにより、図17に示す状態となる。この時点で、自身のストリームレジスタSR0に格納している縦3画素データ分の処理が完了する。
さらに次サイクル以降は、図18に示すように、ストリームレジスタSR1に格納された画素データを順次処理していく。この際、ストリームレジスタSR1からの読み出し時に、リードポインタをインクリメントする。
以降同様の動作を続けることにより、図19に示す状態となる。この時点で、もともと左隣のプロセッサエレメント(PE)402が持つストリームレジスタSR0に格納されていた縦3画素データ分の処理が完了する。
次サイクル以降も同様の動作を繰り返すが、先に述べたように、ストリームレジスタSR1には、レジスタin0から書き込むことができない。従って、ストリームレジスタSR1に格納された画素データの処理を行いながら、ストリームレジスタSR0に格納された自身の画素データを左隣のPEが持つストリームレジスタSR1に渡していくため、図20に示すように、ストリームレジスタSR0の画素データをレジスタin1に、ストリームレジスタSR1の画素データをレジスタin0に書き込む。この際、ストリームレジスタSR0とSR1の両方のリードポインタをインクリメントする。演算論理ユニットALUでは、レジスタin0に書き込まれた画素データ値をソースオペランドとして読み出し、係数を乗算する。
以降同様の動作を続けることにより、図21に示す状態となる。この時点で、二つ左隣縦3画素データ分の処理が完了する。また、ストリームレジスタSR1には、右隣のPEが持つストリームレジスタSR0に格納されていた画素データが格納されている。
以降は、図22に示すように、再びストリームレジスタSR1からレジスタin1への書き込み、レジスタin1に書き込まれた画素データ値と係数の乗算、レジスタin1から左隣のPEが持つストリームレジスタSR1への書き込みを並行して行っていく。
以降同様の動作を続けることにより、図23に示す状態となる。この時点で、図13の801で示した5x3の領域に含まれる画素データのフィルタ処理が完了する。また、この時点までに、入力ラインバッファ401には、SCU203_0から次のラインの画素データデータが書き込まれている。
最後に、入力ラインバッファ401からストリームレジスタSR0に次ラインの画素データをロードするとともに、フィルタ処理の結果を出力ラインバッファ404に書き込む。SCU203_0は、出力ラインバッファ404に書き込まれた演算結果を読み出し、ローカルメモリ204あるいはメモリシステム105に書き戻す。
以上のように、本実施形態によれば、演算論理ユニットALUの演算処理と並行して、ストリームレジスタSR0,SR1を用いた隣接PE間のデータの受け渡しを効率よく行うことができ、演算論理ユニットALUに対して間断なくデータを供給することが可能であり、かつ隣接PE間でデータを共用することにより、ローカルメモリ204_0からの読み出し頻度を低減している。
[共有機能ユニット403]
図4を参照して説明したように、プロセッサユニットPU#00は、共有機能ユニット403を有する。
共有機能ユニット403は、図4に示すPE#0〜15の図11に示す演算論理ユニットALUで実行可能な演算命令以外の演算のために用いられる。
プロセッサエレメントPE#0〜15は、共有機能ユニット403を利用するために、ファンクション呼び出し命令を使用する。その際、PE#0〜15は、後述の利用可能な機能との対応を予め定めた機能識別番号を命令に付加して指定した要求を共有機能ユニット403に出力する。
PE#0〜15は、ソースオペランドに指定するレジスタに必要なデータをセットしてファンクション呼び出し命令を実行すると、所定のレイテンシ後に結果がレジスタtempsに返される。なお、ソースオペランドに指定したレジスタは、参照結果が書き戻されるまで書き換え不可である。
共有機能ユニット403が利用可能な機能を以下に示す。
共有機能ユニット403は、例えば、図25に示すように、ルックアップテーブル1202、加算演算器1203、最大最小値演算器1204およびベクタ演算ユニット1205などの機能を有する。
ルックアップテーブル1202は、複数のプロセッサエレメント(PE)間で共用し、エントリ数に依存してレイテンシが可変な機能である。
加算演算器1203は、複数のPEからのデータを入力とし、データ数に依存してレイテンシが可変な機能である。
最大最小値演算器1204は、複数のPEからのデータを入力とし、データ数に依存してレイテンシが可変な機能である。
ベクタ演算ユニット1205は、次元に依存してレイテンシが可変な機能である。
共有機能ユニット403のルックアップテーブル1202としての機能を説明する。
ルックアップテーブル1202は1024エントリの単一テーブルとしての利用だけでなく、512エントリや256エントリなど、エントリ数を変えて使用することができる。
また、ルックアップテーブル1202は、1種類だけではなく、複数の種類のテーブルを保持することもできる。例えば、ルックアップテーブル1202は、逆数テーブルと対数テーブルを1024エントリ中の異なる領域に格納することができる。
ルックアップテーブル1202は、16個のPEで共有しているので、1024エントリを単一テーブルとして使用した場合には、参照に要するサイクル数は16となる。
これに1サイクルのアクセス遅延を加えた17が1024エントリのルックアップテーブル1202のレイテンシである。
エントリ数を少なくし、同一種類のテーブルを複数個格納した場合には、1個のテーブルを共有するPEの数が減る為、参照に要するサイクル数も減少する。例えば、256エントリのテーブルとした場合には、4個ずつのPEで共有することになる為、参照に要するサイクル数は4、レイテンシは5となる。なお、ルックアップテーブル1202の構成は、共有機能ユニット403がプログラム実行前に設定する。
共有機能ユニット403の加算演算器1203としての機能について説明する。
加算演算器1203は、複数個のPEからデータを入力すると、そのデータの合計値を所定のレイテンシ後にデータを出力したPEに出力する。
共有機能ユニット403に1つの加算演算器1203があり、これを16個のPEで共有する場合は、演算に要するサイクル数は16となる。これに1サイクルのアクセス遅延を加えた17が加算演算器1203のレイテンシである。
共有機能ユニット403に2つの加算演算器1203があり、それぞれを8個のPEで共有する場合は、演算に要するサイクル数は8である。これに1サイクルのアクセス遅延を加えた9が加算演算器1203のレイテンシである。なお、複数の加算演算器1203の構成は、共有機能ユニット403がプログラム実行前に設定する。
共有機能ユニット403の最大最小値演算器1204としての機能について説明する。
最大最小値演算器1204は、複数個のPEからデータを入力すると、それらのデータの最大値、最小値が所定のレイテンシ後に、データを出力したPEに出力される。
共有機能ユニット403に1つの最大最小値演算器1204があり、これを16個のPEで共有する場合は、演算に要するサイクル数は16となる。これに1サイクルのアクセス遅延を加えた17が最大最小値演算器1204のレイテンシである。
共有機能ユニット403に2つの最大最小値演算器1204があり、それぞれを8個のPEで共有する場合は、演算に要するサイクル数は8となる。これに1サイクルのアクセス遅延を加えた9が最大最小値演算器1204のレイテンシである。なお、複数の最大最小値演算器1204の構成は、共有機能ユニット403がプログラム実行前に設定する。
共有機能ユニット403のベクタ演算ユニット1205の機能について説明する。
ベクタ演算ユニット1205は、複数個のPEから入力したデータ数を次元とするベクタ演算を行い、結果が所定のレイテンシ後に、データを出力したPEに出力する。
以下の式(1)は2個のPEによる2次元のベクタ演算であるから演算に要するサイクル数は3である。これに1サイクルのアクセス遅延を加えた3がベクタ演算ユニット1205のレイテンシである。
Figure 0004893621
同様に以下の式(2)の4個のPEによる4次元のベクタ演算であるから演算に要するサイクル数は4である。これに1サイクルのアクセス遅延を加えた5がベクタ演算ユニット1205のレイテンシである。
Figure 0004893621
どちらの場合も係数となる行列の各要素の値は、あらかじめ保持しておく。
[SCU(Stream Control Unit)203_0〜203_3]
以下、SCU203_0について説明する。
SCU203_1〜203_3は、SCU203_0と同じである。
SCU203_0は、図3等に示すように、複数のPU_SIMD(Single Instruction Multiple Data) 処理回路#0〜#3に対して、それを構成する個々のプロセッサエレメントPEの処理に必要なデータを効率よくデータを入出力するための制御を行う。
SCU203_0は、処理に必要なデータを半導体メモリなどに代表される記憶装置に収納する。
PU_SIMD処理回路#0〜#3は、SIMD型プロセッサであるため、すべてのPEに対する入出力は時間的に同時に行われる。従って、SCU203_0によるPU_SIMD#0〜#3に対する入出力は、PEの個数分の入出力データを同時に入出力することになる。以下同時に入出力されるデータを、ストリームデータと呼ぶことにする。
一方、PU_SIMD処理回路#0〜#3は画像情報の処理を主に行うが、処理対象である画像情報は、メモリなどの記憶装置において、物理的な1次元のアドレスで管理された記憶領域内に、論理的な2次元記憶領域を確保して記憶されている。その画像データの基本単位は画素データと呼ばれる。
SCU203_0は、PU_SIMD処理回路#0〜#3と、メモリシステム105およびローカルメモリ204_0との間に位置し、複数の画素データをストリームデータに変換して入出力を行う機能を持っている。
SCU203_0の機能を具体的に示す。
(1)SCU203_0は、ローカルメモリ204_0またはメモリシステム105(以下、記憶領域とも記す)からデータ群を読み出し、そのデータをPU_SIMD#0〜#3で必要とされるストリームデータに変換し、PU_SIMD#0〜#3に出力する。
(2)SCU203_0は、PU_SIMD#0〜#3が出力する出力ストリームデータを、記憶領域内部で必要とされるデータ形式に変換し、記憶領域へ書き込み転送する。
(3)SCU203_0の記憶領域は、作業領域として使用する半導体メモリであり、記憶領域はSCU203_0と共にSOC(System On Chip) に含まれる場合や、SOCの外部に含まれる場合などのバリエーションが想定できる。
(4)SCU203_0が上記記憶領域をアクセスする場合は、SCU203_0からは1次元の物理アドレスとしてアクセスできる。
(5)SCU203_0内部において、記憶領域上のデータは、PU_SIMD処理回路#0〜#3でのプログラム開発の容易さと画像情報の取り扱いの容易さのため、論理的な2次元座標で配列された画素データを単位として扱うことが可能である。
(6)記憶領域上では、複数の画素データから構成された1ワードデータが、1次元物理アドレスによるアクセス単位となる。
(7)1ワードデータ内の画素データ個数及び2次元座標で見た場合の画素データ配列は、使用するメモリ種類に応じて可変であり、SCU203_0は複数の画素データ配列に対処可能である。
(8)SCU203_0の記憶領域は、SCU203_0に接続されるPU_SIMD処理回路#0〜#3単位に、記憶領域へのreadアクセスとデータ変換を行うための設定を必要とし、その設定をSCU203_0内部のレジスタにホストプロセッサ101から書き込むことで可能となる。
(9)SCU203_0は、記憶領域へのreadアクセスを行うために以下の事項を設定する。
a.記憶領域に含まれる複数の矩形画像領域を指定する第1の開始アドレス。
b.第1の開始アドレスから始まる記憶領域中に含まれ、2次元論理座標で指定される、第2の複数の矩形画像領域の幅高さ。
c.第2の矩形画像領域中に、階層的に含まれる2次元論理座標で指定される第3の矩形画像領域の幅高さ。
d.第3の矩形画像領域内部のデータに対して、選択的にデータを読み出し、並べ替えや演算などの処理を施し、PU_SIMD処理回路#0〜#3が必要とするストリームデータへ変換する方式の指定。
(10)SCU203_0は、記憶領域へのWRiteアクセスを行うために以下の実行を設定する。
e.記憶領域に含まれると複数の矩形画像領域を指定する第4の開始アドレス。
f.第4の開始アドレスから始まる記憶領域中に含まれ、2次元論理座標で指定される、第5の複数の矩形画像領域の幅高さ。
g.第5の矩形画像領域中に、階層的に含まれる2次元論理座標で指定される第6の矩形画像領域の幅高さ。
h.第6の矩形画像領域内部のデータに対して、PU_SIMD処理回路#0〜#3が出力するストリームデータから択的にデータを読み出し、並べ替えや演算などの処理を施し、第6の矩形画像領域内部のデータ形に書き込む方式の指定。
i.SCU203_0は複数の記憶領域間のデータ転送を実現する。
j.SCU203_0を制御可能するコントローラであるホストプロセッサ101との間で、通信を行うためのインターフェースを介して接続する。
PU_SIMD処理回路#0〜#3が、ストリームデータを処理する場合、記憶領域上に矩形画像領域を多重(階層)指定し、それぞれの矩形画像領域を移動させながら、データのRead/WRite処理を行うことで効率よく処理を行う。
そのため、SCU203_0内部に多重構造の矩形画像領域を定義する。
図26は、記憶領域上の多重矩形画像領域から、PU_SIMD処理回路#0〜#3へストリームデータをWRiteする場合及び、PU_SIMD処理回路#0〜#3から記憶領域上の多重矩形画像領域へ、ストリームデータをWRiteする場合の動作を示している。
SCU203_0が扱う記憶領域内の矩形画像領域の階層構成を、図26を参照して説明する。
SCU203_0は、記憶領域中に、作業領域として矩形画像領域WRを指定する。
また、SCU203_0は、矩形画像領域WRを、PU_SIMD処理回路#0〜#3毎に指定する。
SCU203_0は、矩形画像領域WR内に、画素データの読み出し元である矩形画像領域ARを指定する。
SCU203_0は、矩形画像領域AR内に、矩形画像領域BRを指定する。
SCU203_0は、ホストプロセッサ101から入力したプログラムに基づいて、矩形画像領域BRから読み出した画素データを、PU_SIMD処理回路#0〜#3が必要とするストリームデータに変換するデータ変換コマンドWI#data#opを実行(指定)する。

SCU203_0は、後述するように矩形画像領域AR,BR,WI_data_op指定の一連の繰り返し処理をプログラム可能である。
SCU203_0は、矩形画像領域WR内に、画素データの書き込み先である矩形画像領域CRを指定する。
SCU203_0は、矩形画像領域CR内に、矩形画像領域DRを指定する。
SCU203_0は、PU_SIMD#0〜#3の出力ストリームデータから、矩形画像領域DRへのデータ変換コマンドWO#data#opを実行する。
SCU203_0は、後述するように矩形画像領域CR、DR、WO_data_op指定は、一連の繰り返し処理をプログラム可能である。
SCU203_0は、矩形画像領域AR、BR、CR、DRは矩形画像領域WR内の任意の位置への配置と移動可能である。
SCU203_0は、矩形画像領域WR内において、矩形画像領域AR、BR、CR、DRを、2次元論理座標で指定が可能である。
SCU203_0は、記憶領域に対して矩形画像領域WRを物理アドレスで指定できる。
SCU203_0は、矩形画像領域WR,AR,DR,CR.DR内部の画素データがアクセスされた場合には、記憶領域へアクセスが必要になるため、論理アドレスから物理アドレスへの変換を行って記憶領域にアクセスする。
図27は、SCU203_0内部に設定される多重矩形画像領域に関する処理を行う機能を説明するための図である。
図27に示すように、SCU203_0は、PU_SIMD処理回路#0〜#3の各々に、記憶領域内の矩形画像領域WR0〜3の各々を割り当てる。
矩形画像領域WR0〜3は、メモリシステム105やローカルメモリ204_0などの記憶領域内に規定される。
矩形画像領域WR0〜3の各々に、矩形画像領域AR0〜7,BR0〜7,CR0〜3,DR0〜3が規定される。
図27に示すSCU203_0は、WI_data_opにより、矩形画像領域BR内のデータをストリームデータへ変換して、出力バッファout_bufにWRiteする。
また、SCU203_0は、データ変換コマンドWO#data#opにより、PU_SIMD処理回路#0〜#3から入力して入力バッファin#bufに収納されているストリームデータをデータ変換して矩形画像領域DRにWRiteする。
図26を参照して上述したように、矩形画像領域WR内に、矩形画像領域AR,BR,CR,DRを階層構造で規定することで、例えば、矩形画像領域AR,CR内で矩形画像領域BR,DRを相対的に移動させる場合に、基準座標を矩形画像領域AR,BR,CR,DR内のローカルな座標に加算する形式でのアドレス表現が可能になり、プログラミングが簡単になる。
本実施形態では、矩形画像領域の個数や多重指定の階層数などを具体的な数字で表現しているが、その構成や数量は組み合わせ自由であり、幅広い画像処理の必要性に応じて構成を変えることが可能である。
SCU203_0がデータ転送のために行う接続を説明する。
[システムバス接続]
図1に示すシステムバス113は、SCU203_0を、ホストプロセッサ101およびメモリシステム105などの他の処理モジュールを接続するバスであり、以下の特徴を有する。
(1)システムバス113は、LSIやSOC内部で標準化されたバス規格を採用することが可能である。
(2)システムバス113のバス幅は128ビットであり、連続データ転送(バースト転送)が可能な構成とすることで、バス使用効率を向上できる。
(3)システムバス113上の記憶装置(例えば、メモリシステム105)に対して、SCU203_0はバスマスタとしてアクセスする。
(4)システムバス113上のSCU203_0以外のバスマスタから、SCU203_0の内部レジスタやSCU専用記憶装置(例えば、、ローカルメモリ204_0)へのアクセスを行う。
(5)システムバス113は、データ転送効率や機能が満足されるのであれば、バス規格にはこだわらない選択が可能である。
[SCU203_0の専用記憶領域接続]
SCU203_0は、専用記憶領域として専用記憶装置を接続することが可能である。
専用記憶装置はSRAMやDRAMなどの半導体メモリがSOC内部外部にのどちらにあろうとも選択可能である。
上記専用記憶装置は、システムバス113より広帯域なバスに接続される。
上記専用記憶装置は、1つのSCU203_0が占有して使用する目的で用意されている。
システムバス113上のバスマスタから、上記専用記憶装置へのアクセスが可能である。
[PU_SIMD#0〜#3接続]
SCU203_0には、4つのPU_SIMD処理回路#0〜#3がバス接続される。

SCU203_0からPU_SIMD処理回路#0〜#3へのストリームデータ入力は、各PU_SIMD処理回路に256ビットの単方向バスを使用し、転送効率は256bit/clockである。
data/転送プロトコルとして2線式のハンドシェークを採用する。
SCU203_0内部には出力バッファout_bufを用意する。
SCU203_0から出力を行う場合は、PU_SIMD処理回路#0〜#3に対してアドレスを指定することでPU_SIMD処理回路内部レジスタを識別する。
PU_SIMD処理回路#0〜#3からSCU203_0へのストリームデータ入力は、各PU_SIMDの256ビットの単方向バスを使用し、転送効率は256bit/clockである。
また、データ転送プロトコルとして2線式のハンドシェークを採用する。
SCU203_0内部には入力用の入力バッファin_bufを用意する。
PU_SIMD処理回路#0〜#3からSCU203_0へ入力を行う場合は、PU_SIMDに対してアドレスを指定することでPU_SIMD処理回路内部レジスタを識別する。
[SCU203_0の物理論理アドレス変換]
SCU203_0がアクセスする図26および図27を用いて説明した記憶領域内の矩形画像領域WR内部の画素対応位置Pixelは2次元論理アドレスで表現されているが、メモリシステム105およびローカルメモリ204_0は物理アドレスで表現されている。従って、SCU203_0は、矩形画像領域WR内の矩形画像領域AR,BR,CR,DR内部に指定された画素対応位置Pixelに対してReadまたはWRiteを行う場合は、2次元論理アドレスから物理アドレスへのアドレス変換を行う。
ここで、矩形画像領域WR内の任意の画素対応位置をpixel(x,y)とする。ただしx,yは2次元論理アドレスである。
画素対応位置L_Pixel(x、y)の物理アドレス(adrs)は以下の様に計算される。
また、アドレス指定されるwordの中で、画素対応位置L_Pixel(x、y)が占めるビット位置をWord[a:b]と表現する。(ただしa,bはword内でpixelを構成するビット範囲とする。)
下記式(3)〜(4)において、wwは画素位置単位の矩形画像領域WRの幅(X方向)である。
なお、1ワードデータ(1word)中のx方向Pixel数をpwとする。
phは、1word中のy方向Pixel数である。
nは、1word中のビット位置を計算するための値である。
WR#bpは、記憶領域内部での矩形画像領域WRの開始を示すアドレスである。
1つのPixel=16ビットで表現しているがビット長としては他の値を採用することも可能である。
Int()はカッコ内の値を超えない整数を示す。
X mod yは整数xを整数yで割った剰余である。
[数3]
adres=WR#bp+int〔y/ph〕*ww/pw+int(x/pw) …(3)
[数4]
n=(y mod ph)*pw+(x mod pw) …(4)
[数5]
L#pixel(x,y)[15:0]=word[16*(n+1)-1:16*n] …(5)
図28は、SCU203_0による物理論理アドレス変換を説明するための図である。
図28に示すように、メモリシステム105およびローカルメモリ204_0の物理的なアドレス空間ADRS内に矩形画像領域WRが規定される。
SCU203_0は、1つの物理アドレスによるアクセス単位を1wordとする。
WR#bp+は、矩形画像領域WRの開始アドレスである。
wwは、矩形画像領域WRの幅であり、画素対応位置Pixel単位かつpwの倍数である。
図28に示すように、アドレス空間ADRSの画素対応位置L_Pixelは、2次元論理アドレスによってで指定可能である。
図28に示すpwは、1word内のx方向のpixel数(画素データ数)を示す。
図28に示すphは、1word内のy方向のpixel数を示す。
1pixelに含まれる情報量をnビットとし、1wordに含まれる総ビット容量をwordsizeとすると以下の関係式が成立する。
[数6]
wordsize=n*pw*ph …(6)
本実施形態では、上述したように記憶領域を2次元論理アドレスで管理することで、記憶領域内の任意の矩形画像領域にアクセスする場合に、従来のスキャンライン方式のようにカウント処理(デットラインの検出処理)などが不要になり、プログラミングが簡単になる。
本実施形態では1pixel=16bビットの構成で説明を行っているが、1pixelの情報量は特に限定されず、8ビットや32ビットなどでもよい。
[SCU203_0による記憶領域へのアクセス]
SCU203_0は、上述したように、記憶領域として、システムバス113に接続された大規模外部記憶装置であるメモリシステム105と、小規模な専用記憶装置であるローカルメモリ204_0を使用することができる。
メモリシステム105は、例えば、SCU203_0が含まれるSOCの外部に接続されるDRAM-CHIPであり、一般的なDDRやRAMBUSなどのメモリchipなどである。
ローカルメモリ204_0は、例えば、SCU203_0が含まれるSOC内部のSRAMやeDRAM (Embedede-DRAM:SCUと同じSOCに含まれるOn-chip DRAM)などである。
一般的に、DRAMは、Raw/Column/bankといったアドレスの階層構造があり、同一のRawに含まれる連続データアクセスは高速であるが、Raw境界をまたがった連続データアクセスや、遠隔のRaw同士の連続アクセスは、ページプリチャージなどの処置を必要とするため、低速となるという特徴がある。
本実施形態では、SCU203_0は、例えば、メモリシステム105やローカルメモリ204_0として、DRAMを使用しているが、SRAMであっても問題はない。また、DRAMを使用する場合、上記アクセス性能の不連続性を可能な限り避ける目的で、記憶領域内の画素データの矩形画像配列を、ストリームデータ生成時には可能な限り同一ページに配置する工夫をすることで、DRAMアクセスの不連続性を可能な限り低減する処置をとることができる。
この工夫は、たとえば先にのべた物理論理アドレス変換におけるbpとwwの値に、以下に示すような制約を与えるなどで容易に実現可能である。
(制約例1) wwはDRAMのcolumnの倍数であり、かつpwの倍数である。
(制約例2) WR#bpの値はDRAMのRaw単位である。
[SCU203_0による多重矩形画像領域定義(読み出し時)]
SCU203_0は、上述したように、記憶領域内の矩形画像領域WR内に、図29に示すように、2次元論理アドレス表現で多重矩形画像領域として、矩形画像領域AR,BRを規定できる。
それぞれの位置関係を示す値として以下の座標値が使われる。
wwは、矩形画像領域WRのx方向矩形画像領域幅。
ax,ayは、矩形画像領域WR内の矩形画像領域ARの2次元座標を示す。これは、矩形画像領域WRの左上を原点(0,0)とした座標系で、矩形画像領域ARの左上の画素対応位置Pixelの座標を示す。
aw及びahは、矩形画像領域ARの幅と高さを示す。
bx及びbyは、矩形画像領域AR内の矩形画像領域BRの2次元座標を示す。矩形画像領域ARの左上を原点(0,0)とした座標系で、矩形画像領域BRの左上の画素対応位置Pixelの座標を示す。
bw及びbhは、矩形画像領域BRの幅と高さを示す。
x及びyは、矩形画像領域BR内の画素対応位置Pixelの2次元座標を示す。矩形画像領域BRの左上を原点(0,0)とした座標系である。
[SCU203_0による矩形画像領域BRの定義モード]
SCU203_0は、bx,by及びbw,bhの値を調整することで、図30に示すように、矩形画像領域ARを逸脱するように矩形画像領域BRを指定できる。
これにより、SCU203_0は、多様な形態でPU_SIMD処理回路#0〜#3にストリームデータを出力できる。
以下、SCU203_0による矩形画像領域BRの指定の形態を示す各種のBRモードを説明する。
(矩形画像領域)BRモード1:
SCU203_0は、BRモード1に設定されている場合に、矩形画像領域ARから逸脱して矩形画像領域BRを設定可能である。
SCU203_0は、矩形画像領域BRが矩形画像領域ARから逸脱した場合に、逸脱した領域に対応した画素データPixelの値を予め設定された値(COL)にする。
SCU203_0は、矩形画像領域BR内の画素データPixel(x,y)を、矩形画像領域AR内の画素データAR()を用いて下記式(7)のように決定する。
[数7]
if((x+bx >= aw )|(y+by > ah )) pixel(x,y)=COL
else pixel(x,y)=AR(x+bx,y+by) …(7)
(矩形画像領域)BRモード2:
SCU203_0は、BRモード2に設定されている場合に、矩形画像領域ARから逸脱して矩形画像領域BRを設定可能である。
SCU203_0は、図31に示すように、矩形画像領域BRがX方向に矩形画像領域ARから逸脱した場合、逸脱領域を矩形画像領域AR内部に折り返すように制御する。
SCU203_0は、図31に示すように、矩形画像領域BRがX方向とY方向とに矩形画像領域ARから逸脱した場合、矩形画像領域ARには折り返されないこととし、画素データPixelの値を(COL)とする。
SCU203_0は、矩形画像領域BR内の画素データPixel(x,y)を、矩形画像領域AR内の画素データAR()を用いて下記式(8)のように決定する。
[数8]
if(aw <= x+bx) & (y+by <= ah-bh) pixel(x,y)=AR(x+bx-aw, y+by+bh)
else if (aw <= x+bx) & (ah-bh < y+by) pixel(x,y)=COL
else if(ah < y+bx) pixel(x,y)=COL
else pixel(x,y)=AR(x+bx, y+by)
…(8)
(矩形画像領域)BRモード3:
SCU203_0は、BRモード3に設定されている場合に、矩形画像領域ARから逸脱して矩形画像領域BRを設定できない。
SCU203_0は、矩形画像領域ARから逸脱した矩形画像領域BRを指定した場合には、逸脱した領域の画素データPixel(x,y)はその値を保障しない。
SCU203_0は、図32に示すように、矩形画像領域ARの外周から2画素対応位置の領域に、矩形画像領域BRが設定された場合に、矩形画像領域ARの外周から内側3画素対応位置の矩形画像領域BR内の画素対応位置の画素データPixel(x,y)を、矩形画像領域BRの外周から2画素対応位置の画素データPixel(x,y)として設定するクランプ(Clamp)動作を行う。
矩形画像領域BR内の画素データPixel(x,y)は、下記式(9)で規定される。
簡略化のためにxp=x+bx; yp=y+by;としている。
[数9]
if ((xp < 2) & (yp < 2)) pixel(x,y)=AR(2,2)
else if((2<= xp <aw-2)&(yp < 2) pixel(x,y)=AR(xp,2)
else if((aw-2 <= xp)&(yp <2) pixel(x,y)=AR(aw-3,2)
else if((xp < 2)&( 2 <= yp <ah-2) pixel(x,y)=AR(2,yp)
else if ((aw-2 < xp)&(2 <= yp <ah-2) pixel(x,y)=AR(aw-3,yp)
else if ((xp < 2)&(ah-2 <= yp) pixel(x,y)=AR(2,ah-3)
else if ((2 <= xp <aw-2)&(ah-2 <= yp) pixel(x,y)=AR(xp,ah-3)
else if ((aw-2 <= xp)&(ah-2 <= yp) pixel(x,y)=AR(aw-3,ah-3)
else pixel(x,y) = AR(xp,yp)
…(9)
矩形画像領域BRが、矩形画像領域ARの外周から1画素対応位置だけ内側に位置する場合には、SCU203_0は、図33に示すように、クランプ動作を行う。
本実施形態では、上述したようにクランプ動作(処理)を行うことで、任意の矩形画像領域のフィルタ処理などを行う場合に、矩形画像領域の外周において当該矩形画像領域外の画素データを適切に代用することができる。
[SCU203_0によるPU_SIMDへのデータ入力処理]
SCU203_0は、矩形画像領域BRから画素データPixel(x,y)を読み出し、これをデータストリームへデータに変換して(入力データ変換処理を行って)図3に示すPU_SIMD処理回路#0〜#3に入力させる。
ここで、SCU203_0は、PU_SIMD#0〜#3の各々について、上記変換の内容を指定できる。
SCU203_0は、各PU_SIMD#0〜#3に対応した出力バッファout_bufを備えている。
SCU203_0は、矩形画像領域BRを指定するレジスタを備えている。
SCU203_0は、各PU_SIMD#0〜#3に対応した入力バッファin_bufを備えている。
SCU203_0は、矩形画像領域BRから画素データPixel(x,y)を読み出し、並べ替えなどのデータ変換処理を施した後に、ストリームデータとして図27に示す出力バッファout_bufに書き込む。
SCU203_0は、矩形画像領域BRを指定するレジスタ値を、ストリームデータとして出力バッファout_bufに書き込む。
SCU203_0は、矩形画像領域BRから画素データPixel(x,y)を読み出し、並べ替えなどのデータ変換処理を施した後に、SCU203_0内にある矩形画像領域BRを指定するレジスタに書き込む。
SCU203_0は、入力バッファin_bufから読み出したデータを、データ変換処理を施した後に、ストリームデータとして出力バッファout_bufに書き込む。
SCU203_0は、上述した入力データ変換処理、すなわちPU_SIMD#0〜#3に書き込むためのデータストリームへの変換処理として、例えば、下記表2に示す入力データ変換コマンドに応じて入力データ変換処理を行う。
SCU203_0は、図1に示すホストプロセッサ101から入力データ変換コマンドを入力して実行する。
SCU203_0は、表2に示す各入力データ変換コマンドにおいて、表3に示す従属パラメータを指定できる。
Figure 0004893621
Figure 0004893621
表2に示したデータ変換コマンドに基づく入力データ変換処理のそれぞれを説明する。
[set#BR#1of4x4#same]
SCU203_0は、例えば、ホストプロセッサ101から入力データ変換コマンド「set#BR#1of4x4#same」を実行すると、図34に示すように、その従属パラメータで指定された矩形画像領域BR内の1画素対応位置から画素データPixelを読み出し、それを64個複製して画素データPixel(0,...63)を生成し、これを画素データ内部のビット選択の後に、出力バッファout_bufを介してPU_SIMD処理回路#0〜#3に入力される。
SCU203_0は、従属パラメータBR#numにより、4x4画素対応位置の矩形画像領域BRを特定する。
SCU203_0は、マルチプレクサMUX1,MUX2および論理回路LOG1を有する。
マルチプレクサMUX1は、上記特定した矩形画像領域BRから、従属パラメータyselにより、x方向の4画素対応位置の画素データPixelを読み出す。
そして、マルチプレクサMUX2は、上記読み出したx方向の4つの画素データPixelのなかから、従属パラメータxselにより、1つの画素データPixelを選択して論理回路LOG1に出力する。
論理回路LOG1は、従属パラメータwselにより、上記選択した1つの画素データPixelを各々が示す64個の画素データPixelを、出力バッファout_bufに書き込む。
論理回路LOG1は、従属パラメータwselにより、64個の画素データPixelをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、従属パラメータldにより、4画素データPixel毎にload制御を行う。
[set#bxy]
SCU203_0は、例えば、ホストプロセッサ101から入力データ変換コマンド「set# bxy」を実行すると、図35に示すように、従属パラメータxsel,yselで選択された矩形画像領域BRの左端座標(bx,by)を32個ずつ複製して64個の画素データのストリームデータを生成し、従属パラメータwselによる画素データ内部のビット選択の後に、従属パラメータldにより出力バッファout_bufに設定する。
本実施形態では、矩形画像領域BRとして左端座標が異なる8種類が用意されている。
SCU203_0は、矩形画像領域BRのy方向の値を指定するレジスタby0〜7と、x方向の値を指定するレジスタbx0〜7とを備えている。
SCU203_0は、8個のマルチプレクサMUX11を有する。
マルチプレクサMUX11の各々は、それぞれ対応するレジスタbyの値とレジスタxyの値とのうち一方を、従属パラメータyselにより選択して、マルチプレクサMUX12に出力する。
SCU203_0は、2つのマルチプレクサMUX12を備えている。
マルチプレクサMUX12は、それぞれ4つのマルチプレクサMUX11から入力した値のうち1つを、従属パラメータxselにより選択して論理回路LOG31に出力する。
論理回路LOG31は、従属パラメータwselにより、64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD#0〜#3へのload制御を、従属パラメータldにより、4画素データPixel毎に行う。
このように、矩形画像領域BRの左端座標をPU_SIMD処理回路#0〜#3に出力するのは、PU_SIMD処理回路#0〜#3のPEにおいて、フィルタ処理などにおいて、当該座標を処理に用いるためである。
[set#BR#8x1#to#bxy]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#8x1#to#bxy 」を実行すると、例えば、図36に示すように、矩形画像領域BR内にx方向に連続する2pixelを座標として扱うため、BR#numで選択された矩形画像領域BR4〜7から8画素データPixelを選択し、矩形画像領域BRの左端座標(bx,by)に設定する。
このことは、後述する入力データ変換コマンド「WI#data#op=set#BR4567#1of4x4」と組み合わせて指定することで、メモリ間接アドレスを実現する。
すなわち、この例では、矩形画像領域BR内に、矩形画像領域BRの左端座標が、画素データとして記憶されている。
[set#BR4567#1of4x4]
SCU(Stream Control Unit)203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR4567#1of4x4」を実行すると、例えば、図37に示すように、従属パラメータxsel,yselにより、マルチプレクサMUX1,MUX2で4つの矩形画像領域BRからそれぞれ1画素データを読み出し、これを論理回路LOG51に出力する。
論理回路LOG51は、SCU203_0から入力した画素データを、従属パラメータwselにより、出力バッファout_bufの所定のビット位置に書き込む。
論理回路LOG51は、従属パラメータwselにより、64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
この例では、上記4つの矩形画像領域BRの左端座標として、上記「set#BR#8x1#to#bxy」によって設定されたものを用いることで、上記メモリ間接アドレスを実現する。
[set#in#buf#straight]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#in#buf#straight」を実行すると、例えば、図38に示すように、PU_SIMD#0〜#3毎に備えられた4本の入力バッファin_bufのなかから、2本の入力バッファin_buf(n),(n−1)を選択する。
入力バッファin_buf(n),(n−1)の各々は、1(高さ)×64(幅)画素データのサイズを有している。
SCU203_0は、64個のマルチプレクサMUX1を備えている。
64個のマルチプレクサMUX1の各々は、入力バッファin_buf(n),(n−1)の対応する2つの画素データのうち、一つを従属パラメータyselにより選択して論理回路LOG61に出力する。
論理回路LOG61は、従属パラメータwselにより、64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
入力データ変換コマンド「set#in#buf#straight」により、図3に示すPU_SIMD処理回路#0〜#3間でのデータの入出力が可能になる。また、当該入力データ変換コマンド「set#in#buf#straight」によって、PU_SIMD#0〜#3を直列および並列の何れで接続するかをプログラミング(規定)できる。
[set#in#buf#with#BR#2x1]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#in#buf#with#BR#2x1」を実行すると、例えば、図39に示すように、PU_SIMD#0〜#3毎に備えられた4本の入力バッファin_bufのなかから、2本の入力バッファin_buf(n),(n−1)を選択する。
入力バッファin_buf(n),(n−1)の各々は、1(高さ)×64(幅)画素データのサイズを有している。
SCU203_0は、62個のマルチプレクサMUX1を備えている。
62個のマルチプレクサMUX1の各々は、入力バッファin_buf(n),(n−1)の対応する2つの画素データのうち、一つを従属パラメータyselにより選択して論理回路LOG71に出力する。
論理回路LOG71は、従属パラメータwselにより、62画素データと、従属パラメータBR#numで選択された矩形画像領域BRから読み出した2画素データの合計64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#in#buf#with#BR#4x1]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#in#buf#with#BR#4x1」を実行すると、例えば、図40に示すように、PU_SIMD処理回路#0〜#3毎に備えられた4本の入力バッファin_bufのなかから、2本の入力バッファin_buf(n),(n−1)を選択する。
入力バッファin_buf(n),(n−1)の各々は、1(高さ)×64(幅)画素データのサイズを有している。
SCU203_0は、60個のマルチプレクサMUX1を備えている。
60個のマルチプレクサMUX1の各々は、入力バッファin_buf(n),(n−1)の対応する2つの画素データのうち、一つを従属パラメータyselにより選択して論理回路LOG81に出力する。
論理回路LOG81は、従属パラメータwselにより、60画素データと、従属パラメータBR#numで選択された矩形画像領域BRから読み出した4画素データの合計64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#16x1]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#16x1」を実行すると、例えば、図41に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の16画素データを4倍に複製して64画素データのストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
論理回路LOG91は、従属パラメータBR#numで選択された矩形画像領域BR内の16画素データを4倍に複製して得られた64画素データを入力し、これら64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。従って4倍に複製したデータをout#bufに対して16pixelごとに書き込むことも可能である。
[set#BR#32x1]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#32x1」を実行すると、例えば、図42に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の32画素データを2倍に複製して64画素データのストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
論理回路LOG101は、従属パラメータBR#numで選択された矩形画像領域BR内の32画素データを2倍に複製して得られた64画素データを入力し、これら64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。従って2倍に複製したデータをout#bufに対して32pixelごとに書き込むことも可能である。
[set#BR#64x1]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x1」を実行すると、例えば、図43に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の64画素データのストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
論理回路LOG111は、従属パラメータBR#numで選択された矩形画像領域BR内の64画素データを入力し、これら64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x2]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x2」を実行すると、例えば、図44に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の128×1画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
64個のマルチプレクサMUX2の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のx方向に隣接した2画素データを入力し、従属パラメータxselにより、1画素データを選択して論理回路LOG121に出力する。
論理回路LOG121は、従属パラメータwselにより、64個のマルチプレクサMUX2から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x2x2]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x2x2」を実行すると、例えば、図45に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の128×2画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
128個のマルチプレクサMUX1の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のy方向に隣接した2画素データを入力し、従属パラメータyselにより、1画素データを選択して、64個のマルチプレクサMUX2に出力する。
64個のマルチプレクサMUX2は、x方向に隣接する2つの画素データのうち、1の画素データを、従属パラメータxselにより選択して論理回路LOG131に出力する。
論理回路LOG131は、従属パラメータwselにより、64個のマルチプレクサMUX2から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x3]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x3」を実行すると、例えば、図46に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の192×1画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
64個のマルチプレクサMUX3の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のx方向に隣接した3画素データを入力し、従属パラメータxselにより、1画素データを選択して論理回路LOG141に出力する。
論理回路LOG141は、従属パラメータwselにより、64個のマルチプレクサMUX3から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x3x3]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x3x3」を実行すると、例えば、図47に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の192×3画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
192個のマルチプレクサMUX4の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のy方向に隣接した3画素データを入力し、従属パラメータyselにより、1画素データを選択して、64個のマルチプレクサMUX3に出力する。
64個のマルチプレクサMUX3は、マルチプレクサMUX4から入力したx方向に隣接する3つの画素データのうち、1の画素データを、従属パラメータxselにより選択して論理回路LOG151に出力する。
論理回路LOG151は、従属パラメータwselにより、64個のマルチプレクサMUX3から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x4]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x4」を実行すると、例えば、図48に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の256×1画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
64個のマルチプレクサMUX5の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のx方向に隣接した4画素データを入力し、従属パラメータxselにより、1画素データを選択して論理回路LOG161に出力する。
論理回路LOG161は、従属パラメータwselにより、64個のマルチプレクサMUX5から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x4x4]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x4x4」を実行すると、例えば、図49に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の256×4画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
256個のマルチプレクサMUX6の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のy方向に隣接した4画素データを入力し、従属パラメータyselにより、1画素データを選択して、64個のマルチプレクサMUX5に出力する。
64個のマルチプレクサMUX5は、マルチプレクサMUX4から入力したx方向に隣接する4つの画素データのうち、1の画素データを、従属パラメータxselにより選択して論理回路LOG161に出力する。
論理回路LOG161は、従属パラメータwselにより、64個のマルチプレクサMUX5から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x9]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x9」を実行すると、例えば、図50に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の576×1画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
64個のマルチプレクサMUX7の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のx方向に隣接した9画素データを入力し、従属パラメータxselにより、1画素データを選択して論理回路LOG171に出力する。
論理回路LOG171は、従属パラメータwselにより、64個のマルチプレクサMUX7から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[set#BR#64x9x3]
SCU203_0は、ホストプロセッサ101から入力データ変換コマンド「set#BR#64x9x3」を実行すると、例えば、図51に示すように、従属パラメータBR#numで選択された矩形画像領域BR内の576×3画素データのなかから、従属パラメータxselにより、64画素データを選択してストリームデータを生成し、これを所定の画素データ選択処理を経て、出力バッファout_bufに書き込む。
576個のマルチプレクサMUX8の各々は、従属パラメータBR#numで選択された矩形画像領域BR内のy方向に隣接した3画素データを入力し、従属パラメータyselにより、1画素データを選択して、64個のマルチプレクサMUX7に出力する。
64個のマルチプレクサMUX7は、マルチプレクサMUX8から入力したx方向に隣接する9つの画素データのうち、1の画素データを、従属パラメータxselにより選択して論理回路LOG181に出力する。
論理回路LOG181は、従属パラメータwselにより、64個のマルチプレクサMUX7から入力した64画素データをそのまま出力バッファout_bufに書き込むか、あるいは各画素データPixelのLSBから4ビットをパックして16個の画素データPixelに収納するかを決定する。
SCU203_0は、出力バッファout_bufからPU_SIMD処理回路#0〜#3へのload制御を、4画素データ毎に、従属パラメータldにより行う。
[SCU203_0による多重矩形画像領域定義(書き込み時)]
SCU203_0は、記憶領域内の矩形画像領域WR内に、図52に示すように、2次元論理アドレス表現で多重矩形画像領域として、矩形画像領域CR,DRを規定できる。
それぞれの位置関係を示す値として以下の座標値が使われる。
wwは、矩形画像領域WRのx方向矩形画像領域幅を示す。
cx,cyは、矩形画像領域WR内の矩形画像領域CRの2次元座標を示す。これは、矩形画像領域WRの左上を原点(0,0)とした座標系で、矩形画像領域CRの左上の座標を示す。
cw及びchは、矩形画像領域CRの幅と高さを示す。
dx及びdyは、矩形画像領域CR内の矩形画像領域DRの2次元座標を示す。矩形画像領域CRの左上を原点(0,0)とした座標系で、矩形画像領域DRの左上の座標を示す。
dw及びdhは、矩形画像領域DRの幅と高さを示す。
[SCU203_0による矩形画像領域DRの定義モード]
SCU203_0は、dx,dy及びdw,dhの値を調整することで、図53に示すように、矩形画像領域CRを逸脱するように矩形画像領域DRを指定できる。
これにより、SCU203_0は、PU_SIMD処理回路#0〜#3からの多様な形態のストリームデータを入力できる。
以下、SCU203_0による矩形画像領域DRの指定の形態を示す各種のDRモードを説明する。
DRモード1:
SCU203_0は、DRモード1に設定されている場合に、矩形画像領域CRから逸脱して矩形画像領域DRを設定可能である。
SCU203_0は、矩形画像領域DRが矩形画像領域CRから逸脱した場合に、逸脱した領域に含まれる画素対応位置の画素データの値を矩形画像領域CRに書き込まない。
矩形画像領域DR内の画素データは、矩形画像領域CR内では下記式(10)で規定される。
[数10]
if((x+dx >= cw )|(y+dy > ch )) pixel(x,y)はCRにWRiteされない
else CR(x+dx,y+dy)=pixel(x,y)
…(10)
DRモード2:
SCU203_0は、DRモード2に設定されている場合に、矩形画像領域CRから逸脱して矩形画像領域DRを設定可能である。
SCU203_0は、図54に示すように、矩形画像領域DRがx方向に矩形画像領域CRから逸脱した場合、逸脱領域を矩形画像領域CR内部に折り返すように制御する。
また、SCU203_0は、図54に示すように、矩形画像領域DRがx方向とy方向とに矩形画像領域CRから逸脱した場合、矩形画像領域DR内の画素データを矩形画像領域CR内に書き込まない。
矩形画像領域DR内の画素データは、矩形画像領域CR内において、下記式(11)のように規定される。
[数11]
if(cw <= x+dx) & (y+dy <= ch-dh) CR(x+dx-cw, y+dy+dh)=pixel(x,y)
else if (cw <= x+dx) & (ch-dh < y+dy) pixel(x,y)はCRにWRiteされない
else if(ch < y+dx) pixel(x,y)はCRにWRiteされない
else CR(x+dx, y+dy)=pixel(x,y)
…(11)
[PU_SIMD処理回路#0〜#3の出力データ変換処理]
PU_SIMD処理回路#0〜#3が出力したストリームデータは、入力バッファin_bufに書き込まれる。
SCU203_0は、入力バッファin_bufからデータを読み出し、並べ替えなどのデータ変換処理を施した後に、矩形画像領域DRに書き込む。
また、SCU203_0は、必要に応じて、入力バッファin_bufからデータを読み出し、マスクデータDR#maskに従った並べ替えなどのデータ変換処理を施した後に、矩形画像領域DRに書き込む。
SCU203_0は、PU_SIMD処理回路#0〜#3の各々について、上記変換処理を指定できる。
SCU203_0は、マスクデータDR#mask を記録するレジスタを備えている。
SCU203_0は、PU_SIMD処理回路#0〜#3の各々に対応した入力バッファin_bufを備えている。
SCU203_0は、上述した出力データ変換処理、すなわちPU_SIMD処理回路#0〜#3が出力したストリームを矩形画像領域DRに書き込む処理を、例えば、下記表4に示す出力データ変換コマンドWO#data#opに応じて行う。
SCU203_0は、図1に示すホストプロセッサ101から出力データ変換コマンドを入力して実行する。
SCU203_0は、表4に示す各出力データ変換コマンドにおいて、表5に示す従属パラメータを指定できる。
Figure 0004893621
Figure 0004893621
以下、上記表4に示した出力データ変換処理のそれぞれを説明する。
[set#DR#mask#64x1]
入力バッファin_buf(0-15)の各々には、PU_SIMD#0〜#3から入力された64画素データが書き込まれる。なお、1画素データは、4ビットで表現されている。
ここで、例えば、各出力バッファout_bufは、それぞれ図3に示す一つのプロセッサユニットPUに予め対応付けられている。
SCU203_0は、図55に示すように、各画素データを構成する4ビットから1ビットを選択し、64ビットのマスクデータDR#maskとして、マスクレジスタMR11に書き込む。
マスクデータDR#maskを構成する各ビットは、プロセッサユニットPUの出力を、矩形画像領域DRに書き込む場合に、画素データ単位のマスク情報として用いられる。
たとえばマスクデータDR#maskのビットが「1」の場合は画素データを矩形画像領域DRに書き込むことを意味し、「0」の場合には書き込まないことを意味する。
SCU203_0が、矩形画像領域DRに実際に画素データを書き込むのは、後述する出力データ変換処理コマンドがset#DR#packed=64x1の場合である。
SCU203_0は、従属パラメータDR#numで選択された64ビット構成のマスクレジスタMR1に1に64ビットのマスクデータDR#maskを書き込む。
また、SCU203_0は、従属パラメータDR#numで選択されたマスクサイズレジスタMSR11には64ビットのマスクデータDR#maskのなかで「1」となっているビット数を書き込む。
従って、マスクサイズレジスタMSR11に記憶される値は、0〜64のいずれかである。
図55に示すように入力バッファin_buf(0-15)の各々には、対応するプロセッサユニットPUから入力された64画素データが書き込まれる。
ビット選択器SEL11は、入力バッファin_buf(0-15)に格納されている64画素データを構成する各4〜1ビットを従属パラメータbselにより選択する。選択は4種類であり各画素データで同じbitが選択される。
SCU203_0は、従属パラメータDR#numで選択したマスクレジスタMR11に、ビット選択器SEL11で選択されたデータをマスクデータDR#maskとして格納する。
[set#DR#packed#64x1]
図56に示す入力バッファin_buf(0-63)の各々には、対応するプロセッサユニットPUから入力された64画素データが書き込まれている。
SCU203_0の書き込み制御回路WC11は、従属パラメータDR#numで選択された64ビット構成のマスクレジスタMR11に記憶されているマスクデータDR#maskに従い、入力バッファin_bufに記憶されている画素データを、従属パラメータDR#numで選択された矩形画像領域DRに書き込む。
このとき、書き込み制御回路WC11は、マスクデータDR#maskの「1」を示すビットに対応する画素データを、矩形画像領域DRのx座標の小さいほうから順に詰め合わせて(packして)書き込む。
矩形画像領域DRの幅は、64画素データで高さは、1画素データであるが、マスクデータDR#maskに応じて画素データをパック(pack)して矩形画像領域DRに書き込むため、矩形画像領域DR全体に画素データが書き込まれるとは限らない。
[set#DR#64x1]
図57に示す入力バッファin_buf(0-63)の各々には、対応するプロセッサユニットPUから入力された64画素データが書き込まれている。
SCU203_0は、入力バッファin_bufから読み出した64画素データを、従属パラメータDR#numで選択された矩形画像領域DR内に書き込む。
本実施形態では、上記矩形画像領域DRのサイズは、64×1画素データである。
[set#DR#128x1]
図58に示す入力バッファin_buf(0-63)の各々には、対応するプロセッサユニットPUから入力された64画素データが書き込まれている。
SCU203_0は、従属パラメータselに従って、入力バッファin_bufから読み出した64画素データを、従属パラメータDR#numで選択された矩形画像領域DR内に書き込む。
本実施形態では、上記矩形画像領域DRのサイズは、128×1画素データである。
SCU203_0は、従属パラメータpsel=0の場合は矩形画像領域DRのx座標が2の倍数の座標(画素対応位置)に画素データを書き込む。
SCU203_0は、従属パラメータpsel=1の場合は、矩形画像領域DRのx座標が2の倍数+1の座標に画素データを書き込む。
[set#DR#192x1]
図59に示す入力バッファin_buf(0-63)の各々には、対応するプロセッサユニットPUから入力された64画素データが書き込まれている。
SCU203_0は、従属パラメータselに従って、入力バッファin_bufから読み出した64画素データを、従属パラメータDR#numで選択された矩形画像領域DR内に書き込む。
本実施形態では、上記矩形画像領域DRのサイズは、192×1画素データである。
SCU203_0は、従属パラメータpsel=0の場合は矩形画像領域DRのx座標が3の倍数の座標(画素対応位置)に画素データを書き込む。
SCU203_0は、従属パラメータpsel=1の場合は、矩形画像領域DRのx座標が3の倍数+1の座標に画素データを書き込む。
SCU203_0は、従属パラメータpsel=2の場合は、矩形画像領域DRのx座標が3の倍数+2の座標に画素データを書き込む。
[set#DR#256x1]
図60に示す入力バッファin_buf(0-63)の各々には、対応するプロセッサユニットPUから入力された64画素データが書き込まれている。
SCU203_0は、従属パラメータselに従って、入力バッファin_bufから読み出した64画素データを、従属パラメータDR#numで選択された矩形画像領域DR内に書き込む。
本実施形態では、上記矩形画像領域DRのサイズは、256×1画素データである。
SCU203_0は、従属パラメータpsel=0の場合は矩形画像領域DRのx座標が4の倍数の座標(画素対応位置)に画素データを書き込む。
SCU203_0は、従属パラメータpsel=1の場合は、矩形画像領域DRのx座標が4の倍数+1の座標に画素データを書き込む。
SCU203_0は、従属パラメータpsel=2の場合は、矩形画像領域DRのx座標が4の倍数+2の座標に画素データを書き込む。
SCU203_0は、従属パラメータpsel=3の場合は、矩形画像領域DRのx座標が4の倍数+3の座標に画素データを書き込む。
[SCU203_0の動作シーケンス]
図2、図3、図27に示すSCU203_0の動作シーケンスについて説明する。
なお、SCU203_1〜3は、SCU203_0と基本的に同じである。
SCU203_0は、4組の内蔵プロセッサ、4組のプログラムメモリ、4組のプログラムカウンタを備えている。
SCU203_0は、図1に示すホストプロセッサ101から入力したプログラムをプログラムメモリに格納する。
SCU203_0の内蔵プロセッサは、プログラムカウンタに従って、上記プログラムメモリからプログラムを読み出して実行する。当該プログラムには、前述したデータ変換コマンドWI#data#op,WO_data_opが含まれる。
上記内蔵プロセッサは、例えば、RISCプロセッサである。
上記内蔵プロセッサは、PU_SIMD処理回路#0〜#3の処理開始を指示する。
上記内蔵プロセッサは、矩形画像領域WR/AR/BR/CR/DRのアドレス、サイズを指定すると共に、アドレスを即値加算、条件分岐などを行う。
上記内蔵プロセッサが実行するコマンド(命令)は、instruction,operand0,displacementからなる。
上記内蔵プロセッサは、finish命令を実行すると、ホストプロセッサ101に割り込み信号を出力してプログラムの実行を終了する。
SCU203_0の内蔵プロセッサが実行するコマンド(命令)について説明する。
図61に示すように、上記内蔵プロセッサは、コマンド「exec」を実行する。
コマンド「exec」は、データ変換コマンドWI#data#op,WO#data#op、並びにそのパラメータであるWI#data#op#param,WO#data#op#paramを指定する。
コマンド「exec」は、DMA転送を指定するために用いられる。
図62に示すように、上記内蔵プロセッサは、コマンド「branch」を実行する。
コマンド「Branch」には、条件なしの静的ループ処理と、条件付の処理とがある。
当該条件付の処理では、矩形画像領域の座標ax,ay,bx,by,cx,cy,dx,dyと即値との比較結果を基に条件を判断する。
図63に示すように、上記内蔵プロセッサは、コマンド「Set」を実行する。
コマンド「Set」は、矩形画像領域ax,ay,aw,ah,bx,by,bw,bhなど座標指定、矩形画像領域cx,cy,cw,ch,dx,dy,dw,dhなどの座標指定などを規定する。
コマンド「Set」は、矩形画像領域WRを規定するbp,wwを指定する。
コマンド「Set」は、DMA領域を規定する転送元開始アドレス、転送先開始アドレス、転送サイズを指定する。
図64に示すように、上記内蔵プロセッサは、コマンド「add/sub」を実行する。
コマンド「add/sub」は、矩形画像領域ax,ay,aw,ah,bx.by,bw,bhなどの座標の加減算、並びに矩形画像領域cx,cy,cw,ch,dx,dy,dw,dhなどの座標の加減算を行う。
また、コマンド「add/sub」は、dxにおいてのみ、PU_SIMD処理回路#0〜#3から設定可能な値を加算可能である。
図65(A)に示すように、上記内蔵プロセッサは、特別な命令としてプログラムカウンタのみ増加させる「no operation」や、プログラム終了を指示する「finish program」などを実行できる。
データ変換コマンドの従属パラメータであるWI#data#op#param,WO#data#op#paramは、例えば、図65(B)に示すように規定される。
当該従属パラメータは、データ変換コマンドと対応付けて、SCU203_0のメモリに格納される。
図66に示すように、SCU203_0は、コマンド「start PU_SIMD」を実行することで、PU_SIMD#0〜#3に処理を開始させる。
SCU203_0は、データ変換コマンドWI#data#opを実行することで、矩形画像領域WRから読み出したデータを変換してPU_SIMD処理回路#0〜#3に出力する。
SCU203_0は、データ変換コマンドWO_data_opを実行することで、PU_SIMD#0〜#3から入力したデータを変換して矩形画像領域WRに書き込む。
本実施形態では、SCU203_0の処理(スレッド)は、図1に示すホストプロセッサ101が開始指示する。
PU_SIMD(Single Instruction Multiple Data)処理回路#0〜#3は各PU_SIMD処理に対応した個別のスレッドで動作し、当該スレッドは、SCU203_0あるいはホストプロセッサ101によって開始指示される。
データ変換コマンドWI#data#op,WO_data_opのコマンド、並びに当該コマンドによって入出力されるデータは、図67に示すように、SCU203_0内のキューに蓄えられ、順次実行、並びに処理される。
すなわち、内蔵プロセッサは、記憶領域のリード/ライト共に、コマンドを先行発行して実行する。
そして、内蔵プロセッサは、データ変換コマンドWI#data#op, WO#data#opの実行でアドレス計算を行い、そのアドレスをリードおよびライト別にキューに蓄える。
また、リードおよびライトに伴うデータもキューに蓄える。
[画像処理装置100の全体動作例]
図1に示すホストプロセッサ101はプログラムPRGを実行し、これにより図2に示すSCU203_0〜3にプログラムを指定する。
SCU203_0〜3は、ホストプロセッサ101によって指定されたプログラムを実行して得たそれぞれ4本ずつの所定のスレッドに基づいて、それぞれPUアレイ202_0〜202_3内のPEの処理進行に応じてメモリシステム105あるいはローカルメモリ204_0〜3に対するアクセスを実行する。
PUアレイ202_0〜202_3内の図3および図4に示すPEは、SCU203_0〜3あるいはホストプロセッサ101の制御に従って、SCU203_0〜3によるメモリアクセス結果を利用しながら、SCU203_0〜3とは別のスレッドで動作する。
各PUアレイ202_0〜202_3内では、SCU203_0〜203_3によって、PU_SIMD#0〜#3が並列あるいは直列に選択的に接続されて動作する。
PU_SIMD#0〜#3内では、図4に示すように、16個のPE0〜15がシリアルに接続され、隣接するPE間で必要に応じて画素データの入出力が行われる。
以上説明したように、本実施の形態の画像処理装置100によれば、画像処理エンジン102において、PUアレイ202_0〜202_3内のPU_SIMD(Single Instruction Multiple Data)単位を共通のスレッドで動作させ、当該スレッドとは別のスレッドでSCU203_0〜3を動作させる。
これにより、膨大な画素データについて、それに対する処理が予め特定でき、且つ相互に独立であることを利用して、複数のプロセッサエレメント(PE)において共通のスレッドを基に並列的に実行できる。
SCU203_0〜3のスレッドを、PUアレイ202_0〜202_3のスレッドとは別にすることで、PEの処理のバックエンドで、当該PEの処理に係わるデータに関する記憶領域に対してのアクセスを効率的に実現できる。
画像処理エンジン102によれば、PUアレイ202_0〜202_3の処理に係わるデータについての記憶領域へのアクセスをSCU203_0〜3が行うことで、PUアレイ202_0〜202_3のPEは記憶領域へのアクセス処理を行う必要がなく、画像処理を効率的に行うことができる。
画像処理エンジン102によれば、図3に示すようにプロセッサユニットPUがシリアル接続された両側のプロセッサユニットPUに画素データを入出力できると共に、図4に示すようにプロセッサユニットPU内でシリアル接続されたPEが両側のPEに画素データを入出力できる。これにより、各PEが独立してメモリアクセスする場合に比べて、メモリアクセス回数を大幅に削減できる。
本発明は上述した実施形態には限定されない。
すなわち、本発明の技術的範囲またはその均等の範囲内において、上述した実施形態の構成要素に関し、様々な変更、並びに代替を行っても本発明は適用される。
例えば、図2に示す例では、制御プロセッサ201によって、複数のSCU203_0〜3を統括して制御する例を説明したが、図68に示すように、SCU203_0〜3の各々を制御する制御プロセッサ201_0〜201_3を個別に設けてもよい。
<第2実施形態>
本第2実施形態の画像処理装置100は、図1に示すような第1実施形態と同様の構成を有するが、画像処理エンジン102の構成が第1実施形態と異なる。画像処理エンジン102以外の画像処理装置100の構成は、第1実施形態と同様であるので、ここでは説明を省略する。
以下、第2実施形態の画像処理エンジン102の構成について説明する。
[画像処理エンジン102]
第1実施形態と同様、画像処理エンジン102は、プログラマブルな画像プロセッサであって、画像処理装置100で実行されるアプリケーションプログラムに応じてホストプロセッサ101が指示する画像処理を実行する。
画像処理の対象となる画像データとしては、センサI/F106を介して入力されるカメラモジュール107で撮影されたデータ、メモリI/F104を介して入力されるメモリシステム105に格納されたデータ、記憶媒体I/F108を介して入力される記憶媒体109に格納されたデータ、あるいはコーデックエンジン103から与えられるデータ、コーデックエンジン103で処理されたデータがある。
画像処理エンジン102は、自らの処理結果を、メモリI/F104を介してメモリシステム105に格納し、記憶媒体I/F108を介して記憶媒体109に格納し、コーデックエンジン103に出力し、内蔵表示装置I/F110を介して内蔵表示装置111に表示し、あるいはビデオI/F112を介して外部の装置に出力する。
図69は、第2実施形態の画像処理エンジン102の全体構成図である。
図69に示すように、画像処理エンジン102は、制御プロセッサ(CPU)201、PU(プロセッサ・ユニット)アレイ202_0〜202_3、並びにローカルメモリ204_0〜204_3を有する。
制御プロセッサ201は、画像処理エンジン102全体を制御するプロセッサであって、画像処理エンジン102の各構成要素に対する設定や起動、およびSIMD(Single Instruction Multiple Data)型プロセッサアレイであるPUアレイ202での並列化が困難な処理の実行を担う。
PUアレイ202_0〜202_3は、プログラマブルな演算部であって、後述するように複数のSIMD型プロセッサアレイから構成される。
また、本実施形態のPUアレイ202_0〜203_0は、後述するようにSCU(Stream Control Unit)をその内部に有する点が第1実施形態と異なる。
ローカルメモリ204_0〜204_3は、画像処理エンジン102のワーキングメモリであって、メモリシステム105に格納された画像データの一部の保持、それぞれPUアレイ202_0〜202_3で処理された中間結果の格納、それぞれPUアレイ202_0〜202_3で実行されるプログラムや各種パラメータの格納などを行う。
画像処理エンジン102は、ホストプロセッサ101の制御により、例えば、図69に示すPUアレイ202_0〜202_3を共通のスレッドで動作させる。
共通のスレッドとは、例えば、共通のプログラムに基づいて処理を進めることを意味する。
[PUアレイ202_0〜202_3]
PUアレイ202_0について説明する。
PUアレイ202_1〜202_3は、PUアレイ202_0と同様の構成を有している。
図70は、図69に示すPUアレイ202_0の構成図である。
図70に示すように、PUアレイ202_0は、4つのPU_SIMD(Single Instruction Multiple Data)処理回路#0〜#3と、それぞれのPU_SIMDに対応して接続されたSCU#10〜#13を有する。
PU_SIMD処理回路#0は、コントロールユニット303_0と、4つのプロセッサユニットPU#00〜#03を有する。
4つのプロセッサユニットPU#00〜#03は、同一命令で動作するSIMD型プロセッサを構成する。
4つのプロセッサユニットPU#00〜#03は、一次元状に横接続されている。
プロセッサユニットPU#00〜#03間の接続を隣接するプロセッサユニット間に限定するとともに、SCUからのデータ供給に用いるI#BUSを4つのプロセッサユニットで共有することで、配線を少なく出来るとともに、バス制御を簡単にできる。
プロセッサユニットPU#00〜#03は、シリアルに接続したことで、隣接画素データを頻繁に使用する画像処理において、ローカルメモリを介さずに画素データを直接的に、隣接するプロセッサユニットに出力でき、処理時間を短縮できる。
PU_SIMD処理回路#1〜#3は、PU_SIMD処理回路#0と同様の構成を有している。
[プロセッサユニットPU#00]
プロセッサユニットPU#00の構成については、第1実施形態において図4と関連付けて行った説明と同様であるため、ここでは説明を省略する。
SCU(Stream Control Unit)#10から入力データバスI_BUS0を介してプロセッサユニットPU#00に入力したデータは、PU#00内の入力ラインバッファ401に書き込まれる。
プロセッサエレメントPE0〜15の各々は、入力ラインバッファ401から読み出したデータを用いて演算を行い、その演算結果を出力ラインバッファ404に書き込む。
SCU#10は、出力ラインバッファ404から演算結果を読み出す。
図70に示すように、PUアレイ202_0は、4つのPU_SIMD処理回路#0〜#3を独立して並列に動作させることも、直列動作させることもできる。直列に動作させる場合には、SCU間の接続を利用して接続される。
図70に示すコントロールユニット303_0は、図示されない命令格納用メモリを有し、当該命令格納用メモリから読み出した命令をデコードして得た制御信号を、PU_SIMD#0内の全てのPEに出力する。
コントロールユニット303_0内には、ここには図示されないプログラムフロー制御用ループレジスタや、PE内のストリームレジスタにアクセスするためのポインタレジスタが含まれる。
ループレジスタは、プログラム中のループ回数を制御するレジスタであり、制御プロセッサ201が設定するか、あるいはプログラム実行時に命令により設定することができる。
命令によりループレジスタを設定する場合に、PE内のレジスタ値をソースオペランドとして指定することができる。その際には複数のPEのうち、予め決められたPE、例えば図中左端のPE、例えば、プロセッサユニットPU#00のPE0、のレジスタ値を使用する。
ポインタレジスタについても、PE内のレジスタ値をソースオペランドとして指定することができるが、ループレジスタの場合と同様特定のPEのレジスタ値を使用する。
コントロールユニット303_1から303_3についても同様である。
以下、カメラモジュール107を用いて撮像された静止画像を記録する場合を例に取り上げ、画像処理装置100における処理手順ならびに処理分配を説明する。
カメラモジュール107内の撮像素子で撮影されたデータは、水平スキャンラインごとにセンサI/F106を介して読み出され、画像処理エンジン102に出力されると共に、メモリシステム105に格納される。この際、画像処理エンジン102では、検波処理の一部が実行される。
メモリシステム105に1フレーム分の画像データが格納されると、画像処理エンジン102は、内部のPU_SIMD処理回路を効率よく並列動作させるため、1フレーム分の画像データのうち、必要な矩形画像領域を読み出しながら検波処理の残りや各種カメラ信号処理、ならびに各種画像処理を実行する。
画像処理エンジン102の処理結果は、メモリシステム105に格納される。
画像処理エンジン102は、解像度変換も行う。解像度変換された画像データは、内蔵表示装置I/F110を介して内蔵表示装置111に表示される。
コーデックエンジン103は、メモリシステム105に格納されている画像処理エンジン102により処理された複数フレームの画像データを用いて画像圧縮を行う。圧縮された画像データは、記憶媒体I/F108を介して記憶媒体109に記録される。
画像処理エンジン102は、複数個のPUアレイ202_0〜202_3で構成されるが、ぞれぞれのPUアレイ202_0〜202_3は、フレーム内の異なる領域を処理する。
本第2実施形態のように4つのPUアレイ202_0〜202_3で構成する場合、例えば第1実施形態において図5に関連付けて説明したように、各PUアレイ202_0〜202_3に領域を割り当てることができる。
PUアレイ202_0〜202_3の各々は、前述したように64個のPEから成るPU SIMD処理回路を複数個有し、例えば第1実施形態において図6に関連付けて説明したように、各PUアレイ202_0〜202_3に割り当てた領域を、さらに横64ピクセル幅の矩形画像領域に分割し、各ピクセルを1つのPEに割り当てることができる。
この時、各PEは、第1実施形態において図7に関連付けて説明したように、自らの割り当てられた縦方向のピクセル列を順に処理する。
例えば、PUアレイ202_0が第1実施形態の図8に示すように、5×5画素のフィルタ処理を行う場合を考える。
この時、PUアレイ202_0内の各PEは、第1実施形態の図8に示すように、処理対象の画素位置Pixelの画素データのフィルタ処理を行うために、画素位置Pixelを中心とした5×5の画素位置の画素データを用いる。
PUアレイ202_0内の各PEは、図8に示す矢印(図中下向き)に順に処理対象の画素位置を移動させる。
PUアレイ202_0内の各PEが画素位置Pixelの上記5×5画素のフィルタ処理を終了すると、は、第1実施形態の図9に示すように、次の1ライン分の画素位置の画素データをローカルメモリ204_0あるいはメモリシステム105から読み出してPUアレイ202_0内のプロセッサユニットPUの入力ラインバッファ401に書き込む。
そして、PUアレイ202_0内の各PEは、第1実施形態の図10に示すように、次の画素位置Pixel_nextの画素データの5×5画素のフィルタ処理を行う。
なお、以上の説明では図70に示すPU_SIMD#0を中心に説明したが、PU_SIMD#1〜#3はPU_SIMD#0と同様である。
PUアレイ202_1〜202_3は、PUアレイ202_0と同様である。
[プロセッサエレメントPE]
次に、PEn(n=1〜14)について説明する。
なお、PE0はPE間ではPE1との間でのみデータ入出力を行い、PE15はPE14との間でのみデータ入出力を行う点を除いてPEnと同一である。
図71は、第2実施形態におけるPEnの構成図である。
図71に示すように、PEnは、マルチプレクサMUX1000、1001、ストリームレジスタSR0〜SR3等の各種レジスタ、演算論理ユニットALUを有する。
入力ラインバッファ401は、SCU(Stream Control Unit)から送られる入力データを受け取るためのバッファである。1つのPEあたり16bitのデータを一段分保持することができる。
出力ラインバッファ404は、PEでの演算結果をSCUへ送るためのバッファである。1つのPEあたり16bitのデータを一段分保持することができる。
ストリームレジスタSR0〜3は、16bit幅、エントリ数16のレジスタファイルであり、各PEは合計4本のSRを有する。
ストリームレジスタSR0〜3は、主に、SCUから供給される演算に必要なデータの格納や、演算結果の一時待避を行うためのレジスタで、直接アドレス指定による参照による参照が可能である。各ストリームレジスタごとに最大4つのポインタを定義できる。各ポインタは、以下の3つの値を持つ。すなわち、ポインタ定義領域の始点である「Start」と、ポインタ定義領域の終点である「End」と、現在のポインタ位置である「Current」である。ただし、End ≧ Startでなければならない。2つのポインタのStartとEndを同一にし、一つをReadポインタ、他方をWriteポインタとして使用することにより、FIFOとして機能させることができる。また、ポインタごとにStartとEndを変えてもよい。
また、同一ストリームレジスタ内の全く独立したポインタについて、StartとEndで指定する領域が互いに重複することを禁止はしない。
以下、ストリームレジスタSR0〜3に関連する機能について述べる。
1)ストリームレジスタSR0〜3の参照
ストリームレジスタSR0〜3に対して書き込みあるいは読み出しを行う際の参照方法としては、ポインタ参照と直接参照の2種類がある。
ポインタ参照は、指定したポインタのCurrentからのオフセットで参照する。オフセット値は、読み出しの場合には0〜15の範囲の正の整数、書き込みの場合は0〜3の範囲の正の整数である。
直接参照は、ストリームレジスタSR0〜3内のエントリを即値で指定する。即値は、0〜15の範囲の正の整数である。
2)ポインタ操作
以下に示すようなポインタ操作を実現する命令が用意されている。
a)ポインタが持つ値の即値指定
Start、Endの各値を即値により指定する。
b)Current値に対する即値加算
加算する即値は、−8〜7の範囲の整数である。
c)ポインタが持つ値の初期化
Start、End、Currentの各値は、リセット後に、それぞれ、0、15、0に初期化される。また、Current値をStart値に初期化する命令も用意されている。
3)Wraparound
ストリームレジスタSR0〜3に対するポインタ参照やポインタ操作を行った際に、<Start,End>で定義される領域を超えることがある。この場合には、以下のようなWraparoundが行われる。ここで、ストリームレジスタSR0〜SR3のエントリへのWraparound前と後のindexをそれぞれidxbw、idxawとすると、
idxaw = (idxbw > End)?
Start + (idxbw-End-1) % (End-Start+1) : idxbw
idxaw = (idxbw < Start)?
End - (Start-idxbw-1) % (End-Start+1) : idxbw
である。
4)連結モード
4つあるストリームレジスタSR0〜3のうち、SR0とSR1あるいはSR2とSR3の組み合わせについて、同一ポインタで指定されるポインタ定義領域どうしを連結して使用することができる。例えば、SR0とSR1の組み合わせについて、ポインタ0を連結した場合には、SR0用ポインタ0のStartとEndで定義される領域とSR1用ポインタ0のStartとEndで定義される領域が連結される。あるポインタについて連結モードを指定すると、ストリームレジスタペアのうち偶数側のポインタのみ有効となる。偶数側のポインタ値がEndを超えると、自動的に奇数側のポインタ領域にポインタ値が変更され、あたかも両領域が連続しているように使用することができる。また、奇数側のポインタ領域のEndを超えると、自動的に偶数側のStart値に変更されるWraparoud機能も実現する。この機能により、2つのストリームレジスタの空き領域を有効利用したり、16エントリを超えるポインタ領域を定義したりすることができる。ポインタの動作モードとして連結モードが設定された場合には、偶数側のポインタのみ使用できる。連結モードの設定は、ストリームレジスタ単位ではなく、ポインタ単位で設定する。したがって、各ポインタに対する連結モードの設定は互いに独立している。
PEが有する他のレジスタ群について簡単に説明する。
レジスタS0〜S3は、4個の汎用レジスタであり、それぞれ16bit長である。32bitデータを扱う演算を行う場合には、連続する2つのレジスタ、すなわちS0とS1あるいはS2とS3をレジスタ・ペアとしてオペランド指定することができる。
レジスタTEMPSはデータ長が16ビットの一時退避用レジスタである。
レジスタTEMPSは、共有機能ユニット403を利用する際に用いられるレジスタであり、共有機能ユニット403へのアクセス以外の場合では、ワーキングレジスタとして使用できる。これらのレジスタは、算術論理演算命令のソースオペランドとデスティネーションオペランドの両方に指定できる。
レジスタCONDは、主に条件実行を行う際に用いられるデータ長が4ビットのコンディションレジスタである。算術論理演算のデスティネーションオペランドとして指定可能で、その際には、演算結果のうちの任意の1ビット、演算論理ユニットALUにおける演算の結果、キャリーが立った事を示すキャリーフラグ、あるいは演算結果が0であることを示すゼロフラグのどれかの選択とコンディションレジスタのどのビットに反映させるかを指定する。
レジスタPENUMは、自身のプロセッシングエレメント番号(0〜63)が格納されているデータ長が6ビットのプロセッサ番号レジスタであり、読み出し専用である。
図71においてConstと記載されたパスは、レジスタCONSTANTをソースオペランドとして指定した場合に定数値を渡すパスであり、16bit幅である。レジスタCONSTANTは、複数のレジスタで構成される。レジスタCONSTANTは、PE毎に持つわけではなく、SCU内に持たれる。
PEでは、演算を行う際に、自身のレジスタだけでなく、隣接するPEのレジスタを参照することができる。すなわち、PE1はPE0とPE2のレジスタを参照できる。ただし、隣接PE間で参照できるのは、汎用レジスタS0〜S3のみである。図71において、To Left PE、To Right PE と記載したパスが、それぞれ左隣接PE、右隣接PEに汎用レジスタS0〜S3の値を渡すパスである。また、From Left PE、From Right PE と記載したパスが、それぞれ左隣接PE、右隣接PEから選択されたレジスタの値を受け取るパスである。本第2実施形態のPEは、左隣接PE用と右隣接PE用とに別々のマルチプレクサを用意しているので、左右それぞれ異なる汎用レジスタ参照を同一サイクルで行うことができるので、処理を早く行うことができる。なお、PE0及びPE15が参照できるのは、左右いずれかのPEのレジスタのみとなる。
次に演算論理ユニットALUについて説明する。
図71に示すように、PEは3種類の演算論理ユニットを持ち、これら3つの演算論理ユニットを用いた演算を同時実行可能である。3種類の演算論理ユニットは、乗算を行うユニットであるOperator Resource Mと、主に加減算や比較演算を行うユニットであるOperator Resource A/Bと、主に論理演算やシフトを行うユニットであるOperator Resource Lである。
PEでの演算に必要なデータは、SCUによって入力ラインバッファ401に書き込まれる。入力ラインバッファ401の容量は、1PEあたり16bit幅1段分である。また、PEで演算された結果は出力ラインバッファ404に書き込まれる。入力ラインバッファ401と同じく、その容量は、1PEあたり16bit幅1段分である。
PEは、ロード命令により入力ラインバッファ401に書き込まれたデータをストリームレジスタSR0〜SR3に転送する。ストリームレジスタSR0〜SR3へは、入力ラインバッファの他に、レジスタCONDからのロードも可能である。逆に、ストリームレジスタSR0〜SR3からレジスタCONDへデータを移動する命令も用意されている。
出力ラインバッファ404への書き込みは、通常は演算命令のデスティネーションオペランドに直接指定することにより行うが、レジスタCONDから出力ラインバッファ404へデータを移動する命令も用意されている。
これらデータ転送は、演算論理ユニットALUが行う演算と並行して行われる。
すなわち、第2実施形態のPEでは、同時に複数の演算を行うことができる。
共有機能ユニット403については、第1実施形態において行った説明と同様であるため、説明を省略する。
[SCU(Stream Control Unit)#10〜#13]
以下、SCU#10について説明する。
SCU#11〜#13は、SCU#10と同じである。
SCU#10は、図70等に示すように、複数のPU_SIMD(Single Instruction Multiple Data)処理回路#0に対して、それを構成する個々のプロセッサエレメントPEの処理に必要なデータを効率よくデータを入出力するための制御を行う。
同様に、SCU#11はPU_SIMD処理回路#1に対して、SCU#12はPU_SIMD処理回路#2に対して、SCU#13はPU_SIMD処理回路#3に対して、それを構成する個々のプロセッサエレメントPEの処理に必要なデータを効率よくデータを入出力するための制御を行う。
SCU#10は、処理に必要なデータを半導体メモリなどに代表される記憶装置に収納する。
PU_SIMD処理回路#0〜#3は、SIMD型プロセッサであるため、すべてのPEに対する入出力は時間的に同時に行われる。従って、SCU#10によるPU_SIMD#0に対する入出力は、PEの個数分の入出力データを同時に入出力することになる。以下同時に入出力されるデータを、ストリームデータと呼ぶことにする。
一方、PU_SIMD処理回路#0〜#3は画像情報の処理を主に行うが、処理対象である画像情報は、メモリなどの記憶装置において、物理的な1次元のアドレスで管理された記憶領域内に、論理的な2次元記憶領域を確保して記憶されている。その画像データの基本単位は画素データと呼ばれる。
SCU#10は、PU_SIMD処理回路#0と、メモリシステム105およびローカルメモリ204_0との間に位置し、複数の画素データをストリームデータに変換して入出力を行う機能を持っている。
次に、SCU#10の構造について説明する。
図72は、SCU#10の構造を示すブロック図である。
図72に示すように、SCU#10は、書き込み部#101と、読み込み部#102と、制御部#103とからなる。
書き込み部#101は、ローカルメモリ204_0またはメモリシステム105(以下記憶領域)への書き込みを行う。
読み込み部#102は、記憶領域からの読み込みを行う。
制御部#103は、SCU#10の全体的な制御を行うCPU等の制御装置であり、データ処理やPU_SIMD処理回路#0へのデータ供給を行う。
以下、SCU#10が記憶領域内に定義する矩形画像領域について説明する。
SCU#10が扱う記憶領域内の矩形画像領域の階層構成を、図73を参照して説明する。
図73に示すように、SCU#10は、記憶領域中に、入力作業領域として矩形画像領域WIRを指定する。
SCU#10は、矩形画像領域WIR内に、画素データの読み出し元である矩形画像領域BRを指定する。
SCU#10は、ホストプロセッサ101から入力したプログラムに基づいて、矩形画像領域BRから読み出した画素データを、PU_SIMD処理回路#0〜#3が必要とするストリームデータに変換するデータ変換コマンドWI#data#opを実行(指定)する。
SCU#10は、後述するように矩形画像領域BR及びWI_data_op指定の一連の繰り返し処理をプログラム可能である。
図73に示すように、SCU#10は、記憶領域中に、出力作業領域として矩形画像領域WORを指定する。
SCU#10は、矩形画像領域WOR内に、画素データの書き込み先である矩形画像領域DRを指定する。
SCU#10は、PU_SIMD#0の出力ストリームデータから、矩形画像領域DRへのデータ変換コマンドWO#data#opを実行する。
SCU#10は、後述するように矩形画像領域DR、WO_data_op指定は、一連の繰り返し処理をプログラム可能である。
SCU#10は、矩形画像領域BRは矩形画像領域WIR内の、矩形画像領域DRは矩形画像領域WOR内の、任意の位置への配置と移動可能である。
SCU#10は、矩形画像領域WIR或いはWOR内において、矩形画像領域BR或いはDRを、2次元論理座標で指定が可能である。
SCU#10は、記憶領域に対して矩形画像領域WIR或いはWORを物理アドレスで指定できる。
SCU#10は、矩形画像領域WIR、WOR、BR、DR内部の画素データがアクセスされた場合には、記憶領域へアクセスが必要になるため、論理アドレスから物理アドレスへの変換を行って記憶領域にアクセスする。
図74は、SCU#10内部に設定される多重矩形画像領域に関する処理を行う機能を説明するための図である。
図74に示すように、SCU#10は、PU_SIMD処理回路#0に、記憶領域内の矩形画像領域WIR0及びWOR0を割り当てる。
矩形画像領域WIR0及びWOR0は、メモリシステム105やローカルメモリ204_0などの記憶領域内に規定される。
また、本実施形態のSCU#10は、記憶領域中にWIR0〜WIR7の8種類のWIRと、WOR0〜WOR7までの8種類のWORを定義することが可能である。更に、それぞれの矩形画像領域WIR0〜WIR7に矩形画像領域BR0〜BR7が、WOR0〜WOR7にDR0〜DR7が、それぞれ1つずつ規定される。
図72に示すSCU#10は、データ変換コマンドWI_data_opにより、矩形画像領域BR内のデータをストリームデータへ変換して、出力バッファout_bufにWriteする。
また、SCU#10は、データ変換コマンドWO#data#opにより、PU_SIMD処理回路#0から入力して入力バッファin#bufに収納されているストリームデータをデータ変換して矩形画像領域DRにWriteする。
図72を参照して上述したように、矩形画像領域WIR内に矩形画像領域BR、WOR内にDRを階層構造で規定することで、例えば、矩形画像領域WIR内で矩形画像領域BRを、WOR内でDRを相対的に移動させる場合に、基準座標を矩形画像領域BR、DR内のローカルな座標に加算する形式でのアドレス表現が可能になり、プログラミングが簡単になる。
本実施形態では、矩形画像領域の個数や多重指定の階層数などを具体的な数字で表現しているが、その構成や数量は組み合わせ自由であり、幅広い画像処理の必要性に応じて構成を変えることが可能である。
すなわち、第1実施形態のSCU203_0が矩形画像領域内にAR或いはCRを設定し、さらにその中にBR或いはDRを設定していたが、本第2実施形態のSCU#10によれば、WRの中にAR及びCRを設定せずにBR及びDRを設定しているので、SCU#10の動作は簡略化され、動作速度が速くなる。
次に、SCU#10がデータ転送のために行う接続を説明する。
[システムバス接続]
図1に示すシステムバス113は、SCU#10を、ホストプロセッサ101およびメモリシステム105などの他の処理モジュールを接続するバスであり、以下の特徴を有する。
(1)システムバス113は、LSIやSOC内部で標準化されたバス規格を採用することが可能である。
(2)システムバス113のバス幅は128ビットであり、連続データ転送(バースト転送)が可能な構成とすることで、バス使用効率を向上できる。
(3)システムバス113上の記憶装置(例えば、メモリシステム105)に対して、SCU#10はバスマスタとしてアクセスする。
(4)システムバス113上のSCU#10以外のバスマスタから、SCU#10の内部レジスタやSCU専用記憶装置(例えば、、ローカルメモリ204_0)へのアクセスを行う。
(5)システムバス113は、データ転送効率や機能が満足されるのであれば、バス規格にはこだわらない選択が可能である。
[SCU#10の専用記憶領域接続]
SCU#10は、専用記憶領域として専用記憶装置を接続することが可能である。
専用記憶装置はSRAMやDRAMなどの半導体メモリがSOC内部と外部のどちらにあろうとも選択可能である。
上記専用記憶装置は、システムバス113より広帯域なバスに接続される。
上記専用記憶装置は、1つのSCU#10が占有して使用する目的で用意されている。
システムバス113上のバスマスタから、上記専用記憶装置へのアクセスが可能である。
[PU_SIMD接続]
SCU#10には、PU_SIMD処理回路#0がバス接続される。
同様に、SCU#11にはPU_SIMD処理回路#1が、SCU#12にはPU_SIMD処理回路#2が、SCU#13にはPU_SIMD処理回路#3がバス接続される。
SCU#10からPU_SIMD処理回路#0へのストリームデータ入力は、PU_SIMD処理回路#0に256ビットの単方向バスを使用する。転送効率は256bit/clockである。
data/転送プロトコルとして2線式のハンドシェークを採用する。
SCU#10内部には出力バッファout_bufを用意する。
SCU#10から出力を行う場合は、PU_SIMD処理回路#0に対してアドレスを指定することでPU_SIMD処理回路内部レジスタを識別する。
PU_SIMD処理回路#0からSCU#10へのストリームデータ入力は、各PU_SIMDの256ビットの単方向バスを使用し、転送効率は256bit/clockである。
また、データ転送プロトコルとして2線式のハンドシェークを採用する。
SCU#10内部には入力用の入力バッファin_bufを用意する。
PU_SIMD処理回路#0からSCU#10へ入力を行う場合は、PU_SIMDに対してアドレスを指定することでPU_SIMD処理回路内部レジスタを識別する。
[SCU#10の物理論理アドレス変換]
SCU#10がアクセスする図73および図74を用いて説明した記憶領域内の矩形画像領域WR内部の画素対応位置Pixelは2次元論理アドレスで表現されているが、メモリシステム105およびローカルメモリ204_0は物理アドレスで表現されている。従って、SCU#10は、矩形画像領域WR内の矩形画像領域AR,BR,CR,DR内部に指定された画素対応位置Pixelに対してReadまたはWRiteを行う場合は、2次元論理アドレスから物理アドレスへのアドレス変換を行う。
アドレス変換の方法については、第1実施形態と同様であるためここでは説明を省略する。
[SCU#10による記憶領域へのアクセス]
SCU#10は、上述したように、記憶領域として、システムバス113に接続された大規模外部記憶装置であるメモリシステム105と、小規模な専用記憶装置であるローカルメモリ204_0を使用することができる。
メモリシステム105は、例えば、SCU#10が含まれるSOCの外部に接続されるDRAM-CHIPであり、一般的なDDRやRAMBUSなどのメモリchipなどである。
ローカルメモリ204_0は、例えば、SCU#10が含まれるSOC内部のSRAMやeDRAM (Embedede-DRAM:SCUと同じSOCに含まれるOn-chip DRAM)などである。
一般的に、DRAMは、Raw/Column/bankといったアドレスの階層構造があり、同一のRawに含まれる連続データアクセスは高速であるが、Raw境界をまたがった連続データアクセスや、遠隔のRaw同士の連続アクセスは、ページプリチャージなどの処置を必要とするため、低速となるという特徴がある。
本実施形態では、SCU#10は、例えば、メモリシステム105やローカルメモリ204_0として、DRAMを使用しているが、SRAMであっても問題はない。また、DRAMを使用する場合、上記アクセス性能の不連続性を可能な限り避ける目的で、記憶領域内の画素データの矩形画像配列を、ストリームデータ生成時には可能な限り同一ページに配置する工夫をすることで、DRAMアクセスの不連続性を可能な限り低減する処置をとることができる。
この工夫は、たとえば第1実施形態で説明した方法等により実現することができる。
[SCU#10による多重矩形画像領域定義(読み出し時)]
SCU#10は、上述したように、記憶領域内の矩形画像領域WIR内に、図75に示すように、2次元論理アドレス表現で多重矩形画像領域として、矩形画像領域BRを規定できる。
WIRは、記憶領域中に物理アドレッシング可能な連続領域として定義される。
また、WIR内部のpixelの指定は、SCUによって論理アドレッシングにより定義される。
ここでpixelは16bit固定サイズで論理アドレッシングされる。ただし、記憶領域の情報量削減のために、1pixelを12bit或いは8bitで表現することもでき、この場合は、記憶領域内部とSCUでのpixel表現の違い(例えば、記憶領域内では8bit/pixelの場合、SCU内部の1pixelが記憶領域内の2pixelと等価)に留意する必要がある。
また、WIR内にはBRを定義することができる。
BRは、WIR内に論理アドレス空間で定義される。
BRは、WIRの部分コピーではなくアドレスマッピング変換でアクセスする。
BRを定義する際には、WIRを逸脱して定義することもできるが、逸脱した場合のpixel値は保障されない。
BRは、BR0〜BR7の8種類存在する。
BR領域は、BRn(n=0〜7)ごとに矩形の左端座標(図75におけるbx、by)を指定できる。
BR領域の矩形サイズは、以下の8種類の中からwi_data_opによって指定される。すなわち、水平方向16、32、48、64pixelで垂直方向に1pixelの領域、あるいは水平方向に1pixelで垂直方向に16、32、48、64pixelの領域のいずれかである。
それぞれの位置関係を示す値として以下の座標値が使われる。
wirwは、矩形画像領域WIRのx方向矩形画像領域幅である。
bx及びbyは、矩形画像領域WIR内の矩形画像領域BRの2次元座標を示す。矩形画像領域WIRの左上を原点(0,0)とした座標系で、矩形画像領域BRの左上の画素対応位置Pixelの座標を示す。
bw及びbhは、矩形画像領域BRの幅と高さを示す。
x及びyは、矩形画像領域BR内の画素対応位置Pixelの2次元座標を示す。矩形画像領域BRの左上を原点(0,0)とした座標系である。
[SCU#10によるPU_SIMD#0へのデータ入力処理]
SCU#10は、矩形画像領域BRから画素データPixel(bx,by)を読み出し、これをデータストリームへデータに変換して(入力データ変換処理を行って)PU_SIMD処理回路#0に入力させる。この処理は、第1実施形態において説明した処理と同様であるため、説明を省略する。
[SCU#10による多重矩形画像領域定義(書き込み時)]
SCU#10は、記憶領域内の矩形画像領域WOR内に、図76に示すように、2次元論理アドレス表現で多重矩形画像領域として、矩形画像領域DRを規定できる。
WORは、記憶領域中に物理アドレッシング可能な連続領域として定義される。
また、WOR内部のpixelの指定は、SCUによって論理アドレッシングにより定義される。
ここでpixelは16bit固定サイズで論理アドレッシングされる。ただし、記憶領域の情報量削減のために、1pixelを12bit或いは8bitで表現することもでき、この場合は、記憶領域内部とSCUでのpixel表現の違い(例えば、記憶領域内では8bit/pixelの場合、SCU内部の1pixelが記憶領域内の2pixelと等価)に留意する必要がある。
また、WOR内にはDRを定義することができる。
DRは、WOR内に論理アドレス空間で定義される。
DRは、WORの部分コピーではなくアドレスマッピング変換でアクセスする。
DRを定義する際には、WORを逸脱して定義することもできるが、逸脱した場合のpixel値は保障されない。
DRは、DR0〜DR7の8種類存在する。
DR領域は、DRn(n=0〜7)ごとに矩形の左端座標(図76におけるdx、dy)を指定できる。
DR領域の矩形サイズは、以下の8種類の中からwo_data_opによって指定される。すなわち、水平方向16、32、48、64pixelで垂直方向に1pixelの領域、あるいは水平方向に1pixelで垂直方向に16、32、48、64pixelの領域のいずれかである。
それぞれの位置関係を示す値として以下の座標値が使われる。
worwは、矩形画像領域WORのx方向矩形画像領域幅を示す。
dx及びdyは、矩形画像領域WOR内の矩形画像領域DRの2次元座標を示す。矩形画像領域WRの左上を原点(0,0)とした座標系で、矩形画像領域DRの左上の座標を示す。
dw及びdhは、矩形画像領域DRの幅と高さを示す。
[PU_SIMD処理回路#0の出力データ変換処理]
PU_SIMD処理回路#0が出力したストリームデータは、入力バッファin_bufに書き込まれる。
SCU#10は、入力バッファin_bufからデータを読み出し、並べ替えなどのデータ変換処理を施した後に、矩形画像領域DRに書き込む。
また、SCU#10は、必要に応じて、入力バッファin_bufからデータを読み出し、マスクデータDR#maskに従った並べ替えなどのデータ変換処理を施した後に、矩形画像領域DRに書き込む。
これらの処理に関しては、第1実施形態においてSCU203_0が行う処理と同様であるため、説明を省略する。
[画像処理装置100の全体動作例]
図1に示すホストプロセッサ101はプログラムPRGを実行し、これにより図70に示すSCU#10〜#13にプログラムを指定する。
SCU#10〜#13は、ホストプロセッサ101によって指定されたプログラムを実行して得たそれぞれ4本ずつの所定のスレッドに基づいて、それぞれPUアレイ202_0〜202_3内のPEの処理進行に応じてメモリシステム105あるいはローカルメモリ204_0〜3に対するアクセスを実行する。
PUアレイ202_0〜202_3内のPEは、SCU203_0〜3あるいはホストプロセッサ101の制御に従って、SCU#10〜#13によるメモリアクセス結果を利用しながら、SCU#10〜#13とは別のスレッドで動作する。
各PUアレイ202_0〜202_3内では、SCU#10〜#13とPU_SIMD#0〜#3とがそれぞれ接続されて動作する。
PU_SIMD#0〜#3内では、16個のPE0〜15がシリアルに接続され、隣接するPE間で必要に応じて画素データの入出力が行われる。
以上説明したように、本第2実施形態の画像処理装置100によれば、画像処理エンジン102において、PUアレイ202_0〜202_3内のPU_SIMD(Single Instruction Multiple Data)単位を共通のスレッドで動作させ、当該スレッドとは別のスレッドでSCU#10〜#13を動作させる。
これにより、膨大な画素データについて、それに対する処理が予め特定でき、且つ相互に独立であることを利用して、複数のプロセッサエレメント(PE)において共通のスレッドを基に並列的に実行できる。更に、第2実施形態のPEでは、同時に複数の演算を行うことができるため、装置全体の処理速度が向上する。
また、SCU#10〜#13のスレッドを、PUアレイ202_0〜202_3のスレッドとは別にすることで、PEの処理のバックエンドで、当該PEの処理に係わるデータに関する記憶領域に対してのアクセスを効率的に実現できる。
画像処理エンジン102によれば、PUアレイ202_0〜202_3の処理に係わるデータについての記憶領域へのアクセスをSCU#10〜#13行うことで、PUアレイ202_0〜202_3のPEは大規模な記憶領域へのアクセス処理を行う必要がなく、画像処理を効率的に行うことができる。
画像処理エンジン102によれば、プロセッサユニットPUがシリアル接続された両側のプロセッサユニットPUに画素データを入出力できると共に、プロセッサユニットPU内でシリアル接続されたPEが両側のPEに画素データを入出力できる。これにより、各PEが独立してメモリアクセスする場合に比べて、メモリアクセス回数を大幅に削減できる。
更に、本第2実施形態の画像処理装置100によれば、PU_SIMD毎にSCUを割り当て個別に処理を行うので、SCUにかかる負荷が軽減され、画像処理に要する時間が短縮される。
更に、本第2実施形態の画像処理装置100によれば、SCU#10〜#13の記憶領域内に定義する多重矩形画像領域がWRとBR(或いはDR)の2重のみであるので、処理が簡略化され、画像処理装置100全体にかかる負荷が軽減され、処理に要する時間が短縮される。
本発明は上述した実施形態には限定されない。
すなわち、本発明の技術的範囲またはその均等の範囲内において、上述した実施形態の構成要素に関し、様々な変更、並びに代替を行っても本発明は適用される。
上述した実施形態では、多量のデータを扱う画像処理を例示したが、画像処理以外に各種のデータ処理についても本発明を適用可能である。
すなわち、本発明は、PU_SIMD処理回路のように、それぞれ複数のプロセッサエレメントPEを有する複数のプロセッサユニットPUを用いて信号処理を分散処理する場合に、各プロセッサユニットPU内の対応する各プロセッサエレメントPEに記憶手段からいかに効率よく対応するデータを提供する、あるいは、逆の各プロセッサエレメントPEからのデータを整合性を保って記憶手段に書き込むという処理を行う、各種の信号処理に適用できる。
本実施形態で説明したPUアレイ202_0〜202_3、SCU203_0〜203_3、プロセッサユニットPU、プロセッサエレメントPEの数は任意である。

Claims (18)

  1. 記憶部と、
    前記少なくとも1つの記憶部のうちいずれか所定の1つの記憶部へのデータの読み出し及び/または書き込みを制御する入出力データ制御部(SCU)と、
    前記入出力データ処理部が読み出したデータに対して所定の信号処理を行う信号処理部(PUアレイ或いはPU_SIMD)と、
    を有する信号処理装置であって、
    前記入出力データ制御部と、前記信号処理部とは別のスレッドに基づいて動作する
    信号処理装置。
  2. 前記信号処理部は、SIMD(Single Instruction Multiple Data)方式の信号処理回路(PU)を複数有し、
    前記複数の信号処理回路は互いに直列に接続されており、
    前記複数の信号処理回路の1は、前記入出力データ制御部が前記記憶部から読み出し前記信号処理部に入力したデータを基に前記所定の処理を行うとともに、隣接する他の信号処理回路との間でデータのやり取りを行う
    請求項1に記載の信号処理装置。
  3. 前記入出力データ制御部は、前記複数の信号処理回路のうち任意の少なくとも1つの信号処理回路を、直列或いは並列のいずれか一方で選択的に接続可能である
    請求項2に記載の信号処理装置。
  4. 前記信号処理部を所定数有する信号処理装置であって、
    前記信号処理部と同数の前記入出力データ処理部を有する
    請求項2に記載の信号処理装置。
  5. 前記入出力データ制御部は、内蔵メモリを有し、
    前記入出力データ制御部は、前記複数の信号処理回路のうち1の処理回路が他の処理回路の結果を用いる場合に、前記他の処理回路の処理の結果を前記内蔵メモリに書き込み、当該内蔵メモリから当該結果を前記処理回路に読み出す
    請求項2に記載の信号処理装置。
  6. 前記複数の信号処理回路は、それぞれ所定の数の信号処理エレメント(PE)を有し、
    前記所定の数の信号処理エレメントは互いに直列に接続されており、
    前記複数の信号処理エレメントの1は、前記入出力データ制御部が前記記憶部から読み出し前記信号処理部に入力したデータを基に前記所定の処理を行うとともに、隣接する他の信号処理回路との間でデータのやり取りを行う
    請求項2に記載の信号処理装置。
  7. 前記データは画像データであり、
    前記複数の信号処理回路は、画像データを処理する回路であり、
    前記入出力データ制御部は、前記記憶部内に階層的に矩形の画像データ記憶領域を規定し、
    前記矩形の画像データ記憶領域内のアドレスを当該矩形の画像データ記憶領域にローカルな2次元アドレスで管理し、
    前記記憶領域内における前記矩形の画像データ記憶領域の位置を示す基準アドレスと前記2次元アドレスとを基に、1次元アドレスを生成し、
    前記1次元アドレスを基に前記記憶部に記憶された画像データにアクセスする
    請求項2に記載の信号処理装置。
  8. 前記データは画像データであり、
    前記複数の信号処理回路は、画像データを処理する回路であり、
    前記入出力データ制御部は、
    前記記憶部から画像データを読み出して前記信号処理部に出力できる形式に変換し、及び/または前記信号処理部から入力された画像データを前記記憶部に記憶できる形式に変換する変換部(制御部)と、
    前記記憶手段から読み出され前記変換部が変換した画像データを、前記信号処理部に出力する前に一時保持する第1のバッファと、
    前記信号処理部から入力され前記変換部が変換した画像データを、前記記憶部に書き込まれるまで一時保持する第2のバッファと、
    を有する
    請求項1に記載の信号処理装置。
  9. 前記データは画像データであり、
    前記複数の信号処理回路は、画像データを処理する回路であり、
    前記入出力データ制御部は、前記記憶部から読み出した画像データを構成する複数の部分画像データを対応する前記複数の信号処理エレメントに出力する
    請求項6に記載の信号処理装置。
  10. 前記入出力データ制御部は、
    前記矩形の画像データ記憶領域内のあらかじめ決られた複数の基準アドレスの中から選択した基準アドレスを前記複数の処理回路に出力する
    請求項7に記載の信号処理装置。
  11. 前記入出力データ制御部は、
    前記記憶部から前記基準アドレスを読み出し、
    当該読み出した基準アドレスを基に、前記矩形の画像データ記憶領域へのアクセスを管理する
    請求項7に記載の信号処理装置。
  12. 前記入出力データ制御部は、前記複数の信号処理回路の各々に対応して前記第1及び第2のバッファをそれぞれ有し、
    任意の前記信号処理回路に対応付けられた前記第2のバッファから当該任意の信号処理回路が出力したデータを読み出して、他の信号処理回路に対応付けられた前記第1のバッファに書き込む
    請求項8に記載の信号処理装置。
  13. 前記入出力データ制御部は、前記複数の信号処理回路における共通の第1のスレッドの実行開始を指示する
    請求項1に記載の信号処理装置。
  14. 前記信号処理エレメントは、
    算術演算および/または論理演算を行う演算論理回路と、
    当該信号処理エレメントが直列に接続された他の2つの前記信号処理エレメントと前記入出力データ制御部とから入力したデータを記憶する第1レジスタと、
    前記第1レジスタから読み出され、前記他の2つの信号処理エレメント、前記演算論理回路および前記入出力データ制御部の何れかに選択的に出力されるデータを記憶する第2レジスタと
    を有する、
    請求項13に記載の信号処理装置。
  15. 前記第1のレジスタは、ポインタアクセス型のレジスタである
    請求項14に記載の信号処理装置。
  16. 前記演算論理回路における演算処理と、前記第1のレジスタおよび前記第2のレジスタに対するロードおよびストア処理は並列に実行可能である
    請求項15に記載の信号処理装置。
  17. 複数の前記第1のレジスタのうち少なくとも一つの前記第1のレジスタは、前記演算手段による前記演算処理を制御する制御フラグを設定するためのレジスタである
    請求項16に記載の信号処理装置。
  18. ホスト処理回路と、
    記憶部と、
    前記少なくとも1つの記憶部のうちいずれか所定の1つの記憶部へのデータの読み出し及び/または書き込みを制御する入出力データ制御部(SCU)と、
    前記入出力データ処理部が読み出したデータに対して所定の信号処理を行う信号処理部(PUアレイ或いはPU_SIMD)と、
    を有する信号処理装置であって、
    前記信号処理部は、前記ホスト処理回路あるいは前記入出力データ制御部の制御により、共通の第1スレッドに基づいて動作し、
    前記入出力データ制御部は、前記ホスト処理回路の制御により、前記第1スレッドとは別の第2のスレッドに基づいて動作する
    信号処理装置。
JP2007516362A 2005-05-20 2006-05-22 信号処理装置 Expired - Fee Related JP4893621B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007516362A JP4893621B2 (ja) 2005-05-20 2006-05-22 信号処理装置

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2005148301 2005-05-20
JP2005148301 2005-05-20
JP2007516362A JP4893621B2 (ja) 2005-05-20 2006-05-22 信号処理装置
PCT/JP2006/310174 WO2006123822A1 (ja) 2005-05-20 2006-05-22 信号処理装置

Publications (2)

Publication Number Publication Date
JPWO2006123822A1 JPWO2006123822A1 (ja) 2008-12-25
JP4893621B2 true JP4893621B2 (ja) 2012-03-07

Family

ID=37431382

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007516362A Expired - Fee Related JP4893621B2 (ja) 2005-05-20 2006-05-22 信号処理装置

Country Status (6)

Country Link
US (1) US8464025B2 (ja)
EP (1) EP1883045A4 (ja)
JP (1) JP4893621B2 (ja)
KR (1) KR101270925B1 (ja)
CN (1) CN1993709B (ja)
WO (1) WO2006123822A1 (ja)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8171263B2 (en) * 1999-04-09 2012-05-01 Rambus Inc. Data processing apparatus comprising an array controller for separating an instruction stream processing instructions and data transfer instructions
US8762691B2 (en) 1999-04-09 2014-06-24 Rambus Inc. Memory access consolidation for SIMD processing elements using transaction identifiers
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US7526630B2 (en) 1999-04-09 2009-04-28 Clearspeed Technology, Plc Parallel data processing apparatus
US20070242074A1 (en) * 1999-04-09 2007-10-18 Dave Stuttard Parallel data processing apparatus
US20080162875A1 (en) * 1999-04-09 2008-07-03 Dave Stuttard Parallel Data Processing Apparatus
US8169440B2 (en) 1999-04-09 2012-05-01 Rambus Inc. Parallel data processing apparatus
US7506136B2 (en) * 1999-04-09 2009-03-17 Clearspeed Technology Plc Parallel data processing apparatus
US8174530B2 (en) * 1999-04-09 2012-05-08 Rambus Inc. Parallel date processing apparatus
US7802079B2 (en) 1999-04-09 2010-09-21 Clearspeed Technology Limited Parallel data processing apparatus
US20080162874A1 (en) * 1999-04-09 2008-07-03 Dave Stuttard Parallel data processing apparatus
US20070294510A1 (en) * 1999-04-09 2007-12-20 Dave Stuttard Parallel data processing apparatus
US7966475B2 (en) 1999-04-09 2011-06-21 Rambus Inc. Parallel data processing apparatus
US8643661B1 (en) * 2006-06-21 2014-02-04 Marvell International Ltd. Non raster row pixel processing
US8009172B2 (en) * 2006-08-03 2011-08-30 Qualcomm Incorporated Graphics processing unit with shared arithmetic logic unit
US7952588B2 (en) * 2006-08-03 2011-05-31 Qualcomm Incorporated Graphics processing unit with extended vertex cache
US7787021B2 (en) * 2006-10-30 2010-08-31 Texas Instruments Incorporated Programmable architecture for flexible camera image pipe processing
US7797514B2 (en) * 2006-11-16 2010-09-14 Texas Instruments Incorporated Scalable multi-threaded sequencing/synchronizing processor architecture
JP2010003151A (ja) * 2008-06-20 2010-01-07 Renesas Technology Corp データ処理装置
JP5100611B2 (ja) * 2008-10-28 2012-12-19 株式会社東芝 画像処理装置
US8797376B2 (en) * 2010-05-28 2014-08-05 Polycom, Inc. Videoconferencing system with enhanced telepresence using a single wide aspect ratio camera
US9552206B2 (en) * 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
KR101048413B1 (ko) * 2010-12-30 2011-07-11 재단법인 광양만권 유아이티연구소 통합 에너지 관리 클라이언트용 엠씨유
KR20130043322A (ko) * 2011-10-20 2013-04-30 삼성전자주식회사 디스플레이 컨트롤러 및 이를 포함하는 디스플레이 장치
US9501331B2 (en) * 2012-08-09 2016-11-22 Fujitsu Limited Satisfiability checking
WO2015035306A1 (en) * 2013-09-06 2015-03-12 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with token-based very long instruction word architecture
US9606801B2 (en) 2013-09-06 2017-03-28 Huawei Technologies Co., Ltd. Method and apparatus for asynchronous processor based on clock delay adjustment
CN104837006B (zh) * 2014-02-11 2017-11-10 京元电子股份有限公司 半导体元件测试系统及其影像处理加速方法
US9665372B2 (en) 2014-05-12 2017-05-30 International Business Machines Corporation Parallel slice processor with dynamic instruction stream mapping
US9672043B2 (en) 2014-05-12 2017-06-06 International Business Machines Corporation Processing of multiple instruction streams in a parallel slice processor
RU2571575C1 (ru) * 2014-06-20 2015-12-20 Александр Сергеевич Зубачев Общественный компьютер
KR102264161B1 (ko) 2014-08-21 2021-06-11 삼성전자주식회사 이미지 처리 장치, 이미지 처리 시스템, 이미지 처리 시스템의 동작방법 및 이미지 처리 시스템을 포함하는 시스템 온 칩
US9760375B2 (en) 2014-09-09 2017-09-12 International Business Machines Corporation Register files for storing data operated on by instructions of multiple widths
US9720696B2 (en) 2014-09-30 2017-08-01 International Business Machines Corporation Independent mapping of threads
US9977678B2 (en) 2015-01-12 2018-05-22 International Business Machines Corporation Reconfigurable parallel execution and load-store slice processor
US10133581B2 (en) 2015-01-13 2018-11-20 International Business Machines Corporation Linkable issue queue parallel execution slice for a processor
US10133576B2 (en) 2015-01-13 2018-11-20 International Business Machines Corporation Parallel slice processor having a recirculating load-store queue for fast deallocation of issue queue entries
KR102415995B1 (ko) * 2015-09-30 2022-06-30 엘지디스플레이 주식회사 영상 처리 장치 및 이를 포함하는 표시장치
US9983875B2 (en) 2016-03-04 2018-05-29 International Business Machines Corporation Operation of a multi-slice processor preventing early dependent instruction wakeup
US10037211B2 (en) 2016-03-22 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor with an expanded merge fetching queue
US10346174B2 (en) 2016-03-24 2019-07-09 International Business Machines Corporation Operation of a multi-slice processor with dynamic canceling of partial loads
US10761854B2 (en) 2016-04-19 2020-09-01 International Business Machines Corporation Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor
US10037229B2 (en) 2016-05-11 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions
US9934033B2 (en) 2016-06-13 2018-04-03 International Business Machines Corporation Operation of a multi-slice processor implementing simultaneous two-target loads and stores
US10042647B2 (en) 2016-06-27 2018-08-07 International Business Machines Corporation Managing a divided load reorder queue
US10318419B2 (en) 2016-08-08 2019-06-11 International Business Machines Corporation Flush avoidance in a load store unit
JP2018074445A (ja) * 2016-10-31 2018-05-10 ソニーセミコンダクタソリューションズ株式会社 固体撮像装置およびその信号処理方法、並びに電子機器
CN109298886A (zh) * 2017-07-25 2019-02-01 合肥君正科技有限公司 Simd指令执行方法、装置及处理器

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06162226A (ja) * 1992-11-20 1994-06-10 Nec Corp 並列プロセッサ制御装置
JPH10111858A (ja) * 1996-09-30 1998-04-28 Internatl Business Mach Corp <Ibm> グラフィクス・パイプラインを並列化する方法及び装置
JPH10304184A (ja) * 1997-05-02 1998-11-13 Fuji Xerox Co Ltd 画像処理装置および画像処理方法

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1311063C (en) * 1988-12-16 1992-12-01 Tokumichi Murakami Digital signal processor
US5280474A (en) * 1990-01-05 1994-01-18 Maspar Computer Corporation Scalable processor to processor and processor-to-I/O interconnection network and method for parallel processing arrays
US5293596A (en) * 1990-02-21 1994-03-08 Matsushita Electric Industrial Co., Ltd. Multidimensional address generator and a system for controlling the generator
US5765011A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Parallel processing system having a synchronous SIMD processing with processing elements emulating SIMD operation using individual instruction streams
US5815723A (en) * 1990-11-13 1998-09-29 International Business Machines Corporation Picket autonomy on a SIMD machine
US5243699A (en) * 1991-12-06 1993-09-07 Maspar Computer Corporation Input/output system for parallel processing arrays
US5991866A (en) * 1992-03-25 1999-11-23 Tm Patents, Lp Method and system for generating a program to facilitate rearrangement of address bits among addresses in a massively parallel processor system
JPH0736858A (ja) * 1993-07-21 1995-02-07 Hitachi Ltd 信号処理プロセッサ
US5659780A (en) * 1994-02-24 1997-08-19 Wu; Chen-Mie Pipelined SIMD-systolic array processor and methods thereof
JPH07271764A (ja) * 1994-03-24 1995-10-20 Internatl Business Mach Corp <Ibm> 計算機プロセッサ及びシステム
US5790879A (en) * 1994-06-15 1998-08-04 Wu; Chen-Mie Pipelined-systolic single-instruction stream multiple-data stream (SIMD) array processing with broadcasting control, and method of operating same
JPH0877002A (ja) * 1994-08-31 1996-03-22 Sony Corp 並列プロセッサ装置
US5606707A (en) * 1994-09-30 1997-02-25 Martin Marietta Corporation Real-time image processor
KR100262453B1 (ko) 1996-08-19 2000-08-01 윤종용 비디오데이터처리방법및장치
US6088788A (en) * 1996-12-27 2000-07-11 International Business Machines Corporation Background completion of instruction and associated fetch request in a multithread processor
US5961628A (en) * 1997-01-28 1999-10-05 Samsung Electronics Co., Ltd. Load and store unit for a vector processor
DE69837791T2 (de) * 1997-11-07 2007-10-18 Altera Corp., San Jose VERFAHREN UND GERÄT FÜR EFFIZIENTE, SYNCHRONE MIMD-OPERATIONEN MIT iVLIW PE-ZU-PE KOMMUNIKATIONEN
US6079008A (en) * 1998-04-03 2000-06-20 Patton Electronics Co. Multiple thread multiple data predictive coded parallel processing system and method
US20080007562A1 (en) * 1999-04-09 2008-01-10 Dave Stuttard Parallel data processing apparatus
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US6732126B1 (en) * 1999-05-07 2004-05-04 Intel Corporation High performance datapath unit for behavioral data transmission and reception
US6427196B1 (en) * 1999-08-31 2002-07-30 Intel Corporation SRAM controller for parallel processor architecture including address and command queue and arbiter
US6668317B1 (en) * 1999-08-31 2003-12-23 Intel Corporation Microengine for parallel processor architecture
US6606704B1 (en) * 1999-08-31 2003-08-12 Intel Corporation Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode
US6728419B1 (en) * 2000-02-17 2004-04-27 Xerox Corporation Multi-tasking multi-threaded image processing system and method for image capture devices
US6924807B2 (en) * 2000-03-23 2005-08-02 Sony Computer Entertainment Inc. Image processing apparatus and method
JP3504240B2 (ja) * 2000-07-24 2004-03-08 株式会社ソニー・コンピュータエンタテインメント 画像処理システム、デバイス、方法及びコンピュータプログラム
US6934336B2 (en) * 2001-07-26 2005-08-23 Matsushita Electric Industrial Co., Ltd. Area expansion apparatus, area expansion method, and area expansion program
JP3892829B2 (ja) * 2003-06-27 2007-03-14 株式会社東芝 情報処理システムおよびメモリ管理方法
GB0323950D0 (en) * 2003-10-13 2003-11-12 Clearspeed Technology Ltd Unified simid processor
US20050251649A1 (en) * 2004-04-23 2005-11-10 Sony Computer Entertainment Inc. Methods and apparatus for address map optimization on a multi-scalar extension
ITTO20040415A1 (it) * 2004-06-22 2004-09-22 St Microelectronics Srl Architettura di processore multidimensionale
GB2417105B (en) * 2004-08-13 2008-04-09 Clearspeed Technology Plc Processor memory system
US7492368B1 (en) * 2006-01-24 2009-02-17 Nvidia Corporation Apparatus, system, and method for coalescing parallel memory requests
US7755631B1 (en) * 2006-10-24 2010-07-13 Nvidia Corporation Transposition structures and methods to accommodate parallel processing in a graphics processing unit (“GPU”)
JP2008287562A (ja) * 2007-05-18 2008-11-27 Sony Corp 処理装置及びデバイス制御ユニット
US8180975B2 (en) * 2008-02-26 2012-05-15 Microsoft Corporation Controlling interference in shared memory systems using parallelism-aware batch scheduling

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06162226A (ja) * 1992-11-20 1994-06-10 Nec Corp 並列プロセッサ制御装置
JPH10111858A (ja) * 1996-09-30 1998-04-28 Internatl Business Mach Corp <Ibm> グラフィクス・パイプラインを並列化する方法及び装置
JPH10304184A (ja) * 1997-05-02 1998-11-13 Fuji Xerox Co Ltd 画像処理装置および画像処理方法

Also Published As

Publication number Publication date
EP1883045A1 (en) 2008-01-30
CN1993709B (zh) 2010-12-15
EP1883045A4 (en) 2016-10-05
KR101270925B1 (ko) 2013-06-07
WO2006123822A1 (ja) 2006-11-23
US8464025B2 (en) 2013-06-11
JPWO2006123822A1 (ja) 2008-12-25
US20090006773A1 (en) 2009-01-01
CN1993709A (zh) 2007-07-04
KR20080010377A (ko) 2008-01-30

Similar Documents

Publication Publication Date Title
JP4893621B2 (ja) 信号処理装置
US5812147A (en) Instruction methods for performing data formatting while moving data between memory and a vector register file
US6237079B1 (en) Coprocessor interface having pending instructions queue and clean-up queue and dynamically allocating memory
KR100283161B1 (ko) 모션 평가 코프로세서
US9984432B2 (en) Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets
AU747283B2 (en) Data processing system for logically adjacent data samples such as image data in a machine vision system
US12008377B2 (en) SIMD operand permutation with selection from among multiple registers
US7546425B2 (en) Data processor with a built-in memory
JP3971535B2 (ja) Simd型プロセッサ
Bellas et al. Real-time fisheye lens distortion correction using automatically generated streaming accelerators
EP2382546B1 (en) Memory management process and apparatus for the same
KR19990008388A (ko) 연산기능을 갖는 반도체메모리 및 그것을 사용한 처리장치
US5999200A (en) Method and apparatus for automatically controlling the destination of a graphics command in a register file
JP5358315B2 (ja) 並列計算装置
US6489967B1 (en) Image formation apparatus and image formation method
JP2024000852A (ja) プログラマブル信号処理回路及び当該回路用のプログラム
AU760297B2 (en) Memory controller architecture
CN117785287A (zh) 多线程计算中的私有存储器模式顺序存储器访问
JP4413905B2 (ja) Simd型プロセッサ
JPH04205678A (ja) 画像情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090512

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110906

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111031

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111122

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111205

R151 Written notification of patent or utility model registration

Ref document number: 4893621

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150106

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees