次に、図面を参照しながら、本発明を実施する最良の実施形態について詳細に説明する。
<第1の実施形態>
図1は、本発明の第1の実施形態に係る無線通信システムにおけるストリームプロセッサの例として、制御プロセッサに、無線信号を処理するコプロセッサを接続したストリームプロセッサ100の構成を示すブロック図である。
本実施形態に係るストリームプロセッサ(stream_processor、SP)100は、
(a)インタフェースとして、外部からブート制御や割り込み信号入力を行うプロセッサ制御インタフェース(不図示)と、
(b)ストリームプロセッサ100から命令メモリ(Instruction_Memory、IMEM)110にアクセスする命令メモリインタフェースと、
(c)ローカルメモリ(データメモリ、Data_Memory、DMEM)120、121にアクセスするローカルメモリインタフェースと、
(d)外部ペリフェラルに制御アクセスするDSP(Digital_signal_processing)インタフェースと、
(e)外部共有メモリにストリームアクセスする共有メモリインタフェース等とを有する。
ストリームプロセッサ100は、コプロセッサインタフェースを有する制御プロセッサ(Processor_core)10(例えば、ハーバードアーキテクチャ型の32ビットReduced_Instruction_Set_Computer(以降、「RISC」と表す)プロセッサ)に、そのコプロセッサインタフェースを用いて無線信号を処理するコプロセッサ(Co−processor)11を接続する構成を有する。
コプロセッサ11は、ローカルメモリインタフェース(Local_Memory_Interface、LMEM_IF)と共有メモリインタフェース(Shared_memory_Interface,SMEM_IF)を有する。コプロセッサ11は、ローカルメモリ120、121、及び、共有メモリ(不図示)にストリームアクセス(すなわち、スプリットトランザクションをサポートするバーストアクセス)が可能である。
メモリセレクタ(「マルチプレクサ型バスコントローラ」とも表す)12は、制御プロセッサ10からのデータアクセスと、コプロセッサ11からのローカルメモリアクセスと共有メモリアクセスとを調停及び選択制御(以降、「調停/選択制御」と表す)するマルチレイヤ型のバスコントローラである。ローカルメモリ120、121は、メモリセレクタ12からのローカルメモリインタフェースと接続する。命令メモリ110は、制御プロセッサ10の命令メモリインタフェースと接続する。
コプロセッサ11は、メモリアクセスレイテンシを隠蔽するために、ローカルメモリインタフェース、共有メモリインタフェースを介して、バンク分けされたローカルメモリ120、121、外部の共有メモリにストリームアクセスするローカルメモリコントローラ(Local_Memory_Controller、LMC)20、及び、共有メモリコントローラ(Shared_Memory_Controller、SMC)21を有する。
ローカルメモリコントローラ20及び共有メモリコントローラ21は、書き込みアドレスジェネレータ(Write_Address_Generator、Write_ADR_GEN)30、書き込みデータFIFO(Write_Data_First_In_First_Out、WDAT_FIFO)31、書き込みデータパッキング回路(Write_Data_Packer、WDAT_PACKER)32、読み出しアドレスジェネレータ(Read_Address_Generator、Read_ADR_GEN)40、読み出しデータFIFO(Read_Data_First_In_First_Out、RDAT_FIFO)41、及び、読み出しデータパッキング回路(Read_Data_Packer、RDAT_PACKER)42等を有する。それにより、ローカルメモリコントローラ20及び共有メモリコントローラ21は、プロセッサやコプロセッサにおける演算処理とは並列にローカルメモリ120、121や外部の共有メモリにアクセスする。
また、ローカルメモリコントローラ20及び共有メモリコントローラ21は、データを読み出す際にアドレスを投機的に発行するスプリットトランザクション機能も有する。更に、ローカルメモリコントローラ20及び共有メモリコントローラ21は、書き込みデータを読み出しデータFIFO41に直接バイパス転送するパスと、読み出しデータ選択回路(Read_Data_Selector)50と、バイパスモード設定レジスタ(Mode)51とを有する。これにより、ローカルメモリコントローラ20及び共有メモリコントローラ21は、読み出しデータとしてメモリからの読み出しデータ、あるいは、バイパス転送される書き込みデータを選択する。
ここで、ローカルメモリコントローラ20及び共有メモリコントローラ21は、図1の例では2個実装しているが、本実施形態としては、1個であっても3個以上であっても何ら問題はない。
コプロセッサ11は、無線信号を処理する複数個のALU22a、22bを有する。演算器は、複数の無線通信方式における符号化/復号化処理を行うビット/バイト演算を処理する演算器、または、変調、復調及び同期処理(以降、「変調/復調/同期」と表す)を行う複素演算を処理する演算器等を有する。これらの演算器は、コプロセッサ11内に有するパラメータレジスタ等にてパラメータ設定しておくことにより、様々な無線方式における符号化/復号化処理や複素演算処理に対応できるプログラマブルな構成を有する。コプロセッサ命令としてVLIW命令等を定義することにより、複数のALU22a、22bは、上述した演算を並列に処理することができる。
また、コプロセッサ11は、コプロセッサ命令にて使用可能なレジスタファイル(Register_File、REG)23を有する。レジスタファイル23は、制御プロセッサ10内におけるレジスタとは異なる。レジスタファイル23における汎用レジスタは、例えば、32ビットレジスタを16個から32個程度有する。
ただし、このうち、例えば、それらの汎用レジスタのうち2つの汎用レジスタ(Co−Processor_register,CR2、CR3)は、例えば、以下のように特殊レジスタとして動作する。1つの汎用レジスタ(例えば、CR2)は、ローカルメモリコントローラ20との間において、授受するデータを記憶する。1つの汎用レジスタ(例えばCR3)は、共有メモリコントローラ21とのデータ授受に用いられる。本構成により、ローカルメモリ120、121及び外部共有メモリへのアクセスに汎用レジスタを使用することができる。すなわち、ローカルメモリ120、121や外部共有メモリへのストリームデータアクセスが、コプロセッサ11における汎用レジスタと同様の命令マッピングや処理サイクル数で処理可能である。
コプロセッサ11は、コプロセッサコントローラ(Co−processor_Controller、CTRL)24を更に有する。コプロセッサコントローラ24は、コプロセッサ命令のデコード処理を実施するとともに、ALU22a、22b、レジスタファイル23、及び、ローカルメモリコントローラ20及び共有メモリコントローラ21を制御する。
(動作の説明)
本発明の第1の実施形態に係るストリームプロセッサ100の動作について図1乃至図3を用いて説明する。
プロセッサ制御インタフェースまたは割り込みインタフェースが制御プロセッサ10を起動する処理に応じて、ストリームプロセッサ100は、命令メモリ110から命令コードをフェッチし、その後、データメモリ(ローカルメモリ)120、121にアクセスしながら、該命令コードに応じてプロセッサ処理を実行する。ストリームプロセッサ100は、処理に応じて、データメモリインタフェース経由で、外部の共有メモリやペリフェラルブロックにもアクセスをする。
ここで、コプロセッサ11の動作には、命令コードとして制御プロセッサのコプロセッサ命令を使用する。ストリームプロセッサ100がコプロセッサ命令をフェッチする場合、制御プロセッサ10は、コプロセッサインタフェースを介して、コプロセッサ処理を実行する。
コプロセッサ11において、コプロセッサコントローラ24は、コプロセッサ命令をデコードする。次に、コプロセッサ11は、ALU22a、22b、レジスタファイル23、ローカルメモリコントローラ20、及び、共有メモリコントローラ21を制御することにより、コプロセッサコントローラ24がデコードしたコプロセッサ命令を実行する。ストリームプロセッサ100がコプロセッサ命令としてVLIW命令をフェッチする場合において、コプロセッサ11は、ALU22a、22bを用いてコプロセッサ命令を実行する。
[VLIW命令の構成とその動作の説明]
図2A乃至図2Cは、複数のデータ系列に対して同一の処理を並列に行う場合の処理フローとVLIW命令の例を示す図である。図2Aに示すように、処理フローとしてはデータ長が同じ2つのデータ系列(data_Aとdata_B)に対して、同一の処理1(proc1)を行う場合を例とする。この場合、図2Bに示すように、プログラム例としては、各々のデータ系列に対するメモリコントローラを設定/起動後に、処理1(proc1)を並列に行うVLIW命令をデータ長分、繰り返し実行する。
ここで、メモリコントローラと各々のデータ系列との対応として、mc1は、data_AのRead/Writeを処理することを表す。同様に、mc2は、data_BのRead/Writeを処理することを表す(mc1、mc2は、それぞれローカルメモリコントローラ20と共有メモリコントローラ21のいずれかのメモリコントローラにおける処理を表す)。
上述したようなプログラムを実行することにより、図2Cに示すように、ALU22a、22bは、2つのデータ系列(data_Aとdata_B)に対する所望の同一の処理1(proc1)を並列に実行することが可能である。この例では、同一の処理1(proc1)を複数のデータ系列(data_Aとdata_B)に対して実行するような(すなわち、SIMD的な)演算の例を示したが、VLIW命令における一方のALU分だけ命令を変更することにより、各々のデータ系列に対して異なる処理を実行するような(すなわち、MIMD的な)演算を実行することも可能である。
図3A乃至Cは、データ系列に対して連続する複数の処理を直列に行う場合の処理フローとVLIW命令の例を示す図である。これは、図2に示すような複数データ系列に対する並列演算が難しい場合(すなわち、複数のデータ系列のデータ長がお互いに異なる場合、または、複数のデータ系列の両方が格納されるまでの時間がない場合等)に有用な並列化手法である。図3Aに示すように、処理フローとしては、任意のデータ系列(data_C)に対して、連続する複数の処理(proc2、proc3)を直列に行う場合を例とする。
この場合、図3Bに示すように、例えば、プログラム(制御プロセッサ10)は、まず処理2(proc2)に入力するデータを先読みするメモリコントローラ(mc2)と、処理2(proc2)が出力するデータをメモリに書き込むメモリコントローラ(mc1)とを設定、及び、起動する機能を有する。ここで、図3Aに示す処理フローのように、処理3(proc3)は、処理2(proc2)が出力するデータを処理する(すなわち、これらの処理には、データ依存関係がある)。そのため、プログラム(制御プロセッサ10)は、メモリコントローラ(mc1)に対してバイパス転送設定を行う。すなわち、プログラム(制御プロセッサ10)は、バイパスモード設定レジスタ51を制御することによりバイパス転送モードに設定する機能を有する。それにより、読み出しデータ選択回路50は、バイパスされる書き込みデータを選択し、選択したデータを読み出しデータFIFO41に入力する動作となる。これにより、バイパス転送機能を実現できる。
そして、該プログラムは、最初のループとして、ALU22aは、処理3(proc3)を開始可能にするため、例えば1回分(a=1)だけ、処理2(proc2)の演算を処理する機能を有する。該プログラムに基づき、メモリコントローラ(mc1)は、バイパス転送機能により、読み出しデータFIFO41にも当該データを格納する。
該プログラム(制御プロセッサ10)は、処理3(proc3)の処理結果データを書き込むメモリコントローラ(mc2)設定を行う機能と、その後、メインの演算ループとして、VLIW命令を用いて、ALU22aとALU22bとに、処理2(proc2)と処理3(proc3)とを並列に演算するよう制御する機能を有する。更に、該プログラムは、ALU22bに、残り(例えば1回分)の処理3(proc3)の演算を実行するよう制御する機能を有する。
上述したようなプログラムを実行することにより、図3Cに示すように、ALU22a、22bは、任意のデータ系列(data_C)に対して、連続する複数の処理(proc2とproc3)を並列に実行することができる。ここで、図3Cにおける「a」は、処理2(proc2)と処理3(proc3)との間のレイテンシを示す。図3Cにおける「b」は、処理データ(data_C)のデータ長を示す。図3Cにおける「c」は、全体の処理時間(c=a+b)を示すものである。すなわち、レイテンシ(aの値)を短くすることにより、ALU22a、22bの稼働率は向上する。その結果、全体の処理時間は短縮する。
ここで、バイパスモード設定レジスタ51、及び、読み出しデータ選択回路50等が実現するバイパス転送機能は、処理2(proc2)の書き込みデータを、直接、読み出しデータFIFO41にもバイパス(「転送」、「バイパス転送」とも表現する)する。そのため、処理2(proc2)の書き込みデータのメモリアクセスレイテンシや処理3(proc3)の読み出しデータアクセスレイテンシを隠蔽できる。その場合、一定のサイクル、例えば、1回分(a=1)のサイクルオーバヘッドにおいて、処理2(proc2)と処理3(proc3)とを並列に演算することができる。
バイパス転送機能がない場合に、プログラミングにおいては、処理2(proc2)から処理3(proc3)において、書き込みデータレイテンシや読み出しデータレイテンシ、データを先読みする読み出しデータFIFO41段数等を考慮してレイテンシ(aの値)を導出する必要がある。その結果、プログラミングの容易性が低下するとともに、aの値分だけ演算器稼働率が低下する。すなわち、バイパス転送機能がない場合に、プログラミングにおいては、メモリへの書き込みと読み出し等のレイテンシを考慮して、並列演算しない最初のループ数(aの値)を大きく設定する必要がある。一方、本実施形態の場合には、バイパス転送を使用可能なため、オーバヘッドとなる最初と最後のループ数を、例えば1回(a=1)に固定することができ、並列演算できるメインのループ数(b―a)を大きくすることが可能となる。
図4を参照しながら、第1の例について説明する。図4は、無線通信システムにおいて符号化、及び、復号化処理を行う符号化/復号化処理プロセッサ(ビットバイト演算処理プロセッサ)に適用する場合の構成例を示す図である。
(構成の説明)
符号化/復号化処理プロセッサ(Bit/Byte_Stream_Processor、「BSP」)101は、コプロセッサインタフェースを有する一般的な制御プロセッサ(Processor_Core)10(例えば、ハーバードアーキテクチャ型の32ビットRISCプロセッサ)に対して、そのコプロセッサインタフェースを用いて符号化、及び、復号化処理を行うコプロセッサ(Co−Processor)11cを接続する構成を有する。
コプロセッサ11cは、ローカルメモリインタフェースと共有メモリインタフェースとを有する。コプロセッサ11cは、ローカルメモリ120、121または共有メモリ(図4において不図示)のそれぞれにストリームアクセス(スプリットトランザクションをサポートするバーストアクセス)が可能である。
ここで、メモリセレクタ12は、制御プロセッサ10からのデータアクセスと、コプロセッサ11cからのローカルメモリアクセスと、共有メモリアクセスとを調停、及び、選択するバスコントローラである。該バスコントローラは、マルチレイヤ型の態様を有する。ローカルメモリ120、121は、このメモリセレクタ12からのローカルメモリインタフェースに接続する。そして、命令メモリ110は、制御プロセッサ10の命令メモリインタフェースに接続する。
コプロセッサ11cは、メモリアクセスレイテンシを隠蔽するために、ローカルメモリインタフェースまたは共有メモリインタフェースを介して、バンク分けされたローカルメモリ120、121、及び、外部の共有メモリにストリームアクセスするローカルメモリコントローラ20、共有メモリコントローラ21を有する。ローカルメモリコントローラ20及び共有メモリコントローラ21は、書き込みアドレスジェネレータ30、書き込みデータFIFO31、書き込みデータパッキング回路32、読み出しアドレスジェネレータ40、読み出しデータFIFO41、及び、読み出しデータパッキング回路42等を有する。上述した構成により、プロセッサやコプロセッサにおける演算処理と、ローカルメモリ120、121、または、外部の共有メモリにアクセスを並列に行うことができる。
また、ローカルメモリコントローラ20及び共有メモリコントローラ21は、データを読み出す処理において、アドレスを投機的に発行するスプリットトランザクション機能も有する。更に、ローカルメモリコントローラ20及び共有メモリコントローラ21は、書き込みデータを読み出しデータFIFO41に直接バイパス転送するパス、読み出しデータ選択回路50、及び、バイパスモード設定レジスタ51を有する。すなわち、ローカルメモリコントローラ20及び共有メモリコントローラ21は、読み出しデータとしてメモリからの読み出しデータと、バイパス転送される書き込みデータとを選択可能な構成を有する。
また、コプロセッサ11cは、符号化、及び、復号化処理(ビット/バイト演算処理)を処理可能なALU22c、ALU22dを有するとともに、演算器として、スクランブリング回路60(scrambling、SCRAM)、畳み込み符号化器61(convolution、CONV)、CRC符号化器62(CRC)、及び、ビット連接/並べ替え回路63(permutation、PERM)等を有する。スクランブリング回路60(SCRAM)等の各演算器は、複数の無線通信方式における符号化、及び、復号化処理にて一般的に用いられる各ビット/バイト演算処理を行う。
そして、上述したような演算器は、コプロセッサ11cが有するパラメータレジスタ65等にてパラメータを設定することにより、様々な無線方式における符号化、及び、復号化処理に対応できるプログラマブルな構成とする。そして、コプロセッサ命令としてVLIW命令等を定義することにより、ALU22c、ALU22dは、並列に動作する。
また、コプロセッサ11cは、コプロセッサ命令にて使用可能なレジスタファイル23cを有する。レジスタファイル23cは、制御プロセッサ10におけるレジスタとは異なる。レジスタファイル23cは、汎用レジスタとして、例えば、32ビットレジスタを16個(CR0乃至CR15)有する。
ただし、例えば、16個のレジスタのうち、2つの汎用レジスタ(CR2、CR3)は、特殊なレジスタとして動作する。例えば、特殊なレジスタの1つ(例えばCR2)は、ローカルメモリコントローラ20との間においてデータを授受する。特殊なレジスタの1つは(例えばCR3)は、共有メモリコントローラ21との間においてデータを授受する。上述したような構成により、汎用レジスタは、ローカルメモリ120、121及び外部共有メモリにおいて授受されるデータも記憶する。その結果、ローカルメモリ120、121や外部共有メモリへのストリームデータアクセスは、コプロセッサ11cにおける汎用レジスタと同様の命令マッピングや処理サイクル数によって処理することが可能である。
(動作の説明)
図4に示すように、符号化/復号化処理プロセッサ101は、制御プロセッサ10が起動される処理に応じて、命令メモリ110から命令コードをフェッチし、その後、データメモリ(ローカルメモリ)120、121にアクセスしながら、プロセッサ処理を実行する。必要に応じて、符号化/復号化処理プロセッサ101は、データメモリインタフェース経由することにより、外部の共有メモリやペリフェラルブロックにもアクセスをする。ここで、符号化/復号化処理コプロセッサ11cにて処理を実行するためには、命令コードとして制御プロセッサ10のコプロセッサ命令を使用する。符号化/復号化処理プロセッサ101がコプロセッサ命令をフェッチする場合、制御プロセッサ10は、コプロセッサインタフェースを介して、コプロセッサ処理を実行する。
一方、コプロセッサ11cにおいて、コプロセッサコントローラ24cは、コプロセッサ命令をデコードする。次に、コプロセッサコントローラ24cは、ALU22c、ALU22d、レジスタファイル23c、ローカルメモリコントローラ20や共有メモリコントローラ21等を制御することにより、デコードしたコプロセッサ命令を実行する。特に、コプロセッサ命令がVLIW命令である場合には、ALU22c、ALU22dは、コプロセッサ命令を実行する。
符号化/復号化処理プロセッサ101は、ALU22c、ALU22dにおける演算器として、スクランブリング回路(SCRAM)60、畳み込み符号化器(CONV)61、CRC符号化器(CRC)62、及び、ビット連接/並べ替え回路63等を有する。そして、上述した演算器は、コプロセッサ11cにおけるパラメータレジスタ65等にてパラメータ設定しておくことにより、様々な無線方式における符号化、及び、復号化処理に対応する。
(コプロセッサ命令の命令コードの構成とその動作の説明)
図5は、コプロセッサ命令の命令コードの例を示す図である。図5は、コプロセッサ命令の一部の例として、コプロセッサにおける演算命令のみを表す。コプロセッサは、これらの演算命令の他に、制御プロセッサとコプロセッサとの間における演算命令、及び、パラメータレジスタ65を設定する命令等も処理することが可能である。さらに、コプロセッサ命令は、図5に示す命令を並列に記述することにより、並列に演算処理を行うVLIW命令も備える。
図5において、例えば、OP=0に関連付けされるSCRAMは、スクランブリング処理命令である。該スクランブリング処理命令は、入力レジスタ(crs)のデータに対してスクランブリング処理(SCRAM)を行い、その処理結果を出力レジスタ(crd)に出力する。ここで、図5において、crsとcrdとは、コプロセッサ11cのレジスタファイル23cにおける汎用レジスタ番号を表す。即値(immediate、例えば、imm5)は、最下位ビット(Least_significant_bit、以降、「LSB」と表す)側から即値(imm5)(1乃至8)で記述されるビット数分だけ並列に(一度に)スクランブリング処理を行うことを示す。1命令実行することにより、最大8ビット(1バイト)分のデータを並列処理する。
また、複数の無線方式におけるスクランブリング処理に対応するために必要な動作モード設定、及び、TAP(タップ値)初期値設定、生成多項式に関する仕様設定は、パラメータレジスタ65に事前に設定しておくことで実現する。同様に、図5において、OP=1と関連付けされるCONVは、畳み込み符号化処理命令を表し、OP=2と関連付けされるCRCは、CRC符号化処理命令を表す。
ただし、畳み込み符号化処理(CONV)する場合、出力データが有するビット数は、パラメータレジスタ65で設定するコーディングレートに応じて変化する。そのため、出力データが有するビット数は、即値(imm5)にて設定した入力データビット数(1乃至8)に対して、その2倍または3倍(最大24ビット)である。
CRC符号化処理命令(CRC)は、スクランブリング処理(SCRAM)と同様、最大8ビット分を1命令で処理可能である。そのため、出力データが有するビット数は、即値(imm5)にて設定した入力データビット数と一致する。畳み込み符号化処理命令(CONV)やCRC符号化処理命令(CRC)についても、スクランブリング処理命令(SCRAM)と同様に、パラメータレジスタ65を用いて動作モード設定やTAP初期値設定、生成多項式の仕様設定を行うことにより、複数の無線方式に対応可能である。また、これらのSCRAM、CONV、及び、CRCは、ALU22c、ALU22dにおいて、並列演算回路(例えば、スクランブリング回路60、畳み込み符号化器61、CRC符号化器62)を実装することにより、通常のプロセッサ処理では1ビット処理するのに複数サイクル要する処理に関して、複数ビット分を1サイクルで処理する。
OP=4と関連付けされるSHLは、左シフト演算命令(Shift_Left、crd=crs<<imm5、すなわち、imm5ビット、crsを左にシフトする演算を表す)を表し、OP=5と関連付けされるSHRは右シフト演算命令(Shift_Right、crd=crs>>imm5、「>>」は、右にシフトする演算を表す)を表す。コプロセッサ11は、ビット演算処理にて使用頻度が高い命令を処理することが可能である。また、OP=6と関連付けされるPERMは、ビット連接/並び替え演算命令を表す。
「PERM」は、入力レジスタ(crs)のうち、最大でLSB側から16ビット分に対して連接、及び、並び替え処理を行い、その処理結果を出力レジスタ(crd)に出力する命令である。ここで、最大16ビット分の出力データに出力する順番を64ビット分(32ビットレジスタ×2個のペア)のパラメータレジスタに設定し、その後、使用するパラメータをパラメータレジスタ番号(cp)により指定する。それにより、高速かつ柔軟なビット連接、及び、並べ替え処理を実現する。
パラメータレジスタにおいて、16ビット分の入力データから1ビット分の出力を選択するため、1ビット分の出力のためには4ビットの設定が必要である。そのため、16ビット分の出力を選択するためには、64ビット分(=4ビット×16)の設定が必要である。ALU22cは、ビット連接/並べ替え回路63を有することにより、1命令にて上記のビット連接/並び替え演算命令(PERM)を並列に処理可能である。
また、OP=6と関連付けされるMSKC2C、及び、OP=7と関連付けされるMSKP2Cは、レジスタ間転送命令(MASK&MOVE)を表す。該レジスタ間転送命令は、LSB側から即値(imm5)(1乃至31)で指定されるビット数分だけをコピーする命令である。OP=6と関連付けされるMSKC2Cは、レジスタファイル23c間における転送命令(crd=MSK(crs、imm5))を表す。OP=7と関連付けされるMSKP2Cは、パラメータレジスタ65からレジスタファイル23cへデータを転送するレジスタ間転送命令(crd=MSK(cp、imm5))を表す。
図5においては、コプロセッサ命令の一部の例として、コプロセッサにて処理する演算命令のみを示したが、コプロセッサ命令は、これらの他に、制御プロセッサとコプロセッサとの間における演算命令、あるいは、パラメータレジスタを設定する命令等を含むこともある。さらに、コプロセッサ命令は、例えば、図5に示すように、命令を並列に記述することにより、並列に演算処理を行うVLIW命令も含む。
制御プロセッサとコプロセッサとの間における演算命令の例としては、図5の例において、即値(imm5)により記述する各命令の即値(imm5)部分を、制御プロセッサ10における汎用レジスタ番号(rs)により指定することにより、即値ではなく変数により指定することが可能となる。また、制御プロセッサとコプロセッサとの間におけるレジスタ間転送命令等は、レジスタ転送命令の入力レジスタ、あるいは、出力レジスタに、制御プロセッサ10における汎用レジスタ(rs、rd)を指定することで実現可能である。
パラメータレジスタ65を設定する命令は、ALU22c、ALU22d、及び、ローカルメモリコントローラ20及び共有メモリコントローラ21における種々のパラメータレジスタに、即値、または、制御プロセッサにおける汎用レジスタ値を設定する命令である。VLIW命令は、図5に示すように命令を並列に記述することにより、ALU22c、ALU22dの両方を用いて、並列に演算処理を行う命令である。
(コプロセッサにおける汎用レジスタ構成とその動作の説明)
図6は、レジスタファイル23cのマッピング構成例を示す図であるとともに、各レジスタに関するビットフォーマットも表す。
コプロセッサ11cは、レジスタファイル23cにおける汎用レジスタとして、32ビットレジスタを16個(CR0乃至CR15)有する。コプロセッサ11cは、この汎用レジスタにおいて、コプロセッサ内演算命令、及び、制御プロセッサとコプロセッサとの間の演算命令等を実行する。汎用レジスタ(CR0乃至CR15)のうち、いくつかのレジスタは、特殊な専用レジスタとして動作する。例えば、1つのレジスタ(CR0)は、ゼロレジスタ(書き込みアクセスは無効。読み出しアクセスの値は常に0)として動作する。また、16個の汎用レジスタのうち2つの汎用レジスタ(例えば、CR2、CR3)は、メモリアクセスに用いる特殊レジスタとして動作する。
例えば、1つの汎用レジスタ(例えば、CR2)は、ローカルメモリにアクセスする際に用いる。1つの汎用レジスタ(例えば、CR3)は、外部共有メモリにアクセスする際に用いる。つまり、この例において、ALU22cまたはALU22dは、CR2レジスタに書き込みアクセスする場合において、書き込みデータパッキング回路32及び書き込みデータFIFO31を経由して、ローカルメモリ120、121、または、外部共有メモリにデータを書く。
この場合、書き込みアドレスは、ローカルメモリコントローラ20における書き込みアドレスジェネレータ30が指定するアドレスである。ALU22c、ALU22d、及び、コプロセッサコントローラ24cは、CR2レジスタに値を記憶するよう制御する。それに応じて、ALU22c、ALU22dは、コプロセッサ命令を実行する。ALU22c、ALU22dは、1[データ/サイクル]の書き込みスループットにより、ローカルメモリ120及び121に処理結果データを書く。
一方、あらかじめ、ローカルメモリコントローラ20における読み出しアドレスジェネレータ40等を起動することにより、ローカルメモリ120、121、あるいは、外部共有メモリが有するストリームデータを読む。ALU22c、ALU22dは、CR2レジスタに読み出しアクセスすることにより、ローカルメモリコントローラ20における読み出しデータFIFO41、及び、読み出しデータパッキング回路42を経由して、ローカルメモリ120、121、あるいは、外部共有メモリが有するデータを読む。
上述した処理において、ローカルメモリ120、121上のデータは、あらかじめローカルメモリコントローラ20に読み出し転送されている。そのため、ALU22c、ALU22d、あるいは、コプロセッサコントローラ24cは、該データをWaitする(待つ)ことなくCR2レジスタへの読み出しアクセス可能である。その結果、1[データ/サイクル]の読み出しスループットにおいて、ローカルメモリ120、121、及び、外部共有メモリから処理データを読むことができる。
同様に、CR3レジスタに対して書き込みアクセス、または、読み出しアクセスを実施することにより、メモリアクセスレイテンシを隠蔽しながら、共有メモリコントローラ21経由にて、ローカルメモリ120、121、及び、外部の共有メモリにアクセスすることが可能である。
図6の例においては、パラメータレジスタを設定することにより、他の2つのレジスタ(CR4、CR5)は、ピープ(PEEP)処理を行うレジスタとして動作することも可能である。前述したように、CR2レジスタ、あるいは、CR3レジスタは、ローカルメモリ120、及び、共有メモリにアクセスするレジスタである。レジスタ(CR2、CR3)に読み出しアクセスを行うと、読み出しデータFIFO41、及び、読み出しデータパッキング回路42の状態は変化する。
一方で、CR4レジスタやCR5レジスタがピープ(PEEP)処理を行うレジスタであり、当該レジスタに読み出しアクセスする場合に、CR4レジスタ(LMP)は、CR2レジスタ(LM)と同じデータを読むことができる。それとともに、CR5レジスタ(SMP)は、CR3レジスタ(SM)と同じデータを読むことができる。さらに、読み出しデータFIFO41や読み出しデータパッキング回路42における状態は変化しない。すなわち、CR4レジスタから読み出したデータは、その後、CR2レジスタから再度読み出すことが可能である。そのため、ピープレジスタ機能は、同一のデータを複数回使用する場合に有用である。
上述した第1の例において、CR4レジスタとCR5レジスタは、前記ピープ機能レジスタとして使用したが、パラメータ設定により、通常の汎用レジスタとして使用することもできる。
なお、図6の例において、各レジスタにおけるビットフォーマットは32ビットである。レジスタとして、1ビット×32データ分、あるいは、1バイト(8ビット)×4データ分、32ビット×1データ分等と設定することができる。上述した第1の例においては、例えば、LSB−First、かつ、リトルエンディアン(Little_endian)に従うビットフォーマットを使用する場合において、ビット/バイト演算は、LSB側から順番にデータを処理する。
また、図6の例では、32ビット×16個というレジスタファイルの構成例を示すが、本発明に係る各実施形態におけるレジスタ構成としてはこの構成に限定されない。すなわち、16ビットのレジスタであってもよいし、8個や32個のレジスタファイル構成であってもよい。レジスタファイルが有する構成は、上述した第1の例には限定されない。
(ローカルメモリコントローラ20及び共有メモリコントローラ21の構成とその動作の説明)
図7は、ローカルメモリコントローラ20及び共有メモリコントローラ21の構成例を示すブロック図である。図1及び図4に示すように、ローカルメモリコントローラ20及び共有メモリコントローラ21は、制御プロセッサ10、あるいは、コプロセッサ11cが行う演算処理と独立にローカルメモリ120、121や外部の共有メモリにアクセスする。ローカルメモリコントローラ20及び共有メモリコントローラ21は、書き込みアドレスジェネレータ30、書き込みデータFIFO31、書き込みデータパッキング回路32、読み出しアドレスジェネレータ40、読み出しデータFIFO41、及び、読み出しデータパッキング回路42等を有する。
さらに、ローカルメモリコントローラ20及び共有メモリコントローラ21は、バイパス転送制御回路52と、読み出しデータ選択回路50と、バイパスモード設定レジスタ51とを有する。バイパス転送制御回路52は、書き込むデータを、書き込みデータパッキング回路32から読み出しデータFIFO41に直接バイパスを経由して転送するか否かを制御する。すなわち、バイパス転送制御回路52により、読み出しデータFIFO41に格納する読み出しデータを、メモリからの読み出しデータとするか、あるいは、バイパス転送される書き込みデータとするかを選択することが可能である。
まず、コプロセッサ11cがレジスタファイル23cにおけるCR2またはCR3レジスタを介して、メモリに処理結果であるストリームデータを書く場合、ローカルメモリコントローラ20及び共有メモリコントローラ21における書き込みアドレスジェネレータ30、書き込みデータFIFO31、及び、書き込みデータパッキング回路32が処理を行う。書き込みデータパッキング回路32は、第1の所定のビット単位に、例えば、書き込みデータを32ビット単位にパッキングする。書き込みデータパッキング回路32は、ALU22c、ALU22d側から指定される書き込みデータサイズ(WSIZE)分のデータ(WDAT)を左シフトし、その後、書き込みデータパッキング回路32に残っているデータサイズ分のデータ(remain_data)と結合する。
ここで、書き込みデータパッキング回路32は、結合されるデータの有効ビット数が32ビット未満である場合に、そのままデータレジスタ(remain_data)に残し、その後、データを出力しない。一方、書き込みデータパッキング回路32は、結合されるデータが32ビット以上である場合に、LSB側32ビット分を書き込みデータFIFO31に出力し、その後、上位側32ビット分([63:32])をデータレジスタ(remain_data)に格納する。書き込みデータパッキング回路32は、データのシフト処理とパッキング処理とを行う。そのため、プロセッサは、シフト演算を処理する必要がなくなる。それにより、ALU22におけるデータ処理単位(出力データサイズ)が32ビット単位以外であっても、処理サイクル数のオーバヘッドなく、ストリームデータを処理することが可能となる。
書き込みデータパッキング回路32は、32ビット分のデータが揃う場合に、書き込みデータFIFO31にデータを出力する。書き込みデータFIFO31は、書き込みアドレスジェネレータ30と協調して動作することにより、入力されるデータを、メモリにおいて書き込みアドレスジェネレータ30が示すアドレスに格納する。書き込みアドレスジェネレータ30は、ベースアドレスレジスタ(w_base)、初期ポインタレジスタ(w_ptr)、ステップレジスタ(w_step)、メモリ長レジスタ(w_len)、アクセス回数レジスタ(w_cnt)等の制御レジスタを有する。
書き込みアドレスジェネレータ30は、例えば、ベースアドレス(w_base)に対してカレントアドレスポインタ分を加算したアドレスが発行する。カレントアドレスポインタは、初期ポインタ(w_ptr)の値を初期値として、書き込みアドレスジェネレータ30がアドレスを出力するたびに、その値が変化する。すなわち、書き込みアドレスジェネレータ30がアドレスを出力するたびに、カレントアドレスポインタが指し示すアドレスに32ビットアドレス単位にてステップ数(w_step)分だけ加算し、メモリ長サイズ(w_len)で剰余(Modulo)演算することにより、次のカレントアドレスポインタの値を決める。
このように、アドレスジェネレータとFIFOとを用いてデータ出力することにより、制御プロセッサ10及びコプロセッサ11cが実行する演算命令とは独立して、メモリにアクセスすることが可能になる。その上、メモリがアクセスをWaitする場合においても、演算命令は、その影響を受けない。上述したような処理により、書き込みデータのメモリアクセスレイテンシを隠蔽することが可能である。
メモリがアクセスをWaitする処理に伴い、書き込みデータFIFO31がFull(すなわち、データサイズがFIFOのサイズと等しい)になる場合においても、書き込みデータパッキング回路32やレジスタファイル23cを介してALU22c、ALU22d側のコプロセッサ命令をWaitするように制御するWait制御機構を、さらに有することにより、コプロセッサ命令を継続的に処理することができる。
次に、コプロセッサ11cが、レジスタファイル23cにおけるCR2またはCR3レジスタを介して、メモリからストリームデータを読み出す場合、ローカルメモリコントローラ20及び共有メモリコントローラ21における読み出しアドレスジェネレータ40、読み出しデータFIFO41、及び、読み出しデータパッキング回路42等を使用する。読み出しアドレスジェネレータ40は、スタートレジスタ(r_start)、ベースアドレスレジスタ(r_base)、オフセットアドレス単位レジスタ(r_unit)、初期ポインタレジスタ(r_ptr_xx)、ステップレジスタ(r_step_xx)、メモリ長レジスタ(r_len_xx)、及び、アクセス回数レジスタ(r_cnt)等の制御レジスタを有する。
読み出しアドレスジェネレータ40は、これらの制御レジスタに値が設定されることにより起動される処理に応じて、読み出しアドレスをアクセス回数(r_cnt)分だけ連続的に発行する。ローカルメモリコントローラ20(共有メモリコントローラ21)は、発行された読み出しアドレスに応じて、メモリからデータを読み出す。読み出しアドレスジェネレータ40は、読み出しアドレスを発行することにより、読み出す場合のスプリットトランザクションに対応する。読み出しアドレスジェネレータ40は、ベースアドレス(r_base)に対してオフセットアドレス分加算し、その算出値をアドレスとして発行する。オフセットアドレスの生成部は、符号化、及び、復号化処理におけるビットインタリーブ処理等に対応するため、ビット単位、バイト(8ビット)単位、ワード(32ビット)単位等任意の単位に応じて、オフセットアドレスを計算する。
メモリから読み出すデータ(RDAT)は、読み出しデータFIFO41、読み出しデータパッキング回路42を介して、ALU22c、ALU22d側に転送される。メモリから読み出したデータ(RDAT)は、読み出しデータFIFO41に順に格納される。読み出しデータFIFO41は、読み出しアドレスジェネレータ40におけるビットシフトに用いるFIFOのビット位置情報の値を用いて、所望のビットがLSB側に配置されるようにシフト回路にてビットシフトし、算出されたデータを読み出しデータパッキング回路42に転送する。
この時、格納される読み出しデータの個数が、ビットシフトに用いるFIFOや読み出しデータFIFO41の容量を超えないように、各FIFOの容量に応じて、読み出しアドレスジェネレータ40は、読み出しアクセスを行うアドレスを発行するタイミングを制御する。読み出しデータパッキング回路42は、ALU22c、ALU22d側からCR2あるいはCR3レジスタを用いてデータが読み出される場合に、指定された読み出しデータサイズ(RSIZE)の値に応じて、読み出しデータパッキング回路42にあるデータ(remain_data)を右シフトする。すなわち、読み出しデータパッキング回路42は、読み出したデータサイズ(RSIZE)を有するデータを除去するとともに、残りのデータをLSB側に格納する。
このとき、読み出しデータパッキング回路42は、この読み出しデータパッキング回路にあるデータのサイズと、読み出しデータサイズ(RSIZE)との差から、そのデータに関する有効ビット数が32ビット以上であれば、読み出しデータFIFO41側から読み出しデータを取得しない。一方、読み出しデータパッキング回路42は、そのデータに関する有効ビット数が32ビット未満である場合に、次の読み出しデータを、読み出しデータFIFO41から取得する。
次に、読み出しデータパッキング回路42は、取得した読み出しデータを残りのデータサイズ分だけ左シフトし、さらに、残りのデータのMSB側に結合し、その後、そのデータをデータレジスタ(remain_data)に格納する。すなわち、読み出しデータパッキング回路42は、データパッキング回路にあるデータを、第2の所定のビット単位の大きさにパッキングする。読み出しデータパッキング回路42が、データのシフト処理とパッキング処理を行うため、プロセッサは、シフト演算処理を行う必要がない。その結果、ALU22c、ALU22dにおけるデータ処理単位(入力データサイズ)が32ビット単位以外であっても、処理サイクル数のオーバヘッドなく、ストリームデータを処理することが可能となる。
尚、第1の所定のビット単位と第2の所定のビット単位とは、異なる値であっても良い。
読み出しアクセスがWait等することにより、読み出しデータパッキング回路42に、所望のデータがまだ存在しない(すなわち、読み出しデータFIFO41が空である)場合には、読み出しデータパッキング回路42やレジスタファイル23cを介してALU22c、ALU22dがコプロセッサ命令をWaitするように制御するWait制御機構も有することにより、正常にコプロセッサ命令処理を継続することができる。
ALU22c、ALU22dを並列に動作させ、ALU22c、ALU22dが行う処理において、データ依存関係がある場合について説明する。例えば、ALU22cは、前段の処理を行う。次に、ALU22dは、その処理結果データを用いて、後段の処理を行う。この場合、例えば、ローカルメモリコントローラ20の書き込み側(WMC)をALU22cから出力する際に用いるとし、ローカルメモリコントローラ20の読み出し側(RMC)をALU22dに入力する際に用いる。
そして、制御プロセッサ10は、コプロセッサコントローラ24C経由で、書き込みアドレスジェネレータ30にALU22c側からの処理結果データを格納する先のアドレス制御設定を行う。ALU22dへのデータ読み出し設定は、バイパス転送設定を用いる。そのため、制御プロセッサ10は、コプロセッサコントローラ24C経由で、バイパスモード設定レジスタ51に「バイパス転送モード(メモリ転送有り)」を設定する。このとき、読み出しアドレスジェネレータ40の設定は不要である。
上述のように設定した後、ローカルメモリコントローラ20を起動し、ALU22c、ALU22dによる並列演算を実行した場合、書き込みデータパッキング回路32は、ALU22cが出力する処理結果データを、32bit形式により記述されたデータ(以降、「32bitデータ」と略記する)に整形し、整形したデータを、書き込みデータFIFO31を介して、書き込みアドレスジェネレータ30が設定するアドレスに書き込む。
上述した処理ともに、バイパス転送制御回路52は、書き込みデータパッキング回路32が出力する32bit形式により記述された書き込みデータ(以降、「32bit書き込みデータ」と略記する)を、読み出しデータ選択回路50にバイパス転送する。次に、読み出しデータ選択回路50は、バイパス転送された32bit書き込みデータを記憶すべきデータとして選択し、その後、読み出しデータFIFO41に格納する。
そして、読み出しデータ選択回路50が32bit形式により記述された1データ分だけ読み出しデータFIFO41に格納する処理により、ALU22dは、読み出しデータパッキング回路42を介して当該データを取得し、ALU22cと並列に演算することが可能となる。
上述した第1の例において、バイパスモード設定レジスタ51を「バイパス転送モード(メモリ転送有り)」に設定するとした。処理途中のデータをメモリに格納することが不要である場合、バイパスモード設定レジスタ51に「バイパス転送モード(メモリ転送無し)」を設定することも可能である。「バイパス転送モード(メモリ転送無し)」である場合、バイパス転送制御回路52は、書き込みデータをローカルメモリに転送せず、直接、読み出しデータFIFO41にバイパス転送する。この例においては、書き込みアドレスジェネレータ30を設定することも不要である。
(並列に処理する演算間にデータ依存関係がある場合の処理フローと動作の説明)
図8A乃至Cは、ALU22c、ALU22dが並列に動作する状況にて、その処理間にデータ依存関係がある場合の処理フローとVLIW命令の例を示す図である。特に、連続的に実行する命令の入出力データサイズが、相互に異なる場合の例である。
図8Aに示すように、処理フローとしては、任意のデータ系列(data)に対して、符号化処理の1つである畳み込み符号化処理(rate=1/3のconv命令)を行い、その後、パンクチャリング処理(perm命令)を行って符号化率を2/3とする場合を考える。この場合、図8Bに示すように、プログラム例としては、まず畳み込み符号化処理に対する入力を行うメモリコントローラ設定、出力を行うメモリコントローラ設定、パンクチャ処理に対する入力を行うバイパス転送設定(LMC)、及び、出力を行うメモリコントローラ設定を行う。
そして、図8Bに示すプログラム例において、まず、畳み込み符号化命令(conv)の演算が2回行われる。畳み込み符号化命令(conv)により、最初のループとして、1ループ分のパンクチャリング命令(perm)が開始できる分だけバイパス転送データが読み出しデータFIFO41に格納される。ここで、前段の畳み込み符号化命令(conv、rate=1/3)は、8ビットの入力データであるとともに、24ビットの出力データである命令である。また、この例において、後段のパンクチャリング命令(perm)は、16ビットの入力データであるとともに、8ビットの出力データである命令である。
よって、メインの演算ループにおいて、読み出しFIFOのオーバーフロー、及び、アンダーフローが起こらないように、ループ内における両者の命令数を調整するビットレート調整が必要である。メインの演算ループにおけるデータ転送単位を、両者の最小公倍数を算出する処理等により、例えば、48ビットとする。また、前段の畳み込み符号化命令(conv、rate=1/3)を2回、後段のパンクチャリング命令(perm)を3回実行する。その場合、プログラムにおいては、両者を並列演算するVLIW命令を2回、パンクチャリング命令(perm)を1回処理する。次に、図8Bに示すプログラムにおいては、ループ1回分に相当する残りのパンクチャリング命令(perm)を3回実行し、その後、処理を終了する。
図8Bに示すプログラムを実行することにより、図8Cに示すように、ALU22c、ALU22dは、任意のデータ系列(data)に対して入出力データサイズの異なる連続する処理(畳み込み符号化処理(conv、rate=1/3)、及び、パンクチャリング処理(perm))を並列に実行することが可能である。
ここで、ALU22cから24ビットずつ出力される畳み込み符号化データは、書き込みデータパッキング回路32にて32ビットずつにパッキングされ、その後、メモリ書き込みと並行して読み出しデータFIFO41に格納される。読み出しデータパッキング回路42は、後段のALU22dに、上述した畳み込み符号化データを、16ビットずつ出力する。上述したような処理により、入出力データのサイズが異なる連続する処理を書き込み/読み出しデータパッキング回路を用いながらVLIW命令にて並列実行する場合においても、メモリアクセスレイテンシによるレイテンシを考慮する必要がない。その結果、並列化されたALU22c、ALU22dの稼働率が向上するため、全体の処理時間は短縮する。
図9を参照しながら、第2の例について説明する。図9は、無線通信システムにおける変調、復調、及び、同期処理を行う複素演算処理プロセッサに適用する場合の構成例を示すブロック図である。
(構成の説明)
複素演算処理プロセッサ102は、コプロセッサインタフェースを有する制御プロセッサ10(例えば、ハーバードアーキテクチャ型の32ビットRISCプロセッサ)に対して、そのコプロセッサインタフェースを用いて複素演算処理を行うコプロセッサ11eを接続する構成を有する。コプロセッサ11eは、ローカルメモリインタフェースと共有メモリインタフェースとを有する。それにより、コプロセッサ11eは、ローカルメモリ122、ローカルメモリ123または共有メモリ(図9において不図示)に、それぞれ、ストリームアクセス(すなわち、スプリットトランザクションをサポートするバーストアクセス)する。
メモリセレクタ12e(「マルチプレクサ型バスコントローラ」とも表す)は、制御プロセッサ10からのデータアクセスと、コプロセッサ11eからのローカルメモリアクセス及び共有メモリアクセスを調停、及び、選択制御するバスコントローラである。メモリセレクタ12eは、マルチレイヤ型の態様を有する。
ローカルメモリ122及び123は、メモリセレクタ12eからのローカルメモリインタフェースと接続する。命令メモリ110は、制御プロセッサ10の命令メモリ110が有するインタフェースに直接接続する。ここで、ローカルメモリ122、123、及び、メモリセレクタ12e等は、コプロセッサ11eによるSIMD演算を可能とするために、例えば、64ビット(32ビット×2)幅を有するバスである。
また、コプロセッサ11eは、上述した第1の例と同様に、バンク分けされたローカルメモリ122、123、外部の共有メモリにストリームアクセスするローカルメモリコントローラ20e、及び、共有メモリコントローラ21eを有する。それにより、メモリアクセスレイテンシを隠蔽することができる。コプロセッサ11eは、ローカルメモリインタフェース、共有メモリインタフェースを介して、ローカルメモリ122、123や外部の共有メモリ(図9において不図示)と接続する。
メモリコントローラ20e、21eは、プロセッサやコプロセッサにおける演算処理と並列にローカルメモリ122、123や外部の共有メモリにアクセスするために、書き込みアドレスジェネレータ30e、書き込みデータFIFO31e、読み出しアドレスジェネレータ40e、及び、読み出しデータFIFO41e等を有する。また、メモリコントローラ20e、21eは、書き込みデータパッキング回路(32bit形式と64bit形式との変換を行う)32e、あるいは、読み出しデータパッキング回路(32bit形式と64bit形式との変換を行う)42eを有することもできる。
更に、メモリコントローラ20e、21eは、書き込みデータを読み出しデータFIFO41eに直接バイパス転送するパス、読み出しデータ選択回路50e、及び、バイパスモード設定レジスタ51を有する。メモリコントローラ20e、21eは、読み出しデータとして、例えば、DMEM1、2等のメモリからの読み出しデータ、あるいは、バイパス転送された書き込みデータを選択することもできる。
また、コプロセッサ11eは、複素演算処理を行うALU22e、ALU22fを有する。上述した演算器としては、複数の無線通信方式における変調、復調、及び、同期処理にて一般的に用いられる、例えば、複素加算(CADD)、複素減算(CSUB)、複素乗算(CMUL)、複素積和演算(CMAC)、複素共役加算(CJADD)、複素共役減算(CJSUB)、複素共役乗算(CJMUL)、複素共役積和演算(CJMAC)、複素絶対値演算(CABS)等を実施する複素算術演算器70と、複素シフト演算(CSHIFT)、複素丸め演算(CRND)、及び、ムーブ命令等を実施する複素論理演算器71等を有する。
複素算術演算器70、複素論理演算器71は、例えば、送信データの変調処理、受信データのチャネル推定処理、及び、等化処理等の復調処理、あるいは、同期処理等を行う。また、複素算術演算器70、複素論理演算器71は、複素演算結果の1系列分の連続データが有する最大有効ビット位置(正規化係数)を検出するトレース回路を備えていても良い。ALU22e、ALU22fは、コプロセッサ命令としてVLIW命令等を定義することにより、並列に動作する。
コプロセッサ11eは、コプロセッサ命令にて使用可能なレジスタファイル23eを有する。コプロセッサ11eは、レジスタファイル23eにおける汎用レジスタとして、例えば、32ビットレジスタを24個(CR0乃至CR23)有する。ただし、例えば、24個の汎用レジスタのうち4つの汎用レジスタ(CR2、CR3、CR18、CR19)は、特殊レジスタとして動作する。上述したように、1つの汎用レジスタ(例えばCR2)は、コプロセッサ11eとローカルメモリコントローラ20との間においてデータを授受する際に動作する。また、1つの汎用レジスタ(例えばCR3)は、コプロセッサ11eと共有メモリコントローラ21との間においてデータを授受する際に動作する。
また、VLIW命令を用いたSIMD的な演算時に64ビットデータに並列アクセスするために、1つの汎用レジスタ(例えば、CR18)は、ローカルメモリコントローラ20eの上位32ビット分のデータを授受する。また、1つの汎用レジスタ(例えば、CR19)は、同様に共有メモリコントローラ21eの上位32ビット分のデータを授受する際に起動することもできる。そのような構成を有することにより、ローカルメモリ122、123及び外部共有メモリへのアクセスに汎用レジスタを使用することができる。さらに、上述した構成を有することにより、64ビット幅のデータに並列にアクセスすることも可能となる。すなわち、ローカルメモリ122、123や外部共有メモリへの並列ストリームデータアクセスが、コプロセッサ11eにおける汎用レジスタと同様の命令マッピングや処理サイクル数のうちに処理可能である。
(動作の説明)
ALU22e、ALU22f、メモリコントローラ20e、21e、及び、VLIW命令等を用いることにより、効率よく複素演算処理を実行する。ただし、複素演算処理を実行するために、32ビットのサイズを有する入出力データと64ビットのサイズを有する入出力データとが混在することもある。
図10A乃至Cは、ALU22e、ALU22fが並列に処理を行う際に、並列する複数の処理の間にデータ依存関係がある場合における、処理フローとVLIW命令の例を示す図である。図10Aに示すように、処理フローにおいて、共有メモリにおけるデータ系列(CR3)と、固定パラメータ(CR6)との複素乗算処理(C−MUL)を行い、その後、64bitにて表現される複素数から、32bitにて表現される複素数にビット丸め処理(C−RND)を行う場合における例である。
この場合、例えば、図10Bに示すようなプログラムにおいて、メモリコントローラを設定する。次に、複素乗算命令(C−MUL)と丸め演算命令(C−RND)との間にデータの依存関係があるため、バイパスモード設定レジスタ51にバイパスモードを設定する。その後、複素乗算命令(C−MUL)を実行する。該命令に応じて、複素乗算結果は、バイパス転送によって、読み出しデータFIFO41に格納される。そのため、以降のメインの演算ループでは、前段の複素乗算命令(C−MUL)と後段の丸め演算命令(C−RND)とを並列に演算するVLIW命令を実行する。最後に、1回分の丸め演算命令(C−RND)を実行する。
図10Bに示すようなプログラムを実行することにより、図10Cに示すように、ALU22e、ALU22fは、データ系列(data)に対して、複素乗算処理(C−MUL)と丸め演算処理(C−RND)とを並列に実行することが可能である。
ALU22eは、複素乗算処理の結果を、64ビットずつ出力する。次に、ALU22e、ALU22fは、CR2レジスタ、及び、CR18レジスタに対するペアレジスタであるCA2を介して、複素乗算結果データを64ビットのまま、ローカルメモリに転送する。ここで、バイパス転送設定により、ローカルメモリコントローラからメモリに書き込む処理と並行して、読み出しデータFIFO41eにも複素乗算結果が格納される。そのため、次のサイクルでは、後段のALU22fに64ビットずつ入力することが可能となる。
すなわち、バイパスモード転送設定により、プログラミングにおいて、メモリアクセスレイテンシによるレイテンシを考慮する必要がなくなる。その上、ALU22e、ALU22fの稼働率が向上するため、全体の処理時間は短縮する。また、ローカルメモリコントローラ20e、21eは、64ビット形式のデータをアクセスすることにも対応するため、64ビット形式のデータを転送することができる。その転送において、演算の種類により64ビット形式のデータと、32ビット形式のデータとの間におけるデータ形式の変換や、パッキング処理が必要な場合に、書き込みデータパッキング回路(32bit形式と64bit形式との変換を行う)32e、あるいは、読み出しデータパッキング回路(32bit形式と64bit形式と変換を行う)42eを有することにより、上述した処理が可能になる。
図11A乃至Cは、ALU22e、ALU22fがSIMD的な並列演算を行う場合の処理フローとVLIW命令の例を示す図である。図11Aに示すように、処理フローにおいて、ローカルメモリにおけるデータ系列Aと、共有メモリにおけるデータ系列Bとに、複素加算処理(C−ADD)を行う例である。この例において、複素加算処理(C−ADD)は、32bit単位にて処理を行う。一方、上述した第2の例においては、メモリにおける1アドレスに64bit単位にて、2データを格納する。
この場合、例えば、図11Bに示すプログラムにおいては、まず、各々のメモリコントローラ設定を行う。次に、2つのALU22e、ALU22fが並列に演算するよう制御するVLIW命令に応じて、2つのALU22e、ALU22fは、複素加算命令(C−ADD)を並列に実行する。このとき、2つのALU22e、ALU22fは、SIMD的に演算する。すなわち、ALU22eは、下位32bit([31:0])におけるデータ(CR2、CR3)を演算する。一方、ALU22fは、上位32bit([63:32])におけるデータ(CR18、CR19)を処理する。
図11Bに示すプログラムを実行することにより、図11Cに示すように、ALU22e、ALU22fは、2つのデータ系列Aとデータ系列Bに対する複素加算処理(C−ADD)を、SIMD的に(すなわち、並列に)実行することが可能である。この例では、SIMD的な演算の例を示したが、VLIW命令における一方のALUにおいて命令を変更することにより、例えば、MIMD的に処理する(すなわち、相互に異なるデータ系列に対して、相互に異なる演算を行う)ことも可能である。
図10と図11とに示すように、ALU22e、ALU22fは、32bit形式のデータと64bit形式のデータとが混在する状況において、データをアクセスすることもある。これは、複素乗算等において入出力データが有するサイズが相互に異なる場合、あるいは、メモリが連続的に記憶するデータに対して、SIMD的に演算を実行する場合等に、64ビット形式のデータをアクセスすることが必要なためである。
そのため、メモリコントローラ20e、21eは、32bit形式、及び、64bit形式にてデータを入力することが可能で、64bit形式のデータを出力する書き込みデータパッキング回路32e、あるいは、64bit形式のデータを入力し、32bit形式のデータ、あるいは、64bit形式のデータのいずれでも出力することができる読み出しデータパッキング回路42eを有することもできる。上述した第2の例において、メモリコントローラ20e、21eは、読み出しデータ選択回路50eとバイパスモード設定レジスタ51とを有することにより、読み出しデータとして、メモリからの読み出しデータ(64bit形式)、あるいは、バイパス転送される書き込みデータ(64bit形式)を選択することができる。
<第2の実施形態>
図12は、本発明の第2の実施形態に係る、バイパス転送するか否かを判断する機能を持つストリームプロセッサ103の構成の一例を示すブロック図である。図12において,例えば、ストリームプロセッサ103は、マルチプロセッサ転送する入出力インタフェースを有する。
(構成の説明)
図12に示すように、ストリームプロセッサ103は、制御プロセッサ10に、符号化、及び、復号化処理を行うコプロセッサ11gを接続する構成を有する。コプロセッサ11gは、メモリアクセスレイテンシを隠蔽するために、ローカルメモリコントローラ20g、及び、共有メモリコントローラ21g等のメモリコントローラを有する。コプロセッサ11gは、レジスタファイル23、及び、複数の無線信号を処理するALU22a、22bを有する。
ALUは、複数の無線通信方式における符号化、及び、復号化処理を行うビット/バイト演算器、及び、変調、復調、及び、同期処理を行う複素演算器等を有する。ALUは、様々な無線方式における無線信号処理に対応するため、プログラマブルである。コプロセッサ命令としてVLIW命令等を定義することにより、複数のALU22a、22bは、並列にデータを演算することができる。
例えば、第2の実施形態において、ローカルメモリコントローラ20g及び共有メモリコントローラ21gは、バイパス転送するか否かを判断するバイパス判定制御回路(BCNT)53gを有する。また、ストリームプロセッサ103は、マルチプロセッサ構成に対応する入出力インタフェースを有する。ローカルメモリコントローラ20g及び共有メモリコントローラ21gにおける読み出しデータ選択回路50gは、入力インタフェースから転送されるデータを入力するため、合わせて3つのデータを入力する。なお、ローカルメモリコントローラ20g及び共有メモリコントローラ21gは、必ずしも、上述した構成を全て有する必要はない。
図13は、第2の実施形態におけるローカルメモリコントローラ20g及び共有メモリコントローラ21gが有する構成の一例を示す図である。ローカルメモリコントローラ20g及び共有メモリコントローラ21gは、書き込みアドレスジェネレータ30、書き込みデータFIFO31、書き込みデータパッキング回路32、読み出しアドレスジェネレータ40、読み出しデータFIFO41、及び、読み出しデータパッキング回路42等を有する。
さらに、ローカルメモリコントローラ20g及び共有メモリコントローラ21gは、書き込みデータパッキング回路32から読み出しデータFIFO41に書き込みデータを直接バイパス転送するパス、読み出しデータ選択回路50g、及び、バイパスモード設定レジスタ51g等を有する。さらに、ローカルメモリコントローラ20g及び共有メモリコントローラ21gは、バイパス転送するか否かを判定するバイパス判定制御回路(BCNT)53gを有する。
読み出しデータ選択回路50gは、3種類のデータ(すなわち、バイパスされた書き込みデータ、メモリからの読み出しデータ、及び、外部マルチプロセッサインタフェースからの入力転送データ)を選択する構成を有する。これにより、読み出しデータFIFO41に格納する読み出しデータとして、メモリからの読み出しデータとバイパス転送された書き込みデータとに加え、外部のプロセッサからの入力転送データを選択することができる。
(動作の説明)
第2の実施形態における動作について、図12、及び、図13を参照しながら説明する。
まず、バイパス転送するか否かを判定する処理について説明する。ALU22a、22bが行う演算処理の間において、データ依存関係があるか否かに関わらず、メモリコントローラを使用する場合に、書き込みアドレスジェネレータ30、及び、読み出しアドレスジェネレータ40を設定する。次に、メモリコントローラを起動し、その後、演算処理を実行する。書き込みアドレスジェネレータ30に応じて、データは書き込まれる。
データを読み出す処理において、バイパス判定制御回路53gにおける比較回路(CMP)は、読み出しアドレスと書き込みアドレスとを比較する。バイパス判定制御回路53gは、上述した2つのアドレスが一致すると判定する場合には、ALU22a、22bが行う演算処理においてデータに依存関係があると判断する。依存関係があると判定する場合に、読み出しデータ選択回路50gがメモリからの読み出しデータではなく、書き込みデータを選択することにより、バイパス判定制御回路53gは、該書き込みデータを、読み出しデータFIFO41にバイパス転送する。その際に、マスク回路(MSK)は、読み出しアドレスの発行をマスクする。
一方で、バイパス判定制御回路53gが、上述した2つのアドレスが一致しないと判定する(すなわち、ALU22a、22bが行う演算処理にデータ依存関係がない)場合に、読み出しアドレスジェネレータは、読み出しアドレスを発行する。その後、読み出しデータ選択回路50gは、メモリからの読み出しデータを選択する。その際に、バイパス判定制御回路53gは、サイクルカウンタ(count)をさらに有する。それにより、入出力サイクル数などの関係で書き込みアドレスを発行するタイミングが遅れる場合にも対応することができるようになる。
データを読み出す処理におけるタイミングと、書き込みアドレスを発行する処理におけるタイミングとが一致しない場合において、バイパス判定制御回路53gは、サイクルカウンタがカウントする数サイクル間(例えば、0乃至5サイクル程度)の遅延までについて、比較判定を行う。バイパス判定制御回路53gは、上述した数サイクル間において、比較結果が一致する場合に、書き込みデータをバイパス転送する。数サイクル間に一致しない場合において、バイパスしない読み出し動作を行うようにバイパス判定制御回路53gを構成することも可能である。
上述した本実施形態によれば、メモリコントローラ20g、21gは、バイパス判定制御回路53gを有する。それにより、バイパス判定制御回路53gは、プロセッサがバイパスモード設定レジスタ51gを設定することなく、バイパス転送可否を判定することが可能である。
次に、マルチプロセッサ転送を行う入出力インタフェースを制御する処理について説明する。全体の処理性能を向上させる(すなわち、全体の処理速度を高速化する)ために、ストリームプロセッサ103等の複数のプロセッサを有する場合もある。その場合、当該複数のプロセッサ間における通信(すなわち、データ転送)が必要である。特許文献等が開示する関連技術は、複数のプロセッサが共有メモリインタフェースを介して共有メモリを参照することにより、データを授受する。
しかしながら、当該データを授受する共有メモリ領域を削減する場合や、共有メモリを参照するデータ転送レイテンシが問題となる場合等において、上述したように、ストリームプロセッサ103は、マルチプロセッサ転送を行う入出力データインタフェースを有することもできる。ストリームプロセッサ103において、メモリセレクタ12は、デコードされたアドレスに応じて、データ出力インタフェースへ、転送するデータを出力する。そのような処理により、ストリームプロセッサ103は、他プロセッサへデータを出力する。
また、他プロセッサからのデータ入力転送については、ローカルメモリコントローラ20g及び共有メモリコントローラ21gにおけるバイパスモード設定レジスタ51gを設定し、読み出しデータ選択回路53gは、マルチプロセッサ転送を行うデータ入力インタフェースから入力される入力転送データを選択し、選択したデータを読み出しデータFIFO41に格納する。この処理により、ALU22a、22bは、その入力転送データにおいて演算する。
上述したように、本実施形態に係るストリームプロセッサ103は、プロセッサ間のインタフェースとして、マルチプロセッサ転送を行う入出力データインタフェースを有する。ローカルメモリコントローラ20g及び共有メモリコントローラ21gにおける読み出しデータ選択回路50gは、マルチプロセッサにデータを転送する入力インタフェースにおける転送データも選択可能なように、3つの入力を受け付ける。それにより、ストリームプロセッサ103は、複数のプロセッサ間におけるデータ転送をすることができる。本実施形態によれば、当該データを授受する処理に必要な共有メモリ領域を削減するとともに、共有メモリをアクセスすることにより生じるデータ転送レイテンシを削減する。
図14を参照しながら、第3の例について説明する。図14は、本実施形態、または、本発明の第1の実施形態に係るメモリコントローラを使用して、符号化、及び、復号化処理の1つであるインタリーブ処理、及び、デインタリーブ処理を実現する場合の動作例を示す図である。
(動作の説明)
図14Aに示すように、ブロックインタリーブ処理は、符号化、及び、復号化処理におけるインタリーブ処理(あるいは、デインタリーブ処理)の一例である。ブロックインタリーブ処理は、例えば、あるM行N列分(M及びNは、ともに正整数)のデータブロックに対して、入力側にて行単位に書き込むともに、出力側にて列単位に読み出すことにより、データを並び変える処理である。
無線方式には、M行N列の書き込み開始行や読み出し開始列をブロックごとに変更することによって、そのランダム性を向上させる方式や、最後の出力系列時に各ブロックから出力する順番を巡回(巡回シフト処理)させる方式等がある。また、M行N列のMやNの値は、無線方式、あるいは、無線方式における内部パラメータ等に依存する。
ここで、インタリーブ処理において、その処理の性質上、1個の入力メモリと1個の演算器を用いて処理する場合には、1(ビット/サイクル)の処理スループットが限界である。すなわち、インタリーブ処理は、例えば、8ビット並列演算が可能なスクランブリング処理等に比べて、8倍の処理時間が必要である。そのため、インタリーブ処理は、高速に処理する場合のボトルネックになる。そこで、以降では、インタリーブ処理する入力メモリを2個(2バンク)と、ALU22e、ALU22fを用いて、2倍(2ビット/サイクル)の処理スループットを実現することについて説明する。
図14Bの処理フローに示すように、まず、ALU1は、前段(この例ではスクランブリング処理)の処理時に、その処理結果をバンク分けされた2つのローカルメモリ120、ローカルメモリ121の両方に書き込む。ただし、1命令で2つのローカルメモリにブロードキャストする命令が存在しない場合において、ローカルメモリコントローラ20及び共有メモリコントローラ21は、VLIW演算命令に応じて、メモリデータを2つのローカルメモリにコピーする。
例えば、ALU22eがDMEM0(120)へのスクランブリング処理命令を行うとともに、ALU22fがDMEM1(121)へコピーする(あるいは、Moveする)VLIW命令を実施する。そして、2つのローカルメモリコントローラ20及び共有メモリコントローラ21と、ALU22e、ALU22fとにより、並列なインタリーブ処理を実現する。例えば、ALU22eは、データ系列の前半部分(d0)について、インタリーブ処理を行う。それとともに、ALU22fは、後半部分(d1)について、インタリーブ処理を行う。
このとき、図14Cの処理タイミング例に示すように、前段のスクランブリング処理とコピー処理とを実行するVLIW命令を処理する場合、通信処理レイテンシ分のサイクルを待ち、その後、コピー処理を開始する必要がある。ここで、特許文献等が開示する関連技術においては、メモリレイテンシに応じてスクランブリング処理結果が一定以上メモリに格納されるのを待ち、その後、コピー処理を開始する必要がある。
これに対し、本実施形態に係るローカルメモリコントローラ20及び共有メモリコントローラ21を使用する場合においては、バイパスモード設定レジスタ51、51gを設定することにより、書き込みデータパッキング回路32からの書き込みデータを直接読み出しデータFIFO41にバイパス転送できる。そのため、メモリアクセスレイテンシを考慮する必要がない。すなわち、コピー命令の開始は、一定の時間にて、かつ、少ない通信処理レイテンシにて行うことができる。
例えば、スクランブリング命令の場合、8ビット並列処理であるスクランブリング処理命令の出力データが32ビット1データとしてローカルメモリ及び読み出しデータFIFO41に出力される4サイクル分(+α)(α=0〜2サイクル程度)程度のレイテンシで、VLIW命令を活用したコピー命令との並列実行が可能である。その後、ALU22e、ALU22fと2つのローカルメモリ120、121を用いて並列にインタリーブ処理を実行する。これにより、本実施形態を利用しない場合に比べて、2倍(2ビット/サイクル)の処理スループットが実現できる。
(並列演算命令ライブラリの説明)
また、図15は、複数の演算器の間にデータ依存関係がある処理の場合に、プログラミングを容易にする並列演算命令ライブラリの例である。図15に示すように、例えば、入出力メモリの情報(read_mem_info)、前段の処理命令(1st_func)、前段の処理命令の出力データビット数(1st_size)、後段の処理命令(2nd_func)、後段の処理命令の入力ビット数(2nd_size)、及び、全体の処理データ数(入力データビット数)(num)を引数とする並列演算命令ライブラリを定義する。図15に示すような関数ライブラリを用いることにより、並列に処理する演算器間にデータの依存関係がある場合も、処理間のレイテンシの考慮が不要な形でプログラミングすることが可能となる。
例えば、図15における使用例1に示すようにプログラミングすることにより、実際の並列演算命令としては、図14A乃至図14Cに示すような最初にスクランブリング命令を行い、その後、VLIWを用いた並列演算を行い、最後に残るコピー命令(ムーブ命令)が実行される。同様に、図15における使用例2のようにプログラミングする場合には、図8A乃至Cに示したような並列演算命令列が実行される。
ここで、並列演算命令ライブラリは、前段の処理命令の出力データビット数(1st_size)と、後段の処理命令の入力データビット数(2nd_size)とを引数とする。これにより、並列化された演算器において処理するデータ間に依存関係があるのに加え、その演算命令間で処理データサイズが異なる場合であっても、そのデータサイズと、レイテンシとを考慮して、最適な並列演算を実行することが可能である。
本発明の各実施形態によれば、ALUを有するプロセッサが無線信号処理等の信号処理を行う場合に、それらのALU間の演算にデータの依存関係があるとしても、少ないレイテンシで、ALUによる並列演算が可能になる。
すなわち、本発明の各実施形態に係るストリームプロセッサは、制御プロセッサに無線信号処理を行うコプロセッサを接続し、コプロセッサにおけるALUを並列に複数有する。上述したような構成により、VLIW化、SIMD化、または、MIMD化等による高速化が可能である。
さらに、該ストリームプロセッサは、コプロセッサからメモリへのアクセスに対して、メモリアクセスレイテンシを隠蔽するアドレス生成部と、FIFOを有するメモリコントローラと、メモリコントローラにおける書き込みデータパッキング回路から読み出しデータFIFOに対してバイパス転送機能と有する。上述した構成により、ALU間の演算にデータの依存関係があるとしても、少ないレイテンシで、ALUによる並列演算が可能になることである。
上述した構成によれば、コプロセッサからメモリへのアクセスに、メモリアクセスレイテンシを隠蔽できるアドレス生成部とFIFOとを有するメモリコントローラを有することにより、無線通信システムにおける無線信号処理を、高速に処理することができる。特に、ALU間でデータの依存関係がない場合は、メモリコントローラにより双方のALUにおけるメモリアクセスレイテンシを隠蔽でき、ALUを高い稼働率で稼働させることが可能となる。
更に、上述した構成によれば、ALU間でデータの依存関係がある場合も、メモリコントローラにおける書き込みデータパッキング回路から読み出しデータFIFOに接続するバイパス転送機能を用いることにより、短く、かつ、一定のレイテンシにて、高い稼働率でALUを並列動作させることが可能となる。
なお、上述した構成によれば、ALU間における専用通信パスやキャッシュメモリ等複雑な機構を使用することなく、メモリコントローラにおける書き込みデータパッキング回路から読み出しデータFIFOへのバイパス機能のみという比較的少ない回路規模の追加のみで、上記のレイテンシの削減を実現できるとともに、並列処理を高速化できる。
さらに、本発明の各実施形態によれば、無線信号処理等の信号処理を行うプロセッサにおいて、ALUを並列化する場合に、そのALU間の演算にデータの依存関係がある場合にも、そのレイテンシの考慮を不要とし、メモリアクセスレイテンシには依存しない比較的容易なプログラミングにて、ALUによる並列演算が可能になる。
その理由は、本発明の各実施形態に係るストリームプロセッサでは、バイパスモード設定レジスタや読み出しデータ選択回路等によるバイパス転送機能を用いることにより、前段の処理の書き込みデータのメモリアクセスレイテンシや、後段の処理の読み出しデータアクセスレイテンシを隠蔽できるため、メモリコントローラにおけるバイパス転送に要する一定の(短く、固定的な)レイテンシを考慮するだけで、データ依存関係のある並列処理演算のプログラミングが可能になるためである。
すなわち、一定のレイテンシのみを考慮してプログラミングが可能となる。そのため、ストリームプロセッサ及びメモリアクセスレイテンシを含む周辺ハードウェアの構成に関する知識がなくとも、ソフトウェア開発者は、容易にプログラムを作成することができる。また、並列処理する演算処理間にデータ依存関係の有無にかかわらず、ソフトウェア開発者は、VLIW命令ライブラリを容易に開発できる。更に、本発明の各実施形態に係る並列演算命令ライブラリを用いることにより、並列化された演算器間にデータの依存関係があり、更にその演算命令間で処理データサイズが異なる場合でも、ソフトウェア開発者は、それを考慮することなく、容易にプログラムを作成することができる。
なお、コプロセッサにおけるALUとして、動作モード等処理のパラメータ設定可能(すなわち、プログラマブル)で、かつ、1サイクルで複数ビットを並列に処理可能な、スクランブリング回路、畳み込み符号化器、ビット連接(並び替え)回路、及び、CRC符号化器等を有すること、または、1サイクルで任意の複素演算(複素乗算、複素加減算、複素MAC演算、及び、複素共役演算等)が可能な複素演算器を有することにより、複数の無線方式における符号化、及び、復号化処理(ビット/バイト演算処理)、及び、変調、復調、及び、同期処理等に、柔軟にかつ高速に対応可能である。
そして、制御プロセッサと専用ハードウェア回路を組み合わせた構成ではなく、制御プロセッサに対して無線信号処理を処理するALUを並列化したコプロセッサとして実現することにより、1サイクル単位にて処理命令をソフトウェア(VLIW等)で指定可能なため、無線信号処理の処理順序の変更、無線方式に関する仕様変更、及び、仕様拡張等にも柔軟に対応できる。
無線信号処理におけるインタリーブ処理やデインタリーブ処理等、処理量の多い処理を、効率的に並列処理できることである。
すなわち、上述したように、2つのバンク分けされたローカルメモリと2つのALUとを用いて、一方のローカルメモリが記憶する前段の処理の実行結果を、他方のローカルメモリにコピーし、その後、2つのメモリコントローラと2つのALUとを用いて、2並列にインタリーブ処理を行うことにより、1ブロック分のブロックインタリーブ処理を、本実施形態を利用しない場合に比べて、2倍の処理スループットで実現できる。
特に、メモリコントローラにおいて、バイパスモード設定レジスタ、あるいは、読み出しデータ選択回路等によるバイパス転送機能を用いることにより、前段の処理を実行した結果のコピーを、少ないレイテンシのみのオーバヘッドにて、前段の処理と並列に実行可能である。すなわち、コピーする転送処理時間をほぼ隠蔽することができるため、少ない処理時間オーバヘッドのみで、効率的に2並列のインタリーブ処理、及び、デインタリーブ処理を実現可能である。更に、並列演算命令ライブラリを用いることにより、レイテンシを考慮することなく、最適なレイテンシでのプログラムを作成することができる。
2並列のインタリーブ処理を例として説明を行ったが、上述した第3の例を、N並列(Nは2以上の整数)のインタリーブ処理に拡張できることは明らかである。
上述した効果は、本発明の各実施形態において達成し得る。
<第3の実施形態>
次に、上述した第1の実施形態及び第2の実施形態が基礎とする第3の実施形態について、図16を参照しながら説明する。図16は、第3の実施形態に係るメモリコントローラが有する構成を表すブロック図である。
本実施形態に係るメモリコントローラ1000は、第1アドレスジェネレータ1001と、第2アドレスジェネレータ1004と、書き込みデータFIFO1002と、読み出しデータFIFO1006と、読み出しデータ選択回路1005と、バイパス転送制御回路1003とを有する。
まず、バイパス転送制御回路1003は、メモリインタフェースを介してメモリに書き込むデータを、書き込みデータFIFO1002と、読み出しデータ選択回路1005とに転送するバイパス処理を行う。
読み出しデータ選択回路1005は、読み出すデータを、メモリから読み取るのか、あるいは、バイパス転送制御回路1003が転送するデータとするのかを選択する。
本実施形態に係るメモリコントローラ1000は、上述したバイパス処理を実施することにより、メモリを介することなくデータを参照することが可能になる。そのため、本実施形態に係るメモリコントローラによれば、メモリを参照するレイテンシを減らすことができる。その結果、例えば、無線信号等に関する演算を、高速に実行することを可能にする。
また、演算器がメモリにおけるデータをやり取りする際に、データFIFOの段数等に応じて、書き込みデータレイテンシや読み出しデータレイテンシが発生する。さらに、該データレイテンシは、例えば、一般的なメモリコントローラの構成等に応じて多様である。一方、本実施形態に係るメモリコントローラによれば、メモリに書き込むデータをパイパス処理するため、一定のレイテンシにて、データをやり取りすることが可能になる。
尚、上述した各実施形態の一部又は全部は、以下の付記のようにも記載されうる。しかしながら、上述した各実施形態により例示的に説明した本発明は、以下には限られない。即ち、
(付記1)
複数のアドレスジェネレータと、読み出しデータFIFOと、書き込みデータFIFOと、バイパス転送制御回路と、データ選択回路とを備え、
前記複数のアドレスジェネレータは、設定された値と算出したアドレスに応じて新たなアドレスを繰り返し算出し、
前記読み出しデータFIFOは、前記複数のアドレスジェネレータのうち第2アドレスジェネレータが算出するアドレスが指し示すメモリにおけるデータを、一時的に格納可能であり、
前記書き込みデータFIFOは、前記複数のアドレスジェネレータのうち第1アドレスジェネレータが算出するアドレスが指し示すメモリに書き込むデータを、一時的に格納可能であり、
前記バイパス転送制御回路は、メモリインタフェースを介して前記メモリに書き込むデータを、前記書き込みデータFIFOと、前記データ選択回路とに転送するバイパス処理を行い、
前記読み出しデータ選択回路は、読み出すデータを、前記メモリから読み取るのか、あるいは、前記バイパス転送制御回路が前記バイパス処理において転送するデータとするのかを選択する、
メモリコントローラ。
(付記2)
前記読み出しデータFIFOから読み取ったデータを、前記読み出すデータを表すビットをシフトした値に応じて、指定された単位にてパッキングする読み出しデータパッキング回路と、
前記書き込むデータを指定された単位にてパッキングし、パッキングしたデータを、前記書き込みデータFIFOに記憶するように制御する書き込みデータパッキング回路と
を更に備える付記1に記載のメモリコントローラ。
(付記3)
前記書き込みデータパッキング回路は、第1の所定のビット単位にて記述されたデータを、前記メモリにおける1つのアドレスが指し示す領域の大きさにパッキングし、
前記読み出しデータパッキング回路は、前記メモリにおける1つのアドレスが指し示す領域の大きさを有するデータを、第2の所定のビット単位の大きさにパッキングする
付記2に記載のメモリコントローラ。
(付記4)
前記書き込みデータパッキング回路は、n(ただし、nは整数である)ビット単位または2×nビット単位のデータを、前記メモリにおける1アドレス分である2×nビットデータにパッキングし、
前記読み出しデータパッキング回路は、前記メモリにおける1アドレス分である2×nビットデータを、nビット単位または2×nビット単位にパッキングする
付記2に記載のメモリコントローラ。
(付記5)
前記書き込むデータを保存する先を表すアドレスと、前記読み出すデータを記憶するアドレスとが一致する場合に、前記バイパス処理を実施するバイパス判定制御回路
を更に備える付記1乃至付記4のいずれかに記載のメモリコントローラ。
(付記6)
バイパス転送を行うか否かに関する情報を記憶可能なバイパスモード設定レジスタをさらに備える
付記1乃至付記5のいずれかに記載のメモリコントローラ。
(付記7)
前記データ選択回路は、前記読み出すデータを、前記メモリインタフェースを介して前記メモリから読み取るのか、前記バイパス処理において転送されるデータとするのか、あるいは、入力されるデータとするのかを選択する
付記1乃至付記6のいずれか1項に記載のメモリコントローラ。
(付記8)
無線信号を処理する複数の演算器と、前記無線信号の処理においてメモリアクセスを制御する付記1乃至付記7のいずれかに記載のメモリコントローラとを備え、
前記メモリコントローラは、前記演算器が無線信号を処理する場合に、前記無線信号を表すデータを制御する
プロセッサ。
(付記9)
前記複数の演算器は、前記無線信号を処理する場合に、符号化及び復号化処理を行うビットバイト演算器と、前記ビットバイト演算器の動作を制御するパラメータレジスタとを含む付記8に記載のプロセッサ。
(付記10)
前記複数の演算器は、前記無線信号を処理する場合に、変調、復調及び同期処理を行う複素数演算器を含むことを特徴とする付記8または付記9に記載のプロセッサ。
(付記11)
前記メモリコントローラは、前記複数の演算器側からのレジスタアクセス番号によって、データ読み出し時に状態を更新する通常アクセス機能と、データを読み出しても状態を更新しないピープ機能とを備えることを特徴とする付記8乃至付記10のいずれかに記載のプロセッサ。
(付記12)
付記8乃至付記11のいずれかに記載のプロセッサに用いる演算処理方法であって、前記複数の演算器が行う処理に依存関係がある場合に、メモリに書き込むデータを、依存関係がある前記処理に転送することを特徴とする演算処理方法。
(付記13)
M(ただし、Mは2以上の正整数である)バンク化されたM個のメモリに書き込むデータをM個の演算器にバイパス転送し、前記M個の演算器が前記データのうちそれぞれ異なるデータを、インタリーブ処理またはデインタリーブ処理する
ことを特徴とする付記12に記載の演算処理方法。
(付記14)
前記演算器間にデータ依存関係がある処理の場合に、付記8乃至付記11のいずれか1項に記載のプロセッサにおける前記各々の処理命令における処理データビット数を引数とした演算命令ライブラリ。