(57)【要約】【課題】固定小数点演算において小数点位置を変更可能にすることで、プログラムで処理すべき値を正規化する作業を省く。【解決手段】四則演算とシフト演算の少なくとも一方を行う算術論理演算ユニット１３と、固定小数点演算の小数点位置データを保持する小数点位置レジスタ１４と、小数点位置レジスタ１４に保持される小数点位置データに基づいて、算術論理演算ユニット１３の出力に対して所定の丸め及び飽和処理を行う丸め／飽和処理器２０とを有する。【選択図】図２
2009271598.tif 000002
【特許請求の範囲】
【請求項１】
四則演算とシフト演算の少なくとも一方を行う算術論理演算部と、
固定小数点演算の小数点位置データを保持する小数点位置レジスタと、
前記小数点位置レジスタに保持される前記小数点位置データに基づいて、前記算術論理演算部の出力に対して所定の丸め及び飽和処理を行う丸め飽和処理部と、
を有することを特徴とするプロセッサ。
【請求項２】
前記小数点位置レジスタに保持される前記小数点位置データに基づいて、前記算術論理演算部の出力から、ガード桁、丸め桁及びスティッキービットの各ビットを抽出するビット検出部を有し、
前記丸め飽和処理部は、前記小数点位置データ、前記ガード桁、丸め桁及びスティッキービットの各ビットに基づいて、前記算術論理演算部の出力に対して前記所定の丸め及び飽和処理を行うことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記小数点位置レジスタに保持される前記小数点位置データは、前記算術論理演算部により設定されることを特徴とする請求項１又は請求項２に記載のプロセッサ。
【請求項４】
前記ガード桁、丸め桁及びスティッキービットの各ビットは、１つのレジスタ中のそれぞれ対応するフィールドに格納されていることを特徴とする請求項２に記載のプロセッサ。
【請求項５】
前記丸め飽和処理部は、前記所定の丸め及び飽和処理を含めて、複数の丸め処理を行うことができ、
前記複数の丸め処理からいずれかの丸め処理を選択可能であることを特徴とする請求項１から請求項４の何れか１項に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特に、固定小数点演算を行うプロセッサに関する。
【背景技術】
【０００２】
従来、固定小数点演算を行うプロセッサは、固定小数点の演算の命令を実行するための算術論理演算ユニット（以下、ALUという）及び固定小数点の演算結果に丸め処理及び飽和処理を行う丸め／飽和処理器等を有して構成されている。
【０００３】
このような固定小数点演算を行うプロセッサは、回路規模、演算速度等の改善の観点から、数多く提案されている（例えば、特許文献１参照）。
【０００４】
しかし、固定小数点の演算の処理は、浮動小数点の演算の処理に比べて高速に行うことができるが、小数点位置が固定のため、プログラム中において値の表現形式が限られてしまう。そのため、プログラム開発者は、そのプログラムで処理すべき値がプロセッサの扱う固定小数点で表現されていない場合、プログラムで処理すべき値の方を正規化する作業が必要になる。この正規化する作業は、プログラム開発者にとって負担であり、また、この正規化する作業によって不具合が混入される虞もあった。
【特許文献１】特開２００１−５１８２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
固定小数点演算において小数点位置を変更可能にすることで、プログラムで処理すべき値を正規化する作業を省くことができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様によれば、四則演算とシフト演算の少なくとも一方を行う算術論理演算部と、固定小数点演算の小数点位置データを保持する小数点位置レジスタと、前記小数点位置レジスタに保持される前記小数点位置データに基づいて、前記算術論理演算部の出力に対して所定の丸め及び飽和処理を行う丸め飽和処理部と、を有するプロセッサを提供することができる。
【発明の効果】
【０００７】
本発明のプロセッサによれば、固定小数点演算において小数点位置を変更可能にすることで、プログラムで処理すべき値を正規化する作業を省くことができる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して本発明の実施の形態を詳細に説明する。  
まず図１及び図２に基づいて、本発明の一実施の形態に係るプロセッサの構成を説明する。図１は、本実施の形態に係るプロセッサの全体構成を説明するためのブロック図である。
【０００９】
図１に示すように、プロセッサ１は、半導体集積回路（以下、LSIという）２上に設けられ、小数点演算の四則演算及びシフト演算等の命令を実行する機能を有する。
【００１０】
次に、LSI２上に設けられているプロセッサ１の詳細な構成について説明する。図２は、本実施の形態に係るプロセッサの構成を示すブロック図である。
【００１１】
図２に示すように、プロセッサ１は、主メモリ等のデータメモリ１１と、レジスタ１２と、ALU１３と、小数点位置レジスタ１４と、ビット検出器１５と、ガード桁レジスタ１６と、丸め桁レジスタ１７と、スティッキーレジスタ１８と、アキュムレータ１９と、丸め／飽和処理器２０とを有して構成されている。
【００１２】
データメモリ１１には、演算用のデータが入力される。データメモリ１１は、この演算用のデータを格納し、格納した演算用のデータをレジスタ１２に出力する。また、データメモリ１１には、後述するALU１３及び丸め／飽和処理器２０からの演算結果が入力される。
【００１３】
レジスタ１２には、データメモリ１１からの演算用のデータと、後述するALU１３及び丸め／飽和処理器２０からの演算結果とが入力される。レジスタ１２は、この演算用のデータ及び演算結果を格納し、格納した演算用のデータ及び演算結果をALU１３に出力する。
【００１４】
ALU１３は、四則演算及びシフト演算等を固定小数点演算により行う。ALU１３は、レジスタ１２からの入力データに対して所定の固定小数点の演算を行い、演算結果をビット検出器１５及びアキュムレータ１９に出力する。或いは、ALU１３は、演算結果をデータメモリ１１、レジスタ１２又は丸め／飽和処理器２０に出力する。
【００１５】
また、ALU１３は、後述するプログラムのスタートアップルーチンに記述されている小数点位置を示す命令を読み込み、小数点位置レジスタ１４に読み込んだ小数点位置の情報、即ち、小数点位置データを設定する。
【００１６】
小数点位置レジスタ１４は、設定された小数点位置の情報をビット検出器１５及び丸め／飽和処理器２０に出力する。
【００１７】
ビット検出器１５は、小数点位置レジスタ１４からの小数点位置の情報に基づいて、ガード桁、丸め桁及びスティッキービットを検出する。なお、ガード桁、丸め桁及びスティッキービットの検出方法については、後述する。ビット検出器１５は、検出したガード桁、丸め桁及びスティッキービットをそれぞれガード桁レジスタ１６、丸め桁レジスタ１７及びスティッキーレジスタ１８に出力する。ガード桁、丸め桁及びスティッキービットは、「偏偶数・最近値丸め」方式の丸め処理に必要な情報であり、ガード桁レジスタ１６、丸め桁レジスタ１７及びスティッキーレジスタ１８は、保持した情報を丸め／飽和処理器２０に出力する。
【００１８】
なお、小数点位置レジスタ１４、ガード桁レジスタ１６、丸め桁レジスタ１７及びスティッキーレジスタ１８を別々のレジスタにしているが、１つのレジスタにしてもよい。即ち、１つのレジスタの異なるフィールドに、小数点位置、ガード桁、丸め桁及びスティッキービットの情報が格納される。
【００１９】
アキュムレータ１９は、ALU１３からの演算結果を保持し、保持した演算結果を丸め／飽和処理器２０に出力する。アキュムレータ１９は、レジスタ１２の２倍のビット幅を有している。例えば、レジスタ１２のビット幅が１６ビットの場合、ALU１３において１６ビットの乗数と１６ビットの被乗数とを乗算すると、乗算結果は３２ビットとなる。アキュムレータ１９は、この乗算結果を保持できるように、上述したように、レジスタ１２の２倍のビット幅を有している。
【００２０】
丸め／飽和処理器２０は、小数点位置レジスタ１４、ガード桁レジスタ１６、丸め桁レジスタ１７及びスティッキーレジスタからの情報に基づいて、アキュムレータ１９から入力される演算結果に所定の丸め及び飽和処理を行う。丸め／飽和処理器２０は、所定の丸め／飽和処理を行って得られた演算結果をデータメモリ１１又はレジスタ１２に出力する。
【００２１】
なお、丸め／飽和処理器２０おける丸め処理の方式としては、「偏偶数・最近値丸め」方式を採用していたが、「常に切り上げ」又は「常に切り捨て」等の他の丸め処理の方式を採用してもよい。「常に切り上げ」又は「常に切り捨て」方式を採用した場合、ビット検出器１５、ガード桁レジスタ１６、丸め桁レジスタ１７及びスティッキーレジスタ１８は、不要となる。
【００２２】
ここで、小数点位置レジスタ１４に小数点位置の情報を設定する処理について説明する。図３は、高級言語により記述されたプログラムの例を説明するための説明図である。
【００２３】
図３に示すように、プログラム５には、整数部が２桁、小数部が１桁の固定小数点演算の命令が記述されている。例えば、このプログラム５を実行するプロセッサ１が、整数部が１桁、小数部が２桁の固定小数点演算しか行えない場合、ユーザは、上述したようにプログラム５の変数ａ及び変数ｂの値を正規化しなければならない。具体的には、ユーザは、プロセッサ１が固定小数点演算の命令を実行できるように、変数ａ及び変数ｂの値を１／１０にする。従来、このような正規化の作業をプログラムの全体に対して行うことは、ユーザにとって、負担であり、また不具合が混入される虞もあった。
【００２４】
そこで、本実施の形態のプロセッサでは、矢印６に示すプログラム５の先頭部分に小数点位置を示す命令を記述する。以下、このプログラム５の先頭部分をスタートアップルーチンと呼ぶ。図３の例では、ユーザは、最下位ビットを０ビット目として、スタートアップルーチンに小数点位置が２ビット目と３ビット目であることを示す命令を記述する。ALU１３は、上述したように、このスタートアップルーチンに記述された小数点位置を示す命令を読み込み、小数点位置レジスタ１４に読み込んだ小数点位置の情報を設定する。この結果、小数点位置を変更でき、上述した正規化する作業が不要となる。
【００２５】
小数点位置レジスタ１４に設定された小数点位置の情報は、ビット検出器及び丸め／飽和処理器２０に入力される。ビット検出器１５では、この小数点位置の情報に基づいて、ガード桁、丸め桁及びスティッキービットが検出され、検出されたガード桁、丸め桁及びスティッキービットが、それぞれガード桁レジスタ１６、丸め桁レジスタ１７及びスティッキーレジスタ１８に保持される。
【００２６】
丸め／飽和処理器２０では、小数点位置の情報とガード桁、丸め桁及びスティッキービットの情報に基づいて、所定の丸め及び飽和処理が行われ、演算の精度の向上が図られている。
【００２７】
図４Ａ及び図４Ｂは、固定小数点演算の専用命令を説明するための説明図である。図４Ａは、固定小数点演算専用命令を示しており、各演算の種類と、各演算の種類に対応するニモニック、オペランド及び動作とが対応付けられている。
【００２８】
図４Ｂは、補足説明を示しており、図４Ａにおいて使用されている用語とその用語に対応する意味が対応付けられている。Rn及びRmは、それぞれ１６ビットの汎用レジスタを示す。SignedSaturation(x)は、符号付き飽和演算を示し、xが、−（２１５）から（２１５−１）に収まるようにクリッピング処理を行う。UnsignedSaturation(x)は、符号なし飽和演算を示し、xが、０から（２１５−１）に収まるようにクリッピング処理を行う。Round(x)は、汎用レジスタに置かれている値に対して丸め処理を行う。
【００２９】
ここで、ガード桁、丸め桁、スティッキービットの検出方法を、乗数１６ビットと被乗数１６ビットとの乗算の場合を例として説明する。図５は、乗数１６ビットと被乗数１６ビットとの乗算について説明するための説明図である。
【００３０】
この例では、下位８ビットを小数部とし、上位８ビットを整数部とする。即ち、最下位ビットを０ビット目とすると、小数点の位置は、７ビット目と８ビット目との間になる。この場合、小数点位置レジスタ１４には、小数点の位置が７ビット目と８ビット目との間にあることを示す”８”が格納される。
【００３１】
ALU１３は、乗数３１と被乗数３２とを乗算し、乗算結果３３を得る。ALU１３は、この乗算結果３３をビット検出器１５及びアキュムレータ１９に出力する。演算の入力と出力とは、同じ型、言い換えると、同じサイズであるため、有効な演算結果は点線により囲まれた部分３４となる。
【００３２】
ビット検出器１５は、小数点位置レジスタ１４からの小数点位置の情報に基づいて、有効な演算結果の最下位ビットを検出する。この有効な演算結果の最下位ビットを$dppとすると、”$dpp−１”ビット目の値が、ガード桁の値となり、ビット検出器１５は、このガード桁の値をガード桁レジスタ１６に出力する。即ち、図５の例では、ガード桁レジスタ１６に１が保持されることになる。
【００３３】
また、”$dpp−２”ビット目の値が、丸め桁の値となり、ビット検出器１５は、この丸め桁の値を丸め桁レジスタ１７に出力する。即ち、図５の例では、丸め桁レジスタ１７に０が保持されることになる。
【００３４】
また、スティッキービットは、”$dpp−３”ビット目から０ビット目までの値から求められる。”$dpp−３”ビット目から０ビット目までのいずれかに１が立っている場合、スティッキービットの値は１となり、”$dpp−３”ビット目から０ビット目までの全てが０の場合、スティッキービットの値は０となる。ビット検出器１５は、このように求められたスティッキービットの値をスティッキーレジスタ１８に出力する。即ち、図５の例では、スティッキーレジスタ１８に１が保持されることになる。
【００３５】
ガード桁レジスタ１６、丸め桁レジスタ１７及びスティッキーレジスタ１８は、乗算、除算及び右シフト演算が行われた場合、更新される。
【００３６】
丸め／飽和処理器２０では、ガード桁、丸め桁、スティッキービットの値に基づいて、偏偶数・最近値丸めの処理が行われる。ガード桁の値が１、かつ、丸め桁又はスティッキービットの値の内、少なくともどちらか一方が１の場合、桁上げを行い、それ以外の場合、桁上げを行わない。図５の例では、ガード桁の値が１、かつ、スティッキービットの値が１のため、桁上げの処理が行われる。即ち、丸め／飽和処理器２０は、有効な演算結果である点線により囲まれた部分３４に１を加える。
【００３７】
また、丸め／飽和処理器２０は、演算の結果がオーバーフローした場合、飽和処理を行う。丸め／飽和処理器２０は、小数点位置レジスタからの小数点位置の情報に基づいて、有効桁の最上位ビットを検出する。丸め／飽和処理器２０は、オーバーフローが発生すると、桁あふれしたビットの内いずれかに１があれば、クリッピング処理を行い、有効桁を全て１にして、桁あふれしたビットが全て０の場合、桁あふれしたビットを無視する。
【００３８】
以上のように、丸め／飽和処理器２０では、所定の丸め及び飽和処理が施され、最終乗算結果３５が得られる。丸め／飽和処理器２０は、この最終乗算結果３５をデータメモリ１１又はレジスタ１２に出力する。
【００３９】
除算については、上述した乗算の場合の処理と同様のため、説明を省略する。
【００４０】
次に、図５の最終乗算結果３５を８ビット右シフトする場合について説明する。図６は、図５の最終乗算結果３５を８ビット右シフトする場合について説明するための説明図である。
【００４１】
ALU１３は、最終乗算結果３５を８ビット右にシフトして、右シフト演算結果３６を得る。ALU１３は、この右シフト演算結果３６をビット検出器１５及びアキュムレータ１９に出力する。演算の入力と出力とは、同じサイズであるため、有効な演算結果は点線により囲まれた部分３７となる。
【００４２】
ビット検出器１５は、小数点位置レジスタ１４からの小数点位置の情報に基づいて、有効な演算結果の最下位ビットである$dppを検出する。右シフト演算により消滅する８ビットの内、最上位ビットである”$dpp−１”ビット目が、ガード桁の値となりガード桁レジスタ１６に設定され、”$dpp−２”ビット目が、丸め桁の値となり丸め桁レジスタ１７に設定される。また、ビット検出器１５は、”$dpp−３”ビット目から０ビット目までのいずれかに１が立っている場合、スティッキービットの値は１となり、全て０の場合、スティッキービットの値は０となり、このように求められたスティッキービットの値が、スティッキーレジスタ１８に設定される。図６の例では、ガード桁の値は０となり、丸め桁の値は１となり、スティッキービットの値は１となり、このように求めたれた各値は、丸め／飽和処理器２０に入力される。
【００４３】
丸め／飽和処理器２０では、ガード桁、丸め桁、スティッキービットの値に基づいて、偏偶数・最近値丸めの処理が行われる。図６の例では、ガード桁の値が０のため、桁上げの処理は行われない。
【００４４】
以上のように、丸め／飽和処理器２０では、所定の丸め処理が施され、最終右シフト演算結果３８が得られる。丸め／飽和処理器２０は、この最終右シフト演算結果３８をデータメモリ１１又はレジスタ１２に出力する。
【００４５】
以上のように、ALU１３は、スタートアップルーチンに記述された小数点位置を示す命令を読み込み、小数点位置レジスタ１４に読み込んだ小数点位置の情報を設定するようにした。この結果、小数点位置の設定を変更することが可能となり、上述した正規化する作業が不要となる。
【００４６】
よって、本実施の形態のプロセッサによれば、固定小数点演算において小数点位置を変更可能にすることで、プログラムで処理すべき値を正規化する作業を省くことができる。
【００４７】
（変形例１）  
図７は、本実施の形態の変形例１に係るプロセッサの構成を示すブロック図である。図７において図２と同一の構成要素には、同一符号を付して説明を省略する。
【００４８】
図２では、ALU１３の出力から丸め／飽和処理器２０に直接入力されるパスを有して構成されていたが、図７では、レジスタ１２の出力から丸め／飽和処理器２０に直接入力されるパスを有して構成されている。
【００４９】
図８は、固定小数点向け処理のみ抜きだした命令の例を説明するための説明図である。図８では、各固定小数点向け処理の種類と、各固定小数点向け処理の種類に対応するニモニック、オペランド及び動作とが対応付けられている。
【００５０】
上述した実施の形態では、固定小数点演算に対して専用命令を割り当てられており、例えば、図４の符号付き加算命令では、レジスタRnとレジスタRmの加算結果に符号付き飽和演算が行われる。プロセッサ１ａでは、まず、ALU１３において整数演算が行われ、演算結果がレジスタ１２に格納される。次に、丸め／飽和処理器２０では、このレジスタ１２に格納されている演算結果に対して、符号付き飽和演算が行われる。
【００５１】
以上のように、変形例１のプロセッサ１ａによれば、固定小数点演算命令を整数演算部分と丸め及び飽和演算部分とに分けることができる。
【００５２】
（変形例２）  
図９は、本実施の形態の変形例２に係るプロセッサの構成を示すブロック図である。図９において図２と同一の構成要素には、同一符号を付して説明を省略する。
【００５３】
変形例２のプロセッサ１ｂは、図２のプロセッサ１に丸め方式選択レジスタ２１を付加した構成となっている。丸め方式選択レジスタ２１は、ユーザからの選択信号に基づいて、所定の丸め方式を選択するための選択制御信号を丸め／飽和処理器２０に出力する。丸め／飽和処理器２０では、この選択制御信号に応じた所定の丸め処理が行われる。
【００５４】
上述した実施の形態では、丸めのタイプとして「偏偶数・最近値丸め」方式の他に、「常に切り上げ」又は「常に切り捨て」等、他の方式を選択してもよいとしていたが、変形例２では、複数ある丸めタイプをユーザが選択できるようにした。
【００５５】
以上のように、変形例２のプロセッサ１ｂによれば、ユーザが、開発するソフトに合わせて丸め処理の方式を選択することができる。この結果、ユーザは、開発するソフトの実行速度を優先させたい場合、「偏偶数・最近値丸め」方式に比べて処理量が少ない「常に切り捨て」方式を選択することができ、開発するソフトの丸め処理の精度を優先させたい場合、「常に切り捨て」方式に比べて丸め処理の精度が高い「偏偶数・最近値丸め」方式を選択することができる。
【００５６】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００５７】
【図１】本実施の形態に係るプロセッサの全体構成を説明するためのブロック図である。
【図２】本実施の形態に係るプロセッサの構成を示すブロック図である。
【図３】高級言語により記述されたプログラムの例を説明するための説明図である。
【図４Ａ】固定小数点演算の専用命令を説明するための説明図である。
【図４Ｂ】固定小数点演算の専用命令を説明するための説明図である。
【図５】乗数１６ビットと被乗数１６ビットとの乗算について説明するための説明図である。
【図６】図５の最終乗算結果３５を８ビット右シフトする場合について説明するための説明図である。
【図７】本実施の形態の変形例１に係るプロセッサの構成を示すブロック図である。
【図８】固定小数点向け処理のみ抜きだした命令の例を説明するための説明図である。
【図９】本実施の形態の変形例２に係るプロセッサの構成を示すブロック図である。
【符号の説明】
【００５８】
１，１ａ，１ｂ  プロセッサ、２  半導体集積回路、１１  データメモリ、１２  レジスタ、１３  ALU、１４  小数点位置レジスタ、１５  ビット検出器、１６  ガード桁レジスタ、１７  丸め桁レジスタ、１８  スティッキーレジスタ、１９  アキュムレータ、２０  丸め／飽和処理器、２１  丸め方式選択レジスタ
【図１】
2009271598.tif 000003
【図２】
2009271598.tif 000004
【図３】
2009271598.tif 000005
【図４Ａ】
2009271598.tif 000006
【図４Ｂ】
2009271598.tif 000007
【図５】
2009271598.tif 000008
【図６】
2009271598.tif 000009
【図７】
2009271598.tif 000010
【図８】
2009271598.tif 000011
【図９】
2009271598.tif 000012