JP2024000852A - プログラマブル信号処理回路及び当該回路用のプログラム - Google Patents

プログラマブル信号処理回路及び当該回路用のプログラム Download PDF

Info

Publication number
JP2024000852A
JP2024000852A JP2022099799A JP2022099799A JP2024000852A JP 2024000852 A JP2024000852 A JP 2024000852A JP 2022099799 A JP2022099799 A JP 2022099799A JP 2022099799 A JP2022099799 A JP 2022099799A JP 2024000852 A JP2024000852 A JP 2024000852A
Authority
JP
Japan
Prior art keywords
program
register
data
unit
memory
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.)
Pending
Application number
JP2022099799A
Other languages
English (en)
Inventor
武志 小川
Takeshi Ogawa
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.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Priority to JP2022099799A priority Critical patent/JP2024000852A/ja
Priority to US18/329,738 priority patent/US20230409323A1/en
Publication of JP2024000852A publication Critical patent/JP2024000852A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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
    • 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
    • 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
    • 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/30079Pipeline control instructions, e.g. multicycle NOP
    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing

Landscapes

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

Abstract

【課題】並列動作するプログラム実行部間のデータの受け渡し構造を簡略化したプログラマブル信号処理回路を提供する。【解決手段】プログラマブル信号処理回路は、並列してプログラムを実行可能であり、自身が実行するプログラムを格納するためのメモリを有する複数の実行部と、実行部の夫々が利用可能な直列接続された複数のレジスタを有し、シフト信号を受信して、複数のレジスタの各々が保持するデータを、直列接続における1つ下流に位置するレジスタに転送するレジスタファイル部と、実行部の夫々が1サイクル分のプログラムの実行を終えた場合にシフト信号を発行する発行部と、実行部の各々が、他の実行部にデータを渡す場合に、他の実行部がデータを入力する際に参照するレジスタの1つ上流に位置するレジスタを、1サイクルの処理の結果のデータの格納先とする命令を含むプログラムを実行部夫々のプログラムメモリに格納するシフト制御部と、を有する。【選択図】図1

Description

本発明は、プログラマブル信号処理回路、特に複数の異なるプログラム実行部を有るプログラマブルな信号処理回路に関するものである。
従来、プログラマブルな信号処理装置(シグナルプロセッサ)としては、FPGA(Field-Programmable Gate Array)やリコンフィギュアラブル回路といった信号処理回路そのものを動的に構成するもの、DSPのように命令列を順次実行するプログラム実行によるものが存在していた。
例えば、特許文献1には、異なるプログラムを実行するDSPをカスケード接続して、多段構成する方法が開示されている。プログラムが異なるという事は、それに要する処理時間もDSP間で異なることを意味する。それ故、スループットを向上させるためには、協調動作する他のDSPのBUSY状態の影響を受けて、稼働率が下がる事を防止する工夫が必要となる。
特許文献2には、異なるプログラムを実行するDSPが、それぞれDAMC(Direct Memory Access Controller)を経由してメモリから読み出したデータを演算し、その演算結果をメモリに書き出す構成となっている。そして、特許文献2は、それにより直列にDSPをつないだのと同等のデーターフローを実現するためのDSP間同期のIPC(プロセス間同期)の方法を開示している。
特許第4222808号公報 特開2011-89913号公報
しかしながら、上述の特許文献2に開示された従来技術では、DSPの稼働率は向上するが、DSP間のインターフェース回路や制御CPUやその制御プログラムなどが必要となり、システム全体の回路規模が大きくなってしまう。
本発明はかかる問題に鑑み成されたものであり、プログラマブル信号処理回路における並列動作するプログラム実行部間のデータの受け渡しに係る構造を簡略化させる技術を提供しようとするものである。
この課題を解決するため、例えば本発明のプログラマブル信号処理回路は以下の構成を備える。すなわち、
プログラマブル信号処理回路であって、
それぞれプログラムメモリを有し、前記プログラムメモリに格納されたプログラムを実行することにより並列に動作可能な複数の実行部と、
前記複数の実行部それぞれが利用可能であって、直列接続された複数のレジスタを有するレジスタファイル部であって、シフト信号を受信したことに応じて、前記複数のレジスタの各々が保持するデータを前記直列接続における1つ下流に位置するレジスタに転送するレジスタファイル部と、
前記複数の実行部におけるプログラムメモリに前記プログラムを書き込み、前記複数の実行部のそれぞれが1サイクル分のプログラムの実行を終えた場合、前記複数の実行部に対して前記シフト信号を発行する制御部とを有し、
前記制御部は、前記複数の実行部の各々が、他の実行部にデータを渡す場合に、前記他の実行部がデータを入力する際に参照するレジスタの1つ上流に位置するレジスタを、前記1サイクルの処理の結果のデータの格納先とする命令を含む前記プログラムを前記複数の実行部におけるプログラムメモリに格納し、
前記複数の実行部の各々は、前記1サイクル分のプログラムの実行の後、前記シフト信号を受信したことに応じて、前記プログラムを再び実行することを特徴とする。
本発明によれば、プログラマブル信号処理回路における並列動作するプログラム実行部間のデータの受け渡しに係る構造を簡略化させることができる。
実施形態におけるプログラマブル信号プロセッサの回路構成図。 実施形態におけるレジスタファイル部内のシフトレジスタ群の回路構成図。 実施形態における第1処理部の回路構成図。 実施形態における第1処理部が実行する命令のビットアサインを示す図。 実施形態におけるプログラマブル信号プロセッサの各実行部がプログラムを実行した際の等価回路図。 実施形態におけるプログラマブル信号プロセッサの各実行部が実行するプログラムのリストを示す図。 実施形態におけるプログラマブル信号プロセッサの処理を説明するためのタイミングチャート図。 データの受け渡しに係る各方式を比較する図。 実施形態におけるIOバスのメモリマップを示す図。 実施形態における電子機器のブロック構成図。 実施形態のCPUの処理手順を示すフローチャート。 第2の実施形態におけるプログラマブル信号プロセッサの回路構成図。 第2の実施形態の第1処理部が実行するプログラムリストを示す図。 第3の実施形態におけるプログラマブル信号プロセッサの回路構成図。 第4の実施形態における電子機器のブロック構成図。 第4の実施形態における第1処理部が実行するプログラムリストを示す図。 第4の実施形態における浮動小数点のデータのビットアサインを示す図。 第4の実施形態の信号プロセッサの等価回路図。
以下、添付図面を参照して実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
[第1の実施形態]
図10は、第1の実施形態における情報処理装置のブロック構成図を示している。理解を容易にするため、本装置は、例えばデジタルカメラに代表される撮像装置に適用する例を説明する。
この装置は、プログラマブルな信号プロセッサ(Signal Processor)1001、CPU(Central Processing Unit)1002、メモリ1003a乃至1003d、メモリバス1002,IOバス1006を有する。CPU1002は、装置全体の制御を司り、且つ、プログラマブルな信号プロセッサ1001へのプログラムのロード及び起動制御を行う。メモリ1003a乃至1003dは、CPU1002、及び、信号プロセッサ1001が実行するプログラム、並びに、処理対象の画像データ及び処理後の画像データを格納するために使用されるものであり、RAM、ROM等で構成される。
メモリバス1002は、複数のメモリ(メモリ1003a乃至1003d)と複数のバスマスタ(図示の信号プロセッサ1001,CPU1005を含む)とを接続するマルチレイアータイプのメモリーバスである。IOバス1006は、複数のデバイスとコントローラ(信号プロセッサ1001,CPU1005等)を接続するIOバスである。
なお、図10は、この発明に係る主要部分のみを示している。例えば、図10の構成を、デジタルカメラに代表される撮像装置に適用する場合は、処理対象の画像データを取得するための撮像部、処理後の画像データを不揮発性メモリ等に記録する記録部、更には、ユーザと本装置との間のユーザインタフェース(操作部、表示部)が、上記のデバイスとして、IOバス1006に接続されることになる。
CPU1005は、メモリバス1002を介して、メモリ1003a乃至1003dに格納されたプログラムを実行することで、本装置全体の制御を司る。また、CPU1005は、IOバス1006を経由で、信号プロセッサ1001を制御する。具体的には、CPU1005は、信号プロセッサ1001が実行する複数のプログラムをメモリ1003a乃至1003dから読み込み、IOバス1006を介して、信号プロセッサ1001に内蔵された複数のメモリ(後述する参照符号102、150,111,113)に書き込み、信号プロセッサ1001に対して起動を指示し、処理を実行させる。
信号プロセッサ1001は、IOバス1006を介して、CPU1001からの起動の指示を受信すると、メモリ1003a乃至1003dに格納された処理対象の画像データを読み出してフィルタリング処理を実行し、フィルタリング処理後の画像データをメモリ1003a乃至1003dに書き込む。
次に実施形態における信号プロセッサ1001の構成を更に詳しく説明する。図1は、実施形態における信号プロセッサ1001の回路構成図である。
信号プロセッサ1001は、図示の通り、読出部101,代入部104,第1処理部110,第2処理部112,書込み部114,レジスタファイル部106、シフト制御部117を有する。読出部101,代入部104,第1処理部110,第2処理部112のそれぞれは、自身が実行するプログラムを保持するためのメモリを内蔵する。図示の参照符号102、104,111,113がそれらのメモリである。先に説明したように、CPU1005は、メモリ1003a乃至1003dから読み出した信号プロセッサ1001用のプログラム(4つ)を、IOバス1006を介して、これらメモリ103,104,111,113それぞれに格納することになる。また、CPU1005は、信号プロセッサ1001に対して必要な値を、信号プロセッサ1001が保持する制御レジスタへ設定する処理も行う。
レジスタファイル部106は、汎用シフトレジスタ群107,汎用レジスタ群108、及び、出力レジスタ109で構成される。代入部104,第1処理部110,第2処理部112,及び、書込み部114それぞれが、レジスタファイル部106内の各レジスタをダイレクトに利用可能となっている。
汎用シフトレジスタ群107は、直列に接続された複数のシフトレジスタで構成される。個々のシフトレジスタは32ビットのデータを保持することができる。そして、シフト制御部117からのシフトサイクル信号に応じて、各シフトレジスタは自身が保持しているデータを1つ下流のシフトレジスタに転送する(詳細後述)。なお、実施形態における、汎用シフトレジスタ群107を構成するシフトレジスタの個数は特に制限はないが、実施形態では16個のシフトレジスタで構成されているものとする。信号プロセッサ1001が実行するプログラムにおけるオペランドで表現する場合、これら直列接続されるシフトレジスタは、最上流から下流に向かってR00,R01,R02、…、R0e,R0fと表記する(右側の2文字は16進数表記)。
汎用レジスタ群108は、複数のレジスタで構成される。このレジスタの個数も特に制限がないが、実施形態では15個とする。プログラムにおけるオペランドで表現する場合、汎用レジスタ108を構成する個々のレジスタはR10,R11,R12、…、R1eと表記する。これらレジスタは、汎用シフトレジスタ107内のシフトレジスタと異なり、シフトサイクル信号とは無関係に、データ(32ビット)を保持する。
出力レジスタ109は、フィルタ処理後のデータ(32ビット)を保持するためのレジスタである。そして、この出力レジスタ109は、オペランド表記で“R1f”として表記するものとする。
上記の通り、実施形態におけるレジスタファイル部106は、合計32個のレジスタを有することになる。
読出部101は、内部のプログラムメモリ102に格納されたプログラムを実行することで、メモリ1003a乃至1003d内の処理対象の画像データを画素単位に読み出し、FIFO(First In First Out)メモリ103に格納する。このように、読出部101の処理は、指定されたアドレスから画像データを読み出しては、FIFOメモリ103に格納するという比較的単純な処理であるので、プログラムメモリ102には、読出アドレスの更新処理を示すプログラムが格納されることになる。なお、読出部101は、FIFOメモリ103に空き領域がある場合、読み出し処理を実行する。そして、FIFOメモリ103に空き領域がないメモリフル状態となった場合、読出部101は、一時的に読出を停止し、空き領域が発生するのを待つ。
代入部104は、プログラムメモリ105に格納されたプログラムを実行することで、FIFOメモリ1003から画像データを入力し、その画像データをレジスタファイル部106内の該当するレジスタに代入する処理を行う。つまり、プログラムメモリ105には、入力した画像データをどのレジスタに代入するかを示すプログラムが格納されることになる。なお、代入部104が、FIFOメモリ103からデータを入力すると、FIFOメモリ103には1つ分のデータの空き領域が発生することになる。
第1処理部110は、プログラムメモリ111に格納されたプログラムを実行する。第1処理部110は、プログラムに従って各種演算処理を行う際に、レジスタファイル部106内のレジスタを用いて処理を行う。
第2処理部112は、プログラムメモリ112に格納されたプログラムを実行する。第2処理部110は、プログラムに従って各種演算処理を行う際に、レジスタファイル部106内のレジスタを用いて処理を行う。また、第2の処理部112は、最終的なフィルタ処理結果の画像データを、出力レジスタ109(プログラム内のシフトレジスタ“R1f”)に格納する。
書込み部114は、レジスタファイル部106内の出力レジスタ109に保持されたデータを書き込み用FIFOメモリ116に格納する。そして、書込み部114は、FIFOメモリ116に格納されたデータを、書き込みバッファ115にセットする。書き込み部114は、バッファ115からデータを読み出して、メモリ1003a乃至1003dの予め設定されたアドレス位置に対して書き込みを行う。
以上、実施形態における信号プロセッサ1001の構造を説明した。読出部101と代入部104の間にはFIFOメモリ103を介在させることで、それら間の処理タイミングの違いを吸収している。なお、FIFOメモリ103は3画素分の画像データを記憶可能な容量を有するものとする。
これに対し、代入部104、第1処理部110、および、第2処理部110それぞれの間には、データを入出力ためのインターフェース回路は無い。その代わり、レジスタファイル部106内の汎用シフトレジスタ群107が、代入部104、第1処理部110、および第2処理部110間のデータ転送の役割を担うことになる(詳細は後述)。
図2は、レジスタファイル部106における汎用シフトレジスタ群107の回路図を示している。
参照符号201は、直列接続の最上流に位置するシフトレジスタであり、オペランドで示すと“R00”である。参照符号214は、直列接続の最上流から2番目に位置するシフトレジスタであり、オペランドで示すと“R01”である。以降、直列接続されたレジスタのオペランドは、R02,R03、…、R0fと続くことになる。また、各レジスタは同じ構造である。
ここでは、シフトレジスタ201について説明する。参照符号202は、32ビットのデータを保持するフリップフロップである。204はシフト動作時にデータを転送する入力信号であるが、シフトレジスタ201はシフト動作先頭のレジスタとなるため入力信号として0が入力される。なお、フリップフロップ201が保持するビット数は特に制限は無く、8ビットであっても良い。
参照符号205はフリップフロップ202の出力であり、シフト動作時は、出力205が下流に位置するシフトレジスタ214に取り込まれることになる。
参照符号210は代入部104からの入力信号、211は第2処理部112からの入力信号、212は第1処理部110からの入力信号、213は信号プロセッサ1001外のCPU1005からの入力信号を示している。
参照符号203はシフト動作時にフリップフロップ202および他のシフトレジスタ内のフリップフロップにデータを取り込むための信号を示している。参照符号206は、代入部104が、入力信号210をフリップフロップ202に書き込む際に出力する信号である。参照符号207は、第2処理部112が入力信号211をフリップフロップ202に書き込む際に出力する信号である。参照符号208は、第1処理部212が入力信号212をフリップフロップ202に書き込む際に出力する信号である。209は、外部のCPU1005が、入力信号213をフリップフロップ202に書き込む際に出力する信号である。
各参照信号により制御されるスイッチは、各参照信号203,206,207,208、209がアクティブな場合に、図の下側に接続され、各入力信号210,211,212,213をフリップフロップ202に出力する。また、図示からもわかるように、各参照信号203,206,207,208、209の取り込み信号がアクティブでない場合は、各参照信号により制御されるスイッチは、図の上側に接続される。各参照信号203,206,207,208、209がアクティブでない場合は、フリップフロップ202の値が再びフリップフロップ202に戻ってくるため、クロックが与えられてもフリップフロップ202の値は保持される事になる。
また、各参照信号203,206,207,208、209によるデータの取り込み処理を調停する回路がない。そのため、同時に複数の参照信号がアクティブになった場合、最もフリップフロップ202に近いスイッチで選択されたデータがフリップフロップ202に取り込まれる。ただし、実施形態では、1つのシフトレジスタに対して複数の処理部が同時に書き込みを行わないようにしている。
このようにシフトレジスタ201には、CPU1005に加えて、代入部104、第1処理部110、第2処理部112からも代入が可能であり、参照(読出し)もまた可能となっている。
例えば、代入部104が、FIFOメモリ103からのデータを、レジスタ201に代入(書き込む)場合には、代入部104は、書き込み対象のデータを信号線210に出力し、書き込むための信号206をアクティブにすることで実現できる。また、第1信号処理部が、レジスタ201にデータを書き込む場合は、その書き込み対象のデータを信号212に出力し、信号208をアクティブにすれば良い。
図3は第1処理部110の内部ブロック図である。参照符号301は、プログラムメモリ111内のプログラムの実行する命令位置を示すプログラムカウンタである。参照符号303は、プログラムメモリ111内の、プログラムカウンタ301の示す位置の命令を取り出す命令選択マルチプレクサである。参照符号304は、レジスタファイル部106の全フリップフロップの出力信号を束ねたレジスタバスである。参照符号305は、レジスタバス304から演算入力の第1ソースの信号を選択するマルチプレクサである。参照符号306は。レジスタバス304ら演算入力の第2ソースの信号を選択するマルチプレクサである。参照符号307は、第1ソースと第2ソースの2つの値に対して、実行命令308にしたがった演算を行うALU(Arithmetic and Logic Unit)ある。参照符号310は、ALU307からの演算結果である。参照符号309は、実行命令308にしたがってレジスタファイル部106のいずれかのレジスタへロード信号311をアクティブにするバイナリデコーダである。参照符号312は、プログラムメモリ111に格納された最後を示す命令“END”を検出するEND検出器である。END検出器312は、END命令を検出した場合に信号313を出力する。プログラムカウンタ301は、この信号313を受けてプログラムカウンタ(アドレス)の更新を停止し、且つ、その値をプログラムの先頭にセットする。また、END検出器312は、信号313を、シフト制御部117にも出力する。
以上、第1処理部110の構造を説明した。第2処理部112は、第1処理部110と同じ構造を持つものとし、その説明は省略する。また、代入部104も、プログラムカウンタ及びEND検出器を有し、END検出器がEND命令を検出したとき、アドレス更新を停止し、且つ、その値をプログラムの先頭にセットする。
シフト制御部117は、代入部104,第1処理部110,及び、第2処理部112それぞれからEND命令の検出信号を受信することができる。そして、シフト制御部117は、代入部104,第1処理部110,及び、第2処理部112の全てからEND命令の検出信号を受信した場合、信号203(図2参照)をアクティブにして、シフトサイクル信号を発行する。この結果、汎用シフトレジスタ群107を構成する個々のシフトレジスタは、1つ下流のシフトレジスタにデータを転送することになる。また、代入部104,第1処理部110,及び、第2処理部112は、このシフトサイクル信号を受けて、次のサイクルの処理を開始する。
図4(a),(b)は、第1処理部110のメモリ111(或いは第2処理部のメモリ113)に格納されるプログラムの命令を示している。
同図(a)が、19ビットの命令におけるビットの役割を示している。命令は、4つのフィールドで構成される。ビット18~ビット15の4ビットは、演算の種類(加算、減算、論理演算等)、すなわち、演算子を示すオペコードフィールド401である。ビット14~ビット10の5ビットは演算結果を格納する格納先を示すデスティネーションフィールド402である。ビット9~ビット5の5ビットは第2ソースを示す第2ソースフィールド403である。そして、ビット4~ビット0が、第1ソースを示す第1ソースフィールド404である。このように、命令におけるそれぞれのビットごとに役割が決まっている。
図4(b)はこれらの命令のアッセンブラ上のニーモニック表記例を示している。
図示の参照符号405は「加算」を示すオペコード、参照符号406は代入先レジスタ、407と408は参照レジスタである。オペコード405は図4(a)のオペコードフィールド401に対応し、代入先レジスタ406は、デスティネーションフィールド402に対応する。そして、参照レジスタ407は第2ソースフィールド403、参照レジスタ408は第1ソースフィールド404に対応する。
第1処理部110が、図4(b)の命令を実行した場合の動作は次の通りである。第1処理部110は、マルチプレクサ305にレジスタファイル部106内のシフトレジスタR00を選択させ、マルチプレクサ306にシフトレジスタR01を選択させる。そして、ALU307は、実行命令308(図4(b)のオペコード“ADD”)に従って、マルチプレクサ305,306が選択した値(シフトレジスタR00とR01それぞれから読み出した値)を加算し、その演算結果310を出力する。このとき、デコーダ309は、デスティネーションフィールド402のシフトレジスタ“R02”を選択し、信号208をアクティブにする。この結果、シフトレジスタR00とR01に保持された2つの値の加算結果が、シフトレジスタR02に書き込まれることになる。
図9は、実施形態における信号プロセッサ1001のIOバス106のメモリ空間を示している。
IOバス106のデータバスは32ビットであり、CPU1005から読み書き可能である。汎用シフトレジスタ群107を構成するシフトレジスタR00,R01…は、参照符号901で示すベースアドレス0x0000番地から、参照符号902が示すアドレス0x003Cまでに割り当てられている(“0x”で始まるアドレスは、16進数表記である)。そして、汎用レジスタ群108を構成するレジスタR10、R11…は、参照符号903が示すアドレス0x0040から割り当てられている。そして、出力レジスタ109は、参照符号904が示すアドレス0x007Cに割り当てられている。
参照符号905が示すアドレス0x0100~0x01ffは第1処理部110のメモリ111に割り当てられている。参照符号906が示すアドレス0x0200~0x02ffは、第2処理部112内のメモリ113に割り当てられている。参照符号907が示すアドレス0x0300~0x03ffは、読出部101のメモリ102に割り当てられている。参照符号908が示すアドレス0x0400~0x04ffは、代入部104のメモリ105に割り当てられている。そして、参照符号909は、信号プロセッサ1001の制御用レジスタに割り当てられている。制御用レジスタには、例えば、一連の処理を終了するタイミングを記述するレジスタが含まれる。たとえば、水平方向の画素数分の処理結果が得られた場合に信号プロセッサ1001を停止するように設定できる。
図9からわかるように、レジスタファイル部106内の各レジスタ,及び、各プログラム実行部が有するプログラムを格納するメモリは、IOバス106のメモリ空間内の異なる領域にマッピングされているので、CPU1005はこれらに自由にアクセスできる。例えばCPU1005が信号プロセッサ1001における読取部101のプログラムを書き込む場合は、アドレス0x0300の位置からそのプログラムを書き込めば良い。また、CPU1005は、レジスタファイル部106の任意のレジスタに対しても、該当するアドレスを指定して、任意の値を書き込むこともできる。
信号プロセッサ1001が有するメモリ102,105,111,113は、高速アクセス可能なSRAMとしている。SRAMは、DRAMに比べて高速にアクセス可能であるが、容量当たりのコストがDRAMよりも高い。メモリ102,105,111,113はそれぞれ、比較的サイズの小さなプログラムを格納するので、各メモリの容量も少なくて済む。そこで、実施形態ではメモリ102,105,111,113としてSRAMを採用し、コストの上昇を抑えながら、高速にプログラムの読み書きを可能とする。なお、メモリ102,105,111,113をフリップフロップで構成しても良い。
図11は、CPU1005が実行するプログラムのうち、信号プロセッサ1001の起動に係る処理手順を示している。
S1101にて、CPU1005は処理を開始される。
S1102にて、CPU1005は、メモリバス1002を介して、メモリ1003a乃至1003dから、信号プロセッサ1001内の読出部101,代入部104,第1処理部110、及び、第2処理部112それぞれが実行するプログラム(実施形態では4つ)を読み出す。そして、CPU1005は、先に示した図9のメモリマップに従って、読出部101が実行するプログラムを、IOアドレス空間の0x0300を先頭アドレスにして書き込む。つまり、CPU1005が、メモリ102に、読出部101が実行するプログラムを格納する。同様に、CPU1005は、代入部104用のプログラムを、メモリ105に書き込む。また、CPU1005は、第1処理部110用のプログラムを、メモリ111に書き込む。そして、CPU1005は、第2処理部112用のプログラムを、メモリ113に書き込む。更に、CPU1005は、必要に応じて、信号プロセッサ1001のコントロールレジスタや汎用レジスタにも各種データを書き込む。
S1103にて、CPU1005は読出部101に対して、メモリバス1002におけるアドレス空間における画像データの先頭アドレス、書込み部114に対してフィルタ処理後の画素データの書き際の先頭アドレスをそれぞれ設定する。
S1104にて、CPU1005は、信号プロセッサ1001に対して起動する。
そして、CPU1005は、S1105にて、信号プロセッサ1001から処理終了を示す割り込み信号を待つ。CPU1005は、処理終了を示す割り込み信号を受信した場合、S1106にて、本処理を終了する。
このようにCPU1005が、信号プロセッサ1001の処理を一旦スタートすれば、内部の並列動作における同期の調整を行う必要がないため、単にその終了を待っていれば良い。なお、待つ間にCPU1005は、他の処理を行っても良い。
図6は、信号プロセッサ1001が実行するプログラムの例を示す。また、図5は、信号処理プロセッサ1001が図6に示すプログラムを実行した際の、等価回路図を示している。
また、実施形態における処理対象の画像は水平方向640画素×垂直方向480画素で構成され、且つ、1画素が32ビットで表されるものとする。通常、画像データは8ビットで表現されることが多いが、その場合は32ビット中の8ビットを用いて処理すれば良い。そして、その処理対象の画像データを構成する各画素のデータは、ラスターススキャン順に、メモリバス1002におけるアドレス空間の所定アドレスから順に格納されているものとする。
図6のLIST601は読出部101のメモリ102に格納されたプログラムを示している。LIST602は、代入部104のメモリ105に格納されたプログラムを示している。LIST603は、第1処理部110のメモリ111に格納されたプログラムを示している。そして、LIST603は、第2処理部112のメモリ113に格納されたプログラムを示している。
読出部101は、CPU1005が設定した先頭アドレス位置から画像データを読み込んでは、FIFOメモリ103に格納する。そして、以降、読出部101は、プログラムLIST601で示される値を前回利用したアドレスに加算する処理を行って読出アドレスを更新し、その更新後のアドレス位置から画像データを読み出しては、FIFOメモリ103に格納していく。以下、このアドレス更新とFIFOメモリ103への画像データの格納処理を、FIFOメモリ103がメモリフル状態となるまで行う。このFIFOメモリ103に空き領域が発生するのは、下流に位置する代入部104がデータをFIFOメモリ103から取得する処理を行った場合となる。
先に説明したように、実施形態では、メモリ1003a乃至1003dにおける所定アドレス位置から、画像データがラスタースキャン順に格納されている。画像データのサイズは水平方向640画素としている。故に、読出部101は、初期アドレスに対して、LIST601に示すように、640、640、-1279オフセットして順に加算して、読出アドレスを更新していくことになえる。よって、読出部101は、画像データの左上隅の画素を含む垂直方向の並んだ3画素を読み出し、FIFOメモリ103に格納する。次に、読出部101は、水平右方向に1画素ずれた位置の、垂直方向3画素のデータを読み出し、FIFOメモリ103に格納することになる。以降、読出部101は、これを繰り返していくことになる。
代入部104は、FIFOメモリ103から画像データを入力しては、LIST602に示すプログラムで指定されたシフトレジスタに格納する。LIST602における“LOAD R00”は、「FIFOメモリ103から読み出した画像データを(シフト)レジスタR00にロード(格納)せよ」という命令であると理解されたい。つまり、代入部104は、垂直方向に並んだ3画素の最も上の画素データをシフトレジスタR00、真ん中の画素データをシフトレジスタR02、最も下の画素データをシフトレジスタR04に格納する処理を行う。そして、LIST602のステップ03は“END”であるので、代入部104は、プログラムカウンタを停止し、プログラムカウンタをプログラムの先頭のアドレスに戻し、シフトサイクル信号が発行されるのを待つ。そして、代入部104は、上記処理を続けることにより、垂直方向の3画素の関係を保ちながら、画像の右端までの入力が行われることになる。なお、代入部104によりFIFOメモリ103から画像データが読み出されると、FIFOメモリ103に空き領域が発生する。したがって、FIFOメモリ103がメモリフル状態となって、読出部101が読出を停止している状態で、代入部104によるFIFOメモリ103からの画像データの読み出しが行われると、読出部101は、次の画像データの読み出し処理を再開することになる。
ここで、シフト制御部117が汎用シフトレジスタ群107に対してシフトタイミングであることを示すシフトサイクル信号を発行すると、汎用レジスタファイル部106は、汎用シフトレジスタ群107を構成する各シフトレジスタが保持しているデータを、1つ下流に位置するシフトレジスタに転送する。
第1処理部110は、LIST603に示すプログラムに従った処理を行う。プログラム中の“ADD R06,R01,R03”は、「シフトレジスタR01とR03それぞれの値の加算し、その加算の結果をシフトレジスタR06に格納せよ」という命令であると理解されたい。第1処理部110が、LIST603に示すプログラムに従った処理を開始する直前に、シフト制御部117によるシフトサイクル信号を発行すると、シフトレジスタR00に保持された画素データはR01に転送され、シフトレジスタR02に保持された画素データはR03に転送され、シフトレジスタR04に保持された画素データはR05に転送される。つまり、読出部101がシフトレジスタR00,R02,R04に格納した垂直方向の3画素のデータが、シフトレジスタR01,R03,R05に転送されることになる。また、第1処理部110は、シフトサイクル信号を受信に応じて、LIT603のプログラムの先頭から再実行する。このLIST603のステップ00~02を実行すると、結局のところ、垂直方向の上から下に向かう3画素の値をP1,P2,P3としたとき、シフトレジスタR06には、P1+2×P2+P3の値が格納されることになる。
そして、LIST603のステップ03は“END”であるので、第1処理部110は、処理を先頭に戻しシフトサイクル信号が発行されるのを待つ。
第2処理部112は、LIST604に示すプログラムに従った処理を行う。LIST604のステップ03の“SHIFT R1f、R10,R1d”は、「レジスタR10の値をレジスタR1dに格納された値が示すビット数だけシフトし、そのシフト結果をレジスタR1fに格納せよ」という命令であると理解したい。ビットのシフト方向は、3番目のオペランドR1dの値に依存し、正の場合は左シフト(上位ビットに向かうシフト)、負の場合は右シフト(下位ビットに向かうシフト)である。
実施形態では、CPU1005が、LSIT604のプログラムを第2処理部112のメモリ113に格納すると共に、シフトレジスタR1eに値“-4”を代入する。つまり、LIST604にて、レジスタR1eに“-4”を格納する命令を記述する必要はないので、プログラムのサイズを小さくでき、且つ、処理のスループットを向上させることができる。
第2処理部112がLIST604に示すプログラムに従った処理を開始する直前にシフト制御部117がシフトサイクル信号を発行した場合、直前のサイクルにて第1処理部110がシフトレジスタR06に格納した値がシフトレジスタR07に転送されることになる。また、シフトレジスタR08には、2サイクル前に第1処理部110がシフトレジスタR06に格納した値が格納される。そして、シフトレジスタR09には、3サイクル前に第1処理部110がシフトレジスタR06に格納した値が格納されることになる。
したがって、第2処理部112は、LIST604のステップ00から02を実行すると、水平方向の3つの画素をP1,P2,P3としたとき、シフトレジスタR10には、P1+2×P2+P3の値が格納される。第1処理部110は、垂直方向に並ぶ3画素についての演算であった。したがって、第2処理部112がLIST604のステップ03の命令を実行したとき、出力レジスタR1fには、シフトレジスタR10の値を4ビット右シフトした値(16で除算することと等価)が格納されることになる。つまり、出力レジスタR1fには、3×3画素ブロックの中心位置のフィルタ処理後の画素データが格納されることになる。LIST604のステップ04は"END”であるので、第2処理部112は、プログラムカウンタを先頭に戻し、次のシフトサイクル信号が発行されるのを待つ。
ここで図7のタイミングチャートを参照して、信号プロセッサ1001における読出部101,代入部104,第12処理部110,第2処理部112間の同期について説明する。
図示の参照符号701は、読出部101が読み出してFIFOメモリ103に格納した画像データに対応した画素の位置を示している。図示の0、640,1280…として示されるのは、画像データの値ではなく画像データのオフセットアドレスを示している。
参照符号702は、代入部104によって書き込まれる画像データを示している。図中のR00、R02,R04は、画像データの値ではなく、画像データの転送先レジスタを示している。読出部101より1サイクル遅れて、代入部104はオフセットアドレス0番地のデータをシフトレジスタR00に、オフセットアドレス640番地のデータをシフトレジスタR02に、オフセットアドレス1280番地のデータをシフトレジスタR04に書き込む。
参照符号704は第1処理部110の実行する各ステップを示し、参照符号705は第2処理部112の実行する各ステップを示している。
また、参照符号703は、シフトサイクル信号を示している。シフト制御部117は、代入部104、第1処理部110、第2処理部112の全てのプログラム実行部が、それぞれのプログラムカウンタを自身のメモリ内の先頭に戻したとき(END命令を検出したとき)、シフトサイクル信号703を発行する。この結果、代入部104、第1処理部110、第2処理部112の各処理部は、自身のメモリ内のプログラムを再度実行する。
このしくみによって代入部104、第1処理部110、及び、第2処理部112が並列動作可能となり、且つ、それらの間にインターフェース回路がなくてもデータ転送が可能となっている。
図8を用いて詳しく説明する。図8(a)は代入側プログラムと、代入されたデータを参照する参照側プログラムが並列動作する場合の問題を説明するための図である。
代入側プログラムがレジスタ801、802に対して3画素目を代入した後で参照側プログラムが代入側を追い越すと、レジスタ803は2画素目の情報を参照してしまう事になる。
図8(b)はそのような事を回避するためにダブルバッファ方式(レジスタ801と804,レジスタ802と805,レジスタ803と806)をとった場合の構成で代入側プログラムが3画素目を代入し終えるまで参照側プログラムは2画素目しか参照できない。代入側プログラムが3画素目をレジスタ801乃至803に書き終えて、且つ、参照側プログラムがレジスタ804~806から2画素目を参照し終えてから、1サイクルで転送するというものである。
図8(b)の構成は一般的な構成ではあるが、フリップフロップが倍必要となるため回路規模が大きくなってしまう。
本実施形態の場合、図8(c)に示すようにシフトレジスタ群を用いる。この結果、代入部104、第1処理部110、第2処理部112の全てが1サイクル分の処理を終えた時に、シフト制御部117がシフトサイクル信号を発行する。汎用シフトレジスタ群107は演算に使うものであり、アプリケーションによってはプログラム間のインターフェースに割り当てを多くしたり、逆に回路演算用に割り当てを多くしたりする事ができる。そのため、小さい回路で適応範囲の大きなプログラマブル信号処理回路を構成することができる。
以上、第1の実施形態を説明したが、その特徴を纏めると次の通りである。
プログラマブルな信号プロセッサは、直列接続された汎用シフトレジスタ群と、互いに並列実行可能で、且つ、汎用シフトレジスタ群を利用する複数のプログラム実行部(代入部、第1処理部、第2処理部がどの代表である)と、汎用シフトレジスタ群を構成するシフトレジスタへのシフト要求、及び、個々のプログラム実行部に1サイクル分の処理の開始要求するためのシフトサイクル信号を発生するシフト制御部とを有する。かかる構成において、1つプログラム実行部が他のプログラム実行部にデータを渡す場合には、他のプログラム実行部が入力用として利用するシフトレジスタの1つ上流に位置するシフトレジスタにそのデータを格納する。また、1つのプログラム実行部は、他のプログラム実行部に複数のデータを渡す場合は、少なくとも1つのシフトレジスタを間に挟み、飛び飛びの位置にある複数のシフトレジスタにそれらのデータを格納する。また、個々のプログラム実行部は、1サイクル分の処理の終了を示す命令を検出した場合、動作を終了し、次のサイクルに備えてプログラムカウンタを初期位置にセットする。そして、シフト制御部は、全てのプログラム実行部から、1サイクル分の処理の終了命令の検出したことを受けて、シフトサイクル信号を発行する。
なお、読出部101は、汎用シフトレジスタ群107を利用しない。また、読出部101が実行するプログラムには、END命令を含まない。これは、読出部101は、FIFOメモリ103がメモリフル状態になった場合に読出を停止し、メモリフル状態でない場合に読出を行うだけで良いからである。
上記構成によって、互いに並列動作可能なプログラム実行部は、直列接続されたシフトレジスタ群という単純な構成を利用して、互いにデータ受け渡しができ、与えられたフィルタ処理を行うことが可能になる。
[第2の実施形態]
第2の実施形態を説明する。装置構成は第1の実施形態の図10と同じであるものとし、その説明は省略する。
図12は、第2の実施形態におけるプログラマブルな信号プロセッサ1001の回路構成図である。図1と同様の構成については同じ参照符号を付した。
第1の実施形態では、読出部101,代入部104,第1処理部110,第2処理部112の4つのプログラム実行部が並列動作した。一般に、プログラム実行部の数が多いほど、信号プロセッサとしての処理速度を向上させることができるが、回路規模もそれに応じて複雑になる。本第2の実施形態では、第2処理部112に相当するプログラム実行部がなく、並列動作するプログラム実行部の数を少なくし、回路規模をより単純化させる例である。また、読出部101,代入部104、書込み部114の処理は、第1の実施形態と同じである。
図13に、本第2の実施形態における第1処理部110のメモリ111に格納されるプログラムのリストを示す。本第2の実施形態の第1処理部110は、第1の実施形態における第2処理部112が実行するプログラムをも含めて実行するため、プログラムのステップ数は増えることになる。信号プロセッサ1001のスループットは、プログラム実行部が実行する最大プログラムステップ数に依存するので、第2の実施形態の構成の場合、第1の実施形態と比較してスループットは下がるものの、回路規模を少なくできる。
[第3の実施形態]
第3の実施形態を説明する。装置構成は第1の実施形態の図10と同じであるものとし、その説明は省略する。
図14は、第3の実施形態におけるプログラマブルな信号プロセッサ1001の回路構成図である。図1と同様の構成については同じ参照符号を付した。
本第3の実施形態における信号プロセッサ1001の特徴は、図14に示すように、割り込み信号発生レジスタ1400を加えた点である。この割り込み信号発生レジスタ1400は、新規に追加しても良いが、ここでは汎用レジスタ108の1つであるレジスタR1Eを利用した。そして、レジスタR1Eのビット0に対して“1”が書き込まれたとき、信号プロセッサ1001は外部(例えばCPU1005)に、割り込み信号を出力するとともに、信号プロセッサ1001をサスペンド状態に移行させ、外部からコントロールレジスタにより再開させられるまで停止する。
CPU1005は、この割り込み信号による割り込み処理を起動することになる。この結果、信号プロセッサ1001による例外的に複雑な処理を、CPU1005に肩代わりさせることができ、応用分野は飛躍的に増える。
また、例えば信号処理的でないデータ列をスキャンしてマーカーコードを検出するなどの処理をCPU1005が実行すると、ループのジャンプ命令やカウンタのインクリメント命令などオーバーヘッドがないため、信号プロセッサ1001を含めたトータルのスループットを構造させることができる。
[第4の実施形態]
第4の実施形態を説明する。図15は、本第4の実施形態における装置のブロック構成図である。図15では、図10の構成にGPGPU部(General-purpose computing on GPU (Graphics Processing Units))1501を加えた構成となっている。
近年のデジタルカメラに代表される撮像装置では、撮像面から得られた信号を用いてオートフォーカスを行う事が一般的となっている。しかしながら瞳分離された信号からデフォーカス量に変換するためにはセンサーの光学的特性とレンズの光学的特性に依存して画像上の座標によって大きく特性が変わってしまうという問題がある。レンズ交換式の撮像装置の場合はさらに複雑な条件となる。
このような複雑な光学計算は、浮動小数点による多項式を用いる。かかる点に鑑み、第4の実施形態においてはGPGPU部1501でデフォーカス量変換係数を求める。ただし、デフォーカス量変換係数を用いる側では整数8ビット程度の情報しか必要としておらず、データ転送量を抑えるためにもデータを加工する必要がある。
そこで、第4の実施形態では、浮動小数点演算結果の加工に、プログラマブルな信号プロセッサ1001を用いるようにした。
図17は、浮動小数点のビットアサインを示している。符号部(正負の符号)、指数部、仮数部にそれぞれビットがアサインされており、このままではオートフォーカスの演算を高速に行うことは難しい。
図18は、第4の実施形態における信号プロセッサ1001の等価回路構成図である。参照符号1800は、代入部104に相当する。そして、レジスタ1802が、代入部104が代入する浮動小数点データを保持する。シフト動作により、レジスタ1802からレジスタ1803にデータが転送される。CPU1005は、レジスタR10~R16に、あらかじめ固定値を代入した後で、信号プロセッサ1001を起動する。レジスタR10~R16に設定する値は、図示のプログラムリストに示される通りである。なお、レジスタR10からレジスタR1Fまではシフト機能がないため、同じ値を保持し続ける。
図16は、図18の回路図を模擬する第1処理部110のメモリ111に格納されるプログラムのリストを示している。
ステップ00で、第1処理部110は、R01の浮動小数点をシフトする。そして、ステップ01において、第1処理部110は、マスク処理を行うことにより、指数部を取り出す。そして、ステップ02にて、第1処理部110は、仮数部をシフトするためのオフセットを減算する。
ステップ03にて、第1処理部110は、レジスタR01に保持された浮動小数点のデータを、レジスタR13に予め設定された値でマスクし、仮数部を取り出す。そして、ステップ04にて、第1処理部110は、仮数部の最上位ビットを追加する。IEEE754では、仮数部の最上位ビットは必ず1である必要があるためでもある。
ステップ05にて、第1処理部110は、仮数部を、レジスタR02に保持された値でシフトして整数化する。そして、ステップ06にて、第1処理部110は、レジスタR15に予め設定された値“0”からレジスタR03を減じることで、マイナスの値を作成する。
ステップ07にて、第1処理部110は、浮動小数点のデータを保持しているレジスタR01と、レジスタR16に予め保持した値とを論理積することで、浮動小数点の符号を得る。そして、ステップ09にて、第1処理部110は、符号により正の値か負の値かを選択して、結果を出力レジスタR1fに書き出す。
以上、本発明の好ましい実施形態について説明したが、本発明はこれらの実施形態に限定されず、その要旨の範囲内で種々の変形及び変更が可能である。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本明細書の開示は、以下のプログラマブル信号処理回路及び当該回路用のプログラムを含む。
(項目1)
プログラマブル信号処理回路であって、
それぞれプログラムメモリを有し、前記プログラムメモリに格納されたプログラムを実行することにより並列に動作可能な複数の実行部と、
前記複数の実行部それぞれが利用可能であって、直列接続された複数のレジスタを有するレジスタファイル部であって、シフト信号を受信したことに応じて、前記複数のレジスタの各々が保持するデータを前記直列接続における1つ下流に位置するレジスタに転送するレジスタファイル部と、
前記複数の実行部におけるプログラムメモリに前記プログラムを書き込み、前記複数の実行部のそれぞれが1サイクル分のプログラムの実行を終えた場合、前記複数の実行部に対して前記シフト信号を発行する制御部とを有し、
前記制御部は、前記複数の実行部の各々が、他の実行部にデータを渡す場合に、前記他の実行部がデータを入力する際に参照するレジスタの1つ上流に位置するレジスタを、前記1サイクルの処理の結果のデータの格納先とする命令を含む前記プログラムを前記複数の実行部におけるプログラムメモリに格納し、
前記複数の実行部の各々は、前記1サイクル分のプログラムの実行の後、前記シフト信号を受信したことに応じて、前記プログラムを再び実行する
ことを特徴とするプログラマブル信号処理回路。
(項目2)
前記実行部が、他の実行部に複数のデータを渡す場合は、前記直列接続の関係において、少なくとも1つのレジスタを間に置いた、飛び飛びの位置にある複数のレジスタにデータを格納する
ことを特徴とする項目1に記載のプログラマブル信号処理回路。
(項目3)
前記複数の実行部の1つは、処理対象のデータを前記レジスタに代入する代入部であって、
前記プログラマブル信号処理回路は、更に、プログラムを実行することで、メモリから前記処理対象のデータを読み出して、当該読み出したデータを、前記代入部にFIFOメモリを介して供給する読出部を有し、
前記制御部は、前記読出部が有するプログラムメモリに、前記処理対象のデータを指定するプログラムを格納する
ことを特徴とする項目1又は2に記載のプログラマブル信号処理回路。
(項目4)
前記読出部は、前記FIFOメモリがメモリフルとなった場合、前記外部のメモリからの読み出しを停止し、前記FIFOメモリに空き領域が発生した場合に読出を再開する
ことを特徴とする項目3に記載のプログラマブル信号処理回路。
(項目5)
前記実行部それぞれは、1サイクル分の処理の終了を表す命令を検出する検出器を有し、
前記検出器は、終了を示す命令を検出した場合、プログラムカウンタを停止し、当該プログラムカウンタにプログラムの先頭アドレスを設定し、
前記制御部は、前記複数の実行部の全ての前記検出器が終了を示す命令を検出したことに応じて前記シフト信号を発行する
ことを特徴とする項目1乃至4のいずれか1つに記載のプログラマブル信号処理回路。
(項目6)
前記レジスタファイル部には、最終的な処理結果のデータを格納する出力レジスタが含まれ、
前記制御部は、前記複数の実行部のうちの一つのプログラムメモリに、処理後のデータを前記出力レジスタに格納する命令を含むプログラムを格納する
ことを特徴とする項目1乃至5のいずれか1つに記載のプログラマブル信号処理回路。
(項目7)
前記複数の実行部の各々が有するプログラムメモリ、並びに、前記レジスタファイル部が有する各レジスタは、所定のIOバスのメモリ空間において異なるアドレス空間にマッピングされている
ことを特徴とする項目1乃至6のいずれか1つに記載のプログラマブル信号処理回路。
(項目8)
前記レジスタファイル部は、前記シフト信号の受信とは無関係に、データを保持する複数の汎用レジスタを有し、
前記複数の汎用レジスタの1つは、予め設定されたビット位置が“1”に設定された場合、前記プログラマブル信号処理回路をサスペンド状態に移行させると共に、外部に対して割り込み信号を出力する
ことを特徴とする項目1乃至7のいずれか1つに記載のプログラマブル信号処理回路。
(項目9)
前記制御部は、プログラムが記憶されたメモリから、前記複数の実行部それぞれが実行するプログラムを読み出し、前記複数の実行部それぞれが有する前記プログラムメモリに、IOバスを介して格納する
ことを特徴とする項目1乃至8のいずれか1つに記載のプログラマブル処理回路。
(項目10)
プログラムを実行可能な複数の実行部と、
ここで複数の実行部それぞれは、所定のシフト信号を受信したことに応じて、プログラムを再実行する;
前記複数の実行部それぞれが利用可能であって、直列接続された複数のレジスタを有するレジスタファイル部と、
ここで、前記シフト信号を受信したことに応じて、前記レジスタファイル部は、前記複数のレジスタの各々が保持するデータを前記直列接続における1つ下流に位置するレジスタに転送する;
前記複数の実行部のそれぞれが1サイクル分のプログラムの実行を終えた場合、前記シフト信号を発行する発行部と
を有するプログラマブル信号処理回路用のプログラムであって、
前記複数の実行部の各々が実行するプログラムは、
他の実行部にデータを渡すために、当該他の実行部がデータを入力する際に参照するレジスタの1つ上流に位置するレジスタを、前記1サイクルの処理の結果のデータの格納先とする命令を含む
ことを特徴とするプログラマブル信号処理回路用のプログラム。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
1001…信号プロセッサ、1002…メモリバス、1003a乃至1003d…メモリ、1005…CPU、1006…IOバス、101…読出部、104…代入部、106…レジスタファイル部、107…汎用シフトレジスタ群、108…汎用レジスタ群、109…出力レジスタ、110…第1処理部、112…第2処理部、114…書込み部、102,105,111,113…メモリ、117…シフト制御部

Claims (10)

  1. プログラマブル信号処理回路であって、
    それぞれプログラムメモリを有し、前記プログラムメモリに格納されたプログラムを実行することにより並列に動作可能な複数の実行部と、
    前記複数の実行部それぞれが利用可能であって、直列接続された複数のレジスタを有するレジスタファイル部であって、シフト信号を受信したことに応じて、前記複数のレジスタの各々が保持するデータを前記直列接続における1つ下流に位置するレジスタに転送するレジスタファイル部と、
    前記複数の実行部におけるプログラムメモリに前記プログラムを書き込み、前記複数の実行部のそれぞれが1サイクル分のプログラムの実行を終えた場合、前記複数の実行部に対して前記シフト信号を発行する制御部とを有し、
    前記制御部は、前記複数の実行部の各々が、他の実行部にデータを渡す場合に、前記他の実行部がデータを入力する際に参照するレジスタの1つ上流に位置するレジスタを、前記1サイクルの処理の結果のデータの格納先とする命令を含む前記プログラムを前記複数の実行部におけるプログラムメモリに格納し、
    前記複数の実行部の各々は、前記1サイクル分のプログラムの実行の後、前記シフト信号を受信したことに応じて、前記プログラムを再び実行する
    ことを特徴とするプログラマブル信号処理回路。
  2. 前記実行部が、他の実行部に複数のデータを渡す場合は、前記直列接続の関係において、少なくとも1つのレジスタを間に置いた、飛び飛びの位置にある複数のレジスタにデータを格納する
    ことを特徴とする請求項1に記載のプログラマブル信号処理回路。
  3. 前記複数の実行部の1つは、処理対象のデータを前記レジスタに代入する代入部であって、
    前記プログラマブル信号処理回路は、更に、プログラムを実行することで、外部のメモリから前記処理対象のデータを読み出して、当該読み出したデータを、前記代入部にFIFOメモリを介して供給する読出部を有し、
    前記制御部は、前記読出部が有するプログラムメモリに、前記処理対象のデータを指定するプログラムを格納する
    ことを特徴とする請求項1に記載のプログラマブル信号処理回路。
  4. 前記読出部は、前記FIFOメモリがメモリフルとなった場合、前記外部のメモリからの読み出しを停止し、前記FIFOメモリに空き領域が発生した場合に読出を再開する
    ことを特徴とする請求項3に記載のプログラマブル信号処理回路。
  5. 前記実行部それぞれは、1サイクル分の処理の終了を表す命令を検出する検出器を有し、
    前記検出器は、終了を示す命令を検出した場合、プログラムカウンタを停止し、当該プログラムカウンタにプログラムの先頭アドレスを設定し、
    前記制御部は、前記複数の実行部の全ての前記検出器が終了を示す命令を検出したことに応じて前記シフト信号を発行する
    ことを特徴とする請求項1に記載のプログラマブル信号処理回路。
  6. 前記レジスタファイル部には、最終的な処理結果のデータを格納する出力レジスタが含まれ、
    前記制御部は、前記複数の実行部のうちの一つのプログラムメモリに、処理後のデータを前記出力レジスタに格納する命令を含むプログラムを格納する
    ことを特徴とする請求項1に記載のプログラマブル信号処理回路。
  7. 前記複数の実行部の各々が有するプログラムメモリ、並びに、前記レジスタファイル部が有する各レジスタは、所定のIOバスのメモリ空間において異なるアドレス空間にマッピングされている
    ことを特徴とする請求項1に記載のプログラマブル信号処理回路。
  8. 前記レジスタファイル部は、前記シフト信号の受信とは無関係に、データを保持する複数の汎用レジスタを有し、
    前記複数の汎用レジスタの1つは、予め設定されたビット位置が“1”に設定された場合、前記プログラマブル信号処理回路をサスペンド状態に移行させると共に、外部に対して割り込み信号を出力する
    ことを特徴とする請求項1に記載のプログラマブル信号処理回路。
  9. 前記制御部は、プログラムが記憶されたメモリから、前記複数の実行部それぞれが実行するプログラムを読み出し、前記複数の実行部それぞれが有する前記プログラムメモリに、IOバスを介して格納する
    ことを特徴とする請求項1から8の何れか1項に記載のプログラマブル信号処理回路。
  10. プログラムを実行可能な複数の実行部と、
    ここで複数の実行部それぞれは、所定のシフト信号を受信したことに応じて、プログラムを再実行する;
    前記複数の実行部それぞれが利用可能であって、直列接続された複数のレジスタを有するレジスタファイル部と、
    ここで、前記シフト信号を受信したことに応じて、前記レジスタファイル部は、前記複数のレジスタの各々が保持するデータを前記直列接続における1つ下流に位置するレジスタに転送する;
    前記複数の実行部のそれぞれが1サイクル分のプログラムの実行を終えた場合、前記シフト信号を発行する発行部と
    を有するプログラマブル信号処理回路用のプログラムであって、
    前記複数の実行部の各々が実行するプログラムは、
    他の実行部にデータを渡すために、当該他の実行部がデータを入力する際に参照するレジスタの1つ上流に位置するレジスタを、前記1サイクルの処理の結果のデータの格納先とする命令を含む
    ことを特徴とするプログラマブル信号処理回路用のプログラム。
JP2022099799A 2022-06-21 2022-06-21 プログラマブル信号処理回路及び当該回路用のプログラム Pending JP2024000852A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2022099799A JP2024000852A (ja) 2022-06-21 2022-06-21 プログラマブル信号処理回路及び当該回路用のプログラム
US18/329,738 US20230409323A1 (en) 2022-06-21 2023-06-06 Signal processing apparatus and non-transitory computer-readable storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022099799A JP2024000852A (ja) 2022-06-21 2022-06-21 プログラマブル信号処理回路及び当該回路用のプログラム

Publications (1)

Publication Number Publication Date
JP2024000852A true JP2024000852A (ja) 2024-01-09

Family

ID=89169857

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022099799A Pending JP2024000852A (ja) 2022-06-21 2022-06-21 プログラマブル信号処理回路及び当該回路用のプログラム

Country Status (2)

Country Link
US (1) US20230409323A1 (ja)
JP (1) JP2024000852A (ja)

Also Published As

Publication number Publication date
US20230409323A1 (en) 2023-12-21

Similar Documents

Publication Publication Date Title
US8464025B2 (en) Signal processing apparatus with signal control units and processor units operating based on different threads
JP4934356B2 (ja) 映像処理エンジンおよびそれを含む映像処理システム
JP6388865B2 (ja) 相互関係のある二次元データセットを効率的かつ高速に処理するプロセッサ、システム、および方法
US9395997B2 (en) Request coalescing for instruction streams
US20060092161A1 (en) Method and apparatus for management of bit plane resources
TWI754310B (zh) 純函數語言神經網路加速器系統及電路
CN116775518A (zh) 用于高效访问多维数据结构和/或其他大型数据块的方法和装置
JP2011141823A (ja) データ処理装置および並列演算装置
US20100318766A1 (en) Processor and information processing system
KR100765567B1 (ko) 산술 논리 유닛 및 스택을 가지는 데이터 프로세서, 멀티미디어 장치 및 컴퓨터 판독가능 기록 매체
KR102455417B1 (ko) Simd 프로세서에서의 명령어 레벨 콘텍스트 스위치
CN114830082A (zh) 从多个寄存器中选择的simd操作数排列
JP2024000852A (ja) プログラマブル信号処理回路及び当該回路用のプログラム
US9852092B2 (en) System and method for memory access
JP2020191012A (ja) 画像処理装置、撮像装置、画像処理方法
US20100030978A1 (en) Memory controller, memory control method, and image processing device
JP4384828B2 (ja) コプロセッサ装置およびデータ転送を容易にするための方法
JP4482356B2 (ja) Simdプロセッサを用いた画像処理方法及び画像処理装置
CN114489799A (zh) 处理方法、处理装置及相关产品
JP2024015829A (ja) 画像処理装置及び画像処理回路
US9323521B2 (en) Decimal floating-point processor
KR20010072490A (ko) 레지스터 스택을 포함하는 데이터 프로세서, 그 처리방법, 컴퓨터 프로그램 제품 및 멀티미디어 장치
EP0542318A2 (en) Digital processor and method for controlling the same
JP5358315B2 (ja) 並列計算装置
CN117807014A (zh) 电子装置和数据读取方法