[go: up one dir, main page]

JP2008003708A - 映像処理エンジンおよびそれを含む映像処理システム - Google Patents

映像処理エンジンおよびそれを含む映像処理システム Download PDF

Info

Publication number
JP2008003708A
JP2008003708A JP2006170382A JP2006170382A JP2008003708A JP 2008003708 A JP2008003708 A JP 2008003708A JP 2006170382 A JP2006170382 A JP 2006170382A JP 2006170382 A JP2006170382 A JP 2006170382A JP 2008003708 A JP2008003708 A JP 2008003708A
Authority
JP
Japan
Prior art keywords
data
instruction
register
cpu
video processing
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.)
Granted
Application number
JP2006170382A
Other languages
English (en)
Other versions
JP4934356B2 (ja
Inventor
Koji Hosoki
浩二 細木
Masakazu Ehama
真和 江浜
Keimei Nakada
啓明 中田
Kenichi Iwata
憲一 岩田
Seiji Mochizuki
誠二 望月
Takashi Yuasa
隆史 湯浅
Yukifumi Kobayashi
幸史 小林
Tetsuya Shibayama
哲也 柴山
Koji Ueda
浩司 植田
Masaki Nobori
正樹 昇
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.)
Renesas Technology Corp
Hitachi Ltd
Original Assignee
Renesas Technology Corp
Hitachi Ltd
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 Renesas Technology Corp, Hitachi Ltd filed Critical Renesas Technology Corp
Priority to JP2006170382A priority Critical patent/JP4934356B2/ja
Priority to US11/688,894 priority patent/US20070294514A1/en
Priority to KR1020070034573A priority patent/KR100888369B1/ko
Priority to CNB2007100917561A priority patent/CN100562892C/zh
Publication of JP2008003708A publication Critical patent/JP2008003708A/ja
Application granted granted Critical
Publication of JP4934356B2 publication Critical patent/JP4934356B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】CPUが発行する命令は、1サイクルに1命令以上が供給されるため、毎サイクル、命令メモリ読み出しが発生し、消費電力が大きい。また、マルチプロセッサ構成の場合、命令メモリ個数が増加し、毎サイクル、命令メモリの同時アクセスが発生し、消費電力が大きくなる。
【解決手段】命令のオペランドに2次元のソースレジスタとデスティネーションレジスタを指定する手段を設け、複数サイクルで、複数のソースレジスタを使用した演算を実行し、複数のデスティネーションを得る。複数ソースレジスタを利用して、複数サイクル消費してデスティネーションを得る命令において、データ丸め込み演算器をパイプラインの最終段に接続する。更に、複数のCPUを直列接続し、共有型の命令メモリを共有して使用する。この際、各CPUの命令オペランドに、隣り合うCPU間の同期を制御するためのフィールドを有し、同期化制御を行う。
【選択図】図2

Description

本発明は、映像処理エンジンおよびそれを含む映像処理システムに係り、特にCPUとダイレクトメモリアクセスコントローラがバス接続された映像処理エンジンおよびそれを含む映像処理システムに関する。
半導体プロセスの微細化に伴い、大規模なシステムを1つのLSI上で実現するSOC(システムオンチップ)化や1つのパッケージ内に複数のLSIを搭載するSIP(システムインパッケージ)という技術が主流となっている。この論理の大規模化により、組込み用途に見られるように、CPUコアと画像コーデックアクセラレータや大規模なDMACモジュールといった全く異なった機能を1つのLSI内に実装することが可能となってきた。
また、半導体プロセスの微細化は、LSI定常状態におけるリーク電流を増加させ、リーク電流による消費電力の増加が問題となっている。近年では、未使用モジュールへのクロック供給停止や、供給電源遮断などにより、消費電力削減を実現している。これらの低電力化は、スリープなどの待機状態時の低電力化である。
一方、携帯端末などで映像を視聴する場合、LSI内のほぼ全部のモジュールが定常状態として動作するため、先に示した待機状態時の低電力化手法を用いることはできない。
定常状態時の消費電力は、動作周波数、論理物量、トランジスタの活性化率、および供給電圧の2乗に比例する。従って、低電力化は、これらの要素を小さくすることで実現できる。
動作周波数を下げるには、並列化などにより、1サイクルで処理する処理量を増やすことで実現できる。これは、必要とする論理物量を増やし、消費電力を増加させる傾向となるが、低速動作が可能で、タイミングクリティカルパスを少なく出来るため、供給電圧を下げることが可能で、これに伴い、消費電力を削減できる。従って、近年は、動作周波数向上よりも、SIMD型ALUや、マルチプロセッサなど、並列度向上による低電力化が主流となっている。
特開2000−57111号公報(特許文献1)は、SIMD型ALUについて示している。これは、並列に演算器を動作させることで1サイクルに演算する処理量を増やし、結果、動作周波数削減を実現している。画像処理など、画素毎に同一の演算を施す場合、本SIMD型ALUは有効である。
特開2000−298652号公報(特許文献2)は、マルチプロセッサについて示している。これは、マルチプロセッサが使用する命令メモリを共有することで、命令メモリの総論理物量を削減し、低電力化を実現している。
特開2001−100977号公報(特許文献3)は、VLIW型CPUについて示している。VLIWは、演算器を並列に配置し、これを並列動作させることで、必要処理サイクルを削減し、低電力化を実現している。
特開2000−57111号公報 特開2000−298652号公報 特開2001−100977号公報
特許文献1では、SIMD型ALUについて開示されている。一般的な画像処理は、同一演算を2次元のブロック全体に施すアルゴリズムである。これをSIMD型ALUで実現する場合、汎用レジスタのリードレジスタ番号とライトレジスタ番号のみが異なる同一の命令を毎サイクル供給する。これは、毎サイクル、命令フェッチを行う事を意味し、命令の格納されたメモリを毎サイクルアクセスしなければならない。LSI全体の消費電力に対し、メモリが消費する電力の割合は、比較的高い。従って、毎サイクル命令メモリの読出しを行うことは、消費電力を増加させる。
また、SIMD型ALUでは、限られた入力データに対し演算を行う構成である。例えば、縦方向の畳み込み演算などを行う場合、複数の命令列で各要素の演算を行い、最後に各演算結果を加算する。桁上げを考慮した場合、前処理としてのビット拡張や、後処理としての丸め込み処理など、実際の畳み込み演算に対し、処理サイクルが大きくなる。従って、高い動作周波数が必要で、消費電力が高くなる。
特許文献2では、マルチプロセッサの面積削減による低電力化について開示されている。本文献によれば、プロセスが動作しているプロセッサのみが共有命令メモリをアクセスする。従って、複数のプロセッサにて同時にプロセスが動作している場合、命令メモリアクセス競合が発生し、実質的にプロセッサの稼働率が低下し、性能低下が発生する。
これらのように、プロセッサの命令供給は、命令メモリアクセスに依存し、消費する電力の比率も大きい。
特許文献3では、VLIW型CPUについて開示されている。本方式によれば、並列動作させる演算器数を増加させるに従い、1サイクルに読み出す命令数も増加し、消費電力が大きい。また、演算器数に比例し、レジスタのポート数が増加し、面積コストが大きく、これも消費電力を大きくする。
本発明の目的は、プロセッサで画像処理を行う場合の低電力化技術の提供にある。
命令のオペランドに2次元のソースレジスタとデスティネーションレジスタを指定する手段を設け、複数サイクルで、複数のソースレジスタを使用した演算を実行し、複数のデスティネーションを得る手段を有する。また、複数ソースレジスタを利用して、複数サイクル消費してデスティネーションを得る命令において、データ丸め込み演算器をパイプラインの最終段に接続する。
更に、複数のCPUを直列接続し、共有型の命令メモリを共有して使用する。この際、各CPUの命令オペランドに、隣り合うCPU間の同期を制御するためのフィールドを有し、同期化制御を行う手段を設ける。
上記手段により、命令メモリのアクセス回数を削減することにより、命令メモリ読み出しの際に消費する電力を削減する。また、命令数の削減と、命令メモリの共有化により、命令メモリの総容量を削減することにより、トランジスタの充放電個数を削減し、手消費電力化を実現する。
以下に、本発明の実施例を、図を用いて詳細に説明する。
本発明の第1の実施例について、図面を参照して詳細に説明する。
図1は、本実施例における組込みシステムのブロック図である。
本組込みシステムは、システムの制御と汎用的な処理を行うCPU1と、MPEGなどの画像コーデックの1処理であるストリーム処理を行うストリーム処理部2と、ストリーム処理部2と連携して画像コーデックの符号化や復号化を行う映像処理部6と、AACやMP−3などの音声コーデックの符号化や復号化を行う音声処理部3と、SDRAMなどで構成する外部メモリ20のアクセスを制御する外部メモリ制御部4と、標準バスであるPCIバス22と接続するためのPCIインタフェース5と、画像表示を制御する表示制御部8と、様々なIOデバイスに対して、ダイレクトメモリアクセスを行うDMAコントローラ7が、内部バス9に相互接続される。
DMAコントローラ7には、DMAバス10を介して、様々なIOデバイスが接続される。IOデバイスには、カメラやNTSC信号などの映像入力を行う映像入力部11、NTSCなど映像を出力する映像出力部12、マイクなど音声の入力を行う音声入力部13と、スピーカーや光出力などの音声出力を行う音声出力部14、リモコンなどのシリアル転送を行うシリアル入力部15、シリアル出力部16、TCIバスなどのストリームを入力するためのストリーム入力部17、ハードディスクなどストリームを出力するためのストリーム出力部18及び様々なIOデバイス19が接続される。
PCIバス22には、ハードディスクやフラッシュメモリなどの様々なPCIデバイス23が接続される。
表示制御部8には、表示デバイスであるディスプレイ21が接続される。
映像処理部6は、画像コーデックや画像の拡大縮小、また画像のフィルタリングなど、2次元画像に対して処理を施す処理部である。
このように、本組込みシステムは、映像や音声の入出力を有し、映像や音声処理を行うシステムである。例えば、携帯電話や、HDDレコーダ、監視装置、車載向け画像処理装置などが上げられる。
図2は、本実施例における映像処理部6のブロック図である。
映像処理部6は、内部バスブリッジ60を介して内部バス9に接続される。内部バスブリッジ60は、パス63を介して内部バスマスタ制御部61と、パス64を介して内部バススレーブ制御部62に接続される。内部バスマスタ制御部61は、映像処理部6が内部バス9に対してバスマスタとなり、リードアクセスやライトアクセスのリクエストを生成し、内部バスブリッジ60にリクエストを出力するブロックである。内部バス9に対するライトアクセス時は、リクエスト、アドレス、データを出力する。内部バス9に対するリードアクセス時は、リクエストとアドレスを出力し、数サイクル後、リードデータが返送される。内部バススレーブ制御部62は、内部バス9から入力され、内部バスブリッジ60を経由して入力されるリード要求やライト要求を受付け、対応して処理を行うブロックである。内部バスブリッジ60は、内部バス9と内部バスマスタ制御部61間、および内部バス9と内部バススレーブ制御部62との間で受け渡されるリクエストやデータの調停を行うブロックである。
シフト型バス50は、映像処理部6内のブロック間データ転送を行うバスである。各ブロックとシフト型バス50は、3種類の信号線群で接続される。まず、図3と図4を使用して、シフト型バス50の説明を行う。
図3は、シフト型バス50のブロック図である。シフト型バス50には、各ブロックとのインタフェースとして3種の信号線群で接続される。よって、信号線群50a、50b、50cが1つのブロックに接続され、信号線群51a、51b、51cが他の1つのブロックに接続され、信号線群55a、55b、55cが他の1つのブロックに接続される。信号線群50a、50b、50cは、シフトレジスタスロット500に接続され、信号線群51a、51b、51cは、シフトレジスタスロット501に接続され、信号線群55a、55b、55cは、シフトレジスタスロット505に接続される。
各シフトレジスタスロット500、501、505は、直列に接続される。例えば、シフトレジスタスロット500の出力50eは、シフトレジスタスロット501の51dに入力され、シフトレジスタスロット501の出力51fは、シフトレジスタスロット500の50gに入力される。同様に、シフトレジスタスロット505の出力55eは、シフトレジスタスロット500の50dに入力され、シフトレジスタスロット500の出力50fは、シフトレジスタスロット505の55gに入力される。
信号線500pは、シフトレジスタスロット毎に供給されるクロック停止信号500pであり、50p端子、51p端子、55p端子に入力される。クロック停止信号500pに関しては後述する。
シフトレジスタスロット500、501、505は、後述する自身ブロックIDを除き、同一の構成である。従って、代表して、シフトレジスタスロット500について、詳細に説明する。
図4は、シフトレジスタスロット500のブロック図である。シフトレジスタスロット500には、各ブロックとのインタフェースである信号線群50a、50b、50cと、ブロック間インタフェースの信号線群である50d、50e、50f、50gが接続される。これらの信号線群50a、50b、50c、50d、50e、50f、50gについて、表1から表7に信号の意味をまとめる。ここで、信号線群50b、50d、50gは入力信号で、50a、50c、50e、50fは出力信号である。
なお、各信号線群50a、50b、50c、50d、50e、50f、50gは、同一サイクルで有効な値である。
Figure 2008003708
Figure 2008003708
Figure 2008003708
Figure 2008003708
Figure 2008003708
Figure 2008003708
Figure 2008003708
信号線群50dは入力信号で、レジスタ510に格納される。レジスタ510の出力である、1サイクルディレイした右回り入力信号群511はBIDデコーダ512とセレクタ513、および信号線群50aに入力される。BIDデコーダ512には、入力信号群511のうち、少なくとも、WE、BIDが入力される。BIDデコーダ512は、自身のブロック番号を認知するためのブロックID[4:0]を有する。
図5に、右回りシフト型バスのタイミングチャートについて示す。本タイミングチャートと、図4のシフトレジスタスロット500の信号線群を用いて、右回りシフト型バスのバスプロトコルを説明する。なお、本タイミングチャートにおける、自身のブロックIDは“B”である。
入力されたEIDとブロックIDが等しくなく、かつ、WEが1の場合、セレクタ513には、信号線群511を選択し、信号線群50eには、信号線群511が出力される。結果、信号線群50dが1サイクル遅れて、信号線群50eに出力され、次段のシフトレジスタスロットに投入され、有効なデータライトトランザクションとして引き継がれる。本プロトコルは、図5におけるデータシフト出力である。
次に、入力されたEIDとブロックIDが等しく、かつ、WEが1の場合、自身のブロックへの入力として認知し、信号線群50aのR_WE_IN信号を1とする。本R_WE_IN信号が1の場合、各ブロックは、右回りシフト型バスからの入力がデータライトトランザクションであると認識し、データライト処理を実行する。本プロトコルは、図5におけるデータライトである。
更に、データライト条件が成立した場合、セレクタ513を入力信号線群50b側に選択し、信号線群50eには、入力信号線群50bが出力される。この時、入力信号線群50eのSBR_WE_OUTに入力信号線群50bのSBR_OUT_REQを出力する。
SBR_OUT_REQが0の場合は、次段シフトレジスタスロットには、無効なトランザクションとして入力される。本プロトコルは、図5におけるデータライトと同様である。
SBR_OUT_REQが1の場合は、次段シフトレジスタスロットには、有効なトランザクションとして入力される。これは、図5におけるデータライト&データ出力である。
なお、入力されたWEが0の場合、無効なトランザクションが入力されたと認知し、セレクタ513を入力信号線群50b側に選択し、自身ブロックからのデータライトを可能である。
これらのBIDデコーダ512の振る舞いにより、信号線群50dからの入力を、データライトトランザクションとして受託する振る舞いと、信号線群50bを次段シフトレジスタスロットにデータライトトランザクションとして出力する振る舞いと、自身のブロックに対するデータライトトランザクションでない場合にも、そのトランザクションを次段に引き継ぐことが可能となる。これにより、左側のブロックから右側のブロックへの右回りのデータ転送を実現する。
同様に、先の説明に対し、信号線群50dを信号線群50gに置換え、信号線群50eを信号線群50fに置換え、信号線群50aを信号線群50cに置換え、レジスタ510をレジスタ514に置換え、BIDデコーダ512をBIDデコーダ516に置換え、セレクタ513をセレクタ517に置換え、SBR_OUT_REQ信号をSBL_OUT_REQ信号に置き換えることで、右側のブロックから左側のブロックへの左回りのデータ転送を実現する。
なお、メモリなど、1ポートメモリを使用したメモリに対し、信号線群50aと信号線群50cから同時にデータライトトランザクションが発生した場合、メモリライトポートの競合が発生する。これを回避するため、いくつかの方式がある。
1つは、一方のシフト型バスをストールさせ、一方からのデータライトを優先するものである。この場合、競合信号を全ブロックにブロードキャストして停止する。また、信号線群50aと信号線群50cをFIFOに投入することで、競合の頻度を削減できる。更に、このようなメモリを使用する場合は、インタリーブ型メモリ構成をとり、右回りシフト型バスと左回りシフト型バスからの書込みを別バンクメモリとすることで競合を回避できる。
但し、データフローがシンプルで、ブロック間のデータ引渡しは右回りシフト型バスを使用し、外部メモリからの読み込み、すなわち内部バスブリッジ60を介したデータライトトランザクションは左回りシフト型バスを使用することにより、競合を回避できる。また、1つのメモリに対し、右回りシフト型バスと左回りシフト型バスから同一サイクルで、データライトトランザクションが発生し競合する確率は非常に小さい。このため、性能低下の割合は小さいと言える。
本方式により、一般的にタイミングクリティカルとなるグローバルなバス調停回路を有することなく、バス転送を実現することができる。また、シフトレジスタスロット500内のレジスタ510、514により、ブロック単位でレジスタを介することで、実際のLSIのフロアプランにおいて、長い配線とタイミングクリティカルパスを削減できる。
一般的に、トライステートバス方式や、クロスバスイッチ型バスでは、ブロック数が増加した場合、タイミングクリティカルや、配線物量が増加するが、本方式によれば、バスに接続するブロック数を増加させた場合においても、タイミングクリティカルと配線量増加を抑止することが可能である。
更に、複数のブロック間で、同一サイクルにて、並列にデータ転送を行うことが可能で、高いデータ転送性能を得ることができる。特に、隣り合うブロックに対してのみデータ転送する場合、ブロック数に比例したデータバンド幅を得ることが可能である。
この様に、シフト型バス50のバスプロトコルは、データのライトのみである。データライトのバスプロトコルでは、リクエスト信号(WE_OUT)と同一サイクルにて、アドレス(ADDR_OUT)やデータ(DATA_OUT)を出力することが可能で、FIFOやキューを用いて、状態を保持しながら実行するバス構造と比較し、よりシンプルなバスを構成できる。
クロック停止信号500pは50p端子に入力される。本クロック停止信号50p信号がアクティブな場合、セレクタ513とセレクタ517は、共に信号線群50dと信号線群50gが選択される。これにより、入力から出力まで、レジスタを介さずにスルーで伝播する。本方式により、例えば、1つのブロックのクロックを停止した場合においても、データ転送を可能とする。本シフト型バス50は、グローバルなバス調停回路を有しないため、少なくとも動作すべきブロックのみにクロックを供給することで、ブロック間のデータ転送を可能とし、動作するレジスタ数の削減により、消費電力を低減可能である。なお、シフト型バス50全体にはクロックを供給し、各ブロックにはクロックを供給しないことで、レジスタ510、514、518分の電力増加で、各ブロックを停止することも可能である。
このようにシフト型バス50は、隣り合うブロック間をシンプルなインタフェースで接続できる。従って、ブロックIDフィールドを増やすことで、複数のブロックを接続可能である。本実施例の説明では、映像処理部6内の共通バスとして説明しているが、これに限定されない。例えば、LSIのピンにシフト型バスインタフェースを用いることで、複数のLSIを直列接続可能となり、隣り合うLSIのみでなく、配置的に離れたLSIとの通信を可能とする。なお、LSI間接続では、高速シリアルインタフェースなどを使用し、ピン数削減も実現できる。
また、シフト型バス50では、Last信号を有する。データ転送と同時に、本信号線が“1”の場合、後述する同期制御部473内のデータメモリレディカウンタDMRCをカウントアップする。これにより、命令レベルでブロック間の同期化を実現する。詳細については後述する。
なお、シフト型バスでは、リードトランザクションも有する。本リードトランザクションについても後述する。
再び、図2を用いて、映像処理部6の説明を行う。
シフト型バス50には、複数のブロックが接続される。先に示した内部バスマスタ制御部61、内部バススレーブ制御部62に加え、映像処理部6全体で共有可能なメモリを有する共有ローカルメモリ65、ソフトウェアによって動作する、映像コーデックや画像の回転、拡大縮小など、2次元の画像に対して処理を行う複数の映像処理エンジン66、67、画像処理の一部の処理を実行する専用ハードウェア68などが接続される。専用ハードウェア68の一例としては、MPEG−2やH.264符号化規格における、エンコード時の動き予測などを処理するブロックである。但し、専用ハードウェア68の処理内容は、本発明の本質に係りを持たないため、説明を省略する。
映像処理エンジン66、67は、プロセッサ型のブロックで、シフト型バス上に複数接続することができる。
共有ローカルメモリ65、映像処理エンジン66、67、専用ハードウェア68、内部マスタ制御部61、内部バススレーブ制御部62は、それぞれ独自のブロックIDを有し、シフト型バス50の共通バスプロトコルで、相互に接続される。
次に、図6を用いて、第1の実施例における、映像処理エンジン66のより詳細な説明を行う。図6は映像処理エンジン66のブロック図である。
映像処理エンジン66のインタフェースは、シフト型バス50とのインタフェースのみであり、右回りシフト型バスの入力信号51a、左回りシフト型バスの入力信号51c、及び、シフト型バス50への出力信号51bである。これら3種の信号は、データパス部36に接続される。データパス部36には、信号線44を介して、シフト型バス50に対してデータ出力処理を行うローカルDMAC34が接続される。
更に、映像処理エンジン66は、シフト型バス50からデータライトを行うことが可能な命令メモリ31とデータメモリ35を有し、データパス部36には、パス42を介して、命令メモリ31の制御を行う命令メモリ制御部32と接続され、パス43を介して、データメモリ制御部33が接続される。
命令メモリ制御部32は、シフト型バス50からの命令メモリ31へのデータライトと、CPU部30への命令供給を制御するブロックで、パス40を介して命令メモリ31と、パス37を介してCPU部30と、パス42を介してデータパス部36に接続される。
データメモリ制御部33は、シフト型バス50からのデータメモリ35へのデータライトと、ローカルDMAC34が制御する、データメモリ35からシフト型バス50へのデータ出力の制御と、CPU30からデータメモリ35へのアクセスの制御を行うブロックである。データメモリ35の制御は、パス41を使用して行う。
シフト型バス50からのデータメモリ35へのデータライトと、データメモリ35からシフト型バス50へのデータ出力は、パス43を介して、データパス部36と強調して制御する。CPU部30との接続は、2つのパスで制御される。データメモリ35からCPU部30へのデータ読出し処理は、パス38により制御され、CPU部30から、データメモリ35へのデータ書込みはパス39により制御される。共に、データメモリ35のアクセスアドレスはパス45で供給される。
なお、本実施例の説明では、説明を容易にするため、データメモリ35の個数を1つとするが、複数のデータメモリを使用したインタリーブ構成も可能である。インタリーブ構成により、複数のデータメモリ35のアクセスを並列に行うことが可能である。
本発明を説明するにあたり、CPU30による演算内容を定義する。但し、本演算内容は、本発明の本質を説明するためのものであり、演算内容の種類については限定を持たない。
図7に、演算内容の概要を示す。図7が示す通り、演算内容は、2次元の画像Aと2次元画像Bの画素毎に加算を行い、メモリに書込みを行うものである。
特許文献1に示したSIMD型演算器を使用した場合、必要サイクルは、行列Aの読出しに4サイクル、行列Bの読出しに4サイクル、加算に4サイクル、減算に4サイクル消費し、合計16サイクル必要となる。なお、SIMD型演算器の並列数を8とした場合、加算に必要なサイクル数は2となるが、本説明では、4並列のSIMD型演算器として説明する。この時、SIMD型演算器が必要と総命令数は、必要サイクル数と同一の16命令である。本演算内容を使用し、本発明の実現方式について述べる。
CPU部30は、2次元画像に対する演算などを行うCPUである。本実施例では、説明を容易にするため、CPU部30は、次に示す4命令を有するものとする。但し、本命令の種類は、説明を容易にするためのものであり、命令種類についての制限はもたない。但し、後述する、レジスタポインタと高さ方向を指定する手段については、必要な要素である。
4命令は、分岐命令、リード命令、ライト命令、加算命令とする。各命令の命令フォーマットにおいて、必要なビットフィールドを表8から表11に示す。
Figure 2008003708
Figure 2008003708
Figure 2008003708
Figure 2008003708
図8はCPU部30のブロック図である。命令メモリ制御部32とのインタフェース37は、2種の信号に別れ、1つは、命令デコード部303が命令メモリ制御部32に対して出力する命令フェッチ要求37rと、命令メモリ制御部32が出力し、CPU部30に入力される命令37iである。命令デコード部303は、1つの命令処理が終了した時点で、命令フェッチ要求37rを出力する。対応して、命令37iと命令レディ信号37dが入力され、命令レジスタ301に格納される。ここでの説明では、命令レジスタ301のセット数を1として説明する。但し、命令の読出しレイテンシは1サイクルよりも大きいため、複数セットの命令レジスタ301を有すことも可能である。命令レジスタ301の値は、命令デコード部303に供給され、命令をデコードする。命令デコード部303では、レジスタファイル(汎用レジスタ)304の読出しポートと書込みポートを制御する制御線308と、演算器313を制御するための命令デコード信号309と、命令の種類によって、セレクタ311を制御するための制御線310を生成する。また、1つの命令処理が終了した時点で、命令フェッチ要求37rを出力する。
本説明では、分岐命令を除き、リード命令、ライト命令、分割加算命令を持つCPU部30として説明する。従って、制御線308は、リード命令時は、リードデータ38が返送された時点で、リードデータを格納するレジスタ番号ポインタ値を格納先レジスタ番号ポインタとして使用する。ライト命令時は、レジスタファイル304の読出しが必要なため、ライトデータレジスタ番号を使用する。分割加算命令時は、レジスタファイル304の読出しと書込み共に必要で、これを制御する。命令デコード信号309は、本説明では、分割加算命令時のみにアクティブとなるが、他の命令を有する場合、命令種類に従い、演算器を制御するための信号を出力する。制御線310は、リード命令時は、リードデータ38を選択し、分割加算命令時は演算器313の演算結果314を選択する。選択された演算データ315は、レジスタファイル304に格納される。また、命令デコード部303は、リード命令時とライト命令時、演算部313を制御し、データメモリ35のアクセスアドレス45を生成する。
なお、演算器303は、特許文献1と同様に8並列のSIMD型の演算器で構成され、8ビット幅の加算を並列に8個演算可能な構成とする。すなわち、分割加算を8個並列に演算できる。また、CPU30のデータ幅を8バイトとする。従って、リード命令、ライト命令、分割加算命令には8バイト単位で実行できる構成である。
また、リード命令、ライト命令、分割加算命令のWidthフィールドには、8、16、32が定義できるものとし、カウントフィールドには、1から16まで、1間隔で指定できるものとする。
図9を用いて命令デコード部303および演算部313のアクセスアドレス45の生成動作を説明する。図9は、命令デコード部303が生成するレジスタファイル304の読出しポートと書込みポートを制御する制御線308と、データメモリ35のアクセスアドレス45を生成するフローチャートである。
命令デコード部303は、Wcカウンタを有し、命令起動時に0にクリアされる(ステップ90)。次に、ステップ91にて、SrcとDest、(Addr+Wc)を使用して、リード命令、ライト命令、分割加算命令を実行する。次にステップ92にて、SrcとDestに1を加算し、Wcに8を加算する。ステップ93にて、命令フィールドで指定されたWidthフィールドとWcの比較を行う。WidthがWcに大きい場合、再度ステップ91に戻り、命令実行を繰り返す。WidthがWcと等しい、若しくは小さい場合、ステップ94に遷移し、命令フィールドに示されたCount値が0であるかを判定する。Count値が0で無い場合、ステップ95に遷移して、Count値から1を減算し、AddrにPitchを加算し、再度、ステップ90に遷移して、命令実行を繰り返す。Count値が0の場合、命令実行を終了する。この時、命令デコード部303は命令フェッチ要求37rを出力する。
図9のタイミングチャートの振る舞いにより、1つの命令にて、2次元矩形に対する演算を可能とする。特にリード命令では、Pitchを指定することで、データメモリ35上に分散的に配置された2次元矩形を、レジスタファイル304に連続データとして格納できる。また、ライト命令では、同じくPitchを指定することで、レジスタファイル上に配置された連続データを、データメモリ35上の分散的に配置された2次元矩形領域にライトすることが可能である。
図7で示した演算内容では、2つのリード命令、1つの分割加算命令、1つのライト命令という、合計3命令のみで演算を終了できる。すなわち、命令メモリ31からは、4命令のみをフェッチすればよい。但し、特許文献1に示したSIMD型の命令長に対し、本発明の命令は、Width、Count、Picthなどのオペランドが付加され、命令長が長くなる。特許文献1の命令幅を32ビットとした場合、本発明における命令長は64ビット程度である。一回の命令メモリアクセスで消費する電力は2倍となるが、アクセス回数を16から4と削減可能で、命令メモリが消費する総消費電力は2×4÷16で示され、電力を半分に削減できる。また、1つの命令で2次元のデータに対して処理を行うことは、実質的にプログラムの同一命令によるループの回数を削減する。これは、命令メモリ31の容量を削減できることを意味する。
なお、図8において、入力データ30iは、レジスタファイル304に入力され、レジスタファイル304のデータを更新可能である。更に、演算データ315は、演算データ30wbとして出力される。この入力データ30iと演算データ30wbについては、第2の実施例の説明にて行う。
図10を用いて、第1の実施例における命令メモリ制御部32の説明を行う。図10は命令メモリ制御部32のブロック図である。
命令メモリ制御部32は、命令メモリ31のメモリアクセスを制御するブロックである。命令メモリ31には、CPU部30からの命令フェッチアクセスと、シフト型バス50からのアクセスがあり、命令メモリ制御部32はこれらのアクセスを調停して、命令メモリ31をアクセスするものである。アクセス調停は調停部320で行う。メモリアクセス要求は、CPU部30から入力される命令フェッチ要求37rと、データパス部36から入力されるパス42である。調停結果により、セレクタ323を制御し、命令メモリ31をアクセスするためのアドレスなどの制御線40cを出力する。
命令フェッチアクセスの場合、調停部320は、セレクタ323に命令のプログラムカウンタ322の出力を選択し、命令メモリ31を読み出すと共に、制御線321を出力し、プログラムカウンタ322をインクリメントする。命令メモリ31から返送された命令40dは命令レジスタ324に格納され、命令37iとして、CPU部30に返送する。同時に、命令のオペコードフィールドは分岐制御部325に入力され、分岐命令か判断し、分岐命令時に1となる信号326を調停部320に入力する。また、分岐条件レジスタの読出しインデックスフィールドは、分岐条件レジスタ327に入力される。分岐条件レジスタ327とは1ビット幅の複数ワードで構成するレジスタ群で、分岐条件レジスタの読出しインデックスフィールドにてワードを指定し、1ビット幅の信号328を調停部320に入力する。
実際の分岐は、信号326が1かつ、信号328が1の時に分岐する。本組合せ以外は、分岐命令以外の命令として認識する。調停部320は、分岐命令以外の命令時のみ、命令レディ信号37dを返送する。分岐命令時は、命令レディ信号37dを返送せず、セレクタ323を命令レジスタ324内に格納された即値を選択する。この時、本即値をインクリメントした値でプログラムカウンタ322を更新する。
本方式によれば、CPUの命令フェッチ要求37rの発行間隔が数サイクル必要な場合、分岐命令による命令の再読み出しに要するサイクルを完全に隠蔽することが可能となり、分岐による性能低下を抑止可能となる。本発明におけるCPU部30では、2次元のオペランドを指定することにより、命令フェッチ要求37rの発行ピッチは大きく、本効果は大きい。
図11を用いて、第1の実施例におけるデータメモリ制御部33の説明を行う。図11はデータメモリ制御部33のブロック図である。
データメモリ35は、CPU部30からのリード及びライトアクセスと、シフト型バス50からのライト処理と、ローカルDMAC34からのリードアクセスが可能で、データメモリ制御部33は、これらのアクセスの調停を行うブロックである。これらの調停は、調停部330で行い、アドレスセレクタ331とデータセレクタ332の制御を行う。なお、データメモリ35との信号線41は、41a、41d、41wの3つの信号線に分類される。またデータパス部36との信号線43は、信号線43a、43d、41l、43rの4つの信号線に分類される。
まず、CPU部30との接続について説明する。リード命令時およびライト命令時のデータメモリアドレス45は、アドレスセレクタ331を通り、データメモリアドレス41aとして、データメモリ35に入力される。ライト命令時は、ライトデータ39がデータセレクタ332を経由して、ライトデータ41wとしてデータメモリ35に入力される。リード命令時は、データメモリアドレス41aに従い、リードデータ41dが読み出され、データレジスタ333に格納される。格納されたリードデータは、リードデータ38としてCPU部30に返送される。なお、リード命令のDestRegに、マスタS/Dレジスタの値を指定した場合、リードデータ43rにリードデータは出力される。
次にシフト型バス50からのライト処理では、アドレス線43aがアドレスセレクタ331を通り、データメモリアドレス41aとして、データメモリ35に入力される。同時にデータ線43dがデータセレクタ332を経由して、ライトデータ41wとしてデータメモリ35に入力される。
最後に、ローカルDMAC34からのアクセス時は、アドレス43pがアドレスセレクタ331を通り、データメモリアドレス41aとして、データメモリ35に入力される。対応して読み出されたリードデータ41dはデータレジスタ333に格納され、リードデータ43rとして返送される。
図12を用いて、第1の実施例におけるローカルDMAC34の説明を行う。図12はローカルDMAC34のブロック図である。
ローカルDMAC34は、シフト型バス50に対してデータ出力する処理における、データメモリアドレス44daと、シフト型バス50から入力されるデータメモリ35からのリードアクセスに対応して、リード処理を行うためのデータメモリアドレス44da生成する機能と、シフト型バス50に対してデータ出力する際の、シフト型バスアドレス44saを生成する機能と、シフト型バス50に対して、リードコマンドを発生させるための機能を有する。ローカルDMAC34は、信号線44にてデータパス部36のみが接続される。ここで、信号線44は、信号線44pw、44swb、44da、44sa、44dwの5種の信号線に分類できる。
ローカルDMAC34内には、リード命令によって書き換え可能なマスタDレジスタ340およびマスタSレジスタ341と、シフト型バス50から書き込むことが可能なスレーブDレジスタ342およびスレーブSレジスタ343の4セットのレジスタ群を有する。各レジスタのフォーマットを表12から表15に示す。
Figure 2008003708
Figure 2008003708
Figure 2008003708
Figure 2008003708
ローカルDMAC34を使用したデータ転送は、3種の動作モードを有する。
1つ目は、データライトモードである。データライトモードでは、マスタDレジスタ340のパラメータを用いて、自身のデータメモリ35を読出し、マスタSレジスタ341のパラメータを用いて、他の映像処理エンジンなどのブロックにデータを転送し、データメモリ35などのアドレスマッピングされた領域にデータをライトするモードである。
2つ目は、リードコマンドモードである。リードコマンドモードでは、マスタDレジスタとマスタSレジスタの値そのものをデータとして、他の映像処理エンジンなどのブロックにデータを転送し、その他ブロック内のスレーブDレジスタとスレーブSレジスタに値を格納処理である。これは、他のブロックへのリード要求として動作する。なお、リードコマンドモード時は、シフト型バス50のインタフェースとして、CMD信号を1として転送する。リードコマンドを受託するブロックは、CMD信号により、そのシフト型バス転送がリードコマンドであるかを認識する。
3つ目は、リードモードである。先のリードコマンドモードで受託したリード要求に対し、スレーブDレジスタ342のパラメータを用いて、データメモリ35を読出し、スレーブSレジスタ343のパラメータを用いて、他の映像処理エンジンなどのブロックにデータを転送し、データメモリ35などのアドレスマッピングされた領域にデータを格納するモードである。
これら3つのモードの組合せにより、映像処理エンジンなどのブロック間で、データ転送を実現する。
マスタDレジスタ340とマスタSレジスタ341は、CPU部30が発行するリード命令により更新可能で、この時、信号線44pwからデータが入力され、2つのレジスタが更新される。すなわち、予め、データ転送内容を記述した記述子をデータメモリ35に格納し、その内容をマスタDレジスタ340とマスタSレジスタ341にコピーすることで、データ転送を開始する。
2つのレジスタが更新された時点で、マスタDレジスタ340のModeフィールドにより2つの状態に遷移する。
Modeフィールドがデータライトモードを示している場合、アドレスセレクタ344を介して、マスタDレジスタ340のMADDR、MWidth、MCount、MPitchはデータメモリアドレス生成器346に転送される。データメモリアドレス生成器346は、データメモリ35を読み出すためのアドレス生成を行い、アドレス44daを出力する。アドレス生成の方式は、CPU部30内の命令デコード部303が生成するアクセスアドレス45と同一の方式で生成される。従って、データメモリアドレス生成器346にはWcカウンタを有し、MWidth、MCount、MPitchをそれぞれWidth、Count、Pitchと置き換えたアドレス生成により、2次元矩形のアドレスを生成する。
同様に、マスタSレジスタ341のSADDR、SWidth、SCount、SPitchはアドレスセレクタ345を経由して、シフト型バスアドレス生成器347に入力され、シフト型バス50に出力するアドレスを生成し、アドレス44saを出力する。このシフト型バスアドレス生成器347によるアドレス生成も、データメモリアドレス生成器346のアドレス生成と同様に、2次元矩形を表現する。これら2つのアドレスにより、データメモリ35から順次リードデータ43rが読み出され、結果、信号線群50bとして、映像処理エンジン66からシフト型バス50に対してデータライト処理を実現する。この時、転送先ブロックは、マスタSレジスタ341のSBIDが示すフィールドである。この時、MDIRフラグに従い、右回りのシフト型バスを使用するか、左回りのシフト型バスを使用するか決定される。
なお、本方式では、MWidth、MCount,MPitchとSWidth、SCount,SPitchそれぞれを使用して、データメモリ35のアドレス44daとシフト型バスに出力するためのアドレス44saを生成する。このように、2つのレジスタセットで、それぞれアドレス生成を行うことにより、2次元矩形の形を変換してデータ転送を可能としている。但し、同一矩形として転送する場合は、片方のみのパラメータでアドレス生成可能である。
一方、Modeフィールドがリードコマンドモードと示している場合、マスタDレジスタ340とマスタSレジスタ341の値は、直接出力信号44swbとして出力され、リードコマンドを他のブロックに転送する。この時、転送先ブロックは、マスタDレジスタ340のMBIDフィールドが示すブロックである。転送先ブロックが本リードコマンドを受託した場合、スレーブDレジスタ342とスレーブSレジスタ343を更新し、リードモードとして処理を開始する。リードコマンドは、パス44swを介して、スレーブDレジスタ342とスレーブSレジスタ343に更新される。
転送先ブロックがリードコマンドを受託後、先のデータライト処理とほぼ同様な動作にて、リードデータを読出し、シフト型バス50に対して出力する。スレーブDレジスタ342のMADDR,MWidth、MCount,MPitchは、アドレスセレクタ344を経由して、データメモリアドレス発生器346に入力され、アドレス44daとしてデータメモリ35をアクセスする。その後の振る舞いは、データライト時と同様である。
同様に、スレーブSレジスタ343のSADDR,SWidth、SCount,SPitchは、セレクタ345を経由して、シフト型バスアドレス生成器347に入力され、アドレス44saが生成される。その後の動作は、データライト時と同様である。
これら3つのローカルDMAC34の振る舞いにより、シフト型バス50では、アドレスとデータが同一サイクルで出力可能なライトトランザクションのみでデータ転送を実現する。一般に、バスの性能を向上するため、アドレスとデータを分離したスプリット型のバスが使用される。スプリット型バスとは、アドレスとデータを同一のトランザクションIDなどのIDで管理し、各リクエストスレーブ側は、アドレスをFIFOなどにキューイングして、データ受信まで待機する。従って、キューやFIFOの段数により、バス性能が制限される。一方、本方式では、全てのバス転送において、同一サイクルでアドレスとデータを転送可能であり、FIFO段数などによる性能の飽和が発生しない。
なお、ローカルDMAC34の動作は、リード命令により起動され、起動された時点で、CPU部30は次の命令を実行可能となる。但し、ローカルDMAC34を使用した転送が実行中のみ、次のローカルDMAC34の使用は禁止状態となりストールする。但し、ローカルDMAC34起動の発行ピッチを大きくすることで、競合による性能低下は発生しない。この間、CPU部30は別の処理シーケンスを実行することにより、CPU部30の処理とブロック間転送を並列に実行可能で、必要な処理サイクル数を削減できる。
また、リード転送に関しては、1セットのスレーブDレジスタ342とスレーブSレジスタ343のみ有するため、リード処理実行中は、次のリードコマンド受託を禁止し、シフト型バス50上にて終端を行わない。シフト型バス50は、ループ形状をしており、本リードコマンドがシフト型バス50を一周した時点で、リードコマンドを受託することにより、リードコマンドの再起動を可能とする。
ブロック間のデータ転送の大部分をライトモードで行い、リードの発生頻度を抑えることで、この性能低下を低減可能である。映像処理は、データフロー的な振る舞いが多く、ブロック間転送は、ライトモードの使用が大部分となるため、本方式は性能低下を抑止できる。
ローカルDMAC34による転送では、シフト型バス50に対し、“Last”信号を出力することができる。これは、マスタDレジスタ340若しくはスレーブDレジスタ342内のLastフィールドが“1”の転送時、2次元矩形の転送の最後の転送時に、1サイクルのみアサートする。これにより、対象とするダイレクトメモリ転送が終了したかた認識可能となる。これは、後述するブロック間同期の際に使用する。
図13を用いて、第1の実施例におけるデータパス部36の説明を行う。図13はデータパス部36のブロック図である。
データパス部36は、シフト型バス50と、命令メモリ制御部32とデータパス部33とローカルDMAC34との間のデータ受渡しを行うブロックである。
まず、シフト型バス部50からのデータ入力について説明する。右回りシフト型バスの入力である信号線群51aと左回りシフト型バスの入力である信号線群51cは、命令メモリ31への書込みパスであるパス42と、データメモリ35への書込みパスであり、そのうちアドレスであるパス43aとデータであるパス43d、及びローカルDMAC34内のスレーブDレジスタ342とスレーブSレジスタ343への書込みパスであるパス44swに接続される。シフト型バス50へのデータ出力である信号線群51bは、2つのブロックから入力され、1つはデータメモリ35からのリードデータ43rであり、2つ目は、ローカルDMAC34からの出力である、マスタDレジスタ340とマスタSレジスタ341の直接出力信号44swbと、シフト型バス50への出力アドレス44saである。これらは、排他的に処理され、シフト型バス50のプロトコルをもって制御される。
また、ローカルDMAC34がデータメモリ35を読み出すためのアドレス44daは、データメモリ制御部33のアドレス43pに接続される。
このように、第1の実施例によれば、命令メモリ31のアクセス頻度削減と、各ブロックへのクロック供給停止などにより、消費電力を削減可能である。また、分岐命令に隠蔽や、ローカルDMAC34との並列動作などにより、実質的に処理サイクル数を削減し、低電力化を実現する。
図14を用いて、本発明の第2の実施例について説明する。図14は、本実施例における映像処理エンジン66のブロック図である。図6に示した、第1の実施例の映像処理エンジン66に対し、3つの差分がある。
1つ目は、CPU部30の入力データ30iと演算データ30wbが、ベクトル演算部46に接続されたものである。入力データ30iは、CPU部30内のレジスタファイル304に入力するデータであり、レジスタファイル304のデータを更新可能である。演算データ30wbは、CPU部30演算結果であり、ベクトル演算部46に入力される。
2つ目は、図6の命令メモリ制御部32に対し、命令メモリ制御部47が接続される。命令メモリ制御部47は、複数のプログラムカウンタを有し、命令メモリ31の制御を行う。これに伴い、三つ目の差分は、ベクトル演算部46が、命令メモリ制御部47にパス37を介して接続される。
図15に、第2の実施例におけるベクトル演算部46のブロック図を示す。ベクトル演算部46の機能は、図8で示したCPU部30に対し、データメモリ35に対するアクセスが出来ない点である。インタフェースの差は、パス38、パス39、パス45が存在しない。なお、演算部463は、図8の演算部313と同一構成、若しくは、命令セットが異なっていてもよい。
ベクトル演算部46の演算内容については、図21から図26を用いて後述する。
図16に命令メモリ制御部47のブロック図を示す。命令メモリ制御部47と図10に示した命令メモリ制御部32との差は2つである。
1つ目は、調停部470で、CPU部30とベクトル演算部46からの2つの命令フェッチ要求37rを受託し、調停する。
調停結果471は、ベクトル演算部46向けのプログラムカウンタ472に入力される。また、セレクタ475を制御して、命令メモリ31をアクセスするためのアドレスなどの制御線40cを出力する。このように、命令メモリ31からは2つのCPUの命令列が格納され、命令メモリ31を共有することが可能である。第1の実施例の説明にて、本方式では、命令フェッチの発行間隔を大きく出来ると述べた。従って、複数のCPUが共有の命令メモリ31をアクセスした場合においても、アクセス競合の発生する頻度は低く、性能低下を抑止可能である。
2つ目の差分は、同期制御部473である。同期制御部473は、CPU部30とベクトル演算部46の同期処理を行うブロックで、各CPUに対するストール信号474を生成する。
図14および図15の説明にて、CPU部30とベクトル演算部46の演算結果は、他方のレジスタファイル304と462に格納可能と示した。同期制御は、2つの方式があり、1つは、入力データの準備が出来ているかを示す同期化である。例えば、CPU部30の演算データ30wbが有効になった時点で、ベクトル演算部46は、その演算データ30wbを使用可能となる。従って、演算データ30wbが有効となるまで、ベクトル演算部46はストールしなければならない。これを入力同期とする。2つ目は、書込み先のレジスタファイルが、書込み可能常態であるかを知る同期化である。例えば、ベクトル演算部46のレジスタファイル462が書込み可能となるまで、CPU部30はストールしなければならない。これを出力同期とする。
また、他の映像処理エンジン6から、ローカルDMAC34を使用して、データメモリ35にデータをダイレクトメモリ転送し、本転送データをCPU部30が読み出す場合、そのダイレクトメモリ転送が終了していることを認識しなければならない。データ転送が終了していない場合、CPU部30はストールする。これをブロック間同期と呼ぶ。なお、ブロック間同期については、第1の実施例でも使用可能であるが、この第2の実施例のみで説明を行う。
同期制御部473は、これら3つの同期化処理を行う。次に、同期制御方式について説明する。
同期制御には、CPU毎に配置される4つのカウンタと、ブロックに1ペアで配置される2つのカウンタと、命令上に定義された5つのフラグにより同期化を行う。表16にカウンタの定義を示す。また、表17に命令内に配置する同期化フィールドの定義を示す。
Figure 2008003708
Figure 2008003708
まず、図17を用いて、入力同期について説明する。CPU部30の演算データ30wbが有効になった時点で、ベクトル演算部46は、その演算データ30wbを使用可能となる。従って、演算データ30wbが有効となるまで、ベクトル演算部46はストールする必要がある。CPU部30の命令にて、DREフィールドが1の命令が終了時点で、ベクトル演算部46内の実行レディカウンタERC〔ベクトル演算部46〕をカウントアップする。本命令にて、演算データ30wbをベクトル演算部46に格納し、本命令終了時点にて、ベクトル演算器46は、データ30wbを使用した演算が可能となる。それまでベクトル演算器46における、ISYNCを有した命令はストールする。本ストール条件は、ERC〔ベクトル演算部46〕がSRC〔ベクトル演算部46〕よりも小さいか等しい時で、ISYNCを有した命令時ある。先の実行レディカウンタERC〔ベクトル演算部46〕がカウントアップされた時点で、実行レディカウンタERC〔ベクトル演算部46〕はスレーブ要求数カウンタSRC〔ベクトル演算部46〕よりも大きくなる。この時点で、ベクトル演算器46は、ストールを解除し演算をスタートできる。同時にスレーブ要求数カウンタSRC〔ベクトル演算部46〕をカウントアップする。この2つのカウンタの更新1セットで、1つの入力同期を行う。
また、ベクトル演算器46の処理速度が遅く、SRCとERCのカウントアップに乖離があった場合においても、CPU部30による演算データ30wbの準備、すなわち、実行レディカウンタERCのカウントアップは可能で、データのプリフェッチとして動作可能である。
同様に、ベクトル演算器46が生成した演算データ30iをCPU部30が使用する場合は、先の説明とは逆に、ベクトル演算器46の命令にて、DREフィールドを使用し、CPU部30の命令にてISYNCフィールドを使用し、CPU部30内に配置された実行レディカウンタERC〔CPU部30〕とスレーブ要求数カウンタSRC〔CPU部30〕により、入力同期が可能となる。
なお、ここでは、実行レディカウンタERCとスレーブ要求数カウンタSRCを使用した入力同期について説明したが、1ビット幅のフラグでも可能である。例えば、実行レディカウンタERCの更新条件でフラグをセットする。本フラグと演算データの受け手側のCPU命令のISYNCフラグが共に1になるまで、2つのCPUはストールする。ストール解除時点で、フラグをクリアすることにより、少ない論理回路で、2つのCPU間の同期化を可能とする。
次に、図18を使用して、出力同期について説明する。出力同期も入力同期と同様に2つのカウンタと2つの命令内で定義する同期フィールドにより同期化を行う。出力同期は、書込み先のレジスタファイルが、書込み可能常態であるかを知る同期化であり、例えば、ベクトル演算部46のレジスタファイル462が書込み可能となるまで、CPU部30はストールしなければならない。入力同期は、後段CPUのストールであったのに対し、出力同期は前段CPUのストールである。
本例の動作では、ベクトル演算器46の命令にて、RFRフィールドが1にセットされた命令が終了した時点で、ベクトル演算器46のレジスタファイル462に対して、CPU部30から書込み可能とする。このRFRフィールドが1にセットされた命令が終了した時点で、CPU部30のレジスタファイルレディカウンタRFRC〔CPU部〕をカウントアップする。これまで、CPU30部のOSYNCがセットされた命令は起動要求時点でストールする。本ストール条件は、レジスタファイルレディカウンタRFRC〔CPU部〕の値が、マスタ要求数カウンタMRC〔CPU部〕よりも小さいか等しい時である。CPU部30のOSYNCがセットされた命令を起動受託時点で、マスタ要求数カウンタMRC〔CPU部〕をカウントアップする。本方式も入力同期と同様に、前段CPUの処理が非常に遅く、後段CPUの処理が早い場合、レジスタファイルの空き容量を多く空けることが可能である。この場合、前段CPUの出力同期時にはストールが発生しない。
同様に、CPU部30のレジスタファイル304が書込み可能となるまで、ベクトル演算部46はストールする出力同期では、ベクトル演算部46がOSYNCを使用し、CPU部30がRFRフィールドをセットすることで、2CPU間の出力同期を実現する。
これら入力同期と出力同期の組合せにより、2つのCPU間のレジスタファイルレベルの細粒度な同期化を実現する。これらの同期化方式では、命令自身に同期化フィールドを有することが特徴である。
最後に、図19を用いて、ブロック間同期について説明する。ブロック間同期とは、他の情報処理エンジン6などが、ダイレクトメモリ転送により、データメモリ35にデータを格納し、本転送データをCPU部30によるリード命令にて使用する際の同期化である。CPU部30は、ダイレクトメモリ転送が終了し、全てのデータがデータメモリ35内に格納されていることを認識する必要があり、格納されていない場合、入力データは無効な値となるため、ストールしなければならない。すなわち、リード命令時において、そのリード命令が実行可能かどうかを調べるため、先に示した、入力同期とほぼ同様な方式で同期化を行う。すなわち、2つのカウンタの大小比較により同期化を行う。
1つ目のカウンタは、データメモリレディカウンタDMRCで、先に示したシフト型バス50の転送にて、“Last”信号を伴う転送にてカウントアップするカウンタである。これは、ローカルDMAC34のマスタDレジスタ340の“Last”フラグの設定により、ダイレクトメモリ転送の最終転送、すなわち、2次元矩形転送の最後の転送時点でアサートされる。すなわち、ダイレクトメモリ転送が終了したことを認知可能な信号で、これが“1”のときに、データメモリレディカウンタDMRCをカウントアップする。すなわち、CPU部30から見た場合、データの準備ができていることを示す。
2つ目のカウンタは、データメモリアクセスカウンタDARCで、リード命令のオペコード内に配置されたMSYNCが“1”の命令が実行可能となった時点でカウントアップするカウンタである。従って、CPU部30がリードを実行可能なタイミングは、データメモリレディカウンタDMRCがデータメモリアクセスカウンタDARCよりも大きいときである。言い換えれば、データメモリレディカウンタDMRCがデータメモリアクセスカウンタDARCよりも等しいか小さい場合、CPU部30はストールする。この様に、リード命令という命令レベルで、ブロック間の同期化を可能とする。
この様に、第2の実施例によれば、複数の2次元のオペランドを使用可能なCPUが命令メモリを共有化した場合においても、命令の発行間隔が大きいため、性能低下を抑止可能であるとともに、命令メモリの共有化によるメモリ面積の削減が可能である。更に、CPU部30にて、データメモリ35へのリードとライト処理、及びベクトル演算器46にて、演算処理を行い、同期手段にて2つのCPU間のレジスタファイルレベルの同期化により、演算スループットを向上できる。また、命令レベルで、ブロック間の同期化を実現する。
図20を用いて、第3の実施例について説明する。図20は、本実施例における映像処理エンジン66内に配置されるCPU部の構成である。第1の実施例では、1つのCPU部30で構成し、第2の実施例では、CPU部30とベクトル演算部46の2つのCPUによる構成にて説明した。第3の実施例では、2つ以上の複数のCPUを直列かつリング型に接続するものである。図3では、先頭のCPUに、データメモリ35へのアクセスが可能なCPU部30を配置し、複数のベクトル演算部46、46nを直列接続し、終端にデータメモリ35へのアクセスが可能なCPU部30sを接続する。CPU部30sの演算データ30iは、再度、CPU部30の入力データ部に接続される。
この時、各CPUはそれぞれプログラムカウンタを有す構成となり、実際には図16で示した命令メモリ制御部47内のプログラムカウンタを複数持つ構成となる。調停部470は、複数の命令フェッチ要求37rから、命令フェッチの選択を行う。
また、同期化処理についても、制御が異なる。第2の実施例の説明では、2つの隣り合うCPU間の入力同期方式と出力同期化方式について述べた。第3の実施例にても同様の同期化処理を行う。すなわち、隣り合うCPU同士で、入力同期と出力同期を行うものである。また、最終段のCPU部30sと初段のCPU30との間でも、同期化を行う。
また、CPU部30とCPU部30sは共にデータメモリ35をアクセスする。従って、図11で示したデータメモリ制御部33も、複数のデータメモリアクセスを制御する。
本方式によれば、CPU部30にて、データメモリ35からのデータ読み込みを行い、ベクトル演算部46に転送する。ベクトル演算器46の演算結果をベクトル演算器46nに転送し、ベクトル演算器nは、次の処理を行い、CPU部30sに演算データを転送する。CPU部30sは、演算結果をデータメモリ35に転送することで、データのリード、演算、データの格納がパイプラインで動作し、高い演算スループットを得ることが出来る。特にデータメモリ35をインタリーブ構成とし、リード命令とライト命令、およびダイレクトメモリアクセスのブロックを分割することで、高いスループットを得ることが可能である。
さらに本方式によれば、2つ以上のCPUを直列かつリング的に接続した構成においても、CPU間の同期化を伴うマルチCPU構成を実現する。さらに、CPU数が増えた場合においても、レジスタファイルのリードライトポート数は増加せず、ネットワークやレジスタファイルの面積を増加させない。例えば、上掲の特許文献3に示されたVLIW構成などによるCPU数の増加では、演算器数に比例して、レジスタのポート数が増加し、面積コストが大きくなるのに対し、本方式の直列接続では、これが増加しない。
また、VLIW方式では、複数の演算器が活性するタイミングが異なる。例えば、同一演算ループ内にて、1つの演算器はメモリリードを行い、2つ目の演算器は、汎用演算を行い、3つ目の演算器がメモリライトする例を考える。この時、それぞれのCPUが実際に動作する演算サイクル数は異なるが、同一演算ループで処理がなされるため、演算器の稼働率が低下し、結果、必要処理サイクル数が増加し、消費電力が増加する。一方、本方式では、各CPUがそれぞれプログラムカウンタを有することが可能で、他のCPUの動作及びプログラムカウンタの動作に依存しないで、各自の演算を処理することができる。例えば、10回のループのうち、5回目と6回目の間に、1つのパラメータを変更する場合、VLIW方式では、5回ずつの2ループで命令列を記述する必要があるが、本方式では、それぞれプログラムカウンタを有することにより、パラメータ変更を行うCPUのみ2つのループで命令列を指定可能で、演算稼働率を向上可能であると同時に、使用する命令メモリ31の容量を削減できる。
次に、命令のオペランドにWidthフィールドとCountフィールドによる2次元オペランド指定方式について、その実施例を示す。これまで、2次元オペランド指定により、命令数を削減し、命令メモリ31の読出し回数削減による低電力化、命令メモリ31の容量削減による低電力化と面積コスト削減について述べた。これに加え、処理サイクル数削減による、低電力化も実現できる。ここでは、内積演算と畳み込み演算を用いて、その実施例について説明する。
内積演算は、画像コーデックや画像フィルタなどに使用される汎用的な画像処理の1つである。ここでは、4x4行列の内積演算を例として説明を行う。本内積演算例を図21に示す。図が示すように、4x4行列の内積演算の1つのデータ出力は、乗算を4回実行し、それらの演算結果を加算した値である。本演算を4x4行列として、16要素に対して、同様の演算を行うものである。本例での説明では、各データ要素のサイズを16ビット(2バイト)とし、64ビット幅演算器で演算するものとする。また、ベクトル演算器46のレジスタファイル462内のレジスタには、行列Aと行列Bが以下のように格納されているものとし、演算結果は、レジスタ8,9,10,11に格納するものとする。

レジスタ0:{A00、A10,A20,A30}
レジスタ1:{A01、A11,A21,A31}
レジスタ2:{A02、A12,A22,A32}
レジスタ3:{A03、A13,A23,A33}
レジスタ4:{B00、B10,B20,B30}
レジスタ5:{B01、B11,B21,B31}
レジスタ6:{B02、B12,B22,B32}
レジスタ7:{B03、B13,B23,B33}

このように、2次元内積演算では、演算の入力に複数のレジスタを使用することが特徴である。図22に示す一般的な1サイクルに1命令を発行する4並列のSIMD型演算器では、以下のような命令列で処理される。なお、行列Aは、以下のように転置された値が格納されているものとする。

レジスタ0:{A00、A01,A02,A03}
レジスタ1:{A10、A11,A12,A13}
レジスタ2:{A20、A21,A22,A23}
レジスタ3:{A30、A31,A32,A33}

命令1:Src1(レジスタ0)、Src2(レジスタ4)、Dest(レジスタ8[0])とする、積和演算。
命令2:Src1(レジスタ0)、Src2(レジスタ5)、Dest(レジスタ8[1])とする、積和演算。
命令3:Src1(レジスタ0)、Src2(レジスタ6)、Dest(レジスタ8[2])とする、積和演算。
命令4:Src1(レジスタ0)、Src2(レジスタ7)、Dest(レジスタ8[3])とする、積和演算。
この4命令にて、内積演算に第1行を演算し、Src1レジスタを変更することで、4行分の演算を行う。従って、合計16命令を16サイクルかけて演算する。なお、前処理として、行列Aの転置が必要となる。従って、実質的に必要サイクル数が16サイクルよりも大きい。
一方、2次元オペランドを指定可能な本実施例では、図23に示す演算器構成をとる。図22に示したSIMD型の演算器と比較し、Src2入力の前段にセレクタ609を配置し、Src2とSrc2[0]の値を選択入力する。また、演算1サイクル毎に、パス610を使用して、Src2の値を左シフトする。更に乗算器600の演算結果を格納するレジスタ601の出力は、シグマ加算器607に入力され、シグマ加算器607の演算結果はレジスタ608に格納される。シグマ加算器607は、レジスタ601の結果とレジスタ608の結果を順次シグマ加算する演算器である。本例では、4サイクル分の乗算結果をシグマ加算し、丸め込みを行い、Destとして演算結果を得る。
図21の内積演算例の演算結果の第1行目に注目する。行列Bに関しては、16要素のデータ入力が必要であるのに対し、行列Aの入力は、A00、A10、A20、A30で、レジスタ0に格納された値のみである。また第1要素の乗算に関しては、全てA00が入力される。本演算の処理例を図23に示す演算器で実現する。
Src1には行列B、すなわちレジスタ4を設定し、Src2には行列A、すなわちレジスタ0を設定する。Src1側は、クロックが供給されるたびに、レジスタ4、レジスタ5、レジスタ6、レジスタ7、再びレジスタ4の順で供給する。Src2側は、1サイクル目にレジスタ0を入力し、2,3,4サイクル目は、パス610を使用して左シフトする。この時セレクタ609は、Src2[0]データを選択する。これにより、Src2出力は、1サイクル目はA00となり、2サイクル目はA10となり、3サイクル目はA20となり、4サイクル目はA30となる。5サイクル目にはレジスタ1を供給し、6,7,8サイクルは同様にシフトする。このようなデータ供給により、4サイクルで1行の演算結果を得ることが出来る。これにより、4サイクルに一度、演算結果Dest606が生成され、このタイミングにて、レジスタファイル462を更新する。本方式により、レジスタファイル462の書込みにバイトイネーブルを必要とせず、レジスタファイルの面積を縮小できると共に、データの転置を必要とせず、合計16サイクルで内積演算を実現する。
次に転置行列に対する内積演算について、図24の内積演算例を用いて動作を説明する。図24では、第1行列である行列Aを転置した場合の内積である。ここでも、演算結果の第1行目に注目する。行列Bに関しては、16要素のデータ入力が必要であるのに対し、行列Aの入力は、A00、A01、A02、A03で、レジスタ0からレジスタ3までのデータ要素[0]に格納された値のみである。本演算では、先の転置のない内積演算と比較し、Src2の供給方法を変更することで、第1行列が転置の内積演算を実現する。先の転置のない行列演算では、サイクル2,3,4時にパス610を用いて、Src2をシフトしてデータ供給したのに対し、本例では、サイクル1ではレジスタ0を使用し、サイクル2ではレジスタ1を使用し、サイクル3ではレジスタ2を使用し、サイクル4ではレジスタ3を使用する。第1行の内積では、レジスタ0から3までのデータ要素[0]を使用し、第2行の内積ではデータ要素[1]を使用し、第3行の内積ではデータ要素[2]を使用し、第3行の内積ではデータ要素[3]を使用する。本方式により、先に示したSrc2の供給方法のみを変更することで、第1行列が転置の内積演算を実現する。この時、乗算器以降のデータパスの異なった動作は存在しない。従って、一般的なSIMD型演算器では、内積演算前の前処理として転置が必要となるが、本方式では必要なく、処理サイクル数を削減できる。
なお、第2行列のみ転置の行列演算では、Src1とSrc2の入力は転置を伴わない内積と同様なデータ供給を行い、演算器は通常のSIMD型演算器と同様に、1サイクルで4要素を加算する構成で実現する。本方式では、シグマ加算器607の入力にレジスタ608を使用せず、4つのレジスタ601の出力を加算する。
次に畳み込み演算の動作例について説明する。畳み込み演算は、画像のローパスフィルタやハイパスフィルタなどによるフィルタリング処理やエッジ強調などに使用される。また、画像コーデックの動き補償処理などでも使用される演算である。畳み込み演算は、内積演算と異なり、第2行列(畳み込み係数とする)が固定で、本畳み込み係数を、第1行列の全データ要素に対して演算するものである。図25に2次元の畳み込み演算例を示す。図が示すとおり、出力データの全データ要素には、第2配列の畳み込み係数が乗じられ、シグマ加算したものである。
これを実現する演算器構成の一部を図26に示す。本構成では、図23で示した内積演算器構成のレジスタ601の入力手前までの構成を示している。内積演算器構成との違いは、Src1も同様に、パス612によるシフトレジスタ構成であることである。
畳み込み演算の動作を示す。まず、配列Aと配列Bは、以下に示すレジスタに配置されているものとする。この時、配列Aの1列目から4列目のデータと5列目のデータは異なったレジスタに配置する。配列Bは1つのレジスタに配置する。

レジスタ0:{A00、A10,A20,A30}
レジスタ1:{A40、なし,なし,なし}
レジスタ2:{A01、A11,A21,A31}
レジスタ3:{A41、なし,なし,なし}
レジスタ4:{A02、A12,A22,A32}
レジスタ5:{A42、なし,なし,なし}
レジスタ6:{A03、A13,A23,A33}
レジスタ7:{A43、なし,なし,なし}
レジスタ8:{B00、B01,B10,B11}

Src1には、レジスタ0を投入し、Src2にはレジスタ8と投入する。この時、Src2の出力はセレクタ609により、Src2の第一データ要素が投入される。すなわち、Src2[0]、Src2[0]、Src2[0]、Src2[0]である。1サイクル目での、4つの乗算器600の出力は以下の通りである。

1サイクル目:
600[0]出力:A00*B[00]
600[1]出力:A10*B[00]
600[2]出力:A20*B[00]
600[3]出力:A30*B[00]

2サイクル目では、Src1とSrc2共にパス610と612を使用して左シフトする。Src1は、レジスタ1の第1データ要素であるA40をSrc1の[3]に投入する。結果、4つの乗算器600の出力は以下となる。な

2サイクル目:
600[0]出力:A10*B[01]
600[1]出力:A20*B[01]
600[2]出力:A30*B[01]
600[3]出力:A40*B[01]

3サイクル目では、Src2はパス612を使用して左シフトする。Src1は読み出しレジスタポインタを更新し、レジスタ2を投入する。結果、4つの乗算器600の出力は以下となる。

3サイクル目:
600[0]出力:A01*B[10]
600[1]出力:A11*B[10]
600[2]出力:A21*B[10]
600[3]出力:A31*B[10]

4サイクル目では、2サイクル目と同様に、Src1とSrc2共にパス610とパス612を使用して左シフトする。結果、4つの乗算器600の出力は以下となる。

4サイクル目:
600[0]出力:A11*B[10]
600[1]出力:A21*B[10]
600[2]出力:A31*B[10]
600[3]出力:A41*B[10]

この4サイクル分のデータをシグマ加算器607でシグマ加算することにより、1行目の畳み込み演算結果を得る。
5サイクル目では、再度、Src1にレジスタ2を投入し、Src2には再度レジスタ8を投入し、第2行目の畳み込み演算を行う。結果、16サイクルで、4x4行列の畳み込み演算結果を得る。
なお、これらの説明では、Src1とSrc2の供給にシフトレジスタを使用すると説明したが、セレクタを使用したデータの選択を行い、同様のデータ供給を行うことで、同様の効果を得る。従って、データの供給手段が特徴である。
図22に示した一般的なSIMD型演算器では、垂直方向の畳み込み演算は、データ要素毎の積和演算を用いる。但し、4つの積和演算を終了した時点で、データの丸め込みが必要であるため、各積和演算のステージでは、8ビットデータを16ビットデータにビット拡張して積和演算を行わなくてはならない。更に4つの積和演算が終了した時点で、再度、16ビットデータを8ビットデータに丸め込む。積和演算時は、ビット拡張のため、実質的に並列使用する演算器数が半減し、処理サイクル数が増加する。また、ビット拡張自身と丸め込み自身の演算サイクル数が増加する。本方式のように、2次元オペランドを指定することにより、処理サイクル数を削減できる。
一方、図22に示した一般的なSIMD型演算器による、水平方向の畳み込み演算では、データ要素を生成する度に、配列Aをデータ要素単位でシフトして、演算器に投入しなければならず、処理サイクル数が増加する。更に、2次元の畳み込みでは、ビット拡張、シフト、丸めなどにより処理サイクル数が増加する。
従って、本方式のように2次元のオペランドを指定することは、複数のソース使用する命令を1つの命令で表現することを意味し、真に必要な積和演算以外の前処理や後処理を含めて処理サイクルを削減することができる。その結果、低い動作周波数で処理を実現可能でき、さらに消費電力を削減できる。
本実施例における組込みシステムのブロック図である。 本実施例における映像処理部6のブロック図である。 本実施例におけるシフト型バス50のブロック図である。 本実施例におけるシフトレジスタスロット500のブロック図である。 本実施例におけるシフト型バス50のタイミングチャートである。 本実施例における映像処理エンジン66のブロック図である。 本実施例における演算の一例である。 本実施例におけるCPU部30のブロック図である。 本実施例における命令デコード部303が生成するレジスタファイル304の読出しポートと書込みポートを制御する制御線308と、データメモリ35のアクセスアドレス45を生成するフローチャートである。 本実施例における命令メモリ制御部32のブロック図である。 本実施例におけるデータメモリ制御部33のブロック図である。 本実施例におけるローカルDMAC34のブロック図である。 本実施例におけるデータパス部36のブロック図である。 第2の実施例における映像処理部66のブロック図である。 第2の実施例におけるベクトル演算部46のブロック図である。 第2の実施例における命令メモリ制御部47のブロック図である。 本実施例における、入力同期のストール条件を説明するための図である。 本実施例における、出力同期のストール条件を説明するための図である。 本実施例における、映像処理エンジン間同期のストール条件を説明するための図である。 第3の実施例における、映像処理エンジン66内に配置されるCPU部の構成を示した図である。 内積演算の例を説明するための図である。 従来的なSIMD型演算器の構成である。 本実施例における演算器の構成を示した図である。 転置を伴う内積演算の例を説明するための図である。 畳み込み演算の例を説明するための図である。 本実施例における演算器の構成を示した図である。
符号の説明
1…CPU、2…ストリーム処理部、3…音声処理部、4…外部メモリ制御部、5…PCIインタフェース、6…映像処理部、7…DMAコントローラ、8…表示制御部、9…内部バス、10…DMAバス、11…映像入力部、12…映像出力部、13…音声入力部、14…音声出力部、15…シリアル入力部、16…シリアル出力部、17…ストリーム入力部、18…ストリーム出力部、19…IOデバイス、20…外部メモリ、21…ディスプレイ、22…PCIバス、23…PCIデバイス、30,30s…CPU部、31…命令メモリ、32…命令メモリ制御部、33…データメモリ制御部、34…ローカルDMAC、35…データメモリ、36…データパス部、46、46n…ベクトル演算部、47命令メモリ制御部、50…シフト型バス、60…内部バスブリッジ、61…内部バスマスタ制御部、62…内部バススレーブ制御部、65…共有ローカルメモリ、66,67…映像処理エンジン、68…専用ハードウェア、301…命令レジスタ、303…命令デコード部、304…レジスタファイル(汎用レジスタ)、313…演算部、320…調停部、322…プログラムカウンタ、323…セレクタ、324…命令レジスタ、325…分岐制御部、327…条件分岐レジスタ、330…調停部、331…アドレスセレクタ、332…データセレクタ、333…データレジスタ、340…マスタDレジスタ、341…マスタSレジスタ、342…スレーブDレジスタ、343…スレーブSレジスタ、344…セレクタ、345セレクタ、346…データメモリアドレス発生器、347…シフト型バスアドレス発生器、
460…命令レジスタ、461…命令デコード部、462…レジスタファイル、463…演算部、470…調停部、472…プログラムカウンタ、473…同期制御部、475…セレクタ、500,501,505…シフトレジスタスロット、512,516…BIDデコーダ、510,514,518…レジスタ、600…乗算器、601…レジスタ、602…加算器、604…レジスタ、605…丸め込みシフタ、606…Destレジスタ、607…シグマ加算器、609,612…セレクタ。

Claims (10)

  1. 命令メモリとデータメモリとCPUとを具備した映像処理エンジンであって、
    前記CPUは、さらに命令デコーダと汎用レジスタと演算器とを有し、
    前記CPUの命令オペランドは、データ幅並びに高さ方向を示すデータカウント数を指定するフィールドと、演算処理に使用するデータが格納された汎用レジスタの起点を示すソースレジスタポインタと、演算結果を格納する汎用レジスタの起点を示すデスティネーションレジスタポインタとを有し、
    前記データ幅と前記データカウント数と前記ソースレジスタポインタと前記デスティネーションレジスタポインタとに基づいて、アクセスする前記ソースレジスタのアドレスおよび前記デスティネーションレジスタのアドレスを、サイクル毎に、順次生成する手段を有し、
    前記ソースレジスタから読み出されたデータを前記演算器に投入して演算を実行し、得られた演算結果を順次、前記デスティネーションレジスタに格納することにより、一つの命令で、複数サイクルを消費して、複数の演算を行う映像処理エンジン。
  2. 前記CPUにおいて、
    前記データメモリに対してリード命令およびライト命令を発行する命令のオペランドが、データ幅とデータカウント数とデータ間隔とを指定するフィールドを有し、
    前記データメモリへのアクセスの際に、前記データ幅と前記データカウント数と前記データ間隔から、2次元矩形を表現可能なデータメモリアドレスを生成し、前記データメモリアドレスを用いて、1命令にて、複数サイクルを消費して、複数回に亘り、前記データメモリをアクセスすることにより、2次元のデータを1命令にてアクセス可能である請求項1に記載の映像処理エンジン。
  3. 前記CPUにおいて、前記CPUが発行する畳み込み演算命令と内積演算命令を有し、
    前記ソースレジスタポインタにより指定されて読み出されたソースデータを入力するデータ入力段において、供給するクロック毎に前記ソースデータをシフト出力する手段と、畳み込み演算および内積演算に特化したソースレジスタアドレスとデスティネーションレジスタアドレスを生成する手段を有し、
    前記演算器は、乗算器とシグマ加算器とデータ丸め込み演算器とが直列接続され、1次元もしくは2次元の前記畳み込み演算、および前記内積演算を一つの命令で実行可能である請求項1に記載の映像処理エンジン。
  4. 前記CPUにおいて、前記命令メモリから読み出した命令を格納する命令レジスタを複数セット有し、
    前記命令レジスタのいずれもが有効でない場合、自動的に次の命令読出しを行う手段を有し、
    前記命令読出しの際に、読み出した命令が分岐命令の場合、前記分岐命令を前記命令レジスタに格納せず、分岐先の命令を直ちに読み出し、前記分岐先の命令を前記命令レジスタに格納し、前記分岐命令のオペランドの一つに、分岐するかしないかを指定する分岐条件レジスタを指定するフィールドを有し、
    前記分岐命令時に、選択された分岐条件レジスタの値により、分岐するか分岐しないかを判定する手段を有し、分岐しない場合、次の命令を読み出し、前記分岐命令を命令レジスタには格納せず、
    前記命令メモリからの命令読出しを毎サイクル行わないことで、前記分岐命令による命令の再読出しに要するサイクルを隠蔽する請求項1に記載の映像処理エンジン。
  5. 前記映像処理エンジン内に、請求項1から請求項3のいずれかに記載のCPUを複数有し、前記複数のCPUの各々の演算結果を隣り合うCPUのレジスタに格納する手段を有し、前記複数のCPUは、互いに隣り合うCPUに対して接続され、最終端のCPUは初段CPUに接続されてリング状の接続がなされる請求項1に記載の映像処理エンジン。
  6. 前記CPUが発行する命令のオペランド中に、前記CPUの次段側のCPUが有するレジスタにデータを格納することが可能か否かを確認するための第1のフラグを有し、
    前記次段側のCPUが発行する命令のオペランド中には、前段のCPUからのデータ書き込みが受託可能か否かを示す第2のフラグを有し、
    隣り合う2つのCPU間にて、前記第1及び第2のフラグにより同期化を行う回路を有し、
    書き込みが不可の場合、前段CPUはストールする手段を有し、
    また、前記CPUが発行する命令のオペランド中に、前段のCPUからレジスタに対してデータ書き込みが終了し、データが使用可能か否かを判断するための第3のフラグを有し、前段のCPUが発行する命令のオペランドには、後段のCPUにデータの書き込みを終了したことを伝えるための第4のフラグを有し、
    2つのCPU間で、前記第3および第4のフラグの情報から、同期化を行う回路を有し、
    データの準備が終了していない場合、後段のCPUを待機させるためのストール信号を出力する手段を有し、
    命令のオペランドに隣り合う2つのCPU間の同期化を行うためのフラグを有し、これらのフラグと共に、同期化を制御する回路を有する請求項5に記載の映像処理エンジン。
  7. 前記複数のCPUは、命令メモリを共有し、命令の返送をサイクル毎に時分割で行う請求項5に記載の映像処理エンジン。
  8. 請求項1から請求項7のいずれかに記載の映像処理エンジンが、バスを介して複数個接続された映像処理部を有する映像処理システムであって、
    前記映像処理エンジンの各々には、前記映像処理エンジンの一つが有するデータメモリからデータを読出し、他の一つの映像処理エンジン内のデータメモリに対して、前記データをダイレクトメモリアクセス転送するダイレクトメモリアクセスコントローラを有し、
    前記CPUは、ダイレクトメモリアクセスコントローラを起動および制御する手段を有し、複数の映像処理エンジン間でダイレクトメモリアクセスによるデータ転送を行うことが可能な映像処理システム。
  9. 前記映像処理部において、バスに接続するブロックの一つに、映像処理エンジンに加えて、システムバスなどの第2の内部バスと前記バスとの間でデータ転送を行う内部バスマスタ制御部と内部バススレーブ制御部、および内部バスブリッジからなるデータ転送回路を有し、
    前記データ転送回路では、前記第2のバスを介して、外部メモリに対してアクセスすることが可能で、前記映像処理エンジンの各々と前記外部メモリとの間でデータ転送を可能とする請求項8に記載の映像処理システム。
  10. 複数のシフトレジスタで構成され、前記シフトレジスタ間毎に、同時に複数のデータ転送が可能で、前記シフトレジスタの接続方向を互いに逆とする第1のバスを有し、
    前記第1のバスの一方は、映像処理エンジン間および映像処理エンジンからデータ転送回路の方向に対してデータ転送を行い、
    前記第1のバスの他方は、外部メモリから読み出されたデータを、内部バスとデータ転送回路を介して、各映像処理エンジンに対してデータ転送を行い、
    前記複数の第1のバスにより、映像処理エンジン間のデータ転送と、外部メモリからのデータ転送の競合が発生しない、若しくは、競合頻度を削減できる請求項9に記載の映像処理システム。
JP2006170382A 2006-06-20 2006-06-20 映像処理エンジンおよびそれを含む映像処理システム Expired - Fee Related JP4934356B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2006170382A JP4934356B2 (ja) 2006-06-20 2006-06-20 映像処理エンジンおよびそれを含む映像処理システム
US11/688,894 US20070294514A1 (en) 2006-06-20 2007-03-21 Picture Processing Engine and Picture Processing System
KR1020070034573A KR100888369B1 (ko) 2006-06-20 2007-04-09 영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템
CNB2007100917561A CN100562892C (zh) 2006-06-20 2007-04-09 图像处理引擎及包含图像处理引擎的图像处理系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006170382A JP4934356B2 (ja) 2006-06-20 2006-06-20 映像処理エンジンおよびそれを含む映像処理システム

Publications (2)

Publication Number Publication Date
JP2008003708A true JP2008003708A (ja) 2008-01-10
JP4934356B2 JP4934356B2 (ja) 2012-05-16

Family

ID=38862873

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006170382A Expired - Fee Related JP4934356B2 (ja) 2006-06-20 2006-06-20 映像処理エンジンおよびそれを含む映像処理システム

Country Status (4)

Country Link
US (1) US20070294514A1 (ja)
JP (1) JP4934356B2 (ja)
KR (1) KR100888369B1 (ja)
CN (1) CN100562892C (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012522280A (ja) * 2009-03-30 2012-09-20 日本電気株式会社 リングバスによって相互接続された複数の処理要素を有する単一命令多重データ(simd)プロセッサ
US8345113B2 (en) 2008-10-28 2013-01-01 Kabushiki Kaisha Toshiba Image processing apparatus and image processing system
JP2014186433A (ja) * 2013-03-22 2014-10-02 Mitsubishi Electric Corp 信号処理システム及び信号処理方法
US9052614B2 (en) 2010-10-29 2015-06-09 Canon Kabushiki Kaisha Vibration control apparatus, lithography apparatus, and method of manufacturing article
EP3264261A2 (en) 2016-06-29 2018-01-03 Fujitsu Limited Processor and control method of processor
JP2021190066A (ja) * 2020-06-02 2021-12-13 インテル・コーポレーション 行列演算の最適化メカニズム
JP2024533255A (ja) * 2021-09-08 2024-09-12 グラフコアー リミテッド 可変ストライドパターンを使用する処理装置

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100932667B1 (ko) * 2007-10-26 2009-12-21 숭실대학교산학협력단 적응적 비동기 파이프라인 구조의 h.264 디코더
CN101369345B (zh) * 2008-09-08 2011-01-05 北京航空航天大学 一种基于绘制状态的多属性对象绘制顺序优化方法
CN104023243A (zh) * 2014-05-05 2014-09-03 北京君正集成电路股份有限公司 视频前处理方法和系统,视频后处理方法和系统
US20160125263A1 (en) * 2014-11-03 2016-05-05 Texas Instruments Incorporated Method to compute sliding window block sum using instruction based selective horizontal addition in vector processor
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US12118451B2 (en) 2017-01-04 2024-10-15 Stmicroelectronics S.R.L. Deep convolutional network heterogeneous architecture
US10474600B2 (en) * 2017-09-14 2019-11-12 Samsung Electronics Co., Ltd. Heterogeneous accelerator for highly efficient learning systems
CN109003132B (zh) * 2017-10-30 2021-12-14 上海寒武纪信息科技有限公司 广告推荐方法及相关产品
CN109074334A (zh) * 2017-12-29 2018-12-21 深圳市大疆创新科技有限公司 数据处理方法、设备、dma控制器及计算机可读存储介质
US11593609B2 (en) 2020-02-18 2023-02-28 Stmicroelectronics S.R.L. Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks
US11531873B2 (en) 2020-06-23 2022-12-20 Stmicroelectronics S.R.L. Convolution acceleration with embedded vector decompression
US20220197634A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Efficient divide and accumulate instruction when an operand is equal to or near a power of two
CN118069224B (zh) * 2024-04-19 2024-08-16 芯来智融半导体科技(上海)有限公司 地址生成方法、装置、计算机设备和存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5039437A (ja) * 1973-08-10 1975-04-11
JPS62208158A (ja) * 1986-03-08 1987-09-12 Hitachi Ltd マルチプロセツサシステム
JPH022451A (ja) * 1987-12-22 1990-01-08 Kendall Square Res Corp マルチプロセッサ構造体のための相互接続システム
JPH04113444A (ja) * 1990-09-04 1992-04-14 Oki Electric Ind Co Ltd 双方向リングバス装置
JP2000057111A (ja) * 1998-08-04 2000-02-25 Hitachi Ltd 並列処理プロセッサ、および、並列処理方法
JP2001184336A (ja) * 1999-12-17 2001-07-06 Samsung Electronics Co Ltd マトリックス演算装置及びマトリックス演算機能を有するデジタル信号処理装置
JP2001188675A (ja) * 1999-12-28 2001-07-10 Nec Eng Ltd データ転送装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3794984A (en) * 1971-10-14 1974-02-26 Raytheon Co Array processor for digital computers
US4967340A (en) * 1985-06-12 1990-10-30 E-Systems, Inc. Adaptive processing system having an array of individually configurable processing components
US5119481A (en) * 1987-12-22 1992-06-02 Kendall Square Research Corporation Register bus multiprocessor system with shift
JP3547139B2 (ja) * 1995-03-17 2004-07-28 株式会社 日立製作所 プロセッサ
US5991865A (en) * 1996-12-31 1999-11-23 Compaq Computer Corporation MPEG motion compensation using operand routing and performing add and divide in a single instruction
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
US6959378B2 (en) * 2000-11-06 2005-10-25 Broadcom Corporation Reconfigurable processing system and method
JP2003271361A (ja) 2002-03-18 2003-09-26 Ricoh Co Ltd 画像処理装置及び複合機
US7415594B2 (en) * 2002-06-26 2008-08-19 Coherent Logix, Incorporated Processing system with interspersed stall propagating processors and communication elements
US20040128475A1 (en) * 2002-12-31 2004-07-01 Gad Sheaffer Widely accessible processor register file and method for use

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5039437A (ja) * 1973-08-10 1975-04-11
JPS62208158A (ja) * 1986-03-08 1987-09-12 Hitachi Ltd マルチプロセツサシステム
JPH022451A (ja) * 1987-12-22 1990-01-08 Kendall Square Res Corp マルチプロセッサ構造体のための相互接続システム
JPH04113444A (ja) * 1990-09-04 1992-04-14 Oki Electric Ind Co Ltd 双方向リングバス装置
JP2000057111A (ja) * 1998-08-04 2000-02-25 Hitachi Ltd 並列処理プロセッサ、および、並列処理方法
JP2001184336A (ja) * 1999-12-17 2001-07-06 Samsung Electronics Co Ltd マトリックス演算装置及びマトリックス演算機能を有するデジタル信号処理装置
JP2001188675A (ja) * 1999-12-28 2001-07-10 Nec Eng Ltd データ転送装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8345113B2 (en) 2008-10-28 2013-01-01 Kabushiki Kaisha Toshiba Image processing apparatus and image processing system
JP2012522280A (ja) * 2009-03-30 2012-09-20 日本電気株式会社 リングバスによって相互接続された複数の処理要素を有する単一命令多重データ(simd)プロセッサ
US9052614B2 (en) 2010-10-29 2015-06-09 Canon Kabushiki Kaisha Vibration control apparatus, lithography apparatus, and method of manufacturing article
JP2014186433A (ja) * 2013-03-22 2014-10-02 Mitsubishi Electric Corp 信号処理システム及び信号処理方法
EP3264261A2 (en) 2016-06-29 2018-01-03 Fujitsu Limited Processor and control method of processor
EP3264261A3 (en) * 2016-06-29 2018-05-23 Fujitsu Limited Processor and control method of processor
US10754652B2 (en) 2016-06-29 2020-08-25 Fujitsu Limited Processor and control method of processor for address generating and address displacement
JP2021190066A (ja) * 2020-06-02 2021-12-13 インテル・コーポレーション 行列演算の最適化メカニズム
JP7582603B2 (ja) 2020-06-02 2024-11-13 インテル・コーポレーション 行列演算の最適化メカニズム
JP2024533255A (ja) * 2021-09-08 2024-09-12 グラフコアー リミテッド 可変ストライドパターンを使用する処理装置

Also Published As

Publication number Publication date
CN100562892C (zh) 2009-11-25
US20070294514A1 (en) 2007-12-20
KR20070120877A (ko) 2007-12-26
CN101093577A (zh) 2007-12-26
JP4934356B2 (ja) 2012-05-16
KR100888369B1 (ko) 2009-03-13

Similar Documents

Publication Publication Date Title
CN100562892C (zh) 图像处理引擎及包含图像处理引擎的图像处理系统
US6289434B1 (en) Apparatus and method of implementing systems on silicon using dynamic-adaptive run-time reconfigurable circuits for processing multiple, independent data and control streams of varying rates
US8024553B2 (en) Data exchange and communication between execution units in a parallel processor
US7937559B1 (en) System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes
EP2480979B1 (en) Unanimous branch instructions in a parallel thread processor
CN101506774A (zh) 相依指令线程调度
JP2001256105A (ja) 非整列循環アドレス指定を用いるマイクロプロセッサ
US8572355B2 (en) Support for non-local returns in parallel thread SIMD engine
US9395997B2 (en) Request coalescing for instruction streams
CN117785480A (zh) 处理器、归约计算方法及电子设备
US6574724B1 (en) Microprocessor with non-aligned scaled and unscaled addressing
US11256518B2 (en) Datapath circuitry for math operations using SIMD pipelines
US9508112B2 (en) Multi-threaded GPU pipeline
CN114830082A (zh) 从多个寄存器中选择的simd操作数排列
US9594395B2 (en) Clock routing techniques
CN115934168A (zh) 处理器和内存访问方法
CN112559037B (zh) 一种指令执行方法、单元、装置及系统
US10699366B1 (en) Techniques for ALU sharing between threads
JP2002507789A (ja) デジタル信号プロセッサ
WO2024001699A1 (zh) 一种着色器输入数据的处理方法和图形处理装置
KR100267092B1 (ko) 멀티미디어신호프로세서의단일명령다중데이터처리
JP2023552789A (ja) 算術論理演算ユニット用のソフトウェアベースの命令スコアボード
US9323521B2 (en) Decimal floating-point processor
GB2394815A (en) Scheduling instruction streams in a SIMD array wherein a determination is made as to which stream has priority and that stream is transferred to the array
CN121166610A (zh) 通用计算单元和计算设备

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090223

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20100510

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110304

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: 20120207

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: 20120220

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150224

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees