(57)【要約】【課題】例えば、無線信号等に関する演算を高速に、かつ、一定のレイテンシにて処理可能なメモリコントローラ等を提供する。【解決手段】メモリコントローラ１０００は、複数のアドレスジェネレータと、読み出しデータＦＩＦＯ１００６と、書き込みデータＦＩＦＯ１００２と、バイパス転送制御回路１００３と、データ選択回路１００５とを備え、バイパス転送制御回路１００３は、メモリインタフェースを介してメモリに書き込むデータを、書き込みデータＦＩＦＯ１００２と、データ選択回路１００５とに転送するバイパス処理を行い、データ選択回路１００５は、読み出すデータを、メモリから読み取るのか、あるいは、バイパス転送制御回路１００３がバイパス処理において転送するデータとするのかを選択することを特徴とする。【選択図】  図１６
2014174868.tif 000002
【特許請求の範囲】
【請求項１】
複数のアドレスジェネレータと、読み出しデータＦＩＦＯと、書き込みデータＦＩＦＯと、バイパス転送制御回路と、データ選択回路とを備え、
前記複数のアドレスジェネレータは、設定された値と算出したアドレスに応じて新たなアドレスを繰り返し算出し、
前記読み出しデータＦＩＦＯは、前記複数のアドレスジェネレータのうち第２アドレスジェネレータが算出するアドレスが指し示すメモリにおけるデータを、一時的に格納可能であり、
前記書き込みデータＦＩＦＯは、前記複数のアドレスジェネレータのうち第１アドレスジェネレータが算出するアドレスが指し示すメモリに書き込むデータを、一時的に格納可能であり、
前記バイパス転送制御回路は、メモリインタフェースを介して前記メモリに書き込むデータを、前記書き込みデータＦＩＦＯと、前記データ選択回路との少なくとも一方に転送するバイパス処理を行い、
前記データ選択回路は、読み出すデータを、前記メモリから読み取るのか、あるいは、前記バイパス転送制御回路が前記バイパス処理において転送するデータとするのかを選択する、
メモリコントローラ。
【請求項２】
前記読み出しデータＦＩＦＯから読み取ったデータを、前記読み出すデータを表すビットをシフトした値に応じて、指定された単位にてパッキングする読み出しデータパッキング回路と、
前記書き込むデータを指定された単位にてパッキングし、パッキングしたデータを、前記書き込みデータＦＩＦＯに記憶するように制御する書き込みデータパッキング回路と
を更に備える請求項１に記載のメモリコントローラ。
【請求項３】
前記書き込みデータパッキング回路は、第１の所定のビット単位にて記述されたデータを、前記メモリにおける１つのアドレスが指し示す領域の大きさにパッキングし、
前記読み出しデータパッキング回路は、前記メモリにおける１つのアドレスが指し示す領域の大きさを有するデータを、第２の所定のビット単位の大きさにパッキングする
請求項２に記載のメモリコントローラ。
【請求項４】
前記書き込むデータを保存する先を表すアドレスと、前記読み出すデータを記憶するアドレスとを比較した結果に応じて、前記バイパス処理を実施するか否かを制御する
バイパス判定制御回路
を更に備える請求項１乃至請求項３のいずれかに記載のメモリコントローラ。
【請求項５】
無線信号を処理する複数の演算器と、前記無線信号の処理においてメモリアクセスを制御する請求項１乃至請求項４のいずれかに記載のメモリコントローラとを備え、
前記メモリコントローラは、前記演算器が無線信号を処理する場合に、前記無線信号を表すデータを制御する
プロセッサ。
【請求項６】
前記複数の演算器は、前記無線信号を処理する場合に、符号化及び復号化処理を行うビットバイト演算器と、前記ビットバイト演算器の動作を制御するパラメータレジスタとを含む請求項５に記載のプロセッサ。
【請求項７】
前記複数の演算器は、前記無線信号を処理する場合に、変調、復調及び同期処理を行う複素数演算器を含むことを特徴とする請求項５または請求項６に記載のプロセッサ。
【請求項８】
請求項３乃至請求項７のいずれかに記載のプロセッサに用いる演算処理方法であって、前記複数の演算器が行う処理に依存関係がある場合に、メモリに書き込むデータを、依存関係がある前記処理に転送することを特徴とする演算処理方法。
【請求項９】
Ｍ（ただし、Ｍは２以上の正整数である）バンク化されたＭ個のメモリに書き込むデータをＭ個の演算器にバイパス転送し、前記Ｍ個の演算器が前記データのうちそれぞれ異なるデータを、インタリーブ処理またはデインタリーブ処理する
ことを特徴とする請求項８に記載の演算処理方法。
【請求項１０】
前記演算器間にデータ依存関係がある処理の場合に、請求項４乃至請求項７のいずれか１項に記載のプロセッサにおける前記各々の処理命令における処理データビット数を引数とした演算命令ライブラリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、ＶＬＩＷ型プロセッサ等の、並列化された演算器が効率良くデータアクセスすることが可能なメモリコントローラ等に関する。
【背景技術】
【０００２】
一般的に、送受信データを表す信号（以降、「送受信データ信号」とも表す）に対する符号化及び復号化処理（以降、「符号化／復号化処理」と表す）や変調及び復調処理（以降、「変調／復調処理」と表す）は、無線通信システムにおいて必要である。すなわち、このような通信システムにおいては、送信側では、送信データ信号に対するＣｙｃｌｉｃ＿Ｒｅｄｕｎｄａｎｃｙ＿Ｃｈｅｃｋ（以降「ＣＲＣ」と表す）コード付加、スクランブリング処理、畳み込み符号化、インタリーブ処理等の符号化処理、Ｐｈａｓｅ＿Ｓｈｉｆｔ＿Ｋｅｙｉｎｇ（以降、「ＰＳＫ」と表す。例えば、Ｂｉｎａｒｙ＿ＰＳＫ（ＢＰＳＫ）、Ｑｕａｄｒａｔｕｒｅ＿ＰＳＫ（ＱＰＳＫ）、８ＰＳＫがある）、あるいは、Ｑｕａｄｒａｔｕｒｅ＿Ａｍｐｌｉｔｕｄｅ＿Ｍｏｄｕｌａｔｉｏｎ（以降、「ＱＡＭ」と表す。例えば、１６ＱＡＭ、６４ＱＡＭ、２５６ＱＡＭがある）等の変調処理や拡散処理が必要である。一方、受信側では、受信データを表す信号（以降、「受信データ信号」とも表す）に対するデインタリーブ処理、ビタビ（Ｖｉｔｅｒｂｉ）復号化、デスクランブリング（ｄｅｓｃｒａｍｂｌｉｎｇ）処理、ＣＲＣ判定処理等の復号化処理や、同期処理、復調処理、逆拡散処理等が必要である。
【０００３】
符号化／復号化処理は、主にビット単位またはバイトデータ単位で演算が実施されるため、ビットまたはバイト演算（以降、「ビット／バイト演算」と表す）処理とも呼ばれることもある。変調／復調処理等は、無線シンボル単位（複素数Ｉｎ−ｐｈａｓｅ、Ｑｕａｄｒａｔｕｒｅ＿ｐｈａｓｅ（以降、「ＩＱ」と表す）信号）にて演算が実施されるため、多くの複素数演算処理（複素数の乗算、複素数の加算等）が必要である。無線通信方式に基づく符号化／復号化処理や変調／復調処理を高速かつ低消費電力に実現するために、上述した処理をそれぞれ実施するハードウェア回路を実装する手法が存在する。各ハードウェア回路は、上記の符号化／復号化処理や変調／復調処理を高速に実施する。
【０００４】
このため、１つのシステムが、複数の無線方式を処理するソフトウェア無線技術への期待は高い。規格化や標準化されている種々の無線方式間において、これらの符号化／復号化処理、または、変調／復調処理の内容は、相互に類似する。しかしながら、それらの処理において、処理するデータの単位や演算式を表す一部の処理パラメータ、及び、演算順序等は異なる。
【０００５】
無線通信方式ごとにハードウェア回路を実装する手法により、複数の無線方式における符号化／復号化処理を実施する場合、対応する無線方式の種類数分の複数の専用ハードウェア回路が必要である。そのため、回路の面積に関するオーバヘッドは大きい。また、専用ハードウェア回路により処理する場合において、処理を変更する場合や処理を拡張する場合における柔軟性が低い。そこで、無線信号処理に特化した専用プロセッサによって、複数の無線方式に柔軟に対応する技術が提案されている。
【０００６】
モバイルネットワークが拡大するのに伴い、ビデオストリームやゲームコンテンツ等大容量のデータを高速に伝送する無線方式に対する期待は高い。その実現のためには、無線通信システムも高速化する必要がある。
【０００７】
プロセッサを用いて無線信号処理等の処理を高速に処理する技術として、プロセッサ（または、コプロセッサ）のＶＬＩＷ（Ｖｅｒｙ＿Ｌｏｎｇ＿Ｉｎｓｔｒｕｃｔｉｏｎ＿Ｗｏｒｄ）化技術、あるいは、ＳＩＭＤ（Ｓｉｎｇｌｅ＿Ｉｎｓｔｒｕｃｔｉｏｎ＿Ｍｕｌｔｉｐｌｅ＿Ｄａｔａ）化またはＭＩＭＤ（Ｍｕｌｔｉｐｌｅ＿Ｉｎｓｔｒｕｃｔｉｏｎ＿Ｍｕｌｔｉｐｌｅ＿Ｄａｔａ）化技術のような並列処理技術、あるいは、マルチプロセッサ技術等がある。並列化により高速に処理するためには、データを滞りなく供給することにより、複数の演算器を高い稼働率にて稼働することが必要である。
【０００８】
バスアクセスを高速化するために、読み出し時にアドレスとデータとをスプリット転送（パイプライン転送）するとともに、ストリームアクセス可能な、高速なオンチップバスインタフェース規格が存在する。バスインタフェース規格の一例として、ＯＣＰ（Ｏｐｅｎ＿Ｃｏｒｅ＿Ｐｒｏｔｏｃｏｌ）やＡＸＩ（Ａｄｖａｎｃｅｄ＿ｅＸｔｅｎｓｉｂｌｅ＿Ｉｎｔｅｒｆａｃｅ）等を挙げることができる。
【０００９】
上記のバスインタフェース規格を採用するチップは、要求フェーズにおいてアドレスを転送するとともに、応答フェーズにおいてデータを転送する。該チップは、上述したようなスプリット転送を実施することにより、データを読み出す処理に付随するデータレイテンシに依存することなく、連続して読み出す際に対象となるアドレス（以降、「読み出しアドレス」と表す）を発行する。
【００１０】
システムが大規模になり、動作クロック周波数が高速になるにつれ、読み出す処理に付随するレイテンシサイクル数は多くなる。そのような場合でも、スプリット転送可能なバスと専用のメモリコントローラとを用いることによって、高い転送スループットでストリームアクセスを可能とする以下のような技術も存在する。
【００１１】
例えば、特許文献１が開示する装置は、一般的な制御プロセッサとして、符号化／復号化を処理するコプロセッサと、専用のメモリコントローラとを有する。該専用のメモリコントローラは、メモリアクセスレイテンシを隠蔽する。
【００１２】
特許文献１におけるコプロセッサは、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ＿ａｎｄ＿Ｌｏｇｉｃ＿Ｕｎｉｔ、演算器）として、パラメータ設定可能であり、かつ、１サイクルで複数ビットを並列に処理可能な、スクランブリング処理回路、畳み込み符号化器、ビット連接（並び替え）回路、及び、ＣＲＣ符号化器等を有する。該コプロセッサは、例えば、上述したような機能を有することにより、複数の種類の無線方式に基づく符号化／復号化処理を実施する。
【００１３】
また、特許文献１におけるメモリコントローラは、上述したコプロセッサからメモリへのアクセスにおいて、メモリアクセスレイテンシを隠蔽できるアドレスジェネレータ機能、ＦＩＦＯ（Ｆｉｒｓｔ  ｉｎ  Ｆｉｒｓｔ  ｏｕｔ）機能、及び、データパッキング機能等を有する。メモリアクセスレイテンシを隠蔽することにより、複数の無線方式に対応可能な柔軟性と、高い処理スループットで演算する高速性とは向上する。
【００１４】
上記の処理を更に高速に処理する技術として、コプロセッサにおけるＡＬＵを並列化すると技術と、ＶＬＩＷ化する技術とがある。並列に動作するＡＬＵは、ローカルメモリ等のメモリを介して、データを授受する。並列に動作するＡＬＵがローカルメモリ等のメモリを介してデータを授受（参照）する場合、メモリアクセスレイテンシを考慮したプログラミングが必要である。そのために、該プログラムは、メモリアクセスレイテンシに応じて、ＡＬＵが実施する演算命令を一定クロックサイクル分ウェイトするように制御する。その結果、ＡＬＵの稼働率は低下する。
【００１５】
特許文献２は、制御プロセッサに複素数演算を処理するコプロセッサを接続する技術を開示する。特許文献２が開示する装置は、コプロセッサにおけるＡＬＵとして１サイクルで１複素数データ分の演算を処理可能な複素演算器と、該コプロセッサがメモリへアクセスする場合に発生する転送待ち時間（以降、「レイテンシ」と表す）を隠蔽するメモリコントローラとを有する。それにより、複数の無線方式における種々の変調、復調及び同期処理（複素数演算処理）に対応可能な柔軟性、及び、高い処理スループットで演算する高速性は向上する。
【００１６】
同様に、上記の処理を更に高速に処理する技術としては、コプロセッサにおけるＡＬＵを並列化する技術がある。その場合、ＡＬＵ間では、ローカルメモリ等のメモリを介して、データを授受する。その場合、上述した理由により、ＡＬＵの稼働率は低下する。
【００１７】
特許文献３は、複数の処理要素（Ｐｒｏｃｅｓｓｉｎｇ＿Ｅｌｅｍｅｎｔ、「ＰＥ」とも表す）間に通信パス（「通信機構」とも表現する）を設けることにより、直接、複数のＰＥが通信する技術を開示する。特許文献３が開示する装置は、通信パスを設けることにより、ＳＩＭＤ型またはＭＩＭＤ型システム（以降、「ＳＩＭＤ／ＭＩＭＤ型システム」と表す）において、複数のＰＥが同期（協働）するレイテンシを低減する。
【００１８】
しかしながら、特許文献３が開示する装置は、メモリアクセスバスに加えて、専用のＰＥ間通信パスを有する。該装置は、専用のＰＥ間通信パスを有することにより、回路規模が増加するという課題と、メモリアクセスとは別にＰＥ間通信を個別に実施する必要があるという課題とを有する。すなわち、該装置には、メモリアクセスを処理するサイクルと、ＰＥ間通信を処理するサイクルとが必要である。
【００１９】
符号化／復号化処理において、ＰＥ間におけるデータの処理単位であるビット幅は相互に異なる。そのため、符号化／復号化処理を、ＰＥ間通信パスによりそのままＰＥ間通信することによってデータを授受する方法や、ＰＥ間で汎用レジスタを共有することによってデータを授受する方法により処理する場合には、後段のＰＥ側でビットシフト等のデータを操作する演算が必要になる。その結果、上述した処理を行うシステムにおいて、効率的に演算を処理（以降、「演算処理」と略記する）することは難しい。
【００２０】
特許文献４は、ＡＬＵとローカルメモリ等のメモリ間とに高機能なキャッシュメモリを有することにより、複数のＡＬＵ間でキャッシュメモリの同期を取る技術を開示する。そのために、特許文献４が開示する装置は、階層的、かつ、高機能なキャッシュメモリに、プログラマブルな事前取り出し機能等を有する。事前取り出し機能により、各ＡＬＵ間における演算に依存関係があっても、レイテンシの比較的少ない稼働率の高い並列演算が可能になる。
【００２１】
しかしながら、高機能キャッシュメモリを実現するためには、複雑な制御回路、または、メモリセル等が必要である。それらの機能を実現する回路の規模は増大する。また、複数のＡＬＵ間における並列処理を、ＶＬＩＷによって効率よく実現する場合には、プログラミングにおいて、ＡＬＵ間におけるレイテンシを考慮して隠蔽する技法が必要である。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特願２０１１−０２６８８５号公報
【特許文献２】特願２０１１−０２９３２５号公報
【特許文献３】特表２００１−５２３０２３号公報
【特許文献４】特表２００４−５３８５４８号公報
【特許文献５】特開２００５−０２５７１８号公報
【特許文献６】特開２００７−２９５１２８号公報
【特許文献７】特開平０８−１１５２５８号公報
【発明の概要】
【発明が解決しようとする課題】
【００２３】
ＡＬＵを並列化し、例えばＶＬＩＷ化やＳＩＭＤ化／ＭＩＭＤ化に対応する方法は、無線信号処理等の処理を行うプロセッサを高速化する一つの手法である。ところが、並列に動作するＡＬＵにおける処理演算に、データの参照関係がある場合には、データのレイテンシを考慮したプログラミングが必要となる。その結果、そのプログラミングは難しくなる。
【００２４】
また、一連のストリームデータ系列をＶＬＩＷにて並列演算するＡＬＵ間における処理演算に、データの参照関係がある場合、例えば、先に処理する（すなわち、「前段の」）ＡＬＵの出力データがローカルメモリ等のメモリに書き込まれるのを待ち、後に処理する（すなわち、「後段の」）ＡＬＵの演算を開始する必要がある。その結果、演算器の稼働率は、そのレイテンシ分だけ低下する。
【００２５】
プロセッサのデータバスとして、スプリット転送可能なバスインタフェースを使用するとともに、専用のメモリコントローラを用いることによって、その読み出す際のレイテンシ（以降、「読み出しレイテンシ」と表す）を隠蔽し、高い転送スループットでストリームアクセス可能な構成の場合において、そのプログラミングは、より一層難しくなる。
【００２６】
専用のメモリコントローラによって、あるデータを読み出す際に、連続するデータを先読みすることは可能になる。該データに関する処理演算が独立である場合において、専用のメモリコントローラは、ストリームデータに対する演算スループットを向上させる。
【００２７】
しかしながら、並列演算するＡＬＵにおける処理演算間においてデータの参照関係がある場合は、前段のＡＬＵからメモリへ書き込む際のレイテンシ（以降、「書き込みレイテンシ」と表す）と、後段用に先読みする可能性のあるデータ個数分を考慮して、後段のＡＬＵ用のデータの先読みを開始する必要がある。しかしながら、その先読みする読み出しデータに関する並列演算は、レイテンシ分だけ、ウェイトしてから実行可能となる。その結果、それらを合わせたレイテンシ分、演算器の稼働率が低下する。
【００２８】
スプリット転送可能なバスと専用のメモリコントローラとは、並列演算するＡＬＵにおける処理演算が独立である場合に、メモリアクセスレイテンシを隠蔽することにより高いスループットで演算することを可能にする。
【００２９】
しかしながら、ＡＬＵにおける処理演算が、お互いのデータを参照する場合には、メモリへの書き込みレイテンシと読み出しレイテンシとを隠蔽することができない。その結果、レイテンシ分だけ、後段のＡＬＵの稼働が遅延する。それとともに、レイテンシサイクル数を考慮したプログラミング技法が必要となる。
【００３０】
特許文献５乃至７は、本発明に関連する技術を開示する。
【００３１】
特許文献５は、乗算上位丸めシフトを含むＳＩＭＤ処理を、並列に処理する技術を開示する。特許文献６は、例えば、ディジタル信号処理において実施する必要がある加算処理と乗算処理とを、並行して実施する技術を開示する。しかしながら、特許文献５、及び、特許文献６が開示する技術は、メモリへの書き込みレイテンシと読み出しレイテンシとを隠蔽することができないため、無線信号等における演算を高速に処理することができない。
【００３２】
また、特許文献７が開示するマルチプロセッサシステムは、メモリコントローラ内にバイパス機能を設けることにより、メインメモリを介することなく、あるプロセッサから他のプロセッサへ高速にデータを転送する。特許文献７が開示するメモリコントローラは、各プロセッサの外側において、メインメモリを制御する。
【００３３】
しかしながら、該メモリコントローラの場合、転送に要するサイクル数を推定することは困難である。その理由は、メモリコントローラが、プロセッサの外側において、データをバイパスする場合、各プロセッサが有するキャッシュメモリ、あるいは、プロセッサとメモリコントローラと間におけるバスのレイテンシ等に応じて、アクセスサイクル数が変化するためである。
【００３４】
転送に要するサイクル数を推定することは困難であるため、特許文献７が開示するメモリコントローラの場合には、データの参照関係があると、データのレイテンシを考慮したプログラミングが必要となる。
【００３５】
そこで、本発明の主たる目的は、例えば、無線信号等に関する演算を高速に、かつ、一定のレイテンシにて処理可能なメモリコントローラ等を提供することである。
【課題を解決するための手段】
【００３６】
前述の目的を達成するために、本発明に係るメモリコントローラは、以下の構成を備えることを特徴とする。
【００３７】
すなわち、本発明に係るメモリコントローラは、
複数のアドレスジェネレータと、読み出しデータＦＩＦＯと、書き込みデータＦＩＦＯと、バイパス転送制御回路と、データ選択回路とを備え、
前記複数のアドレスジェネレータは、設定された値と算出したアドレスに応じて新たなアドレスを繰り返し算出し、
前記読み出しデータＦＩＦＯは、前記複数のアドレスジェネレータのうち第２アドレスジェネレータが算出するアドレスが指し示すメモリにおけるデータを、一時的に格納可能であり、
前記書き込みデータＦＩＦＯは、前記複数のアドレスジェネレータのうち第１アドレスジェネレータが算出するアドレスが指し示すメモリに書き込むデータを、一時的に格納可能であり、
前記バイパス転送制御回路は、メモリインタフェースを介して前記メモリに書き込むデータを、前記書き込みデータＦＩＦＯと、前記データ選択回路とに転送するバイパス処理を行い、
前記データ選択回路は、読み出すデータを、前記メモリから読み取るのか、あるいは、前記バイパス転送制御回路が前記バイパス処理において転送するデータとするのかを選択する
ことを特徴とする。
【００３８】
また、本発明の他の見地として、本発明に係る演算処理方法は、
複数の演算器が行う処理に依存関係がある場合に、メモリに書き込むデータを、依存関係がある前記処理に転送することを特徴とする。
【発明の効果】
【００３９】
本発明に係るメモリコントローラ等によれば、無線信号等における演算を高速に、かつ、一定のレイテンシにて処理することができる。
【図面の簡単な説明】
【００４０】
【図１】本発明の第１の実施形態に係る無線通信システムにおけるストリームプロセッサの例として、制御プロセッサに、無線信号処理専用のコプロセッサを接続したストリームプロセッサの構成を示すブロック図である。
【図２Ａ】複数のデータ系列に対して同一の処理を並列に行う場合の処理フローの例を示す図である。
【図２Ｂ】複数のデータ系列に対して同一の処理を並列に行う場合のプログラムの例を示す図である。
【図２Ｃ】複数のデータ系列に対して同一の処理行う場合の処理の例を示す図である。
【図３Ａ】複数のデータ系列に対して処理を直列に行う場合の処理フローの例を示す図である。
【図３Ｂ】複数のデータ系列に対して処理を直列に行う場合のプログラムの例を示す図である。
【図３Ｃ】複数のデータ系列に対して処理を直列に行う場合の処理の例を示す図である。
【図４】符号化、及び、復号化処理プロセッサの構成の一例を示すブロック図である。
【図５】コプロセッサ命令の命令コードの構成例を示す図である。
【図６】レジスタファイルの構成例を示す図である。
【図７】メモリコントローラの構成例を示すブロック図である。
【図８Ａ】符号化、及び、復号化処理プロセッサが並列に処理する処理フローの一例を示す図である。
【図８Ｂ】符号化、及び、復号化処理プロセッサにおいて実行するプログラムの一例を示す図である。
【図８Ｃ】符号化、及び、復号化処理プロセッサにおいて実行する場合の処理の例を示す図である。
【図９】複素演算処理プロセッサの構成を示すブロック図である。
【図１０Ａ】複素演算処理プロセッサが並列に処理する処理フローの一例を示す図である。
【図１０Ｂ】複素演算処理プロセッサが並列に処理するプログラムの一例を示す図である。
【図１０Ｃ】複素演算処理プロセッサが並列に処理する場合の処理の一例を示す図である。
【図１１Ａ】複素演算処理プロセッサがＳＩＭＤ処理する処理フローの一例を示す図である。
【図１１Ｂ】複素演算処理プロセッサがＳＩＭＤ処理するプログラムの一例を示す図である。
【図１１Ｃ】複素演算処理プロセッサがＳＩＭＤ処理する処理フローの処理の一例を示す図である。
【図１２】本発明の第２の実施形態に係るストリームプロセッサの構成の一例を示すブロック図である。
【図１３】本発明の第２の実施形態に係るメモリコントローラの構成例を示す図である。
【図１４Ａ】メモリコントローラを用いたインタリーブ処理の一例を示す図である。
【図１４Ｂ】メモリコントローラを用いたインタリーブ処理における処理フローの一例を示す図である。
【図１４Ｃ】メモリコントローラを用いたインタリーブ処理におけるタイミングの一例を示す図である。
【図１５】並列演算命令ライブラリの構成例を示す図である。
【図１６】本発明の第３の実施形態に係るメモリコントローラの構成の一例を示すブロック図である。
【発明を実施するための形態】
【００４１】
次に、図面を参照しながら、本発明を実施する最良の実施形態について詳細に説明する。
【００４２】
＜第１の実施形態＞
図１は、本発明の第１の実施形態に係る無線通信システムにおけるストリームプロセッサの例として、制御プロセッサに、無線信号を処理するコプロセッサを接続したストリームプロセッサ１００の構成を示すブロック図である。
【００４３】
本実施形態に係るストリームプロセッサ（ｓｔｒｅａｍ＿ｐｒｏｃｅｓｓｏｒ、ＳＰ）１００は、
（ａ）インタフェースとして、外部からブート制御や割り込み信号入力を行うプロセッサ制御インタフェース（不図示）と、
（ｂ）ストリームプロセッサ１００から命令メモリ（Ｉｎｓｔｒｕｃｔｉｏｎ＿Ｍｅｍｏｒｙ、ＩＭＥＭ）１１０にアクセスする命令メモリインタフェースと、
（ｃ）ローカルメモリ（データメモリ、Ｄａｔａ＿Ｍｅｍｏｒｙ、ＤＭＥＭ）１２０、１２１にアクセスするローカルメモリインタフェースと、
（ｄ）外部ペリフェラルに制御アクセスするＤＳＰ（Ｄｉｇｉｔａｌ＿ｓｉｇｎａｌ＿ｐｒｏｃｅｓｓｉｎｇ）インタフェースと、
（ｅ）外部共有メモリにストリームアクセスする共有メモリインタフェース等とを有する。
【００４４】
ストリームプロセッサ１００は、コプロセッサインタフェースを有する制御プロセッサ（Ｐｒｏｃｅｓｓｏｒ＿ｃｏｒｅ）１０（例えば、ハーバードアーキテクチャ型の３２ビットＲｅｄｕｃｅｄ＿Ｉｎｓｔｒｕｃｔｉｏｎ＿Ｓｅｔ＿Ｃｏｍｐｕｔｅｒ（以降、「ＲＩＳＣ」と表す）プロセッサ）に、そのコプロセッサインタフェースを用いて無線信号を処理するコプロセッサ（Ｃｏ−ｐｒｏｃｅｓｓｏｒ）１１を接続する構成を有する。
【００４５】
コプロセッサ１１は、ローカルメモリインタフェース（Ｌｏｃａｌ＿Ｍｅｍｏｒｙ＿Ｉｎｔｅｒｆａｃｅ、ＬＭＥＭ＿ＩＦ）と共有メモリインタフェース（Ｓｈａｒｅｄ＿ｍｅｍｏｒｙ＿Ｉｎｔｅｒｆａｃｅ，ＳＭＥＭ＿ＩＦ）を有する。コプロセッサ１１は、ローカルメモリ１２０、１２１、及び、共有メモリ（不図示）にストリームアクセス（すなわち、スプリットトランザクションをサポートするバーストアクセス）が可能である。
【００４６】
メモリセレクタ（「マルチプレクサ型バスコントローラ」とも表す）１２は、制御プロセッサ１０からのデータアクセスと、コプロセッサ１１からのローカルメモリアクセスと共有メモリアクセスとを調停及び選択制御（以降、「調停／選択制御」と表す）するマルチレイヤ型のバスコントローラである。ローカルメモリ１２０、１２１は、メモリセレクタ１２からのローカルメモリインタフェースと接続する。命令メモリ１１０は、制御プロセッサ１０の命令メモリインタフェースと接続する。
【００４７】
コプロセッサ１１は、メモリアクセスレイテンシを隠蔽するために、ローカルメモリインタフェース、共有メモリインタフェースを介して、バンク分けされたローカルメモリ１２０、１２１、外部の共有メモリにストリームアクセスするローカルメモリコントローラ（Ｌｏｃａｌ＿Ｍｅｍｏｒｙ＿Ｃｏｎｔｒｏｌｌｅｒ、ＬＭＣ）２０、及び、共有メモリコントローラ（Ｓｈａｒｅｄ＿Ｍｅｍｏｒｙ＿Ｃｏｎｔｒｏｌｌｅｒ、ＳＭＣ）２１を有する。
【００４８】
ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、書き込みアドレスジェネレータ（Ｗｒｉｔｅ＿Ａｄｄｒｅｓｓ＿Ｇｅｎｅｒａｔｏｒ、Ｗｒｉｔｅ＿ＡＤＲ＿ＧＥＮ）３０、書き込みデータＦＩＦＯ（Ｗｒｉｔｅ＿Ｄａｔａ＿Ｆｉｒｓｔ＿Ｉｎ＿Ｆｉｒｓｔ＿Ｏｕｔ、ＷＤＡＴ＿ＦＩＦＯ）３１、書き込みデータパッキング回路（Ｗｒｉｔｅ＿Ｄａｔａ＿Ｐａｃｋｅｒ、ＷＤＡＴ＿ＰＡＣＫＥＲ）３２、読み出しアドレスジェネレータ（Ｒｅａｄ＿Ａｄｄｒｅｓｓ＿Ｇｅｎｅｒａｔｏｒ、Ｒｅａｄ＿ＡＤＲ＿ＧＥＮ）４０、読み出しデータＦＩＦＯ（Ｒｅａｄ＿Ｄａｔａ＿Ｆｉｒｓｔ＿Ｉｎ＿Ｆｉｒｓｔ＿Ｏｕｔ、ＲＤＡＴ＿ＦＩＦＯ）４１、及び、読み出しデータパッキング回路（Ｒｅａｄ＿Ｄａｔａ＿Ｐａｃｋｅｒ、ＲＤＡＴ＿ＰＡＣＫＥＲ）４２等を有する。それにより、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、プロセッサやコプロセッサにおける演算処理とは並列にローカルメモリ１２０、１２１や外部の共有メモリにアクセスする。
【００４９】
また、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、データを読み出す際にアドレスを投機的に発行するスプリットトランザクション機能も有する。更に、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、書き込みデータを読み出しデータＦＩＦＯ４１に直接バイパス転送するパスと、読み出しデータ選択回路（Ｒｅａｄ＿Ｄａｔａ＿Ｓｅｌｅｃｔｏｒ）５０と、バイパスモード設定レジスタ（Ｍｏｄｅ）５１とを有する。これにより、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、読み出しデータとしてメモリからの読み出しデータ、あるいは、バイパス転送される書き込みデータを選択する。
【００５０】
ここで、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、図１の例では２個実装しているが、本実施形態としては、１個であっても３個以上であっても何ら問題はない。
【００５１】
コプロセッサ１１は、無線信号を処理する複数個のＡＬＵ２２ａ、２２ｂを有する。演算器は、複数の無線通信方式における符号化／復号化処理を行うビット／バイト演算を処理する演算器、または、変調、復調及び同期処理（以降、「変調／復調／同期」と表す）を行う複素演算を処理する演算器等を有する。これらの演算器は、コプロセッサ１１内に有するパラメータレジスタ等にてパラメータ設定しておくことにより、様々な無線方式における符号化／復号化処理や複素演算処理に対応できるプログラマブルな構成を有する。コプロセッサ命令としてＶＬＩＷ命令等を定義することにより、複数のＡＬＵ２２ａ、２２ｂは、上述した演算を並列に処理することができる。
【００５２】
また、コプロセッサ１１は、コプロセッサ命令にて使用可能なレジスタファイル（Ｒｅｇｉｓｔｅｒ＿Ｆｉｌｅ、ＲＥＧ）２３を有する。レジスタファイル２３は、制御プロセッサ１０内におけるレジスタとは異なる。レジスタファイル２３における汎用レジスタは、例えば、３２ビットレジスタを１６個から３２個程度有する。
【００５３】
ただし、このうち、例えば、それらの汎用レジスタのうち２つの汎用レジスタ（Ｃｏ−Ｐｒｏｃｅｓｓｏｒ＿ｒｅｇｉｓｔｅｒ，ＣＲ２、ＣＲ３）は、例えば、以下のように特殊レジスタとして動作する。１つの汎用レジスタ（例えば、ＣＲ２）は、ローカルメモリコントローラ２０との間において、授受するデータを記憶する。１つの汎用レジスタ（例えばＣＲ３）は、共有メモリコントローラ２１とのデータ授受に用いられる。本構成により、ローカルメモリ１２０、１２１及び外部共有メモリへのアクセスに汎用レジスタを使用することができる。すなわち、ローカルメモリ１２０、１２１や外部共有メモリへのストリームデータアクセスが、コプロセッサ１１における汎用レジスタと同様の命令マッピングや処理サイクル数で処理可能である。
【００５４】
コプロセッサ１１は、コプロセッサコントローラ（Ｃｏ−ｐｒｏｃｅｓｓｏｒ＿Ｃｏｎｔｒｏｌｌｅｒ、ＣＴＲＬ）２４を更に有する。コプロセッサコントローラ２４は、コプロセッサ命令のデコード処理を実施するとともに、ＡＬＵ２２ａ、２２ｂ、レジスタファイル２３、及び、ローカルメモリコントローラ２０及び共有メモリコントローラ２１を制御する。
【００５５】
（動作の説明）
本発明の第１の実施形態に係るストリームプロセッサ１００の動作について図１乃至図３を用いて説明する。
【００５６】
プロセッサ制御インタフェースまたは割り込みインタフェースが制御プロセッサ１０を起動する処理に応じて、ストリームプロセッサ１００は、命令メモリ１１０から命令コードをフェッチし、その後、データメモリ（ローカルメモリ）１２０、１２１にアクセスしながら、該命令コードに応じてプロセッサ処理を実行する。ストリームプロセッサ１００は、処理に応じて、データメモリインタフェース経由で、外部の共有メモリやペリフェラルブロックにもアクセスをする。
【００５７】
ここで、コプロセッサ１１の動作には、命令コードとして制御プロセッサのコプロセッサ命令を使用する。ストリームプロセッサ１００がコプロセッサ命令をフェッチする場合、制御プロセッサ１０は、コプロセッサインタフェースを介して、コプロセッサ処理を実行する。
【００５８】
コプロセッサ１１において、コプロセッサコントローラ２４は、コプロセッサ命令をデコードする。次に、コプロセッサ１１は、ＡＬＵ２２ａ、２２ｂ、レジスタファイル２３、ローカルメモリコントローラ２０、及び、共有メモリコントローラ２１を制御することにより、コプロセッサコントローラ２４がデコードしたコプロセッサ命令を実行する。ストリームプロセッサ１００がコプロセッサ命令としてＶＬＩＷ命令をフェッチする場合において、コプロセッサ１１は、ＡＬＵ２２ａ、２２ｂを用いてコプロセッサ命令を実行する。
【００５９】
［ＶＬＩＷ命令の構成とその動作の説明］
図２Ａ乃至図２Ｃは、複数のデータ系列に対して同一の処理を並列に行う場合の処理フローとＶＬＩＷ命令の例を示す図である。図２Ａに示すように、処理フローとしてはデータ長が同じ２つのデータ系列（ｄａｔａ＿Ａとｄａｔａ＿Ｂ）に対して、同一の処理１（ｐｒｏｃ１）を行う場合を例とする。この場合、図２Ｂに示すように、プログラム例としては、各々のデータ系列に対するメモリコントローラを設定／起動後に、処理１（ｐｒｏｃ１）を並列に行うＶＬＩＷ命令をデータ長分、繰り返し実行する。
【００６０】
ここで、メモリコントローラと各々のデータ系列との対応として、ｍｃ１は、ｄａｔａ＿ＡのＲｅａｄ／Ｗｒｉｔｅを処理することを表す。同様に、ｍｃ２は、ｄａｔａ＿ＢのＲｅａｄ／Ｗｒｉｔｅを処理することを表す（ｍｃ１、ｍｃ２は、それぞれローカルメモリコントローラ２０と共有メモリコントローラ２１のいずれかのメモリコントローラにおける処理を表す）。
【００６１】
上述したようなプログラムを実行することにより、図２Ｃに示すように、ＡＬＵ２２ａ、２２ｂは、２つのデータ系列（ｄａｔａ＿Ａとｄａｔａ＿Ｂ）に対する所望の同一の処理１（ｐｒｏｃ１）を並列に実行することが可能である。この例では、同一の処理１（ｐｒｏｃ１）を複数のデータ系列（ｄａｔａ＿Ａとｄａｔａ＿Ｂ）に対して実行するような（すなわち、ＳＩＭＤ的な）演算の例を示したが、ＶＬＩＷ命令における一方のＡＬＵ分だけ命令を変更することにより、各々のデータ系列に対して異なる処理を実行するような（すなわち、ＭＩＭＤ的な）演算を実行することも可能である。
【００６２】
図３Ａ乃至Ｃは、データ系列に対して連続する複数の処理を直列に行う場合の処理フローとＶＬＩＷ命令の例を示す図である。これは、図２に示すような複数データ系列に対する並列演算が難しい場合（すなわち、複数のデータ系列のデータ長がお互いに異なる場合、または、複数のデータ系列の両方が格納されるまでの時間がない場合等）に有用な並列化手法である。図３Ａに示すように、処理フローとしては、任意のデータ系列（ｄａｔａ＿Ｃ）に対して、連続する複数の処理（ｐｒｏｃ２、ｐｒｏｃ３）を直列に行う場合を例とする。
【００６３】
この場合、図３Ｂに示すように、例えば、プログラム（制御プロセッサ１０）は、まず処理２（ｐｒｏｃ２）に入力するデータを先読みするメモリコントローラ（ｍｃ２）と、処理２（ｐｒｏｃ２）が出力するデータをメモリに書き込むメモリコントローラ（ｍｃ１）とを設定、及び、起動する機能を有する。ここで、図３Ａに示す処理フローのように、処理３（ｐｒｏｃ３）は、処理２（ｐｒｏｃ２）が出力するデータを処理する（すなわち、これらの処理には、データ依存関係がある）。そのため、プログラム（制御プロセッサ１０）は、メモリコントローラ（ｍｃ１）に対してバイパス転送設定を行う。すなわち、プログラム（制御プロセッサ１０）は、バイパスモード設定レジスタ５１を制御することによりバイパス転送モードに設定する機能を有する。それにより、読み出しデータ選択回路５０は、バイパスされる書き込みデータを選択し、選択したデータを読み出しデータＦＩＦＯ４１に入力する動作となる。これにより、バイパス転送機能を実現できる。
【００６４】
そして、該プログラムは、最初のループとして、ＡＬＵ２２ａは、処理３（ｐｒｏｃ３）を開始可能にするため、例えば１回分（ａ＝１）だけ、処理２（ｐｒｏｃ２）の演算を処理する機能を有する。該プログラムに基づき、メモリコントローラ（ｍｃ１）は、バイパス転送機能により、読み出しデータＦＩＦＯ４１にも当該データを格納する。
【００６５】
該プログラム（制御プロセッサ１０）は、処理３（ｐｒｏｃ３）の処理結果データを書き込むメモリコントローラ（ｍｃ２）設定を行う機能と、その後、メインの演算ループとして、ＶＬＩＷ命令を用いて、ＡＬＵ２２ａとＡＬＵ２２ｂとに、処理２（ｐｒｏｃ２）と処理３（ｐｒｏｃ３）とを並列に演算するよう制御する機能を有する。更に、該プログラムは、ＡＬＵ２２ｂに、残り（例えば１回分）の処理３（ｐｒｏｃ３）の演算を実行するよう制御する機能を有する。
【００６６】
上述したようなプログラムを実行することにより、図３Ｃに示すように、ＡＬＵ２２ａ、２２ｂは、任意のデータ系列（ｄａｔａ＿Ｃ）に対して、連続する複数の処理（ｐｒｏｃ２とｐｒｏｃ３）を並列に実行することができる。ここで、図３Ｃにおける「ａ」は、処理２（ｐｒｏｃ２）と処理３（ｐｒｏｃ３）との間のレイテンシを示す。図３Ｃにおける「ｂ」は、処理データ（ｄａｔａ＿Ｃ）のデータ長を示す。図３Ｃにおける「ｃ」は、全体の処理時間（ｃ＝ａ＋ｂ）を示すものである。すなわち、レイテンシ（ａの値）を短くすることにより、ＡＬＵ２２ａ、２２ｂの稼働率は向上する。その結果、全体の処理時間は短縮する。
【００６７】
ここで、バイパスモード設定レジスタ５１、及び、読み出しデータ選択回路５０等が実現するバイパス転送機能は、処理２（ｐｒｏｃ２）の書き込みデータを、直接、読み出しデータＦＩＦＯ４１にもバイパス（「転送」、「バイパス転送」とも表現する）する。そのため、処理２（ｐｒｏｃ２）の書き込みデータのメモリアクセスレイテンシや処理３（ｐｒｏｃ３）の読み出しデータアクセスレイテンシを隠蔽できる。その場合、一定のサイクル、例えば、１回分（ａ＝１）のサイクルオーバヘッドにおいて、処理２（ｐｒｏｃ２）と処理３（ｐｒｏｃ３）とを並列に演算することができる。
【００６８】
バイパス転送機能がない場合に、プログラミングにおいては、処理２（ｐｒｏｃ２）から処理３（ｐｒｏｃ３）において、書き込みデータレイテンシや読み出しデータレイテンシ、データを先読みする読み出しデータＦＩＦＯ４１段数等を考慮してレイテンシ（ａの値）を導出する必要がある。その結果、プログラミングの容易性が低下するとともに、ａの値分だけ演算器稼働率が低下する。すなわち、バイパス転送機能がない場合に、プログラミングにおいては、メモリへの書き込みと読み出し等のレイテンシを考慮して、並列演算しない最初のループ数（ａの値）を大きく設定する必要がある。一方、本実施形態の場合には、バイパス転送を使用可能なため、オーバヘッドとなる最初と最後のループ数を、例えば１回（ａ＝１）に固定することができ、並列演算できるメインのループ数（ｂ―ａ）を大きくすることが可能となる。
【００６９】
図４を参照しながら、第１の例について説明する。図４は、無線通信システムにおいて符号化、及び、復号化処理を行う符号化／復号化処理プロセッサ（ビットバイト演算処理プロセッサ）に適用する場合の構成例を示す図である。
【００７０】
（構成の説明）
符号化／復号化処理プロセッサ（Ｂｉｔ／Ｂｙｔｅ＿Ｓｔｒｅａｍ＿Ｐｒｏｃｅｓｓｏｒ、「ＢＳＰ」）１０１は、コプロセッサインタフェースを有する一般的な制御プロセッサ（Ｐｒｏｃｅｓｓｏｒ＿Ｃｏｒｅ）１０（例えば、ハーバードアーキテクチャ型の３２ビットＲＩＳＣプロセッサ）に対して、そのコプロセッサインタフェースを用いて符号化、及び、復号化処理を行うコプロセッサ（Ｃｏ−Ｐｒｏｃｅｓｓｏｒ）１１ｃを接続する構成を有する。
【００７１】
コプロセッサ１１ｃは、ローカルメモリインタフェースと共有メモリインタフェースとを有する。コプロセッサ１１ｃは、ローカルメモリ１２０、１２１または共有メモリ（図４において不図示）のそれぞれにストリームアクセス（スプリットトランザクションをサポートするバーストアクセス）が可能である。
【００７２】
ここで、メモリセレクタ１２は、制御プロセッサ１０からのデータアクセスと、コプロセッサ１１ｃからのローカルメモリアクセスと、共有メモリアクセスとを調停、及び、選択するバスコントローラである。該バスコントローラは、マルチレイヤ型の態様を有する。ローカルメモリ１２０、１２１は、このメモリセレクタ１２からのローカルメモリインタフェースに接続する。そして、命令メモリ１１０は、制御プロセッサ１０の命令メモリインタフェースに接続する。
【００７３】
コプロセッサ１１ｃは、メモリアクセスレイテンシを隠蔽するために、ローカルメモリインタフェースまたは共有メモリインタフェースを介して、バンク分けされたローカルメモリ１２０、１２１、及び、外部の共有メモリにストリームアクセスするローカルメモリコントローラ２０、共有メモリコントローラ２１を有する。ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、書き込みアドレスジェネレータ３０、書き込みデータＦＩＦＯ３１、書き込みデータパッキング回路３２、読み出しアドレスジェネレータ４０、読み出しデータＦＩＦＯ４１、及び、読み出しデータパッキング回路４２等を有する。上述した構成により、プロセッサやコプロセッサにおける演算処理と、ローカルメモリ１２０、１２１、または、外部の共有メモリにアクセスを並列に行うことができる。
【００７４】
また、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、データを読み出す処理において、アドレスを投機的に発行するスプリットトランザクション機能も有する。更に、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、書き込みデータを読み出しデータＦＩＦＯ４１に直接バイパス転送するパス、読み出しデータ選択回路５０、及び、バイパスモード設定レジスタ５１を有する。すなわち、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、読み出しデータとしてメモリからの読み出しデータと、バイパス転送される書き込みデータとを選択可能な構成を有する。
【００７５】
また、コプロセッサ１１ｃは、符号化、及び、復号化処理（ビット／バイト演算処理）を処理可能なＡＬＵ２２ｃ、ＡＬＵ２２ｄを有するとともに、演算器として、スクランブリング回路６０（ｓｃｒａｍｂｌｉｎｇ、ＳＣＲＡＭ）、畳み込み符号化器６１（ｃｏｎｖｏｌｕｔｉｏｎ、ＣＯＮＶ）、ＣＲＣ符号化器６２（ＣＲＣ）、及び、ビット連接／並べ替え回路６３（ｐｅｒｍｕｔａｔｉｏｎ、ＰＥＲＭ）等を有する。スクランブリング回路６０（ＳＣＲＡＭ）等の各演算器は、複数の無線通信方式における符号化、及び、復号化処理にて一般的に用いられる各ビット／バイト演算処理を行う。
【００７６】
そして、上述したような演算器は、コプロセッサ１１ｃが有するパラメータレジスタ６５等にてパラメータを設定することにより、様々な無線方式における符号化、及び、復号化処理に対応できるプログラマブルな構成とする。そして、コプロセッサ命令としてＶＬＩＷ命令等を定義することにより、ＡＬＵ２２ｃ、ＡＬＵ２２ｄは、並列に動作する。
【００７７】
また、コプロセッサ１１ｃは、コプロセッサ命令にて使用可能なレジスタファイル２３ｃを有する。レジスタファイル２３ｃは、制御プロセッサ１０におけるレジスタとは異なる。レジスタファイル２３ｃは、汎用レジスタとして、例えば、３２ビットレジスタを１６個（ＣＲ０乃至ＣＲ１５）有する。
【００７８】
ただし、例えば、１６個のレジスタのうち、２つの汎用レジスタ（ＣＲ２、ＣＲ３）は、特殊なレジスタとして動作する。例えば、特殊なレジスタの１つ（例えばＣＲ２）は、ローカルメモリコントローラ２０との間においてデータを授受する。特殊なレジスタの１つは（例えばＣＲ３）は、共有メモリコントローラ２１との間においてデータを授受する。上述したような構成により、汎用レジスタは、ローカルメモリ１２０、１２１及び外部共有メモリにおいて授受されるデータも記憶する。その結果、ローカルメモリ１２０、１２１や外部共有メモリへのストリームデータアクセスは、コプロセッサ１１ｃにおける汎用レジスタと同様の命令マッピングや処理サイクル数によって処理することが可能である。
【００７９】
（動作の説明）
図４に示すように、符号化／復号化処理プロセッサ１０１は、制御プロセッサ１０が起動される処理に応じて、命令メモリ１１０から命令コードをフェッチし、その後、データメモリ（ローカルメモリ）１２０、１２１にアクセスしながら、プロセッサ処理を実行する。必要に応じて、符号化／復号化処理プロセッサ１０１は、データメモリインタフェース経由することにより、外部の共有メモリやペリフェラルブロックにもアクセスをする。ここで、符号化／復号化処理コプロセッサ１１ｃにて処理を実行するためには、命令コードとして制御プロセッサ１０のコプロセッサ命令を使用する。符号化／復号化処理プロセッサ１０１がコプロセッサ命令をフェッチする場合、制御プロセッサ１０は、コプロセッサインタフェースを介して、コプロセッサ処理を実行する。
【００８０】
一方、コプロセッサ１１ｃにおいて、コプロセッサコントローラ２４ｃは、コプロセッサ命令をデコードする。次に、コプロセッサコントローラ２４ｃは、ＡＬＵ２２ｃ、ＡＬＵ２２ｄ、レジスタファイル２３ｃ、ローカルメモリコントローラ２０や共有メモリコントローラ２１等を制御することにより、デコードしたコプロセッサ命令を実行する。特に、コプロセッサ命令がＶＬＩＷ命令である場合には、ＡＬＵ２２ｃ、ＡＬＵ２２ｄは、コプロセッサ命令を実行する。
【００８１】
符号化／復号化処理プロセッサ１０１は、ＡＬＵ２２ｃ、ＡＬＵ２２ｄにおける演算器として、スクランブリング回路（ＳＣＲＡＭ）６０、畳み込み符号化器（ＣＯＮＶ）６１、ＣＲＣ符号化器（ＣＲＣ）６２、及び、ビット連接／並べ替え回路６３等を有する。そして、上述した演算器は、コプロセッサ１１ｃにおけるパラメータレジスタ６５等にてパラメータ設定しておくことにより、様々な無線方式における符号化、及び、復号化処理に対応する。
【００８２】
（コプロセッサ命令の命令コードの構成とその動作の説明）
図５は、コプロセッサ命令の命令コードの例を示す図である。図５は、コプロセッサ命令の一部の例として、コプロセッサにおける演算命令のみを表す。コプロセッサは、これらの演算命令の他に、制御プロセッサとコプロセッサとの間における演算命令、及び、パラメータレジスタ６５を設定する命令等も処理することが可能である。さらに、コプロセッサ命令は、図５に示す命令を並列に記述することにより、並列に演算処理を行うＶＬＩＷ命令も備える。
【００８３】
図５において、例えば、ＯＰ＝０に関連付けされるＳＣＲＡＭは、スクランブリング処理命令である。該スクランブリング処理命令は、入力レジスタ（ｃｒｓ）のデータに対してスクランブリング処理（ＳＣＲＡＭ）を行い、その処理結果を出力レジスタ（ｃｒｄ）に出力する。ここで、図５において、ｃｒｓとｃｒｄとは、コプロセッサ１１ｃのレジスタファイル２３ｃにおける汎用レジスタ番号を表す。即値（ｉｍｍｅｄｉａｔｅ、例えば、ｉｍｍ５）は、最下位ビット（Ｌｅａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｂｉｔ、以降、「ＬＳＢ」と表す）側から即値（ｉｍｍ５）（１乃至８）で記述されるビット数分だけ並列に（一度に）スクランブリング処理を行うことを示す。１命令実行することにより、最大８ビット（１バイト）分のデータを並列処理する。
【００８４】
また、複数の無線方式におけるスクランブリング処理に対応するために必要な動作モード設定、及び、ＴＡＰ（タップ値）初期値設定、生成多項式に関する仕様設定は、パラメータレジスタ６５に事前に設定しておくことで実現する。同様に、図５において、ＯＰ＝１と関連付けされるＣＯＮＶは、畳み込み符号化処理命令を表し、ＯＰ＝２と関連付けされるＣＲＣは、ＣＲＣ符号化処理命令を表す。
【００８５】
ただし、畳み込み符号化処理（ＣＯＮＶ）する場合、出力データが有するビット数は、パラメータレジスタ６５で設定するコーディングレートに応じて変化する。そのため、出力データが有するビット数は、即値（ｉｍｍ５）にて設定した入力データビット数（１乃至８）に対して、その２倍または３倍（最大２４ビット）である。
【００８６】
ＣＲＣ符号化処理命令（ＣＲＣ）は、スクランブリング処理（ＳＣＲＡＭ）と同様、最大８ビット分を１命令で処理可能である。そのため、出力データが有するビット数は、即値（ｉｍｍ５）にて設定した入力データビット数と一致する。畳み込み符号化処理命令（ＣＯＮＶ）やＣＲＣ符号化処理命令（ＣＲＣ）についても、スクランブリング処理命令（ＳＣＲＡＭ）と同様に、パラメータレジスタ６５を用いて動作モード設定やＴＡＰ初期値設定、生成多項式の仕様設定を行うことにより、複数の無線方式に対応可能である。また、これらのＳＣＲＡＭ、ＣＯＮＶ、及び、ＣＲＣは、ＡＬＵ２２ｃ、ＡＬＵ２２ｄにおいて、並列演算回路（例えば、スクランブリング回路６０、畳み込み符号化器６１、ＣＲＣ符号化器６２）を実装することにより、通常のプロセッサ処理では１ビット処理するのに複数サイクル要する処理に関して、複数ビット分を１サイクルで処理する。
【００８７】
ＯＰ＝４と関連付けされるＳＨＬは、左シフト演算命令（Ｓｈｉｆｔ＿Ｌｅｆｔ、ｃｒｄ＝ｃｒｓ＜＜ｉｍｍ５、すなわち、ｉｍｍ５ビット、ｃｒｓを左にシフトする演算を表す）を表し、ＯＰ＝５と関連付けされるＳＨＲは右シフト演算命令（Ｓｈｉｆｔ＿Ｒｉｇｈｔ、ｃｒｄ＝ｃｒｓ＞＞ｉｍｍ５、「＞＞」は、右にシフトする演算を表す）を表す。コプロセッサ１１は、ビット演算処理にて使用頻度が高い命令を処理することが可能である。また、ＯＰ＝６と関連付けされるＰＥＲＭは、ビット連接／並び替え演算命令を表す。
【００８８】
「ＰＥＲＭ」は、入力レジスタ（ｃｒｓ）のうち、最大でＬＳＢ側から１６ビット分に対して連接、及び、並び替え処理を行い、その処理結果を出力レジスタ（ｃｒｄ）に出力する命令である。ここで、最大１６ビット分の出力データに出力する順番を６４ビット分（３２ビットレジスタ×２個のペア）のパラメータレジスタに設定し、その後、使用するパラメータをパラメータレジスタ番号（ｃｐ）により指定する。それにより、高速かつ柔軟なビット連接、及び、並べ替え処理を実現する。
【００８９】
パラメータレジスタにおいて、１６ビット分の入力データから１ビット分の出力を選択するため、１ビット分の出力のためには４ビットの設定が必要である。そのため、１６ビット分の出力を選択するためには、６４ビット分（＝４ビット×１６）の設定が必要である。ＡＬＵ２２ｃは、ビット連接／並べ替え回路６３を有することにより、１命令にて上記のビット連接／並び替え演算命令（ＰＥＲＭ）を並列に処理可能である。
【００９０】
また、ＯＰ＝６と関連付けされるＭＳＫＣ２Ｃ、及び、ＯＰ＝７と関連付けされるＭＳＫＰ２Ｃは、レジスタ間転送命令（ＭＡＳＫ＆ＭＯＶＥ）を表す。該レジスタ間転送命令は、ＬＳＢ側から即値（ｉｍｍ５）（１乃至３１）で指定されるビット数分だけをコピーする命令である。ＯＰ＝６と関連付けされるＭＳＫＣ２Ｃは、レジスタファイル２３ｃ間における転送命令（ｃｒｄ＝ＭＳＫ（ｃｒｓ、ｉｍｍ５））を表す。ＯＰ＝７と関連付けされるＭＳＫＰ２Ｃは、パラメータレジスタ６５からレジスタファイル２３ｃへデータを転送するレジスタ間転送命令（ｃｒｄ＝ＭＳＫ（ｃｐ、ｉｍｍ５））を表す。
【００９１】
図５においては、コプロセッサ命令の一部の例として、コプロセッサにて処理する演算命令のみを示したが、コプロセッサ命令は、これらの他に、制御プロセッサとコプロセッサとの間における演算命令、あるいは、パラメータレジスタを設定する命令等を含むこともある。さらに、コプロセッサ命令は、例えば、図５に示すように、命令を並列に記述することにより、並列に演算処理を行うＶＬＩＷ命令も含む。
【００９２】
制御プロセッサとコプロセッサとの間における演算命令の例としては、図５の例において、即値（ｉｍｍ５）により記述する各命令の即値（ｉｍｍ５）部分を、制御プロセッサ１０における汎用レジスタ番号（ｒｓ）により指定することにより、即値ではなく変数により指定することが可能となる。また、制御プロセッサとコプロセッサとの間におけるレジスタ間転送命令等は、レジスタ転送命令の入力レジスタ、あるいは、出力レジスタに、制御プロセッサ１０における汎用レジスタ（ｒｓ、ｒｄ）を指定することで実現可能である。
【００９３】
パラメータレジスタ６５を設定する命令は、ＡＬＵ２２ｃ、ＡＬＵ２２ｄ、及び、ローカルメモリコントローラ２０及び共有メモリコントローラ２１における種々のパラメータレジスタに、即値、または、制御プロセッサにおける汎用レジスタ値を設定する命令である。ＶＬＩＷ命令は、図５に示すように命令を並列に記述することにより、ＡＬＵ２２ｃ、ＡＬＵ２２ｄの両方を用いて、並列に演算処理を行う命令である。
【００９４】
（コプロセッサにおける汎用レジスタ構成とその動作の説明）
図６は、レジスタファイル２３ｃのマッピング構成例を示す図であるとともに、各レジスタに関するビットフォーマットも表す。
【００９５】
コプロセッサ１１ｃは、レジスタファイル２３ｃにおける汎用レジスタとして、３２ビットレジスタを１６個（ＣＲ０乃至ＣＲ１５）有する。コプロセッサ１１ｃは、この汎用レジスタにおいて、コプロセッサ内演算命令、及び、制御プロセッサとコプロセッサとの間の演算命令等を実行する。汎用レジスタ（ＣＲ０乃至ＣＲ１５）のうち、いくつかのレジスタは、特殊な専用レジスタとして動作する。例えば、１つのレジスタ（ＣＲ０）は、ゼロレジスタ（書き込みアクセスは無効。読み出しアクセスの値は常に０）として動作する。また、１６個の汎用レジスタのうち２つの汎用レジスタ（例えば、ＣＲ２、ＣＲ３）は、メモリアクセスに用いる特殊レジスタとして動作する。
【００９６】
例えば、１つの汎用レジスタ（例えば、ＣＲ２）は、ローカルメモリにアクセスする際に用いる。１つの汎用レジスタ（例えば、ＣＲ３）は、外部共有メモリにアクセスする際に用いる。つまり、この例において、ＡＬＵ２２ｃまたはＡＬＵ２２ｄは、ＣＲ２レジスタに書き込みアクセスする場合において、書き込みデータパッキング回路３２及び書き込みデータＦＩＦＯ３１を経由して、ローカルメモリ１２０、１２１、または、外部共有メモリにデータを書く。
【００９７】
この場合、書き込みアドレスは、ローカルメモリコントローラ２０における書き込みアドレスジェネレータ３０が指定するアドレスである。ＡＬＵ２２ｃ、ＡＬＵ２２ｄ、及び、コプロセッサコントローラ２４ｃは、ＣＲ２レジスタに値を記憶するよう制御する。それに応じて、ＡＬＵ２２ｃ、ＡＬＵ２２ｄは、コプロセッサ命令を実行する。ＡＬＵ２２ｃ、ＡＬＵ２２ｄは、１［データ／サイクル］の書き込みスループットにより、ローカルメモリ１２０及び１２１に処理結果データを書く。
【００９８】
一方、あらかじめ、ローカルメモリコントローラ２０における読み出しアドレスジェネレータ４０等を起動することにより、ローカルメモリ１２０、１２１、あるいは、外部共有メモリが有するストリームデータを読む。ＡＬＵ２２ｃ、ＡＬＵ２２ｄは、ＣＲ２レジスタに読み出しアクセスすることにより、ローカルメモリコントローラ２０における読み出しデータＦＩＦＯ４１、及び、読み出しデータパッキング回路４２を経由して、ローカルメモリ１２０、１２１、あるいは、外部共有メモリが有するデータを読む。
【００９９】
上述した処理において、ローカルメモリ１２０、１２１上のデータは、あらかじめローカルメモリコントローラ２０に読み出し転送されている。そのため、ＡＬＵ２２ｃ、ＡＬＵ２２ｄ、あるいは、コプロセッサコントローラ２４ｃは、該データをＷａｉｔする（待つ）ことなくＣＲ２レジスタへの読み出しアクセス可能である。その結果、１［データ／サイクル］の読み出しスループットにおいて、ローカルメモリ１２０、１２１、及び、外部共有メモリから処理データを読むことができる。
【０１００】
同様に、ＣＲ３レジスタに対して書き込みアクセス、または、読み出しアクセスを実施することにより、メモリアクセスレイテンシを隠蔽しながら、共有メモリコントローラ２１経由にて、ローカルメモリ１２０、１２１、及び、外部の共有メモリにアクセスすることが可能である。
【０１０１】
図６の例においては、パラメータレジスタを設定することにより、他の２つのレジスタ（ＣＲ４、ＣＲ５）は、ピープ（ＰＥＥＰ）処理を行うレジスタとして動作することも可能である。前述したように、ＣＲ２レジスタ、あるいは、ＣＲ３レジスタは、ローカルメモリ１２０、及び、共有メモリにアクセスするレジスタである。レジスタ（ＣＲ２、ＣＲ３）に読み出しアクセスを行うと、読み出しデータＦＩＦＯ４１、及び、読み出しデータパッキング回路４２の状態は変化する。
【０１０２】
一方で、ＣＲ４レジスタやＣＲ５レジスタがピープ（ＰＥＥＰ）処理を行うレジスタであり、当該レジスタに読み出しアクセスする場合に、ＣＲ４レジスタ（ＬＭＰ）は、ＣＲ２レジスタ（ＬＭ）と同じデータを読むことができる。それとともに、ＣＲ５レジスタ（ＳＭＰ）は、ＣＲ３レジスタ（ＳＭ）と同じデータを読むことができる。さらに、読み出しデータＦＩＦＯ４１や読み出しデータパッキング回路４２における状態は変化しない。すなわち、ＣＲ４レジスタから読み出したデータは、その後、ＣＲ２レジスタから再度読み出すことが可能である。そのため、ピープレジスタ機能は、同一のデータを複数回使用する場合に有用である。
【０１０３】
上述した第１の例において、ＣＲ４レジスタとＣＲ５レジスタは、前記ピープ機能レジスタとして使用したが、パラメータ設定により、通常の汎用レジスタとして使用することもできる。
【０１０４】
なお、図６の例において、各レジスタにおけるビットフォーマットは３２ビットである。レジスタとして、１ビット×３２データ分、あるいは、１バイト（８ビット）×４データ分、３２ビット×１データ分等と設定することができる。上述した第１の例においては、例えば、ＬＳＢ−Ｆｉｒｓｔ、かつ、リトルエンディアン（Ｌｉｔｔｌｅ＿ｅｎｄｉａｎ）に従うビットフォーマットを使用する場合において、ビット／バイト演算は、ＬＳＢ側から順番にデータを処理する。
【０１０５】
また、図６の例では、３２ビット×１６個というレジスタファイルの構成例を示すが、本発明に係る各実施形態におけるレジスタ構成としてはこの構成に限定されない。すなわち、１６ビットのレジスタであってもよいし、８個や３２個のレジスタファイル構成であってもよい。レジスタファイルが有する構成は、上述した第１の例には限定されない。
【０１０６】
（ローカルメモリコントローラ２０及び共有メモリコントローラ２１の構成とその動作の説明）
図７は、ローカルメモリコントローラ２０及び共有メモリコントローラ２１の構成例を示すブロック図である。図１及び図４に示すように、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、制御プロセッサ１０、あるいは、コプロセッサ１１ｃが行う演算処理と独立にローカルメモリ１２０、１２１や外部の共有メモリにアクセスする。ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、書き込みアドレスジェネレータ３０、書き込みデータＦＩＦＯ３１、書き込みデータパッキング回路３２、読み出しアドレスジェネレータ４０、読み出しデータＦＩＦＯ４１、及び、読み出しデータパッキング回路４２等を有する。
【０１０７】
さらに、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、バイパス転送制御回路５２と、読み出しデータ選択回路５０と、バイパスモード設定レジスタ５１とを有する。バイパス転送制御回路５２は、書き込むデータを、書き込みデータパッキング回路３２から読み出しデータＦＩＦＯ４１に直接バイパスを経由して転送するか否かを制御する。すなわち、バイパス転送制御回路５２により、読み出しデータＦＩＦＯ４１に格納する読み出しデータを、メモリからの読み出しデータとするか、あるいは、バイパス転送される書き込みデータとするかを選択することが可能である。
【０１０８】
まず、コプロセッサ１１ｃがレジスタファイル２３ｃにおけるＣＲ２またはＣＲ３レジスタを介して、メモリに処理結果であるストリームデータを書く場合、ローカルメモリコントローラ２０及び共有メモリコントローラ２１における書き込みアドレスジェネレータ３０、書き込みデータＦＩＦＯ３１、及び、書き込みデータパッキング回路３２が処理を行う。書き込みデータパッキング回路３２は、第１の所定のビット単位に、例えば、書き込みデータを３２ビット単位にパッキングする。書き込みデータパッキング回路３２は、ＡＬＵ２２ｃ、ＡＬＵ２２ｄ側から指定される書き込みデータサイズ（ＷＳＩＺＥ）分のデータ（ＷＤＡＴ）を左シフトし、その後、書き込みデータパッキング回路３２に残っているデータサイズ分のデータ（ｒｅｍａｉｎ＿ｄａｔａ）と結合する。
【０１０９】
ここで、書き込みデータパッキング回路３２は、結合されるデータの有効ビット数が３２ビット未満である場合に、そのままデータレジスタ（ｒｅｍａｉｎ＿ｄａｔａ）に残し、その後、データを出力しない。一方、書き込みデータパッキング回路３２は、結合されるデータが３２ビット以上である場合に、ＬＳＢ側３２ビット分を書き込みデータＦＩＦＯ３１に出力し、その後、上位側３２ビット分（［６３：３２］）をデータレジスタ（ｒｅｍａｉｎ＿ｄａｔａ）に格納する。書き込みデータパッキング回路３２は、データのシフト処理とパッキング処理とを行う。そのため、プロセッサは、シフト演算を処理する必要がなくなる。それにより、ＡＬＵ２２におけるデータ処理単位（出力データサイズ）が３２ビット単位以外であっても、処理サイクル数のオーバヘッドなく、ストリームデータを処理することが可能となる。
【０１１０】
書き込みデータパッキング回路３２は、３２ビット分のデータが揃う場合に、書き込みデータＦＩＦＯ３１にデータを出力する。書き込みデータＦＩＦＯ３１は、書き込みアドレスジェネレータ３０と協調して動作することにより、入力されるデータを、メモリにおいて書き込みアドレスジェネレータ３０が示すアドレスに格納する。書き込みアドレスジェネレータ３０は、ベースアドレスレジスタ（ｗ＿ｂａｓｅ）、初期ポインタレジスタ（ｗ＿ｐｔｒ）、ステップレジスタ（ｗ＿ｓｔｅｐ）、メモリ長レジスタ（ｗ＿ｌｅｎ）、アクセス回数レジスタ（ｗ＿ｃｎｔ）等の制御レジスタを有する。
【０１１１】
書き込みアドレスジェネレータ３０は、例えば、ベースアドレス（ｗ＿ｂａｓｅ）に対してカレントアドレスポインタ分を加算したアドレスが発行する。カレントアドレスポインタは、初期ポインタ（ｗ＿ｐｔｒ）の値を初期値として、書き込みアドレスジェネレータ３０がアドレスを出力するたびに、その値が変化する。すなわち、書き込みアドレスジェネレータ３０がアドレスを出力するたびに、カレントアドレスポインタが指し示すアドレスに３２ビットアドレス単位にてステップ数（ｗ＿ｓｔｅｐ）分だけ加算し、メモリ長サイズ（ｗ＿ｌｅｎ）で剰余（Ｍｏｄｕｌｏ）演算することにより、次のカレントアドレスポインタの値を決める。
【０１１２】
このように、アドレスジェネレータとＦＩＦＯとを用いてデータ出力することにより、制御プロセッサ１０及びコプロセッサ１１ｃが実行する演算命令とは独立して、メモリにアクセスすることが可能になる。その上、メモリがアクセスをＷａｉｔする場合においても、演算命令は、その影響を受けない。上述したような処理により、書き込みデータのメモリアクセスレイテンシを隠蔽することが可能である。
【０１１３】
メモリがアクセスをＷａｉｔする処理に伴い、書き込みデータＦＩＦＯ３１がＦｕｌｌ（すなわち、データサイズがＦＩＦＯのサイズと等しい）になる場合においても、書き込みデータパッキング回路３２やレジスタファイル２３ｃを介してＡＬＵ２２ｃ、ＡＬＵ２２ｄ側のコプロセッサ命令をＷａｉｔするように制御するＷａｉｔ制御機構を、さらに有することにより、コプロセッサ命令を継続的に処理することができる。
【０１１４】
次に、コプロセッサ１１ｃが、レジスタファイル２３ｃにおけるＣＲ２またはＣＲ３レジスタを介して、メモリからストリームデータを読み出す場合、ローカルメモリコントローラ２０及び共有メモリコントローラ２１における読み出しアドレスジェネレータ４０、読み出しデータＦＩＦＯ４１、及び、読み出しデータパッキング回路４２等を使用する。読み出しアドレスジェネレータ４０は、スタートレジスタ（ｒ＿ｓｔａｒｔ）、ベースアドレスレジスタ（ｒ＿ｂａｓｅ）、オフセットアドレス単位レジスタ（ｒ＿ｕｎｉｔ）、初期ポインタレジスタ（ｒ＿ｐｔｒ＿ｘｘ）、ステップレジスタ（ｒ＿ｓｔｅｐ＿ｘｘ）、メモリ長レジスタ（ｒ＿ｌｅｎ＿ｘｘ）、及び、アクセス回数レジスタ（ｒ＿ｃｎｔ）等の制御レジスタを有する。
【０１１５】
読み出しアドレスジェネレータ４０は、これらの制御レジスタに値が設定されることにより起動される処理に応じて、読み出しアドレスをアクセス回数（ｒ＿ｃｎｔ）分だけ連続的に発行する。ローカルメモリコントローラ２０（共有メモリコントローラ２１）は、発行された読み出しアドレスに応じて、メモリからデータを読み出す。読み出しアドレスジェネレータ４０は、読み出しアドレスを発行することにより、読み出す場合のスプリットトランザクションに対応する。読み出しアドレスジェネレータ４０は、ベースアドレス（ｒ＿ｂａｓｅ）に対してオフセットアドレス分加算し、その算出値をアドレスとして発行する。オフセットアドレスの生成部は、符号化、及び、復号化処理におけるビットインタリーブ処理等に対応するため、ビット単位、バイト（８ビット）単位、ワード（３２ビット）単位等任意の単位に応じて、オフセットアドレスを計算する。
【０１１６】
メモリから読み出すデータ（ＲＤＡＴ）は、読み出しデータＦＩＦＯ４１、読み出しデータパッキング回路４２を介して、ＡＬＵ２２ｃ、ＡＬＵ２２ｄ側に転送される。メモリから読み出したデータ（ＲＤＡＴ）は、読み出しデータＦＩＦＯ４１に順に格納される。読み出しデータＦＩＦＯ４１は、読み出しアドレスジェネレータ４０におけるビットシフトに用いるＦＩＦＯのビット位置情報の値を用いて、所望のビットがＬＳＢ側に配置されるようにシフト回路にてビットシフトし、算出されたデータを読み出しデータパッキング回路４２に転送する。
【０１１７】
この時、格納される読み出しデータの個数が、ビットシフトに用いるＦＩＦＯや読み出しデータＦＩＦＯ４１の容量を超えないように、各ＦＩＦＯの容量に応じて、読み出しアドレスジェネレータ４０は、読み出しアクセスを行うアドレスを発行するタイミングを制御する。読み出しデータパッキング回路４２は、ＡＬＵ２２ｃ、ＡＬＵ２２ｄ側からＣＲ２あるいはＣＲ３レジスタを用いてデータが読み出される場合に、指定された読み出しデータサイズ（ＲＳＩＺＥ）の値に応じて、読み出しデータパッキング回路４２にあるデータ（ｒｅｍａｉｎ＿ｄａｔａ）を右シフトする。すなわち、読み出しデータパッキング回路４２は、読み出したデータサイズ（ＲＳＩＺＥ）を有するデータを除去するとともに、残りのデータをＬＳＢ側に格納する。
【０１１８】
このとき、読み出しデータパッキング回路４２は、この読み出しデータパッキング回路にあるデータのサイズと、読み出しデータサイズ（ＲＳＩＺＥ）との差から、そのデータに関する有効ビット数が３２ビット以上であれば、読み出しデータＦＩＦＯ４１側から読み出しデータを取得しない。一方、読み出しデータパッキング回路４２は、そのデータに関する有効ビット数が３２ビット未満である場合に、次の読み出しデータを、読み出しデータＦＩＦＯ４１から取得する。
【０１１９】
次に、読み出しデータパッキング回路４２は、取得した読み出しデータを残りのデータサイズ分だけ左シフトし、さらに、残りのデータのＭＳＢ側に結合し、その後、そのデータをデータレジスタ（ｒｅｍａｉｎ＿ｄａｔａ）に格納する。すなわち、読み出しデータパッキング回路４２は、データパッキング回路にあるデータを、第２の所定のビット単位の大きさにパッキングする。読み出しデータパッキング回路４２が、データのシフト処理とパッキング処理を行うため、プロセッサは、シフト演算処理を行う必要がない。その結果、ＡＬＵ２２ｃ、ＡＬＵ２２ｄにおけるデータ処理単位（入力データサイズ）が３２ビット単位以外であっても、処理サイクル数のオーバヘッドなく、ストリームデータを処理することが可能となる。
【０１２０】
尚、第１の所定のビット単位と第２の所定のビット単位とは、異なる値であっても良い。
【０１２１】
読み出しアクセスがＷａｉｔ等することにより、読み出しデータパッキング回路４２に、所望のデータがまだ存在しない（すなわち、読み出しデータＦＩＦＯ４１が空である）場合には、読み出しデータパッキング回路４２やレジスタファイル２３ｃを介してＡＬＵ２２ｃ、ＡＬＵ２２ｄがコプロセッサ命令をＷａｉｔするように制御するＷａｉｔ制御機構も有することにより、正常にコプロセッサ命令処理を継続することができる。
【０１２２】
ＡＬＵ２２ｃ、ＡＬＵ２２ｄを並列に動作させ、ＡＬＵ２２ｃ、ＡＬＵ２２ｄが行う処理において、データ依存関係がある場合について説明する。例えば、ＡＬＵ２２ｃは、前段の処理を行う。次に、ＡＬＵ２２ｄは、その処理結果データを用いて、後段の処理を行う。この場合、例えば、ローカルメモリコントローラ２０の書き込み側（ＷＭＣ）をＡＬＵ２２ｃから出力する際に用いるとし、ローカルメモリコントローラ２０の読み出し側（ＲＭＣ）をＡＬＵ２２ｄに入力する際に用いる。
【０１２３】
そして、制御プロセッサ１０は、コプロセッサコントローラ２４Ｃ経由で、書き込みアドレスジェネレータ３０にＡＬＵ２２ｃ側からの処理結果データを格納する先のアドレス制御設定を行う。ＡＬＵ２２ｄへのデータ読み出し設定は、バイパス転送設定を用いる。そのため、制御プロセッサ１０は、コプロセッサコントローラ２４Ｃ経由で、バイパスモード設定レジスタ５１に「バイパス転送モード（メモリ転送有り）」を設定する。このとき、読み出しアドレスジェネレータ４０の設定は不要である。
【０１２４】
上述のように設定した後、ローカルメモリコントローラ２０を起動し、ＡＬＵ２２ｃ、ＡＬＵ２２ｄによる並列演算を実行した場合、書き込みデータパッキング回路３２は、ＡＬＵ２２ｃが出力する処理結果データを、３２ｂｉｔ形式により記述されたデータ（以降、「３２ｂｉｔデータ」と略記する）に整形し、整形したデータを、書き込みデータＦＩＦＯ３１を介して、書き込みアドレスジェネレータ３０が設定するアドレスに書き込む。
【０１２５】
上述した処理ともに、バイパス転送制御回路５２は、書き込みデータパッキング回路３２が出力する３２ｂｉｔ形式により記述された書き込みデータ（以降、「３２ｂｉｔ書き込みデータ」と略記する）を、読み出しデータ選択回路５０にバイパス転送する。次に、読み出しデータ選択回路５０は、バイパス転送された３２ｂｉｔ書き込みデータを記憶すべきデータとして選択し、その後、読み出しデータＦＩＦＯ４１に格納する。
【０１２６】
そして、読み出しデータ選択回路５０が３２ｂｉｔ形式により記述された１データ分だけ読み出しデータＦＩＦＯ４１に格納する処理により、ＡＬＵ２２ｄは、読み出しデータパッキング回路４２を介して当該データを取得し、ＡＬＵ２２ｃと並列に演算することが可能となる。
【０１２７】
上述した第１の例において、バイパスモード設定レジスタ５１を「バイパス転送モード（メモリ転送有り）」に設定するとした。処理途中のデータをメモリに格納することが不要である場合、バイパスモード設定レジスタ５１に「バイパス転送モード（メモリ転送無し）」を設定することも可能である。「バイパス転送モード（メモリ転送無し）」である場合、バイパス転送制御回路５２は、書き込みデータをローカルメモリに転送せず、直接、読み出しデータＦＩＦＯ４１にバイパス転送する。この例においては、書き込みアドレスジェネレータ３０を設定することも不要である。
【０１２８】
（並列に処理する演算間にデータ依存関係がある場合の処理フローと動作の説明）
図８Ａ乃至Ｃは、ＡＬＵ２２ｃ、ＡＬＵ２２ｄが並列に動作する状況にて、その処理間にデータ依存関係がある場合の処理フローとＶＬＩＷ命令の例を示す図である。特に、連続的に実行する命令の入出力データサイズが、相互に異なる場合の例である。
【０１２９】
図８Ａに示すように、処理フローとしては、任意のデータ系列（ｄａｔａ）に対して、符号化処理の１つである畳み込み符号化処理（ｒａｔｅ＝１／３のｃｏｎｖ命令）を行い、その後、パンクチャリング処理（ｐｅｒｍ命令）を行って符号化率を２／３とする場合を考える。この場合、図８Ｂに示すように、プログラム例としては、まず畳み込み符号化処理に対する入力を行うメモリコントローラ設定、出力を行うメモリコントローラ設定、パンクチャ処理に対する入力を行うバイパス転送設定（ＬＭＣ）、及び、出力を行うメモリコントローラ設定を行う。
【０１３０】
そして、図８Ｂに示すプログラム例において、まず、畳み込み符号化命令（ｃｏｎｖ）の演算が２回行われる。畳み込み符号化命令（ｃｏｎｖ）により、最初のループとして、１ループ分のパンクチャリング命令（ｐｅｒｍ）が開始できる分だけバイパス転送データが読み出しデータＦＩＦＯ４１に格納される。ここで、前段の畳み込み符号化命令（ｃｏｎｖ、ｒａｔｅ＝１／３）は、８ビットの入力データであるとともに、２４ビットの出力データである命令である。また、この例において、後段のパンクチャリング命令（ｐｅｒｍ）は、１６ビットの入力データであるとともに、８ビットの出力データである命令である。
【０１３１】
よって、メインの演算ループにおいて、読み出しＦＩＦＯのオーバーフロー、及び、アンダーフローが起こらないように、ループ内における両者の命令数を調整するビットレート調整が必要である。メインの演算ループにおけるデータ転送単位を、両者の最小公倍数を算出する処理等により、例えば、４８ビットとする。また、前段の畳み込み符号化命令（ｃｏｎｖ、ｒａｔｅ＝１／３）を２回、後段のパンクチャリング命令（ｐｅｒｍ）を３回実行する。その場合、プログラムにおいては、両者を並列演算するＶＬＩＷ命令を２回、パンクチャリング命令（ｐｅｒｍ）を１回処理する。次に、図８Ｂに示すプログラムにおいては、ループ１回分に相当する残りのパンクチャリング命令（ｐｅｒｍ）を３回実行し、その後、処理を終了する。
【０１３２】
図８Ｂに示すプログラムを実行することにより、図８Ｃに示すように、ＡＬＵ２２ｃ、ＡＬＵ２２ｄは、任意のデータ系列（ｄａｔａ）に対して入出力データサイズの異なる連続する処理（畳み込み符号化処理（ｃｏｎｖ、ｒａｔｅ＝１／３）、及び、パンクチャリング処理（ｐｅｒｍ））を並列に実行することが可能である。
【０１３３】
ここで、ＡＬＵ２２ｃから２４ビットずつ出力される畳み込み符号化データは、書き込みデータパッキング回路３２にて３２ビットずつにパッキングされ、その後、メモリ書き込みと並行して読み出しデータＦＩＦＯ４１に格納される。読み出しデータパッキング回路４２は、後段のＡＬＵ２２ｄに、上述した畳み込み符号化データを、１６ビットずつ出力する。上述したような処理により、入出力データのサイズが異なる連続する処理を書き込み／読み出しデータパッキング回路を用いながらＶＬＩＷ命令にて並列実行する場合においても、メモリアクセスレイテンシによるレイテンシを考慮する必要がない。その結果、並列化されたＡＬＵ２２ｃ、ＡＬＵ２２ｄの稼働率が向上するため、全体の処理時間は短縮する。
【０１３４】
図９を参照しながら、第２の例について説明する。図９は、無線通信システムにおける変調、復調、及び、同期処理を行う複素演算処理プロセッサに適用する場合の構成例を示すブロック図である。
【０１３５】
（構成の説明）
複素演算処理プロセッサ１０２は、コプロセッサインタフェースを有する制御プロセッサ１０（例えば、ハーバードアーキテクチャ型の３２ビットＲＩＳＣプロセッサ）に対して、そのコプロセッサインタフェースを用いて複素演算処理を行うコプロセッサ１１ｅを接続する構成を有する。コプロセッサ１１ｅは、ローカルメモリインタフェースと共有メモリインタフェースとを有する。それにより、コプロセッサ１１ｅは、ローカルメモリ１２２、ローカルメモリ１２３または共有メモリ（図９において不図示）に、それぞれ、ストリームアクセス（すなわち、スプリットトランザクションをサポートするバーストアクセス）する。
【０１３６】
メモリセレクタ１２ｅ（「マルチプレクサ型バスコントローラ」とも表す）は、制御プロセッサ１０からのデータアクセスと、コプロセッサ１１ｅからのローカルメモリアクセス及び共有メモリアクセスを調停、及び、選択制御するバスコントローラである。メモリセレクタ１２ｅは、マルチレイヤ型の態様を有する。
【０１３７】
ローカルメモリ１２２及び１２３は、メモリセレクタ１２ｅからのローカルメモリインタフェースと接続する。命令メモリ１１０は、制御プロセッサ１０の命令メモリ１１０が有するインタフェースに直接接続する。ここで、ローカルメモリ１２２、１２３、及び、メモリセレクタ１２ｅ等は、コプロセッサ１１ｅによるＳＩＭＤ演算を可能とするために、例えば、６４ビット（３２ビット×２）幅を有するバスである。
【０１３８】
また、コプロセッサ１１ｅは、上述した第１の例と同様に、バンク分けされたローカルメモリ１２２、１２３、外部の共有メモリにストリームアクセスするローカルメモリコントローラ２０ｅ、及び、共有メモリコントローラ２１ｅを有する。それにより、メモリアクセスレイテンシを隠蔽することができる。コプロセッサ１１ｅは、ローカルメモリインタフェース、共有メモリインタフェースを介して、ローカルメモリ１２２、１２３や外部の共有メモリ（図９において不図示）と接続する。
【０１３９】
メモリコントローラ２０ｅ、２１ｅは、プロセッサやコプロセッサにおける演算処理と並列にローカルメモリ１２２、１２３や外部の共有メモリにアクセスするために、書き込みアドレスジェネレータ３０ｅ、書き込みデータＦＩＦＯ３１ｅ、読み出しアドレスジェネレータ４０ｅ、及び、読み出しデータＦＩＦＯ４１ｅ等を有する。また、メモリコントローラ２０ｅ、２１ｅは、書き込みデータパッキング回路（３２ｂｉｔ形式と６４ｂｉｔ形式との変換を行う）３２ｅ、あるいは、読み出しデータパッキング回路（３２ｂｉｔ形式と６４ｂｉｔ形式との変換を行う）４２ｅを有することもできる。
【０１４０】
更に、メモリコントローラ２０ｅ、２１ｅは、書き込みデータを読み出しデータＦＩＦＯ４１ｅに直接バイパス転送するパス、読み出しデータ選択回路５０ｅ、及び、バイパスモード設定レジスタ５１を有する。メモリコントローラ２０ｅ、２１ｅは、読み出しデータとして、例えば、ＤＭＥＭ１、２等のメモリからの読み出しデータ、あるいは、バイパス転送された書き込みデータを選択することもできる。
【０１４１】
また、コプロセッサ１１ｅは、複素演算処理を行うＡＬＵ２２ｅ、ＡＬＵ２２ｆを有する。上述した演算器としては、複数の無線通信方式における変調、復調、及び、同期処理にて一般的に用いられる、例えば、複素加算（ＣＡＤＤ）、複素減算（ＣＳＵＢ）、複素乗算（ＣＭＵＬ）、複素積和演算（ＣＭＡＣ）、複素共役加算（ＣＪＡＤＤ）、複素共役減算（ＣＪＳＵＢ）、複素共役乗算（ＣＪＭＵＬ）、複素共役積和演算（ＣＪＭＡＣ）、複素絶対値演算（ＣＡＢＳ）等を実施する複素算術演算器７０と、複素シフト演算（ＣＳＨＩＦＴ）、複素丸め演算（ＣＲＮＤ）、及び、ムーブ命令等を実施する複素論理演算器７１等を有する。
【０１４２】
複素算術演算器７０、複素論理演算器７１は、例えば、送信データの変調処理、受信データのチャネル推定処理、及び、等化処理等の復調処理、あるいは、同期処理等を行う。また、複素算術演算器７０、複素論理演算器７１は、複素演算結果の１系列分の連続データが有する最大有効ビット位置（正規化係数）を検出するトレース回路を備えていても良い。ＡＬＵ２２ｅ、ＡＬＵ２２ｆは、コプロセッサ命令としてＶＬＩＷ命令等を定義することにより、並列に動作する。
【０１４３】
コプロセッサ１１ｅは、コプロセッサ命令にて使用可能なレジスタファイル２３ｅを有する。コプロセッサ１１ｅは、レジスタファイル２３ｅにおける汎用レジスタとして、例えば、３２ビットレジスタを２４個（ＣＲ０乃至ＣＲ２３）有する。ただし、例えば、２４個の汎用レジスタのうち４つの汎用レジスタ（ＣＲ２、ＣＲ３、ＣＲ１８、ＣＲ１９）は、特殊レジスタとして動作する。上述したように、１つの汎用レジスタ（例えばＣＲ２）は、コプロセッサ１１ｅとローカルメモリコントローラ２０との間においてデータを授受する際に動作する。また、１つの汎用レジスタ（例えばＣＲ３）は、コプロセッサ１１ｅと共有メモリコントローラ２１との間においてデータを授受する際に動作する。
【０１４４】
また、ＶＬＩＷ命令を用いたＳＩＭＤ的な演算時に６４ビットデータに並列アクセスするために、１つの汎用レジスタ（例えば、ＣＲ１８）は、ローカルメモリコントローラ２０ｅの上位３２ビット分のデータを授受する。また、１つの汎用レジスタ（例えば、ＣＲ１９）は、同様に共有メモリコントローラ２１ｅの上位３２ビット分のデータを授受する際に起動することもできる。そのような構成を有することにより、ローカルメモリ１２２、１２３及び外部共有メモリへのアクセスに汎用レジスタを使用することができる。さらに、上述した構成を有することにより、６４ビット幅のデータに並列にアクセスすることも可能となる。すなわち、ローカルメモリ１２２、１２３や外部共有メモリへの並列ストリームデータアクセスが、コプロセッサ１１ｅにおける汎用レジスタと同様の命令マッピングや処理サイクル数のうちに処理可能である。
【０１４５】
（動作の説明）
ＡＬＵ２２ｅ、ＡＬＵ２２ｆ、メモリコントローラ２０ｅ、２１ｅ、及び、ＶＬＩＷ命令等を用いることにより、効率よく複素演算処理を実行する。ただし、複素演算処理を実行するために、３２ビットのサイズを有する入出力データと６４ビットのサイズを有する入出力データとが混在することもある。
【０１４６】
図１０Ａ乃至Ｃは、ＡＬＵ２２ｅ、ＡＬＵ２２ｆが並列に処理を行う際に、並列する複数の処理の間にデータ依存関係がある場合における、処理フローとＶＬＩＷ命令の例を示す図である。図１０Ａに示すように、処理フローにおいて、共有メモリにおけるデータ系列（ＣＲ３）と、固定パラメータ（ＣＲ６）との複素乗算処理（Ｃ−ＭＵＬ）を行い、その後、６４ｂｉｔにて表現される複素数から、３２ｂｉｔにて表現される複素数にビット丸め処理（Ｃ−ＲＮＤ）を行う場合における例である。
【０１４７】
この場合、例えば、図１０Ｂに示すようなプログラムにおいて、メモリコントローラを設定する。次に、複素乗算命令（Ｃ−ＭＵＬ）と丸め演算命令（Ｃ−ＲＮＤ）との間にデータの依存関係があるため、バイパスモード設定レジスタ５１にバイパスモードを設定する。その後、複素乗算命令（Ｃ−ＭＵＬ）を実行する。該命令に応じて、複素乗算結果は、バイパス転送によって、読み出しデータＦＩＦＯ４１に格納される。そのため、以降のメインの演算ループでは、前段の複素乗算命令（Ｃ−ＭＵＬ）と後段の丸め演算命令（Ｃ−ＲＮＤ）とを並列に演算するＶＬＩＷ命令を実行する。最後に、１回分の丸め演算命令（Ｃ−ＲＮＤ）を実行する。
【０１４８】
図１０Ｂに示すようなプログラムを実行することにより、図１０Ｃに示すように、ＡＬＵ２２ｅ、ＡＬＵ２２ｆは、データ系列（ｄａｔａ）に対して、複素乗算処理（Ｃ−ＭＵＬ）と丸め演算処理（Ｃ−ＲＮＤ）とを並列に実行することが可能である。
【０１４９】
ＡＬＵ２２ｅは、複素乗算処理の結果を、６４ビットずつ出力する。次に、ＡＬＵ２２ｅ、ＡＬＵ２２ｆは、ＣＲ２レジスタ、及び、ＣＲ１８レジスタに対するペアレジスタであるＣＡ２を介して、複素乗算結果データを６４ビットのまま、ローカルメモリに転送する。ここで、バイパス転送設定により、ローカルメモリコントローラからメモリに書き込む処理と並行して、読み出しデータＦＩＦＯ４１ｅにも複素乗算結果が格納される。そのため、次のサイクルでは、後段のＡＬＵ２２ｆに６４ビットずつ入力することが可能となる。
【０１５０】
すなわち、バイパスモード転送設定により、プログラミングにおいて、メモリアクセスレイテンシによるレイテンシを考慮する必要がなくなる。その上、ＡＬＵ２２ｅ、ＡＬＵ２２ｆの稼働率が向上するため、全体の処理時間は短縮する。また、ローカルメモリコントローラ２０ｅ、２１ｅは、６４ビット形式のデータをアクセスすることにも対応するため、６４ビット形式のデータを転送することができる。その転送において、演算の種類により６４ビット形式のデータと、３２ビット形式のデータとの間におけるデータ形式の変換や、パッキング処理が必要な場合に、書き込みデータパッキング回路（３２ｂｉｔ形式と６４ｂｉｔ形式との変換を行う）３２ｅ、あるいは、読み出しデータパッキング回路（３２ｂｉｔ形式と６４ｂｉｔ形式と変換を行う）４２ｅを有することにより、上述した処理が可能になる。
【０１５１】
図１１Ａ乃至Ｃは、ＡＬＵ２２ｅ、ＡＬＵ２２ｆがＳＩＭＤ的な並列演算を行う場合の処理フローとＶＬＩＷ命令の例を示す図である。図１１Ａに示すように、処理フローにおいて、ローカルメモリにおけるデータ系列Ａと、共有メモリにおけるデータ系列Ｂとに、複素加算処理（Ｃ−ＡＤＤ）を行う例である。この例において、複素加算処理（Ｃ−ＡＤＤ）は、３２ｂｉｔ単位にて処理を行う。一方、上述した第２の例においては、メモリにおける１アドレスに６４ｂｉｔ単位にて、２データを格納する。
【０１５２】
この場合、例えば、図１１Ｂに示すプログラムにおいては、まず、各々のメモリコントローラ設定を行う。次に、２つのＡＬＵ２２ｅ、ＡＬＵ２２ｆが並列に演算するよう制御するＶＬＩＷ命令に応じて、２つのＡＬＵ２２ｅ、ＡＬＵ２２ｆは、複素加算命令（Ｃ−ＡＤＤ）を並列に実行する。このとき、２つのＡＬＵ２２ｅ、ＡＬＵ２２ｆは、ＳＩＭＤ的に演算する。すなわち、ＡＬＵ２２ｅは、下位３２ｂｉｔ（［３１：０］）におけるデータ（ＣＲ２、ＣＲ３）を演算する。一方、ＡＬＵ２２ｆは、上位３２ｂｉｔ（［６３：３２］）におけるデータ（ＣＲ１８、ＣＲ１９）を処理する。
【０１５３】
図１１Ｂに示すプログラムを実行することにより、図１１Ｃに示すように、ＡＬＵ２２ｅ、ＡＬＵ２２ｆは、２つのデータ系列Ａとデータ系列Ｂに対する複素加算処理（Ｃ−ＡＤＤ）を、ＳＩＭＤ的に（すなわち、並列に）実行することが可能である。この例では、ＳＩＭＤ的な演算の例を示したが、ＶＬＩＷ命令における一方のＡＬＵにおいて命令を変更することにより、例えば、ＭＩＭＤ的に処理する（すなわち、相互に異なるデータ系列に対して、相互に異なる演算を行う）ことも可能である。
【０１５４】
図１０と図１１とに示すように、ＡＬＵ２２ｅ、ＡＬＵ２２ｆは、３２ｂｉｔ形式のデータと６４ｂｉｔ形式のデータとが混在する状況において、データをアクセスすることもある。これは、複素乗算等において入出力データが有するサイズが相互に異なる場合、あるいは、メモリが連続的に記憶するデータに対して、ＳＩＭＤ的に演算を実行する場合等に、６４ビット形式のデータをアクセスすることが必要なためである。
【０１５５】
そのため、メモリコントローラ２０ｅ、２１ｅは、３２ｂｉｔ形式、及び、６４ｂｉｔ形式にてデータを入力することが可能で、６４ｂｉｔ形式のデータを出力する書き込みデータパッキング回路３２ｅ、あるいは、６４ｂｉｔ形式のデータを入力し、３２ｂｉｔ形式のデータ、あるいは、６４ｂｉｔ形式のデータのいずれでも出力することができる読み出しデータパッキング回路４２ｅを有することもできる。上述した第２の例において、メモリコントローラ２０ｅ、２１ｅは、読み出しデータ選択回路５０ｅとバイパスモード設定レジスタ５１とを有することにより、読み出しデータとして、メモリからの読み出しデータ（６４ｂｉｔ形式）、あるいは、バイパス転送される書き込みデータ（６４ｂｉｔ形式）を選択することができる。
【０１５６】
＜第２の実施形態＞
図１２は、本発明の第２の実施形態に係る、バイパス転送するか否かを判断する機能を持つストリームプロセッサ１０３の構成の一例を示すブロック図である。図１２において，例えば、ストリームプロセッサ１０３は、マルチプロセッサ転送する入出力インタフェースを有する。
【０１５７】
（構成の説明）
図１２に示すように、ストリームプロセッサ１０３は、制御プロセッサ１０に、符号化、及び、復号化処理を行うコプロセッサ１１ｇを接続する構成を有する。コプロセッサ１１ｇは、メモリアクセスレイテンシを隠蔽するために、ローカルメモリコントローラ２０ｇ、及び、共有メモリコントローラ２１ｇ等のメモリコントローラを有する。コプロセッサ１１ｇは、レジスタファイル２３、及び、複数の無線信号を処理するＡＬＵ２２ａ、２２ｂを有する。
【０１５８】
ＡＬＵは、複数の無線通信方式における符号化、及び、復号化処理を行うビット／バイト演算器、及び、変調、復調、及び、同期処理を行う複素演算器等を有する。ＡＬＵは、様々な無線方式における無線信号処理に対応するため、プログラマブルである。コプロセッサ命令としてＶＬＩＷ命令等を定義することにより、複数のＡＬＵ２２ａ、２２ｂは、並列にデータを演算することができる。
【０１５９】
例えば、第２の実施形態において、ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇは、バイパス転送するか否かを判断するバイパス判定制御回路（ＢＣＮＴ）５３ｇを有する。また、ストリームプロセッサ１０３は、マルチプロセッサ構成に対応する入出力インタフェースを有する。ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇにおける読み出しデータ選択回路５０ｇは、入力インタフェースから転送されるデータを入力するため、合わせて３つのデータを入力する。なお、ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇは、必ずしも、上述した構成を全て有する必要はない。
【０１６０】
図１３は、第２の実施形態におけるローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇが有する構成の一例を示す図である。ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇは、書き込みアドレスジェネレータ３０、書き込みデータＦＩＦＯ３１、書き込みデータパッキング回路３２、読み出しアドレスジェネレータ４０、読み出しデータＦＩＦＯ４１、及び、読み出しデータパッキング回路４２等を有する。
【０１６１】
さらに、ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇは、書き込みデータパッキング回路３２から読み出しデータＦＩＦＯ４１に書き込みデータを直接バイパス転送するパス、読み出しデータ選択回路５０ｇ、及び、バイパスモード設定レジスタ５１ｇ等を有する。さらに、ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇは、バイパス転送するか否かを判定するバイパス判定制御回路（ＢＣＮＴ）５３ｇを有する。
【０１６２】
読み出しデータ選択回路５０ｇは、３種類のデータ（すなわち、バイパスされた書き込みデータ、メモリからの読み出しデータ、及び、外部マルチプロセッサインタフェースからの入力転送データ）を選択する構成を有する。これにより、読み出しデータＦＩＦＯ４１に格納する読み出しデータとして、メモリからの読み出しデータとバイパス転送された書き込みデータとに加え、外部のプロセッサからの入力転送データを選択することができる。
【０１６３】
（動作の説明）
第２の実施形態における動作について、図１２、及び、図１３を参照しながら説明する。
【０１６４】
まず、バイパス転送するか否かを判定する処理について説明する。ＡＬＵ２２ａ、２２ｂが行う演算処理の間において、データ依存関係があるか否かに関わらず、メモリコントローラを使用する場合に、書き込みアドレスジェネレータ３０、及び、読み出しアドレスジェネレータ４０を設定する。次に、メモリコントローラを起動し、その後、演算処理を実行する。書き込みアドレスジェネレータ３０に応じて、データは書き込まれる。
【０１６５】
データを読み出す処理において、バイパス判定制御回路５３ｇにおける比較回路（ＣＭＰ）は、読み出しアドレスと書き込みアドレスとを比較する。バイパス判定制御回路５３ｇは、上述した２つのアドレスが一致すると判定する場合には、ＡＬＵ２２ａ、２２ｂが行う演算処理においてデータに依存関係があると判断する。依存関係があると判定する場合に、読み出しデータ選択回路５０ｇがメモリからの読み出しデータではなく、書き込みデータを選択することにより、バイパス判定制御回路５３ｇは、該書き込みデータを、読み出しデータＦＩＦＯ４１にバイパス転送する。その際に、マスク回路（ＭＳＫ）は、読み出しアドレスの発行をマスクする。
【０１６６】
一方で、バイパス判定制御回路５３ｇが、上述した２つのアドレスが一致しないと判定する（すなわち、ＡＬＵ２２ａ、２２ｂが行う演算処理にデータ依存関係がない）場合に、読み出しアドレスジェネレータは、読み出しアドレスを発行する。その後、読み出しデータ選択回路５０ｇは、メモリからの読み出しデータを選択する。その際に、バイパス判定制御回路５３ｇは、サイクルカウンタ（ｃｏｕｎｔ）をさらに有する。それにより、入出力サイクル数などの関係で書き込みアドレスを発行するタイミングが遅れる場合にも対応することができるようになる。
【０１６７】
データを読み出す処理におけるタイミングと、書き込みアドレスを発行する処理におけるタイミングとが一致しない場合において、バイパス判定制御回路５３ｇは、サイクルカウンタがカウントする数サイクル間（例えば、０乃至５サイクル程度）の遅延までについて、比較判定を行う。バイパス判定制御回路５３ｇは、上述した数サイクル間において、比較結果が一致する場合に、書き込みデータをバイパス転送する。数サイクル間に一致しない場合において、バイパスしない読み出し動作を行うようにバイパス判定制御回路５３ｇを構成することも可能である。
【０１６８】
上述した本実施形態によれば、メモリコントローラ２０ｇ、２１ｇは、バイパス判定制御回路５３ｇを有する。それにより、バイパス判定制御回路５３ｇは、プロセッサがバイパスモード設定レジスタ５１ｇを設定することなく、バイパス転送可否を判定することが可能である。
【０１６９】
次に、マルチプロセッサ転送を行う入出力インタフェースを制御する処理について説明する。全体の処理性能を向上させる（すなわち、全体の処理速度を高速化する）ために、ストリームプロセッサ１０３等の複数のプロセッサを有する場合もある。その場合、当該複数のプロセッサ間における通信（すなわち、データ転送）が必要である。特許文献等が開示する関連技術は、複数のプロセッサが共有メモリインタフェースを介して共有メモリを参照することにより、データを授受する。
【０１７０】
しかしながら、当該データを授受する共有メモリ領域を削減する場合や、共有メモリを参照するデータ転送レイテンシが問題となる場合等において、上述したように、ストリームプロセッサ１０３は、マルチプロセッサ転送を行う入出力データインタフェースを有することもできる。ストリームプロセッサ１０３において、メモリセレクタ１２は、デコードされたアドレスに応じて、データ出力インタフェースへ、転送するデータを出力する。そのような処理により、ストリームプロセッサ１０３は、他プロセッサへデータを出力する。
【０１７１】
また、他プロセッサからのデータ入力転送については、ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇにおけるバイパスモード設定レジスタ５１ｇを設定し、読み出しデータ選択回路５３ｇは、マルチプロセッサ転送を行うデータ入力インタフェースから入力される入力転送データを選択し、選択したデータを読み出しデータＦＩＦＯ４１に格納する。この処理により、ＡＬＵ２２ａ、２２ｂは、その入力転送データにおいて演算する。
【０１７２】
上述したように、本実施形態に係るストリームプロセッサ１０３は、プロセッサ間のインタフェースとして、マルチプロセッサ転送を行う入出力データインタフェースを有する。ローカルメモリコントローラ２０ｇ及び共有メモリコントローラ２１ｇにおける読み出しデータ選択回路５０ｇは、マルチプロセッサにデータを転送する入力インタフェースにおける転送データも選択可能なように、３つの入力を受け付ける。それにより、ストリームプロセッサ１０３は、複数のプロセッサ間におけるデータ転送をすることができる。本実施形態によれば、当該データを授受する処理に必要な共有メモリ領域を削減するとともに、共有メモリをアクセスすることにより生じるデータ転送レイテンシを削減する。
【０１７３】
図１４を参照しながら、第３の例について説明する。図１４は、本実施形態、または、本発明の第１の実施形態に係るメモリコントローラを使用して、符号化、及び、復号化処理の１つであるインタリーブ処理、及び、デインタリーブ処理を実現する場合の動作例を示す図である。
【０１７４】
（動作の説明）
図１４Ａに示すように、ブロックインタリーブ処理は、符号化、及び、復号化処理におけるインタリーブ処理（あるいは、デインタリーブ処理）の一例である。ブロックインタリーブ処理は、例えば、あるＭ行Ｎ列分（Ｍ及びＮは、ともに正整数）のデータブロックに対して、入力側にて行単位に書き込むともに、出力側にて列単位に読み出すことにより、データを並び変える処理である。
【０１７５】
無線方式には、Ｍ行Ｎ列の書き込み開始行や読み出し開始列をブロックごとに変更することによって、そのランダム性を向上させる方式や、最後の出力系列時に各ブロックから出力する順番を巡回（巡回シフト処理）させる方式等がある。また、Ｍ行Ｎ列のＭやＮの値は、無線方式、あるいは、無線方式における内部パラメータ等に依存する。
【０１７６】
ここで、インタリーブ処理において、その処理の性質上、１個の入力メモリと１個の演算器を用いて処理する場合には、１（ビット／サイクル）の処理スループットが限界である。すなわち、インタリーブ処理は、例えば、８ビット並列演算が可能なスクランブリング処理等に比べて、８倍の処理時間が必要である。そのため、インタリーブ処理は、高速に処理する場合のボトルネックになる。そこで、以降では、インタリーブ処理する入力メモリを２個（２バンク）と、ＡＬＵ２２ｅ、ＡＬＵ２２ｆを用いて、２倍（２ビット／サイクル）の処理スループットを実現することについて説明する。
【０１７７】
図１４Ｂの処理フローに示すように、まず、ＡＬＵ１は、前段（この例ではスクランブリング処理）の処理時に、その処理結果をバンク分けされた２つのローカルメモリ１２０、ローカルメモリ１２１の両方に書き込む。ただし、１命令で２つのローカルメモリにブロードキャストする命令が存在しない場合において、ローカルメモリコントローラ２０及び共有メモリコントローラ２１は、ＶＬＩＷ演算命令に応じて、メモリデータを２つのローカルメモリにコピーする。
【０１７８】
例えば、ＡＬＵ２２ｅがＤＭＥＭ０（１２０）へのスクランブリング処理命令を行うとともに、ＡＬＵ２２ｆがＤＭＥＭ１（１２１）へコピーする（あるいは、Ｍｏｖｅする）ＶＬＩＷ命令を実施する。そして、２つのローカルメモリコントローラ２０及び共有メモリコントローラ２１と、ＡＬＵ２２ｅ、ＡＬＵ２２ｆとにより、並列なインタリーブ処理を実現する。例えば、ＡＬＵ２２ｅは、データ系列の前半部分（ｄ０）について、インタリーブ処理を行う。それとともに、ＡＬＵ２２ｆは、後半部分（ｄ１）について、インタリーブ処理を行う。
【０１７９】
このとき、図１４Ｃの処理タイミング例に示すように、前段のスクランブリング処理とコピー処理とを実行するＶＬＩＷ命令を処理する場合、通信処理レイテンシ分のサイクルを待ち、その後、コピー処理を開始する必要がある。ここで、特許文献等が開示する関連技術においては、メモリレイテンシに応じてスクランブリング処理結果が一定以上メモリに格納されるのを待ち、その後、コピー処理を開始する必要がある。
【０１８０】
これに対し、本実施形態に係るローカルメモリコントローラ２０及び共有メモリコントローラ２１を使用する場合においては、バイパスモード設定レジスタ５１、５１ｇを設定することにより、書き込みデータパッキング回路３２からの書き込みデータを直接読み出しデータＦＩＦＯ４１にバイパス転送できる。そのため、メモリアクセスレイテンシを考慮する必要がない。すなわち、コピー命令の開始は、一定の時間にて、かつ、少ない通信処理レイテンシにて行うことができる。
【０１８１】
例えば、スクランブリング命令の場合、８ビット並列処理であるスクランブリング処理命令の出力データが３２ビット１データとしてローカルメモリ及び読み出しデータＦＩＦＯ４１に出力される４サイクル分（＋α）（α＝０〜２サイクル程度）程度のレイテンシで、ＶＬＩＷ命令を活用したコピー命令との並列実行が可能である。その後、ＡＬＵ２２ｅ、ＡＬＵ２２ｆと２つのローカルメモリ１２０、１２１を用いて並列にインタリーブ処理を実行する。これにより、本実施形態を利用しない場合に比べて、２倍（２ビット／サイクル）の処理スループットが実現できる。
【０１８２】
（並列演算命令ライブラリの説明）
また、図１５は、複数の演算器の間にデータ依存関係がある処理の場合に、プログラミングを容易にする並列演算命令ライブラリの例である。図１５に示すように、例えば、入出力メモリの情報（ｒｅａｄ＿ｍｅｍ＿ｉｎｆｏ）、前段の処理命令（１ｓｔ＿ｆｕｎｃ）、前段の処理命令の出力データビット数（１ｓｔ＿ｓｉｚｅ）、後段の処理命令（２ｎｄ＿ｆｕｎｃ）、後段の処理命令の入力ビット数（２ｎｄ＿ｓｉｚｅ）、及び、全体の処理データ数（入力データビット数）（ｎｕｍ）を引数とする並列演算命令ライブラリを定義する。図１５に示すような関数ライブラリを用いることにより、並列に処理する演算器間にデータの依存関係がある場合も、処理間のレイテンシの考慮が不要な形でプログラミングすることが可能となる。
【０１８３】
例えば、図１５における使用例１に示すようにプログラミングすることにより、実際の並列演算命令としては、図１４Ａ乃至図１４Ｃに示すような最初にスクランブリング命令を行い、その後、ＶＬＩＷを用いた並列演算を行い、最後に残るコピー命令（ムーブ命令）が実行される。同様に、図１５における使用例２のようにプログラミングする場合には、図８Ａ乃至Ｃに示したような並列演算命令列が実行される。
【０１８４】
ここで、並列演算命令ライブラリは、前段の処理命令の出力データビット数（１ｓｔ＿ｓｉｚｅ）と、後段の処理命令の入力データビット数（２ｎｄ＿ｓｉｚｅ）とを引数とする。これにより、並列化された演算器において処理するデータ間に依存関係があるのに加え、その演算命令間で処理データサイズが異なる場合であっても、そのデータサイズと、レイテンシとを考慮して、最適な並列演算を実行することが可能である。
【０１８５】
本発明の各実施形態によれば、ＡＬＵを有するプロセッサが無線信号処理等の信号処理を行う場合に、それらのＡＬＵ間の演算にデータの依存関係があるとしても、少ないレイテンシで、ＡＬＵによる並列演算が可能になる。
【０１８６】
すなわち、本発明の各実施形態に係るストリームプロセッサは、制御プロセッサに無線信号処理を行うコプロセッサを接続し、コプロセッサにおけるＡＬＵを並列に複数有する。上述したような構成により、ＶＬＩＷ化、ＳＩＭＤ化、または、ＭＩＭＤ化等による高速化が可能である。
【０１８７】
さらに、該ストリームプロセッサは、コプロセッサからメモリへのアクセスに対して、メモリアクセスレイテンシを隠蔽するアドレス生成部と、ＦＩＦＯを有するメモリコントローラと、メモリコントローラにおける書き込みデータパッキング回路から読み出しデータＦＩＦＯに対してバイパス転送機能と有する。上述した構成により、ＡＬＵ間の演算にデータの依存関係があるとしても、少ないレイテンシで、ＡＬＵによる並列演算が可能になることである。
【０１８８】
上述した構成によれば、コプロセッサからメモリへのアクセスに、メモリアクセスレイテンシを隠蔽できるアドレス生成部とＦＩＦＯとを有するメモリコントローラを有することにより、無線通信システムにおける無線信号処理を、高速に処理することができる。特に、ＡＬＵ間でデータの依存関係がない場合は、メモリコントローラにより双方のＡＬＵにおけるメモリアクセスレイテンシを隠蔽でき、ＡＬＵを高い稼働率で稼働させることが可能となる。
【０１８９】
更に、上述した構成によれば、ＡＬＵ間でデータの依存関係がある場合も、メモリコントローラにおける書き込みデータパッキング回路から読み出しデータＦＩＦＯに接続するバイパス転送機能を用いることにより、短く、かつ、一定のレイテンシにて、高い稼働率でＡＬＵを並列動作させることが可能となる。
【０１９０】
なお、上述した構成によれば、ＡＬＵ間における専用通信パスやキャッシュメモリ等複雑な機構を使用することなく、メモリコントローラにおける書き込みデータパッキング回路から読み出しデータＦＩＦＯへのバイパス機能のみという比較的少ない回路規模の追加のみで、上記のレイテンシの削減を実現できるとともに、並列処理を高速化できる。
【０１９１】
さらに、本発明の各実施形態によれば、無線信号処理等の信号処理を行うプロセッサにおいて、ＡＬＵを並列化する場合に、そのＡＬＵ間の演算にデータの依存関係がある場合にも、そのレイテンシの考慮を不要とし、メモリアクセスレイテンシには依存しない比較的容易なプログラミングにて、ＡＬＵによる並列演算が可能になる。
【０１９２】
その理由は、本発明の各実施形態に係るストリームプロセッサでは、バイパスモード設定レジスタや読み出しデータ選択回路等によるバイパス転送機能を用いることにより、前段の処理の書き込みデータのメモリアクセスレイテンシや、後段の処理の読み出しデータアクセスレイテンシを隠蔽できるため、メモリコントローラにおけるバイパス転送に要する一定の（短く、固定的な）レイテンシを考慮するだけで、データ依存関係のある並列処理演算のプログラミングが可能になるためである。
【０１９３】
すなわち、一定のレイテンシのみを考慮してプログラミングが可能となる。そのため、ストリームプロセッサ及びメモリアクセスレイテンシを含む周辺ハードウェアの構成に関する知識がなくとも、ソフトウェア開発者は、容易にプログラムを作成することができる。また、並列処理する演算処理間にデータ依存関係の有無にかかわらず、ソフトウェア開発者は、ＶＬＩＷ命令ライブラリを容易に開発できる。更に、本発明の各実施形態に係る並列演算命令ライブラリを用いることにより、並列化された演算器間にデータの依存関係があり、更にその演算命令間で処理データサイズが異なる場合でも、ソフトウェア開発者は、それを考慮することなく、容易にプログラムを作成することができる。
【０１９４】
なお、コプロセッサにおけるＡＬＵとして、動作モード等処理のパラメータ設定可能（すなわち、プログラマブル）で、かつ、１サイクルで複数ビットを並列に処理可能な、スクランブリング回路、畳み込み符号化器、ビット連接（並び替え）回路、及び、ＣＲＣ符号化器等を有すること、または、１サイクルで任意の複素演算（複素乗算、複素加減算、複素ＭＡＣ演算、及び、複素共役演算等）が可能な複素演算器を有することにより、複数の無線方式における符号化、及び、復号化処理（ビット／バイト演算処理）、及び、変調、復調、及び、同期処理等に、柔軟にかつ高速に対応可能である。
【０１９５】
そして、制御プロセッサと専用ハードウェア回路を組み合わせた構成ではなく、制御プロセッサに対して無線信号処理を処理するＡＬＵを並列化したコプロセッサとして実現することにより、１サイクル単位にて処理命令をソフトウェア（ＶＬＩＷ等）で指定可能なため、無線信号処理の処理順序の変更、無線方式に関する仕様変更、及び、仕様拡張等にも柔軟に対応できる。
【０１９６】
無線信号処理におけるインタリーブ処理やデインタリーブ処理等、処理量の多い処理を、効率的に並列処理できることである。
【０１９７】
すなわち、上述したように、２つのバンク分けされたローカルメモリと２つのＡＬＵとを用いて、一方のローカルメモリが記憶する前段の処理の実行結果を、他方のローカルメモリにコピーし、その後、２つのメモリコントローラと２つのＡＬＵとを用いて、２並列にインタリーブ処理を行うことにより、１ブロック分のブロックインタリーブ処理を、本実施形態を利用しない場合に比べて、２倍の処理スループットで実現できる。
【０１９８】
特に、メモリコントローラにおいて、バイパスモード設定レジスタ、あるいは、読み出しデータ選択回路等によるバイパス転送機能を用いることにより、前段の処理を実行した結果のコピーを、少ないレイテンシのみのオーバヘッドにて、前段の処理と並列に実行可能である。すなわち、コピーする転送処理時間をほぼ隠蔽することができるため、少ない処理時間オーバヘッドのみで、効率的に２並列のインタリーブ処理、及び、デインタリーブ処理を実現可能である。更に、並列演算命令ライブラリを用いることにより、レイテンシを考慮することなく、最適なレイテンシでのプログラムを作成することができる。
【０１９９】
２並列のインタリーブ処理を例として説明を行ったが、上述した第３の例を、Ｎ並列（Ｎは２以上の整数）のインタリーブ処理に拡張できることは明らかである。
【０２００】
上述した効果は、本発明の各実施形態において達成し得る。
【０２０１】
＜第３の実施形態＞
次に、上述した第１の実施形態及び第２の実施形態が基礎とする第３の実施形態について、図１６を参照しながら説明する。図１６は、第３の実施形態に係るメモリコントローラが有する構成を表すブロック図である。
【０２０２】
本実施形態に係るメモリコントローラ１０００は、第１アドレスジェネレータ１００１と、第２アドレスジェネレータ１００４と、書き込みデータＦＩＦＯ１００２と、読み出しデータＦＩＦＯ１００６と、読み出しデータ選択回路１００５と、バイパス転送制御回路１００３とを有する。
【０２０３】
まず、バイパス転送制御回路１００３は、メモリインタフェースを介してメモリに書き込むデータを、書き込みデータＦＩＦＯ１００２と、読み出しデータ選択回路１００５とに転送するバイパス処理を行う。
【０２０４】
読み出しデータ選択回路１００５は、読み出すデータを、メモリから読み取るのか、あるいは、バイパス転送制御回路１００３が転送するデータとするのかを選択する。
【０２０５】
本実施形態に係るメモリコントローラ１０００は、上述したバイパス処理を実施することにより、メモリを介することなくデータを参照することが可能になる。そのため、本実施形態に係るメモリコントローラによれば、メモリを参照するレイテンシを減らすことができる。その結果、例えば、無線信号等に関する演算を、高速に実行することを可能にする。
【０２０６】
また、演算器がメモリにおけるデータをやり取りする際に、データＦＩＦＯの段数等に応じて、書き込みデータレイテンシや読み出しデータレイテンシが発生する。さらに、該データレイテンシは、例えば、一般的なメモリコントローラの構成等に応じて多様である。一方、本実施形態に係るメモリコントローラによれば、メモリに書き込むデータをパイパス処理するため、一定のレイテンシにて、データをやり取りすることが可能になる。
【０２０７】
尚、上述した各実施形態の一部又は全部は、以下の付記のようにも記載されうる。しかしながら、上述した各実施形態により例示的に説明した本発明は、以下には限られない。即ち、
（付記１）
複数のアドレスジェネレータと、読み出しデータＦＩＦＯと、書き込みデータＦＩＦＯと、バイパス転送制御回路と、データ選択回路とを備え、
前記複数のアドレスジェネレータは、設定された値と算出したアドレスに応じて新たなアドレスを繰り返し算出し、
前記読み出しデータＦＩＦＯは、前記複数のアドレスジェネレータのうち第２アドレスジェネレータが算出するアドレスが指し示すメモリにおけるデータを、一時的に格納可能であり、
前記書き込みデータＦＩＦＯは、前記複数のアドレスジェネレータのうち第１アドレスジェネレータが算出するアドレスが指し示すメモリに書き込むデータを、一時的に格納可能であり、
前記バイパス転送制御回路は、メモリインタフェースを介して前記メモリに書き込むデータを、前記書き込みデータＦＩＦＯと、前記データ選択回路とに転送するバイパス処理を行い、
前記読み出しデータ選択回路は、読み出すデータを、前記メモリから読み取るのか、あるいは、前記バイパス転送制御回路が前記バイパス処理において転送するデータとするのかを選択する、
メモリコントローラ。
【０２０８】
（付記２）
前記読み出しデータＦＩＦＯから読み取ったデータを、前記読み出すデータを表すビットをシフトした値に応じて、指定された単位にてパッキングする読み出しデータパッキング回路と、
前記書き込むデータを指定された単位にてパッキングし、パッキングしたデータを、前記書き込みデータＦＩＦＯに記憶するように制御する書き込みデータパッキング回路と
を更に備える付記１に記載のメモリコントローラ。
【０２０９】
（付記３）
前記書き込みデータパッキング回路は、第１の所定のビット単位にて記述されたデータを、前記メモリにおける１つのアドレスが指し示す領域の大きさにパッキングし、
前記読み出しデータパッキング回路は、前記メモリにおける１つのアドレスが指し示す領域の大きさを有するデータを、第２の所定のビット単位の大きさにパッキングする
付記２に記載のメモリコントローラ。
【０２１０】
（付記４）
前記書き込みデータパッキング回路は、ｎ（ただし、ｎは整数である）ビット単位または２×ｎビット単位のデータを、前記メモリにおける１アドレス分である２×ｎビットデータにパッキングし、
前記読み出しデータパッキング回路は、前記メモリにおける１アドレス分である２×ｎビットデータを、ｎビット単位または２×ｎビット単位にパッキングする
付記２に記載のメモリコントローラ。
【０２１１】
（付記５）
前記書き込むデータを保存する先を表すアドレスと、前記読み出すデータを記憶するアドレスとが一致する場合に、前記バイパス処理を実施するバイパス判定制御回路
を更に備える付記１乃至付記４のいずれかに記載のメモリコントローラ。
【０２１２】
（付記６）
バイパス転送を行うか否かに関する情報を記憶可能なバイパスモード設定レジスタをさらに備える
付記１乃至付記５のいずれかに記載のメモリコントローラ。
【０２１３】
（付記７）
前記データ選択回路は、前記読み出すデータを、前記メモリインタフェースを介して前記メモリから読み取るのか、前記バイパス処理において転送されるデータとするのか、あるいは、入力されるデータとするのかを選択する
付記１乃至付記６のいずれか１項に記載のメモリコントローラ。
【０２１４】
（付記８）
無線信号を処理する複数の演算器と、前記無線信号の処理においてメモリアクセスを制御する付記１乃至付記７のいずれかに記載のメモリコントローラとを備え、
前記メモリコントローラは、前記演算器が無線信号を処理する場合に、前記無線信号を表すデータを制御する
プロセッサ。
【０２１５】
（付記９）
前記複数の演算器は、前記無線信号を処理する場合に、符号化及び復号化処理を行うビットバイト演算器と、前記ビットバイト演算器の動作を制御するパラメータレジスタとを含む付記８に記載のプロセッサ。
【０２１６】
（付記１０）
前記複数の演算器は、前記無線信号を処理する場合に、変調、復調及び同期処理を行う複素数演算器を含むことを特徴とする付記８または付記９に記載のプロセッサ。
【０２１７】
（付記１１）
前記メモリコントローラは、前記複数の演算器側からのレジスタアクセス番号によって、データ読み出し時に状態を更新する通常アクセス機能と、データを読み出しても状態を更新しないピープ機能とを備えることを特徴とする付記８乃至付記１０のいずれかに記載のプロセッサ。
【０２１８】
（付記１２）
付記８乃至付記１１のいずれかに記載のプロセッサに用いる演算処理方法であって、前記複数の演算器が行う処理に依存関係がある場合に、メモリに書き込むデータを、依存関係がある前記処理に転送することを特徴とする演算処理方法。
【０２１９】
（付記１３）
Ｍ（ただし、Ｍは２以上の正整数である）バンク化されたＭ個のメモリに書き込むデータをＭ個の演算器にバイパス転送し、前記Ｍ個の演算器が前記データのうちそれぞれ異なるデータを、インタリーブ処理またはデインタリーブ処理する
ことを特徴とする付記１２に記載の演算処理方法。
【０２２０】
（付記１４）
前記演算器間にデータ依存関係がある処理の場合に、付記８乃至付記１１のいずれか１項に記載のプロセッサにおける前記各々の処理命令における処理データビット数を引数とした演算命令ライブラリ。
【符号の説明】
【０２２１】
１０    制御プロセッサ
１１、１１ｃ、１１ｅ、１１ｇ    コプロセッサ
１２、１２ｅ    メモリセレクタ
２０、２０ｅ、２０ｇ    ローカルメモリコントローラ
２１、２１ｅ、２１ｇ    共有メモリコントローラ
２２ａ、２２ｂ、２２ｃ、２２ｄ、２２ｅ、２２ｆ    ＡＬＵ
２３、２３ｃ、２３ｅ    レジスタファイル
２４、２４ｃ    コプロセッサコントローラ
３０、３０ｅ    書き込みアドレスジェネレータ
３１、３１ｅ    書き込みデータＦＩＦＯ
３２、３２ｅ    書き込みデータパッキング回路
４０、４０ｅ    読み出しアドレスジェネレータ
４１、４１ｅ    読み出しデータＦＩＦＯ
４２、４２ｅ    読み出しデータパッキング回路
５０、５０ｅ、５０ｇ    読み出しデータ選択回路
５１、５１ｇ    バイパスモード設定レジスタ
５２    バイパス転送制御回路
５３ｇ    バイパス判定制御回路
６０    スクランブリング回路
６１    畳み込み符号化器
６２    ＣＲＣ符号化器
６３    ビット連接／並べ替え回路
６５    パラメータレジスタ
７０    複素算術演算器
７１    複素論理演算器
１００、１０３    ストリームプロセッサ
１０１    符号化／復号化処理プロセッサ
１０２    複素演算処理プロセッサ
１１０    命令メモリ
１２０、１２１、１２２、１２３    ローカルメモリ
１０００    メモリコントローラ
１００１    第１アドレスジェネレータ
１００２    書き込みデータＦＩＦＯ
１００３    バイパス転送制御回路
１００４    第２アドレスジェネレータ
１００５    読み出しデータ選択回路
１００６    読み出しデータＦＩＦＯ
【図１】
2014174868.tif 000003
【図２Ａ】
2014174868.tif 000004
【図２Ｂ】
2014174868.tif 000005
【図２Ｃ】
2014174868.tif 000006
【図３Ａ】
2014174868.tif 000007
【図３Ｂ】
2014174868.tif 000008
【図３Ｃ】
2014174868.tif 000009
【図４】
2014174868.tif 000010
【図５】
2014174868.tif 000011
【図６】
2014174868.tif 000012
【図７】
2014174868.tif 000013
【図８Ａ】
2014174868.tif 000014
【図８Ｂ】
2014174868.tif 000015
【図８Ｃ】
2014174868.tif 000016
【図９】
2014174868.tif 000017
【図１０Ａ】
2014174868.tif 000018
【図１０Ｂ】
2014174868.tif 000019
【図１０Ｃ】
2014174868.tif 000020
【図１１Ａ】
2014174868.tif 000021
【図１１Ｂ】
2014174868.tif 000022
【図１１Ｃ】
2014174868.tif 000023
【図１２】
2014174868.tif 000024
【図１３】
2014174868.tif 000025
【図１４Ａ】
2014174868.tif 000026
【図１４Ｂ】
2014174868.tif 000027
【図１４Ｃ】
2014174868.tif 000028
【図１５】
2014174868.tif 000029
【図１６】
2014174868.tif 000030