(57)【特許請求の範囲】
【請求項１】
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御部と、
前記命令制御部が出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御部が出力した前記オペランド信号である被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算部と、
前記演算部が出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出部と、を備え、
前記命令制御部は、前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記ＯＰコード信号を前記演算部に出力し、
前記オペランド制御部は、前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記オペランド信号を前記演算部に出力し、
前記エラー検出部は、前記演算部が直前に求めた前記演算結果データと前記ＮＯＰ状態を検出した際に求めた前記演算結果データとを比較し、それぞれが異なる場合にエラーが発生したと判別し、
前記オペランド制御部は、第１オペランド制御部と、第２オペランド制御部と、を備え、
前記第１オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を前記第２オペランド制御部に出力し、前記第２オペランド制御部が出力した第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を前記第１オペランド制御部に出力し、前記第１オペランド制御部が出力した前記第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力する、
ことを特徴とする演算装置。
【請求項２】
前記ＮＯＰ検出部は、前記ＮＯＰ状態を検出したことを示すＮＯＰ検出信号を前記エラー検出部に出力し、
前記エラー検出部は、前記ＮＯＰ検出信号を受信し、前記ＮＯＰ検出信号が前記ＮＯＰ状態を示している場合、かつ、エラーが発生したと判別した場合、エラーが発生したことを示すエラー検出信号を出力する、
ことを特徴とする請求項１に記載の演算装置。
【請求項３】
前記ＯＰコード信号が減算命令を示しているか否かを検出する減算検出部と、
前記演算部が求めた前記演算結果データの符号を反転させる符号反転部と、を更に備え、
前記符号反転部は、前記減算検出部が前記減算命令を検出した場合、前記演算部が求めた前記演算結果データの符号を反転し、
前記エラー検出部は、前記演算部が求めた前記演算結果データと、前記符号反転部が符号を反転した前記演算結果データとを比較する、
ことを特徴とする請求項１又は２に記載の演算装置。
【請求項４】
前記ＮＯＰ検出部が出力した前記ＮＯＰ検出信号を否定する否定部をさらに備え、
前記否定部は、否定した前記ＮＯＰ検出信号を前記エラー検出部に出力し、
前記エラー検出部は、前記演算部が求めた前記演算結果データと前記否定部が否定して出力した前記ＮＯＰ検出信号が示す値との論理積を求め、求めた前記論理積をマスク済み演算結果データとして出力する、
ことを特徴とする請求項２に記載の演算装置。
【請求項５】
前記演算部は、パイプライン構成であり、
前記ＮＯＰ検出部は、前記ＮＯＰ検出信号が示す値を記憶する記憶部を前記パイプラインの段数に従った数備える、
ことを特徴とする請求項２に記載の演算装置。
【請求項６】
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御部と、
前記命令制御部が出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御部が出力した前記オペランド信号である被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算部と、
前記演算部が出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出部と、を備え、
前記オペランド制御部は、第１オペランド制御部と、第２オペランド制御部と、を備え、
前記第１オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を前記第２オペランド制御部に出力し、前記第２オペランド制御部が出力した第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を前記第１オペランド制御部に出力し、前記第１オペランド制御部が出力した前記第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力し、
前記命令制御部は、受信した前記ＯＰコード信号を記憶するＯＰコード記憶部を備え、
前記第１オペランド制御部は、受信した前記オペランド信号を記憶する第１オペランド記憶部を備え、
前記第２オペランド制御部は、受信した前記オペランド信号を記憶する第２オペランド記憶部を備え、
前記ＮＯＰ検出部は、前記ＮＯＰ状態を検出したことを示すＮＯＰ検出信号を記憶する第１ＮＯＰ記憶部を備え、
前記演算部は、前記演算結果データを記憶する第１演算結果記憶部を備え、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した第１のクロックサイクルにおいて、
前記ＮＯＰ検出部は、前記第１ＮＯＰ記憶部に前記ＮＯＰ検出信号を記憶し、前記制御信号を前記命令制御部と前記第１オペランド制御部及び前記第２オペランド制御部に出力し、
前記命令制御部は、直前に受信した前記ＯＰコード信号を前記ＯＰコード記憶部に記憶し、前記ＯＰコード記憶部に記憶された前記ＯＰコード信号を前記演算部に出力し、
前記第１オペランド制御部は、前記第２オペランド制御部から受信した前記第２オペランド信号を前記第１オペランド記憶部に記憶し、前記第１オペランド記憶部に記憶された前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、前記第１オペランド制御部から受信した前記第１オペランド信号を前記第２オペランド記憶部に記憶し、前記第２オペランド記憶部に記憶された前記第１オペランド信号を前記演算部に出力し、
前記演算部は、求めた前記演算結果データを前記第１演算結果記憶部に記憶する、
ことを特徴とする演算装置。
【請求項７】
前記ＮＯＰ検出部は、前記第１ＮＯＰ記憶部が記憶している前記ＮＯＰ検出信号を記憶する第２ＮＯＰ記憶部を備え、
前記演算部は、前記第１演算結果記憶部が記憶している前記演算結果データを記憶する第２演算結果記憶部を備え、
前記第１のクロックサイクルの次の第２のクロックサイクルにおいて、
前記ＮＯＰ検出部は、前記第１ＮＯＰ記憶部に記憶された前記ＮＯＰ検出信号を前記第２ＮＯＰ記憶部に記憶し、前記第２ＮＯＰ記憶部に記憶された前記ＮＯＰ検出信号を前記エラー検出部に出力し、
前記演算部は、前記第１演算結果記憶部に記憶された前記演算結果データを前記第２演算結果記憶部に記憶し、前記命令制御部と前記第１オペランド制御部及び前記第２オペランド制御部の出力信号に従って試験演算結果データを求め、求めた前記試験演算結果データを前記第１演算結果記憶部に記憶し、前記第１演算結果記憶部に記憶された前記試験演算結果データと前記第２演算結果記憶部に記憶された前記演算結果データを前記エラー検出部に出力し、
前記エラー検出部は、前記演算部が出力した前記試験演算結果データと前記演算結果データとを比較し、両者が異なる値である場合、かつ、前記ＮＯＰ検出部が出力した前記ＮＯＰ検出信号が前記ＮＯＰ状態を示している場合、エラーが発生したことを示すエラー検出信号を出力する、
ことを特徴とする請求項６に記載の演算装置。
【請求項８】
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御ステップと、
前記命令制御ステップで出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御ステップで出力した前記オペランド信号である被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算ステップと、
前記演算ステップで出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出ステップと、を備え、
前記演算ステップでは、前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、前記命令制御ステップで直前に受信した前記ＯＰコード信号と前記オペランド制御ステップで直前に受信した前記オペランド信号とに基づいて前記演算処理を実行し、
前記エラー検出ステップでは、前記演算ステップで直前に求めた前記演算結果データと前記ＮＯＰ状態を検出した際に求めた前記演算結果データとを比較し、それぞれが異なる場合にエラーが発生したと判別し、
前記オペランド制御ステップは、第１オペランド制御ステップと、第２オペランド制御ステップと、を含み、
前記第１オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を出力し、前記第２オペランド制御ステップで出力した第２オペランド信号を受信し、
前記第２オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を出力し、前記第１オペランド制御ステップで出力した前記第１オペランド信号を受信し、
前記演算ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第１オペランド制御ステップで受信した前記第１オペランド信号と、前記第２オペランド制御ステップで受信した前記第２オペランド信号と、に基づいて前記演算処理を実行し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、前記第１オペランド制御ステップで受信した前記第２オペランド信号と、前記第２オペランド制御ステップで受信した前記第１オペランド信号と、に基づいて前記演算処理を実行する、
ことを特徴とするエラー検出方法。
【請求項９】
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御ステップと、
前記命令制御ステップで出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御ステップで出力した前記オペランド信号である被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算ステップと、
前記演算ステップで出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出ステップと、を備え、
前記オペランド制御ステップは、第１オペランド制御ステップと、第２オペランド制御ステップと、を含み、
前記第１オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を出力し、前記第２オペランド制御ステップで出力した第２オペランド信号を受信し、
前記第２オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を出力し、前記第１オペランド制御ステップで出力した前記第１オペランド信号を受信し、
前記演算ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第１オペランド制御ステップで受信した前記第１オペランド信号と、前記第２オペランド制御ステップで受信した前記第２オペランド信号と、に基づいて前記演算処理を実行し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、前記第１オペランド制御ステップで受信した前記第２オペランド信号と、前記第２オペランド制御ステップで受信した前記第１オペランド信号と、に基づいて前記演算処理を実行し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した第１のクロックサイクルにおいて、
前記ＮＯＰ検出ステップでは、前記ＮＯＰ状態を検出したことを示すＮＯＰ検出信号を記憶し、前記制御信号を出力し、
前記命令制御ステップでは、前記ＮＯＰ検出ステップで出力した前記制御信号に従って直前に受信した前記ＯＰコード信号を記憶し、
前記第１オペランド制御ステップでは、前記ＮＯＰ検出ステップで出力した前記制御信号に従って前記第２オペランド制御ステップで受信した前記第２オペランド信号を記憶し、
前記第２オペランド制御ステップでは、前記ＮＯＰ検出ステップで出力した前記制御信号に従って前記第１オペランド制御ステップで受信した前記第１オペランド信号を記憶し、
前記演算ステップでは、前記命令制御ステップで記憶した前記ＯＰコード信号と、前記第２オペランド制御ステップで記憶した前記第１オペランド信号と、前記第１オペランド制御ステップで記憶した前記第２オペランド信号と、に基づいて求めた前記演算結果データを記憶する、
ことを特徴とするエラー検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置及びエラー検出方法に関する。
【背景技術】
【０００２】
算術演算器のエラーを検出する方法として、一般的には、モジュロ３チェックや、パリティ・プリディクションなどの手法が用いられる。また、この他に、算術演算器全体をエラーの検出対象とする手法が提案されている。
【０００３】
特許文献１は、スーパースカラプロセッサ等で同一の機能を有する２つのＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）を有する算術論理演算器において、一方のＡＬＵにしか有効な演算処理が行われていないタイミングで、両方のＡＬＵに同一のデータを与えて同じ処理を実行させ、互いの出力同士を比較することでエラーを検出する方法を開示している。
【０００４】
特許文献２は、ＷＡＩＴ状態の時に、機能診断用データが格納された記憶手段からデータを読み出して演算を実行し、演算後の結果を予め格納されていた診断データと比較することでエラーを検出する方法を開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平３−０１４１３４号公報
【特許文献２】特開平９−２８２１６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
パリティ・プリディクション等の一般的なエラー検出方法は、検査回路が複雑な構成になるため、コストや回路規模の都合上、一部の回路にのみ搭載されることが多い。このため、このようなエラー検出方法では、全ての回路におけるエラーを検出することができない。
【０００７】
また、特許文献１が開示する手法は、２つのＡＬＵの出力を比較することでエラーを検出する方法であるため、ＡＬＵを１つしか有していない算術論理演算器においては適用することができない。
【０００８】
また、特許文献２が開示する手法は、ＡＬＵが１つしか有さない場合でも適用できるが、試験データを予め格納しておく必要があり、実行する試験命令や試験データが限られる。よって、エラー検出効果が限定されることとなり、特許文献２が開示する手法では、演算器内でエラーを検出できない箇所が存在し得ることとなる。
【０００９】
本発明は、上記事情に鑑みてなされたものであり、エラーの検出効果を高くすることができる演算装置及びエラー検出方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明の第１の観点に係る演算装置は、
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御部と、
前記命令制御部が出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御部が出力した前記オペランド信号である被演算データに対する演算処理を実行し、
求めた演算結果データを出力する演算部と、
前記演算部が出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出部と、を備え、
前記命令制御部は、前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記ＯＰコード信号を前記演算部に出力し、
前記オペランド制御部は、前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記オペランド信号を前記演算部に出力し、
前記エラー検出部は、前記演算部が直前に求めた前記演算結果データと前記ＮＯＰ状態を検出した際に求めた前記演算結果データとを比較し、それぞれが異なる場合にエラーが発生したと判別し、
前記オペランド制御部は、第１オペランド制御部と、第２オペランド制御部と、を備え、
前記第１オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を前記第２オペランド制御部に出力し、前記第２オペランド制御部が出力した第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を前記第１オペランド制御部に出力し、前記第１オペランド制御部が出力した前記第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力する、
ことを特徴とする。
上記目的を達成するため、本発明の第２の観点に係る演算装置は、
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御部と、
前記命令制御部が出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御部が出力した前記オペランド信号である被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算部と、
前記演算部が出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出部と、を備え、
前記オペランド制御部は、第１オペランド制御部と、第２オペランド制御部と、を備え、
前記第１オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を前記第２オペランド制御部に出力し、前記第２オペランド制御部が出力した第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を前記第１オペランド制御部に出力し、前記第１オペランド制御部が出力した前記第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力し、
前記命令制御部は、受信した前記ＯＰコード信号を記憶するＯＰコード記憶部を備え、
前記第１オペランド制御部は、受信した前記オペランド信号を記憶する第１オペランド記憶部を備え、
前記第２オペランド制御部は、受信した前記オペランド信号を記憶する第２オペランド記憶部を備え、
前記ＮＯＰ検出部は、前記ＮＯＰ状態を検出したことを示すＮＯＰ検出信号を記憶する第１ＮＯＰ記憶部を備え、
前記演算部は、前記演算結果データを記憶する第１演算結果記憶部を備え、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した第１のクロックサイクルにおいて、
前記ＮＯＰ検出部は、前記第１ＮＯＰ記憶部に前記ＮＯＰ検出信号を記憶し、前記制御信号を前記命令制御部と前記第１オペランド制御部及び前記第２オペランド制御部に出力し、
前記命令制御部は、直前に受信した前記ＯＰコード信号を前記ＯＰコード記憶部に記憶し、前記ＯＰコード記憶部に記憶された前記ＯＰコード信号を前記演算部に出力し、
前記第１オペランド制御部は、前記第２オペランド制御部から受信した前記第２オペランド信号を前記第１オペランド記憶部に記憶し、前記第１オペランド記憶部に記憶された前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、前記第１オペランド制御部から受信した前記第１オペランド信号を前記第２オペランド記憶部に記憶し、前記第２オペランド記憶部に記憶された前記第１オペランド信号を前記演算部に出力し、
前記演算部は、求めた前記演算結果データを前記第１演算結果記憶部に記憶する、
ことを特徴とする。
【００１１】
上記目的を達成するため、本発明の第３の観点に係るエラー検出方法は、
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御ステップと、
前記命令制御ステップで出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御ステップで出力した前記オペランド信号である被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算ステップと、
前記演算ステップで出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出ステップと、を備え、
前記演算ステップでは、前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、前記命令制御ステップで直前に受信した前記ＯＰコード信号と前記オペランド制御ステップで直前に受信した前記オペランド信号とに基づいて前記演算処理を実行し、
前記エラー検出ステップでは、前記演算ステップで直前に求めた前記演算結果データと前記ＮＯＰ状態を検出した際に求めた前記演算結果データとを比較し、それぞれが異なる場合にエラーが発生したと判別し、
前記オペランド制御ステップは、第１オペランド制御ステップと、第２オペランド制御ステップと、を含み、
前記第１オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を出力し、前記第２オペランド制御ステップで出力した第２オペランド信号を受信し、
前記第２オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を出力し、前記第１オペランド制御ステップで出力した前記第１オペランド信号を受信し、
前記演算ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第１オペランド制御ステップで受信した前記第１オペランド信号と、前記第２オペランド制御ステップで受信した前記第２オペランド信号と、に基づいて前記演算処理を実行し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、前記第１オペランド制御ステップで受信した前記第２オペランド信号と、前記第２オペランド制御ステップで受信した前記第１オペランド信号と、に基づいて前記演算処理を実行する、
ことを特徴とする。
上記目的を達成するため、本発明の第４の観点に係るエラー検出方法は、
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、試験演算用の被演算データであるオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、前記被演算データとペアの演算命令であるＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御ステップと、
前記命令制御ステップで出力した前記ＯＰコード信号である演算命令に従って、前記オペランド制御ステップで出力した前記オペランド信号である被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算ステップと、
前記演算ステップで出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出ステップと、を備え、
前記オペランド制御ステップは、第１オペランド制御ステップと、第２オペランド制御ステップと、を含み、
前記第１オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を出力し、前記第２オペランド制御ステップで出力した第２オペランド信号を受信し、
前記第２オペランド制御ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を出力し、前記第１オペランド制御ステップで出力した前記第１オペランド信号を受信し、
前記演算ステップでは、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出していない場合、前記第１オペランド制御ステップで受信した前記第１オペランド信号と、前記第２オペランド制御ステップで受信した前記第２オペランド信号と、に基づいて前記演算処理を実行し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した場合、前記第１オペランド制御ステップで受信した前記第２オペランド信号と、前記第２オペランド制御ステップで受信した前記第１オペランド信号と、に基づいて前記演算処理を実行し、
前記ＮＯＰ検出ステップで前記ＮＯＰ状態を検出した第１のクロックサイクルにおいて、
前記ＮＯＰ検出ステップでは、前記ＮＯＰ状態を検出したことを示すＮＯＰ検出信号を記憶し、前記制御信号を出力し、
前記命令制御ステップでは、前記ＮＯＰ検出ステップで出力した前記制御信号に従って直前に受信した前記ＯＰコード信号を記憶し、
前記第１オペランド制御ステップでは、前記ＮＯＰ検出ステップで出力した前記制御信号に従って前記第２オペランド制御ステップで受信した前記第２オペランド信号を記憶し、
前記第２オペランド制御ステップでは、前記ＮＯＰ検出ステップで出力した前記制御信号に従って前記第１オペランド制御ステップで受信した前記第１オペランド信号を記憶し、
前記演算ステップでは、前記命令制御ステップで記憶した前記ＯＰコード信号と、前記第２オペランド制御ステップで記憶した前記第１オペランド信号と、前記第１オペランド制御ステップで記憶した前記第２オペランド信号と、に基づいて求めた前記演算結果データを記憶する、
ことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、エラーの検出効果を高くすることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１実施形態に係る演算装置の構成例を示すブロック図である。
【図２】本発明の第１実施形態に係る演算装置の詳細な構成例を示す回路図である。
【図３】本発明の第１実施形態に係る演算装置の動作例のフローを示すタイムチャートである。
【図４】本発明の第２実施形態に係る演算装置の構成例を示すブロック図である。
【図５】本発明の第２実施形態に係る演算装置の詳細な構成例を示す回路図である。
【図６】本発明の第２実施形態に係る演算装置の動作例のフローを示すタイムチャートである。
【図７】本発明の第３実施形態に係る演算装置の詳細な構成例を示す回路図である。
【図８】本発明の第３実施形態に係る演算装置の動作例のフローを示すタイムチャートである。
【図９】本発明の各実施形態に係る演算装置のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１４】
本発明の実施形態に係る演算装置について、図面を参照して説明する。
【００１５】
［第１実施形態］
本実施形態に係る演算装置１は、図１に示すように、命令制御部１００と、第１オペランド制御部２００と、第２オペランド制御部３００と、演算部４００と、ＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）検出部５００と、エラー検出部６００と、を備える。
【００１６】
命令制御部１００は、演算部４００に対する入力信号であるＯＰ（Ｏｐｅｒａｔｉｏｎ）コード信号を外部から受信し、ＯＰコード信号を演算部４００とＮＯＰ検出部５００に出力する。さらに、命令制御部１００は、ＯＰコード信号を再帰的に自身に出力する。
【００１７】
なお、ＯＰコード信号とは、演算部４００が演算命令を実行する際に必要な全ての制御信号を含む信号である。例えば、有効な演算命令であるか否かを示すバリッド信号や、演算命令の種別を識別する信号、浮動小数点演算である場合の丸め制御信号等である。
【００１８】
第１オペランド制御部２００は、入力信号である被演算データとなる第１オペランド信号を外部から受信し、第１オペランド信号を演算部４００に出力する。また、第１オペランド制御部２００は、第１オペランド信号を第２オペランド制御部３００に出力する。
【００１９】
第２オペランド制御部３００は、入力信号である被演算データとなる第２オペランド信号を外部から受信し、第２オペランド信号を演算部４００に出力する。また、第２オペランド制御部３００は、第２オペランド信号を第１オペランド制御部２００に出力する。
【００２０】
演算部４００は、命令制御部１００が出力したＯＰコード信号と、第１オペランド制御部２００と第２オペランド制御部３００が出力した第１オペランド信号と第２オペランド信号と、を受信する。演算部４００は、ＯＰコード信号が示す演算命令に従って演算処理を行い、演算結果のデータをエラー検出部６００に出力する。なお、後述する動作により、演算部４００は、タイミングをずらして被演算データを入れ替えて演算処理を実行する。この演算結果のデータも、エラー検出部６００に出力される。
【００２１】
ＮＯＰ検出部５００は、命令制御部１００が出力したＯＰコード信号を受信し、ＮＯＰ状態を検出する。ＮＯＰ検出部５００は、ＮＯＰ検出信号をエラー検出部６００に出力し、また、ＮＯＰ検出信号を命令制御部１００、第１オペランド制御部２００、第２オペランド制御部３００の制御信号として出力する。なお、ＮＯＰ状態とは、ＯＰコード信号が無効である状態のことである。
【００２２】
エラー検出部６００は、演算部４００が出力した二つの演算結果のデータを比較し、ＮＯＰ検出部５００が出力したＮＯＰ検出信号が示す値と、比較結果を示す値とを基に、エラーが発生しているか否かを検出する。また、エラー検出部６００は、演算部４００が出力した演算結果のデータを、外部に出力する。
【００２３】
以上が、演算装置１の構成である。
【００２４】
続いて、演算装置１の詳細な構成の一例について説明する。
【００２５】
命令制御部１００は、図２に示すように、２入力セレクタ１１０と、ＯＰコードレジスタ１２０と、から構成される。入力信号であるＯＰコード信号は、２入力セレクタ１１０を介してＯＰコードレジスタ１２０に記憶される。２入力セレクタ１１０は、一方の入力を外部からの入力信号であるＯＰコード信号とし、他方の入力をＯＰコードレジスタ１２０から出力されるＯＰコード信号とする。他方の入力が有効になった場合、ＯＰコードレジスタ１２０の値が保持されることになる。
【００２６】
第１オペランド制御部２００は、２入力セレクタ２１０と、第１オペランドレジスタ２２０と、から構成される。入力信号である第１オペランド信号は、２入力セレクタ２１０を介して第１オペランドレジスタ２２０に記憶される。
【００２７】
第２オペランド制御部３００は、２入力セレクタ３１０と、第２オペランドレジスタ３２０と、から構成される。入力信号である第２オペランド信号は、２入力セレクタ３１０を介して第２オペランドレジスタ３２０に記憶される。
【００２８】
第１オペランドレジスタ２２０に記憶される第１オペランド信号は、第２オペランド制御部３００の２入力セレクタ３１０に出力される。また、第２オペランドレジスタ３２０に記憶される第２オペランド信号は、第１オペランド制御部２００の２入力セレクタ２１０に出力される。
【００２９】
すなわち、第１オペランド制御部２００の２入力セレクタ２１０は、一方の入力を第１オペランド信号とし、他方の入力を第２オペランド信号とする。また、第２オペランド制御部３００の２入力セレクタ３１０は、一方の入力を第２オペランド信号とし、他方の入力を第１オペランド信号とする。
【００３０】
演算部４００は、算術演算器４１０と、第１演算結果レジスタ４２０と、第２演算結果レジスタ４３０と、から構成される。算術演算器４１０は、ＯＰコードレジスタ１２０に記憶されるＯＰコード信号、第１オペランドレジスタ２２０と第２オペランドレジスタ３２０に記憶される二つのオペランド信号、を入力とし、ＯＰコード信号に基づいて演算処理を実行する。第１演算結果レジスタ４２０は、算術演算器４１０が出力した演算結果のデータを記憶し、第２演算結果レジスタ４３０は、第１演算結果レジスタ４２０が出力した演算結果のデータを記憶する。なお、算術演算器４１０が実行する演算処理は、加算、乗算、整数加算、整数乗算、浮動小数点加算、浮動小数点乗算等である。
【００３１】
ＮＯＰ検出部５００は、ＮＯＰ検出器５１０と、第１ＮＯＰレジスタ５２０と、第２ＮＯＰレジスタ５３０と、から構成される。ＮＯＰ検出器５１０は、一方の入力を入力信号であるＯＰコード信号とし、他方の入力をＯＰコードレジスタ１２０に記憶されるＯＰコード信号とする。ＮＯＰ検出器５１０が出力するＮＯＰ検出信号は、２入力セレクタ１１０、２１０、３１０の制御信号として出力される。第１ＮＯＰレジスタ５２０は、ＮＯＰ検出器５１０が出力したＮＯＰ検出信号が示す値を記憶する。第２ＮＯＰレジスタ５３０は、第１ＮＯＰレジスタ５２０が出力した値を記憶する。
【００３２】
ＮＯＰ検出器５１０は、一方の入力、すなわち入力信号であるＯＰコード信号が無効であり、他方の入力、すなわちＯＰコードレジスタ１２０に記憶されているＯＰコード信号が有効であるタイミングを検出する。すなわち、ＮＯＰ検出器５１０は、直前に演算命令が入力されており、かつ、現在演算命令が入力されていないタイミングを検出する。
【００３３】
エラー検出部６００は、比較器６１０と、論理積回路６２０と、から構成される。比較器６１０は、第１演算結果レジスタ４２０に記憶された演算結果のデータと、第２演算結果レジスタ４３０に記憶された演算結果のデータと、を比較する。論理積回路６２０は、第２ＮＯＰレジスタ５３０に記憶されるＮＯＰ検出信号が示す値と比較器６１０が出力した比較結果を示す値との論理積を出力する。この出力結果が、エラー検出信号となる。
【００３４】
以上が、演算装置１の詳細な構成である。
【００３５】
続いて、演算装置１の具体的な動作の一例について、タイミングチャートを参照して具体的に説明する。
【００３６】
図３に示すように、クロックサイクルＴ１では、有効な演算命令のＯＰコードＭＵＬ（乗算）と、その演算処理に対する第１オペランドＹ０と、第２オペランドＺ０と、が入力されている。
【００３７】
クロックサイクルＴ２では、有効な演算命令のＯＰコードＡＤＤ（加算）と、その演算処理に対する第１オペランドＹ１と、第２オペランドＺ１と、が入力されている。また、クロックサイクルＴ１で入力されたＯＰコードＭＵＬが、ＯＰコードレジスタ１２０に記憶され、第１オペランドＹ０が、第１オペランドレジスタ２２０に記憶され、第２オペランドＺ０が、第２オペランドレジスタ３２０に記憶されている。
【００３８】
クロックサイクルＴ３では、有効な演算命令が存在しないため、ＮＯＰ検出器５１０はＮＯＰ状態を検出している。また、クロックサイクルＴ１で入力された演算命令に対する演算処理が終了し、第１演算結果レジスタ４２０は、演算結果Ｘ０を記憶し、演算結果としてＸ０が出力されている。また、クロックサイクルＴ２で入力されたＯＰコードＡＤＤが、ＯＰコードレジスタ１２０に記憶され、第１オペランドＹ１が、第１オペランドレジスタ２２０に記憶され、第２オペランドＺ１が、第２オペランドレジスタ３２０に記憶されている。
【００３９】
クロックサイクルＴ４では、有効な演算命令のＯＰコードＡＤＤと、その演算処理に対する第１オペランドＹ２と、第２オペランドＺ２と、が入力されている。また、クロックサイクルＴ２で入力された演算命令に対する演算処理が終了し、第１演算結果レジスタ４２０は、演算結果Ｘ１を記憶し、演算結果としてＸ１が出力されている。このとき、第２演算結果レジスタ４３０は、クロックサイクルＴ１で入力された演算命令の演算結果Ｘ０を記憶している。クロックサイクルＴ４では、有効な演算命令が入力されているため、ＮＯＰ検出器５１０はＮＯＰ状態を検出しないが、第１ＮＯＰレジスタ５２０は、ＮＯＰ状態を示す値（例えば真）を記憶している。
【００４０】
ここで、クロックサイクルＴ３で出力されたＮＯＰ検出信号は、２入力セレクタ１１０、２１０、３１０に出力され、２入力セレクタ１１０、２１０、３１０は、入力信号を切り替える。すなわち、２入力セレクタ１１０は、ＯＰコードレジスタ１２０に記憶されているＯＰコードを入力とし、２入力セレクタ２１０は、第２オペランドレジスタ３２０に記憶されている第２オペランドを入力とし、２入力セレクタ３１０は、第１オペランドレジスタ２２０に記憶されている第１オペランドを入力とする。
【００４１】
このため、ＯＰコードレジスタ１２０は、クロックサイクルＴ３で記憶されたＯＰコードと同じＯＰコードＡＤＤを記憶し、第１オペランドレジスタ２２０は、クロックサイクルＴ３で第２オペランドレジスタ３２０に記憶された第２オペランドＺ１を記憶し、第２オペランドレジスタ３２０は、クロックサイクルＴ３で第１オペランドレジスタ２２０に記憶された第１オペランドＹ１を記憶する。
【００４２】
すなわち、クロックサイクルＴ４では、第１オペランドレジスタ２２０と第２オペランドレジスタ３２０に記憶されている値は、ＮＯＰ状態を検出したクロックサイクルＴ３で記憶されていた値をそれぞれ入れ替えたデータとなる。
【００４３】
なお、クロックサイクルＴ４では、ＮＯＰ状態を検出していないため、２入力セレクタ１１０、２１０、３１０の入力は元に戻る。
【００４４】
クロックサイクルＴ５では、有効な演算命令のＯＰコードＭＵＬと、その演算処理に対する第１オペランドＹ３と、第２オペランドＺ３と、が入力されている。また、ＯＰコードレジスタ１２０は、クロックサイクルＴ４で入力されたＯＰコードＡＤＤを記憶し、第１オペランドレジスタ２２０は、クロックサイクルＴ４で入力された第１オペランドＹ２を記憶し、第２オペランドレジスタ３２０は、クロックサイクルＴ４で入力された第２オペランドＺ２を記憶している。クロックサイクルＴ４で第１演算結果レジスタ４２０に記憶された演算結果Ｘ１は、第２演算結果レジスタ４３０に記憶されている。
【００４５】
また、クロックサイクルＴ５では、上述のようにクロックサイクルＴ４で入れ替えたオペランドの演算結果Ｘ１’が、第１演算結果レジスタ４２０に記憶されている。また、クロックサイクルＴ４で第１ＮＯＰレジスタ５２０に記憶されたＮＯＰ検出信号は、クロックサイクルＴ５では第２ＮＯＰレジスタ５３０に記憶されている。この第２ＮＯＰレジスタ５３０に記憶されているＮＯＰ検出信号は、比較器６１０のイネーブル信号となる。
【００４６】
比較器６１０は、第１演算結果レジスタ４２０に記憶されている演算結果Ｘ１’と、第２演算結果レジスタ４３０に記憶されている演算結果Ｘ１とを比較し、仮に両値が不一致であった場合、論理積回路６２０によるイネーブル化を経て、エラー検出信号が出力される。
【００４７】
このように、演算装置１は、有効な演算命令が入力されていないタイミングを検出して試験演算命令を実行し、以下の式で表される比較を行い、エラーの検出を行う。
Ｙｎ＋Ｚｎ＝Ｚｎ＋Ｙｎ
又は
Ｙｎ×Ｚｎ＝Ｚｎ×Ｙｎ
なお、Ｙｎ、Ｚｎは、ＮＯＰ状態を検出する直前のクロックサイクルにおけるオペランドである。
【００４８】
クロックサイクルＴ６以降は、上述のような動作を実行し、同様にエラーを検出する。
【００４９】
なお、ＮＯＰ検出時に入れ替えたデータに対する演算結果は、演算命令に対する出力結果ではないため、演算装置１の外部でこの値を無視する必要がある。また、演算装置１内にこのような値を無視する機構を配置することも可能である。
【００５０】
以上が、演算装置１の動作の一例である。
【００５１】
以上説明したように、本実施形態に係る演算装置１は、有効な命令がないタイミングを検出して直前の演算命令に対するオペランドを入れ替えて演算処理を実行することで、試験命令や試験データを限定することなくエラーを検出することができる。
【００５２】
また、本実施形態に係る演算装置１は、装置内に算術演算器４１０が一つしかない場合でも、演算器全体をエラー検出の対象とすることができ、エラー検出効果を高くすることができる。
【００５３】
また、本実施形態に係る演算装置１は、エラーを検出するための回路として、入力信号に対するセレクタ、演算結果を格納するレジスタ、演算結果を比較するための比較器、等を追加する程度であり、いずれも算術演算器４１０の外部への追加が可能であるため、算術演算器４１０内部のクリティカルパスに影響を与えない。よって、本実施形態に係る演算装置１は、回路規模や信号遅延等のインパクトを小さくすることができる。
【００５４】
［第２実施形態］
本実施形態に係る演算装置２は、図４に示すように、第１実施形態に係る演算装置１の構成に加え、減算検出部７００と、符号反転部８００と、否定部９００と、を更に備える。演算装置２は、第１実施形態に係る演算装置１が検出できるエラーに加え、整数減算や浮動小数点減算等の演算処理に対してもエラーを検出することができ、さらに試験演算結果のデータをマスクすることができる。なお、第１実施形態に係る演算装置１と同様の機能を実現する要素については、同一の符号を付し、説明を省略する。
【００５５】
減算検出部７００は、命令制御部１００から出力したＯＰコード信号を受信し、ＯＰコード信号が減算命令であるか否かを検出する。減算検出部７００は、減算検出信号を符号反転部８００に出力する。
【００５６】
符号反転部８００は、減算検出部７００が出力した減算検出信号と演算部４００が出力した演算結果のデータを受信し、受信した減算検出信号が減算を示している場合、すなわち、ＯＰコード信号が減算命令であった場合、演算結果のデータの符号を反転させる。符号反転部８００は、符号反転後の演算結果のデータをエラー検出部６００に出力する。
【００５７】
なお、符号反転とは、整数減算の場合は２の補数を求める処理のことであり、浮動小数点減算の場合は最上位ビットである符号ビットを反転させる処理のことである。
【００５８】
否定部９００は、ＮＯＰ検出部５００が出力したＮＯＰ検出信号を否定し、エラー検出部６００に出力する。ＮＯＰ検出信号の否定とは、ＮＯＰ検出信号が示す値を反転することである。例えば、検出信号が１（真）を示す場合、否定部９００は、０（偽）として出力し、検出信号が０（偽）を示す場合、否定部９００は、１（真）として出力する。この出力は、試験演算結果の出力をマスクする際に用いられる。
【００５９】
以上が、演算装置２の構成である。
【００６０】
続いて、演算装置２の詳細な構成の一例について説明する。
【００６１】
減算検出部７００は、図５に示すように、減算検出器７１０と、減算レジスタ７２０と、から構成される。減算検出器７１０は、ＯＰコードレジスタ１２０に記憶されているＯＰコードを受信し、受信したＯＰコードが減算命令であるか否かを示す減算検出信号を減算レジスタ７２０に記憶する。減算レジスタ７２０に記憶された減算検出信号が示す値は、符号反転器８１０に出力される。
【００６２】
符号反転部８００は、符号反転器８１０から構成され、減算レジスタ７２０に記憶された減算検出信号と第１演算結果レジスタ４２０に記憶された演算結果のデータを受信する。符号反転器８１０は、減算レジスタ７２０に記憶された減算検出信号が減算命令であることを示す値であった場合、受信した演算結果のデータの符号を反転し、符号反転した演算結果のデータを第２演算結果レジスタ４３０に記憶する。
【００６３】
否定部９００は、ＮＯＴゲート９１０から構成される。ＮＯＴゲート９１０は、第２ＮＯＰレジスタ５３０に記憶されたＮＯＰ検出信号を受信し、受信したＮＯＰ検出信号を否定して論理積回路６３０に出力する。論理積回路６３０は、ＮＯＴゲート９１０が出力した否定信号と第１演算結果レジスタ４２０が記憶した演算結果を示すデータを受信し、両値の論理積を出力する。このため、第２ＮＯＰレジスタ５３０にＮＯＰを示す値が記憶されている場合、その値が否定されて論理積が求められるため、試験演算命令の演算結果をマスクすることができる。
【００６４】
以上が、演算装置２の詳細な構成の一例である。
【００６５】
続いて、演算装置２の動作の一例について、タイミングチャートを参照して具体的に説明する。
【００６６】
図６に示すように、クロックサイクルＴ２では、有効な演算命令であるＯＰコードＳＵＢ（減算）と、その演算処理に対する第１オペランドＹ１と、第２オペランドＺ１と、が入力されている。また、クロックサイクルＴ３では、有効な演算命令が入力されず、ＮＯＰ検出器５１０は、ＮＯＰを検出している。このため、第１実施形態と同様に、クロックサイクルＴ３では、クロックサイクルＴ２で入力されたオペランドを入れ替えて試験演算命令を実行している。
【００６７】
クロックサイクルＴ３では、減算検出器７１０は、ＯＰコードが減算命令であることを示す減算検出信号を出力し、減算レジスタ７２０に記憶している。これと同時に、ＮＯＰ検出器５１０も、ＮＯＰ検出信号を出力し、クロックサイクルＴ４で第１ＮＯＰレジスタ５２０に記憶されている。また、クロックサイクルＴ４では、第１演算結果レジスタ４２０に、クロックサイクルＴ２で入力されたオペランドＹ１、Ｚ１の減算命令に対する演算結果Ｘ１が記憶されている。
【００６８】
クロックサイクルＴ４では、減算レジスタ７２０にＯＰコードが減算命令であることを示す値が記憶されているため、符号反転器８１０は、第１演算結果レジスタ４２０の出力（Ｘ１）に対して符号反転処理を実行する。よって、クロックサイクルＴ５では、符号反転器８１０は、符号反転させた演算結果Ｘ１を、第２演算結果レジスタ４３０に記憶する。また、第１演算結果レジスタ４２０は、クロックサイクルＴ２で入れ替えられたオペランドに対する演算結果Ｘ１’を記憶する。
【００６９】
クロックサイクルＴ５では、比較器６１０は、第１演算結果レジスタ４２０が記憶している演算結果Ｘ１’と、第２演算結果レジスタ４３０が記憶している符号反転させた演算結果とを比較する。論理積回路６２０は、比較結果のデータと第２ＮＯＰレジスタ５３０が出力するＮＯＰ検出信号との論理積を求め、これをエラー検出信号として出力する。
【００７０】
クロックサイクルＴ５では、論理積回路６３０は、第１演算結果レジスタ４２０が出力するデータと、第２ＮＯＰレジスタ５３０が出力する否定データとの論理積を求める。すなわち、クロックサイクルＴ５では、第２ＮＯＰレジスタ５３０はＮＯＰ状態を示す値を記憶しているため、論理積回路６３０によって試験演算結果Ｘ１’がマスクされる。第２ＮＯＰレジスタ５３０は、演算装置２が試験演算処理を実行するタイミングのみでＮＯＰ状態を示す値を記憶している。このため、試験演算結果はマスクされるが、通常の演算結果はマスクされることはない。
【００７１】
このように、演算装置２は、第１実施形態と同様に、有効な演算命令が入力されていないタイミングを検出して試験演算命令を実行し、第１実施形態に加え、以下の式で表される比較を行い、エラーの検出を行う。
Ｙｎ−Ｚｎ＝Ｚｎ−Ｙｎ
なお、Ｙｎ、Ｚｎは、ＮＯＰ状態を検出する直前のクロックサイクルにおけるオペランドである。
【００７２】
クロックサイクルＴ６以降も、上述のような動作を実行し、同様にエラーを検出する。
【００７３】
以上が、演算装置２の動作の一例である。
【００７４】
以上説明したように、本実施形態に係る演算装置２は、第１実施形態に係る演算装置１が奏する効果に加え、整数減算や浮動小数点減算に対してもエラーを検出することが可能であり、更に、試験演算命令に対する演算結果をマスクすることができる。
【００７５】
演算装置２内で試験演算命令に対する演算結果をマスクすることができるため、外部装置でこのような試験演算命令に対する演算結果を考慮する必要がない。
【００７６】
［第３実施形態］
本実施形態に係る演算装置３は、図７に示すように、第１実施形態に係る演算装置１の構成と同様であるが、詳細な構成が異なり、算術演算器４１０が３Ｔのパイプライン構造となっている。なお、第１実施形態に係る演算装置１と同様の機能を実現する要素については、同一の符号を付し、説明を省略する。
【００７７】
算術演算器４１０は、内部に第１パイプラインレジスタ４４０と、第２パイプラインレジスタ４５０と、を備える。
【００７８】
このような構成の場合、ＮＯＰ検出信号を記憶するレジスタの段数を、パイプラインの段数と合わせれば良い。よって、ＮＯＰ検出部５００は、第３ＮＯＰレジスタ５４０と、第４ＮＯＰレジスタ５５０と、を更に備える。
【００７９】
以上が、演算装置３の詳細な構成の一例である。
【００８０】
続いて、演算装置３の動作の一例について、タイミングチャートを参照して具体的に説明する。
【００８１】
図８に示すように、クロックサイクルＴ２では、有効な演算命令であるＯＰコードＡＤＤと、その演算命令に対する第１オペランドＹ１と、第２オペランドＺ１と、が入力される。また、クロックサイクルＴ３では、有効な命令が存在していない。クロックサイクルＴ３では、第１オペランドＹ１と第２オペランドＺ１に対する演算処理が実行されるが、算術演算器４１０がパイプライン構造であるため、演算結果Ｘ１は、クロックサイクルＴ６で第１演算結果レジスタ４２０に記憶される。その後、演算結果Ｘ１は、クロックサイクルＴ７で第２演算結果レジスタ４３０に記憶され、オペランドを入れ替えた演算結果Ｘ１’との比較が行われる。
【００８２】
クロックサイクルＴ３では、有効な演算命令が入力されなかったため、ＮＯＰ検出器５１０は、ＮＯＰ検出信号を出力する。これにより、クロックサイクルＴ４では、第１ＮＯＰレジスタ５２０は、ＮＯＰを示す値を記憶する。第２ＮＯＰレジスタ５３０は、クロックサイクルＴ５にて、第１ＮＯＰレジスタが記憶している値を記憶する。第３ＮＯＰレジスタ５４０、第４ＮＯＰレジスタ５５０も同様に、クロックサイクルを１つずつずらしてＮＯＰ状態を示す値が記憶される。
【００８３】
ＮＯＰ状態を示す値を記憶するレジスタを多段構成にすることで、最後の第４ＮＯＰレジスタ５５０は、演算結果を比較するタイミングと同じタイミングでイネーブル信号を出力することができ、エラー検出部６００は、エラーを検出することができる。
【００８４】
このように、演算装置３は、第１実施形態と同様に、算術演算器４１０がパイプライン構成であっても、有効な演算命令が入力されていないタイミングを検出して試験演算命令を実行することができる。
【００８５】
クロックサイクルＴ６以降も、上述のような動作を実行し、同様にエラーを検出する。
【００８６】
以上が、演算装置３の動作の一例である。
【００８７】
以上説明したように、本実施形態に係る演算装置３は、第１実施形態に係る演算装置１が奏する効果に加え、算術演算器４１０がパイプライン構成であっても、エラーを検出することができる。
【００８８】
［変形例］
本発明は、上記実施形態に限定されず、種々の変形例及び応用が可能である。上記実施形態では、デジタル回路で構成される演算装置について説明したが、これに限られず、コンピュータで構成することも可能である。
【００８９】
この場合、コンピュータで構成される演算装置４は、図９に示すように、制御部１１と、主記憶部１２と、外部記憶部１３と、操作部１４と、表示部１５と、送受信部１６と、から構成される。主記憶部１２と、外部記憶部１３と、操作部１４と、表示部１５と、送受信部１６とは、いずれも内部バス１０を介して制御部１１と接続している。
【００９０】
送受信部１６は、シリアルインタフェースまたはＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インタフェース等から構成されている。送受信部１６は、シリアルインタフェースやネットワークを介して送信された情報等を受信する。また、送受信部１６は、受信した情報等を、制御部１１に供給する。
【００９１】
外部記憶部１３は、フラッシュメモリ、ハードディスク、ＤＶＤ−ＲＡＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＶＤ−ＲＷ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  ＲｅＷｒｉｔａｂｌｅ）等の不揮発性メモリから構成され、各処理を制御部１１に行わせるためのプログラム１９を予め記憶し、また、制御部１１の指示に従って、外部記憶部１３が記憶するデータを制御部１１に供給し、制御部１１から供給されたデータを記憶する。
【００９２】
主記憶部１２は、ＲＡＭ（Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等から構成され、外部記憶部１３に記憶されているプログラム１９を読み込み、さらに制御部１１の作業領域としても使用される。
【００９３】
制御部１１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等から構成され、外部記憶部１３に記憶されているプログラム１９に従って、後述する各処理を実行する。
【００９４】
操作部１４は、キーボードやマウス、操作キーやタッチパネルなどの入力デバイス等と、入力デバイス等を内部バス１０に接続するインタフェース装置から構成されている。操作部１４は、ユーザの指示を処理する機能を備え、ユーザの操作によって入力されたデータを制御部１１に供給する。
【００９５】
表示部１５は、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）または有機ＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ）等から構成されている。表示部１５は、各データや情報等を表示する。
【００９６】
上述のような一般的な情報処理装置に命令制御部１００、第１オペランド制御部２００、第２オペランド制御部３００、演算部４００、ＮＯＰ検出部５００、エラー検出部６００、減算検出部７００、符号反転部８００、否定部９００、の各処理を実行させることで、演算装置４は、上述の各実施形態に係る演算装置１〜３と同等の機能、効果を実現することができる。
【００９７】
なお、本発明は、本発明の広義の趣旨及び範囲を逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施形態ではなく、特許請求の範囲によって示される。そして、特許請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
【００９８】
上記実施形態の一部又は全ては、以下の付記のようにも記載されうるが、以下には限られない。
【００９９】
（付記１）
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、演算命令を示すＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御部と、
前記ＮＯＰ検出部が出力した前記制御信号に従って、被演算データを示すオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御部と、
前記命令制御部が出力した前記ＯＰコード信号が示す演算命令に従って、前記オペランド制御部が出力した前記オペランド信号が示す被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算部と、
前記演算部が出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出部と、を備える、
ことを特徴とする演算装置。
【０１００】
（付記２）
前記命令制御部は、前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記ＯＰコード信号を前記演算部に出力し、
前記オペランド制御部は、前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記オペランド信号を前記演算部に出力し、
前記エラー検出部は、前記演算部が直前に求めた前記演算結果データと前記ＮＯＰ状態を検出した際に求めた前記演算結果データとを比較し、それぞれが異なる場合にエラーが発生したと判断する、
ことを特徴とする付記１に記載の演算装置。
【０１０１】
（付記３）
前記オペランド制御部は、第１オペランド制御部と、第２オペランド制御部と、を備え、
前記第１オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第１オペランド信号を前記第２オペランド制御部に出力し、前記第２オペランド制御部が出力した第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出していない場合、前記第２オペランド信号を受信し、受信した前記第２オペランド信号を前記演算部に出力し、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した場合、直前に受信した前記第２オペランド信号を前記第１オペランド制御部に出力し、前記第１オペランド制御部が出力した前記第１オペランド信号を受信し、受信した前記第１オペランド信号を前記演算部に出力する、
ことを特徴とする付記１又は２に記載の演算装置。
【０１０２】
（付記４）
前記ＮＯＰ検出部は、前記ＮＯＰ状態を検出したことを示すＮＯＰ検出信号を前記エラー検出部に出力し、
前記エラー検出部は、前記ＮＯＰ検出信号を受信し、前記ＮＯＰ検出信号が前記ＮＯＰ状態を示している場合、かつ、エラーが発生したと判別した場合、エラーが発生したことを示すエラー検出信号を出力する、
ことを特徴とする付記１乃至３のいずれか１つに記載の演算装置。
【０１０３】
（付記５）
前記ＯＰコード信号が減算命令を示しているか否かを検出する減算検出部と、
前記演算部が求めた前記演算結果データの符号を反転させる符号反転部と、を更に備え、
前記符号反転部は、前記減算検出部が前記減算命令を検出した場合、前記演算部が求めた前記演算結果データの符号を反転し、
前記エラー検出部は、前記演算部が求めた前記演算結果データと、前記符号反転部が符号を反転した前記演算結果データとを比較する、
ことを特徴とする付記１乃至４のいずれか１つに記載の演算装置。
【０１０４】
（付記６）
前記ＮＯＰ検出部が出力した前記ＮＯＰ検出信号を否定する否定部をさらに備え、
前記否定部は、否定した前記ＮＯＰ検出信号を前記エラー検出部に出力し、
前記エラー検出部は、前記演算部が求めた前記演算結果データと前記否定部が否定して出力した前記ＮＯＰ検出信号が示す値との論理積を求め、求めた前記論理積を前記演算結果データとして出力する、
ことを特徴とする付記１乃至５のいずれか１つに記載に演算装置。
【０１０５】
（付記７）
前記演算部は、パイプライン構成であり、
前記ＮＯＰ検出部は、前記ＮＯＰ検出信号が示す値を記憶する記憶部を前記パイプラインの段数に従った数備える、
ことを特徴とする付記１乃至６のいずれか１つに記載の演算装置。
【０１０６】
（付記８）
前記命令制御部は、受信した前記ＯＰコード信号を記憶するＯＰコード記憶部を備え、
前記第１オペランド制御部は、受信した前記オペランド信号を記憶する第１オペランド記憶部を備え、
前記第２オペランド制御部は、受信した前記オペランド信号を記憶する第２オペランド記憶部を備え、
前記ＮＯＰ検出部は、前記ＮＯＰ検出信号を記憶する第１ＮＯＰ記憶部と、前記第１ＮＯＰ記憶部が記憶している前記ＮＯＰ検出信号を記憶する第２ＮＯＰ記憶部と、を備え、
前記演算部は、前記演算結果データを記憶する第１演算結果記憶部と、前記第１演算結果記憶部が記憶している前記演算結果データを記憶する第２演算結果記憶部と、を備え、
前記ＮＯＰ検出部が前記ＮＯＰ状態を検出した第１のクロックサイクルにおいて、
前記ＮＯＰ検出部は、前記第１ＮＯＰ記憶部に前記ＮＯＰ検出信号を記憶し、前記制御信号を前記命令制御部と前記第１オペランド制御部及び前記第２オペランド制御部に出力し、
前記命令制御部は、直前に受信した前記ＯＰコード信号を前記ＯＰコード記憶部に記憶し、前記ＯＰコード記憶部に記憶された前記ＯＰコード信号を前記演算部に出力し、
前記第１オペランド制御部は、前記第２オペランド制御部から受信した前記第２オペランド信号を前記第１オペランド記憶部に記憶し、前記第１オペランド記憶部に記憶された前記第２オペランド信号を前記演算部に出力し、
前記第２オペランド制御部は、前記第１オペランド制御部から受信した前記第１オペランド信号を前記第２オペランド記憶部に記憶し、前記第２オペランド記憶部に記憶された前記第１オペランド信号を前記演算部に出力し、
前記演算部は、求めた前記演算結果データを前記第１演算結果記憶部に記憶する、
ことを特徴とする付記３に記載の演算装置。
【０１０７】
（付記９）
前記第１のクロックサイクルの次の第２のクロックサイクルにおいて、
前記ＮＯＰ検出部は、前記第１ＮＯＰ記憶部に記憶された前記ＮＯＰ検出信号を前記第２ＮＯＰ記憶部に記憶し、前記第２ＮＯＰ記憶部に記憶された前記ＮＯＰ検出信号を前記エラー検出部に出力し、
前記演算部は、前記第１演算結果記憶部に記憶された前記演算結果データを前記第２演算結果記憶部に記憶し、前記命令制御部と前記第１オペランド制御部及び前記第２オペランド制御部の出力信号に従って試験演算結果データを求め、求めた前記試験演算結果データを前記第１演算結果記憶部に記憶し、前記第１演算結果記憶部に記憶された前記試験演算結果データと前記第２演算結果記憶部に記憶された前記演算結果データを前記エラー検出部に出力し、
前記エラー検出部は、前記演算部が出力した前記試験演算結果データと前記演算結果データとを比較し、両者が異なる値である場合、かつ、前記ＮＯＰ検出部が出力した前記ＮＯＰ検出信号が前記ＮＯＰ状態を示している場合、前記エラー検出信号を出力する、
ことを特徴とする付記８に記載の演算装置。
【０１０８】
（付記１０）
演算装置に有効な演算命令が入力されていないＮＯＰ状態の検出に従って、受信する入力信号を制御する制御信号を出力するＮＯＰ検出ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、演算命令を示すＯＰコード信号を受信し、受信した前記ＯＰコード信号を出力する命令制御ステップと、
前記ＮＯＰ検出ステップで出力した前記制御信号に従って、被演算データを示すオペランド信号を受信し、受信した前記オペランド信号を出力するオペランド制御ステップと、
前記命令制御ステップで出力した前記ＯＰコード信号が示す演算命令に従って、前記オペランド制御ステップで出力した前記オペランド信号が示す被演算データに対する演算処理を実行し、求めた演算結果データを出力する演算ステップと、
前記演算ステップで出力した前記演算結果データに基づいて、エラーが発生したか否かを判別するエラー検出ステップと、を備える、
ことを特徴とするエラー検出方法。
【符号の説明】
【０１０９】
１、２、３、４  演算装置
１００    命令制御部
２００    第１オペランド制御部
３００    第２オペランド制御部
４００    演算部
５００    ＮＯＰ検出部
６００    エラー検出部
７００    減算検出部
８００    符号反転部
９００    否定部
１１０、２１０、３１０  ２入力セレクタ
１２０    ＯＰコードレジスタ
２２０    第１オペランドレジスタ
３２０    第２オペランドレジスタ
４１０    算術演算器
４２０    第１演算結果レジスタ
４３０    第２演算結果レジスタ
４４０    第１パイプラインレジスタ
４５０    第２パイプラインレジスタ
５１０    ＮＯＰ検出器
５２０    第１ＮＯＰレジスタ
５３０    第２ＮＯＰレジスタ
５４０    第３ＮＯＰレジスタ
５５０    第４ＮＯＰレジスタ
６１０    比較器
６２０、６３０  論理積回路
７１０    減算検出器
７２０    減算レジスタ
８１０    符号反転器
９１０    ＮＯＴゲート
１０      内部バス
１１      制御部
１２      主記憶部
１３      外部記憶部
１４      操作部
１５      表示部
１６      送受信部
１９      プログラム
【図１】
0005732933.tif 000002
【図２】
0005732933.tif 000003
【図３】
0005732933.tif 000004
【図４】
0005732933.tif 000005
【図５】
0005732933.tif 000006
【図６】
0005732933.tif 000007
【図７】
0005732933.tif 000008
【図８】
0005732933.tif 000009
【図９】
0005732933.tif 000010