(57)【要約】【課題】乗算装置の消費電力の低減。【解決手段】本発明に係る乗算装置は、乗数と被乗数との乗算を行うことによって部分積を生成する乗算アレイと、部分積制御回路とを備える。部分積制御回路は、乗算アレイのうち乗数及び被乗数の有効桁に対応する有効領域を活性化するイネーブル信号を生成する。有効桁は、乗数及び被乗数のフォーマットに依存し、部分積制御回路は、そのフォーマットを指定する乗算命令に応じてイネーブル信号の状態を制御する。乗算アレイはダイナミック回路で構成され、乗算アレイの初段ダイナミック回路は、イネーブル信号によりオン／オフされるスイッチを有する。イネーブル信号が無効の場合、そのスイッチはオフされ、ダイナミック回路におけるディスチャージ動作が停止する。【選択図】図２
2007226489.tif 000002
【特許請求の範囲】
【請求項１】
ｎビット（ｎは自然数）の乗数とｎビットの被乗数との乗算を行うことによって部分積を生成する乗算アレイと、
前記生成された部分積を加算する加算器と、
前記乗算アレイのうち前記乗数及び前記被乗数の有効桁に対応する有効領域を活性化するイネーブル信号を生成する部分積制御回路と
を備え、
前記有効桁は、前記乗数及び前記被乗数のフォーマットに依存し、
前記部分積制御回路は、前記フォーマットを指定する乗算命令に応じて前記イネーブル信号の状態を制御する
乗算装置。
【請求項２】
請求項１に記載の乗算装置であって、
前記乗算アレイはダイナミック回路で構成され、
前記乗算アレイの初段ダイナミック回路は、前記イネーブル信号によりオン／オフされるスイッチを有し、
前記イネーブル信号が無効の場合、前記スイッチはオフされ、前記ダイナミック回路のディスチャージ動作は停止する
乗算装置。
【請求項３】
請求項１又は２に記載の乗算装置であって、
前記イネーブル信号は、
前記乗算アレイのうち第１領域を活性化する第１イネーブル信号と、
前記乗算アレイのうち第２領域を活性化する第２イネーブル信号と
を含み、
前記乗数及び前記被乗数のフォーマットが第１フォーマットである場合、
前記有効領域は、前記第１領域であり、
前記部分積制御回路は、前記第１イネーブル信号を有効に設定し、前記第２イネーブル信号を無効に設定し、
前記乗数及び前記被乗数のフォーマットが第２フォーマットである場合、
前記有効領域は、前記第１領域及び前記第２領域であり、
前記部分積制御回路は、前記第１イネーブル信号及び前記第２イネーブル信号を有効に設定する
乗算装置。
【請求項４】
請求項１乃至３のいずれかに記載の乗算装置であって、
前記フォーマットは、単精度浮動小数点形式、倍精度浮動小数点形式、３２ビット固定小数点形式、及び６４ビット固定小数点形式を含む
乗算装置。
【請求項５】
請求項１乃至４のいずれかに記載の乗算装置であって、
前記乗算の有効／無効を示すマスクビットが格納されるマスクレジスタを更に備え、
前記部分積制御回路は、前記乗算命令に加えて前記マスクビットに基づいて、前記イネーブル信号の状態を制御し、
前記マスクビットが無効を示す場合、前記部分積制御回路は、前記イネーブル信号を全て無効に設定する
乗算装置。
【請求項６】
請求項５に記載の乗算装置であって、
第１オペランドが格納される第１レジスタと、
第２オペランドが格納される第２レジスタと、
第１前処理回路と、
第２前処理回路と
を更に備え、
前記第１前処理回路は、前記乗算命令に従って前記第１オペランドを指数部と仮数部に分割し、前記第１オペランドの仮数部を前記乗数として前記乗算アレイに出力し、
前記第２前処理回路は、前記乗算命令に従って前記第２オペランドを指数部と仮数部に分割し、前記第２オペランドの仮数部を前記被乗数として前記乗算アレイに出力する
乗算装置。
【請求項７】
請求項６に記載の乗算装置であって、
前記第１レジスタ、前記第２レジスタ、及び前記マスクレジスタは、ベクトルデータが格納されるベクトルレジスタであり、
前記第１オペランドは、前記第１レジスタに格納される第１ベクトルデータの各要素であり、
前記第２オペランドは、前記第２レジスタに格納される第２ベクトルデータの各要素であり、
前記マスクビットは、前記マスクレジスタに格納されるベクトルマスクデータの各要素であり、前記第１オペランド及び前記第２オペランドに対応付けられている
乗算装置。
【請求項８】
請求項６又は７に記載の乗算装置であって、
前記加算器の出力及び前記マスクビットを受け取る選択回路を更に備え、
前記選択回路は、前記加算器の出力に基づいて、前記第１オペランドと前記第２オペランドとの乗算の結果を示す結果データを生成し、
前記マスクビットが無効を示す場合、前記選択回路は、前記結果データの値を０に設定する
乗算装置。
【請求項９】
請求項８に記載の乗算装置であって、
前記加算器は、
固定小数点形式で前記部分積を加算する固定小数点加算器と、
浮動小数点形式で前記部分積を加算する浮動小数点加算器と
を含み、
前記選択回路は、更に前記乗算命令を受け取り、
前記マスクビットが有効を示す場合、前記選択回路は、前記乗算命令に応じて前記固定小数点加算器及び前記浮動小数点加算器のいずれかの出力を選択し、前記選択された出力に基づいて前記結果データを生成する
乗算装置。
【請求項１０】
ダイナミック回路で構成され、乗数と被乗数との乗算を行うことによって部分積を生成する乗算アレイと、
前記生成された部分積を加算する加算器と、
前記乗算の有効／無効を示すマスクビットが格納されるマスクレジスタと、
前記乗算アレイを活性化するイネーブル信号の状態を、前記マスクビットに基づいて制御する部分積制御回路と
を備え、
前記マスクビットが無効を示す場合、前記部分積制御回路は、前記イネーブル信号を無効に設定し、
前記乗算アレイの初段ダイナミック回路は、前記イネーブル信号によりオン／オフされるスイッチを有し、
前記イネーブル信号が無効の場合、前記スイッチはオフされ、前記ダイナミック回路のディスチャージ動作は停止する
乗算装置。
【請求項１１】
請求項１０に記載の乗算装置であって、
第１オペランドが格納される第１レジスタと、
第２オペランドが格納される第２レジスタと、
前記第１オペランドの仮数部を前記乗数として前記乗算アレイに出力する第１前処理回路と、
前記第２オペランドの仮数部を前記被乗数として前記乗算アレイに出力する第２前処理回路と
を更に備え、
前記第１レジスタ、前記第２レジスタ、及び前記マスクレジスタは、ベクトルデータが格納されるベクトルレジスタであり、
前記第１オペランドは、前記第１レジスタに格納される第１ベクトルデータの各要素であり、
前記第２オペランドは、前記第２レジスタに格納される第２ベクトルデータの各要素であり、
前記マスクビットは、前記マスクレジスタに格納されるベクトルマスクデータの各要素であり、前記第１オペランド及び前記第２オペランドに対応付けられている
乗算装置。
【請求項１２】
第１オペランドが格納される第１レジスタと、
第２オペランドが格納される第２レジスタと、
前記第１オペランドと前記第２オペランドを用いて演算を行う演算器と、
前記演算器のうち前記第１オペランド及び前記第２オペランドの有効桁に対応する有効領域を活性化するイネーブル信号を生成する演算制御回路と
を備え、
前記有効桁は、前記第１オペランド及び前記第２オペランドのフォーマットに依存し、
前記演算制御回路は、前記フォーマットを指定する演算命令に応じて前記イネーブル信号の状態を制御する
演算装置。
【請求項１３】
請求項１２に記載の演算装置であって、
前記演算器はダイナミック回路で構成され、
前記演算器の初段ダイナミック回路は、前記イネーブル信号によりオン／オフされるスイッチを有し、
前記イネーブル信号が無効の場合、前記スイッチはオフされ、前記ダイナミック回路のディスチャージ動作は停止する
演算装置。
【請求項１４】
請求項１２又は１３に記載の演算装置であって、
前記演算の有効／無効を示すマスクビットが格納されるマスクレジスタを更に備え、
前記演算制御回路は、前記演算命令に加えて前記マスクビットに基づいて、前記イネーブル信号の状態を制御し、
前記マスクビットが無効を示す場合、前記演算制御回路は、前記イネーブル信号を無効に設定する
演算装置。
【請求項１５】
請求項１４に記載の演算装置であって、
前記第１レジスタ、前記第２レジスタ、及び前記マスクレジスタは、ベクトルデータが格納されるベクトルレジスタであり、
前記第１オペランドは、前記第１レジスタに格納される第１ベクトルデータの各要素であり、
前記第２オペランドは、前記第２レジスタに格納される第２ベクトルデータの各要素であり、
前記マスクビットは、前記マスクレジスタに格納されるベクトルマスクデータの各要素であり、前記第１オペランド及び前記第２オペランドに対応付けられている
演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの演算を行う演算装置に関する。特に、本発明は、データの乗算を行う乗算装置に関する。
【背景技術】
【０００２】
コンピュータにおいては、浮動小数点数（floating point number）や固定小数点数（fixed point number）が扱われる。それら浮動小数点数や固定小数点数の演算を行うための演算装置が知られている。なかでも乗算を行うための演算装置は、乗算装置（multiplier）と呼ばれている。演算装置や乗算装置に関する従来技術として、次のものが知られている。
【０００３】
特許文献１には、浮動小数点数の乗算と共に、整数の乗算を効率良く実行することを目的とした浮動小数点乗算回路が記載されている。特許文献１に記載された技術によれば、整数データは、仮数部の最上位ビットが０である浮動小数点形式で表現される。これにより、整数データと浮動小数点数データとの間の特別な区別がなくなり、両者は統一的に取り扱われることになる。
【０００４】
特許文献２には、正規化浮動小数点数だけでなく、固定小数点数及び非正規化浮動小数点数の乗算を行う浮動小数点乗算装置が記載されている。例えば、固定小数点数は、最上位ビットから連続するゼロの数だけ左シフタによってシフトされた後、正規化浮動小数点数の乗算を行う乗算回路に提供される。また、乗数及び被乗数のそれぞれに関するシフト量の和が加算器により算出される。乗算回路から出力される乗算結果は、そのシフト量の和だけ右シフタによってシフトされる。
【０００５】
特許文献３には、浮動小数点乗算回路の規模を縮小することを目的とした技術が記載されている。その浮動小数点乗算回路は、第１の値の仮数部と第２の値の仮数部との乗算を行う乗算器を有する。乗算器は、２次のブースデコーダ及びセレクタにより部分積を求める。求められた部分積は、アレイ式に加算される。
【０００６】
特許文献４には、ディジタル信号処理プロセッサ（ＤＳＰ）の演算回路の消費電力を低減することを目的とした技術が記載されている。その演算回路は、複数の機能ブロックを有している。また、その演算回路は、複数のスイッチとコントロールブロックを有している。複数のスイッチは、複数の機能ブロックのそれぞれに対するクロックの供給をオン／オフする。コントロールブロックは、各スイッチを制御することによって、各機能ブロックに対するクロックの供給を制御する。
【０００７】
特許文献５には、マイクロプロセッサ内のビットフィールド操作回路が記載されている。そのビットフィールド操作回路は、マスクデータ生成回路を備え、そのマスクデータ生成回路が出力するマスクデータを用いてビットフィールド操作を行う。マスクデータ生成回路は、マスクビット生成回路とシフタとを有する。シフタは、マスクビット生成回路から出力されるマスクビットを所定のビットだけシフトさせ、そのマスクビットをマスクデータとしてＡＬＵに出力する。
【０００８】
【特許文献１】特開昭６１−４９２３４号公報
【特許文献２】特開平５−４０６０５号公報
【特許文献３】特開平１０−３３３８８６号公報
【特許文献４】特開平５−１５０８７０号公報
【特許文献５】特開平９−１１４６３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、乗算装置や演算装置の消費電力を低減することができる技術を提供することにある。
【課題を解決するための手段】
【００１０】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１１】
本発明の第１の観点において、乗算装置が提供される。その乗算装置は、乗算アレイ（４１）と、加算器（４４，７，８）と、部分積制御回路（４２）とを備える。乗算アレイ（４１）は、ｎビット（ｎは自然数）の乗数とｎビットの被乗数との乗算を行うことによって部分積を生成する。加算器（４４，７，８）は、生成された部分積を加算する。部分積制御回路（４２）は、乗算アレイ（４１）のうち乗数及び被乗数の有効桁に対応する有効領域（Ｒｅ）を活性化するイネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）を生成する。その有効桁は、乗数及び被乗数のフォーマットに依存する。部分積制御回路（４２）は、そのフォーマットを指定する乗算命令（ＭＣ）に応じてイネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）の状態を制御する。
【００１２】
乗算アレイ（４１）はダイナミック回路で構成される。乗算アレイ（４１）の初段ダイナミック回路は、イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）によりオン／オフされるスイッチ（２３）を有している。イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）が無効の場合、スイッチ（２３）はオフされ、ダイナミック回路のディスチャージ動作は停止する。
【００１３】
イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）は、乗算アレイ（４１）のうち第１領域を活性化する第１イネーブル信号と、乗算アレイ（４１）のうち第２領域を活性化する第２イネーブル信号とを含む。乗数及び被乗数のフォーマットが第１フォーマットである場合、有効領域（Ｒｅ）は、第１領域である。よって、部分積制御回路（４２）は、第１イネーブル信号を有効に設定し、第２イネーブル信号を無効に設定する。また、乗数及び被乗数のフォーマットが第２フォーマットである場合、有効領域（Ｒｅ）は、第１領域及び第２領域である。よって、部分積制御回路（４２）は、第１イネーブル信号及び第２イネーブル信号を有効に設定する。
【００１４】
上記フォーマットは、単精度浮動小数点形式、倍精度浮動小数点形式、３２ビット固定小数点形式、及び６４ビット固定小数点形式を含む。
【００１５】
本発明に係る乗算装置は、乗算の有効／無効を示すマスクビット（ＭＡＳＫ）が格納されるマスクレジスタ（３）を更に備える。この場合、部分積制御回路（４２）は、乗算命令（ＭＣ）に加えてマスクビット（ＭＡＳＫ）に基づいて、イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）の状態を制御する。特に、マスクビット（ＭＡＳＫ）が無効を示す場合、部分積制御回路（４２）は、イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）を全て無効に設定する。
【００１６】
本発明に係る乗算装置は、第１オペランド（ＯＰ１）が格納される第１レジスタ（１）と、第２オペランド（ＯＰ２）が格納される第２レジスタ（２）と、第１前処理回路（５）と、第２前処理回路（５）とを更に備える。第１前処理回路（５）は、乗算命令（ＭＣ）に従って第１オペランド（ＯＰ１）を指数部（ＥＸＰ１）と仮数部（ＭＮＴ１）に分割し、仮数部（ＭＮＴ１）を乗数として乗算アレイ（４１）に出力する。第２前処理回路（５）は、乗算命令（ＭＣ）に従って第２オペランド（ＯＰ２）を指数部（ＥＸＰ２）と仮数部（ＭＮＴ２）に分割し、仮数部（ＭＮＴ２）を被乗数として乗算アレイ（４１）に出力する。
【００１７】
第１レジスタ（１）、第２レジスタ（２）、及びマスクレジスタ（３）は、ベクトルデータが格納されるベクトルレジスタであってもよい。その場合、第１オペランド（ＯＰ１）は、第１レジスタ（１）に格納される第１ベクトルデータの各要素である。第２オペランド（ＯＰ２）は、第２レジスタ（２）に格納される第２ベクトルデータの各要素である。マスクビット（ＭＡＳＫ）は、マスクレジスタ（３）に格納されるベクトルマスクデータの各要素であり、第１オペランド（ＯＰ１）及び第２オペランド（ＯＰ２）に対応付けられている。
【００１８】
本発明に係る乗算装置は、上記加算器（４４，７，８）の出力及びマスクビット（ＭＡＳＫ）を受け取る選択回路（１２）を更に備える。選択回路（１２）は、加算器（４４，７，８）の出力に基づいて、第１オペランド（ＯＰ１）と第２オペランド（ＯＰ２）との乗算の結果を示す結果データ（ＲＥＳ）を生成する。マスクビット（ＭＡＳＫ）が無効を示す場合、選択回路（１２）は、結果データ（ＲＥＳ）の値を０に設定する。
【００１９】
上述の加算器は、固定小数点形式で部分積を加算する固定小数点加算器（８）と、浮動小数点形式で部分積を加算する浮動小数点加算器（７）とを含んでもよい。選択回路（１２）は、更に乗算命令（ＭＣ）を受け取る。マスクビット（ＭＡＳＫ）が有効を示す場合、選択回路（１２）は、乗算命令（ＭＣ）に応じて固定小数点加算器（８）及び浮動小数点加算器（７）のいずれかの出力を選択し、選択された出力に基づいて結果データ（ＲＥＳ）を生成する。
【００２０】
本発明の第２の観点において、乗算装置が提供される。その乗算装置は、乗算アレイ（４１）と、加算器（４４，７，８）と、マスクレジスタ（３）と、部分積制御回路（４２）とを備える。乗算アレイ（４１）は、乗数と被乗数との乗算を行うことによって部分積を生成する。加算器（４４，７，８）は、生成された部分積を加算する。マスクレジスタ（３）には、乗算の有効／無効を示すマスクビット（ＭＡＳＫ）が格納される。部分積制御回路（４２）は、乗算アレイ（４１）を活性化するイネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）の状態を、マスクビット（ＭＡＳＫ）に基づいて制御する。マスクビット（ＭＡＳＫ）が無効を示す場合、部分積制御回路（４２）は、イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）を無効に設定する。乗算アレイ（４１）は、ダイナミック回路で構成され、乗算アレイ（４１）の初段ダイナミック回路は、イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）によりオン／オフされるスイッチ（２３）を有する。イネーブル信号（ＥＮＢ−ａ〜ＥＮＢ−ｄ）が無効の場合、上記スイッチ（２３）はオフされ、ダイナミック回路のディスチャージ動作は停止する。
【００２１】
本発明に係る乗算装置は、第１オペランド（ＯＰ１）が格納される第１レジスタ（１）と、第２オペランド（ＯＰ２）が格納される第２レジスタ（２）と、第１前処理回路（５）と、第２前処理回路（５）とを更に備える。第１前処理回路（５）は、第１オペランド（ＯＰ１）の仮数部（ＭＮＴ１）を乗数として乗算アレイ（４１）に出力する。第２前処理回路（５）は、第２オペランド（ＯＰ２）の仮数部（ＭＮＴ２）を被乗数として乗算アレイ（４１）に出力する。これら第１レジスタ（１）、第２レジスタ（２）、及びマスクレジスタ（３）は、ベクトルデータが格納されるベクトルレジスタである。第１オペランド（ＯＰ１）は、第１レジスタ（１）に格納される第１ベクトルデータの各要素である。第２オペランド（ＯＰ２）は、第２レジスタ（２）に格納される第２ベクトルデータの各要素である。マスクビット（ＭＡＳＫ）は、マスクレジスタ（３）に格納されるベクトルマスクデータの各要素であり、第１オペランド（ＯＰ１）及び第２オペランド（ＯＰ２）に対応付けられている。
【００２２】
本発明の第３の観点において、演算装置が提供される。その演算装置は、第１オペランド（ＯＰ１）が格納される第１レジスタ（１）と、第２オペランド（ＯＰ２）が格納される第２レジスタ（２）と、第１オペランド（ＯＰ１）と第２オペランド（ＯＰ２）を用いて演算を行う演算器（１０２，１０３）と、演算制御回路（１０１）とを備える。演算制御回路（１０１）は、演算器（１０２，１０３）のうち第１オペランド（ＯＰ１）及び第２オペランド（ＯＰ２）の有効桁に対応する有効領域（Ｒｅ）を活性化するイネーブル信号（ＥＮＢ）を生成する。その有効桁は、第１オペランド（ＯＰ１）及び第２オペランド（ＯＰ２）のフォーマットに依存する。演算制御回路（１０１）は、そのフォーマットを指定する演算命令（ＯＣ）に応じてイネーブル信号（ＥＮＢ）の状態を制御する。
【００２３】
上記演算器（１０２，１０３）はダイナミック回路で構成される。演算器（１０２，１０３）の初段ダイナミック回路は、イネーブル信号（ＥＮＢ）によりオン／オフされるスイッチ（２３）を有する。イネーブル信号（ＥＮＢ）が無効の場合、スイッチ（２３）はオフされ、ダイナミック回路のディスチャージ動作は停止する。
【００２４】
本発明に係る演算装置は、演算の有効／無効を示すマスクビット（ＭＡＳＫ）が格納されるマスクレジスタ（３）を更に備えてもよい。この場合、演算制御回路（１０１）は、演算命令（ＯＣ）に加えてマスクビット（ＭＡＳＫ）に基づいて、イネーブル信号（ＥＮＢ）の状態を制御する。特に、マスクビット（ＭＡＳＫ）が無効を示す場合、演算制御回路（１０１）は、イネーブル信号（ＥＮＢ）を無効に設定する。
【００２５】
第１レジスタ（１）、第２レジスタ（２）、及びマスクレジスタ（３）は、ベクトルデータが格納されるベクトルレジスタであってもよい。その場合、第１オペランド（ＯＰ１）は、第１レジスタ（１）に格納される第１ベクトルデータの各要素である。第２オペランド（ＯＰ２）は、第２レジスタ（２）に格納される第２ベクトルデータの各要素である。マスクビット（ＭＡＳＫ）は、マスクレジスタ（３）に格納されるベクトルマスクデータの各要素であり、第１オペランド（ＯＰ１）及び第２オペランド（ＯＰ２）に対応付けられている。
【発明の効果】
【００２６】
本発明によれば、演算命令やマスクビットに応じて、複数種類のイネーブル信号の状態が制御される。これにより、オペランドのフォーマットに応じて、乗算アレイ等の演算器における未使用領域を非活性化することが可能となる。より具体的には、その未使用領域における初段ダイナミック回路のディスチャージ動作を完全に停止させることが可能となる。更に、ディスチャージ動作が停止した初段ダイナミック回路以降のダイナミック回路の動作も抑制される。従って、複数のフォーマットを扱う演算装置の消費電力が低減される。
【発明を実施するための最良の形態】
【００２７】
添付図面を参照して、本発明の実施の形態に係る乗算装置を説明する。本実施の形態に係る乗算装置は、ベクトル乗算機能を有するベクトル乗算装置（vector multiplier）であり、ベクトルデータの乗算を行う。また、本実施の形態に係るベクトル乗算装置は、複数のデータフォーマットをサポートしており、浮動小数点演算と固定小数点演算を同一のハードウェアで実行する。
【００２８】
１．概略構成
図１は、本実施の形態に係るベクトル乗算装置の構成を示すブロック図である。本実施の形態に係るベクトル乗算装置は、ベクトルレジスタ１、ベクトルレジスタ２、マスクレジスタ３、乗算回路４、前処理回路５、指数部加算器６、浮動小数点加算器７、固定小数点加算器８、０カウンタ９、正規化丸め回路１０、指数部補正回路１１、及び選択回路１２を備えている。
【００２９】
ベクトルレジスタ１は、前処理回路５に接続されている。そのベクトルレジスタ１には乗算の対象である第１ベクトルデータが格納される。その第１ベクトルデータの各要素が第１オペランドＯＰ１であり、順番に前処理回路５に出力される。また、ベクトルレジスタ２は、他の前処理回路５に接続されている。そのベクトルレジスタ２には乗算の対象である第２ベクトルデータが格納される。その第２ベクトルデータの各要素が第２オペランドＯＰ２であり、順番に他の前処理回路５に出力される。各オペランドのフォーマットとしては、ＩＥＥＥに準拠する倍精度（double precision）浮動小数点形式及び単精度（single precision）浮動小数点形式に加えて、６４ビット固定小数点形式及び３２ビット固定小数点形式の４フォーマットが挙げられる。
【００３０】
本実施の形態によれば、第１オペランドＯＰ１と第２オペランドＯＰ２との乗算毎に、その乗算が有効化／無効化される。そのために、各乗算の有効／無効を示すマスクビットＭＡＳＫが用意され、そのマスクビットＭＡＳＫの列であるベクトルマスクデータがマスクレジスタ３に格納される。
【００３１】
より詳細には、マスクレジスタ３はベクトルレジスタであり、そのマスクレジスタ３には、ベクトルデータであるベクトルマスクデータが格納される。ベクトルマスクデータの要素数は、上記第１ベクトルデータあるいは第２ベクトルデータの要素数と同じである。ベクトルマスクデータの各要素であるマスクビットＭＡＳＫは、第１、第２ベクトルデータの各要素（第１オペランドＯＰ１、第２オペランドＯＰ２）に対応付けられており、その対応する要素毎に乗算の有効／無効を規定している。例えば、マスクビットＭＡＳＫが“１”の場合、乗算は有効であり、マスクビットＭＡＳＫが“０”の場合、乗算は無効である。マスクレジスタ３は、乗算回路４及び選択回路１２と接続されており、マスクビットＭＡＳＫは、乗算回路４及び選択回路１２により参照される。
【００３２】
前処理回路５は、ベクトルレジスタ１または２、乗算回路４、及び指数部加算器６に接続されている。この前処理回路５は、ベクトルレジスタからオペランドを受け取り、また、所定のコントローラ（図示されない）からそのオペランドのフォーマットを指定する「乗算命令ＭＣ」を受け取る。そして、前処理回路５は、その乗算命令ＭＣが示すフォーマットに従って、受け取ったオペランドを指数部と仮数部に分割する。例えば、ベクトルレジスタ１に接続された前処理回路５は、第１オペランドＯＰ１を第１指数部ＥＸＰ１と第１仮数部ＭＮＴ１に分割し、それら第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１のそれぞれを指数部加算器６及び乗算回路４に出力する。また、ベクトルレジスタ２に接続された前処理回路５は、第２オペランドＯＰ２を第２指数部ＥＸＰ２と第２仮数部ＭＮＴ２に分割し、それら第２指数部ＥＸＰ２及び第２仮数部ＭＮＴ２のそれぞれを指数部加算器６及び乗算回路４に出力する。尚、指数部ＥＸＴ１、ＥＸＰ２の各々は、符号と指数を含んでいるとする。
【００３３】
乗算回路４は、マスクレジスタ３、前処理回路５、浮動小数点加算器７、及び固定小数点加算器８に接続されている。この乗算回路４は、前処理回路５から、第１仮数部ＭＮＴ１を乗数として受け取り、第２仮数部ＭＮＴ２を被乗数として受け取る。そして、乗算回路４は、乗数と被乗数との乗算を行い、その乗算結果を浮動小数点加算器７及び固定小数点加算器８に出力する。より詳細には、乗算回路４は、部分積生成回路４１、部分積制御回路４２、デコーダ４３、及び部分積加算器４４を有している。デコーダ４３は、第１仮数部ＭＮＴ１を再コード化し、乗数として部分積生成回路４１に出力する。部分積生成回路４１は、ｎビットの乗数（第１仮数部ＭＮＴ１）とｎビットの被乗数（第２仮数部ＭＮＴ２）との乗算を行うことによってｎ個の部分積を生成する。ここで、ｎは自然数である。部分積加算器４４は、生成されたｎ個の部分積を２個になるまで加算し、最終的に得られた２つの部分積を浮動小数点加算器７及び固定小数点加算器８に出力する。
【００３４】
本実施の形態によれば、部分積生成回路４１を活性化／非活性化するために部分積制御回路４２が設けられている。部分積制御回路４２は、マスクレジスタ３に接続されており、第１仮数部ＭＮＴ１及び第２仮数部ＭＮＴ２に対応付けられたマスクビットＭＡＳＫを、マスクレジスタ３から受け取る。また、部分積制御回路４２は、上述の乗算命令ＭＣを受け取る。そして、部分積制御回路４２は、乗算命令ＭＣ及びマスクビットＭＡＳＫに基づいて、イネーブル信号ＥＮＢを生成する。そのイネーブル信号ＥＮＢは、部分積生成回路４１を活性化／非活性化するための信号であり、部分積制御回路４２から部分積生成回路４１に送出される。後の第２節で詳しく説明されるように、本実施の形態によれば、複数種類のイネーブル信号ＥＮＢが用意される。
【００３５】
固定小数点加算器８は、乗算回路４と選択回路１２に接続されている。固定小数点加算器８は、乗算回路４から出力される上記２個の部分積を、固定小数点形式で加算する。そして、固定小数点加算器８は、その加算結果のうち有効桁を選択回路１２へ出力する。この固定小数点加算器８の出力が、固定小数点乗算結果（の仮数部）ＭＮＴ＿ＦＸとなる。
【００３６】
浮動小数点加算器７は、乗算回路４、０カウンタ９、及び正規化丸め回路１０に接続されている。浮動小数点加算器７は、乗算回路４から出力される上記２個の部分積を、浮動小数点形式で加算する。そして、浮動小数点加算器７は、その加算結果を０カウンタ９と正規化丸め回路１０へ出力する。０カウンタ９は、浮動小数点加算器７、正規化丸め回路１０、及び指数部補正回路１１に接続されている。０カウンタ９は、浮動小数点加算器７の出力のうちＭＳＢ（Most Significant Bit）から連続するビット０の数をカウントし、そのカウント値を正規化丸め回路１０と指数部補正回路１１へ出力する。正規化丸め回路１０は、浮動小数点加算器７、０カウンタ９、及び選択回路１２に接続されている。正規化丸め回路１０は、０カウンタ９が出力するカウント値（シフト数）に基づいて、浮動小数点加算器７の出力の正規化を行う。更に、正規化丸め回路１０は、丸め処理（rounding）を行い、その処理結果を選択回路１２へ出力する。この正規化丸め回路１０の出力が、浮動小数点乗算結果の仮数部ＭＮＴ＿ＦＬとなる。
【００３７】
指数部加算器６は、前処理回路５及び指数部補正回路１１に接続されている。この指数部加算器６は、前処理回路５から出力される指数部ＥＸＰ１及びＥＸＰ２を受け取り、符号の判定及び指数同士の加算を行う。そして、指数部加算器６は、加算結果としての指数部ＥＸＰを指数部補正回路１１に出力する。指数部補正回路１１は、指数部加算器６、０カウンタ９、及び選択回路１２に接続されている。この指数部補正回路１１は、０カウンタ９が出力するカウント値（シフト数）に応じて指数部ＥＸＰの補正を行い、その処理結果を選択回路１２へ出力する。この指数部補正回路１１の出力が、浮動小数点乗算結果の指数部ＥＸＰ’となる。
【００３８】
選択回路１２は、マスクレジスタ３、固定小数点加算器８、正規化丸め回路１０、及び指数部補正回路１１に接続されている。この選択回路１２は、乗算命令ＭＣ、マスクビットＭＡＳＫ、仮数部ＭＮＴ＿ＦＸ、仮数部ＭＮＴ＿ＦＬ、及び指数部ＥＸＰ’を受け取る。マスクビットＭＡＳＫが有効（“１”）であり、且つ、乗算命令ＭＣが浮動小数点乗算を示す場合、選択回路１２は、正規化丸め回路１０の出力である仮数部ＭＮＴ＿ＦＬを選択し、その仮数部ＭＮＴ＿ＦＬと指数部ＥＸＰ’とを連結する。これにより、浮動小数点乗算結果が生成される。一方、マスクビットＭＡＳＫが有効であり、かつ、乗算命令ＭＣが固定小数点乗算を示す場合、選択回路１２は、固定小数点加算器８の出力である仮数部ＭＮＴ＿ＦＸを選択し、その仮数部ＭＮＴ＿ＦＸを固定小数点乗算結果とする。生成された浮動小数点乗算結果あるいは固定小数点乗算結果は、第１オペランドＯＰ１と第２オペランドＯＰ２との乗算の結果である。選択回路１２は、その乗算の結果を示す結果データＲＥＳを出力する。ここで、マスクビットＭＡＳＫが無効（“０”）を示す場合、選択回路１２は、結果データＲＥＳの値を全て０に設定する。このように、マスクビットＭＡＳＫによって、第１オペランドＯＰ１と第２オペランドＯＰ２との乗算はマスクされる。
【００３９】
２．乗算回路
次に、図２を参照して、本実施の形態に係る乗算回路４を詳しく説明する。上述の部分積生成回路４１は、ｎビットの乗数（multiplier）とｎビットの被乗数（multiplicand）との乗算を行う「乗算アレイ」である。上述の通り、乗数としては、第１オペランドＯＰ１に関連する第１仮数部ＭＮＴ１が入力され、被乗数としては、第２オペランドＯＰ２に関連する第２仮数部ＭＮＴ２が入力される。この乗算アレイにおいて、乗数の１つのビットと被乗数との乗算が行われ、１段の部分積（partial product）が生成される。乗数の全てのビットに関して乗算が行われることにより、ｎ段の部分積が生成される。そのｎ段の部分積は、図２に示されるように、筆算の形に並べられる。このｎ段の部分積を加算することによって、積が求められる。
【００４０】
部分積生成回路４１は、例えば６４×６４ビット乗算アレイ（ｎ＝６４）である。従って、乗数及び被乗数として、６４ビットの乗数及び被乗数を用意する必要がある。乗数及び被乗数のフォーマットは、オペランドのフォーマットに依存している。本実施の形態に係るベクトル乗算装置によれば、次の４つのフォーマットがサポートされている。
【００４１】
（１）６４ビット固定小数点形式
図３は、６４ビット固定小数点のフォーマットを示している。この場合、６４ビットのオペランドの全てが、そのまま６４ビットの仮数部ＭＮＴ１又はＭＮＴ２となる。そして、その６４ビットの仮数部ＭＮＴ１及びＭＮＴ２が、乗数及び被乗数として乗算アレイに入力される。図４は、６４ビット固定小数点の場合の乗算アレイを示している。６４ビットの全てが有効桁であるため、未使用領域Ｒｘ（値が０に固定される領域）は存在せず、乗算アレイ中の全ての領域が有効領域Ｒｅとなる。図２に示された領域Ｒａ〜Ｒｄを参照すると、有効領域Ｒｅは「Ｒｅ＝Ｒａ＋Ｒｂ＋Ｒｃ＋Ｒｄ」と表される。
【００４２】
（２）３２ビット固定小数点形式
図５は、３２ビット固定小数点のフォーマットを示している。この場合、オペランドの有効桁は３２ビットだけである。従って、有効桁３２ビットの下位側に３２ビット分の“０”が付け足され、それにより６４ビットの仮数部ＭＮＴ１又はＭＮＴ２が生成される。そして、その６４ビットの仮数部ＭＮＴ１及びＭＮＴ２が、乗数及び被乗数として乗算アレイに入力される。図６は、３２ビット固定小数点の場合の乗算アレイを示している。この場合、有効桁は上位３２ビットだけであり、乗算アレイのうち乗数及び被乗数の有効桁に対応する有効領域Ｒｅは「Ｒｅ＝Ｒａ＋Ｒｂ」と表される（図２参照）。それ以外の領域、すなわち、乗数又は被乗数の下位３２ビットに対応する領域は、未使用領域Ｒｘとなる。図６において、乗算アレイ全体の７５％にあたる領域が未使用領域Ｒｘである。
【００４３】
（３）倍精度浮動小数点形式
図７は、倍精度浮動小数点のフォーマットを示している。この場合、６４ビットのオペランドは、符号Ｓ（１ビット）、指数Ｅ（１１ビット）、及び仮数Ｍ（５２ビット）を含んでいる。このうち符号Ｓと指数Ｅが指数部ＥＸＰ１又はＥＸＰ２となる。一方、５２ビットの仮数Ｍの先頭には隠しビット（hidden bit）“１”が付け足され、また、その下位側には１１ビット分の“０”が付け足される。これにより、６４ビットの仮数部ＭＮＴ１又はＭＮＴ２が生成される。そして、その６４ビットの仮数部ＭＮＴ１及びＭＮＴ２が、乗数及び被乗数として乗算アレイに入力される。図８は、倍精度浮動小数点の場合の乗算アレイを示している。この場合、有効桁は上位５３ビットであり、乗算アレイのうち乗数及び被乗数の有効桁に対応する有効領域Ｒｅは「Ｒｅ＝Ｒａ＋Ｒｂ＋Ｒｃ」と表される（図２参照）。それ以外の領域、すなわち、乗数又は被乗数の下位１１ビットに対応する領域は、未使用領域Ｒｘとなる。図８において、乗算アレイ全体の約３１％にあたる領域が未使用領域Ｒｘである。
【００４４】
（４）単精度浮動小数点形式
図９は、単精度浮動小数点のフォーマットを示している。この場合、３２ビットのオペランドは、符号Ｓ（１ビット）、指数Ｅ（８ビット）、及び仮数Ｍ（２３ビット）を含んでいる。このうち符号Ｓと指数Ｅが指数部ＥＸＰ１又はＥＸＰ２となる。一方、２３ビットの仮数Ｍの先頭には隠しビット“１”が付け足され、また、その下位側には４０ビット分の“０”が付け足される。これにより、６４ビットの仮数部ＭＮＴ１又はＭＮＴ２が生成される。そして、その６４ビットの仮数部ＭＮＴ１及びＭＮＴ２が、乗数及び被乗数として乗算アレイに入力される。図１０は、単精度浮動小数点の場合の乗算アレイを示している。この場合、有効桁は上位２４ビットであり、乗算アレイのうち乗数及び被乗数の有効桁に対応する有効領域Ｒｅは「Ｒｅ＝Ｒａ」と表される（図２参照）。それ以外の領域、すなわち、乗数又は被乗数の下位４０ビットに対応する領域は、未使用領域Ｒｘとなる。図１０において、乗算アレイ全体の約８６％にあたる領域が未使用領域Ｒｘである。
【００４５】
以上に説明されたように、フォーマットによって乗数及び被乗数の有効桁は変わる。すなわち、有効領域Ｒｅ及び未使用領域Ｒｘは、フォーマットに依存して変化する。
【００４６】
乗算回路４は、しばしばダイナミックＣＭＯＳ回路で構成される。その場合、乗算アレイの未使用領域Ｒｘにおいて、クロック信号ＣＬＫによって回路が常時動作する可能性がある。更に、後段の部分積加算器４４においても、未使用領域Ｒｘからの出力結果に対する加算処理が常時行われる可能性がある。これらのことは、消費電力の増大を招いてしまう。この消費電力の増大を抑えるため、本実施の形態によれば、フォーマットに応じて有効領域Ｒｅを活性化するイネーブル信号ＥＮＢが提供される。
【００４７】
より具体的には、図２を参照して、４種類のイネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄが提供される。イネーブル信号ＥＮＢ−ａ〜ｄは、それぞれ領域Ｒａ〜Ｒｄを活性化するための信号であり、それぞれ領域Ｒａ〜Ｒｄに入力される。イネーブル信号ＥＮＢ−ａが有効（“１”）の場合、領域Ｒａは活性化され、その中の回路は動作する。一方、イネーブル信号ＥＮＢ−ａが無効（“０”）の場合、領域Ｒａは非活性化され、その中の回路の動作は停止する。同様に、イネーブル信号ＥＮＢ−ｂ（ＥＮＢ−ｃ，ＥＮＢ−ｄ）が有効の場合、領域Ｒｂ（Ｒｃ，Ｒｄ）は活性化され、その中の回路は動作する。一方、イネーブル信号ＥＮＢ−ｂ（ＥＮＢ−ｃ，ＥＮＢ−ｄ）が無効の場合、領域Ｒｂ（Ｒｃ，Ｒｄ）は非活性化され、その中の回路の動作は停止する。
【００４８】
図４の場合（６４ビット固定小数点）、イネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄの全てが有効に設定される。図６の場合（３２ビット固定小数点）、イネーブル信号ＥＮＢ−ａ及びＥＮＢ−ｂが有効に設定され、イネーブル信号ＥＮＢ−ｃ及びＥＮＢ−ｄが無効に設定される。図８の場合（倍精度浮動小数点）、イネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｃが有効に設定され、イネーブル信号ＥＮＢ−ｄが無効に設定される。図１０の場合（単精度浮動小数点）、イネーブル信号ＥＮＢ−ａだけが有効に設定され、イネーブル信号ＥＮＢ−ｂ〜ＥＮＢ−ｄが無効に設定される。
【００４９】
このようなイネーブル信号ＥＮＢの設定を行う回路が、図１及び図２に示される部分積制御回路４２である。有効領域Ｒｅはフォーマットに依存しているため、部分積制御回路４２は、そのフォーマットを指定する乗算命令ＭＣを参照すればよい。すなわち、本実施の形態に係る部分積制御回路４２は、乗算命令ＭＣに応じてイネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄのそれぞれの状態（有効／無効）を制御する。更に、部分積制御回路４２は、乗算そのものを有効化／無効化する上述のマスクビットＭＡＳＫを参照してもよい。マスクビットＭＡＳＫが有効（“１”）を示す場合、部分積制御回路４２は、乗算命令ＭＣに基づいてイネーブル信号ＥＮＢ−ａ〜ＥＮＢｄの制御を行う。一方、マスクビットＭＡＳＫが無効（“０”）を示す場合、部分積制御回路４２は、乗算命令ＭＣにかかわらずイネーブル信号ＥＮＢ−ａ〜ＥＮＢｄの全てを無効に設定する。これにより、乗算アレイの全ての領域が非活性化される。
【００５０】
図１１は、本実施の形態に係るイネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄを要約的に示している。図１１に示されるように、イネーブル信号ＥＮＢは、乗算命令ＭＣの論理和とマスクビットＭＣとの論理積で表される。
【００５１】
部分積制御回路４２により生成されたイネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄは、乗算アレイ中の対応する領域Ｒａ〜Ｒｄに供給される。本実施の形態に係る乗算アレイ４１は、高速・大規模回路に好適なダイナミック回路により構成されている。図１２は、乗算アレイ４１の初段ダイナミック回路の構成を示している。
【００５２】
図１２に示されるように、初段ダイナミック回路は、ｎＭＯＳ論理２１、評価トランジスタ２２、イネーブルスイッチ２３、及びｐＭＯＳ２４を有している。評価トランジスタ２２は、ゲートにクロック信号ＣＬＫが入力されるｎＭＯＳである。イネーブルスイッチ２３は、上記イネーブル信号ＥＮＢによりＯＮ／ＯＦＦされるスイッチであり、例えば、ゲートにイネーブル信号ＥＮＢが入力されるｎＭＯＳである。このイネーブルスイッチ２３は、電荷がチャージされるダイナミックノードＮＤとｎＭＯＳ論理２１との間でスイッチングを行う。また、ｎＭＯＳ論理２１、評価トランジスタ２２、及びイネーブルスイッチ２３は、直列に接続されている。
【００５３】
まず、イネーブル信号ＥＮＢが有効（“１”）である場合を考える。この時、イネーブルスイッチ２３はオンされ、ダイナミック回路は動作する。ダイナミック回路では、クロック信号ＣＬＫがＬｏｗのとき、ｐＭＯＳ２４がオンし、評価トランジスタ２２がオフする。その結果、ダイナミックノードＮＤは電源電圧Ｖｄｄにプリチャージされる。クロック信号ＣＬＫがＨｉｇｈになると、ｐＭＯＳ２４はオフし、評価トランジスタ２２はオンになる。この時、ｎＭＯＳ論理２１がオフになる論理入力が入力されていれば、ダイナミックノードＮＤの電位はＶｄｄ（Ｈｉｇｈ）のままである。しかし、ｎＭＯＳ論理２１がオンになる論理入力が入力されていれば、ダイナミックノードＮＤに蓄えられた電荷がディスチャージされる。そして、ある時間の後、ダイナミックノードＮＤの電位は０Ｖ（Ｌｏｗ）になる。このように、ダイナミック回路は、クロック信号ＣＬＫに応じて、ダイナミックノードＮＤのチャージ／ディスチャージを繰り返す。
【００５４】
一方、イネーブル信号ＥＮＢが無効（“０”）の場合、イネーブルスイッチ２３はオフする。従って、初段ダイナミック回路のディスチャージ動作は完全に停止する。イネーブル信号ＥＮＢが無効である間は、初段ダイナミック回路の出力は必ずＬｏｗに保たれる。初段ダイナミック回路の出力（０）が入力される次段以降のダイナミック回路においては、ｎＭＯＳ論理段へ０が入力され、ディスチャージ動作が抑止される。このようにして、次段以降のダイナミック回路におけるディスチャージ動作が次々と抑止される。その結果、乗算アレイ（部分積生成回路）４１の未使用領域Ｒｘ及びその後段におけるディスチャージ動作回数が減少する。従って、消費電力が低減される。
【００５５】
３．動作例
次に、既出の図面を適宜参照しながら、本実施の形態に係るベクトル乗算装置の動作例を説明する。
【００５６】
３−１．６４ビット固定小数点数
図１において、前処理回路５、乗算回路４、及び選択回路１２へ供給される乗算命令ＭＣは、「６４ビット固定小数点乗算」である。
【００５７】
前処理回路５は、ベクトルレジスタ１から第１オペランドＯＰ１を受け取り、乗算命令ＭＣに従って第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を生成する。固定小数点乗算の場合、第１指数部ＥＸＰ１は“０”である。また、第１仮数部ＭＮＴ１は、図３に示されるように、第１オペランドＯＰ１の６４ビット全てに対応する。前処理回路５は、それら第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を、それぞれ指数部加算器６及び乗算回路４に出力する。同様に、他の前処理回路５は、ベクトルレジスタ２から第２オペランドＯＰ２を受け取り、第２指数部ＥＸＰ２及び第２仮数部ＭＮＴ２を、それぞれ指数部加算器６及び乗算回路４に出力する。
【００５８】
部分積制御回路４２は、乗算命令ＭＣとマスクビットＭＡＳＫに基づいてイネーブル信号ＥＮＢを生成し、そのイネーブル信号ＥＮＢを部分積生成回路４１に出力する。マスクビットＭＡＳＫが有効ならば、図１１に示されるように、イネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄの全てが有効（“１”）に設定される。その結果、図２及び図４に示されるように、領域Ｒａ〜Ｒｄの全てが有効領域Ｒｅとなる。有効領域Ｒｅにおいて、初段ダイナミック回路中のイネーブルスイッチ２３はオンし、初段ダイナミック回路は常時動作する。
【００５９】
部分積加算器４４は、部分積生成回路４１から出力される６４個の部分積を２個になるまで加算する。そして、部分積加算器４４は、最終的に得られた２個の部分積を浮動小数点加算器７及び固定小数点加算器８に出力する。固定小数点加算器８は、その２個の部分積の加算を行い、加算結果のうち有効桁の部分を選択回路１２へ出力する。この固定小数点加算器８の出力が、固定小数点乗算結果ＲＥＳとなる。選択回路１２は、乗算命令ＭＣに応じて、固定小数点加算器８の出力を選択し、固定小数点乗算結果ＲＥＳを出力する。
【００６０】
３−２．３２ビット固定小数点数
図１において、前処理回路５、乗算回路４、及び選択回路１２へ供給される乗算命令ＭＣは、「３２ビット固定小数点乗算」である。
【００６１】
前処理回路５は、ベクトルレジスタ１から第１オペランドＯＰ１を受け取り、乗算命令ＭＣに従って第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を生成する。ここで、前処理回路５は、図５に示されるように、第１オペランドＯＰ１の有効桁３２ビットの下位側に３２ビットの“０”を付け足すことによって、６４ビットの第１仮数部ＭＮＴ１を生成する。また、固定小数点乗算の場合、第１指数部ＥＸＰ１は“０”である。前処理回路５は、それら第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を、それぞれ指数部加算器６及び乗算回路４に出力する。同様に、他の前処理回路５は、ベクトルレジスタ２から第２オペランドＯＰ２を受け取り、第２指数部ＥＸＰ２及び第２仮数部ＭＮＴ２を、それぞれ指数部加算器６及び乗算回路４に出力する。
【００６２】
部分積制御回路４２は、乗算命令ＭＣとマスクビットＭＡＳＫに基づいてイネーブル信号ＥＮＢを生成し、そのイネーブル信号ＥＮＢを部分積生成回路４１に出力する。マスクビットＭＡＳＫが有効ならば、図１１に示されるように、イネーブル信号ＥＮＢ−ａ及びＥＮＢ−ｂが有効（“１”）に設定され、イネーブル信号ＥＮＢ−ｃ及びＥＮＢ−ｄが無効（“０”）に設定される。その結果、図２及び図６に示されるように、領域Ｒａ及びＲｂが有効領域Ｒｅとなる。有効領域Ｒｅにおいて、初段ダイナミック回路中のイネーブルスイッチ２３はオンし、初段ダイナミック回路は常時動作する。一方、領域Ｒｃ及びＲｄ（未使用領域Ｒｘ）において、初段ダイナミック回路中のイネーブルスイッチ２３はオフする。その結果、領域Ｒｃ及びＲｄにおいて、初段ダイナミック回路のディスチャージ動作は完全に停止し、出力はＬｏｗに固定される。次段以降のダイナミック回路においても、ディスチャージ動作が抑止される。従って、部分積生成回路４１の未使用領域Ｒｘ及び部分積加算器４４におけるディスチャージ動作回数が減少し、消費電力が低減される。
【００６３】
部分積加算器４４は、部分積生成回路４１から出力される６４個の部分積を２個になるまで加算する。そして、部分積加算器４４は、最終的に得られた２個の部分積を浮動小数点加算器７及び固定小数点加算器８に出力する。固定小数点加算器８は、その２個の部分積の加算を行い、加算結果のうち有効桁の部分を選択回路１２へ出力する。この固定小数点加算器８の出力が、固定小数点乗算結果ＲＥＳとなる。選択回路１２は、乗算命令ＭＣに応じて、固定小数点加算器８の出力を選択し、固定小数点乗算結果ＲＥＳを出力する。
【００６４】
３−３．倍精度浮動小数点数
図１において、前処理回路５、乗算回路４、及び選択回路１２へ供給される乗算命令ＭＣは、「倍精度浮動小数点乗算」である。
【００６５】
前処理回路５は、ベクトルレジスタ１から第１オペランドＯＰ１を受け取り、乗算命令ＭＣに従って第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を生成する。ここで、前処理回路５は、図７に示されるように、符号Ｓ（１ビット）と指数Ｅ（１１ビット）から第１指数部ＥＸＰ１を生成する。また、前処理回路５は、５２ビットの仮数Ｍに、隠しビット“１”及び１１ビットの“０”を付け足すことによって、６４ビットの第１仮数部ＭＮＴ１を生成する。前処理回路５は、それら第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を、それぞれ指数部加算器６及び乗算回路４に出力する。同様に、他の前処理回路５は、ベクトルレジスタ２から第２オペランドＯＰ２を受け取り、第２指数部ＥＸＰ２及び第２仮数部ＭＮＴ２を、それぞれ指数部加算器６及び乗算回路４に出力する。
【００６６】
部分積制御回路４２は、乗算命令ＭＣとマスクビットＭＡＳＫに基づいてイネーブル信号ＥＮＢを生成し、そのイネーブル信号ＥＮＢを部分積生成回路４１に出力する。マスクビットＭＡＳＫが有効ならば、図１１に示されるように、イネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｃが有効（“１”）に設定され、イネーブル信号ＥＮＢ−ｄが無効（“０”）に設定される。その結果、図２及び図８に示されるように、領域Ｒａ〜Ｒｃが有効領域Ｒｅとなる。有効領域Ｒｅにおいて、初段ダイナミック回路中のイネーブルスイッチ２３はオンし、初段ダイナミック回路は常時動作する。一方、領域Ｒｄ（未使用領域Ｒｘ）において、初段ダイナミック回路中のイネーブルスイッチ２３はオフする。その結果、領域Ｒｄにおいて、初段ダイナミック回路のディスチャージ動作は完全に停止し、出力はＬｏｗに固定される。次段以降のダイナミック回路においても、ディスチャージ動作が抑止される。従って、部分積生成回路４１の未使用領域Ｒｘ及び部分積加算器４４におけるディスチャージ動作回数が減少し、消費電力が低減される。
【００６７】
部分積加算器４４は、部分積生成回路４１から出力される６４個の部分積を２個になるまで加算する。そして、部分積加算器４４は、最終的に得られた２個の部分積を浮動小数点加算器７及び固定小数点加算器８に出力する。浮動小数点加算器７は、その２個の部分積の加算を行い、その加算結果を０カウンタ９と正規化丸め回路１０へ出力する。０カウンタ９は、浮動小数点加算器７の出力のうちＭＳＢから連続するビット０の数をカウントし、そのカウント値（シフト数）を正規化丸め回路１０と指数部補正回路１１へ出力する。正規化丸め回路１０は、０カウンタ９が出力するカウント値に基づいて、浮動小数点加算器７の出力の正規化及び丸めを行う。この正規化丸め回路１０の出力が、浮動小数点乗算結果ＲＥＳの仮数部ＭＮＴ＿ＦＬとなる。
【００６８】
指数部加算器６は、前処理回路５から出力される指数部ＥＸＰ１及びＥＸＰ２を受け取り、符号の判定及び指数同士の加算を行う。そして、指数部加算器６は、加算結果としての指数部ＥＸＰを指数部補正回路１１に出力する。指数部補正回路１１は、０カウンタ９が出力するカウント値に応じて指数部ＥＸＰの補正を行う。この指数部補正回路１１の出力が、浮動小数点乗算結果ＲＥＳの指数部ＥＸＰ’となる。
【００６９】
選択回路１２は、乗算命令ＭＣに応じて、正規化丸め回路１０（浮動小数点加算器７）から出力される仮数部ＭＮＴ＿ＦＬを選択する。そして、選択回路１２は、仮数部ＭＮＴ＿ＦＬ及び指数部ＥＸＰ’を連結することにより、浮動小数点乗算結果ＲＥＳを得る。
【００７０】
３−４．単精度浮動小数点数
図１において、前処理回路５、乗算回路４、及び選択回路１２へ供給される乗算命令ＭＣは、「単精度浮動小数点乗算」である。
【００７１】
前処理回路５は、ベクトルレジスタ１から第１オペランドＯＰ１を受け取り、乗算命令ＭＣに従って第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を生成する。ここで、前処理回路５は、図９に示されるように、符号Ｓ（１ビット）と指数Ｅ（８ビット）から第１指数部ＥＸＰ１を生成する。また、前処理回路５は、２３ビットの仮数Ｍに、隠しビット“１”及び４０ビットの“０”を付け足すことによって、６４ビットの第１仮数部ＭＮＴ１を生成する。前処理回路５は、それら第１指数部ＥＸＰ１及び第１仮数部ＭＮＴ１を、それぞれ指数部加算器６及び乗算回路４に出力する。同様に、他の前処理回路５は、ベクトルレジスタ２から第２オペランドＯＰ２を受け取り、第２指数部ＥＸＰ２及び第２仮数部ＭＮＴ２を、それぞれ指数部加算器６及び乗算回路４に出力する。
【００７２】
部分積制御回路４２は、乗算命令ＭＣとマスクビットＭＡＳＫに基づいてイネーブル信号ＥＮＢを生成し、そのイネーブル信号ＥＮＢを部分積生成回路４１に出力する。マスクビットＭＡＳＫが有効ならば、図１１に示されるように、イネーブル信号ＥＮＢ−ａが有効（“１”）に設定され、イネーブル信号ＥＮＢ−ｂ〜ＥＮＢ−ｄが無効（“０”）に設定される。その結果、図２及び図１０に示されるように、領域Ｒａだけが有効領域Ｒｅとなる。有効領域Ｒｅにおいて、初段ダイナミック回路中のイネーブルスイッチ２３はオンし、初段ダイナミック回路は常時動作する。一方、領域Ｒｂ〜Ｒｄ（未使用領域Ｒｘ）において、初段ダイナミック回路中のイネーブルスイッチ２３はオフする。その結果、領域Ｒｂ〜Ｒｄにおいて、初段ダイナミック回路のディスチャージ動作は完全に停止し、出力はＬｏｗに固定される。次段以降のダイナミック回路においても、ディスチャージ動作が抑止される。従って、部分積生成回路４１の未使用領域Ｒｘ及び部分積加算器４４におけるディスチャージ動作回数が減少し、消費電力が低減される。
【００７３】
部分積加算器４４は、部分積生成回路４１から出力される６４個の部分積を２個になるまで加算する。そして、部分積加算器４４は、最終的に得られた２個の部分積を浮動小数点加算器７及び固定小数点加算器８に出力する。浮動小数点加算器７は、その２個の部分積の加算を行い、その加算結果を０カウンタ９と正規化丸め回路１０へ出力する。０カウンタ９は、浮動小数点加算器７の出力のうちＭＳＢから連続するビット０の数をカウントし、そのカウント値（シフト数）を正規化丸め回路１０と指数部補正回路１１へ出力する。正規化丸め回路１０は、０カウンタ９が出力するカウント値に基づいて、浮動小数点加算器７の出力の正規化及び丸めを行う。この正規化丸め回路１０の出力が、浮動小数点乗算結果ＲＥＳの仮数部ＭＮＴ＿ＦＬとなる。
【００７４】
指数部加算器６は、前処理回路５から出力される指数部ＥＸＰ１及びＥＸＰ２を受け取り、符号の判定及び指数同士の加算を行う。そして、指数部加算器６は、加算結果としての指数部ＥＸＰを指数部補正回路１１に出力する。指数部補正回路１１は、０カウンタ９が出力するカウント値に応じて指数部ＥＸＰの補正を行う。この指数部補正回路１１の出力が、浮動小数点乗算結果ＲＥＳの指数部ＥＸＰ’となる。
【００７５】
選択回路１２は、乗算命令ＭＣに応じて、正規化丸め回路１０（浮動小数点加算器７）から出力される仮数部ＭＮＴ＿ＦＬを選択する。そして、選択回路１２は、仮数部ＭＮＴ＿ＦＬ及び指数部ＥＸＰ’を連結することにより、浮動小数点乗算結果ＲＥＳを得る。
【００７６】
３−５．マスクビット＝無効
マスクビットＭＡＳＫが無効の場合、全てのイネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄが無効に設定される。その結果、乗算アレイの全ての領域Ｒａ〜Ｒｄにおいて、初段ダイナミック回路のディスチャージ動作は完全に停止する。従って、消費電力が低減される。また、選択回路１２は、出力する結果データＲＥＳの値を全て０に設定する。このように、マスクビットＭＡＳＫによって、第１オペランドＯＰ１と第２オペランドＯＰ２との乗算はマスクされる。
【００７７】
４．効果
本実施の形態によれば、乗算命令ＭＣやマスクビットＭＡＳＫに基づいて、複数種類のイネーブル信号ＥＮＢ−ａ〜ＥＮＢ−ｄの状態が制御される。これにより、オペランドのフォーマットに応じて、乗算アレイ４１における未使用領域Ｒｘを非活性化することが可能となる。より具体的には、その未使用領域Ｒｘにおける初段ダイナミック回路のディスチャージ動作を完全に停止させることが可能となる。更に、ディスチャージ動作が停止した初段ダイナミック回路以降のダイナミック回路の動作も抑制される。従って、複数のフォーマットを扱う乗算装置の消費電力が低減される。
【００７８】
５．ベクトル演算装置
本発明は、乗算装置以外の演算装置にも適用され得る。例として、図１３は、本発明が適用されたベクトル演算装置を示している。このベクトル演算装置は、浮動小数点形式や固定小数点形式といった複数種類のデータフォーマットをサポートしている。図１３に示されるように、ベクトル乗算装置は、ベクトルレジスタ１、ベクトルレジスタ２、マスクレジスタ３、前処理回路５、演算制御回路１０１、浮動小数点演算器１０２、固定小数点演算器１０３、及び選択回路１０４を備えている。
【００７９】
ベクトルレジスタ１、ベクトルレジスタ２、及びマスクレジスタ３は、図１に示されたものと同様である。ベクトルレジスタ１には、演算対象である第１ベクトルデータが格納され、その第１ベクトルデータの各要素が第１オペランドＯＰ１となる。ベクトルレジスタ２には、演算対象である第２ベクトルデータが格納され、その第２ベクトルデータの各要素が第２オペランドＯＰ２となる。マスクレジスタ３には、ベクトルマスクデータが格納され、そのベクトルマスクデータの各要素がマスクビットＭＡＳＫとなる。マスクビットＭＡＳＫは、第１オペランドＯＰ１と第２オペランドＯＰ２との演算の有効／無効を示す。
【００８０】
前処理回路５は、オペランドのフォーマットを指定する演算命令ＯＣを受け取る。そして、前処理回路５は、その演算命令ＯＣに基づいて、第１オペランドＯＰ１を、第１指数部ＥＸＰ１と第１仮数部ＭＮＴ１に分割する。また、他の前処理回路５は、演算命令ＯＣに基づいて、第２オペランドＯＰ２を、第２指数部ＥＸＰ２と第２仮数部ＭＮＴ２に分割する。これら指数部ＥＸＰ１、ＥＸＰ２、仮数部ＭＮＴ１、ＭＮＴ２は、浮動小数点演算器１０２及び固定小数点演算器１０３に供給される。
【００８１】
浮動小数点演算器１０２は、指数部ＥＸＰ１、ＥＸＰ２、仮数部ＭＮＴ１、ＭＮＴ２を用いて、浮動小数点演算を行う。この浮動小数点演算器１０２は、図１における乗算回路４、指数部加算器６、浮動小数点加算器７、０カウンタ９、正規化丸め回路１０、及び指数部補正回路１１に相当する。一方、固定小数点演算器１０３は、指数部ＥＸＰ１、ＥＸＰ２、仮数部ＭＮＴ１、ＭＮＴ２を用いて、固定小数点演算を行う。この固定小数点演算器１０３は、図１における乗算回路４及び固定小数点加算器８に相当する。これら浮動小数点演算器１０２及び固定小数点演算器１０３は、ダイナミック回路で構成されている。
【００８２】
各演算器１０２、１０３において演算が行われる演算対象の有効桁は、オペランドのフォーマットに依存する。オペランドのフォーマットによっては、各演算器１０２、１０３において、演算に用いられない未使用領域Ｒｘが発生する。未使用領域Ｒｘ以外の領域、すなわち、演算対象の有効桁に対応する領域が、有効領域Ｒｅである。有効領域Ｒｅ及び未使用領域Ｒｘは、オペランドのフォーマットに依存して変化する。その有効領域Ｒｅを活性化し、未使用領域Ｒｘを非活性化するために、イネーブル信号ＥＮＢが提供される。そのイネーブル信号ＥＮＢを生成し、演算器１０２、１０３に供給する回路が、演算制御回路１０１である。
【００８３】
演算制御回路１０１は、図１における部分積制御回路４２に相当する。つまり、演算制御回路１０１は、演算命令ＯＣ及びマスクビットＭＡＳＫに基づいて、イネーブル信号ＥＮＢの状態を制御する。演算命令ＯＣはオペランドのフォーマットを示している。よって、演算制御回路１０１は、演算命令ＯＣを参照することによって、有効領域Ｒｅに供給されるイネーブル信号ＥＮＢを有効に設定し、未使用領域Ｒｘに供給されるイネーブル信号ＥＮＢを無効に設定することができる。また、マスクビットＭＡＳＫが無効を示す場合、演算制御回路１０１は、全てのイネーブル信号ＥＮＢを無効に設定する。
【００８４】
イネーブル信号ＥＮＢは、演算器１０２、１０３が有する初段ダイナミック回路に供給される。その初段ダイナミック回路は、図１２に示されるように、イネーブル信号ＥＮＢによってＯＮ／ＯＦＦするイネーブルスイッチ２３を有している。イネーブル信号ＥＮＢが無効の場合、イネーブルスイッチ２３はオフし、ディスチャージ動作は完全に停止する。すなわち、未使用領域Ｒｘは非活性化され、初段ダイナミック回路におけるディスチャージ動作は完全に停止する。
【００８５】
選択回路１０４は、図１における選択回路１２に相当する。この選択回路１０４は、マスクレジスタ３、浮動小数点演算器１０２、及び固定小数点演算器１０３に接続されている。選択回路１０４は、浮動小数点演算器１０２から浮動小数点演算結果を受け取り、固定小数点演算器１０３から固定小数点演算結果を受け取る。マスクビットＭＡＳＫが有効であり、且つ、演算命令ＯＣが浮動小数点演算を示している場合、選択回路１０４は、浮動小数点演算結果を選択する。マスクビットＭＡＳＫが有効であり、且つ、演算命令ＯＣが固定小数点演算を示している場合、選択回路１０４は、固定小数点演算結果を選択する。そして、選択回路１０４は、選択された演算結果を示す演算結果データＲＥＳを出力する。また、マスクビットＭＡＳＫが無効の場合、選択回路１０４は、出力する結果データＲＥＳの値を全て０に設定する。このように、マスクビットＭＡＳＫによって、第１オペランドＯＰ１と第２オペランドＯＰ２との演算はマスクされる。
【００８６】
以上に説明されたように、本発明によれば、演算命令ＯＣやマスクビットＭＡＳＫに応じて、イネーブル信号ＥＮＢの状態が制御される。これにより、オペランドのフォーマットに応じて、演算器１０２、１０３における未使用領域Ｒｘを非活性化することが可能となる。より具体的には、その未使用領域Ｒｘにおける初段ダイナミック回路のディスチャージ動作を完全に停止させることが可能となる。更に、ディスチャージ動作が停止した初段ダイナミック回路以降のダイナミック回路の動作も抑制される。従って、複数のフォーマットを扱う演算装置の消費電力が低減される。
【図面の簡単な説明】
【００８７】
【図１】図１は、本発明の実施の形態に係るベクトル乗算装置の構成を示すブロック図である。
【図２】図２は、本実施の形態に係る乗算回路を説明するための図である。
【図３】図３は、６４ｂｉｔ固定小数点のフォーマットを示す概念図である。
【図４】図４は、６４ｂｉｔ固定小数点の場合の乗算アレイを示す概念図である。
【図５】図５は、３２ｂｉｔ固定小数点のフォーマットを示す概念図である。
【図６】図６は、３２ｂｉｔ固定小数点の場合の乗算アレイ示す概念図である。
【図７】図７は、倍精度浮動小数点のフォーマットを示す概念図である。
【図８】図８は、倍精度浮動小数点の場合の乗算アレイを示す概念図である。
【図９】図９は、単精度浮動小数点のフォーマットを示す概念図である。
【図１０】図１０は、単精度浮動小数点の場合の乗算アレイを示す概念図である。
【図１１】図１１は、本実施の形態に係るイネーブル信号を示す図である。
【図１２】図１２は、乗算アレイの初段ダイナミック回路の構成を示す回路図である。
【図１３】図１３は、本発明の実施の形態に係るベクトル演算装置の構成を示すブロック図である。
【符号の説明】
【００８８】
１，２  ベクトルレジスタ
３  マスクレジスタ
４  乗算回路
５  前処理回路
６  指数部加算器
７  浮動小数点加算器
８  固定小数点加算器
９  ０カウンタ
１０  正規化丸め回路
１１  指数部補正回路
１２  選択回路
２１  ｎＭＯＳ論理
２２  評価トランジスタ
２３  イネーブルスイッチ
４１  部分積生成回路（乗算アレイ）
４２  部分積制御回路
４３  デコーダ
４４  部分積加算器
１０１  演算制御回路
１０２  浮動小数点演算器
１０３  固定小数点演算器
１０４  選択回路
ＥＮＢ    イネーブル信号
ＥＸＰ１  第１指数部
ＥＸＰ２  第２指数部
ＭＡＳＫ  マスクビット
ＭＣ      乗算命令
ＭＮＴ１  第１仮数部
ＭＮＴ２  第２仮数部
ＯＣ      演算命令
ＯＰ１    第１オペランド
ＯＰ２    第２オペランド
Ｒｅ      有効領域
Ｒｘ      未使用領域
【図１】
2007226489.tif 000003
【図２】
2007226489.tif 000004
【図３】
2007226489.tif 000005
【図４】
2007226489.tif 000006
【図５】
2007226489.tif 000007
【図６】
2007226489.tif 000008
【図７】
2007226489.tif 000009
【図８】
2007226489.tif 000010
【図９】
2007226489.tif 000011
【図１０】
2007226489.tif 000012
【図１１】
2007226489.tif 000013
【図１２】
2007226489.tif 000014
【図１３】
2007226489.tif 000015