(57)【要約】【課題】動作速度を向上出来る演算器及び半導体集積回路装置を提供すること。【解決手段】複数ビットを一つのデータ単位Ｓ０〜Ｓ３とするＳＩＭＤ命令を、複数の処理サイクルＰＳ１、ＰＳ２により実行する演算器１０であって、前記データ単位Ｓ０〜Ｓ３間でのビットの移動を伴うことなく、それぞれ前記データ単位Ｓ０〜Ｓ３毎に第１演算を行う複数の第１演算部１１−０〜１１−３と、前記データ単位Ｓ０〜Ｓ３間でのビットの移動を伴う第２演算を行う第２演算部１２とを具備し、前記第１演算と前記第２演算とにより前記ＳＩＭＤ命令が実行され、且つ前記第１演算と前記第２演算とは、互いに１処理サイクル以上のレイテンシを有して実行される。【選択図】      図１
2009282744.tif 000002
【特許請求の範囲】
【請求項１】
複数ビットを一つのデータ単位とするＳＩＭＤ命令を、複数の処理サイクルにより実行する演算器であって、
前記データ単位間でのビットの移動を伴うことなく、それぞれ前記データ単位毎に第１演算を行う複数の第１演算部と、
前記データ単位間でのビットの移動を伴う第２演算を行う第２演算部と
を具備し、前記第１演算と前記第２演算とにより前記ＳＩＭＤ命令が実行され、且つ前記第１演算と前記第２演算とは、互いに１処理サイクル以上のレイテンシを有して実行される
ことを特徴とする演算器。
【請求項２】
前記ＳＩＭＤ命令は、シャッフル命令、ローテート命令、及びシフト命令の少なくともいずれかである
ことを特徴とする請求項１記載の演算器。
【請求項３】
複数の処理ステージを用いてパイプライン動作を行う半導体集積回路装置であって、
複数ビットを一つのデータ単位とするＳＩＭＤ命令を、複数の前記処理ステージを用いて実行する演算器を具備し、
前記演算器は、第ｉ処理ステージ（ｉは１以上の自然数）において、前記データ単位間でのビットの移動を伴うことなく、前記データ単位毎に第１演算を行い、
第（ｉ＋ｊ）処理ステージ（ｊは１以上の自然数）において、前記データ単位間でのビットの移動を伴う第２演算を行う
ことを特徴とする半導体集積回路装置。
【請求項４】
前記データ単位毎に設けられ、前記演算器における演算内容を制御する制御データを保持する複数のレジスタを更に備え、
前記第１演算において、前記レジスタの各々に保持される前記制御データは、前記データ単位毎の前記第１演算にそれぞれ使用される
ことを特徴とする請求項３記載の半導体集積回路装置。
【請求項５】
前記演算器によって実行される前記ＳＩＭＤ命令は、シャッフル命令、ローテート命令、及びシフト命令の少なくともいずれかである
ことを特徴とする請求項４記載の半導体集積回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、演算器及び半導体集積回路装置に関するもので、例えばＳＩＭＤ（single instruction multiple data）命令をサポートするプロセッサに関するものである。
【背景技術】
【０００２】
ＳＩＭＤは、１つの命令で複数のデータに対して同じ処理を実行する処理方式である。ＳＩＭＤ命令をサポートするプロセッサでは、演算の単位となる複数ビットの単位データ（例えば３２ビット）を、同時に複数処理する。従ってプロセッサ内の演算器は、単位データ毎に論理的に独立している。
【０００３】
例えば、４つの単位データを同時に処理するプロセッサの場合、４つの３２ビット加算器を並列に設けることで、並列加算命令を実行出来る。またＳＩＭＤ命令では無いが、論理演算命令（ＡＮＤ、ＯＲ、ＥＸＯＲ等）を処理する場合も、３２ビット単位で演算を行う４つの演算器を並列に配置する構成とすることが可能である。その理由は、これらの演算は基本的にbit wiseな演算であって、単位データ間でのデータ（ビットまたはバイト）の移動が生じないからである（例えば非特許文献１参照）。
【０００４】
他方、単位データ間でのデータの通信を生じる演算命令も存在する。それは、例えばシャッフル命令等である。そして従来、このような演算器を論理合成ツールにより物理実装しようとすると、プロセッサの動作速度が悪化するという問題があった。
【非特許文献１】東芝、“TX System Risc TX79 Core Architecture (Symmetric 2-way superscalar 64-bit CPU) Rev. 2.0”、B-48頁、PAND命令、2001年4月、インターネット＜URL: http://lukasz.dk/files/tx79architecture.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この発明は、動作速度を向上出来る演算器及び半導体集積回路装置を提供する。
【課題を解決するための手段】
【０００６】
この発明の一態様に係る演算器は、複数ビットを一つのデータ単位とするＳＩＭＤ命令を、複数の処理サイクルにより実行する演算器であって、前記データ単位間でのビットの移動を伴うことなく、それぞれ前記データ単位毎に第１演算を行う複数の第１演算部と、前記データ単位間でのビットの移動を伴う第２演算を行う第２演算部とを具備し、前記第１演算と前記第２演算とにより前記ＳＩＭＤ命令が実行され、且つ前記第１演算と前記第２演算とは、互いに１処理サイクル以上のレイテンシを有して実行される。
【０００７】
また、この発明の一態様に係る半導体集積回路装置は、複数の処理ステージを用いてパイプライン動作を行う半導体集積回路装置であって、複数ビットを一つのデータ単位とするＳＩＭＤ命令を、複数の前記処理ステージを用いて実行する演算器を具備し、前記演算器は、第ｉ処理ステージ（ｉは１以上の自然数）において、前記データ単位間でのビットの移動を伴うことなく、前記データ単位毎に第１演算を行い、第（ｉ＋ｊ）処理ステージ（ｊは１以上の自然数）において、前記データ単位間でのビットの移動を伴う第２演算を行う。
【発明の効果】
【０００８】
この発明によれば、動作速度を向上出来る演算器及び半導体集積回路装置を提供できる。
【発明を実施するための最良の形態】
【０００９】
以下、この発明の実施形態を、図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【００１０】
［第１の実施形態］
この発明の第１の実施形態に係る演算器及び半導体集積回路装置について、図１を用いて説明する。図１は、本実施形態に係るプロセッサのブロック図である。
【００１１】
＜プロセッサの全体構成について＞  
図示するようにプロセッサ１は、２つのレジスタＲＡ、ＲＢ、及び第１演算器１０及び第２演算器２０を備えている。またプロセッサ１はパイプライン動作を行い、パイプライン動作は処理ステージＰＳ１と、処理ステージＰＳ１に引き続いて行われる処理ステージＰＳ２とを含む。そして、第１演算器１０は処理ステージＰＳ１、ＰＳ２にまたがった演算を行い、第２演算器２０は処理ステージＰＳ１で完結する演算を行う。更にプロセッサ１は、例えば３２ビットを単位データとするＳＩＭＤ動作を行う。以下、この３２ビットの単位データを「スライス（slice）」と呼ぶこととし、プロセッサ１が４つのスライスを同時に処理する場合を例に挙げて説明する。この４つのスライスを、以下スライスＳ０〜Ｓ３と呼ぶことにする。なお、スライスは３２ビットに限らず、例えば１６ビットや６４ビットでも良く、また同時に処理されるスライス数も４つに限定されるものでは無い。
【００１２】
レジスタＲＡは、４つのスライス分のデータを保持可能である。すなわち、（３２ビット×４）＝１２８ビットのデータを保持出来る。以下、レジスタＲＡにおけるスライスＳ０〜Ｓ３に相当する３２ビットデータの各々を、それぞれワード０Ａ〜３Ａと呼ぶ。
【００１３】
レジスタＲＢは、レジスタＲＡと同様に４つのスライス分のデータを保持可能である。すなわち、１２８ビットのデータを保持出来る。以下、レジスタＲＢにおけるスライスＳ０〜Ｓ３に相当する３２ビットデータの各々を、それぞれワード０Ｂ〜３Ｂと呼ぶ。
【００１４】
第１演算器１０は、４つの第１演算部１１−０〜１１−３と、第２演算部１２とを備えている。第１演算部１１−０〜１１−３はそれぞれ、レジスタＲＡ内のスライスＳ０〜Ｓ３とレジスタＲＢ内のスライスＳ０〜Ｓ３との間の演算を行う。すなわち、第１演算部１１−０はワード０Ａとワード０Ｂとをデータとして用いた演算を行い、第１演算部１１−１はワード１Ａとワード１Ｂとをデータとして用いた演算を行い、第１演算部１１−２はワード２Ａとワード２Ｂとをデータとして用いた演算を行い、第１演算部１１−３はワード３Ａとワード３Ｂとをデータとして用いた演算を行う。つまり、第１演算部１１−０〜１１−３の各々において行われる処理は、スライス間でのデータの移動を生じさせない。換言すれば、各処理は、スライス間でのデータ通信を生じさせず、各スライス内で完結する処理である。以下、第１演算部１１−０〜１１−３を区別しない場合には、一括して第１演算部１１と呼ぶことにする。第１演算部１１における処理は、処理ステージＰＳ１において実行される。
【００１５】
第２演算部１２は、プロセッサ１において同時処理されるスライス数と同数、つまり４つの第１演算部１１−０〜１１−３における処理結果をデータとして用いた演算を行う。すなわち、第１演算部１１−０〜１１−３においてそれぞれ行われたスライスＳ０〜Ｓ３に関する演算結果（３２ビット×４）を、データとして用いて演算を行う。つまり、第２演算部１２において行われる処理は、スライス間でのデータの通信を生じさせる処理である。また第２演算部１２における処理は、処理ステージＰＳ２において実行される。そして、第２演算部１２において得られた３２ビットの演算結果が、第１演算器１０の演算結果として出力される。
【００１６】
第２演算器２０は、４つの第１演算部２１−０〜２１−３を備えている。第１演算部２１−０〜２１−３はそれぞれ、レジスタＲＡ内のスライスＳ０〜Ｓ３とレジスタＲＢ内のスライスＳ０〜Ｓ３とをデータとして用いた演算を行う。すなわち、第１演算部２１−０はワード０Ａとワード０Ｂとを用いた演算を行い、第１演算部２１−１はワード１Ａとワード１Ｂとを用いた演算を行い、第１演算部２１−２はワード２Ａとワード２Ｂとを用いた演算を行い、第１演算部２１−３はワード３Ａとワード３Ｂとを用いた演算を行う。つまり、第１演算部２１−０〜２１−３の各々において行われる処理は、スライス間でのデータの通信が無く、各スライス内で完結する処理である。以下、第１演算部２１−０〜２１−３を区別しない場合には、一括して第１演算部２１と呼ぶことにする。第１演算部２１における処理は、処理ステージＰＳ１において実行される。そして、第１演算部２１において得られた３２ビットの演算結果が、第２演算器２０の演算結果として出力される。
【００１７】
＜プロセッサの動作について＞  
図２は、プロセッサ１におけるパイプライン処理の様子を示すタイミングチャートであり、第１演算器１０及び第２演算器２０における処理内容の流れを示している。
【００１８】
まず、第２演算器２０における処理について説明する。図示するように第２演算器２０では、各処理サイクルにおいて、第１演算部２１−０〜２１−３がそれぞれスライスＳ０〜Ｓ３に関する演算を、並行して行う。つまり、各処理サイクルにおける演算はそれぞれ独立しており、その演算内容は各スライス内で完結するものである。
【００１９】
次に第１演算器１０における処理について説明する。図示するように、第１演算器１０における第１演算部１１の処理は、第２演算器２０における第１演算部２１の処理と同様である。第２演算器２０と異なる点は、第１演算部１１の処理と並行して、第２演算部１２の処理が行われる点にある。つまり、第ｎ（ｎは２以上の自然数）サイクルにおいて第２演算部１２は、第（ｎ−１）サイクルで第１演算部１１−０〜１１−３で得られた演算結果を用いた処理を行う。すなわち、スライスＳ０〜Ｓ３にまたがった処理を行う。つまり、第２演算部１２における演算は、第１演算部１１における演算に対して１サイクルのレイテンシを有して実行される。
【００２０】
次に、上記第１演算器１０及び第２演算器２０で行われる処理の具体例について説明する。  
まず第２演算器２０について説明する。前述の通り、第２演算器２０で行われる処理はスライス間でのデータの通信を生じさせない処理である。その具体例は、例えば加算命令、減算命令、論理演算命令、または積和命令である。加算命令の場合には、第１演算部２１−０はワード０Ａとワード０Ｂとの加算を行い、第１演算部２１−１はワード１Ａとワード１Ｂとの加算を行い、第１演算部２１−２はワード２Ａとワード２Ｂとの加算を行い、第１演算部２１−３はワード３Ａとワード３Ｂとの加算を行う。
【００２１】
次に第１演算器１０について説明する。前述の通り、第１演算器１０で行われる処理はスライス間でのデータの通信を生じさせる処理である。その具体例は、例えばシフト（shift）命令、ローテート（rotate）命令、またはシャッフル（shuffle）命令などである。
【００２２】
以下、上記の３つの命令の詳細について説明する。まず、レジスタＲＡ、ＲＢ内に保持されるデータについて、図３及び図４を用いて説明する。図３及び図４はそれぞれ、レジスタＲＡ、ＲＢの構成を模式的に示す概念図である。
【００２３】
図示するように、レジスタＲＡ、ＲＢにおいて、ワード０Ａ〜３Ａ、ワード０Ｂ〜３Ｂに順次含まれる１バイトのデータを、以下バイトＢ００〜Ｂ３１と呼ぶことにする。すなわち、ワード０Ａに含まれるデータは、上位ビットから順にバイトＢ００〜Ｂ０３である。またワード１Ａに含まれるデータは、上位ビットから順にバイトＢ０４〜Ｂ０７である。ワード２Ａに含まれるデータは、上位ビットから順にバイトＢ０８〜Ｂ０１１である。ワード３Ａに含まれるデータは、上位ビットから順にバイトＢ１２〜Ｂ１５である。ワード０Ｂに含まれるデータは、上位ビットから順にバイトＢ１６〜Ｂ１９である。ワード１Ｂに含まれるデータは、上位ビットから順にバイトＢ２０〜Ｂ２３である。ワード２Ｂに含まれるデータは、上位ビットから順にバイトＢ２４〜Ｂ２７である。そして、ワード３Ｂに含まれるデータは、上位ビットから順にバイトＢ２８〜Ｂ３１である。
【００２４】
［シフト命令について］  
まず、シフト命令について説明する。図５は、シフト命令において実行される処理内容を示すプログラムの概念図である。図５では、レジスタＲＡの内容をバイト毎に上位ビット側へシフトする場合（左シフト）について示している。図５における左端に示す数字はプログラムの行番号であり、“＜−”は、右辺の値が左辺に代入されることを示す。またＲＡ、ＲＢはそれぞれレジスタＲＡ、ＲＢを示し、ＲＴはターゲットレジスタを示す。ターゲットレジスタＲＴはプロセッサ１に備えられ（図１では省略）、第１演算器１０や第２演算器２０における演算結果を格納するレジスタである。またＲＡ、ＲＢ、ＲＴの直後に記載した“（ｉ：ｊ）”は、各レジスタにおけるｉビット目からｊビット目までのデータであることを示す。すると、各レジスタは４スライス（＝４×３２ビット）を保持可能であるから、ｉ、ｊは０〜１２７までの値である。
【００２５】
図示するように、まずある値ｓに、レジスタＲＢの例えば２７〜３１ビットで示される値（０〜３１のいずれか）が代入される（図５の１行目参照）。ｓは、シフト量を示す。ｓ＝１であれば１バイト毎シフトされ、ｓ＝２であれば２バイト毎シフトされる。
【００２６】
そしてｓ＝０〜１５であれば、ターゲットレジスタＲＴにおける０〜（１２７−（ｓ×８））ビットの内容として、レジスタＲＡにおける（ｓ×８）〜１２７ビットの内容が格納される（図５の２、３行目参照）。そして、ターゲットレジスタにおける残りの下位ビットには、“０”が格納される（図５の４行目参照）。
【００２７】
他方、ｓ＝１６〜３１であれば、ターゲットレジスタＲＴの全ビットが“０”とされる（図５の５、６行目参照）。以上の結果、ターゲットレジスタＲＴには、レジスタＲＡ内のデータを左方向へｓバイトだけシフトさせたデータが格納される。
【００２８】
図６は、シフト命令を実行するための構成を示す概念図であり、ターゲットレジスタＲＴも図示している。ターゲットレジスタＲＴは、４つのスライス分のデータを保持可能である。すなわち、（３２ビット×４）＝１２８ビットのデータを保持出来る。以下、レジスタＲＴに保持されるデータを、上位ビットから順にバイトＢ３２〜Ｂ４７と呼ぶことにする。またバイトＢ３２〜Ｂ３５をワード０Ｔ、バイトＢ３６〜Ｂ３９をワード１Ｔ、バイトＢ４０〜Ｂ４３をワード２Ｔ、及びバイトＢ４４〜Ｂ４７をワード３Ｔと呼ぶことにする。
【００２９】
演算器は、デコーダ１３及び複数の選択回路（バイトレベルマルチプレクサ：byte level multiplexer）１４を備えている。以降、本明細書における「選択回路」は、特に断らない限りは全てバイトレベルマルチプレクサである。デコーダ１３は、レジスタＲＢにおける２７〜３１バイトの値（ｓ）をデコードし、デコード結果に応じて選択回路１４を制御する。
【００３０】
選択回路１４は、ターゲットレジスタＲＴにおけるバイト毎に設けられている。そして各選択回路１４は、自身が対応づけられたバイトとして格納すべきデータ（レジスタＲＡにおけるバイトＢ００〜Ｂ１５、または“０”のいずれか）を、デコーダ１３の制御に従って選択し、ターゲットレジスタＲＴに格納する。
【００３１】
例えばターゲットレジスタＲＴのバイトＢ３２に対応づけられた選択回路１４は、バイトＢ００〜Ｂ１５のいずれかを選択する。すなわちｓ＝０であればバイトＢ００を選択し、ｓ＝１であればバイトＢ０１を選択し、ｓ＝１５であればバイトＢ１５を選択し、ターゲットレジスタＲＴのバイトＢ３２に代入する。
【００３２】
またターゲットレジスタＲＴのバイトＢ３３に対応づけられた選択回路１４は、バイトＢ０１〜Ｂ１５、及び“０”のいずれかを選択する。すなわちｓ＝０であればバイトＢ０１を選択し、ｓ＝１であればバイトＢ０２を選択し、ｓ＝１５であれば“０”を選択し、ターゲットレジスタＲＴのバイトＢ３３に代入する。以下、ターゲットレジスタＲＴのバイトＢ３４〜Ｂ４７に対応づけられた選択回路１４もまた同様である。
【００３３】
従って、シフト命令においては、スライス間でのデータ（バイト）の移動が生じる。すなわち、例えばｓ＝１であれば、ワード０ＴのバイトＢ３２〜Ｂ３５には、レジスタＲＡにおけるバイトＢ０１〜Ｂ０３（これらはスライスＳ０に属する）と、バイトＢ０４（スライスＳ１に属する）とが代入されるからである。
【００３４】
［ローテート命令について］  
次に、ローテート命令について説明する。図７は、ローテート命令において実行される処理内容を示すプログラムの概念図である。図７は図５と同様のルールにて表記している。ローテート命令は上記シフト命令において、例えば左シフトすることによってターゲットレジスタＲＴに格納されなかったデータを、ターゲットレジスタＲＴにおける下位ビットに格納するものである。図７では、レジスタＲＡの内容をバイト毎に上位ビット側へローテートする場合（左シフト）について示している。
【００３５】
図示するように、まずある値ｓに、レジスタＲＢの例えば２８〜３１ビットで示される値（０〜１５のいずれか）が代入される（図７の１行目参照）。ｓは、ローテートする際のシフト量を示す。ｓ＝１であればあバイト毎シフトされ、ｓ＝２であれば２バイト毎シフトされる。
【００３６】
そして、ｓ＝０であれば、ターゲットレジスタＲＴの０〜１２７ビットには、レジスタＲＡの０〜１２７ビットのデータがそのまま代入される（図７の２、３行目参照）。
【００３７】
ｓ＝１〜１５であれば、ターゲットレジスタＲＴの０〜（１２７−（ｓ×８））ビットに、レジスタＲＡの（ｓ×８）〜１２７ビットが代入され、ターゲットレジスタＲＴの（１２７−（ｓ×８））〜１２７ビットに、レジスタＲＡの０〜（（ｓ×８）−１）ビットが代入される。
【００３８】
図８は、ローテート命令を実行する演算器の構成を示す概念図であり、ターゲットレジスタＲＴも図示している。図示するように演算器は、デコーダ１５及び複数の選択回路１６を備えている。デコーダ１５は、レジスタＲＢにおける２８〜３１バイトの値をデコードし、デコード結果（＝ｓ）に応じて選択回路１６を制御する。
【００３９】
選択回路１６は、ターゲットレジスタＲＴにおけるバイト毎に設けられている。そして各選択回路１６は、自身が対応づけられたバイトとして格納すべきデータ（レジスタＲＡにおけるバイトＢ００〜Ｂ１５のいずれか）を、デコーダ１５の制御に従って選択し、ターゲットレジスタＲＴに格納する。
【００４０】
例えばｓ＝１の場合、ターゲットレジスタＲＴのバイトＢ３２に対応づけられた選択回路１６はバイトＢ０１を選択し、バイトＢ３３に対応づけられた選択回路１６はバイトＢ０２を選択し、バイトＢ４７に対応づけられた選択回路１６はバイトＢ００を選択する。またｓ＝２の場合、ターゲットレジスタＲＴのバイトＢ３２に対応づけられた選択回路１６はバイトＢ０２を選択し、バイトＢ３３に対応づけられた選択回路１６はバイトＢ０３を選択し、バイトＢ４６に対応づけられた選択回路１６はバイトＢ００を選択し、バイトＢ４７に対応づけられた選択回路１４はバイトＢ０１を選択する。
【００４１】
［シャッフル命令について］  
次に、シャッフル命令について説明する。以下では、バイト単位のシャッフル命令を例に挙げて説明する。シャッフル命令は、ターゲットレジスタＲＴの各バイトに、レジスタＲＡにおけるバイトＢ００〜Ｂ１５のいずれか、レジスタＲＢにおけるバイトＢ１６〜Ｂ３１のいずれか、または固定値を代入する演算である。図９は、シャッフル命令において実行される処理内容を示すプログラムの概念図である。図９も図５と同様のルールにて表記している。シャッフル命令を実行する際には、レジスタＲＡ、ＲＢの他に、レジスタＲＣが使用される。そしてレジスタＲＣ内のデータに応じて、ターゲットレジスタＲＴに格納される値が決定される。
【００４２】
図９において、ｊには０〜１５のいずれかの値が順次代入される。以下、数字の先頭に付記する“０ｂ”は、当該数字が２進数表記であることを示し、“０ｘ”は１６進数表記であることを示す。表記の無い数字は１０進数表記である。
【００４３】
レジスタＲＣの（ｊ×８）〜（ｊ×８＋１）ビットの値が“０ｂ１０”であれば、ターゲットレジスタＲＴの（ｊ×８）〜（（ｊ＋１）×８−１）ビットには、固定値“０ｂ００００００００”（＝“０ｘ００”）が代入される。また、レジスタＲＣの（ｊ×８）〜（ｊ×８＋２）ビットの値が“０ｂ１１０”であれば、ターゲットレジスタＲＴの（ｊ×８）〜（（ｊ＋１）×８−１）ビットには、固定値“０ｂ１１１１１１１１”（＝“０ｘＦＦ）が代入される。更に、レジスタＲＣの（ｊ×８）〜（ｊ×８＋２）ビットの値が“０ｂ１１１”であれば、ターゲットレジスタＲＴの（ｊ×８）〜（（ｊ＋１）×８−１）ビットには、固定値“０ｂ１０００００００”（＝“０ｘ８０”）が代入される。
【００４４】
それ以外の場合には、ターゲットレジスタＲＴの（ｊ×８）〜（（ｊ＋１）×８−１）ビットには、レジスタＲＡまたはＲＢにおける（ｂ×８）〜（（ｂ＋１）×８−１）ビットの値が代入される。但しｂの値は、レジスタＲＣにおける（（ｊ×８）＋３）〜（（ｊ×８）＋７）ビットで示される値であり、０〜３１のいずれかの値を取る。また、（（ｂ×８）〜（（ｂ＋１）×８−１））＝０〜２５５で表されるビットは、レジスタＲＡにおけるバイトＢ００からレジスタＲＢにおけるバイトＢ３１に相当する。従って、ｂ＝１６の場合には、１２８〜１３５ビットの値、すなわちレジスタＲＢにおけるバイトＢ００が、ターゲットレジスタＲＴにおいて対応するバイトに代入される。
【００４５】
以上の代入を、ｊ＝０からｊ＝１５まで繰り返す。そして、ｊ＝ｉ（ｉは０〜１５のいずれか）の場合において、ターゲットレジスタＲＴにおけるＢ（ｉ＋３２）への代入が行われる。
【００４６】
図１０は、シャッフル命令を実行する演算器の構成を概念的に示すブロック図であり、ターゲットレジスタＲＴも図示している。図示するように第１演算器１０は、それぞれがレジスタＲＴのバイトＢ（ｉ＋３２）毎（ｉは０〜１５のいずれか）に設けられた複数のデコーダ１７、複数の選択回路１８、及び複数のマスク論理１９を備えている。
【００４７】
デコーダ１７は、対応するレジスタＲＣにおけるビット（ｉ×８）〜（（ｉ×８）＋７）をデコードする。そして、デコード結果に応じて、対応する選択回路１８及びマスク論理１９を制御する。
【００４８】
選択回路１４の各々は、レジスタＲＡにおけるバイトＢ００〜Ｂ１５及びレジスタＲＢにおけるＢ１６〜Ｂ３１のいずれかを、対応するデコーダ１７の制御に従って選択し、マスク論理１９へ出力する。
【００４９】
マスク論理１９は、対応するデコーダ１７の制御に従い、固定値、または対応する選択回路１８から与えられるデータ（Ｂ００〜Ｂ３１のいずれか）、対応するバイトに格納する。すなわち、デコーダ１７におけるデコードの結果、レジスタＲＣの値が“０ｂ１０”、“０ｂ１１０”、または“０ｂ１１１”であれば、ターゲットレジスタＲＴに固定値を格納し、それ以外の場合には選択回路１８から与えられるデータを格納する。
【００５０】
以上のようにシャッフル命令においては、レジスタＲＣにおける制御データに応じてランダムに、レジスタＲＡ、ＲＢにおけるいずれかのバイトがターゲットレジスタＲＴに格納される。従ってシャッフル命令では、スライス間でのデータ（バイト）の移動が生じる。
【００５１】
上記の図６、図８、及び図１０に示す演算器が、図１における第１演算器１０に相当する。そして、各演算器において、スライス間でのデータの行き来の生じない演算は処理ステージＰＳ１で実行され、スライス間でのデータの行き来の生じる演算は処理ステージＰＳ２で実行される。
【００５２】
＜効果＞  
以上のように、この発明の第１の実施形態に係るプロセッサであると、ＬＳＩの自動設計において、半導体素子の配置の乱れを抑制出来る。その結果、配置及びレイアウトや動作タイミングの設計を容易にし、且つ高速化出来る。以下、本効果について詳細に説明する。
【００５３】
placement drivenの論理合成ツールを用いることにより演算ユニットを一括して物理実装する場合、加算器など、用いるデータがスライス毎に独立している演算器は、それを構成するスタンダードセルはスライス毎に集まって配置される傾向にある。また、同一演算器内において、互いに異なるスライスを使用するスタンダードセル群は、比較的距離が離れて配置されやすい。これは、同一スライスを使用するスタンダードセルのゲート同士は、相互に接続されているために、近接してまとめて配置された方が配線遅延を小さく出来るからである。これにより、動作タイミングの観点から優れた設計が可能となる。また、異なるスライスを使用するスタンダードセル群間では、相互に大きな束縛条件が無いからである。
【００５４】
更に、各演算器のスタンダードセル群は、使用するデータ、つまりスライスが同一であるもの同士（例えば加算器のスライスＳ０と、論理演算器のスライスＳ０など）が、近くに配置されやすい。これは、スライス番号が共通な演算器は、データのソースとなる汎用レジスタのビット番号が共通であるからである。つまり、パイプライン動作するプロセッサでは、パイプラインの処理ステージの配線長を短くして高速に物理実装するためには、スライス番号が共通の演算器同士を近づけて配置した方が有利だからである。
【００５５】
その結果、演算ユニットを一括してplacement drivenの論理合成ツールで物理実装する場合、ＬＳＩのレイアウトは、図１１に示すようになる。図１１はＬＳＩのレイアウトを示す模式図であり、演算器の配置をスライス毎に示したものである。図示するように、汎用レジスタ２（またはオペランドＦ／Ｆ）を始点にして、スライス毎の大きな領域３−０〜３−３が自然に形成されて配置され易い。図中において、領域３−０〜３−３はそれぞれ、スライスＳ０〜Ｓ３を使用するスタンダードセル（演算器）の集合である。そしてこのような配置とすることで、各領域３−０〜３−３における配線長を短く出来、動作タイミングの観点からも優れた設計となる。
【００５６】
しかし、シャッフル演算を行う演算器（以下、シャッフラー（shuffler））の場合には、その性質としてスライス間の通信をサポートするという特徴がある。従って、スライス間の境界に注意をしない実装をすると、演算器を構成するスタンダードセル群は、配置上、スライスの区別の無い大きなかたまりになりやすい。そのため、シャッフラーがＳＩＭＤ演算器群や論理演算器と混在するＬＳＩでは、シャッフラーを構成するスタンダードセル群のかたまりの大きさから、ＬＳＩ全体として演算器の配置が乱れるという問題がある。その結果、一部のオペランド供給のバスが必要以上に長くなったり、演算器が小さくまとまりきれずに配置されたりするため、配線遅延が増大し、動作タイミングの最適化が困難となる。そしてこの問題により、ＬＳＩの動作速度が低下するという問題があった。
【００５７】
また、従来のシャッフラーの設計はカスタム設計により行われていた。つまり、人手によって、演算器の配置やレイアウト及びタイミングの制御が行われていた。従って、そもそも上記のような自動設計を用いた際に生ずる問題に対する配慮は行われてこなかった。しかし人手による設計は、近年の高速設計の時代に適うものでは無く、また開発者にとって大きな負担となるとともに、開発費の高騰の原因ともなっていた。以上の問題はシャッフラーだけでなく、スライス間の通信をサポートする全ての演算器において共通する問題である。
【００５８】
しかし、本実施形態に係るＬＳＩであると、スライス間の通信をサポートする演算器において、スライス間の通信が生じる演算部分と、生じない演算部分とを分離している。より具体的には、それぞれを異なる処理ステージに配置している。更に言い換えれば、スライス間でビットまたはバイトの移動を要する演算と、要しない演算との間に、パイプライン処理における１つ以上の処理ステージに相当するレイテンシを設けている。
【００５９】
前述の通りパイプライン動作を行うＬＳＩでは、配線遅延や動作タイミング等の条件が厳しいのは、同一の処理ステージ内においてである。従って、自動設計の場合には、同一の処理ステージ内におけるスタンダードセルが、スライス毎に集まって配置されやすい。
【００６０】
従って本実施形態に係る構成であると、スライス間の通信が生じない演算部分を含む処理ステージでは、図１１に示すような配置が可能となる。すなわち、placement drivenの論理合成ツールを用いて自動設計を行った場合であっても、スタンダードセルがスライス毎に配置される。そのため、配線遅延を低減し、動作タイミングを最適化出来、その結果、ＬＳＩの動作速度を向上出来る。
【００６１】
なお、図１における処理ステージＰＳ２では、第２演算部１２においてスライス間の通信が生じる演算が行われている。従って、処理ステージＰＳ２ではスタンダードセルの配置の乱れが生じるが、ＬＳＩ全体として見た配線の乱れは、従来に比べて大幅に低減出来る。
【００６２】
以上のように、自動設計を用いた場合であっても、高速動作出来るＬＳＩの設計が可能となる。従って、人手による設計を削減し、ＬＳＩ開発の省力化を図ることが出来るとともに、開発費を削減出来る。
【００６３】
［第２の実施形態］  
次に、この発明の第２の実施形態に係る演算器及び半導体集積回路装置について説明する。本実施形態は、上記第１の実施形態で説明したプロセッサ１のより具体的な構成に関するものである。
【００６４】
＜プロセッサの全体構成について＞  
図１２は、本実施形態に係るプロセッサ１の回路図である。図示するようにプロセッサ１は、順次処理が行われる５段の処理ステージＰＳ１〜ＰＳ５を含むパイプライン動作を行い、また第１の実施形態と同様にスライス単位でＳＩＭＤ動作を行う。スライスの一例は３２ビットである。またプロセッサ１は、汎用レジスタ２、バスＢＳ−Ａ、ＢＳ−Ｂ、ＢＳ−Ｃ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５、ＢＳ−ＬＳ、ＢＳ−Ａ０〜ＢＳ−Ａ３、ＢＳ−Ｂ０〜ＢＳ−Ｂ３、ＢＳ−Ｃ０〜ＢＳ−Ｃ３、ロードストアユニット（load and store unit）３０、選択回路３１〜４１、６８、６９、７０、フリップフロップ４２〜４８、及び積和演算器５０、算術演算器５１、論理演算器５２、及びシャッフラー５３を備えている。
【００６５】
汎用レジスタ２は、第１の実施形態で説明したレジスタＲＡ〜ＲＢ、ＲＴを含み、データを保持する。汎用レジスタ２の構成について図１３を用いて説明する。図１３は、汎用レジスタ２の内部構成を示すブロック図である。
【００６６】
図示するように汎用レジスタ２は、メモリ７１及びレジスタ７２〜７５を備えたマルチポートレジスタファイルである。メモリ７１は、各々が例えば１２８ビットのデータを保持可能な１２８（＝４スライス）個のエントリＥ０〜Ｅ１２７を備えた半導体メモリである。
【００６７】
レジスタ７２〜７４は、フリップフロップと選択回路とを備える。そして、選択回路がメモリ７１のエントリＥ０〜Ｅ１２７の各々からいずれか１ビットを選択し、選択したデータをフリップフロップに格納する。その結果、レジスタ７２〜７４は、メモリ７１から読み出した１２８ビットのデータを保持する。そしてレジスタ７２〜７４がそれぞれ、上記第１の実施形態で説明したレジスタＲＡ〜ＲＣに相当する。
【００６８】
レジスタ７５も、フリップフロップと選択回路とを備える。そして、選択回路６９から与えられる１２８ビットのデータを、フリップフロップに格納する。更に、レジスタ７５内において選択回路が、フリップフロップに格納された１２８ビットのデータを１ビットずつ選択し、選択したビットをメモリ７１のエントリＥ０〜Ｅ１２７の各々に格納する。レジスタ７５は、上記第１の実施形態で説明したターゲットレジスタＲＴに相当する。
【００６９】
図１２に戻って、引き続きプロセッサ１の構成について説明する。  
バスＢＳ−Ａ〜ＢＳ−Ｃのそれぞれには、レジスタＲＡ〜ＲＣからそれぞれ与えられる１２８ビットのデータを伝送する。またバスＢＳ−ＰＳ４、ＢＳ−ＰＳ５は、処理ステージＰＳ４、ＰＳ５で得られた１２８ビット（４スライス）のデータをそれぞれ伝送する。更にバスＢＳ−ＬＳは、ロードストアユニット３０から与えられる１２８ビットのデータを伝送する。
【００７０】
ロードストアユニット３０は、バスＢＳ−Ａ〜ＢＳ−Ｃを介して、必要なデータをレジスタＲＡ〜ＲＣから読み出すと共に、必要に応じてデータをバスＢＳ−ＬＳに出力する。
【００７１】
選択回路３１は、バスＢＳ−Ｃ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５、ＢＳ−ＬＳ上のデータのいずれかを選択し、選択したデータをスライス毎にフリップフロップ４２に格納する。選択回路３２は、バスＢＳ−Ａ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５、ＢＳ−ＬＳ上のデータのいずれかを選択し、選択したデータをスライス毎にフリップフロップ４３に格納する。選択回路３３は、バスＢＳ−Ｂ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５、ＢＳ−ＬＳ上のデータのいずれかを選択し、選択したデータをスライス毎にフリップフロップ４４に格納する。
【００７２】
フリップフロップ４２〜４４の各々は、それぞれスライスと同じ数（４個）設けられ、それぞれがスライスＳ０〜Ｓ３に対応づけられている。そして、選択回路３１〜３３によって与えられるデータ（スライス）をそれぞれ保持する。
【００７３】
選択回路３４、３６、３８、４０は、バスＢＳ−Ｂ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５、ＢＳ−ＬＳ上のデータのいずれかを選択し、選択したデータをフリップフロップ４５〜４８にそれぞれ格納する。フリップフロップ４５〜４８の各々は、それぞれ選択回路３４、３６、３８、４０によって与えられるデータをそれぞれ保持する。そしてフリップフロップ４５〜４８は同じデータを保持し、それぞれに保持されたデータがスライスＳ０〜Ｓ３の制御用データとして使用される。
【００７４】
選択回路３５、３７、３９、４１は、バスＢＳ−Ｃ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５、ＢＳ−ＬＳ上のデータのいずれかを選択し、選択したデータをレジスタＲＤ、ＲＥ、ＲＦ、ＲＧにそれぞれ格納する。レジスタＲＤ〜ＲＧの各々は、それぞれ選択回路３５、３７、３９、４１によって与えられるデータをそれぞれ保持する。シャッフラー５３においてシャッフル演算を行う場合には、レジスタＲＤ〜ＲＧの全てにレジスタＲＣのデータが格納される。そして、レジスタＲＤ〜ＲＦのそれぞれに格納されたデータが、スライスＳ０〜Ｓ３に関する演算の制御用データとして使用される。
【００７５】
バスＢＳ−Ａ０〜ＢＳ−Ａ３のそれぞれは、フリップフロップ４３の各々によって与えられる、レジスタＲＡにおけるスライス０〜スライスＳ３を伝送する。また、バスＢＳ−Ｂ０〜ＢＳ−Ｂ３のそれぞれは、フリップフロップ４４の各々によって与えられる、レジスタＲＢにおけるスライス０〜スライスＳ３を伝送する。更にバスＢＳ−Ｃ０〜ＢＳ−Ｃ３のそれぞれは、フリップフロップ４２の各々によって与えられる、レジスタＲＣにおけるスライス０〜スライスＳ３を伝送する。
【００７６】
積和演算器５０は、２つの処理ステージＰＳ３、ＰＳ４において、レジスタＲＡ〜ＲＣにおけるデータの積和処理を行う。積和処理とは、ある時刻において入力データの乗算を行ってこれを蓄積し、次の時刻において次の入力信号の乗算を行い、更にその乗算結果と蓄積されている前の時刻の乗算結果とを加算して蓄積する処理のことを言う。本実施形態に係る積和演算器５０は、スライス単位のＳＩＭＤ動作により上記積和処理を実行する。そして積和処理においては、スライス間でのデータの通信は行われない。従って積和演算器５０は、上記第１の実施形態で説明した第２演算器２０に相当する。
【００７７】
算術演算器５１は、処理ステージＰＳ３において、レジスタＲＡ、ＲＢにおけるデータの算術演算を行う。算術演算の具体例は、例えば加算命令や減算命令である。本実施形態に係る算術演算器５１は、スライス単位のＳＩＭＤ動作により上記算術演算を実行する。そして上記算術処理においては、スライス間でのデータの通信は行われない。従って算術演算器５１も、上記第１の実施形態で説明した第２演算器２０に相当する。
【００７８】
論理演算器５２は、処理ステージＰＳ３において、レジスタＲＡ、ＲＢにおけるデータの論理演算を行う。論理演算の具体例は、例えば論理積（ＡＮＤ）命令、論理和（ＯＲ）命令、または排他的論理和（ＸＯＲ）命令である。本実施形態に係る論理演算器５２は、スライス単位のＳＩＭＤ動作により上記論理演算を実行する。そして上記論理処理においては、スライス間でのデータの通信は行われない。従って論理演算器５２は、上記第１の実施形態で説明した第２演算器２０に相当する。
【００７９】
シャッフラー５３は、２つの処理ステージＰＳ３、ＰＳ４において、レジスタＲＡ、ＲＢにおけるデータを用いたシャッフル演算を行う。シャッフル演算の詳細は第１の実施形態で説明した通りである。本実施形態に係るシャッフラー５３も、スライス単位のＳＩＭＤ動作により上記シャッフル演算を実行する。シャッフラー５３は、上記第１の実施形態で説明した第１演算器１０に相当する。
【００８０】
選択回路７０は処理ステージＰＳ４において、算術演算器５１における演算結果（１２８ビット＝４スライス）と、論理演算器５２における演算結果（１２８ビット＝４スライス）とのいずれかを選択し、バスＢＳ−ＰＳ４に出力する。
【００８１】
フリップフロップ６６の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ４において、算術演算器５１におけるスライスＳ０〜Ｓ３についての演算結果をそれぞれ格納する。
【００８２】
フリップフロップ６７の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ４において、論理演算器５２におけるスライスＳ０〜Ｓ３についての演算結果をそれぞれ格納する。
【００８３】
選択回路６８は処理ステージＰＳ５において、積和演算器５０における演算結果（１２８ビット＝４スライス）、フリップフロップ６６に格納されたデータ（１２８ビット＝４スライス）、フリップフロップ６７に格納されたデータ（１２８ビット＝４スライス）、及びシャッフラー５３における演算結果（１２８ビット＝４スライス）のいずれかを選択し、バスＢＳ−ＰＳ５に出力する。
【００８４】
次に、上記構成のプロセッサ１における積和演算器５０、算術演算器５１、論理演算器５２、及びシャッフラー５３の構成について説明する。  
＜積和演算器５０について＞  
本実施形態に係る積和演算器５０は、複数の乗算器５４、複数の加算器５６、及び複数のフリップフロップ５５、５７を備えている。
【００８５】
乗算器５４の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられており、処理ステージＰＳ３においてそれぞれスライスＳ０〜Ｓ３についての乗算を行う。すなわち乗算器５４の各々は、バスＢＳ−Ａ０〜Ａ３、ＢＳ−Ｂ０〜Ｂ３、ＢＳ−Ｃ０〜Ｃ３からデータを受け取る。そして、レジスタＲＡ〜ＲＣのスライスＳ０の乗算、レジスタＲＡ〜ＲＣのスライスＳ１の乗算、レジスタＲＡ〜ＲＣのスライスＳ２の乗算、及びレジスタＲＡ〜ＲＣのスライスＳ３の乗算をそれぞれ行う。
【００８６】
フリップフロップ５５の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ３において、乗算器５４の各々におけるスライスＳ０〜Ｓ３についての乗算結果を格納する。
【００８７】
加算器５６の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられており、処理ステージＰＳ４においてそれぞれスライスＳ０〜Ｓ３についての加算を行う。すなわち加算器５４の各々は、フリップフロップ５５の各々に保持される乗算結果と、当該乗算結果が得られた乗算の直前の処理サイクルに処理ステージＰＳ３で得られた乗算結果とを、スライス毎に加算する。
【００８８】
フリップフロップ５７の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ４において、加算器５６の各々におけるスライスＳ０〜Ｓ３についての加算結果を格納する。そしてフリップフロップ５７に保持されたデータが、選択回路６８に与えられる。
【００８９】
＜算術演算器５１について＞  
本実施形態に係る算術演算器５１は、複数の演算器（加算器または減算器）５８、及び複数のフリップフロップ５９を備えている。
【００９０】
演算器５８の各々はそれぞれスライスＳ０〜Ｓ３に対応づけられており、処理ステージＰＳ３においてそれぞれスライスＳ０〜Ｓ３についての加算または減算を行う。すなわち演算器５８の各々は、バスＢＳ−Ａ０〜Ａ３及びＢＳ−Ｂ０〜Ｂ３からデータを受け取る。そして、レジスタＲＡ、ＲＢのスライスＳ０の加算または乗算、レジスタＲＡ、ＲＢのスライスＳ１の加算または乗算、レジスタＲＡ、ＲＢのスライスＳ２の加算または乗算、及びレジスタＲＡ、ＲＢのスライスＳ３の加算または乗算を行う。
【００９１】
フリップフロップ５９の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ３において、演算器５８の各々におけるスライスＳ０〜Ｓ３についての算術演算結果を格納する。そしてフリップフロップ５９に保持されたデータが、選択回路７０及びフリップフロップ６６に与えられる。
【００９２】
＜論理演算器５２について＞  
本実施形態に係る論理演算器５２は、複数の演算器６０、及び複数のフリップフロップ６１を備えている。演算器６０は、例えばＡＮＤ演算、ＯＲ演算、またはＸＯＲ演算を行う。
【００９３】
演算器６０の各々はそれぞれスライスＳ０〜Ｓ３に対応づけられており、処理ステージＰＳ３においてそれぞれスライスＳ０〜Ｓ３についての論理演算を行う。すなわち演算器６０の各々は、バスＢＳ−Ａ０〜Ａ３及びＢＳ−Ｂ０〜Ｂ３からデータを受け取る。そして、レジスタＲＡ、ＲＢのスライスＳ０の論理演算、レジスタＲＡ、ＲＢのスライスＳ１の論理演算、レジスタＲＡ、ＲＢのスライスＳ２の論理演算、及びレジスタＲＡ、ＲＢのスライスＳ３の論理演算を行う。
【００９４】
フリップフロップ６１の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ３において、演算器６０の各々におけるスライスＳ０〜Ｓ３についての論理演算結果を格納する。そしてフリップフロップ６１に保持されたデータが、選択回路７０及びフリップフロップ６７に与えられる。
【００９５】
＜シャッフラー５３について＞  
本実施形態に係るシャッフラー５３は、複数の第１演算部６２−０〜６２−３、第２演算部６４、及び複数のフリップフロップ６３−０〜６３−３、６５を備えている。
【００９６】
第１演算部６２−０〜６２−３の各々は、第１の実施形態で説明した図１における第１演算部１１−０〜１１−３に相当する。すなわち第１演算部６２−０〜６２−３は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ３において、それぞれスライスＳ０〜Ｓ３についてのシャッフル演算に関する処理を行う。すなわち第１演算部６２−０〜６２−３の各々は、バスＢＳ−Ａ０〜Ａ３及びＢＳ−Ｂ０〜Ｂ３から、シャッフルすべきデータを受け取る。更に、レジスタＲＤ〜ＲＧ及びフリップフロップ４５〜４８からそれぞれ制御信号を受け取る。そして、これらのデータと制御信号とに基づいて、スライス間でのデータ通信を必要としない処理を行う。
【００９７】
フリップフロップ６３−０〜６３−３の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ３において、第１演算部６２−０〜６２−３の各々におけるスライスＳ０〜Ｓ３についての演算結果を格納する。
【００９８】
第２演算部６４は、第１の実施形態で説明した図１における第２演算部１２に相当する。すなわち第２演算部６４は、フリップフロップ６３−０〜６３−３に保持されるデータにつき、スライス間でのデータの通信を必要とする処理を行い、シャッフル演算を完了させる。
【００９９】
フリップフロップ６５の各々は、それぞれスライスＳ０〜Ｓ３に対応づけられている。そして処理ステージＰＳ４において、第２演算部６４で得られたシャッフル演算結果を格納する。そしてフリップフロップ６５に保持されたデータが、選択回路６８に与えられる。
【０１００】
＜プロセッサ全体の大まかな動作について＞  
次に、上記構成のプロセッサ１の大まかな動作について説明する。パイプライン動作は、処理ステージＰＳ１からＰＳ２、ＰＳ３、ＰＳ４、及びＰＳ５の順序で実行される。
【０１０１】
処理ステージＰＳ１においては、汎用レジスタ２内においてレジスタＲＡ〜ＲＣにデータが読み出される。また、必要に応じてデータがターゲットレジスタＲＴに書き込まれる。
【０１０２】
次に処理ステージＰＳ２においては、レジスタＲＡ〜ＲＣ内のデータが、バスＢＳ−Ａ〜ＢＳ−Ｃ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５に供給される。すなわち、各バスにオペランドが供給される。また必要に応じて、ロードストアユニット３０がバスＢＳ−ＬＳにデータを供給する。
【０１０３】
次に処理ステージＰＳ３においては、積和演算器５０、算術演算器５１、論理演算器５２、及びシャッフラー５３における演算が行われる。但し、シャッフラー５３において行われる演算は、スライス間でのデータ通信を生じない演算に限られる。
【０１０４】
引き続き処理ステージＰＳ４においては、積和演算器５０及びシャッフラー５３における演算が行われる。シャッフラー５３において行われる演算は、スライス間でのデータ通信が生じる演算である。また、処理ステージＰＳ４では算術演算器５１及び論理演算器５２における演算が既に完了している。従って、本処理ステージＰＳ４において、算術演算器５１及び論理演算器５２における演算結果を、バスＢＳ−ＰＳ４に供給しても良い。バスＢＳ−ＰＳ４に供給された演算結果の汎用レジスタ２への書き戻しは、上記処理ステージＰＳ１において行われる。
【０１０５】
最後に処理ステージＰＳ５においては、フリップフロップ５７、６６、６７、６５に格納された演算結果が、バスＢＳ−ＰＳ５に供給される。バスＢＳ−ＰＳ５に供給された演算結果の汎用レジスタ２への書き戻しは、上記処理ステージＰＳ１において行われる。
【０１０６】
次に、上記シャッフラー５３の詳細な構成と動作について説明する。
【０１０７】
＜シャッフラー５３の構成の詳細について＞  
図１４は、シャッフラー５３の詳細を示す回路図である。図１４では紙面の都合上、シャッフラー５３の一部のみ（バイトＢ３２に代入すべきバイトを選択する部分のみ）を示すと共に、説明の便宜上、レジスタＲＡ、ＲＢ、ＲＤ〜ＲＧ、ＲＴも示している。
【０１０８】
図示するようにシャッフラー５３は、選択回路８０−０Ａ〜８０−３Ａ、８０−０Ｂ〜８０−３Ｂ、８１−０〜８１−３、８２、マスク論理８３、及び前述のフリップフロップ６３−０〜６３−３を備えている。
【０１０９】
選択回路８０−０Ａ〜８０−３Ａ、８０−０Ｂ〜８０−３Ｂは、それぞれ１６個ずつ設けられると共に、それぞれスライスＳ０〜Ｓ３に対応づけられている。すなわち、１６個の選択回路８０−０Ａは、レジスタＲＡにおけるスライスＳ０のいずれかのバイト、すなわちバイトＢ００〜Ｂ０３のいずれかを選択する。そして１６個の選択回路８０−０Ａの各々は、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１０】
また１６個の選択回路８０−１Ａは、レジスタＲＡにおけるスライスＳ１のいずれかのバイト、すなわちバイトＢ０４〜Ｂ０７のいずれかを選択する。そして１６個の選択回路８０−１Ａの各々も、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１１】
また１６個の選択回路８０−２Ａは、レジスタＲＡにおけるスライスＳ２のいずれかのバイト、すなわちバイトＢ０８〜Ｂ１１のいずれかを選択する。そして１６個の選択回路８０−２Ａの各々も、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１２】
更に１６個の選択回路８０−３Ａは、レジスタＲＡにおけるスライスＳ３のいずれかのバイト、すなわちバイトＢ１２〜Ｂ１５のいずれかを選択する。そして１６個の選択回路８０−３Ａの各々も、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１３】
選択回路８０−０Ｂ〜８０−３Ｂも同様である。すなわち、１６個の選択回路８０−０Ｂは、レジスタＲＢにおけるスライスＳ０のいずれかのバイト、すなわちバイトＢ１６〜Ｂ１９のいずれかを選択する。そして１６個の選択回路８０−０Ｂの各々は、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１４】
また１６個の選択回路８０−１Ｂは、レジスタＲＢにおけるスライスＳ１のいずれかのバイト、すなわちバイトＢ２０〜Ｂ２３のいずれかを選択する。そして１６個の選択回路８０−１Ｂの各々も、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１５】
また１６個の選択回路８０−２Ｂは、レジスタＲＢにおけるスライスＳ２のいずれかのバイト、すなわちバイトＢ２４〜Ｂ２７のいずれかを選択する。そして１６個の選択回路８０−２Ｂの各々も、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１６】
更に１６個の選択回路８０−３Ｂは、レジスタＲＢにおけるスライスＳ３のいずれかのバイト、すなわちバイトＢ２８〜Ｂ３１のいずれかを選択する。そして１６個の選択回路８０−３Ｂの各々も、ターゲットレジスタＲＴにおけるバイトＢ３２〜Ｂ４７に対応づけられている。
【０１１７】
選択回路８１−０〜８１−３は、それぞれ１６個ずつ設けられると共に、それぞれスライスＳ０〜Ｓ３に対応づけられている。１６個の選択回路８１−０の各々は、バイトＢ３２〜Ｂ４７の各々に対応づけられている。そして選択回路８１−０の各々は、それぞれバイトＢ３２〜Ｂ４７に対応づけられた選択回路８１−０Ａ、８１−０Ｂのいずれか一方の出力を選択する。すなわち、Ｂ００〜Ｂ０３、Ｂ１６〜Ｂ１９のいずれかを選択する。
【０１１８】
１６個の選択回路８１−１の各々は、バイトＢ３２〜Ｂ４７の各々に対応づけられている。そして選択回路８１−１の各々は、それぞれバイトＢ３２〜Ｂ４７に対応づけられた選択回路８１−１Ａ、８１−１Ｂのいずれか一方の出力を選択する。すなわち、Ｂ０４〜Ｂ０７、Ｂ２０〜Ｂ２３のいずれかを選択する。
【０１１９】
１６個の選択回路８１−２の各々は、バイトＢ３２〜Ｂ４７の各々に対応づけられている。そして選択回路８１−２の各々は、それぞれバイトＢ３２〜Ｂ４７に対応づけられた選択回路８１−２Ａ、８１−２Ｂのいずれか一方の出力を選択する。すなわち、Ｂ０８〜Ｂ１１、Ｂ２４〜Ｂ２７のいずれかを選択する。
【０１２０】
１６個の選択回路８１−３の各々は、バイトＢ３２〜Ｂ４７の各々に対応づけられている。そして選択回路８１−３の各々は、それぞれバイトＢ３２〜Ｂ４７に対応づけられた選択回路８１−３Ａ、８１−３Ｂのいずれか一方の出力を選択する。すなわち、Ｂ１２〜Ｂ１５、Ｂ２８〜Ｂ３１のいずれかを選択する。
【０１２１】
フリップフロップ６３−０〜６３−３はそれぞれ、１６個ずつ設けられると共に、それぞれがスライスＳ０〜Ｓ３に対応づけられている。すなわち１６個のフリップフロップ６３−０の各々は、１６個の選択回路８１−０の各々で選択されたデータを、それぞれ格納する。また１６個のフリップフロップ６３−１の各々は、１６個の選択回路８１−１の各々で選択されたデータを、それぞれ格納する。更に１６個のフリップフロップ６３−２の各々は、１６個の選択回路８１−２の各々で選択されたデータを、それぞれ格納する。そして１６個のフリップフロップ６３−３の各々は、１６個の選択回路８１−３の各々で選択されたデータを、それぞれ格納する。
【０１２２】
選択回路８２は、それぞれバイトＢ３２〜Ｂ４７に対応づけられて１６個、設けられている。そして１６個の選択回路８２の各々は、バイトＢ３２〜Ｂ４７に対応づけられたフリップフロップ６３−０〜６３−３に保持されるデータのいずれかを、それぞれ選択する。
【０１２３】
マスク論理８３は、それぞれバイトＢ３２〜Ｂ４７に対応づけられて１６個、設けられている。そして１６個のマスク論理８３の各々は、１６個の選択回路８２の各々において選択されたデータを、必要に応じて固定値にフォースし、レジスタＲＴのバイトＢ３２〜Ｂ４７に代入する。
【０１２４】
上記構成において、１６個の選択回路８０−０Ａ、８０−０Ｂ及び１６個の選択回路８１−０がスライスＳ０に関する処理を行うユニットであり、図１２における第１演算部６２−０に相当する。また、１６個の選択回路８０−１Ａ、８０−１Ｂ及び１６個の選択回路８１−１がスライスＳ１に関する処理を行うユニットであり、図１２における第１演算部６２−１に相当する。更に１６個の選択回路８０−２Ａ、８０−２Ｂ及び１６個の選択回路８１−２がスライスＳ２に関する処理を行うユニットであり、図１２における第１演算部６２−２に相当する。そして１６個の選択回路８０−３Ａ、８０−３Ｂ及び１６個の選択回路８１−３がスライスＳ３に関する処理を行うユニットであり、図１２における第１演算部６２−３に相当する。そして以上の構成によって行われる処理は、処理ステージＰＳ３において行われる。
【０１２５】
また、選択回路８２及びマスク論理８３がスライスＳ０〜Ｓ３にまたがった処理を行うユニットであり、図１２における第２演算部６４に相当する。そしてこれらの構成によって行われる処理が、処理ステージＰＳ４において行われる。
【０１２６】
上記選択回路８０−０Ａ〜８０−３Ａ、８０−０Ｂ〜８０−３Ｂ、８１−０〜８１−３、８２の選択動作、及びマスク論理８３における固定値へのフォースの要否は、レジスタＲＤ〜ＲＧ内のデータのデコード結果に応じて制御される。前述の通り、レジスタＲＤ〜ＲＧにはレジスタＲＣ内のデータがコピーされる。そして、デコーダ８４−０〜８４−３がそれぞれ、レジスタＲＤ〜ＲＧ内のデータをデコードする。そして、それぞれのデコード結果が選択回路８０−０Ａ〜８０−３Ａ、８０−０Ｂ〜８０−３Ｂ、８１−０〜８１−３へ与えられ、更にフリップフロップ８５を介して選択回路８２及びマスク論理８３へ与えられる。
【０１２７】
処理ステージＰＳ３においては、デコーダ８４−０〜８４−３におけるデコード結果はそれぞれ、第１演算部６２−０〜６２−３の各々に相当する選択回路に与えられる。つまり、選択回路８０−０Ａ、８０−０Ｂ、８１−０にはデコーダ８４−０におけるデコード結果が与えられ、選択回路８０−１Ａ、８０−１Ｂ、８１−１にはデコーダ８４−１におけるデコード結果が与えられる。以下同様である。
【０１２８】
処理ステージＰＳ４においては、デコーダ８４−０〜８４−３の少なくともいずれかにおけるデコード結果に応じて、選択回路８２及びマスク論理８３における動作が制御される。なおデコーダ８４−０〜８４−３は、シャッフラー５３の第１演算部６２−０〜６２−３内に含まれても良い。
【０１２９】
次に、上記シャッフラー３の動作について説明する。  
＜シャッフラー５３の動作の詳細について＞  
図１４を用いて説明した上記構成により、シャッフラー５３は第１の実施形態で説明した図９及び図１０に示される演算を行う。
【０１３０】
まず処理ステージＰＳ３における処理について説明する。処理ステージＰＳ３においては、スライスＳ０〜Ｓ３の各々において、各バイトＢ３２〜Ｂ４７への代入候補となる一つのバイトが選ばれる。以下、その詳細につき説明する。
【０１３１】
まず選択回路８０−０Ａ〜８０−３Ａが、レジスタＲＡにおける各スライスＳ０〜Ｓ３におけるいずれかのバイトを、ターゲットレジスタＲＴの対応するバイトへの代入候補として選択する。また選択回路８０−０Ｂ〜８０−３Ｂが、レジスタＲＢにおける各スライスＳ０〜Ｓ３におけるいずれかのバイトを候補として選択する。この選択動作は、各々１６個の選択回路８０−０Ａ〜８０−３Ａ、８０−０Ｂ〜８０−３Ｂによって、バイトＢ３２〜Ｂ４７毎に行われる。
【０１３２】
以上の選択動作により、バイトＢ３２〜Ｂ４７毎に、１つのスライスあたり２つの代入候補が決定する。そこで次に選択回路８１−０〜８１−３が、これらの２つの代入候補のいずれかを選択し、選択した１つの代入候補をフリップフロップ６３−０〜６３−３へ代入する。
【０１３３】
以上の選択動作により、各スライスあたり１つの代入候補が、バイトＢ３２〜Ｂ４７毎に決定する。つまり、各バイトＢ３２〜Ｂ４７あたり、代入候補が４つまで絞られる。
【０１３４】
次に処理ステージＰＳ４において処理が行われる。１６個の選択回路８２の各々は、１６個ずつ設けられたフリップフロップ６３−０〜６３−３の各々から、いずれかのバイトを候補として選択する。これにより、各バイトＢ３２〜Ｂ４７あたり、１つの代入候補が決定される。そして、次にマスク論理８３が、対応するバイトＢ３２〜Ｂ４７について、代入すべき値を固定値とするか、または選択回路８２で選択したデータとするかを決定する。
【０１３５】
以上の処理の具体例について、バイトＢ３２の代入候補を決定する場合を例に、以下説明する。この場合は、図９においてｊ＝０である場合に相当する。
【０１３６】
まず、処理ステージＰＳ３における処理が行われる。すなわち、選択回路８０−０Ａ、８０−０Ｂは、デコーダ８４−０における、レジスタＲＤのビット３〜７のデコード結果に応じて、バイトＢ００〜Ｂ０３のいずれか、及びバイトＢ１６〜Ｂ１９のいずれかを、それぞれ選択する。また選択回路８０−１Ａ、８０−１Ｂは、デコーダ８４−１における、レジスタＲＥのビット３〜７のデコード結果に応じて、バイトＢ０４〜Ｂ０７のいずれか、及びバイトＢ２０〜Ｂ２３のいずれかを、それぞれ選択する。更に選択回路８０−２Ａ、８０−２Ｂは、デコーダ８４−２における、レジスタＲＦのビット３〜７のデコード結果に応じて、バイトＢ０８〜Ｂ１１のいずれか、及びバイトＢ２４〜Ｂ２７のいずれかを、それぞれ選択する。そして選択回路８０−３Ａ、８０−３Ｂは、デコーダ８４−３における、レジスタＲＧのビット３〜７のデコード結果に応じて、バイトＢ１２〜Ｂ１５のいずれか、及びバイトＢ２８〜Ｂ３１のいずれかを、それぞれ選択する。
【０１３７】
次に、選択回路８１−０は、デコーダ８４−０における、レジスタＲＤのビット３〜７のデコード結果に応じて、選択回路８０−０Ａで選択されたいずれかのバイトと、選択回路８０−０Ｂで選択されたバイトとのいずれか一方を選択する。そして、選択したバイトをフリップフロップ６３−０に格納する。また選択回路８１−１は、デコーダ８４−１における、レジスタＲＥのビット３〜７のデコード結果に応じて、選択回路８０−１Ａで選択されたいずれかのバイトと、選択回路８０−１Ｂで選択されたバイトとのいずれか一方を選択する。そして、選択したバイトをフリップフロップ６３−１に格納する。更に選択回路８１−２は、デコーダ８４−２における、レジスタＲＦのビット３〜７のデコード結果に応じて、選択回路８０−２Ａで選択されたいずれかのバイトと、選択回路８０−２Ｂで選択されたバイトとのいずれか一方を選択する。そして、選択したバイトをフリップフロップ６３−２に格納する。そして選択回路８１−３は、デコーダ８４−３における、レジスタＲＧのビット３〜７のデコード結果に応じて、選択回路８０−３Ａで選択されたいずれかのバイトと、選択回路８０−３Ｂで選択されたバイトとのいずれか一方を選択する。そして、選択したバイトをフリップフロップ６３−３に格納する。
【０１３８】
次に処理ステージＰＳ４において処理が行われる。バイトＢ３２に対応する選択回路８２は、デコーダ８４−０〜８４−３のいずれかにおける、レジスタＲＤのビット３〜７のデコード結果に応じて、フリップフロップ６３−０〜６３−３のいずれかに保持されるバイトを選択する。
【０１３９】
次にマスク論理８３が、デコーダ８４−０〜８４−３のいずれかにおける、レジスタＲＤ〜ＲＧのビット０〜２のデコード結果に応じて、バイトＢ３２に代入すべきデータを固定値にフォースする。すなわち、図９で説明したように、ビット０〜１が“０ｂ１０”であれば、バイトＢ３２には“０ｂ００００００００”が代入され、ビット０〜２が“０ｂ１１０”であれば、バイトＢ３２には“０ｂ１１１１１１１１”が代入され、ビット０〜２が“０ｂ１１１”であれば、バイトＢ３２には“０ｂ１０００００００”が代入される。ビット０〜２が上記以外の値であれば、バイトＢ３２には選択回路８２で選択されたバイトが代入される。
【０１４０】
以上がバイトＢ３２に代入すべきデータの選択方法である。バイトＢ３３に代入すべきデータの選択時は、図９におけるｊ＝１の場合に相当するので、各選択回路及びマスク論理の制御にあたっては、レジスタＲＤ〜ＲＧにおけるビット８〜１５のデコード結果が使用される。またバイトＢ３４の場合はｊ＝２の場合に相当するので、この場合にはビット１６〜２３のデコード結果が使用される。以下同様である。
【０１４１】
上記のように、第１の実施形態で説明したＬＳＩは、例えば本実施形態で説明した構成によって実現出来る。本実施形態に係る構成であると、シャッフラー５３は、スライス間でのデータ通信を要する処理と要しない処理とを、処理ステージＰＳ３と処理ステージＰＳ４とに分離している。
【０１４２】
前述の通り、動作タイミングについて配慮すべき領域は処理ステージ毎である。そして、異なる処理ステージ間では、動作タイミングについての要求は同一処理ステージ内に比して緩やかである。その結果、各処理ステージにおいてスタンダードセルはスライス毎に集まって配置されやすい。
【０１４３】
すると、本実施形態に係る構成であると、処理ステージＰＳ３においてはスライスをまたぐ演算部が存在しない。従って、処理ステージＰＳ３を構成するスタンダードセル群は、スライス毎にまとまって配置されることが可能となる。処理ステージＰＳ４ではスライスをまたぐ演算部（第２演算部６４）が存在するが、この演算部はシャッフラー５３の一部に過ぎない。従って、ＬＳＩ全体として見たときに、スライスをまたいでスタンダードセルが配置される領域は、従来に比べて圧倒的に小さくなる。よって、上記第１の実施形態で説明した効果が得られる。
【０１４４】
なおシャッフラー５３は、本実施形態で説明した構成によって、シャッフル演算だけでなくローテート演算やシフト演算も可能である。この場合には、ローテート演算やシフト演算が可能となるよう、つまり図５及び図７が実現出来るよう、レジスタＲＣの制御データをセットすれば良い。
【０１４５】
また、本実施形態に係る構成であると、レジスタＲＣを多重化している。より具体的には、レジスタＲＣのデータ（演算内容の制御データ）のコピーを保持するレジスタＲＤ〜ＲＧを、スライスＳ０〜Ｓ３毎に設けている。そして、レジスタＲＤ〜ＲＧにおける制御データに基づいて、それぞれスライスＳ０〜Ｓ３に対応した第１演算部６２−０〜６２−３が制御される。このことも、処理ステージＰＳ３におけるスライス間でのデータ通信の発生を防止することに寄与している。
【０１４６】
［第３の実施形態］  
次に、この発明の第３の実施形態に係る半導体集積回路装置について説明する。本実施形態は、上記第１、第２の実施形態で説明したプロセッサを用いたプロセッサシステムに関するものである。
【０１４７】
＜プロセッサシステムの全体構成について＞  
図１５は、本実施形態に係る画像処理用プロセッサシステムのブロック図である。図示するようにプロセッサシステム９０は、ホストＰＣ９１、マルチコアプロセッサ９２、及びローカルメモリ９３を備えている。
【０１４８】
ホストＰＣ９１は、外部から映像データを受信し、マルチコアプロセッサ９２に対して映像データのエンコードまたはデコードを命令する。マルチコアプロセッサ９２は、ホストＰＣ９１から映像データを受け取り、ローカルメモリ９３に一時的に格納すると共に、映像データのエンコード及びデコードを行う。そしてホストＰＣ９１は、マルチコアプロセッサ９２でデコードされた映像データを、外部の映像表示部に表示させる。  
次に、上記ホストＰＣ９１及びマルチコアプロセッサ９２の構成について説明する。
【０１４９】
＜ホストＰＣ９１について＞  
上記ホストＰＣ９１は、ＣＰＵ９４、ビデオＲＡＭ（以下ＶＲＡＭと呼ぶ）９５、グラフィックプロセッサ（以下ＧＰＵ（Graphic Processing Unit）と呼ぶ）９６、メインメモリ９７、第１接続部９８、及び第２接続部９９を備えている。
【０１５０】
ＣＰＵ９４は、ホストＰＣ９１全体の処理を司る。メインメモリ９７は、例えばＤＲＡＭ等の半導体メモリであり、ＣＰＵ９４の作業領域として使用される。第２接続部９９は、外部より映像データ及び音声データを受信する。また、ホストＰＣ９１とマルチコアプロセッサ９２との間のデータの授受を司る。外部からのデータは、例えばＵＳＢやシリアルＡＴＡによって、第２接続部９９に転送される。第１接続部９８は、ＣＰＵ９４、メインメモリ９７、第２接続部９９、及びＧＰＵ９６の相互間の接続を司る。ＧＰＵ９６は、第１接続部９８を介して与えられる映像データを、ビデオ出力として映像表示部に表示させる。ＶＲＡＭ９５は、例えばＤＲＡＭ等の半導体メモリであり、ＧＰＵ９６の作業領域として使用される。
【０１５１】
＜マルチコアプロセッサ９２について＞  
次に、上記マルチコアプロセッサ９２の構成について説明する。図１６はマルチコアプロセッサ９２の構成を示すブロック図である。
【０１５２】
図示するようにマルチコアプロセッサ９２は、第１プロセッサ１００、ＤＭＡ（Direct Memory Access）コントローラ１１０、第１デコーダ１２０、第２デコーダ１３０、複数の第２プロセッサ１４０、ホストインターフェース１６０、及びメモリコントローラ１７０を備えている。これらは、バス１８０によって相互に通信可能に接続されている。
【０１５３】
第１プロセッサ１００は、マルチコアプロセッサ９２全体の動作を制御するメインプロセッサである。オペレーティングシステム（ＯＳ：Operating System）は、主に第１プロセッサ１００によって実行される。ＯＳの一部の機能は、第２プロセッサ１４０等で分担して実行することもできる。
【０１５４】
第２プロセッサ１４０の各々は、第１プロセッサ１００の管理の下で各種の処理を実行する。第１プロセッサ１００は、複数の第２プロセッサ１４０に処理を振り分けて並列に実行させるための制御を行う。これにより高速で効率よい処理を実行できる。第２プロセッサ１４０の各々は、大まかには制御部、演算部、及びメモリを備えている。制御部は、第１プロセッサ１００の命令に基づき、演算部に対して必要な演算実行を命令する。メモリは、ＤＭＡコントローラ１１０の命令に基づき、外部からデータを受け取り、または外部へデータを出力する。このデータは、例えばＯＳやアプリケーションプログラム、または映像データ等である。演算部は、制御部の命令に基づき、メモリに格納されたデータを用いて演算を行う。第２プロセッサ１４０の詳細については後述する。
【０１５５】
第１デコーダ１２０は、外部から与えられたＭＰＥＧ（Moving Picture Experts Group）−２形式の映像データをデコードする。第２デコーダ１３０は、外部から与えられたＨ．２６４形式の映像データをデコードする。なお、ＭＰＥＧ−２及びＨ．２６４とは、映像を圧縮して符号化する規格の名称である。
【０１５６】
ＤＭＡコントローラ１１０は、マルチコアプロセッサ９２内におけるバス１８０を介したデータの通信を司る。ホストインターフェース１６０はホストＰＣ９１との間のデータの授受を司り、メモリコントローラ１７０はローカルメモリ９３との間のデータの授受を司る。
【０１５７】
なお、図１６の構成では、第１プロセッサ１００が１つであり、また第２プロセッサ１４０ＶＰＵ１２が４つの場合を例に挙げている。しかし、これらの回路ブロックの個数は制限されない。例えば第１プロセッサ１００が複数ある構成や、第１プロセッサ１００を有しない構成も可能である。第１プロセッサ１００を有しない構成の場合、第１プロセッサ１００の行う処理は、いずれかの第２プロセッサ１４０が担当する。つまり、仮想的な第１プロセッサ１００の役割を第２プロセッサ１４０が兼ねる。
【０１５８】
＜第２プロセッサ１４０について＞  
次に、上記第２プロセッサ１４０の構成について説明する。図１７は第２プロセッサ１４０の構成を示すブロック図である。
【０１５９】
図示するように第２プロセッサ１４０は、チャネルインターフェース１４１、分岐命令実行部１４２、ＤＭＡインターフェース１４３、ローカルメモリ１４４、ロードストアユニット１４５、バッファ制御部１４６、命令バッファ１４７、汎用レジスタ１４８、オペランド供給ネットワーク１４９、浮動小数点演算部１５０、及び整数演算部１５１を備えている。
【０１６０】
チャネルインターフェース１４１は、図示せぬメモリフローコントローラ（Memory Flow Controller）を介して、第１プロセッサ１００から命令を受信する。
【０１６１】
ＤＭＡインターフェース１４３は、メモリコントローラを介して、ローカルメモリ９３から映像データやプログラムを受信する。
【０１６２】
ローカルメモリ１４４は例えばＤＲＡＭやＥＥＰＲＯＭ（Electrically Erasable and Programmable ROM）等の半導体メモリであり、ＤＭＡインターフェース１４３で受信した映像データやプログラムを保持する。また、整数演算部１５１や浮動小数点演算部１５０、または分岐命令実行部１４２における処理結果を保持する。
【０１６３】
命令バッファ１４７は、バッファ制御部１４６の制御に従って、ローカルメモリ１４４に保持されたプログラムを一時的に保持する。
【０１６４】
分岐命令実行部１４２は、チャネルインターフェース１４１で受信した命令に基づき、命令バッファ１４７に読み出されたプログラムにおける分岐命令を実行する。
【０１６５】
ロードストアユニット１４５は、チャネルインターフェース１４１で受信した命令に基づき、各種データやプログラムのローカルメモリ１４４に対するロード（読み出し）及びストア（書き込み）を制御する。すなわち、必要なデータやプログラムをローカルメモリ１４４からロードし、オペランド供給ネットワーク１４９に出力する。またローカルメモリ１４４におけるプログラムをロードして、命令バッファ１４７に保持させる。更に、分岐命令実行部１４２、整数演算部１５１、または浮動小数点演算部１５０における演算結果を、ローカルメモリ１４４に格納する。ロードストアユニット１４５は、上記第２の実施形態で説明した図１２におけるロードストアユニット３０に相当する。
【０１６６】
オペランド供給ネットワーク１４９は、上記第２の実施形態で説明した図１２におけるバスＢＳ−Ａ〜ＢＳ−Ｃ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５、ＢＳ−ＬＳに相当する。従って、図１７におけるロードストアユニット１４５でロードされたデータやプログラムが、図１２におけるバスＢＳ−ＬＳに与えられる。また、図１２におけるバスＢＳ−Ａ〜ＢＳ−Ｃ、ＢＳ−ＰＳ４、ＢＳ−ＰＳ５において伝送されるデータやプログラムが、ロードストアユニット１４５を介してローカルメモリ１４４に格納される。
【０１６７】
汎用レジスタ１４８は、上記第２の実施形態で説明した図１２における汎用レジスタ２に相当する。すなわち汎用レジスタ１４８は、レジスタＲＡ〜ＲＧ、ＲＴを含む。
【０１６８】
整数演算部１５１及び浮動小数点演算部１５０は、上記第２の実施形態で説明した図１２における、処理ステージＰＳ３、ＰＳ４における演算ユニットに相当する。そして整数演算部１５１及び浮動小数点演算部１５０は、それぞれ整数及び浮動小数点につき、積和演算、算術演算、論理演算、またはシャッフル演算（及び／またはシフト演算及びローテート演算）を行う。
【０１６９】
＜マルチコアプロセッサ９２の動作について＞  
次に、上記マルチコアプロセッサ９２の動作について、ホストＰＣ９１から入力されたＭＰＥＧ−２形式の映像データをＨ．２６４形式に変換する場合を例に挙げて、以下説明する。勿論、この変換処理は計算機システム１０の行う処理の一例に過ぎない。図１８は、マルチコアプロセッサ９２における処理の流れを示すフローチャートであり、図１９乃至図２１はマルチコアプロセッサ９２のブロック図である。図１９乃至図２１において、白抜き矢印は制御を示し、黒塗り矢印はデータの流れを示す。
【０１７０】
まず初めに、マルチコアプロセッサ９２がホストＰＣ９１から映像データの変換命令を受ける。すると図１９に示すように、マルチコアプロセッサ９２では、変換命令に応答して第１プロセッサ１００が、ＤＭＡコントローラ１１０に対して、ホストＰＣ９１からの映像データの読み出しを命令する。この命令に従いＤＭＡコントローラ１１０は、ホストインターフェース１６０を介してＭＰＥＧ−２形式で符号化された映像データ（データストリーム）を読み出す。そして読み出した映像データを、メモリコントローラ１７０を介してローカルメモリ９３に格納する（図１８におけるステップＳ１０）。
【０１７１】
次に図２０に示すように、第１プロセッサ１００は第１デコーダ１２０に対して、ステップＳ１０で読み出した映像データについてのデコードを命令する。すると第１デコーダ１２０は、メモリコントローラ１７０を介してローカルメモリ９３から映像データを読み出し、ＭＰＥＧ−２形式の映像データをデコードし、デコード結果をローカルメモリ９３に格納する（ステップＳ１１）。
【０１７２】
次に、第１デコーダ１２０からデコードの終了を通知されると、図２１に示すように第１プロセッサ１００は、複数の第２プロセッサ１４０に対してＨ．２６４エンコードプログラムの実行を命令する。Ｈ．２６４エンコードプログラムは、映像をＨ．２６４形式により圧縮符号化するためのプログラムである。Ｈ．２６４エンコードプログラムは、第２プロセッサ１４０自身が保持していても良いし、ローカルメモリ９３から第２プロセッサ１４０に転送されても良い。Ｈ．２６４エンコードプログラムに基づいて第２プロセッサ１４０の各々は、メモリコントローラ１７０を介してローカルメモリ９３から、ＭＰＥＧ−２のデコード結果を読み込む（ステップＳ１２）。このデコード結果は、ステップＳ１１において第１デコーダ１２０がデコードして得た映像データである。
【０１７３】
そしてＨ．２６４エンコードプログラムに従って、各々の第２プロセッサ１４０が、読み込んだ映像をＨ．２６４形式にエンコード（符号化）し、エンコード結果をローカルメモリ９３に格納する（ステップＳ１３）。
【０１７４】
エンコード処理が終了すると、第２プロセッサ１４０はＨ．２６４エンコードプログラムに基づいて、第１プロセッサ１００に対してエンコードの終了を通知する。エンコードの終了を通知された第１プロセッサ１００は、ＤＭＡコントローラ１１０に対してデータの転送を命令する。するとＤＭＡコントローラ１１０は、ローカルメモリ９３に保持されるＨ．２６４形式のエンコード結果を、ホストＰＣ９１へ転送する。
【０１７５】
なお、ステップＳ１１で得られた映像ストリームは、ローカルメモリ９３だけでなくホストＰＣ９１へ転送されても良い。これにより、映像を映像表示部で再生しつつ、当該映像のＭＰＥＧ−２形式からＨ．２６４形式への変換が可能となる。
【０１７６】
以上のように、第１、第２の実施形態で説明したプロセッサ１はプロセッサシステムの一部として使用することが可能である。そして、特に画像処理ではプロセッサの負担は非常に大きく、各プロセッサの動作速度が重要となる。従って、マルチコアプロセッサを使用したプロセッサシステムに対して第１、第２の実施形態で説明したプロセッサ１を使用することで、画像処理の処理速度を格段に向上出来る。
【０１７７】
上記のように、この発明の第１乃至第３の実施形態に係る演算器は、複数ビットを一つのデータ単位（スライスＳ０〜Ｓ３）とするＳＩＭＤ命令を、複数の処理サイクルにより実行する演算器１０、５３であって、スライス間でのビットの移動を伴うことなく、それぞれスライス毎に第１演算を行う複数の第１演算部１１−０〜１１−３、６２−０〜６２−３と、スライス間でのビットの移動を伴う第２演算を行う第２演算部１２、６４とを具備する。そして、第１演算と第２演算とによりＳＩＭＤ命令が実行され、且つ第１演算と第２演算とは、互いに１処理サイクル以上のレイテンシを有して実行される。
【０１７８】
また、この発明の第１乃至第３の実施形態に係る半導体集積回路装置は、複数の処理ステージを用いてパイプライン動作を行うプロセッサ１であって、複数ビットを一つのデータ単位（スライスＳ０〜Ｓ３）とするＳＩＭＤ命令を、複数の前記処理ステージを用いて実行する演算器１０、５３を具備する。そして演算器１０、５３は、第ｉ処理ステージ（ｉは１以上の自然数、図１におけるＰＳ１または図１２におけるＰＳ３）において、スライス間でのビットの移動を伴うことなく、スライス単位の第１演算を行い、第（ｉ＋ｊ）処理ステージ（ｊは１以上の自然数、図１におけるＰＳ２または図１２におけるＰＳ４）において、スライス間でのビットの移動を伴う第２演算を行う。
【０１７９】
そして、上記プロセッサ１は、スライス毎に設けられ、演算器５３における演算内容を制御する制御データを保持する複数のレジスタＲＤ〜ＲＧを更に備え、第１演算において、レジスタＲＤ〜ＲＧの各々に保持される制御データは、スライス毎の第１演算にそれぞれ使用される。
【０１８０】
なお上記第１、第２実施形態では、演算器が初めの処理ステージにおいてスライス間でのデータ通信を要しない演算（第１演算）を行い、これに引き続く次の処理ステージにおいて、スライス間でのデータ通信を要する演算（第２演算）を行う場合について説明した。しかし、この順序は逆であっても良い。すなわち、まず第２演算を行い、次に第１演算を行っても良い。また上記実施形態では、これら２つの演算が連続する処理ステージで行われる場合について説明した。すなわちレイテンシ＝１の場合である。しかし、レイテンシは２以上であっても良い。例えば図１２のシャッフラー５３において、第２演算部６４における第２演算は、処理ステージＰＳ４では無く処理ステージＰＳ５以降で行われても良い。すなわち、第１演算と第２演算とが異なる処理ステージで行われる構成であれば、演算の順序等は特に限定されず、適宜選択することが出来る。
【０１８１】
また、上記第１、第２の実施形態では、スライス間でのデータ通信を要する演算として、バイト単位のシャッフル演算、ローテート演算、及びシフト演算を例に挙げた。しかし、これらの演算はバイト単位に限らず、例えばビット単位であっても良い。また、これらの演算に限定されるものでは無く、プログラム上において単一の命令として取り扱われ、且つスライス間でのデータの通信を要する演算であれば、全般的に、上記実施形態を適用出来る。
【０１８２】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【０１８３】
【図１】この発明の第１の実施形態に係るプロセッサのブロック図。
【図２】この発明の第１の実施形態に係るプロセッサの動作の流れを示すタイミングチャート。
【図３】この発明の第１の実施形態に係るレジスタの構成を示す模式図。
【図４】この発明の第１の実施形態に係るレジスタの構成を示す模式図。
【図５】シフト命令の詳細を示すダイアグラム。
【図６】シフト命令を実行する演算器の概念図。
【図７】ローテート命令の詳細を示すダイアグラム。
【図８】ローテート命令を実行する演算器の概念図。
【図９】シャッフル命令の詳細を示すダイアグラム。
【図１０】シャッフル命令を実行する演算器の概念図。
【図１１】ＬＳＩのレイアウトを示す模式図。
【図１２】この発明の第２の実施形態に係るプロセッサのブロック図。
【図１３】この発明の第２の実施形態に係る汎用レジスタのブロック図。
【図１４】この発明の第２の実施形態に係るシャッフラーのブロック図。
【図１５】この発明の第３の実施形態に係るプロセッサシステムのブロック図。
【図１６】この発明の第３の実施形態に係るマルチコアプロセッサのブロック図。
【図１７】この発明の第３の実施形態に係るプロセッサのブロック図。
【図１８】この発明の第３の実施形態に係るマルチコアプロセッサにおける処理の流れを示すフローチャート。
【図１９】この発明の第３の実施形態に係るマルチコアプロセッサのブロック図。
【図２０】この発明の第３の実施形態に係るマルチコアプロセッサのブロック図。
【図２１】この発明の第３の実施形態に係るマルチコアプロセッサのブロック図。
【符号の説明】
【０１８４】
１…プロセッサ、２、１４８…汎用レジスタ、１０…第１演算器、１１−０〜１１−３、２１−０〜２１−３、６２−０〜６２−３…第１演算部、１２、６４…第２演算部、１３、１５、１７、８４−０〜８４−３…デコーダ、１４、１６、１８、３１〜４１、４５〜４８、６８、６９、７０、８０−０Ａ〜８０−３Ａ、８０−０Ｂ〜８０−３Ｂ、８１−０〜８１−３、８２…マルチプレクサ、１９、８３…マスク論理、２０…第２演算器、３０、１４５…ロードストアユニット、４２〜４４、５５、５７、５９、６１、６３−０〜６３−３、６５〜６７、７２〜７５、８５…フリップフロップ、５０…積和演算器、５１…算術演算器、５２…論理演算器、５３…シャッフラー、５４…乗算器、５６…加算器、５８、６０…演算器、７１…メモリ、９０…プロセッサシステム、９１…ホストＰＣ、９２…マルチコアプロセッサ、９３、１４４…ローカルメモリ、９４…ＣＰＵ、９５…ＶＲＡＭ、９６…ＧＰＵ、９７…メインメモリ、９８…第１接続部、９９…第２接続部、１００…第１プロセッサ、１１０…ＤＭＡコントローラ、１２０…第１デコーダ、１３０…第２デコーダ、１４０…第２プロセッサ、１６０…ホストインターフェース、１７０…メモリコントローラ、１４１…チャネルインターフェース、１４２…分岐命令実行部、１４３…ＤＭＡインターフェース、１４６…バッファ制御部、１４７…命令バッファ、１４９…オペランド供給ネットワーク、１５０…浮動小数点演算部、１５１…整数演算部
【図１】
2009282744.tif 000003
【図２】
2009282744.tif 000004
【図３】
2009282744.tif 000005
【図４】
2009282744.tif 000006
【図５】
2009282744.tif 000007
【図６】
2009282744.tif 000008
【図７】
2009282744.tif 000009
【図８】
2009282744.tif 000010
【図９】
2009282744.tif 000011
【図１０】
2009282744.tif 000012
【図１１】
2009282744.tif 000013
【図１２】
2009282744.tif 000014
【図１３】
2009282744.tif 000015
【図１４】
2009282744.tif 000016
【図１５】
2009282744.tif 000017
【図１６】
2009282744.tif 000018
【図１７】
2009282744.tif 000019
【図１８】
2009282744.tif 000020
【図１９】
2009282744.tif 000021
【図２０】
2009282744.tif 000022
【図２１】
2009282744.tif 000023