(57)【特許請求の範囲】
【請求項１】
第１の入力線からのデータと第１のバイパス線を介して入力される演算結果のいずれかを選択する第１の入力セレクタと、
第２の入力線からのデータを第１の制御ビットに応じて反転または非反転する第１のＸＯＲ回路と、
前記第１のＸＯＲ回路の出力と前記第１のバイパス線を介して入力される前記演算結果のいずれかを選択する第２の入力セレクタと、
前記第１の入力セレクタの出力をクロックに応答して保持する第１のオペランドレジスタと、
前記第２の入力セレクタの出力を前記クロックに応答して保持する第２のオペランドレジスタと、
前記演算結果を前記クロックに応答して保持する結果レジスタと、
前記第１のオペランドレジスタ内の第１の入力データと前記第２のオペランドレジスタ内の第２の入力データとを入力し、前記第１の入力データと前記第２の入力データとの演算結果を、前記結果レジスタに出力するとともに、前記演算結果を前記第１の入力セレクタの入力と第２の入力セレクタの入力とに前記第１のバイパス線を介してそれぞれ出力する加算回路とを有し、
前記加算回路は、前記第１の入力データと前記第２の入力データとの排他的論理和を演算する第２のＸＯＲ回路と、前記第１の入力データと第２の入力データとのキャリーデータを演算するキャリー演算器と、前記第２のＸＯＲ回路の出力を第２の制御ビットに応じて反転または非反転する第４のＸＯＲ回路と、前記キャリー演算器の出力と前記第４のＸＯＲ回路の出力との排他的論理和を演算した前記演算結果を出力する第３のＸＯＲ回路とを有する、加減算器。
【請求項２】
さらに、前記第１のＸＯＲ回路に前記第１の制御ビットを入力する第１の制御ビットレジスタと、
前記第４のＸＯＲ回路に前記第２の制御ビットを入力する第２の制御ビットレジスタを有し、
前記第１の制御ビットは、第２のオペランドレジスタが保持する第２の入力データを反転するか否かを示し、
前記第２の制御ビットは、前記第１のバイパス線でバイパスする前記演算結果を反転するか否かを示す、請求項１に記載の加減算器。
【請求項３】
前記第１及び第２の入力線にはレジスタファイルから第１及び第２の入力データがそれぞれ供給され、
さらに、前記結果レジスタの出力を前記第２の制御ビットに応じて反転または非反転し、前記レジスタファイルに出力する第５のＸＯＲ回路を有する、請求項１に記載の加減算器。
【請求項４】
さらに、前記加算回路に並列に設けられ、前記第１及び第２のオペランドレジスタのデータを演算する他の演算回路と、
全てゼロデータを有するオールゼロレジスタと、
前記第２の入力線からのデータと前記オールゼロレジスタの出力のいずれかを選択し、前記第１のＸＯＲ回路に出力する第３の入力セレクタとを有し、
前記第１の入力セレクタは、前記第１の入力線と前記第１のバイパス線と前記オールゼロレジスタの出力のいずれかを選択する、請求項１に記載の加減算器。
【請求項５】
さらに、前記加算回路の出力データと前記加算回路内のキャリー信号を入力して所定のコンディションコードを生成するコンディションコード生成回路と、
前記加算回路に並列に設けられ、前記第１及び第２のオペランドレジスタの第１及び第２の入力データを入力しエッジ演算を行うエッジ演算回路と、
前記エッジ演算回路が同じ値の第１及び第２の入力データを演算する場合に、前記加算回路が第１の入力データから第２の入力データを減算するときに前記コンディションコード生成回路が生成するコンディションコードを格納する定数レジスタと、
前記コンディションコード生成回路の出力と前記定数レジスタの出力のいずれかを選択して、コンディションコードの結果レジスタに出力するコンディションコード出力セレクタを有する、請求項１に記載の加減算器。
【請求項６】
第１の入力線からのデータと第１のバイパス線を介して入力される演算結果のいずれかを選択する第１の入力セレクタと、
第２の入力線からのデータを第１の制御ビットに応じて反転または非反転する第１のＸＯＲ回路と、
前記第１のＸＯＲ回路の出力と前記第１のバイパス線を介して入力される前記演算結果のいずれかを選択する第２の入力セレクタと、
前記第１の入力セレクタの出力をクロックに応答して保持する第１のオペランドレジスタと、
前記第２の入力セレクタの出力を前記クロックに応答して保持する第２のオペランドレジスタと、
前記演算結果を前記クロックに応答して保持する結果レジスタと、
前記第１のオペランドレジスタ内の第１の入力データと前記第２のオペランドレジスタ内の第２の入力データとを入力し、前記第１の入力データと前記第２の入力データとの演算結果を、前記結果レジスタに出力するとともに、前記演算結果を前記第１の入力セレクタの入力と第２の入力セレクタの入力とに前記第１のバイパス線を介してそれぞれ出力する加算回路とを有し、
前記加算回路は、前記第１の入力データと前記第２の入力データとの排他的論理和を演算する第２のＸＯＲ回路と、前記第１の入力データと第２の入力データとのキャリーデータを演算するキャリー演算器と、前記第２のＸＯＲ回路の出力を第２の制御ビットに応じて反転または非反転する第４のＸＯＲ回路と、前記キャリー演算器の出力と前記第４のＸＯＲ回路の出力との排他的論理和を演算した前記演算結果を出力する第３のＸＯＲ回路とを有する加減算器において、
前記加算回路が第１の命令の演算を実行し、第１のクロックサイクルで前記演算結果を前記第１のバイパス線に出力し、
前記第１または第２のオペランドレジスタが、前記第１のクロックサイクルの次の第２のクロックサイクルで、前記第１のバイパス線に出力された前記演算結果を保持する、加減算器の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，加減算器及び加減算器の制御方法に関する。
【背景技術】
【０００２】
演算器は、入力データをラッチする２つのオペランドレジスタと、演算結果データをラッチする結果レジスタと、オペランドレジスタと結果レジスタとの間に設けられた演算回路とを有する。また、演算器は、オペランドレジスタと結果レジスタとの間に複数の演算回路を並列に有し、複数の演算回路の演算結果データをセレクタにより選択し、選択した演算結果データを結果レジスタがラッチする。また、演算器は、結果レジスタがラッチしたデータを、オペランドレジスタに供給するバイパスルートを有する。結果レジスタの演算結果データをレジスタファイルに書き込み、その後レジスタファイルに書き込んだデータをオペランドレジスタがラッチし演算回路が演算するより、バイパスルートを利用して演算結果データを直接オペランドレジスタがラッチするほうが、短時間で次の演算を実行できる。
【０００３】
演算器の一つである加減算器は、オペランドレジスタと結果レジスタとの間に、一方のオペランドレジスタの入力データを反転または非反転する第１のＸＯＲ回路（ＸＯＲ：eXclusive OR、排他的論理和）と、加算回路とを有する。第１のＸＯＲ回路は、加減算器が減算を実行する場合に入力データを反転し、加算を実行する場合に入力データを反転しない。加算回路は、オペランドレジスタの入力データのＸＯＲを演算する第２のＸＯＲ回路と、入力データからキャリーデータを生成するキャリー演算器と、第２のＸＯＲ回路の出力とキャリー演算器の出力のＸＯＲを演算する第３のＸＯＲ回路を有する。そして、加減算器は、第３のＸＯＲ回路の出力をラッチする結果レジスタと、第３のＸＯＲ回路の出力をオペランドレジスタにバイパスする第１のバイパスルートを有する。
【０００４】
加減算器は、オペランドレジスタから第３のＸＯＲ回路の出力までの遅延時間が、オペランドレジスタと結果レジスタに供給するクロック周期の限界（最短周期）となる。つまり、このクロック周期の限界を決めるクリティカルパスは、演算回路内のオペランドレジスタから第３のＸＯＲ回路までの経路である。
【０００５】
加減算器のクリティカルパスを改良して上記の遅延時間を短くすることが提案されている。例えば、以下の特許文献２である。この加減算器は、第１のＸＯＲ回路をオペランドレジスタの前段に設け、第２のバイパスルート内に、第２のＸＯＲ回路の出力を反転または非反転する第４のＸＯＲ回路と、第４のＸＯＲ回路とキャリー出力のＸＯＲを演算する追加の第３のＸＯＲ回路とを有し、追加の第３のＸＯＲ回路の出力をオペランドレジスタに第２のバイパスルートを経由して供給する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−８９９３７号公報
【特許文献２】米国特許第７，３１３，５８６Ｂ２
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記の加減算器は、クリティカルパスの遅延時間をある程度短縮してはいるが、２つのバイパスルートを有するためハードウエア量の増大を招く。また、上記の加減算器は、キャリー演算器の出力のファンアウトが２と増えているのでクリティカルパスの遅延短縮が限定的である。
【０００８】
そこで，実施の形態の第１の側面の目的は，ハードウエア量を抑制しクリティカルパスの遅延を抑制する加減算器及び加減算器の制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
実施の形態の第１の側面は，第１の入力線からのデータと第１のバイパス線を介して入力される演算結果のいずれかを選択する第１の入力セレクタと、
第２の入力線からのデータを第１の制御ビットに応じて反転または非反転する第１のＸＯＲ回路と、
前記第１のＸＯＲ回路の出力と前記第１のバイパス線を介して入力される前記演算結果のいずれかを選択する第２の入力セレクタと、
前記第１の入力セレクタの出力をクロックに応答して保持する第１のオペランドレジスタと、
前記第２の入力セレクタの出力を前記クロックに応答して保持する第２のオペランドレジスタと、
前記演算結果を前記クロックに応答して保持する結果レジスタと、
前記第１のオペランドレジスタ内の第１の入力データと前記第２のオペランドレジスタ内の第２の入力データとを入力し、前記第１の入力データと前記第２の入力データとの演算結果を、前記結果レジスタに出力するとともに、前記演算結果を前記第１の入力セレクタの入力と第２の入力セレクタの入力とに前記第１のバイパス線を介してそれぞれ出力する加算回路とを有し、
前記加算回路は、前記第１の入力データと前記第２の入力データとの排他的論理和を演算する第２のＸＯＲ回路と、前記第１の入力データと第２の入力データとのキャリーデータを演算するキャリー演算器と、前記第２のＸＯＲ回路の出力を第２の制御ビットに応じて反転または非反転する第４のＸＯＲ回路と、前記キャリー演算器の出力と前記第４のＸＯＲ回路の出力との排他的論理和を演算した前記演算結果を出力する第３のＸＯＲ回路とを有する、加減算器である。
【発明の効果】
【００１０】
第１の側面によれば，ハードウエア量を抑制しクリティカルパスの遅延を抑制する加減算器及び加減算器の制御方法を提供する。
【図面の簡単な説明】
【００１１】
【図１】演算器の一例を示す図である。
【図２】加減算回路の演算アルゴリズムを説明する図である。
【図３】演算器の別の例を示す図である。
【図４】本実施の形態における加減算回路を有する演算器の構成を示す図である。
【図５】キャリー演算器の回路の一例を示す図である。
【図６】コンディションコード生成回路１５７の構成を示す図である。
【図７】レジスタファイルのデータＡ，Ｂを入力し減算Ａ−Ｂ＝Ｘを演算する動作を示す図である。
【図８】第１の命令でＣ＋Ｄ＝Ｙの演算を行い、次の第２の命令でＥ−Ｙ＝Ｚの演算を行う動作を示す図である。
【図９】第１の命令でＣ＋Ｄ＝Ｙの演算を行い、次の第２の命令でＥ−Ｙ＝Ｚの演算を行う動作を示す図である。
【図１０】本実施の形態の演算器が、最短のバイパスルートＢＰ１で次の命令の演算を行う動作と、最短ではないバイパスルートＢＰ２で次の命令の演算を行う動作を示すタイミングチャート図である。
【図１１】本実施の形態の演算器が、演算結果の反転データを最短バイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０に転送する動作を示す図である。
【図１２】本実施の形態の演算器が、演算結果の非反転データＹと反転データ〜Ｙを最短ではないバイパスルートＢＰ２を経由して第１、第２のオペランドレジスタ１０９，１１０にラッチする動作を示す図である。
【図１３】本実施の形態の演算器が同じ演算結果Ｙを入力として減算を行う動作を示す。
【図１４】一般的なＥＤＧＥ命令を実行する場合の動作を示す図である。
【図１５】本実施の形態における演算器による同じ演算結果を入力として他の演算器がＥＤＧＥ演算を行う場合の動作を示す図である。
【発明を実施するための形態】
【００１２】
図１は、演算器の一例を示す図である。演算器は、複数のデータが格納されるレジスタファイル１０１、１０２と、レジスタファイル内のデータを選択するセレクタ１０３、１０４と、セレクタ１０３、１０４の出力をクロックＣＬＫに応答してラッチする第１及び第２の中継オペランドレジスタ１０５、１０６を有する。さらに、演算器は、第１及び第２の中継オペランドレジスタ１０５、１０６からの入力線と、演算器の出力をバイパスするバイパスルート（バイパス線）１５８と、他のパイプラインの演算器からのルート（入力線）のいずれかをそれぞれ選択する２つのセレクタ１０７、１０８と、セレクタ１０７、１０８の出力をクロックＣＬＫに応答してラッチする第１及び第２のオペランドレジスタ１０９，１１０を有する。第１及び第２のオペランドレジスタ１０９，１１０は、演算器が処理するビット数、例えば６４ビット、のデータをラッチ（保持）する。
【００１３】
演算器は、第１及び第２のオペランドレジスタ１０９，１１０と、演算器の演算結果データをクロックＣＬＫに応答してラッチする結果レジスタ１１２ａとの間に、加減算回路１５２、１５３ａと、他の演算器１５３ｂを並列に有する。
【００１４】
加減算回路は、第２のオペランドレジスタ１１０からの第２の入力データを制御レジスタ１５１内の反転制御ビットに応じて反転または非反転する第１の排他的論理和回路（以下ＸＯＲ回路）１５２と、加算回路１５３ａとを有する。この加算回路は、第１のオペランドレジスタ１０９からの第１の入力データと第１のＸＯＲ回路１５２の出力データのＸＯＲを生成する第２のＸＯＲ回路１５５と、第１の入力データと第１のＸＯＲ回路の出力からキャリーデータを生成するキャリー演算器１５４と、第２のＸＯＲ回路１５５の出力データとキャリー演算器１５４の出力データのＸＯＲを演算する第３のＸＯＲ回路１５６を有する。
【００１５】
そして、加減算回路は、第３のＸＯＲ回路１５６の出力データをクロックＣＬＫに応答してラッチする結果レジスタ１１２ａと、第３のＸＯＲ回路１５６の出力データを第１及び第２のオペランドレジスタ１０９，１１０にバイパスする第１のバイパスルート１５８を有する。
【００１６】
また、演算器は、加減算回路１５２、１５３ａと他の演算器１５３ｂの出力のいずれかを選択する出力セレクタ１１１を有する。さらに、演算器は、加減算のコンディションコードを生成するコンディションコード生成回路１５７と、その出力をクロックＣＬＫに応答してラッチするコンディションコード結果レジスタ１１２ｂを有する。
【００１７】
さらに、結果レジスタ１１２ａ，１１２ｂがラッチした演算結果データは、ルート１５９を経由して、結果レジスタの中継レジスタ１１３にラッチされ、レジスタファイル１０１にライトバックされる。また、結果レジスタ１１２ａの演算結果データはルート１５９とセレクタ１０７，１０８を経由して第１及び第２のオペランドレジスタ１０９，１１０にバイパスされる場合もあり、さらに、他のパイプラインの演算器に転送される場合もある。
【００１８】
図２は、加減算回路の演算アルゴリズムを説明する図である。図２は、第１及び第２のオペランドレジスタ１０９，１１０内の４ビットの第１及び第２の入力データOP1<3:0>＝０１１１、OP2<3:0>＝００１０の加算演算例を示す。この２つの入力データOP1,OP2の場合のキャリーデータCA<4:0>＝０１１００も示されている。この場合、加減算回路は、第１、第２の入力データOP1、OP2とキャリーデータCA<4:0>をそれぞれＸＯＲ演算することで、加算結果SUM<3:0>＝１００１を生成する。
【００１９】
一方、図２には、図１の加減算回路１５２，１５３ａが示されている。第１のＸＯＲ回路１５２は、反転制御ビットレジスタ１５１の反転制御ビットに応じて、第２の入力データOP2を反転または非反転する。図２の加算演算の場合、反転制御ビットは「０」になり、第１のＸＯＲ回路１５２は、第２の入力データOP2をそのまま出力する。そして、第２のＸＯＲ回路１５５は、第１、第２入力データOP1,OP2をＸＯＲ演算する奇偶判定する回路であり、第３のＸＯＲ回路１５６は、キャリーデータCAと第２のＸＯＲ回路１５５の出力をＸＯＲ演算する。
【００２０】
加減算回路１５２，１５３ａが減算を行う場合、反転制御ビットは「１」になり、第２の入力データOP2を反転する。そして、図示されないが、キャリー演算器１５４の最下位キャリービットCA<0>に「１」が入力される。この結果、減算の場合、加算回路１５３ａは以下の演算を実行する。
OP1−OP2＝OP1＋〜OP2＋１  （〜OP2はOP2の反転を示す）
図３は、演算器の別の例を示す図である。図３の加減算回路２５２，２５３ａは、前述の特許文献２に記載された回路であり、図１の加減算回路の第１、第２のオペランドレジスタ１０９，１１０から第３のＸＯＲ回路１５６までのクリティカルパスの遅延時間を短縮した例である。図３中、図１と同じ回路要素には同じ引用番号を付した。また、図３中、図１と異なる回路要素には２００番代の引用番号を付した。
【００２１】
図３の加減算回路２５２，２５３ａは、図１と異なり、第２の入力データOP2を反転制御ビットに応じて反転または非反転する第１のＸＯＲ回路２５２を、第２のオペランドレジスタ１１０より前段に設ける。そして、第３のＸＯＲ回路１５６の出力を、第１のバイパスルート１５８を経由して第１、第２のオペランドレジスタ１０９、１１０にバイパスする。これにより、第２のオペランドレジスタ１１０から第３のＸＯＲ回路１５６までのクリティカルパスから第１のＸＯＲ回路２５２が除去され、クリティカルパスは、加算回路２５３ａ内のキャリー演算器１５４と第３のＸＯＲ回路１５６のパスになる。これにより、クリティカルパスの遅延時間が第１のＸＯＲ回路２５２の遅延時間分短縮される。
【００２２】
一方、第１のＸＯＲ回路２５２を第２のオペランドレジスタ１１０の前段に設けたことに伴い、現在の命令の加減算結果データを次の命令で加減算することを可能にするため、図３の加減算回路は、次の構成を有する。すなわち、図３の加減算回路は、ＸＯＲ回路１５５の出力データを反転制御ビットに応じて反転／非反転するＸＯＲ回路２５９と、ＸＯＲ回路２５９の出力データとキャリー出力ＣＡとをＸＯＲ演算するＸＯＲ回路２５６と、ＸＯＲ回路２５９の出力データを第２のオペランドレジスタ１１０にバイパスする第２のバイパスルート２６０とを有する。すなわち、図１において、次のクロックサイクルのために、第３のＸＯＲ回路１５６の出力を第１のＸＯＲ回路１５２（２５２）で反転／非反転するという回路の順番を逆にして、図３は、第１のＸＯＲ回路１５２（２５２）に対応するＸＯＲ回路２５９を、第３のＸＯＲ回路１５６に対応するＸＯＲ回路２５６の前段に設ける。ＸＯＲ演算は、順番を入れ替えても同じ演算結果が得られる特性を利用することで、このようなＸＯＲ回路の順番の入れ替えが可能である。
【００２３】
これにより、次の命令で減算する場合は、反転制御ビットレジスタ２５１ｂの反転制御ビットを「１」にして、ＸＯＲ回路２５９が第２のＸＯＲ回路１５５の出力データを反転し、ＸＯＲ回路２５６がキャリー出力ＣＡとＸＯＲ回路２５９の出力とのＸＯＲ演算を行い、反転済みの結果データを第２のバイパスルート２６０経由で第２のオペランドレジスタ１１０にバイパスする。
【００２４】
上記の第１のバイパスルート１５８と、第２のバイパスルート２６０は、共に、途中にレジスタがなく、１クロックサイクルで転送可能な最短バイパスルートである。しかも、キャリー演算器１５４は、少なくとも２段のＸＯＲ回路以上の遅延時間を有するので、キャリー演算器１５４の遅延時間は、少なくとも第２のＸＯＲ回路１５５とＸＯＲ回路２５９の遅延時間以上である。つまり、第１、第２のバイパスルート１５８，２６０の遅延時間は、それぞれ、キャリー演算器１５４と第３のＸＯＲ回路１５６の遅延時間と、キャリー演算器１５４とＸＯＲ回路２５６の遅延時間になり、両者は同等の遅延時間になる。
【００２５】
したがって、図３の加減算器は、次の命令で加減算結果データを減算する場合は、反転制御ビットレジスタ２５１ｂに反転制御ビット「１」を格納して現在の命令の加減算結果データを反転し、次の命令では、セレクタ１０８が第２のバイパスルート２６０を選択し、加算器２５３ａが減算を行う。次の命令で加減算結果を加算する場合は、セレクタ１０８は第１のバイパスルート１５８を選択する。または、反転制御ビット「０」によりＸＯＲ回路２５９が反転せず、第２のバイパスルート２６０をセレクタ１０８が選択する。
【００２６】
また、図３の演算器は、第１のＸＯＲ回路２５２を第２のオペランドレジスタ１１０の前段に設けたため、中継オペランドレジスタ１０６の出力と、結果レジスタ１１２ａの出力データが転送されるバイパスルート１５９のいずれかを選択するセレクタ２５０を有する。
【００２７】
しかしながら、図３の加減算回路において、次の点を改良することが望ましい。第１に、図３のキャリー演算器１５４の出力が第３のＸＯＲ１５６と、第２のバイパスルート２６０のＸＯＲ回路２５６とに供給されるため、キャリー演算器のファンアウトが２となる。これにより、クリティカルパスの遅延時間が大きくなる。第２に、図３は、加算回路２５３ａとそれに並列に設けられる他の演算器２５３ｂを有し、それらの演算結果をオペランドレジスタ１１０にバイパスする第１のバイパスルート１５８に加えて、加減演算結果を反転したデータをバイパスする第２のバイパスルート２６０を有する。そのため、バイパスルートが冗長になり、ハードウエア資源が増大する。
【００２８】
［本実施の形態の加減算回路］
本実施の形態の加減算回路は、図３の２つの点を改良する。つまり、第１に、キャリー演算器１５４の出力のファンアウトを減らし、最短のバイパスルートの冗長構成をなくす。第２に、クリティカルパスの遅延時間をできるだけ短くする。
【００２９】
図４は、本実施の形態における加減算回路を有する演算器の構成を示す図である。図４中、図１、図３と同じ回路要素には同じ引用番号を付した。また、図４中、図１、図３と異なる回路要素には３００番代の引用番号を付した。
【００３０】
図４の加減算回路２５２，３５３ａは、図３と同様に、第１、第２のオペランドレジスタ１０９，１１０と、結果レジスタ１１２ａとコンディションコード結果レジスタ１１２ｂとを有する。さらに、加減算回路は、図３と同様に、反転（または減算）制御ビットレジスタ２５１ａの反転制御ビットに応じて第３の入力セレクタ３５０が選択する入力ルートのデータを反転または非反転する第１のＸＯＲ回路２５２を、第２のオペランドレジスタ１１０の前段に有する。そして、加減算回路は、第１、第２オペランドレジスタ１０８，１１０と結果レジスタ１１２ａとの間に、加算回路３５３ａを有する。また、演算器は、第１、第２オペランドレジスタ１０８，１１０と結果レジスタ１１２ａとの間に、加算回路３５３ａと並列に、他の演算器３５３ｂを有する。
【００３１】
加算回路３５３ａは、第１、第２のオペランドレジスタ１０９，１１０の第１、第２の入力データOP1,OP2のＸＯＲ演算を行い奇偶判定する第２のＸＯＲ回路１５５を有する。そして、図３と異なり、第２のＸＯＲ回路１５５と第３のＸＯＲ回路３５６との間に、第１のバイパス制御レジスタ３５２ｂの制御ビットに応じて第２のＸＯＲ回路１５５の出力データを反転または非反転する第４のＸＯＲ回路３５９を有する。
【００３２】
この構成において、キャリー演算器１５４は、前述したとおり、少なくとも２段のＸＯＲ回路の遅延時間を有するので、第４のＸＯＲ回路３５９を追加しても、加算回路３５３ａのクリティカルパスの遅延時間が悪化することはない。この図４における加算回路３５３ａ内の第２のＸＯＲ回路１５５と第４のＸＯＲ回路３５９と第３のＸＯＲ回路３５６の構成は、図３の第２のＸＯＲ回路１５５とＸＯＲ回路２５９とＸＯＲ回路２５６と同等である。
【００３３】
そして、図４の演算器は、加減算回路を構成する加算回路３５３ａの第３のＸＯＲ回路３５６の出力と他の演算器３５３ｂの出力のいずれかを選択する出力セレクタ１１１の出力を、最短の第１のバイパスルート（バイパス線）ＢＰ１を経由して第１、第２の入力セレクタ３０７，３０８にバイパスし（入力し）、第１、第２のオペランドレジスタ１０９，１１０でクロック同期でラッチ可能にする。つまり、図４の演算器では、最短のバイパスルートＢＰ１は単一のバイパスルートであり、図３のように冗長していない。これにより、最短のバイパスルート数が図３より少なく、回路規模が小さくなる。
【００３４】
また、加算回路３５３ａ内のキャリー演算器１５４の出力は、第３のＸＯＲ回路３５６にしか接続されないので、図３の例よりファンアウト数が削減されて、ファンアウト数１になっている。これにより、オペランドレジスタ１０９，１１０と第３のＸＯＲ回路３５６までのクリティカルパスの遅延時間が、図３より短くなる。前述したとおり、キャリー演算器１５４の遅延時間は、少なくとも２つのＸＯＲ回路の遅延時間以上であるから、キャリー演算器１５４の出力のファンアウト数の削減は、クリティカルパスの遅延時間の短縮に寄与する。
【００３５】
図４の演算器は、図３と異なり次の構成を有する。
【００３６】
（構成１）加算器３５３ａが、演算結果データを第１のバイパス制御レジスタ３５２ｂの制御ビットに応じて反転する第４のＸＯＲ回路３５９を有する。さらに、他の演算器３５３ｂの出力を、第１のバイパス制御レジスタ３５２ｂの制御ビットに応じて反転または非反転するＸＯＲ回路３５９ｂを有する。そして、出力セレクタ１１１が、加算回路３５３ａの出力か他の演算器３５３ｂのＸＯＲ回路３５９ｂの出力のいずれかを選択する。これにより、演算器は、加減算回路２５２，３５３ａの演算結果の出力と、他の演算器３５３ｂの演算結果の出力のいずれかを、最短のバイパスルートＢＰ１を経由して、第１、第２のオペランドレジスタ１０９，１１０にバイパスする。そのため、加減算回路の加算回路３５３ａまたは他の演算器３５３ｂの演算結果データを、次のクロックサイクルでオペランドレジスタ１０９，１１０がラッチし、演算回路が演算でき、連続する命令の演算サイクルを最短のクロックサイクルで実行できる。後で再度詳述する。
【００３７】
（構成２）演算器は、結果レジスタ１１２ａの出力データを、第１のバイパス制御レジスタ３５２ｃの制御ビットに応じて反転または非反転する第５のＸＯＲ回路３５８を有する。加算回路３５３ａ内の第４のＸＯＲ回路３５９が第１のバイパス制御レジスタ３５２ｂの制御ビットに応じて第２のＸＯＲ回路１５５の出力を反転した場合、第５のＸＯＲ回路３５８が同じ制御ビットで再度反転する。これにより、最短のバイパスルートＢＰ１には演算結果データの反転データを出力し、最短ではない別のバイパスルートＢＰ２には演算結果データの非反転データを出力することができる。最短のバイパスルートＢＰ１により演算結果の反転データを第１、第２のオペランドレジスタ１０９，１１０にラッチし、同時に、別のバイパスルートＢＰ２により演算結果の非反転データをレジスタファイル１０１，１０２にライトバックできる。後で改めて詳述する。
【００３８】
（構成３）演算器は、全てゼロのデータを格納するオールゼロレジスタ３６２を有し、オールゼロレジスタ３６２の出力データは、第１の入力セレクタ３０７を介して第１のオペランドレジスタ１０９にラッチされ、一方で、出力データは、第３の入力セレクタ３５０と第１のＸＯＲ回路２５２と第２の入力セレクタ３０８を介して第２のオペランドレジスタ１１０にラッチされる。これにより、同じデータの反転データと非反転データを第１、第２のオペランドレジスタ１０９，１１０にそれぞれラッチし、加算回路３５３ａと他の演算器３５３ｂでそれぞれの演算を実行することができる。最短のバイパスルートＢＰ１が加算回路３５３ａまたは他の演算器３５３ｂの出力データとその反転データを第１、第２のオペランドレジスタ１０９，１１０に供給できないが、オールゼロレジスタ３６２の出力データとその反転データを第１、第２のオペランドレジスタ１０９，１１０にラッチできる。後で改めて詳述する。
【００３９】
（構成４）演算器は、加算回路が同じデータの減算を行う場合にコンディションコード生成回路１５７が生成するコンディションコードを格納する定数レジスタ３６０と、コンディションコード生成回路１５７の出力と定数レジスタ３６０の出力のいずれかを選択するセレクタ３６１を有する。これにより、後述するとおり、他の演算器３５３ｂがＥＤＧＥ演算を行う場合に、必要なコンディションコードをコンディションコード結果レジスタ１１２ｂにラッチすることができる。後で改めて詳述する。
【００４０】
（構成５）図４の演算器は、第３の入力セレクタ３５０と、第１、第２の入力セレクタ３０７，３０８と、出力セレクタ１１１と、セレクタ３６１に選択信号を供給する第２のバイパス制御レジスタ３６２とを有する。第３の入力セレクタ３５０は、第２の中継オペランドレジスタ１０６と、第２のバイパスルートＢＰ２と、オールゼロレジスタ３６０のいずれかを選択する。第１の入力セレクタ３０７は、第１の中継オペランドレジスタ１０５と、他のパイプラインからの入力と、第１のバイパスルートＢＰ１と、第２のバイパスルートＢＰ２と、オールゼロレジスタ３６０のいずれかを選択する。第２の入力セレクタ３０８は、第１のＸＯＲ回路２５２と、他のパイプラインからの入力と、第１のバイパスルートＢＰ１のいずれかを選択する。出力セレクタ１１１は、加減算回路の加算回路３５３ａの出力、または、他の演算器３５３ｂの出力を反転または非反転するＸＯＲ回路３５９ｂの出力のいずれかを選択する。そして、コンディションコード出力のセレクタ３６１は、コンディションコード生成回路１５７の出力、または定数レジスタ３６０の出力のいずれかを選択する。
【００４１】
（構成６）図４の演算器は、さらに、加算回路３５３ａ内の第４のＸＯＲ回路３５９と、他の演算器３５３ｂの出力を反転または非反転するＸＯＲ回路３５９ｂとに入力される制御ビットをラッチする第１のバイパス制御レジスタ３５２を有する。
【００４２】
そして、図４には、タイミングを制御するクロックＣＬＫによるクロックサイクルＢ１，Ｂ２，Ｘが示されている。クロックサイクルＢ１では、データが中継オペランドレジスタ１０５，１０６，反転（または減算）制御ビットレジスタ２５１、第１、第２のバイパス制御ビットレジスタ３５２ａ，３６２ａの入力に供給される。クロックサイクルＢ２では、中継オペランドレジスタ１０５，１０６，反転（または減算）制御ビットレジスタ２５１、第１、第２のバイパス制御ビットレジスタ３５２ａ，３６２ａが、クロックＣＬＫに応答してデータをラッチする。演算器は、クロックサイクルＢ１，Ｂ２で、レジスタファイル１０１，１０２などの入力データを第１、第２のオペランドレジスタ１０９，１１０の入力まで転送する。
【００４３】
クロックサイクルＸでは、第１、第２のオペランドレジスタ１０９，１１０と、バイパス制御レジスタ３５２ｂ、３６２ｂが、クロックＣＬＫに応答して入力データをラッチする。これにより、クロックサイクルＸでは、加算回路３５３ａや他の演算器３５６ｂの演算が行われ、演算結果が結果レジスタの入力まで転送される。
【００４４】
クロックサイクルＵでは、結果レジスタ１１２ａ，１１２ｂがクロックに応答して演算結果とコンディションコードをラッチする。つまり、クロックサイクルＵは、演算結果データを中継結果レジスタ１１３に転送するサイクルである。そして、クロックサイクルＣでは、中継結果レジスタ１１３がクロックに応答して演算結果データをラッチしレジスタファイルにライトバックする。
【００４５】
［キャリー演算器］
次に、本実施の形態において、加算回路内のキャリー演算器１５４が少なくとも２つのＸＯＲ回路の遅延時間を有することについて説明する。
【００４６】
図５は、キャリー演算器の回路の一例を示す図である。キャリー演算器は、２つの入力データA<63:0>とB<63:0>のそれぞれのビットの論理積G<63:0>と論理和P<63:0>を生成するP,G生成回路１０と、それぞれ４ビットの論理積Gと論理和Pと１ビットのキャリービットCを入力するキャリールックアヘッド（CLA）回路１１，１２，１３を有する。CLA回路については次のとおりである。
【００４７】
【数１】
0006428488.tif 000002
【００４８】
【数２】
0006428488.tif 000003
【００４９】
【数３】
0006428488.tif 000004
【００５０】
【数４】
0006428488.tif 000005
【００５１】
したがって、各４ビットCLAが１段のＸＯＲ回路程度であるので、キャリー演算器１５４の遅延時間は、少なくとも２段のＸＯＲ回路以上の遅延時間になる。
【００５２】
［コンディションコード生成回路］
図６は、コンディションコード生成回路１５７の構成を示す図である。コンディションコード（Condition Code）は、演算結果の状態を4ビットで表す補助データであり、以下の４種類のビットn,z,v,cで構成される。
（１）演算結果の符号が負であることを表すビットn
（２）演算結果の値が0になったことを表すビットz
（３）演算結果の値の桁が飽和(オーバーフロー：OVF)したことを表すビットv
（４）加算/減算結果の値の桁が飽和し繰り上げの値（キャリー値）として出てきたことを表すビットc
図６において、キャリー演算器１５４のキャリー値をCARRY<64:1>とし、加算回路３５３ａの計算結果をRESULT<63:0>と表現すると、コンディションコードCCは以下のように求められる。
（１）n＝RESULT<63>  (データ幅が64bitのとき)
（２）ビットzは、演算結果の全てのビットのNAND値であるので、反転を「〜」、ANDを「・」とすると、NANDゲート４００の出力ｚは、以下のとおりである。
z= 〜(RESULT <63>・RESULT<62>・…・RESULT<1>・RESULT<0>)
（３）ビットv は、正の数同士の和でCARRY<63>=1とき、または負の数同士の和でCARRY<63>=0のときに1になる。図中、オーバーフローチェック回路４０１は、CARRY<63>、CARRY<64>を入力してビットｖを出力する。
（４）ビットc は、CARRY<64>である。
【００５３】
図６のとおり、コンディションコード生成回路１５７は、加算回路３５３ａの加算結果RESULT<63:0>と、キャリー演算器１５４の出力CARRY<63>、CARRY<64>とを入力し、コンディションコードn,z,v,cを生成する。なお、図４において、キャリー演算器１５４の出力がコンディションコード生成回路１５７に入力する信号線が省略されている。
【００５４】
［演算器の動作］
以下、本実施の形態の加減算回路を有する演算器（加減算器）の動作について説明する。以下の図において、セレクタが選択している配線は太線で示し、セレクタの選択信号は矩形内文字で、各レジスタの値は円形内文字でそれぞれ示す。また、以下の説明でデータの反転を「〜」で示す。したがって、〜ＹはＹの反転を意味する。
【００５５】
図７は、レジスタファイルのデータＡ，Ｂを入力し減算Ａ−Ｂ＝Ｘを演算する動作を示す図である。クロックサイクルＢ１で、レジスタファイル１０１、１０２内のデータＡ、Ｂが中継オペランドレジスタ１０５、１０６の入力まで転送され、減算制御ビットレジスタ２５１ａの入力には減算制御ビット「１」が転送され、第１のバイパス制御レジスタ３５２ａの入力には制御ビット「０」が転送される。
【００５６】
次に、クロックサイクルＢ２で、中継オペランドレジスタ１０５，１０６が入力データＡ、Ｂをラッチし、減算制御ビットレジスタ２５１ａが減算制御ビット「１」をラッチし、第１のバイパス制御レジスタ３５２ａは制御ビット「０」をラッチする。そして、第３の入力セレクタ３５０が入力３を選択し、第１の入力セレクタ３０７が入力５を、第２の入力セレクタ３０８が入力３をそれぞれ選択し、第１、第２のオペランドレジスタ１０９，１１０の入力にはデータＡ，〜Ｂが転送される。また、第１のバイパス制御レジスタ３５２ｂの入力には制御ビット「０」が転送される。このとき、第１のＸＯＲ回路２５２は、入力データＢを反転しない。
【００５７】
次に、クロックサイクルＸで、第１、第２のオペランドレジスタ１０９，１１０が入力データＡ，〜Ｂをラッチし、また、第１のバイパス制御レジスタ３５２ｂが制御ビット「０」をラッチする。これにより、加算回路３５３ａは、入力データＡ，〜Ｂと制御ビット「０」を入力し、Ａ＋〜Ｂ＋１＝Ｘを演算し、結果レジスタ１１２ａの入力には演算結果Ｘが転送される。第１のバイパス制御レジスタ３５２ｂの制御ビット「０」により、第４のＸＯＲ回路３５９は、第２のＸＯＲ回路１５５の出力を反転しない。
【００５８】
そして、クロックサイクルＵで、結果レジスタ１１２ａが演算結果Ｘをラッチし、ＣＣ結果レジスタ１１２ｂがＣＣ生成回路１５７の出力をラッチし、第１のバイパス制御レジスタ３５２ｃが制御ビット「０」をラッチする。そして、第５のＸＯＲ回路３５８は結果レジスタ１１２の演算結果Ｘを反転せず、演算結果Ｘが中継結果レジスタ１１３の入力に転送される。次のクロックサイクルＣで中継結果レジスタ１１３が演算結果Ｘをラッチし、ラッチされた演算結果Ｘはレジスタファイル１０１にライトバックされる。この例では、演算結果Ｘが最短のバイパスルートＢＰ１を経由してオペランドレジスタ１０９，１１０にバイパスされることはない。
【００５９】
［構成１、２に対応する動作］
次に、前述した構成１、２に対応する動作を説明する。
【００６０】
図８、図９は、第１の命令でＣ＋Ｄ＝Ｙの演算を行い、次の第２の命令でＥ−Ｙ＝Ｚの演算を行う動作を示す図である。また、図１０は、本実施の形態の演算器が、最短のバイパスルートＢＰ１で次の命令の演算を行う動作と、最短ではないバイパスルートＢＰ２で次の命令の演算を行う動作を示すタイミングチャート図である。図８、９の動作は、図１０の最短のバイパスルートＢＰ１で次の命令の演算を行う動作に対応し、図８は命令１（Ｃ＋Ｄ＝Ｙ）の動作、図９は命令２の動作（Ｅ−Ｙ＝Ｚ）を示す。
【００６１】
図１０のサイクルＰ，ＰＴは、命令デコード後の命令に対応する制御信号を演算器に投入するタイミングである。サイクルＢ１は、入力データを中継オペランドレスタ１０５，１０６まで転送するタイミングであり、サイクルＢ２は、オペランドレジスタ１０９，１１０まで転送するタイミングである。サイクルＸは、オペランドレジスタ１０９，１１０が入力データをラッチし、演算回路（加算回路３５３ａと他の演算器３５３ｂ）が演算し、演算結果を結果レジスタ１１２ａまで転送するタイミングである。サイクルＵは、結果レジスタ１１２ａが演算結果をラッチし、中継結果レジスタ１１３まで転送するタイミングであり、サイクルＣはレジスタファイル１０１にライトバックするタイミングである。
【００６２】
図８において、クロックサイクルＢ１で、中継オペランドレジスタ１０５，１０６の入力までレジスタファイル内のデータＣ，Ｄが転送され、同時に、第１のバイパス制御レジスタ３５２ａの入力まで制御ビット「１」が転送される。
【００６３】
次のクロックサイクルＢ２で、中継オペランドレジスタ１０５，１０６がレジスタファイル内のデータＣ，Ｄをラッチする。同時に、第１のバイパス制御レジスタ３５２ａが制御ビット「１」をラッチする。そして、第３の入力セレクタが入力３を選択し、第１、第２の入力セレクタが入力５、３をそれぞれ選択し、第１、第２のオペランドレジスタ１０９、１１０の入力までデータＣ，Ｄが転送される。同時に、第１のバイパス制御レジスタ３５２ｂの入力まで制御ビット「１」が転送される。
【００６４】
次に、演算クロックサイクルＸで、第１、第２のオペランドレジスタ１０９、１１０が入力データＣ，Ｄをラッチする。同時に、第１のバイパス制御レジスタ３５２ｂが制御ビット「１」をラッチする。そして、加算回路３５３ａが、Ｃ＋Ｄ＝Ｙを演算し、第１のバイパス制御レジスタ３５２ｂの制御ビット「１」により第４のＸＯＲ回路３５９が第２のＸＯＲ回路１５５の出力データを反転し、第３のＸＯＲ回路３５６が反転データ〜Ｙを生成する。そして、出力セレクタ１１１が入力１を選択し、結果レジスタ１１２ａの入力まで反転データ〜Ｙが転送される。同時に、第１のバイパス制御レジスタ３５２ｃの入力まで制御ビット「１」が転送される。
【００６５】
上記のように、次の命令２でＥ−Ｙ＝Ｚを演算することが予測され、第１のバイパス制御レジスタ３５２に制御ビット「１」がラッチされ、加算回路３５３ａが反転データ〜Ｙを出力する。
【００６６】
そして、次のクロックサイクルＵで、結果レジスタ１１２ａが反転データ〜Ｙをラッチする。同時に、第１のバイパス制御レジスタ３５２ｃが制御ビット「１」をラッチする。そして、第５のＸＯＲ回路３５８が制御ビット「１」により反転データ〜Ｙを反転し、中継結果レジスタ１１３の入力まで非反転データＹが転送される。さらに、クロックサイクルＣで中継結果レジスタ１１３がデータＹをラッチし、データＹがレジスタファイル１０１にライトバックされる。
【００６７】
図９において、演算器は、図８の演算結果〜Ｙを最短バイパスルートＢＰ１を介して第２のオペランドレジスタ１１０にラッチし、命令２の演算Ｅ−Ｙ＝Ｚを演算する。この場合、命令１のサイクルＸと命令２のサイクルＢ２とが同じクロックサイクルになる。図１０のクロックサイクルＴ５に示されるように、図８の命令１（Ｃ−Ｄ＝Ｙ）のサイクルＸで生成された反転演算結果〜Ｙが、図９の命令２（Ｅ−Ｙ＝Ｚ）のサイクルＢ２では、第２の入力セレクタ３０８を経由して第２のオペランドレジスタ１１０の入力まで転送されている。また、命令２のサイクルＢ２で、レジスタファイル内のデータＥが、中継オペランドレジスタ１０５でラッチされ、第１の入力セレクタ３０７を経由して第１のオペランドレジスタ１０９の入力まで転送されている。
【００６８】
次に、命令２のサイクルＸで、第１、第２のオペランドレジスタ１０９，１１０が入力データＥ，〜Ｙをそれぞれラッチし、加算回路３５３ａがＥ＋（〜Ｙ）＋１＝Ｚの演算を行い、演算結果データＺを結果レジスタ１１２ａの入力まで転送する。同時に、ＣＣ生成回路１５７は上記演算のコンディションコードＣＣを生成し、結果レジスタ１１２ｂの入力まで転送する。
【００６９】
そして、命令２のサイクルＵで、結果レジスタ１１２ａ，１１２ｂが演算結果Ｚ，ＣＣをラッチし、サイクルＣで中継結果レジスタ１１３が演算結果Ｚ，ＣＣをラッチし、レジスタファイル１０１にライトバックする。
【００７０】
上記の図８、９、１０による説明によれば、本実施の形態の演算器（加減算器）は、クロックサイクルＴ５での命令１のサイクルＸで、命令１の演算結果Ｙを予め反転しておき、最短のバイパスルートＢＰ１を経由して第２のオペランドレジスタ１１０に転送しておく。そのため、次のクロックサイクルＴ６での命令２のサイクルＸで、命令２の減算に必要な反転データ〜Ｙを第２のオペランドレジスタ１１０にラッチし、演算することができる。これにより、連続するクロックサイクルＴ５，Ｔ６で、命令１と命令２の演算サイクルＸを実行することができる。この点は、前述の構成１に対応する。
【００７１】
上記の図８によれば、本実施の形態の演算器（加減算器）は、次の命令２（Ｅ−Ｙ＝Ｚ）のために、命令１（Ｃ＋Ｄ＝Ｙ）の段階で加算回路３５３ａが反転データ〜Ｙを生成する。しかし、第５のＸＯＲ回路３５８が非反転データＹを生成し、レジスタファイルへの演算結果Ｙのライトバックを可能にする。つまり、演算器は、最短のバイパスルートＢＰ１には演算結果データの反転データ〜Ｙを出力し、最短ではない別のバイパスルートＢＰ２には演算結果データの非反転データＹを出力することができる。この点は、前述の構成２に対応する。
【００７２】
［構成３に対応する動作］
次に、前述の構成３に対応する動作を説明する。
【００７３】
図１１、本実施の形態の演算器が、演算結果の反転データを最短バイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０に転送する動作を示す図である。図８において、命令１のサイクルＸで、加算回路３５３ａが入力データＣ，Ｄから〜（Ｃ＋Ｄ）＝〜Ｙを演算し、その反転データ〜Ｙを最短バイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０の入力まで転送する。
【００７４】
つまり、図１１に示す通り、命令２のサイクルＢ２で、反転データ〜Ｙが最短バイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０の入力まで転送される。その結果、命令２のサイクルＸで、加算回路３５３ａは、演算結果ＹについてＹ−Ｙの演算を行うことができない。
【００７５】
図１２は、本実施の形態の演算器が、演算結果の非反転データＹと反転データ〜Ｙを最短ではないバイパスルートＢＰ２を経由して第１、第２のオペランドレジスタ１０９，１１０にラッチする動作を示す図である。次の通り、演算器は、最短バイパスルートＢＰ１より１クロックサイクル遅いバイパスルートＢＰ２を利用することで、演算結果の非反転データＹと反転データ〜Ｙを第１、第２のオペランドレジスタ１０９，１１０に転送できる。この動作は、図１０のバイパスルートＢＰ２経由で演算結果を入力する場合に対応する。
【００７６】
図１２では、図１０（Ｂ）の命令１のサイクルＸは、次の命令２のサイクルＢ１と同じクロックサイクルＴ５になるため、命令２の演算サイクルＸはクロックサイクルＴ７になる。そのため、図１０（Ａ）の最短バイパスルートＢ１経由で演算結果を入力する場合の命令２の演算サイクルＸがクロックサイクルＴ６になる場合に比較すると、１クロックサイクル遅くなる。
【００７７】
図１２において、命令１（Ｃ＋Ｄ＝Ｙ）のサイクルＵ（命令２（Ｙ−Ｙ）ではサイクルＢ２）にて、結果レジスタ１１２ａが演算結果Ｙをラッチし、最短ではないバイパスルートＢＰ２を経由して第１のオペランドレジスタ１０９の入力まで転送する。同じサイクルで、結果レジスタ１１２ａの演算結果Ｙが第３の入力セレクタ３５０を介して第１のＸＯＲ回路２５２に入力され、減算制御ビットレジスタ２５１ａの減算制御ビット「１」により反転され、その反転データ〜Ｙが第２のオペランドレジスタ１１０の入力まで転送する。
【００７８】
したがって、命令２のサイクルＸでは、第１、第２のオペランドレジスタ１０９，１１０がラッチし、演算結果データＹとその反転データ〜Ｙとをラッチし、加算回路３５３ａがＹ−Ｙ＝Ｙ＋〜Ｙを演算する。
【００７９】
上記のように、最短でないバイパスルートＢＰ２を経由することで、第１、第２のオペランドレジスタ１０９，１１０に演算結果データＹとその反転データ〜Ｙとをラッチすることはできるが、結果レジスタ１１２ａがラッチしたデータを使用するので、次の命令の演算サイクルＸの実行が１クロックサイクル遅れる。
【００８０】
図１３は、本実施の形態の演算器が同じ演算結果Ｙを入力として減算を行う動作を示す。図１３では、演算器が、クロックサイクルの遅れを伴うことなく、命令２の減算を実行する。この動作は、前述の構成３により可能になる。
【００８１】
図１３において、図１０（Ａ）に示すとおり、クロックサイクルＴ５（命令１（Ｃ＋Ｄ＝Ｙ）の演算サイクルＸ、命令２（Ｙ−Ｙ）のサイクルＢ２）で、バイパス制御セレクタレジスタ３６２ａのセレクト信号「１」により、第３の入力セレクタ３５０が入力１を選択し、オールゼロレジスタ３６２の出力（６４ビット全てゼロ、オールゼロ）が第１のＸＯＲ回路２５２で反転（または減算）制御ビットレジスタ２５１ａの反転制御ビット「１」により反転され、第２の入力セレクタ３０８を経由し、第２のオペランドレジスタ１１０の入力まで転送される。一方、オールゼロレジスタ３６２の出力が第１の入力セレクタ３０７を経由し、第１のオペランドレジスタ１０９の入力まで転送される。
【００８２】
そして、クロックサイクルＴ６（命令２（Ｙ−Ｙ））のサイクルＸ）で、第１、第２のオペランドレジスタ１０９，１１０がオールゼロとオール１の入力データをラッチし、加算回路３５３ａが０−０＝０＋（〜０）＋１を演算する。そして、演算結果「０」が結果レジスタ１１２ａまで転送され、ＣＣ生成回路１５７が０−０のコンディションコードＣＣを生成し、ＣＣ結果レジスタ１１２ｂまで転送される。そして、次のクロックサイクルＴ７（命令２（Ｙ−Ｙ）のサイクルＵで、結果レジスタ１１２ａ，１１２ｂがそれぞれの転送されたデータをラッチする。
【００８３】
図１３の例では、加算回路３５３ａがＹ−Ｙの演算に代えて０−０の演算を実行する。両者の演算結果は共にオールゼロであるので、演算結果は正しい。そして、クロックサイクルＴ５，Ｔ６で、加算回路３５３ａが、命令１（Ｃ＋Ｄ＝Ｙ）と命令２（Ｙ−Ｙ）の演算サイクルＸを連続するクロックサイクルで実行する。
【００８４】
図１３において、加算回路３５３ａがＹ−Ｙの演算を行う代わりに、他の演算器３５３ｂがANDN(AND NOT)命令、ORN(OR NOT)命令、XORN(XOR NOT)命令を実行する場合にも適用できる。これらの命令の演算は、減算と同様に第２のオペランドレジスタ１１０に入力データの反転データをラッチして行われる。そして、ANDN命令、ORN命令、XORN命令の場合
も、以下のように入力データＸを「０」と置き換えても同じ演算結果になる。
ANDN命令：Ｘ＆（〜Ｘ）＝０，０＆（〜０）＝０
ORN命令：Ｘ｜（〜Ｘ）＝１，０｜（〜０）＝１
XORN命令：Ｘ＾（〜Ｘ）＝１，０＾（〜０）＝１
以上の通り、構成３によれば、最短のバイパスルートＢＰ１が加算回路３５３ａまたは他の演算器３５３ｂの出力データとその反転データを第１、第２のオペランドレジスタ１０９，１１０に供給できないが、しかし、オールゼロレジスタ３６２のデータとその反転データを第１、第２のオペランドレジスタ１０９，１１０にラッチできる。したがって、次の命令が減算、ANDN命令、ORN命令、XORN命令の場合は、前の命令のサイクルＸ（次の命令のサイクルＢ２）で、オールゼロレジスタ３６２のデータ「０」とその反転データ「１」を第１、第２のオペランドレジスタ１０９，１１０の入力まで転送することで、次のクロックサイクルで次の命令のサイクルＸを実行できる。
【００８５】
［構成４に対応する動作］
図１１で説明したとおり、本実施の形態の演算器は、演算結果データを最短のバイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０に転送し、これらのレジスタが同じ演算結果データをラッチする。そして、図１２で説明したとおり、第１、第２のオペランドレジスタ１０９，１１０に演算結果データとその反転データをラッチするには、最短でないバイパスルートＢＰ２を利用しなければならない。
【００８６】
したがって、演算器は、他の演算器３５３ｂが同じ演算結果データを入力とするＥＤＧＥ命令を演算し、同時に加算回路３５３ａが演算結果データとその反転データを演算する場合に支障が発生する。すなわち、図１１のように同じ演算結果データＹまたはその反転データ〜Ｙを最短のバイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０にラッチし他の演算器３５３ｂがＥＤＧＥ命令を実行する場合、加算回路３５３ａは同じ演算結果データＹまたはその反転データ〜Ｙの減算（Ｙ−Ｙ，〜Ｙ−〜Ｙ）を行うことができない。そのため、ＣＣ生成回路１５７が減算に伴うコンディションコードを生成できない。
【００８７】
ＥＤＧＥ命令は、データの下位ビットをマスクする演算であり減算とは異なる演算であり、コンディションコードは減算の結果を用いて生成される。したがって、ＥＤＧＥ命令を実行する場合、加算回路３５３ａは減算を実行してＣＣ生成回路に減算に対するコンディションコードを生成させる必要がある。ＥＤＧＥ命令の入力データと演算結果の一例（ＥＤＧＥ８の例）は、以下の表に示すとおりである。
【００８８】
【表１】
0006428488.tif 000006
【００８９】
そこで、本実施の形態の構成４によれば、演算器は、加算回路が同じデータの減算を行うときにコンディションコード生成回路１５７が生成するコンディションコードを格納する定数レジスタ３６０と、コンディションコード生成回路１５７の出力と定数レジスタ３６０の出力のいずれかを選択するセレクタ３６１を有する。
【００９０】
これにより、他の演算器３５３ｂが同じ演算結果データを入力してＥＤＧＥ演算を行う場合に、同じ演算結果データを減算した場合のコンディションコードを定数レジスタ３６０から出力しコンディションコード結果レジスタ１１２ｂにラッチすることができる。
【００９１】
図１４は、一般的なＥＤＧＥ命令を実行する場合の動作を示す図である。この例では、第２、第１のオペランドレジスタ１１０，１０９が、演算結果Ｙの反転データ〜Ｙと、レジスタファイル１０１から入力した入力データＥとをそれぞれラッチし、加算回路３５３ａが減算Ｅ−Ｙ＝Ｅ＋〜Ｙ＋１を実行する。一方、他の演算器３５３ｂは入力データ〜Ｙを反転し、入力データＥとＹについてＥＤＧＥ命令の演算を実行する。ＥＤＧＥ演算は、加算回路３５３ａのように遅延時間を最小限にする必要はないため、ＥＤＧＥ演算を行う他の演算器３５３ｂは、第２のオペランドレジスタ１１０がラッチした反転データ〜Ｙを反転して、入力データＥ、ＹについてＥＤＧＥ命令を実行する。
【００９２】
図１５は、本実施の形態における演算器による同じ演算結果を入力として他の演算器がＥＤＧＥ演算を行う場合の動作を示す図である。この例では、ＥＤＧＥ命令のサイクルＢ２で、前の命令を実行した加算回路３５３ａによる演算結果〜Ｙが、最短のバイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０の入力まで転送される。さらに、ＥＤＧＥ命令のサイクルＸで、演算結果〜Ｙ，〜Ｙが第１、第２のオペランドレジスタ１０９，１１０にラッチされる。これにより、他の演算器３５３ｂが、入力データ〜Ｙ，〜ＹについてＥＤＧＥ命令を実行する。
【００９３】
一方、定数レジスタ３６０は、同じ入力データを減算した場合にＣＣ生成回路１５７が生成するコンディションコード「０１００」を格納し、ＥＤＧＥ命令のサイクルＸで、そのコンディションコード「０１００」が第２のバイパス制御レジスタ３６２ｂ内のセレクタ３６１の選択信号「２」に基づいて選択され、結果レジスタ１１２ｂの入力まで転送される。
【００９４】
そして、次のサイクルＵで、結果レジスタ１１２ａが他の演算器３５３ａのＥＤＧＥ命令の結果ＥＤＧＥ（〜Ｙ，〜Ｙ）＝Ｚをラッチし、結果レジスタ１１２ｂがコンディションコード「０１００」をラッチする。
【００９５】
このように、プロセッサの命令デコーダは、前命令の演算結果データ〜Ｙを最短のバイパスルートＢＰ１を経由して第１、第２のオペランドレジスタ１０９，１１０にラッチし、他の演算器３５３ｂで入力データ〜Ｙ、〜ＹについてＥＤＧＥ命令の演算をする場合は、ＥＤＧＥ命令のサイクルＢ２で第２のバイパス制御レジスタ３６２ａにセレクタ３６１の選択信号「２」をラッチさせる。それにより、演算器は、コンディションコードについては、加算回路３５３ａとＣＣ生成回路１５７を使用せず、定数レジスタ３６０内の「０１００」を結果レジスタ１１２ｂに出力する。
【００９６】
以上説明したとおり、本実施の形態によれば、以下の効果を奏することができる。
【００９７】
（１）加減算器が、ビット反転用の第１のＸＯＲ回路２５２をオペランドレジスタ１０９，１１０の前段に有する。また、オペランドレジスタと結果レジスタ１１２ａとの間に設けられる加算回路３５３ａが、遅延時間が長いキャリー演算器１５４に並列に、ビット判定用の第２のＸＯＲ回路１５５と、次の減算命令などのためのビット反転用の第４のＸＯＲ回路３５９を有する。そして、第３のＸＯＲ回路３５６の出力がバイパスルートＢＰ１を経由してオペランドレジスタ１０９，１１０の入力まで転送され、演算サイクルでラッチされる。したがって、キャリー演算器１５４のファンアウトが１つになり、オペランドレジスタ１０９，１１０から第３のＸＯＲ回路３５６の出力までの遅延時間を短くできる。また、最短のバイパスルートＢＰ１を冗長化せず１つに減らすことができる。そのため、加減算器は、クロック周期を短くでき、少ないクロック数で連続する命令を演算処理できる。
【００９８】
（２）加算回路内で第４のＸＯＲ回路３５９がビット反転した場合は、加算回路３５３ａは、演算結果データとして反転データ〜Ｙを出力する。しかし、結果レジスタ１１２ａの後段に再ビット反転用のＸＯＲ回路３５８を設けることで、加減算器は、演算結果データをレジスタファイルにライトバックすると共に、バイパスルートＢＰ１を経由して演算結果の反転データ〜Ｙをオペランドレジスタ１０９，１１０に転送できる。
【００９９】
（３）上記の構成により、加減算器は、最短のバイパスルートＢＰ１を経由する場合は、異なる演算結果データを第１、第２のオペランドレジスタ１０９，１１０にラッチできない。しかし、オールゼロレジスタ３６２を設けて、オールゼロレジスタ３６２のオールゼロデータを第１のオペランドレジスタ１０９には反転することなく供給し、第２のオペランドレジスタ１１０には第１のＸＯＲ回路２５２を介して反転して供給する。したがって、演算器は、次の命令の演算が減算、ＡＮＤＮ、ＯＲＮ、ＸＯＲＮ命令の場合、それらの演算を最小のクロックサイクル数で連続して実行できる。
【０１００】
（４）加減算器は、同じ入力データを減算した場合のコンディションコード「０１００」を格納する定数レジスタ３６０と、ＣＣ生成回路１５７の出力と定数レジスタ３６０の出力のいずれかを選択するセレクタ３６１を有する。これにより、同じ演算結果データをオペランドレジスタ１０９，１１０にラッチして他の演算器がＥＤＧＥ命令を実行する場合、同じ演算結果データを減算した場合のコンディションコードを結果レジスタ１１２ｂにラッチすることができる。
【０１０１】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１０２】
（付記１）
第１の入力線からのデータと第１のバイパス線を介して入力される演算結果のいずれかを選択する第１の入力セレクタと、
第２の入力線からのデータを第１の制御ビットに応じて反転または非反転する第１のＸＯＲ回路と、
前記第１のＸＯＲ回路の出力と前記第１のバイパス線を介して入力される前記演算結果のいずれかを選択する第２の入力セレクタと、
前記第１の入力セレクタの出力をクロックに応答して保持する第１のオペランドレジスタと、
前記第２の入力セレクタの出力を前記クロックに応答して保持する第２のオペランドレジスタと、
前記演算結果を前記クロックに応答して保持する結果レジスタと、
前記第１のオペランドレジスタ内の第１の入力データと前記第２のオペランドレジスタ内の第２の入力データとを入力し、前記第１の入力データと前記第２の入力データとの演算結果を、前記結果レジスタに出力するとともに、前記演算結果を前記第１の入力セレクタの入力と第２の入力セレクタの入力とに前記第１のバイパス線を介してそれぞれ出力する加算回路とを有し、
前記加算回路は、前記第１の入力データと前記第２の入力データとの排他的論理和を演算する第２のＸＯＲ回路と、前記第１の入力データと第２の入力データとのキャリーデータを演算するキャリー演算器と、前記第２のＸＯＲ回路の出力を第２の制御ビットに応じて反転または非反転する第４のＸＯＲ回路と、前記キャリー演算器の出力と前記第４のＸＯＲ回路の出力との排他的論理和を演算した前記演算結果を出力する第３のＸＯＲ回路とを有する、加減算器。
【０１０３】
（付記２）
さらに、前記第１のＸＯＲ回路に前記第１の制御ビットを入力する第１の制御ビットレジスタと、
前記第４のＸＯＲ回路に前記第２の制御ビットを入力する第２の制御ビットレジスタを有し、
前記第１の制御ビットは、第２のオペランドレジスタが保持する第２の入力データを反転するか否かを示し、
前記第２の制御ビットは、前記第１のバイパス線でバイパスする前記演算結果を反転するか否かを示す、付記１に記載の加減算器。
【０１０４】
（付記３）
前記第１及び第２の入力線にはレジスタファイルから第１及び第２の入力データがそれぞれ供給され、
さらに、前記結果レジスタの出力を前記第２の制御ビットに応じて反転または非反転し、前記レジスタファイルに出力する第５のＸＯＲ回路を有する、付記１に記載の加減算器。
【０１０５】
（付記４）
さらに、前記加算回路に並列に設けられ、前記第１及び第２のオペランドレジスタのデータを演算する他の演算回路と、
全てゼロデータを有するオールゼロレジスタと、
前記第２の入力線からのデータと前記オールゼロレジスタの出力のいずれかを選択し、前記第１のＸＯＲ回路に出力する第３の入力セレクタとを有し、
前記第１の入力セレクタは、前記第１の入力線と前記第１のバイパス線と前記オールゼロレジスタの出力のいずれかを選択する、付記１に記載の加減算器。
【０１０６】
（付記５）
さらに、前記加算回路の出力データと前記加算回路内のキャリー信号を入力して所定のコンディションコードを生成するコンディションコード生成回路と、
前記加算回路に並列に設けられ、前記第１及び第２のオペランドレジスタの第１及び第２の入力データを入力しエッジ演算を行うエッジ演算回路と、
前記エッジ演算回路が同じ値の第１及び第２の入力データを演算する場合に、前記加算回路が第１の入力データから第２の入力データを減算するときに前記コンディションコード生成回路が生成するコンディションコードを格納する定数レジスタと、
前記コンディションコード生成回路の出力と前記定数レジスタの出力のいずれかを選択して、コンディションコードの結果レジスタに出力するコンディションコード出力セレクタを有する、付記１に記載の加減算器。
【０１０７】
（付記６）
さらに、前記加算回路に並列に設けられ、前記第１及び第２のオペランドレジスタの第１及び第２の入力データを演算する他の演算回路と、
前記他の演算回路の出力データを前記第２の制御ビットに応じて反転または非反転する第６のＸＯＲ回路と、
前記加算回路の前記演算結果と前記第６のＸＯＲ回路の出力のいずれかを選択し前記結果レジスタに出力する出力セレクタを有する、付記１に記載の加減算器。
【０１０８】
（付記７）
第１の入力線からのデータと第１のバイパス線を介して入力される演算結果のいずれかを選択する第１の入力セレクタと、
第２の入力線からのデータを第１の制御ビットに応じて反転または非反転する第１のＸＯＲ回路と、
前記第１のＸＯＲ回路の出力と前記第１のバイパス線を介して入力される前記演算結果のいずれかを選択する第２の入力セレクタと、
前記第１の入力セレクタの出力をクロックに応答して保持する第１のオペランドレジスタと、
前記第２の入力セレクタの出力を前記クロックに応答して保持する第２のオペランドレジスタと、
前記演算結果を前記クロックに応答して保持する結果レジスタと、
前記第１のオペランドレジスタ内の第１の入力データと前記第２のオペランドレジスタ内の第２の入力データとを入力し、前記第１の入力データと前記第２の入力データとの演算結果を、前記結果レジスタに出力するとともに、前記演算結果を前記第１の入力セレクタの入力と第２の入力セレクタの入力とに前記第１のバイパス線を介してそれぞれ出力する加算回路とを有し、
前記加算回路は、前記第１の入力データと前記第２の入力データとの排他的論理和を演算する第２のＸＯＲ回路と、前記第１の入力データと第２の入力データとのキャリーデータを演算するキャリー演算器と、前記第２のＸＯＲ回路の出力を第２の制御ビットに応じて反転または非反転する第４のＸＯＲ回路と、前記キャリー演算器の出力と前記第４のＸＯＲ回路の出力との排他的論理和を演算した前記演算結果を出力する第３のＸＯＲ回路とを有する加減算器において、
前記加算回路が第１の命令の演算を実行し、第１のクロックサイクルで前記演算結果を前記第１のバイパス線に出力し、
前記第１または第２のオペランドレジスタが、前記第１のクロックサイクルの次の第２のクロックサイクルで、前記第１のバイパス線に出力された前記演算結果を保持する、加減算器の制御方法。
【符号の説明】
【０１０９】
１０１，１０２：レジスタファイル
１０３，１０４，１０７，１０８、１１１：セレクタ
１０５，１０６：中継オペランドレジスタ
１０９，１１０：第１、第２のオペランドレジスタ
１１２ａ、１１２ｂ：結果レジスタ
１１３：結果レジスタの中継レジスタ
１５１：反転制御ビットレジスタ
１５２：反転／非反転する第１のＸＯＲ回路
１５３ａ：加算回路
１５３ｂ：他の演算器
１５４：キャリー演算器
１５５：奇偶計算する第２のＸＯＲ回路
１５６：第３のＸＯＲ回路
１５７：ＣＣ（Condition Code）生成回路
ＢＰ１：第１のバイパスルート（最短バイパスルート）
２５２：反転／非反転する第１のＸＯＲ回路
３５０：第３の入力セレクタ
３０７，３０８：第１、第２の入力セレクタ
３５９、３５９ｂ：次の命令の演算（減算など）のために反転／非反転する第４のＸＯＲ回路
３５６：第３のＸＯＲ回路
３５８：非反転／反転する第５のＸＯＲ回路
ＢＰ１：最短の第１のバイパスルート
ＰＢ２：最短ではない第２のバイパスルート
３６２：オールゼロレジスタ
３６０：定数レジスタ
３６１：出力セレクタ
【図１】
0006428488.tif 000007
【図２】
0006428488.tif 000008
【図３】
0006428488.tif 000009
【図４】
0006428488.tif 000010
【図５】
0006428488.tif 000011
【図６】
0006428488.tif 000012
【図７】
0006428488.tif 000013
【図８】
0006428488.tif 000014
【図９】
0006428488.tif 000015
【図１０】
0006428488.tif 000016
【図１１】
0006428488.tif 000017
【図１２】
0006428488.tif 000018
【図１３】
0006428488.tif 000019
【図１４】
0006428488.tif 000020
【図１５】
0006428488.tif 000021