JP6191172B2 - メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。 - Google Patents

メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。 Download PDF

Info

Publication number
JP6191172B2
JP6191172B2 JP2013048816A JP2013048816A JP6191172B2 JP 6191172 B2 JP6191172 B2 JP 6191172B2 JP 2013048816 A JP2013048816 A JP 2013048816A JP 2013048816 A JP2013048816 A JP 2013048816A JP 6191172 B2 JP6191172 B2 JP 6191172B2
Authority
JP
Japan
Prior art keywords
data
processing
memory
read
memory controller
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.)
Active
Application number
JP2013048816A
Other languages
English (en)
Other versions
JP2014174868A (ja
Inventor
俊樹 竹内
俊樹 竹内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2013048816A priority Critical patent/JP6191172B2/ja
Publication of JP2014174868A publication Critical patent/JP2014174868A/ja
Application granted granted Critical
Publication of JP6191172B2 publication Critical patent/JP6191172B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、例えば、VLIW型プロセッサ等の、並列化された演算器が効率良くデータアクセスすることが可能なメモリコントローラ等に関する。
一般的に、送受信データを表す信号(以降、「送受信データ信号」とも表す)に対する符号化及び復号化処理(以降、「符号化/復号化処理」と表す)や変調及び復調処理(以降、「変調/復調処理」と表す)は、無線通信システムにおいて必要である。すなわち、このような通信システムにおいては、送信側では、送信データ信号に対するCyclic_Redundancy_Check(以降「CRC」と表す)コード付加、スクランブリング処理、畳み込み符号化、インタリーブ処理等の符号化処理、Phase_Shift_Keying(以降、「PSK」と表す。例えば、Binary_PSK(BPSK)、Quadrature_PSK(QPSK)、8PSKがある)、あるいは、Quadrature_Amplitude_Modulation(以降、「QAM」と表す。例えば、16QAM、64QAM、256QAMがある)等の変調処理や拡散処理が必要である。一方、受信側では、受信データを表す信号(以降、「受信データ信号」とも表す)に対するデインタリーブ処理、ビタビ(Viterbi)復号化、デスクランブリング(descrambling)処理、CRC判定処理等の復号化処理や、同期処理、復調処理、逆拡散処理等が必要である。
符号化/復号化処理は、主にビット単位またはバイトデータ単位で演算が実施されるため、ビットまたはバイト演算(以降、「ビット/バイト演算」と表す)処理とも呼ばれることもある。変調/復調処理等は、無線シンボル単位(複素数In−phase、Quadrature_phase(以降、「IQ」と表す)信号)にて演算が実施されるため、多くの複素数演算処理(複素数の乗算、複素数の加算等)が必要である。無線通信方式に基づく符号化/復号化処理や変調/復調処理を高速かつ低消費電力に実現するために、上述した処理をそれぞれ実施するハードウェア回路を実装する手法が存在する。各ハードウェア回路は、上記の符号化/復号化処理や変調/復調処理を高速に実施する。
このため、1つのシステムが、複数の無線方式を処理するソフトウェア無線技術への期待は高い。規格化や標準化されている種々の無線方式間において、これらの符号化/復号化処理、または、変調/復調処理の内容は、相互に類似する。しかしながら、それらの処理において、処理するデータの単位や演算式を表す一部の処理パラメータ、及び、演算順序等は異なる。
無線通信方式ごとにハードウェア回路を実装する手法により、複数の無線方式における符号化/復号化処理を実施する場合、対応する無線方式の種類数分の複数の専用ハードウェア回路が必要である。そのため、回路の面積に関するオーバヘッドは大きい。また、専用ハードウェア回路により処理する場合において、処理を変更する場合や処理を拡張する場合における柔軟性が低い。そこで、無線信号処理に特化した専用プロセッサによって、複数の無線方式に柔軟に対応する技術が提案されている。
モバイルネットワークが拡大するのに伴い、ビデオストリームやゲームコンテンツ等大容量のデータを高速に伝送する無線方式に対する期待は高い。その実現のためには、無線通信システムも高速化する必要がある。
プロセッサを用いて無線信号処理等の処理を高速に処理する技術として、プロセッサ(または、コプロセッサ)のVLIW(Very_Long_Instruction_Word)化技術、あるいは、SIMD(Single_Instruction_Multiple_Data)化またはMIMD(Multiple_Instruction_Multiple_Data)化技術のような並列処理技術、あるいは、マルチプロセッサ技術等がある。並列化により高速に処理するためには、データを滞りなく供給することにより、複数の演算器を高い稼働率にて稼働することが必要である。
バスアクセスを高速化するために、読み出し時にアドレスとデータとをスプリット転送(パイプライン転送)するとともに、ストリームアクセス可能な、高速なオンチップバスインタフェース規格が存在する。バスインタフェース規格の一例として、OCP(Open_Core_Protocol)やAXI(Advanced_eXtensible_Interface)等を挙げることができる。
上記のバスインタフェース規格を採用するチップは、要求フェーズにおいてアドレスを転送するとともに、応答フェーズにおいてデータを転送する。該チップは、上述したようなスプリット転送を実施することにより、データを読み出す処理に付随するデータレイテンシに依存することなく、連続して読み出す際に対象となるアドレス(以降、「読み出しアドレス」と表す)を発行する。
システムが大規模になり、動作クロック周波数が高速になるにつれ、読み出す処理に付随するレイテンシサイクル数は多くなる。そのような場合でも、スプリット転送可能なバスと専用のメモリコントローラとを用いることによって、高い転送スループットでストリームアクセスを可能とする以下のような技術も存在する。
例えば、特許文献1が開示する装置は、一般的な制御プロセッサとして、符号化/復号化を処理するコプロセッサと、専用のメモリコントローラとを有する。該専用のメモリコントローラは、メモリアクセスレイテンシを隠蔽する。
特許文献1におけるコプロセッサは、ALU(Arithmetic_and_Logic_Unit、演算器)として、パラメータ設定可能であり、かつ、1サイクルで複数ビットを並列に処理可能な、スクランブリング処理回路、畳み込み符号化器、ビット連接(並び替え)回路、及び、CRC符号化器等を有する。該コプロセッサは、例えば、上述したような機能を有することにより、複数の種類の無線方式に基づく符号化/復号化処理を実施する。
また、特許文献1におけるメモリコントローラは、上述したコプロセッサからメモリへのアクセスにおいて、メモリアクセスレイテンシを隠蔽できるアドレスジェネレータ機能、FIFO(First in First out)機能、及び、データパッキング機能等を有する。メモリアクセスレイテンシを隠蔽することにより、複数の無線方式に対応可能な柔軟性と、高い処理スループットで演算する高速性とは向上する。
上記の処理を更に高速に処理する技術として、コプロセッサにおけるALUを並列化すると技術と、VLIW化する技術とがある。並列に動作するALUは、ローカルメモリ等のメモリを介して、データを授受する。並列に動作するALUがローカルメモリ等のメモリを介してデータを授受(参照)する場合、メモリアクセスレイテンシを考慮したプログラミングが必要である。そのために、該プログラムは、メモリアクセスレイテンシに応じて、ALUが実施する演算命令を一定クロックサイクル分ウェイトするように制御する。その結果、ALUの稼働率は低下する。
特許文献2は、制御プロセッサに複素数演算を処理するコプロセッサを接続する技術を開示する。特許文献2が開示する装置は、コプロセッサにおけるALUとして1サイクルで1複素数データ分の演算を処理可能な複素演算器と、該コプロセッサがメモリへアクセスする場合に発生する転送待ち時間(以降、「レイテンシ」と表す)を隠蔽するメモリコントローラとを有する。それにより、複数の無線方式における種々の変調、復調及び同期処理(複素数演算処理)に対応可能な柔軟性、及び、高い処理スループットで演算する高速性は向上する。
同様に、上記の処理を更に高速に処理する技術としては、コプロセッサにおけるALUを並列化する技術がある。その場合、ALU間では、ローカルメモリ等のメモリを介して、データを授受する。その場合、上述した理由により、ALUの稼働率は低下する。
特許文献3は、複数の処理要素(Processing_Element、「PE」とも表す)間に通信パス(「通信機構」とも表現する)を設けることにより、直接、複数のPEが通信する技術を開示する。特許文献3が開示する装置は、通信パスを設けることにより、SIMD型またはMIMD型システム(以降、「SIMD/MIMD型システム」と表す)において、複数のPEが同期(協働)するレイテンシを低減する。
しかしながら、特許文献3が開示する装置は、メモリアクセスバスに加えて、専用のPE間通信パスを有する。該装置は、専用のPE間通信パスを有することにより、回路規模が増加するという課題と、メモリアクセスとは別にPE間通信を個別に実施する必要があるという課題とを有する。すなわち、該装置には、メモリアクセスを処理するサイクルと、PE間通信を処理するサイクルとが必要である。
符号化/復号化処理において、PE間におけるデータの処理単位であるビット幅は相互に異なる。そのため、符号化/復号化処理を、PE間通信パスによりそのままPE間通信することによってデータを授受する方法や、PE間で汎用レジスタを共有することによってデータを授受する方法により処理する場合には、後段のPE側でビットシフト等のデータを操作する演算が必要になる。その結果、上述した処理を行うシステムにおいて、効率的に演算を処理(以降、「演算処理」と略記する)することは難しい。
特許文献4は、ALUとローカルメモリ等のメモリ間とに高機能なキャッシュメモリを有することにより、複数のALU間でキャッシュメモリの同期を取る技術を開示する。そのために、特許文献4が開示する装置は、階層的、かつ、高機能なキャッシュメモリに、プログラマブルな事前取り出し機能等を有する。事前取り出し機能により、各ALU間における演算に依存関係があっても、レイテンシの比較的少ない稼働率の高い並列演算が可能になる。
しかしながら、高機能キャッシュメモリを実現するためには、複雑な制御回路、または、メモリセル等が必要である。それらの機能を実現する回路の規模は増大する。また、複数のALU間における並列処理を、VLIWによって効率よく実現する場合には、プログラミングにおいて、ALU間におけるレイテンシを考慮して隠蔽する技法が必要である。
特願2011−026885号公報 特願2011−029325号公報 特表2001−523023号公報 特表2004−538548号公報 特開2005−025718号公報 特開2007−295128号公報 特開平08−115258号公報
ALUを並列化し、例えばVLIW化やSIMD化/MIMD化に対応する方法は、無線信号処理等の処理を行うプロセッサを高速化する一つの手法である。ところが、並列に動作するALUにおける処理演算に、データの参照関係がある場合には、データのレイテンシを考慮したプログラミングが必要となる。その結果、そのプログラミングは難しくなる。
また、一連のストリームデータ系列をVLIWにて並列演算するALU間における処理演算に、データの参照関係がある場合、例えば、先に処理する(すなわち、「前段の」)ALUの出力データがローカルメモリ等のメモリに書き込まれるのを待ち、後に処理する(すなわち、「後段の」)ALUの演算を開始する必要がある。その結果、演算器の稼働率は、そのレイテンシ分だけ低下する。
プロセッサのデータバスとして、スプリット転送可能なバスインタフェースを使用するとともに、専用のメモリコントローラを用いることによって、その読み出す際のレイテンシ(以降、「読み出しレイテンシ」と表す)を隠蔽し、高い転送スループットでストリームアクセス可能な構成の場合において、そのプログラミングは、より一層難しくなる。
専用のメモリコントローラによって、あるデータを読み出す際に、連続するデータを先読みすることは可能になる。該データに関する処理演算が独立である場合において、専用のメモリコントローラは、ストリームデータに対する演算スループットを向上させる。
しかしながら、並列演算するALUにおける処理演算間においてデータの参照関係がある場合は、前段のALUからメモリへ書き込む際のレイテンシ(以降、「書き込みレイテンシ」と表す)と、後段用に先読みする可能性のあるデータ個数分を考慮して、後段のALU用のデータの先読みを開始する必要がある。しかしながら、その先読みする読み出しデータに関する並列演算は、レイテンシ分だけ、ウェイトしてから実行可能となる。その結果、それらを合わせたレイテンシ分、演算器の稼働率が低下する。
スプリット転送可能なバスと専用のメモリコントローラとは、並列演算するALUにおける処理演算が独立である場合に、メモリアクセスレイテンシを隠蔽することにより高いスループットで演算することを可能にする。
しかしながら、ALUにおける処理演算が、お互いのデータを参照する場合には、メモリへの書き込みレイテンシと読み出しレイテンシとを隠蔽することができない。その結果、レイテンシ分だけ、後段のALUの稼働が遅延する。それとともに、レイテンシサイクル数を考慮したプログラミング技法が必要となる。
特許文献5乃至7は、本発明に関連する技術を開示する。
特許文献5は、乗算上位丸めシフトを含むSIMD処理を、並列に処理する技術を開示する。特許文献6は、例えば、ディジタル信号処理において実施する必要がある加算処理と乗算処理とを、並行して実施する技術を開示する。しかしながら、特許文献5、及び、特許文献6が開示する技術は、メモリへの書き込みレイテンシと読み出しレイテンシとを隠蔽することができないため、無線信号等における演算を高速に処理することができない。
また、特許文献7が開示するマルチプロセッサシステムは、メモリコントローラ内にバイパス機能を設けることにより、メインメモリを介することなく、あるプロセッサから他のプロセッサへ高速にデータを転送する。特許文献7が開示するメモリコントローラは、各プロセッサの外側において、メインメモリを制御する。
しかしながら、該メモリコントローラの場合、転送に要するサイクル数を推定することは困難である。その理由は、メモリコントローラが、プロセッサの外側において、データをバイパスする場合、各プロセッサが有するキャッシュメモリ、あるいは、プロセッサとメモリコントローラと間におけるバスのレイテンシ等に応じて、アクセスサイクル数が変化するためである。
転送に要するサイクル数を推定することは困難であるため、特許文献7が開示するメモリコントローラの場合には、データの参照関係があると、データのレイテンシを考慮したプログラミングが必要となる。
そこで、本発明の主たる目的は、例えば、無線信号等に関する演算を高速に、かつ、一定のレイテンシにて処理可能なメモリコントローラ等を提供することである。
前述の目的を達成するために、本発明に係るメモリコントローラは、以下の構成を備えることを特徴とする。
すなわち、本発明に係るメモリコントローラは、
複数のアドレスジェネレータと、読み出しデータFIFOと、書き込みデータFIFOと、バイパス転送制御回路と、データ選択回路とを備え、
前記複数のアドレスジェネレータは、設定された値と算出したアドレスに応じて新たなアドレスを繰り返し算出し、
前記読み出しデータFIFOは、前記複数のアドレスジェネレータのうち第2アドレスジェネレータが算出するアドレスが指し示すメモリにおけるデータを、一時的に格納可能であり、
前記書き込みデータFIFOは、前記複数のアドレスジェネレータのうち第1アドレスジェネレータが算出するアドレスが指し示すメモリに書き込むデータを、一時的に格納可能であり、
前記バイパス転送制御回路は、メモリインタフェースを介して前記メモリに書き込むデータを、前記書き込みデータFIFOと、前記データ選択回路とに転送するバイパス処理を行い、
前記データ選択回路は、読み出すデータを、前記メモリから読み取るのか、あるいは、前記バイパス転送制御回路が前記バイパス処理において転送するデータとするのかを選択する
ことを特徴とする。
また、本発明の他の見地として、本発明に係る演算処理方法は、
複数の演算器が行う処理に依存関係がある場合に、メモリに書き込むデータを、依存関係がある前記処理に転送することを特徴とする。
本発明に係るメモリコントローラ等によれば、無線信号等における演算を高速に、かつ、一定のレイテンシにて処理することができる。
本発明の第1の実施形態に係る無線通信システムにおけるストリームプロセッサの例として、制御プロセッサに、無線信号処理専用のコプロセッサを接続したストリームプロセッサの構成を示すブロック図である。 複数のデータ系列に対して同一の処理を並列に行う場合の処理フローの例を示す図である。 複数のデータ系列に対して同一の処理を並列に行う場合のプログラムの例を示す図である。 複数のデータ系列に対して同一の処理行う場合の処理の例を示す図である。 複数のデータ系列に対して処理を直列に行う場合の処理フローの例を示す図である。 複数のデータ系列に対して処理を直列に行う場合のプログラムの例を示す図である。 複数のデータ系列に対して処理を直列に行う場合の処理の例を示す図である。 符号化、及び、復号化処理プロセッサの構成の一例を示すブロック図である。 コプロセッサ命令の命令コードの構成例を示す図である。 レジスタファイルの構成例を示す図である。 メモリコントローラの構成例を示すブロック図である。 符号化、及び、復号化処理プロセッサが並列に処理する処理フローの一例を示す図である。 符号化、及び、復号化処理プロセッサにおいて実行するプログラムの一例を示す図である。 符号化、及び、復号化処理プロセッサにおいて実行する場合の処理の例を示す図である。 複素演算処理プロセッサの構成を示すブロック図である。 複素演算処理プロセッサが並列に処理する処理フローの一例を示す図である。 複素演算処理プロセッサが並列に処理するプログラムの一例を示す図である。 複素演算処理プロセッサが並列に処理する場合の処理の一例を示す図である。 複素演算処理プロセッサがSIMD処理する処理フローの一例を示す図である。 複素演算処理プロセッサがSIMD処理するプログラムの一例を示す図である。 複素演算処理プロセッサがSIMD処理する処理フローの処理の一例を示す図である。 本発明の第2の実施形態に係るストリームプロセッサの構成の一例を示すブロック図である。 本発明の第2の実施形態に係るメモリコントローラの構成例を示す図である。 メモリコントローラを用いたインタリーブ処理の一例を示す図である。 メモリコントローラを用いたインタリーブ処理における処理フローの一例を示す図である。 メモリコントローラを用いたインタリーブ処理におけるタイミングの一例を示す図である。 並列演算命令ライブラリの構成例を示す図である。 本発明の第3の実施形態に係るメモリコントローラの構成の一例を示すブロック図である。
次に、図面を参照しながら、本発明を実施する最良の実施形態について詳細に説明する。
<第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項に記載のプロセッサにおける前記各々の処理命令における処理データビット数を引数とした演算命令ライブラリ。
10 制御プロセッサ
11、11c、11e、11g コプロセッサ
12、12e メモリセレクタ
20、20e、20g ローカルメモリコントローラ
21、21e、21g 共有メモリコントローラ
22a、22b、22c、22d、22e、22f ALU
23、23c、23e レジスタファイル
24、24c コプロセッサコントローラ
30、30e 書き込みアドレスジェネレータ
31、31e 書き込みデータFIFO
32、32e 書き込みデータパッキング回路
40、40e 読み出しアドレスジェネレータ
41、41e 読み出しデータFIFO
42、42e 読み出しデータパッキング回路
50、50e、50g 読み出しデータ選択回路
51、51g バイパスモード設定レジスタ
52 バイパス転送制御回路
53g バイパス判定制御回路
60 スクランブリング回路
61 畳み込み符号化器
62 CRC符号化器
63 ビット連接/並べ替え回路
65 パラメータレジスタ
70 複素算術演算器
71 複素論理演算器
100、103 ストリームプロセッサ
101 符号化/復号化処理プロセッサ
102 複素演算処理プロセッサ
110 命令メモリ
120、121、122、123 ローカルメモリ
1000 メモリコントローラ
1001 第1アドレスジェネレータ
1002 書き込みデータFIFO
1003 バイパス転送制御回路
1004 第2アドレスジェネレータ
1005 読み出しデータ選択回路
1006 読み出しデータFIFO

Claims (10)

  1. 複数のアドレスジェネレータと、読み出しデータFIFOと、書き込みデータFIFOと、バイパス転送制御回路と、データ選択回路と、バイパスモード設定レジスタとを備え、
    前記バイパスモード設定レジスタには、メモリに格納する対象であるストリームデータを前記読み出しデータFIFOに書き込むか否かを表す情報を格納することができ、
    前記複数のアドレスジェネレータは、設定された値と算出したアドレスに応じて新たなアドレスを繰り返し算出し、
    前記読み出しデータFIFOは、前記複数のアドレスジェネレータのうち第2アドレスジェネレータが算出するアドレスが指し示すメモリにおけるデータを、一時的に格納可能であり、
    前記書き込みデータFIFOは、前記複数のアドレスジェネレータのうち第1アドレスジェネレータが算出するアドレスが指し示すメモリに書き込むデータを、一時的に格納可能であり、
    前記バイパス転送制御回路は、前記バイパスモード設定レジスタに格納されている情報に基づき、メモリインタフェースを介して前記メモリに書き込むデータを、前記書き込みデータFIFOと、前記データ選択回路との少なくとも一方に転送するバイパス処理を行い、
    前記データ選択回路は、前記バイパスモード設定レジスタに格納されている情報に基づき、読み出すデータを、前記メモリから読み取るのか、あるいは、前記バイパス転送制御回路が前記バイパス処理において転送するデータとするのかを選択する、
    メモリコントローラ。
  2. 前記読み出しデータFIFOから読み取ったデータを、前記読み出すデータを表すビットをシフトした値に応じて、指定された単位にてパッキングする読み出しデータパッキング回路と、
    前記書き込むデータを指定された単位にてパッキングし、パッキングしたデータを、前記書き込みデータFIFOに記憶するように制御する書き込みデータパッキング回路と
    を更に備える請求項1に記載のメモリコントローラ。
  3. 前記書き込みデータパッキング回路は、第1の所定のビット単位にて記述されたデータを、前記メモリにおける1つのアドレスが指し示す領域の大きさにパッキングし、
    前記読み出しデータパッキング回路は、前記メモリにおける1つのアドレスが指し示す領域の大きさを有するデータを、第2の所定のビット単位の大きさにパッキングする
    請求項2に記載のメモリコントローラ。
  4. 前記書き込むデータを保存する先を表すアドレスと、前記読み出すデータを記憶するアドレスとを比較した結果に応じて、前記バイパス処理を実施するか否かを制御するバイパス判定制御回路
    を更に備える請求項1乃至請求項3のいずれかに記載のメモリコントローラ。
  5. 無線信号を処理する複数の演算器と、前記無線信号の処理においてメモリアクセスを制御する請求項1乃至請求項4のいずれかに記載のメモリコントローラとを備え、
    前記メモリコントローラは、前記演算器が無線信号を処理する場合に、前記無線信号を表すデータを制御する
    プロセッサ。
  6. 前記複数の演算器は、前記無線信号を処理する場合に、符号化及び復号化処理を行うビットバイト演算器と、前記ビットバイト演算器の動作を制御するパラメータレジスタとを含む請求項5に記載のプロセッサ。
  7. 前記複数の演算器は、前記無線信号を処理する場合に、変調、復調及び同期処理を行う複素数演算器を含むことを特徴とする請求項5または請求項6に記載のプロセッサ。
  8. 請求項乃至請求項7のいずれかに記載のプロセッサに用いる演算処理方法であって、前記複数の演算器が行う処理に依存関係がある場合に、メモリに書き込むデータを、依存関係がある前記処理に転送することを特徴とする演算処理方法。
  9. M(ただし、Mは2以上の正整数である)バンク化されたM個のメモリに書き込むデータをM個の演算器にバイパス転送し、前記M個の演算器が前記データのうちそれぞれ異なるデータを、インタリーブ処理またはデインタリーブ処理する
    ことを特徴とする請求項8に記載の演算処理方法。
  10. 前記バイパスモード設定レジスタには、
    前記ストリームデータを前記メモリに格納し、さらに、前記読み出しデータFIFOに書き込むことを表す情報、または、
    前記ストリームデータを前記メモリに格納せずに、前記読み出しデータFIFOに書き込むことを表す情報を格納することができ、
    前記バイパス転送制御回路、及び、前記データ選択回路は、前記バイパスモード設定レジスタに格納されている情報に基づき処理を実行する
    請求項1に記載のメモリコントローラ。
JP2013048816A 2013-03-12 2013-03-12 メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。 Active JP6191172B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013048816A JP6191172B2 (ja) 2013-03-12 2013-03-12 メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013048816A JP6191172B2 (ja) 2013-03-12 2013-03-12 メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。

Publications (2)

Publication Number Publication Date
JP2014174868A JP2014174868A (ja) 2014-09-22
JP6191172B2 true JP6191172B2 (ja) 2017-09-06

Family

ID=51695994

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013048816A Active JP6191172B2 (ja) 2013-03-12 2013-03-12 メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。

Country Status (1)

Country Link
JP (1) JP6191172B2 (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5265233A (en) * 1991-05-17 1993-11-23 Sun Microsystems, Inc. Method and apparatus for providing total and partial store ordering for a memory in multi-processor system
JPH0588893A (ja) * 1991-09-30 1993-04-09 Fujitsu Ltd 並列演算処理装置
JP3614946B2 (ja) * 1995-08-23 2005-01-26 沖電気工業株式会社 メモリバッファ装置
JPWO2012108411A1 (ja) * 2011-02-10 2014-07-03 日本電気株式会社 符号化/復号化処理プロセッサ、および無線通信装置
US9383994B2 (en) * 2011-02-15 2016-07-05 Nec Corporation Co-processor for complex arithmetic processing, and processor system

Also Published As

Publication number Publication date
JP2014174868A (ja) 2014-09-22

Similar Documents

Publication Publication Date Title
KR101854520B1 (ko) 타이트하게 커플링된 이종 컴퓨팅을 위한 하드웨어 프로세서스들 및 방법들
US6539467B1 (en) Microprocessor with non-aligned memory access
TWI489383B (zh) 遮蔽排列指令的裝置及方法
JP6466388B2 (ja) 方法及び装置
US8989242B2 (en) Encoding/decoding processor and wireless communication apparatus
CN107003846B (zh) 用于向量索引加载和存储的方法和装置
US20180081689A1 (en) Apparatus and method of improved extract instructions
US20060101245A1 (en) Apparatus and method for matrix data processing
TWI509508B (zh) 用於產生按數字順序的連續整數序列之處理器、方法、系統及指令
TWI663545B (zh) 執行置換運算的處理器
CN107145335B (zh) 用于大整数运算的向量指令的装置和方法
JP5920226B2 (ja) 複素演算処理用コプロセッサ及びプロセッサシステム
US6453405B1 (en) Microprocessor with non-aligned circular addressing
KR102460975B1 (ko) 벡터 비트 뒤집기를 수행하기 위한 방법 및 장치
US6574724B1 (en) Microprocessor with non-aligned scaled and unscaled addressing
TW201329861A (zh) 用以產生整數的序列其中在連續位置的整數相差達一常數整數跨幅且其中一最小整數是從零偏移達一整數偏位之處理器、方法、系統及指令
TWI622879B (zh) 考慮用於執行之載入資料元件中的空間區域性之裝置和方法
CN108563465B (zh) 用于响应于单个指令来执行循环和异或的系统、装置和方法
KR20170097011A (ko) 벡터 비트 반전 및 크로싱을 수행하기 위한 방법 및 장치
CN107193537B (zh) 经改进的插入指令的装置和方法
TW201732553A (zh) 用於保留位元的強制執行的裝置及方法
US6728741B2 (en) Hardware assist for data block diagonal mirror image transformation
CN111352658A (zh) 用于在从存储器加载时在进行中转置向量的系统和方法
JP6191172B2 (ja) メモリコントローラ、プロセッサ、演算処理方法、及び、演算命令ライブラリ。
TWI517032B (zh) 用以執行兩向量暫存器之對應填充資料元件間絕對差計算之系統、裝置及方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160217

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161111

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161220

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170208

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170724

R150 Certificate of patent or registration of utility model

Ref document number: 6191172

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150