(57)【要約】      （修正有）【課題】複数の演算を切り替えて行う演算ユニットを提供する。【解決手段】第１と第２の入力データとの乗算を行う第１乗算器及び第１レジスタが保持するデータ又は０に対して第１乗算器の出力データを加算又は減算して第１レジスタに送る第１加算器、を含む第１積和演算器と、第１レジスタが保持するデータをシフトして第２レジスタに送るシフタと、第３と第４の入力データとの乗算を行う第２乗算器及びシフタがシフトしたデータ又は第３レジスタの保持するデータに対して第２乗算器の出力データ又は第２レジスタが保持するデータを加算又は減算して第３レジスタに送る第２加算器を、含む第２積和演算器と、を備える。第１の状態が選択されると、第２加算器は第３レジスタの保持するデータに対して第２レジスタが保持するデータを加算又は減算し、第２の状態が選択されると、第２加算器はシフタがシフトしたデータに対して第２乗算器の出力データを加算する。【選択図】図２
2018067028.tif 000002
【特許請求の範囲】
【請求項１】
第１の入力データと第２の入力データとの乗算を行う第１乗算器及び、第１レジスタが保持するデータ又は０に対して、前記第１乗算器の出力データを加算又は減算して前記第１レジスタに送る第１加算器、を含む第１積和演算器と、
前記第１レジスタが保持するデータが入力され、当該入力されるデータをシフトして第２レジスタに送るシフタと、
第３の入力データと第４の入力データとの乗算を行う第２乗算器及び、前記シフタがシフトしたデータ又は第３レジスタの保持するデータに対して、前記第２乗算器の出力データ又は前記第２レジスタが保持するデータを加算又は減算して前記第３レジスタに送る第２加算器を、含む第２積和演算器と、を備え、
第１の状態が選択されると、前記第１加算器は前記０に対して前記第１乗算器の出力データを加算し、前記第２加算器は前記第３レジスタの保持するデータに対して前記第２レジスタが保持するデータを加算又は減算し、
第２の状態が選択されると、前記第１加算器は前記０に対して前記第１乗算器の出力データを加算し、前記第２加算器は前記シフタがシフトしたデータに対して前記第２乗算器の出力データを加算する、演算ユニット。
【請求項２】
第３の状態が選択されると、前記第１加算器は前記第１レジスタが保持するデータに対して前記第１乗算器の出力データを加算又は減算し、前記第２乗算器は前記第３の入力データと前記第４の入力データとの乗算を行い、前記第２加算器は前記第３レジスタの保持するデータに対して前記第２乗算器の出力データを加算又は減算することを特徴とする請求項１に記載の演算ユニット。
【請求項３】
前記シフタは、前記第１レジスタが保持するデータ又は前記第３レジスタが保持するデータをシフトすることを特徴とする請求項１又は請求項２に記載の演算ユニット。
【請求項４】
前記シフタがシフトしたデータに対して所定の丸め判定を行い、当該処理の結果のデータを前記第２加算器へ入力する丸め補助器をさらに備え、
第４の状態が選択されると、前記シフタは前記第３レジスタが保持するデータをシフトし、前記第２加算器は前記第２レジスタが保持するデータに対して前記丸め補助器で前記所定の丸め判定を行い当該処理をされたデータを加算することを特徴とする請求項３に記載の演算ユニット。
【請求項５】
前記第３レジスタの保持するデータに対して飽和処理を行う飽和器をさらに備えることを特徴とする請求項１から請求項４のいずれか一に記載の演算ユニット。
【請求項６】
前記飽和器の出力するデータに対して抽出処理を行う抽出器をさらに備えることを特徴とする請求項５に記載の演算ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算ユニットに関する。
【背景技術】
【０００２】
従来、積和演算器は、乗算器及び加算器から構成されている（例えば、特許文献１）。特許文献１に開示されている積和演算器においては、加算器がレジスタからの入力データと乗算器の乗算出力との加算演算を行う。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−６３６４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に開示されている積和演算器では、複数の演算を切り替えて行うことができないといった問題があった。
【０００５】
本発明は、上記のような従来技術に伴う課題を解決しようとするものであって、その目的とするところは、複数の演算を切り替えて行うことができる演算ユニットを提供するところにある。
【課題を解決するための手段】
【０００６】
本発明の一実施形態によれば、第１の入力データと第２の入力データとの乗算を行う第１乗算器及び、第１レジスタが保持するデータ又は０に対して、前記第１乗算器の出力データを加算又は減算して前記第１レジスタに送る第１加算器、を含む第１積和演算器と、前記第１レジスタが保持するデータが入力され、当該入力されるデータをシフトして第２レジスタに送るシフタと、第３の入力データと第４の入力データとの乗算を行う第２乗算器及び、前記シフタがシフトしたデータ又は第３レジスタの保持するデータに対して、前記第２乗算器の出力データ又は前記第２レジスタが保持するデータを加算又は減算して前記第３レジスタに送る第２加算器を、含む第２積和演算器と、を備え、第１の状態が選択されると、前記第１加算器は前記０に対して前記第１乗算器の出力データを加算し、前記第２加算器は前記第３レジスタの保持するデータに対して前記第２レジスタが保持するデータを加算又は減算し、第２の状態が選択されると、前記第１加算器は前記０に対して前記第１乗算器の出力データを加算し、前記第２加算器は前記シフタがシフトしたデータに対して前記第２乗算器の出力データを加算する、演算ユニットが提供される。
【０００７】
第３の状態が選択されると、前記第１加算器は前記第１レジスタが保持するデータに対して前記第１乗算器の出力データを加算又は減算し、前記第２乗算器は前記第３の入力データと前記第４の入力データとの乗算を行い、前記第２加算器は前記第３レジスタの保持するデータに対して前記第２乗算器の出力データを加算又は減算してもよい。
【０００８】
前記シフタは、前記第１レジスタが保持するデータ又は前記第３レジスタが保持するデータをシフトしてもよい。
【０００９】
前記シフタがシフトしたデータに対して所定の丸め判定を行い、当該処理の結果のデータを前記第２加算器へ入力する丸め補助器をさらに備え、第４の状態が選択されると、前記シフタは前記第３レジスタが保持するデータをシフトし、前記第２加算器は前記第２レジスタが保持するデータに対して前記丸め補助器で前記所定の丸め判定を行い当該処理をされたデータを加算してもよい。
【００１０】
前記第３レジスタの保持するデータに対して飽和処理を行う飽和器をさらに備えてもよい。
【００１１】
前記飽和器の出力するデータに対して抽出処理を行う抽出器をさらに備えてもよい。
【発明の効果】
【００１２】
本発明によれば、複数の演算を切り替えて行うことができる演算ユニットを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態に係るデジタル信号処理装置の構成を示すブロック図である。
【図２】本発明の一実施形態に係る演算ユニットの構成を示すブロック図である。
【図３】本発明の一実施形態に係る演算ユニットにおける各セレクタが選択するデータの一例を示す図である。
【図４】本発明の一実施形態に係る演算ユニットにおける各演算時の各セレクタの状態の一例を示す図である。
【図５】本発明の一実施形態に係る演算ユニットがシングル積和演算を行う場合について説明するためのブロック図である。
【図６】本発明の一実施形態に係る演算ユニットが倍精度演算を行う場合について説明するためのブロック図である。
【図７】本発明の一実施形態に係る演算ユニットがデュアル積和演算を行う場合について説明するためのブロック図である。
【図８】本発明の一実施形態に係る演算ユニットがシフトを行う場合について説明するためのブロック図である。
【図９】本発明の一実施形態に係る演算ユニットが丸めを行う場合について説明するためのブロック図である。
【図１０】本発明の変形例に係る演算ユニットの構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施形態について、図面を参照しながら詳細に説明する。以下に示す実施形態は本発明の実施形態の一例であって、本発明はこれらの実施形態に限定されるものではない。
【００１５】
［デジタル信号処理装置の構成］
図１は、本発明の一実施形態に係るデジタル信号処理装置の構成を示すブロック図である。デジタル信号処理装置は、演算ユニット１、バス制御ユニット２、メモリ制御ユニット３、プログラム制御ユニット４及びレジスタ（図示せず）を備える。メモリ制御ユニット３は、外部のデータメモリ５と通信を行い、プログラム制御ユニット４は、外部の命令メモリ６と通信を行う。
【００１６】
プログラム制御ユニット４は、命令メモリ６から命令をフェッチし、デコードした上で、演算ユニット１に計算指示をする。例えば、デコードした命令の内容がシングル積和演算である場合、演算ユニット１にシングル積和演算を行うように指示を出す。
【００１７】
メモリ制御ユニット３は、データメモリ５からデータを取り出す。バス制御ユニット２は、バスソースやバスデスティネーションを指定する。演算ユニット１については、後述する。
【００１８】
［演算ユニットの構成］
次に、図２を用いて、本発明の一実施形態に係る演算ユニット１を説明する。図２は、本発明の一実施形態に係る演算ユニットの構成を示すブロック図である。
【００１９】
演算ユニット１は、第１乗算器１１、第１加算器１３、第１レジスタ１５、シフタ１７、第２レジスタ２１、第２乗算器２３、第２加算器２５、第３レジスタ３１、丸め補助器３３、飽和器３５、抽出器３６及び第４レジスタ４１を備える。ここで、第１乗算器１１と第１加算器１３とを合わせて、第１積和演算器と呼び、第２乗算器２３と第２加算器２５とを合わせて、第２積和演算器と呼ぶ。
【００２０】
第１乗算器１１は、Ａ０のデータ（第１の入力データ）とＢ０のデータ（第２の入力データ）との乗算を行う。この例では、Ａバスは５０ｂｉｔのバス幅で、Ａ０はＡバスの下位２５ｂｉｔ、Ａ１はＡバスの上位２５ｂｉｔである。他方、Ｂバスは３６ｂｉｔのバス幅で、Ｂ０はＢバスの下位１８ｂｉｔ、Ｂ１はＢバスの上位１８ｂｉｔである。第１乗算器１１の出力は、第１加算器１３に入力される。この例では、第１乗算器１１の出力は、４３ｂｉｔである。なお、この例では、第１加算器１３は、４８ｂｉｔのデータの加減算を行うことができる。そのため、第１乗算器１１の出力は、符号拡張されて第１加算器１３に入力される。
【００２１】
第１加算器１３は、第１レジスタ１５が保持するデータ又は０に対して、第１乗算器１１の出力データを加算又は減算して第１レジスタ１５に入力する。ここで、第１レジスタ１５が保持するデータが加算されるか、０が加算されるかは、セレクタＳ２によって選択される。また、第１レジスタ１５が保持するデータは、１サイクル以上前の第１積和演算器の出力である。
【００２２】
シフタ１７には、第１レジスタ１５が保持するデータが入力される。シフタ１７は、入力されたデータをシフトする。この例では、シフタ１７は、バレルシフタである。バレルシフタは、７ｂｉｔ固定算術左シフタと３１ｂｉｔ可変算術右シフタとを備える。３１ｂｉｔ可変算術右シフタでシフトさせる量を変化させることによって、＋７ｂｉｔから−２４ｂｉｔの算術シフトが可能になる。シフタ１７によってシフトされたデータは、第２レジスタ２１に入力される。他方、符号フラグは、丸め補助器３３に入力される。
【００２３】
シフタ１７は、第１レジスタ１５が保持するデータ又は第３レジスタ３１が保持するデータをシフトする。ここで、第１レジスタ１５が保持するデータをシフトするか、第３レジスタ３１が保持するデータをシフトするかは、セレクタＳ３によって選択される。また、第３レジスタ３１が保持するデータは、後述のとおり、２サイクル以上前の第２積和演算器の出力である。
【００２４】
第２乗算器２３は、Ａ１のデータ（第３の入力データ）とＢ１のデータ（第４の入力データ）との乗算を行う。第２加算器２５は、シフタ１７がシフトしたデータ又は第３レジスタ３１が保持するデータに対して、第２乗算器２３の出力データ又は第２レジスタ２１が保持するデータを加算又は減算して、第３レジスタ３１に送る。
【００２５】
丸め補助器３３は、シフタ１７がシフトしたデータに対して所定の丸め判定を行う。丸め方式としては、最近接丸め、０方向への丸め、＋∞への丸め、−∞への丸めなどがある。丸め方式を選択できるようにすることも可能である。丸め方式に応じて、丸め補助器３３に入力されるデータは異なる。例えば、０方向への丸めの場合、丸め補助器３３に符号フラグが入力される
【００２６】
飽和器３５は、第３レジスタの保持するデータに対して飽和処理を行う。この例では、第３レジスタ３１の保持するデータは４８ｂｉｔである。この例では、最上位のビットが符号を意味し、最上位のビットの次の６ｂｉｔが整数部であり、それ以外は小数部である。したがって、第３レジスタ３１の保持するデータは、−６４から６４−２−４１の間の値である。そして、第３レジスタ３１の保持するデータが１以上の場合には、１．０−２−４１に補正し、第３レジスタ３１の保持するデータが−１より小さい場合には、−１．０に補正する。
【００２７】
抽出器３６は、飽和器３５の出力するデータに対して抽出処理を行う。抽出器３６は、例えば、飽和器３５の出力するデータの下位側のビットを抽出してもよい。第４レジスタ４１は、抽出器３６の出力データを保持する。
【００２８】
演算ユニット１には、セレクタＳ１からセレクタＳ７がある。ここで、図３及び図４を用いて、各セレクタについて説明する。図３は、本発明の一実施形態に係る演算ユニットにおける各セレクタが選択するデータの一例を示す図である。図４は、本発明の一実施形態に係る演算ユニットにおける各演算時の各セレクタの状態の一例を示す図である。
【００２９】
セレクタＳ１が０のときは第１乗算器１１の出力を選択し、セレクタＳ１が１のときは「Ｂ０」を選択する。同様に、セレクタＳ２が０のときは「０」を選択し、セレクタＳ２が１のときは第１レジスタ１５の保持するデータ（１サイクル以上前の第１積和演算器の出力）を選択する。同様に、セレクタＳ３からセレクタＳ７が選択するデータは、図３に示すとおりである。なお、後述のシングル積和演算、倍精度演算、デュアル積和演算のいずれにおいても、セレクタＳ１は０で第１乗算器１１の出力が選択されるが、「Ｂ０」を選択するような演算が行われるようにしてもよい。
【００３０】
図４に示すように、シングル積和演算時においては、セレクタＳ１は０、セレクタＳ２は０、セレクタＳ３は０、セレクタＳ４は０、セレクタＳ５は０又は１、セレクタＳ６は０、セレクタＳ７は１であり、それぞれに対応する図３のデータを選択する。ここで、図４の「０／１」は、０又は１のいずれでもよいという意味である。倍精度演算、デュアル積和演算、シフト、丸め時における各セレクタの値は図４に示すとおりとなる。詳細については後述する。
【００３１】
［シングル積和演算］
図５は、本発明の一実施形態に係る演算ユニットがシングル積和演算を行う場合について説明するためのブロック図である。ここで、図５において、実線で表されているブロック又はバスが機能していることを意味する。
【００３２】
演算ユニット１がシングル積和演算を行うように命令を受ける（第１の状態が選択される）と、第１乗算器１１は、Ａ０のデータ（第１の入力データ）とＢ０のデータ（第２の入力データ）との乗算を行う。そして、第１加算器１３は、０に対して第１乗算器１１の出力データを加算して第１レジスタ１５に送る。ここで、第１加算器１３は、０に対して加算していることから、第１乗算器１１の出力データが第１レジスタ１５に送られることと等しいといえる。そうすると、第１加算器１３は、実質的には機能していないという意味で、実線で表されていない。
【００３３】
また、シフタ１７には第１レジスタ１５が保持するデータが入力され、シフタ１７はこのデータをシフトして第２レジスタ２１に送る。ここで、シフタ１７に入力されるデータ（第１レジスタ１５が保持するデータ）は、セレクタＳ３によって、選択される。そして、第２加算器２５は第３レジスタ３１の保持するデータに対して、第２レジスタ２１が保持するデータを加算する。ここで、第２加算器２５に入力されるデータ（第３レジスタ３１の保持するデータ）は、セレクタＳ７によって選択される。他方、第２加算器２５に入力されるデータ（第２レジスタ２１が保持するデータ）は、セレクタＳ６によって選択される。この加算した結果のデータを第３レジスタ３１に格納する。
【００３４】
以上でシングル積和演算について説明した。これに対し、シングル積差演算を行う場合には、第２加算器２５は第３レジスタ３１の保持するデータに対して、第２レジスタ２１が保持するデータを減算すればよい。
【００３５】
なお、必要に応じて、飽和器３５は第３レジスタ３１の保持するデータに対して飽和処理を行ってもよい。
また、必要に応じて、抽出器３６は飽和器３５の出力するデータに対して抽出処理を行ってもよい。
【００３６】
［倍精度演算］
図６は、本発明の一実施形態に係る演算ユニットが倍精度演算を行う場合について説明するためのブロック図である。図５と同様に、図６において、実線で表されているブロック又はバスが機能していることを意味する。本実施形態に係る演算ユニット１では、Ａバスのデータ又はＢバスのデータのいずれか一方について倍精度演算（片側倍精度演算）を行うことができる。この例では、Ｂバスのデータについて倍精度演算を行うものとして説明するが、Ａバスのデータについて倍精度演算を行うことも可能である。
【００３７】
演算ユニット１が倍精度演算を行うように命令を受ける（第２の状態が選択される）と、第１乗算器１１は、Ａ０のデータ（第１の入力データ）とＢ０のデータ（第２の入力データ）との乗算を行う。Ｂ０のデータは、１８ｂｉｔで、後述の３６ｂｉｔの下位となる。他方、Ａ０のデータは、２５ｂｉｔである。第１加算器１３は、０に対して第１乗算器１１の出力データを加算して第１レジスタ１５に送る。ここで、第１加算器１３に入力されるデータ（第１乗算器１１の出力）は、セレクタＳ１によって選択される。他方、第１加算器１３に入力されるデータ（０）は、セレクタＳ２によって選択される。
【００３８】
また、第１加算器１３は、０に対して加算していることから、第１乗算器１１の出力データが第１レジスタ１５に送られることと等しいといえる。そうすると、第１加算器１３は、実質的には機能していないという意味で、実線で表されていない。シフタ１７はこのデータをシフトして第２加算器２５に送る。この例では、シフタ１７はデータを所定のＳビット右へシフト（Ａ０×Ｂ０＞＞Ｓ）する。なお、シフタ１７に入力されるデータ（第１レジスタ１５の保持するデータ）は、セレクタＳ３によって、選択されている。
【００３９】
第２乗算器２３は、Ａ１のデータ（第３の入力データ）とＢ１のデータ（第４の入力データ）との乗算を行う。Ｂ１のデータは、１８ｂｉｔで、後述の３６ｂｉｔの上位となる。他方、Ａ１のデータは、２５ｂｉｔである。なお、この例では、Ａ１＝Ａ０である。第２加算器２５は、第２乗算器２３の出力データに対してシフタ１７がシフトしたデータを加算する。その結果、Ｐ１＝Ａ１×Ｂ１＋Ａ０×Ｂ０＞＞Ｓを計算することが可能となる。Ｐ１は、２５ｂｉｔ×３６ｂｉｔのデータとなる。ここで、第２加算器２５に入力されるデータ（シフタ１７の出力）は、セレクタＳ５及びセレクタＳ７によって、選択される。また、第２加算器２５に入力されるデータ（第２乗算器２３の出力）は、セレクタＳ４及びセレクタＳ６によって、選択される。
【００４０】
以上で倍精度演算について説明した。本実施形態の最小構成は、第１積和演算器（第１乗算器１１及び第１加算器１３）、シフタ１７、第２積和演算器（第２乗算器２３及び第２加算器２５）である。この構成によって、従来技術と異なり、第１乗算器１１での乗算結果をシフトして、第２加算器２５に入力することが可能となる。特許文献１に開示されたような従来の積和演算器において、乗算器と加算器との間にシフタを挿入すると、ＦＰＧＡのＤＳＰをそのまま使うことができない。他方、本実施形態に係る演算ユニット１では、ＦＰＧＡのＤＳＰをそのまま使うことが可能となる。
【００４１】
また、従来技術では、倍精度演算を行うには複数命令ステップを要する。他方、本実施形態に係る演算ユニット１では、１ステップで片側倍精度演算（例えば、Ｐ１＝Ａ１×Ｂ１＋Ａ０×Ｂ０＞＞Ｓ）を行うことができる。
【００４２】
なお、シングル積和演算と同様に、必要に応じて、飽和器３５は第３レジスタ３１の保持するデータに対して飽和処理を行ってもよい。同様に、必要に応じて、抽出器３６は飽和器３５の出力するデータに対して抽出処理を行ってもよい。
【００４３】
［デュアル積和演算］
図７は、本発明の一実施形態に係る演算ユニットがデュアル積和演算を行う場合について説明するためのブロック図である。図５と同様に、図７において、実線で表されているブロック又はバスが機能していることを意味する。ここで、デュアル積和演算とは、１命令ステップあたり２回の積和演算を行うことを意味する。
【００４４】
演算ユニット１がデュアル積和演算を行うように命令を受ける（第３の状態が選択される）と、第１乗算器１１は、Ａ０のデータ（第１の入力データ）とＢ０のデータ（第２の入力データ）との乗算を行う。そして、第１加算器１３は、第１レジスタ１５が保持するデータに対して、第１乗算器１１の出力データを加算する。例えば、Ｐ０＝Ｐ０＋Ａ０×Ｂ０となる。ここで、第１加算器１３に入力されるデータ（第１レジスタ１５の保持するデータ）は、セレクタＳ２によって、選択される。また、第１加算器１３に入力されるデータ（第１乗算器１１の出力）は、セレクタＳ１によって、選択される。
【００４５】
他方、第２乗算器２３はＡ１のデータ（第３の入力データ）とＢ１のデータ（第４の入力データ）との乗算を行う。そして、第２加算器２５は、第３レジスタ３１の保持するデータに対して、第２乗算器２３の出力データを加算する。例えば、Ｐ１＝Ｐ１＋Ａ１×Ｂ１となる。ここで、第２加算器２５に入力されるデータ（第２乗算器２３の出力）は、セレクタＳ６によって、選択される。他方、第２加算器２５に入力されるデータ（第３レジスタ３１の保持するデータ）は、セレクタＳ７によって、選択される。
【００４６】
以上でデュアル積和演算について説明した。これに対し、デュアル積差演算を行う場合には、第１加算器１３は、第１レジスタ１５が保持するデータに対して、第１乗算器１１の出力データを減算すればよい。また、第２加算器２５は、第３レジスタ３１の保持するデータに対して、第２乗算器２３の出力データを減算すればよい。
【００４７】
本実施形態では、積和演算が１命令ステップあたり２回できる。他方、特許文献１に開示された構成では、積和演算が１命令ステップあたり１回できる。
【００４８】
なお、必要に応じて、シフタ１７は第１レジスタ１５が保持するデータをシフトしてもよい。また、必要に応じて、飽和器３５は第３レジスタ３１の保持するデータに対して飽和処理を行ってもよい。さらに、必要に応じて、抽出器３６は飽和器３５の出力するデータに対して抽出処理を行ってもよい。
【００４９】
［シフト］
図８は、本発明の一実施形態に係る演算ユニットがシフトを行う場合について説明するためのブロック図である。図５と同様に、図８において、実線で表されているブロック又はバスが機能していることを意味する。
【００５０】
この例では、シフタ１７は、第３レジスタ３１の保持するデータをシフトする。言い換えれば、シフタ１７は、２サイクル以上前の第２積和演算器の出力データをシフトする。シフタ１７に入力されるデータ（第３レジスタ３１の保持するデータ）は、セレクタＳ３によって、選択される。
【００５１】
本実施形態では、演算結果（第３レジスタ３１の保持するデータ）をシフタ１７に戻すことによって、シフト演算を高速に行うことが可能となる。
【００５２】
なお、必要に応じて、飽和器３５は第３レジスタ３１の保持するデータに対して飽和処理を行ってもよい。同様に、必要に応じて、抽出器３６は飽和器３５の出力するデータに対して抽出処理を行ってもよい。
【００５３】
［丸め］
図９は、本発明の一実施形態に係る演算ユニットが丸めを行う場合について説明するためのブロック図である。図５と同様に、図９において、実線で表されているブロック又はバスが機能していることを意味する。
【００５４】
丸め補助器３３は、シフタ１７がシフトしたデータに対して所定の丸め判定を行う。この例では、２サイクル以上前の第２積和演算器の出力データをシフトしたデータに対して所定の丸めを行う。ここで、丸め判定処理の結果のデータをＲとする。また、この例では、シフタ１７は、第３レジスタ３１の保持するデータＰ１をシフトする（例えば、Ｐ１＜＜Ｓ）。第２加算器２５は、Ｐ１＝Ｐ１＜＜Ｓ＋Ｒを計算する。ここで、シフタ１７に入力されるデータ（第３レジスタ３１の保持するデータ）は、セレクタＳ３によって、選択される。また、第２加算器２５に入力されるデータ（シフタ１７の出力）は、セレクタＳ４及びセレクタＳ６によって、選択される。他方、第２加算器２５に入力されるデータ（丸め補助器３３の出力）は、セレクタＳ５及びセレクタＳ７によって、選択される。
【００５５】
本実施形態では、丸め補助器３３を加えることで、丸めも高速に行うことができる。
【００５６】
なお、必要に応じて、飽和器３５は第３レジスタ３１の保持するデータに対して飽和処理を行ってもよい。同様に、必要に応じて、抽出器３６は飽和器３５の出力するデータに対して抽出処理を行ってもよい。
【００５７】
＜変形例＞
図１０は、本発明の変形例に係る演算ユニットの構成を示すブロック図である。本変形例の演算ユニット１Ａは、演算ユニット１と異なり、セレクタＳ１を備えていない。その他の点は、演算ユニット１と同じである。
【００５８】
演算ユニット１ＡがセレクタＳ１を備えていなくても、演算ユニット１で説明したシングル積和演算、倍精度演算、デュアル積和演算、シフト、丸めは行うことができる。本変形例においても、演算ユニット１と同様の効果を奏する。
【００５９】
なお、本発明は上記の実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００６０】
１：演算ユニット  ２：バス制御ユニット  ３：メモリ制御ユニット
４：プログラム制御ユニット  ５：データメモリ  ６：命令メモリ
１１：第１乗算器  １３：第１加算器
１５：第１レジスタ  １７：シフタ  ２１：第２レジスタ
２３：第２乗算器  ２５：第２加算器  ３１：第３レジスタ
３５：飽和器  ３６：抽出器  ４１：第４レジスタ
【図１】
2018067028.tif 000003
【図２】
2018067028.tif 000004
【図３】
2018067028.tif 000005
【図４】
2018067028.tif 000006
【図５】
2018067028.tif 000007
【図６】
2018067028.tif 000008
【図７】
2018067028.tif 000009
【図８】
2018067028.tif 000010
【図９】
2018067028.tif 000011
【図１０】
2018067028.tif 000012