JP7480595B2 - 半導体装置 - Google Patents

半導体装置 Download PDF

Info

Publication number
JP7480595B2
JP7480595B2 JP2020097824A JP2020097824A JP7480595B2 JP 7480595 B2 JP7480595 B2 JP 7480595B2 JP 2020097824 A JP2020097824 A JP 2020097824A JP 2020097824 A JP2020097824 A JP 2020097824A JP 7480595 B2 JP7480595 B2 JP 7480595B2
Authority
JP
Japan
Prior art keywords
instruction
error
control unit
entry
error signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020097824A
Other languages
English (en)
Other versions
JP2021190018A (ja
Inventor
雄平 高田
志郎 鴨志田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2020097824A priority Critical patent/JP7480595B2/ja
Priority to US17/203,000 priority patent/US11842192B2/en
Publication of JP2021190018A publication Critical patent/JP2021190018A/ja
Application granted granted Critical
Publication of JP7480595B2 publication Critical patent/JP7480595B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Retry When Errors Occur (AREA)

Description

本発明は、半導体装置に関する。
プロセッサと、プロセッサから順次発行されるトランザクションを入れ替えるアウトオブオーダ処理を実行するトランザクション制御部とを有する情報処理装置が知られている。トランザクション制御部は、トランザクションの処理中に障害が発生した場合、コヒーレンシを維持するために、処理中のトランザクションのリトライとともに他のトランザクションのリトライ処理の要否を判定する(例えば、特許文献1参照)。
特開2007-148467号公報
ところで、プロセッサ等の半導体装置の演算器では、命令の実行時にソフトエラー、伝搬遅延時間の増加またはハードウェアの故障などにより、演算中のデータのビット値が反転する可能性がある。演算器は、ビット値の反転(エラー)を検出した場合、演算器に命令を発行した命令制御部にエラーを通知する。例えば、演算器は、エラーを検出したサイクルを示す情報とともにエラーを命令制御部に通知する。
命令制御部は、リトライ可能なサイクルを示す情報を受信した、演算器に命令を再発行し、命令をリトライさせる。これにより、例えば、ソフトエラーまたは電源電圧の一時的な低下によるフリップフロップ間の伝搬遅延時間の増加等に起因して過渡的に発生したエラーがキャンセルされる。一方、命令制御部は、リトライ不可能なサイクルを示す情報を受信した場合、命令を再発行せず、半導体装置を管理する上位の管理装置にエラーの発生を通知する。管理装置は、エラーの通知に基づいて半導体装置の故障を検出し、例えば、半導体装置の動作を停止する。
例えば、命令制御部は、命令をアウトオブオーダで演算器に発行し、演算器により実行された命令をインオーダでコミットする。アウトオブオーダによる命令の発行制御では、リトライ不可能と判定されたエラーを発生させた命令のコミットが他の命令の実行の完了まで待たされる場合、命令のリトライが可能になる場合がある。しかしながら、コミットの順序を考慮せずに、エラーを検出したサイクルに応じてリトライ可能か否かを判定するアーキテクチャでは、リトライ不可能と判定された命令はリトライされず、管理装置にエラーが通知されてしまう。このように、アウトオブオーダ実行時のコミットの順序の入れ替えによりリトライ可能になる命令がリトライ不可能と判定される場合、半導体装置の処理性能および信頼性が低下し、半導体装置を含むシステムの処理性能および信頼性が低下する。
1つの側面では、本発明は、リトライ可能な命令がリトライ不可能と判定されることを抑止することを目的とする。
一つの観点によれば、半導体装置は、命令をアウトオブオーダで発行する命令発行部と、前記命令発行部が発行した命令を実行する演算部と、実行が完了した命令をインオーダでコミットするコミット制御部と、前記演算部により検出されたエラーの検出サイクルをそれぞれ示す複数のエラー信号を前記演算部から前記コミット制御部にそれぞれ伝達する複数のエラー信号線と、を有し、前記コミット制御部は、命令毎に命令の完了からのサイクル数をカウントし、前記エラー信号の受信時に、コミットしていない命令のうち、前記複数のエラー信号線を介して受けたエラー信号が示す前記検出サイクルと同じカウント値の命令をリトライ可能と判定する。
1つの側面では、本発明は、リトライ可能な命令がリトライ不可能と判定されることを抑止することができる。
一実施形態における半導体装置の一例を示すブロック図である。 図1のエントリバッファの一例を示す説明図である。 図1のパイプラインの実行サイクルの一例を示す説明図である。 図1のCPUの動作の一例をエントリバッファの状態遷移として示す説明図である。 別の実施形態における半導体装置の一例を示すブロック図である。 図5のエントリ判定テーブルの一例を示す説明図である。 図5のエントリバッファの一例を示す説明図である。 図5のCPUの動作の一例をエントリバッファの状態遷移として示す説明図である。 図5のCPUの動作の別の例をエントリバッファの状態遷移として示す説明図である。 図5のCPUの動作のさらなる別の例をエントリバッファの状態遷移として示す説明図である。 図5のCPUの動作の別の例をエントリバッファの状態遷移として示す説明図である。 図5のCPUの動作の別の例をエントリバッファの状態遷移として示す説明図である。 図5のCPUのサイクル毎の動作の一例を示すフロー図である。 図13の続きを示すフロー図である。 他の半導体装置の一例(比較例)を示すブロック図である。 図15のCPUのサイクル毎の動作の一例を示すフロー図である。 図16の続きを示すフロー図である。
以下、図面を用いて実施形態が説明される。以下では、信号等の情報が伝達される信号線には、信号名と同じ符号を使用する。
図1は、一実施形態における半導体装置の一例を示す。図1に示す半導体装置100は、例えば、CPU(Central Processing Unit)等のプロセッサであり、メインメモリ等のメモリ200とともにシステムSYSに搭載される。以下では、半導体装置100をCPU100とも称する。CPU100は、命令制御部10、演算制御部20およびキャッシュ制御部30を有する。なお、CPU100は、命令をデコードする命令デコーダを有するが、図示を省略する。
命令制御部10は、リザベーションステーション11、コミット制御部12およびエントリ判定テーブル14を有する。演算制御部20は、実行制御部21、レジスタファイル22、複数のオペランドレジスタOP(OP1~OP3)、演算器23およびリオーダバッファ24を有する。キャッシュ制御部30は、キャッシュ31を有する。演算器23と命令制御部10(コミット制御部12)との間には、完了信号線CMPLおよびエラー信号線REU、REUT、REUT2が配線される。
リザベーションステーション11は、命令デコーダによりデコードされた順に命令を保持する複数のエントリ(図示せず)を有する。リザベーションステーション11は、エントリに保持した命令を、実行可能な順にアウトオブオーダで実行制御部21に出力する。リザベーションステーション11は、命令発行部の一例である。
コミット制御部12は、演算制御部20により実行が終了した命令を示す情報を保持する複数のエントリを含むエントリバッファ13を有する。コミット制御部12は、アウトオブオーダで実行が終了した命令をインオーダでコミットする制御を実行する。コミット制御部12は、コミットする命令を示すライトイネーブル信号WEをリオーダバッファ24に出力し、リオーダバッファ24が保持する演算結果RSLTをレジスタファイル22に転送する。ここで、命令のコミットとは、命令制御部10により演算結果RSLTがレジスタファイル22に転送され、命令が完了されることである。エントリバッファ13は、保持部の一例である。エントリバッファ13の例は、図2に示す。
エントリ判定テーブル14は、演算器23がエラーを検出した場合にエラー信号線REUT、REUT2のいずれかに出力するエラー信号REUT、REUT2に対応して"1"、"2"のカウント値CNT(固定値)をそれぞれ保持する。エントリ判定テーブル14が保持するカウント値CNTは、エラーが検出された検出サイクル(命令の実行完了からのサイクル数)を示す。エラー信号REUT、REUT2については、図3で説明する。
演算制御部20において、実行制御部21は、リザベーションステーション11から供給される命令を投入する演算器23を決定するとともに、レジスタファイル22において演算に使用するレジスタを決定する。そして、実行制御部21は、オペランドレジスタOPと演算器23とを含むパイプラインPLに命令を投入する。パイプラインPLは、図3に示すように、複数の実行サイクルを使用して命令を実行する。
レジスタファイル22は、演算に使用するデータ(オペランド)および演算結果を保持する複数のレジスタを有する。レジスタファイル22が保持するオペランドは、キャッシュ31から転送され、レジスタファイル22が保持する演算結果は、キャッシュ31に転送される。キャッシュ31は、メモリ200が保持するデータの一部を記憶する。演算器23で演算するデータがキャッシュ31に格納されている場合(キャッシュヒット)、キャッシュ31から読み出されるデータがレジスタファイル22に転送される。一方、演算器23で演算するデータがキャッシュ31に格納されていない場合(キャッシュミス)、メモリ200からキャッシュ31に読み出されるデータがレジスタファイル22に転送される。
演算器23は、オペランドレジスタOPに保持されたオペランドを使用して演算を実行する。演算器23は、演算の完了に基づいて完了信号CMPLを、完了信号線CMPLを介して命令制御部10に出力し、演算結果RSLTをリオーダバッファ24に格納する。図3で説明するように、演算器23は、演算の実行時にエラーを検出した場合、エラーを検出した実行サイクルを示すエラー信号REU(またはREUT、REUT2)を、エラー信号線REU(またはREUT、REUT2)を介して命令制御部10に出力する。
例えば、演算器23は、演算中にデータのビット値の反転(期待値と異なる論理値)を検出した場合、エラーを検出する。演算器23は、リザベーションステーション11が発行した命令を実行する演算部の一例である。なお、図1では、1つの演算器23のみを示すが、演算制御部20は、複数の演算器23を有してもよく、複数種の演算器23を有してもよい。また、演算器23に供給されるオペランドは、3つに限定されない。
リオーダバッファ24は、命令がコミットするまでの間、演算結果RSLTを一時的に保持する複数のエントリを有する。リオーダバッファ24は、コミット制御部12からのライトイネーブル信号WEに基づいて、コミット対象の演算結果RSLTをレジスタファイル22に格納する。
キャッシュ制御部30は、実行制御部21による指示に基づいて、キャッシュ31からレジスタファイル22にオペランドを転送し、または、レジスタファイル22からキャッシュ31に演算結果RSLTを転送する。キャッシュ制御部30は、演算に使用するデータがキャッシュ31にない場合、メモリ200からデータを読み出し、読み出したデータをキャッシュ31に格納するとともに、レジスタファイル22に転送する。なお、キャッシュ31は、データだけでなく命令を保持してよい。また、CPU100は、キャッシュ制御部30およびキャッシュ31を持たず、メモリ200に直接接続されてもよい。
図2は、図1のエントリバッファ13の一例を示す。エントリバッファ13は、エラーフラグEFLG、カウント領域CNTおよび命令情報領域INSTを保持する複数のエントリENTを有する。エラーフラグEFLGは、エラー情報の一例である。以下では、カウント領域CNTに格納される値をカウント値CNTとも称し、命令情報領域INSTに格納される情報を命令情報INSTまたは命令とも称する。
コミット制御部12は、完了信号CMPLを受信した場合、完了信号CMPLに対応する命令を示す命令情報INSTをエントリENTのいずれかに格納する。また、コミット制御部12は、命令情報INSTを格納したエントリENTのカウント領域CNTを"0"にリセットする。以下では、カウント領域CNTが保持する値をカウント値CNTとも称する。コミット制御部12は、"0"にリセットしたカウント値CNTを、パイプラインPLの1サイクルが経過する毎に更新(例えば、インクリメント)する。なお、コミット制御部12は、リザベーションステーション11が演算制御部20に投入した命令の投入順を把握しており、完了信号CMPLに対応する命令(演算の実行が完了した命令)を識別できる。以下では、命令を示す情報を命令情報INSTとも称する。
コミット制御部12は、演算器23から完了信号CMPLとともにエラー信号REUを受信した場合、完了信号CMPLにより演算の実行が完了した命令にエラーが発生したと判定する。この場合、コミット制御部12は、エラーが発生した命令を示す命令情報INSTを格納したエントリENTのエラーフラグEFLGを、例えば"1"にセットする。
コミット制御部12は、エラー信号REUT(またはREUT2)を受信した場合、エントリ判定テーブル14を参照し、エラー信号REUT(またはREUT2)に対応するカウント値CNTを読み出す。コミット制御部12は、読み出したカウント値CNTを保持するエントリENTのエラーフラグEFLGをセットする。そして、コミット制御部12は、エラーフラグEFLGをセットしたエントリENTが保持する命令情報INSTを、エラーが発生した命令と判定する。エラーが発生した命令を、エントリ判定テーブル14を使用して判定する方法は、図3で説明する。
なお、コミット制御部12は、エントリ判定テーブル14から読み出したカウント値CNTを保持するエントリENTがエントリバッファ13に存在しない場合、リトライ不可能なエラー(ノンリトライエラー)が演算器23で発生したことを検出する。この場合、コミット制御部12は、CPU100を管理する管理装置にエラーERRを通知する。
図3は、図1のパイプラインPLの実行サイクルの一例を示す。パイプラインPLは、実行順にバッファサイクルB、所定数の実行サイクルX(X1、X2、...)、および複数のアップデートサイクルU、UT、UT2、...を有する。各サイクルB、X、U、UT、UT2、...は、1クロックサイクルで完了する。
Bサイクルでは、レジスタファイル22からパイプラインPLにオペランドが読み出される。X(X1、X2、...)サイクルでは、演算器23により演算が実行される。Xサイクルの数は、演算器23の種類および命令の種類に応じて異なり、複雑な演算を実行する命令ほど、Xサイクルの数が多い。
Uサイクルは、演算器23による演算の完了を示し、完了信号CMPLが出力され、演算器23による演算結果RSLTがリオーダバッファ24に出力される。演算器23は、Uサイクルが完了するまでにエラーを検出した場合、Uサイクルでエラー信号REUを出力し、リトライ可能なエラーの発生を命令制御部10に通知する。このため、演算器23は、例えば、Xサイクル(X1またはX2等)で検出したエラーをUサイクルまで保持する。
上述したように、コミット制御部12は、リザベーションステーション11が演算制御部20に投入した命令の投入順を把握しており、完了信号CMPLに対応する命令を識別可能である。このため、コミット制御部12は、完了信号CMPLとともにエラー信号REUを受信した場合、エントリバッファ13において、完了信号CMPLに対応する命令情報INSTを格納するエントリENTのエラーフラグEFLGをセットする。このとき、コミット制御部12は、エントリ判定テーブル14を参照しない。
UTサイクルは、命令制御部10による各命令の最速のコミットタイミングである。例えば、他の命令との間で依存性がない命令は、UTサイクルでコミットされる。演算器23は、UTサイクルでエラーを検出した場合、エラー信号REUTを出力することで、リトライ可能なエラーの発生を命令制御部10に通知する。
コミット制御部12は、演算器23からエラー信号REUTを受信した場合、エントリ判定テーブル14を参照し、エラー信号REUTに対応してエントリ判定テーブル14が保持するカウント値CNT(="1")を読み出す。そして、コミット制御部12は、エントリバッファ13において、カウント値CNTが"1"のエントリENTのエラーフラグEFLGをセットする。
エントリバッファ13のカウント値CNTは、Uサイクルで"0"のカウント値CNTに設定され、その後、サイクルが進む毎に"1"ずつインクリメントされる。このため、コミット制御部12は、エラー信号REUTを受信したサイクルにおいて、カウント値CNTが"1"のエントリENTに保持された命令情報INSTが、エラーを発生させた命令を示すと判定することができる。すなわち、コミット制御部12は、エラー信号REUTを受信した場合、エントリ判定テーブル14を参照してエントリバッファ13を検索することで、エラーを発生させた命令を保持するエントリにエラーフラグEFLGをセットすることができる。
UT2サイクル以降は、各命令のコミットタイミングが遅れる毎に追加される。コミットタイミングの遅れは、プログラム(命令列)の記述順が遅い命令が、アウトオブオーダ実行により、記述順が早い命令より先に実行され、コミットを待たされることで発生する。演算器23は、UT2サイクルでエラーを検出した場合、エラー信号REUT2を出力することで、エラーの発生を命令制御部10に通知する。
コミット制御部12は、演算器23からエラー信号REUT2を受信した場合、エントリ判定テーブル14を参照し、エラー信号REUT2に対応してエントリ判定テーブル14が保持するカウント値CNT(="2")を読み出す。そして、コミット制御部12は、エントリバッファ13において、カウント値CNTが"2"のエントリENTのエラーフラグEFLGをセットする。
上述したように、エントリバッファ13のカウント値CNTは、Uサイクルで"0"に設定された後、サイクルが進む毎に"1"ずつインクリメントされる。このため、コミット制御部12は、エラー信号REUT2を受信したサイクルにおいて、カウント値CNTが"2"のエントリENTに保持された命令情報INSTが、エラーを発生させた命令を示すと判定することができる。すなわち、コミット制御部12は、エラー信号REUT2を受信した場合、エントリ判定テーブル14を参照してエントリバッファ13を検索することで、エラーを発生させた命令を保持するエントリにエラーフラグEFLGをセットすることができる。
エラー信号REUT2に応じてエラーフラグEFLGがセットされたエントリENTに対応する命令は、コミットされていないため、リトライが可能である。一方、エラー信号REUT2が出力されたとき、カウント値CNT="2"を保持するエントリENTが存在しない場合、エラー信号REUT2を発生させた命令はコミット済みである。この場合、コミット制御部12は、エラー信号REUT2の受信に基づいて、リトライ不可能なエラー(ノンリトライエラー)が発生したことを検出し、エラーERRを出力する。
なお、この実施形態の演算器23は、UT2サイクルより後のサイクル(例えば、UT3サイクル)でエラーを検出しない(そのように設計されている)。このため、図1に示すように、演算器23から命令制御部10にエラー信号REU、REUT、REUT2を伝達する信号線が配線され、UT3以降で発生したエラーを通知する信号線は配線されない。逆に、演算器23がUT3サイクルでもエラーを検出する場合、演算器23から命令制御部10に図示しないエラー信号REUT3を伝達する信号線が追加される。
図4は、図1のCPU100の動作の一例をエントリバッファ13の状態遷移として示す。図4では、命令A、B、C、Dが順次デコードされ、リザベーションステーション11は、データの依存性を考慮して命令D、C、B、Aを演算制御部20に順次投入する。
その後、図4(a)において、コミット制御部12は、命令Dの完了信号CMPL(Uサイクル)に基づいて命令Dと"0"のカウント値CNTをエントリENTのいずれかに格納する。
次に、図4(b)において、コミット制御部12は、命令Cの完了信号CMPL(Uサイクル)に基づいて命令Cと"0"のカウント値CNTをエントリENTのいずれかに格納する。また、コミット制御部12は、命令Dを保持するエントリENTのカウント値CNTをインクリメントする。コミット制御部12は、命令DがコミットサイクルであるUTサイクルになったが、プログラムの記述順が先の命令A、B、Cがコミットされていないため、命令Dのコミットを抑止する。
次に、図4(c)において、コミット制御部12は、命令Bの完了信号CMPLに基づいて命令Bと"0"のカウント値CNTをエントリENTのいずれかに格納する。また、コミット制御部12は、命令C、Dを保持するエントリENTのカウント値CNTをそれぞれインクリメントし、"1"と"2"に設定する。コミット制御部12は、記述順が先の命令A、Bがコミットされていないため、命令C、Dのコミットを抑止する。
次に、図4(d)において、コミット制御部12は、命令Aの完了信号CMPLに基づいて命令Aと"0"のカウント値CNTをエントリENTのいずれかに格納する。コミット制御部12は、命令B、C、Dを保持するエントリENTのカウント値CNTをそれぞれインクリメントする。コミット制御部12は、記述順が先の命令Aがコミットされていないため、命令B、C、Dのコミットを抑止する。
また、コミット制御部12は、UTサイクルでのエラーの発生を示すエラー信号REUTと、UT2サイクルでのエラーの発生を示すエラー信号REUT2とを受信する。コミット制御部12は、エントリ判定テーブル14のエラー信号REUTを保持するエントリを参照し、カウント値CNTが"1"である命令Bを保持するエントリENTのエラーフラグEFLGを"1"にセットする。また、コミット制御部12は、エントリ判定テーブル14のエラー信号REUT2を保持するエントリを参照し、カウント値CNTが"2"である命令Cを保持するエントリENTのエラーフラグEFLGを"1"にセットする。このように、コミット制御部12は、エラー信号REUT(またはREUT2)を受信した場合、エントリ判定テーブル14を参照することにより、エラーが発生した命令を検出し、エラーフラグEFLGをセットすることができる。
コミット制御部12は、プログラムの記述順が一番早い命令Aの実行が正常に終了したたため、命令AをUTサイクルでコミットする。これにより、命令Aの演算結果RSLTは、リオーダバッファ24からレジスタファイル22に転送される。一方、コミット制御部12は、UTサイクルでエラーが発生した命令BおよびUT2サイクルでエラーが発生した命令Cをコミットしていないため、リトライ可能であると判定する。また、コミット制御部12は、コミットされずにUT3サイクルにいる命令Dをリトライ可能であると判定する。
そして、コミット制御部12は、命令B、C、Dのリトライを決定し、リザベーションステーション11に命令B、C、Dの再発行を依頼する。また、コミット制御部12は、リトライする命令B、C、Dの情報をエントリバッファ13から削除(フラッシュ)する。リザベーションステーション11は、命令D、C、Bをこの順で演算制御部20に発行し、演算器23に命令D、C、Bのリトライを実行させる。
図4(e)、(f)、(g)において、コミット制御部12は、図4(a)、(b)、(c)と同様に、命令D、C、Bの完了信号CMPLを受信する毎に、命令情報およびカウント値CNTをエントリバッファ13に格納する。コミット制御部12は、命令D、C、Bの実行によりエラー信号REU、REUT、REUT2を受信しない。このため、コミット制御部12は、命令BがUTサイクルになったときに命令Bをコミットし、その後、命令C、Dを順次コミットする。すなわち、命令Cは、UT2サイクルでコミットされ、命令Dは、UT3サイクルでコミットされる。そして、図4に示す動作が完了する。
なお、同じ命令で所定回数(例えば、3回連続)のエラーが発生した場合、コミット制御部12は、コミット前の命令であってもリトライ不可能なエラーの発生(ハードウェアの故障等)を検出し、管理装置にエラーERR(ノンリトライエラー)を通知する。
例えば、従来は、データの依存性によりコミットを待たされている命令CのUT2サイクルでエラー信号を受信した場合、命令Cでリトライ不可能なエラーが発生したとして、CPU100を管理する管理装置にエラーERR(ノンリトライエラー)が通知されていた。しかしながら、データの依存性によりコミットを待たされている命令CのUT2サイクルでのエラーは、リトライ可能なエラー(疑似的なノンリトライエラー)である。この実施形態では、従来、リトライ不可能と判定されていた疑似的なノンリトライエラーが発生した命令をリトライすることができる。この結果、CPU100を含むシステムSYSの信頼性を向上することができ、処理性能を向上することができる。
また、例えば、命令B、Cの間でデータの依存性がなく、命令Cの記述順が命令Bより早い場合、図4(c)で命令Cはコミットされ、エントリバッファ13から情報が消去される。その後、命令Cのエラー信号REUT2が出力された場合、エラー信号REUT2に対応してエントリ判定テーブル14が保持するカウント値CNT="2"は、エントリバッファ13のエントリENTのいずれにも保持されていない。この場合、コミット制御部12は、コミット済みの命令Cのリトライを実行できないため、命令Cの実行によりリトライ不可能なエラー(ノンリトライエラー)が発生したと判定し、管理装置にエラーERRを通知する。
このように、エントリ判定テーブル14のカウント値CNTと一致するカウント値CNTがエントリバッファ13に存在するか否かを判定することで、リトライ可能なエラーとリトライ不可能なエラーとを区別することができる。したがって、リトライ可能な命令がリトライ不可能と判定される疑似的なノンリトライエラーの発生を抑止しつつ、ノンリトライエラーの発生を簡易な手法で検出することができる。この結果、CPU100を含むシステムSYSの信頼性を向上することができ、処理性能を向上することができる。
以上、この実施形態では、命令の実行が完了してからのサイクル数を示すカウント値CNTを命令毎に計数する。これにより、カウント値CNTとエラー信号REU、REUT、REUT2により示されるエラーの検出サイクルとが一致した命令を、リトライ可能と判定することができる。そして、リトライ可能と判定した命令を除いてコミット可能な命令をコミットし、コミットしない命令のリトライを決定することで、例えば、UT2サイクルで発生したリトライ可能なエラーが、ノンリトライエラーと検出されることを抑止することができる。
コミット制御部12は、エラーが検出された検出サイクルと同じカウント値CNTがエントリバッファ13のエントリENTのいずれにも存在しない場合、エラーが発生した命令をリトライ不可能なエラー(ノンリトライエラー)と判定することができる。すなわち、検出サイクルとカウント値CNTとが一致するエントリENTがあるか否かを判定することで、エラー信号REUT2がリトライ可能なエラーまたはリトライ不可能なエラーのいずれを示すかを区別することができる。
したがって、リトライ可能な命令がリトライ不可能と判定される疑似的なノンリトライエラーの発生を抑止しつつ、ノンリトライエラーの発生を簡易な手法で検出することができる。この結果、CPU100を含むシステムSYSの信頼性を向上することができ、処理性能を向上することができる。
エントリバッファ13にカウント値CNTおよびエラーフラグEFLGを命令毎に保持することで、エラー信号REU、REUT、REUT2の受信時に、リトライ可能な命令を個別に判定することができる。また、エントリバッファ13によりコミットする命令とリトライする命令とを容易に区別することができる。エントリ判定テーブル14を使用してエントリバッファ13を検索することで、エラー信号を伝達したエラー信号線(REUT等)に基づいてエラーが発生した命令を検出することができ、エントリバッファ13にエラーフラグEFLGをセットすることができる。
図5は、別の実施形態における半導体装置の一例を示す。図1と同様の要素については、同じ符号を付し、詳細な説明は省略する。図5に示す半導体装置100Aは、例えば、CPU等のプロセッサであり、図示しないメインメモリ等のメモリとともにシステムに搭載される。以下では、半導体装置100AをCPU100Aとも称する。CPU100Aは、命令制御部10Aおよび演算制御部20Aを有する。なお、CPU100Aは、図1に示したCPU100と同様に、メモリに接続されるキャッシュ31を含むキャッシュ制御部30を有してもよい。
命令制御部10Aは、リザベーションステーション11、コミット制御部12Aおよびエントリ判定テーブル14Aを有する。エントリ判定テーブル14Aの例は、図6に示す。演算制御部20Aは、実行制御部21A、レジスタファイル22A、複数のパイプラインPL(PLa、PLb)およびリオーダバッファ24Aを有する。
パイプラインPLa、PLbは、例えば、互いに同じ構成を有し、複数のオペランドレジスタOP(OP1~OP3)および演算器23(23A、23B)を有する。パイプラインPLa、PLbは、命令を並列に実行可能である。各パイプラインPLは、複数の演算器23を有してもよく、複数種の演算器23を有してもよく、オペランドレジスタOPの数は3つに限定されない。各パイプラインPLの実行サイクルは、図3と同様である。なお、パイプラインPLの数は、3以上でもよい。
コミット制御部12Aは、演算制御部20Aによる実行が終了した命令を示す情報を保持する複数のエントリを含むエントリバッファ13Aを有する。エントリバッファ13Aの例は、図7に示す。コミット制御部12Aは、図1のコミット制御部12と同様の機能を有する。但し、コミット制御部12Aは、パイプラインPLa、PLb毎の完了信号CMPLa、CMPLbとエラー信号REUa、REUb、REUTa、REUTb、REUT2a、REUT2bとに基づいて命令のコミットを制御する。
コミット制御部12Aは、演算器23Aからエラー信号REUTa、REUT2aのいずれかを受信した場合、エントリ判定テーブル14Aを参照して演算器23Aでエラーを発生させた命令を検出する。コミット制御部12Aは、演算器23Bからエラー信号REUTb、REUT2bのいずれかを受信した場合、エントリ判定テーブル14Aを参照して演算器23Bでエラーを発生させた命令を検出する。
実行制御部21Aは、リザベーションステーション11から供給される命令を演算器23A、23Bの少なくともいずれかに投入することを除き、図1の実行制御部21と同様の機能を有する。すなわち、実行制御部21Aは、命令毎に投入するパイプラインPLa、PLbを決定するとともに、レジスタファイル22Aにおいて演算に使用するレジスタを決定する。レジスタファイル22Aは、パイプラインPLa、PLbのそれぞれにオペランドを出力することを除き、図1のレジスタファイル22と同様の構成を有する。
演算器23A、23Bは、図1の演算器23と同じ演算機能を有し、演算部の一例である。演算器23Aは、演算の完了に基づいて、Uサイクルで完了信号CMPLaを命令制御部10Aに出力し、演算結果RSLTaをリオーダバッファ24Aに格納する。また、演算器23Aは、Uサイクルが完了するまでにエラーを検出した場合、Uサイクルでエラー信号REUaを命令制御部10Aに出力する。演算器23Aは、UTサイクルでエラーを検出した場合、エラー信号REUTaを命令制御部10Aに出力する。演算器23Aは、UT2サイクルでエラーを検出した場合、エラー信号REUT2aを命令制御部10Aに出力する。
演算器23Bは、演算の完了に基づいて、Uサイクルで完了信号CMPLbを命令制御部10Aに出力し、演算結果RSLTbをリオーダバッファ24Aに格納する。また、演算器23Bは、Uサイクルが完了するまでにエラーを検出した場合、Uサイクルでエラー信号REUbを命令制御部10Aに出力する。演算器23Bは、UTサイクルでエラーを検出した場合、エラー信号REUTbを命令制御部10Aに出力する。演算器23Bは、UT2サイクルでエラーを検出した場合、エラー信号REUT2bを命令制御部10Aに出力する。
リオーダバッファ24Aは、演算器23A、23Bから演算結果RSLTa、RSLTbをそれぞれ受信することを除き、図1のリオーダバッファ24と同様の機能を有する。例えば、リオーダバッファ24Aは、コミット制御部12Aからのライトイネーブル信号WEに基づいて、コミット対象の演算結果RSLTをレジスタファイル22Aに格納する。
図6は、図5のエントリ判定テーブル14Aの一例を示す。図1のエントリ判定テーブル14と同様の要素については、詳細な説明は省略する。エントリ判定テーブル14Aは、エラー信号名REUTa、REUTb、REUT2a、REUT2b毎に、"0"または"1"のパイプ情報PINFと、"1"または"2"のカウント値CNTとをそれぞれ保持するエントリを有する。エントリ判定テーブル14Aが保持するパイプ情報PINFおよびカウント値CNTは、固定値であり、エントリバッファ13Aに格納されるパイプ情報PINFおよびカウント値CNTに対応する。
図6に示すように、エントリ判定テーブル14Aは、エラー信号名に対応してパイプ情報PINFとカウント値CNTとを保持するエントリを含む。このため、パイプラインPLの数の増減、または、エラー信号線の数の増減に対応して、エントリの数を増減することで、エントリ判定テーブル14を容易に変更することができる。この際、エントリバッファ13の変更は不要である。
図7は、図5のエントリバッファ13Aの一例を示す。エントリバッファ13Aは、保持部の一例である。エントリバッファ13Aは、各エントリENTがパイプ情報PINFを保持するパイプ情報領域PINFを有することを除き、図2のエントリバッファ13と同様である。すなわち、エントリバッファ13Aは、エラーフラグEFLG、パイプ情報領域PINF、カウント領域CNTおよび命令情報領域INSTを保持する複数のエントリENTを有する。パイプ情報PINFは、演算がパイプラインPLa、PLbのいずれで実行されたかを識別する情報であり、例えば、"0"がパイプラインPLaを示し、"1"がパイプラインPLbを示す。
コミット制御部12Aは、完了信号CMPLa(またはCMPLb)を受信した場合、完了信号CMPLa(またはCMPLb)に対応する命令を示す命令情報INSTをエントリENTのいずれかに格納する。また、コミット制御部12Aは、命令情報INSTを格納したエントリENTのカウント領域CNTを"0"にリセットする。さらに、コミット制御部12Aは、受信した完了信号CMPLa(またはCMPLb)に基づいて、命令を実行したパイプラインPLを示すパイプ情報PINFを、命令情報INSTを格納したエントリENTに格納する。
コミット制御部12Aは、演算器23Aから完了信号CMPLaとともにエラー信号REUaを受信した場合、パイプラインPLaにより演算の実行が完了した命令にエラーが発生したと判定する。コミット制御部12Aは、演算器23Bから完了信号CMPLbとともにエラー信号REUbを受信した場合、パイプラインPLbにより演算の実行が完了した命令にエラーが発生したと判定する。そして、コミット制御部12Aは、エラーが発生した命令を示す命令情報INSTを保持するエントリENTのエラーフラグEFLGをセットする。
コミット制御部12Aは、エラー信号REUTa(またはREUT2a)を受信した場合、エントリ判定テーブル14Aを参照し、エラー信号REUTa(またはREUT2a)に対応するパイプ情報PINFとカウント値CNTとを読み出す。また、コミット制御部12Aは、エラー信号REUTb(またはREUT2b)を受信した場合、エントリ判定テーブル14Aを参照し、エラー信号REUTb(またはREUT2b)に対応するパイプ情報PINFとカウント値CNTとを読み出す。
そして、コミット制御部12は、読み出したパイプ情報PINFとカウント値CNTとを保持するエントリENTのエラーフラグEFLGをセットする。コミット制御部12は、エラーフラグEFLGをセットしたエントリENTが保持する命令情報INSTが示す命令を、エラーが発生した命令と判定する。
なお、コミット制御部12Aは、エントリ判定テーブル14Aから読み出したパイプ情報PINFおよびカウント値CNTの両方を保持するエントリENTがエントリバッファ13に存在しない場合、リトライ不可能なエラーの発生を検出する。パイプラインPLa、PLbのいずれでリトライ不可能なエラーが発生したかは、パイプ情報PINFにより判定される。コミット制御部12は、リトライ不可能なエラーの発生を検出した場合、CPU100を管理する管理装置にエラーERRを通知する。
図8は、図5のCPU100Aの動作の一例をエントリバッファ13Aの状態遷移として示す。図4と同様の動作については、詳細な説明を省略する。図8では、命令A、B、C、Dが順次デコードされ、リザベーションステーション11は、データの依存性を考慮して命令C、DをパイプラインPLa、PLbにそれぞれ投入した後、命令A、BをパイプラインPLa、PLbにそれぞれ投入する。図8は、命令A~Dの実行時にエラーが発生しない例を示し、命令A、BのUサイクルからのエントリバッファ13Aの状態を示す。
図8(a)において、コミット制御部12Aは、命令Aの完了信号CMPL(Uサイクル)に基づいて命令Aと"0"のカウント値CNTとパイプラインPLaでの実行を示す"0"のパイプ情報PINFとをエントリENTのいずれかに格納する。また、コミット制御部12Aは、命令Bの完了信号CMPL(Uサイクル)に基づいて命令Bと"0"のカウント値CNTとパイプラインPLbでの実行を示す"1"のパイプ情報PINFとをエントリENTのいずれかに格納する。
さらに、コミット制御部12Aは、命令C、Dを保持するエントリENTのカウント値CNTをそれぞれインクリメントし、"1"に設定する。なお、命令C、Dを保持するエントリENTは、パイプラインPLaでの実行を示す"0"のパイプ情報PINFと、パイプラインPLbでの実行を示す"1"のパイプ情報PINFとをそれぞれ保持している。
次に、図8(b)において、コミット制御部12Aは、命令A、Bを保持するエントリENTのカウント値CNTをインクリメントする。そして、コミット制御部12Aは、UTサイクルの命令A、Bのうち、プログラムの記述順が早い命令Aをコミットする。また、コミット制御部12Aは、命令C、Dを保持するエントリENTのカウント値CNTをインクリメントする。この後、命令Aを保持するエントリENTに格納された情報は、命令Aのコミットにより消去される。
次に、図8(c)において、コミット制御部12Aは、命令B、C、Dを保持するエントリENTのカウント値CNTをインクリメントする。そして、コミット制御部12Aは、命令B、C、Dのうち、プログラムの記述順が早い命令Bをコミットする。この後、命令Bを保持するエントリENTに格納された情報は、命令Bのコミットにより消去される。
図8(d)、(e)においても、図8(c)と同様に、コミット制御部12Aは、有効な各エントリENTのカウント値CNTをインクリメントし、プログラムの記述順が早い命令C、Dを順次コミットする。そして、命令A~Dの実行が完了する。
図9は、図5のCPU100Aの動作の別の例をエントリバッファ13Aの状態遷移として示す。図8と同様の動作については、詳細な説明を省略する。図9(a)の状態は、図8(a)の状態と同じである。
図9(b)の状態は、命令CのUT2サイクルおいて、エラーが発生することを除き、図8(b)の状態と同様である。コミット制御部12Aは、図9(b)において、パイプラインPLaでのUT2サイクルでのエラーの発生を示すエラー信号REUT2aを受信する。コミット制御部12Aは、エントリ判定テーブル14Aのエラー信号REUT2aを保持するエントリを参照し、パイプ情報PINFが"0"でカウント値CNTが"2"である命令Cを保持するエントリENTのエラーフラグEFLGを"1"にセットする。なお、図8(b)と同様に、UTサイクルの命令A、Bのうち、プログラムの記述順が早い命令Aはコミットされる。
図9(c)の状態は、命令Cを保持するエントリENTのエラーフラグEFLGがセットされていることを除き、図8(c)の状態と同様である。UT2サイクルの命令Bは、エラーが発生しておらず、命令Bより記述順が早い命令を保持するエントリがないため、コミットされる。図9(d)において、コミット制御部12Aは、記述順が早い命令Cを保持するエントリENTにエラーフラグEFLGが立っているため、命令Cと、命令Cより記述順が遅い命令Dのリトライを決定する。
なお、図9(b)において、命令C、DのエラーフラグEFLGがセットされた場合も、図9(d)において、命令C、Dのリトライが決定される。また、図9(b)において、命令DのエラーフラグEFLGのみがセットされた場合、図9(d)において、命令Cがコミットされ、その後、命令Dのリトライが決定される。なお、従来では、UT2サイクルでエラーが発生した場合、リトライの可否が判定されることなく、管理装置にエラーERR(ノンリトライエラー)が通知されていた。
図10は、図5のCPU100Aの動作のさらなる別の例をエントリバッファ13Aの状態遷移として示す。図8および図9と同様の動作については、詳細な説明を省略する。図10(a)の状態は、図8(a)の状態と同じである。
図10(b)の状態は、命令BのUTサイクルおいて、エラーが発生することを除き、図9(b)の状態と同様である。コミット制御部12Aは、図10(b)において、パイプラインPLbでのUTサイクルでのエラーの発生を示すエラー信号REUTbと、パイプラインPLaでのUT2サイクルでのエラーの発生を示すエラー信号REUT2aとを受信する。コミット制御部12Aは、エントリ判定テーブル14Aのエラー信号REUTbを保持するエントリを参照し、パイプ情報PINFが"1"でカウント値CNTが"1"である命令Bを保持するエントリENTのエラーフラグEFLGを"1"にセットする。命令Cを保持するエントリENTのエラーフラグEFLGが"1"にセットされる点は、図9(b)と同じである。
図10(c)において、コミット制御部12Aは、記述順が早い命令Bを保持するエントリENTにエラーフラグEFLGが立っているため、命令Bと、命令Bより記述順が遅い命令C、Dのリトライを決定する。なお、図10(b)において、命令C、DのエラーフラグEFLGのいずれかがセットされた場合も、図10(c)において、命令B、C、Dのリトライが決定される。
従来では、UTサイクルで命令Bのエラーが発生した場合、同じUTサイクルの命令Aのコミットが抑止され、命令A~Dがリトライされる。この場合、リトライする命令数が増えるため、命令の処理効率が低下する。換言すれば、CPU100Aは、図10に示す動作により、命令の処理効率の低下を抑制することができる。
図11は、図5のCPU100Aの動作の別の例をエントリバッファ13Aの状態遷移として示す。図10と同様の動作については、詳細な説明を省略する。図11に示すエントリバッファ13Aの状態遷移は、図10の状態遷移と同じである。但し、図11(c)において、図11(b)でコミットした命令AのUT2サイクルでのエラーが発生する。
具体的には、コミット制御部12Aは、図11(c)において、パイプラインPLaでのUT2サイクルでのエラーの発生を示すエラー信号REUT2aを受信する。コミット制御部12Aは、エントリ判定テーブル14Aのエラー信号REUT2aを保持するエントリを参照し、パイプ情報PINFが"0"でカウント値CNTが"2"であるエントリENTを検索する。
コミット制御部12Aは、検索対象のエントリENTが存在しないため、リトライ不可能なエラー(ノンリトライエラー)の発生を検出し、管理装置にエラーERRを通知する。このように、コミット制御部12Aは、エラー信号REUT2a(またはREUT2b)を受信した場合、エントリバッファ13Aに保持された情報に基づいて、リトライ可能なエラーが発生したのか、リトライ不可能なエラーが発生したのかを判別することできる。そして、コミット制御部12Aは、判別結果に応じた処理を実行することができる。
図12は、図5のCPU100Aの動作の別の例をエントリバッファ13Aの状態遷移として示す。図8と同様の動作については、詳細な説明を省略する。図12(a)の状態は、図8(a)の状態と同じである。
図12(b)の状態は、命令AのUTサイクルおいて、エラーが発生することを除き、図8(b)の状態と同様である。図12(b)において、コミット制御部12Aは、パイプラインPLaのUTサイクルでのエラーの発生を示すエラー信号REUTaを受信する。コミット制御部12Aは、エントリ判定テーブル14Aのエラー信号REUTaを保持するエントリを参照し、パイプ情報PINFが"0"でカウント値CNTが"1"である命令Aを保持するエントリENTのエラーフラグEFLGを"1"にセットする。この場合、コミット制御部12Aは、命令A~Dのリトライを決定する。
図13および図14は、図5のCPU100Aのサイクル毎の動作の一例を示す。図13および図14に示すフローは、命令毎に実行される。
まず、Bサイクルでは、ステップS10が実行される。ステップS10において、リザベーションステーション11は、命令をアウトオブオーダで発行し、実行制御部21Aは、レジスタファイル22Aから演算に使用するデータを読み出してパイプラインPLa(またはPLb)に供給する。次に、X1サイクルおよびそれ以降の実行サイクルXでは、ステップS12が実行される。ステップS12において、演算器23A(または23B)は、レジスタファイル22Aから読み出されたデータを演算することで命令を実行する。
次に、Uサイクルでは、ステップS14が実行される。ステップS14において、演算器23A(または24B)は、演算結果RSLTをリオーダバッファ24Aに出力し、完了信号CMPLa(またはCMPLb)をコミット制御部12Aに出力する。コミット制御部12Aは、完了信号CMPLに対応する実行が完了した命令の情報を、エントリバッファ13AのエントリENTのいずれかに格納する。例えば、コミット制御部12Aは、パイプ情報PINF、"0"のカウント値CNTおよび命令情報INSTをエントリENTに格納する。
なお、ステップS14(Uサイクル)において、コミット制御部12Aは、エラー信号REUa、REUbを受信した場合、エントリバッファ13Aにおいて、エラーを発生した命令情報INSTを保持する該当エントリENTのエラーフラグEFLGをセットする。
次に、UTサイクルでは、ステップS16~S26が実行される。ステップS16において、コミット制御部12Aは、UTサイクルにおいて演算器23A(または23B)でエラーが発生した場合、ステップS18を実行する。ステップS18において、コミット制御部12Aは、エントリ判定テーブル14Aとエントリバッファ13Aに格納された情報とに基づいて、エラーを発生した命令を検出する。そして、コミット制御部12Aは、エントリバッファ13Aにおいて、エラーを発生した命令情報INSTを保持する該当エントリENTのエラーフラグEFLGをセットする。
UTサイクルまでにエラーが発生していない場合、またはステップS18の実行後、ステップS20において、コミット制御部12Aは、命令をコミット可能か否か判定する。例えば、コミット制御部12Aは、コミットされていない命令の中でプログラム内の記述順が最も早い命令がエントリバッファ13Aに保持されている場合(Top of Queue)、その命令をコミット可能と判定する。コミット制御部12Aは、命令をコミット可能でない場合、図14のUT2サイクルの処理を実行する。
命令をコミット可能な場合、ステップS22において、コミット制御部12Aは、エントリバッファ13Aにおいて、当該命令を格納しているエントリENTのエラーフラグEFLGがセットされているか否か判定する。
当該命令のエラーフラグEFLGがセットされている場合、ステップS24において、コミット制御部12Aは、エントリバッファ13Aに保持されている実行が完了した命令の情報を全て消去し、情報を消去した命令のリトライを決定する。当該命令のエラーフラグEFLGがセットされていない場合、ステップS26において、コミット制御部12Aは、当該命令をコミットし、命令の実行サイクルを終了する。
図14のUT2サイクルでは、ステップS30~S40が実行される。ステップS30において、コミット制御部12Aは、UT2サイクルにおいて演算器23A(または23B)でエラーが発生した場合、ステップS32を実行する。ステップS32において、コミット制御部12Aは、エントリ判定テーブル14Aとエントリバッファ13Aに格納された情報とに基づいて、エラーを発生した命令を検出する。そして、コミット制御部12Aは、エントリバッファ13Aにおいて、エラーを発生した命令情報INSTを保持する該当エントリENTのエラーフラグEFLGをセットする。
UT2サイクルでエラーが発生していない場合、またはステップS32の実行後、ステップS34において、コミット制御部12Aは、ステップS20と同様にコミットが可能か否か判定し、コミット可能でない場合、UT3サイクルの処理を実行する。命令をコミット可能な場合、ステップS36、S38、S40において、コミット制御部12Aは、図13のステップS22、S24、S26と同様の処理を実行する。
UT3サイクルでは、ステップS42、S44、S46、S48が実行される。ステップS42において、コミットが可能か否か判定し、コミット可能でない場合、UT4サイクルの処理を実行する。命令をコミット可能な場合、ステップS44、S46、S48において、コミット制御部12Aは、図13のステップS22、S24、S26と同様の処理を実行する。UT4サイクルおよびそれ以降のサイクルでは、UT3サイクルと同じ処理が実行される。
なお、UT2サイクルにおいて、コミット制御部12Aは、コミット済みの命令のエラー信号LEUT2a、LEUT2bを受信した場合、エントリ判定テーブル14Aを使用した、エラーを発生した命令の特定ができない。この場合、図11(c)で説明したように、コミット制御部12Aは、リトライ不可能なエラー(ノンリトライエラー)の発生を検出し、管理装置にエラーERRを通知する。
以上、図5から図14に示す実施形態においても、図1から図4に示す実施形態と同様の効果を得ることができる。さらに、図5から図14に示す実施形態では、エントリバッファ13Aの各エントリENTにパイプ情報PINFを保持する領域を設けることで、パイプラインPLa、PLb毎に独立して、リトライ可能な命令を判定することができる。したがって、例えば、パイプラインPLaで実行した命令がリトライ可能であると判定された場合に、パイプラインPLbで実行したリトライ可能な命令がリトライ不可能であると判定されることを抑止することができる。したがって、リトライ可能なエラーがノンリトライエラーとしてCPU100Aの管理装置に通知されることを抑止することができ、システムエラーの発生を抑止することができる。この結果、CPU100Aを含むシステムの信頼性を向上することができ、処理性能を向上することができる。
エントリ判定テーブル14Aを使用してエントリバッファ13Aを検索することで、エラー信号線(REUTa、REUTb等)に伝達されるエラー信号に基づいて、パイプラインPL毎にエラーが発生した命令を検出することができる。この結果、パイプラインPLa、PLb毎に、エラーフラグEFLGをセットすることができ、リトライ可能な命令を判定することができる。
なお、上述した実施形態では、エラー信号REUT、REUT2に基づいてエントリ判定テーブル14を使用してエラーが発生したサイクル数(カウント値CNT)を検出し、エラーが発生した命令を特定し、リトライ可能か否かを判定する例を示した。また、エラー信号REUTa、REUTb、REUT2a、REUT2bに基づいてエントリ判定テーブル14Aを使用してカウント値CNTとパイプ情報PINFとを検出し、エラーが発生した命令と演算器とを特定し、リトライ可能か否かを判定する例を示した。
しかしながら、エラーが発生した命令の特定およびリトライ可能な否かの判定は、上述した実施形態の手法に限定されない。例えば、エラーが発生した命令と演算器とを特定可能な情報を演算器23、23A、23Bから出力し、コミット制御部12、12Aが、受信した情報に基づいて、リトライ可能か否かを命令毎に判定できればよい。
また、上述した実施形態では、Uサイクルが完了するまでにエラーを検出した場合、Uサイクルでエラー信号REUを出力する例を示したが、例えば、Xサイクル(X1、X2、...)でエラーを検出した場合、サイクル毎にエラー信号を出力してもよい。
図15は、他の半導体装置の一例(比較例)を示す。図1および図5と同様の要素については、同じ符号を付し、詳細な説明は省略する。図15に示す半導体装置100Bは、例えば、CPU等のプロセッサであり、命令制御部10Bおよび演算制御部20Bを有する。
命令制御部10Bは、リザベーションステーション11およびコミット制御部12Bを有する。コミット制御部12Bは、実行が完了した命令の命令情報INSTを、命令をコミットするまで保持する複数のエントリENTを含むエントリバッファ13Bを有する。演算制御部20Bは、実行制御部21A、レジスタファイル22A、複数のパイプラインPL(PLa、PLb)およびリオーダバッファ24Aを有する。パイプラインPLaは、図5の演算器23Aの代わりに演算器25Aを有し、パイプラインPLbは、図5の演算器23Bの代わりに演算器25Bを有する。
演算器25Aは、演算の完了に基づいて、Uサイクルで完了信号CMPLaを命令制御部10Aに出力し、演算結果RSLTaをリオーダバッファ24Aに格納する。また、演算器23Aは、UTサイクルが完了するまでにエラーを検出した場合、UTサイクルで、リトライエラー信号REaを出力する。演算器23Aは、UT2サイクルでエラーを検出した場合、ノンリトライエラー信号NREaを出力する。
演算器25Bは、演算の完了に基づいて、Uサイクルで完了信号CMPLbを命令制御部10Bに出力し、演算結果RSLTbをリオーダバッファ24Aに格納する。また、演算器23Bは、UTサイクルが完了するまでにエラーを検出した場合、UTサイクルで、リトライエラー信号REbを出力する。演算器23Bは、UT2サイクルでエラーを検出した場合、ノンリトライエラー信号NREbを出力する。
演算制御部20Bは、リトライエラー信号REa、REbのいずれかが出力された場合、リトライエラー信号REを命令制御部10Bに出力する。演算制御部20Bは、ノンリトライエラー信号NREa、NREbのいずれかが出力された場合、ノンリトライエラー信号NREを命令制御部10Bに出力する。
コミット制御部12Bは、リトライエラー信号REを受信した場合、エントリバッファ13Aに保持されている実行が完了した命令の情報を全て消去し、情報を消去した命令のリトライを決定する。すなわち、命令制御部10Bは、UTサイクルまでに演算器23A(または23B)によりエラーが検出された場合、命令のリトライが可能と判定し、命令のリトライを実行する。
コミット制御部12Bは、ノンリトライエラー信号NREを受信した場合、リトライ不可能なエラーが演算器25A(または25B)で発生したため、CPU100Bを管理する管理装置にエラーERRを通知する。すなわち、命令制御部10Bは、UT2サイクルにおいて、演算器23A(または23B)によりリトライ不可能なエラーが検出された場合、管理装置にエラーERRを通知する。
図16および図17は、図15のCPU100Bのサイクル毎の動作の一例を示す。図13および図14と同様の動作については、同じ符号を付し、詳細な説明は省略する。図16および図17に示すフローは、命令毎に実行される。図16において、ステップS10~S14(サイクルB~サイクルU)の動作は、図13と同様である。なお、演算器25A、25Bは、Uサイクルではエラー信号を出力しないため、コミット制御部12Bは、ステップS14において、エラーに伴う処理を実行しない。
ステップS14の後、ステップS17において、コミット制御部12Bは、UTサイクルまでに演算器25A(または25B)でエラーが発生した場合、ステップS24を実行する。ステップS24では、コミット制御部12Bは、エントリバッファ13Bに保持されている命令を全て消去し、消去した命令のリトライを決定し、命令の実行サイクルを終了する。
UTサイクルまでにエラーが発生していない場合、ステップS20において、コミット制御部12Bは、命令をコミット可能か否か判定し、コミット可能な場合、ステップS26で命令をコミットする。コミット制御部12Bは、命令をコミット可能でない場合、図17のUT2サイクルの処理を実行する。
図17のステップS30において、コミット制御部12Bは、UT2サイクルにおいて演算器25A(または25B)でエラーが発生した場合、命令のリトライが不可能なエラーが発生したと判定し、ステップS33を実行する。ステップS33において、コミット制御部12Bは、管理装置にエラーERR(ノンリトライエラーの発生)を通知し、命令の実行サイクルを終了する。
UT2サイクルでエラーが発生していない場合、ステップS34において、コミット制御部12Bは、命令をコミット可能か否か判定する。命令をコミット可能な場合、ステップS40において、コミット制御部12Bは、命令をコミットし、命令の実行サイクルを終了する。コミット制御部12Bは、命令をコミット可能でない場合、UT3サイクルの処理を実行する。UT3サイクル以降の処理は、図14と同様である。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
10、10A、10B 命令制御部
11 リザベーションステーション
12、12A、12B コミット制御部
13、13A、13B エントリバッファ
14、14A、14B エントリ判定テーブル
20、20A、20B 演算制御部
21、21A 実行制御部
22、22A レジスタファイル
23、23A、23B 演算器
24、24A リオーダバッファ
25A、25B 演算器
30 キャッシュ制御部
31 キャッシュ
100、100A、100B 半導体装置(CPU)
200 メモリ
CMPL、CMPLa、CMPLb 完了信号線(完了信号)
CNT カウント値
EFLG エラーフラグ
ENT エントリ
ERR エラー
INST 命令情報
OP(OP1、OP2、OP3) オペランドレジスタ
PINF パイプ情報
PL(PLa、PLb) パイプライン
REU、REUa、REUb エラー信号線(エラー信号)
REUT、REUTa、REUTb エラー信号線(エラー信号)
REUT2、REUT2a、REUT2b エラー信号線(エラー信号)
RSLT、RSLTa、RSLTb 演算結果
WE ライトイネーブル信号

Claims (8)

  1. 命令をアウトオブオーダで発行する命令発行部と、
    前記命令発行部が発行した命令を実行する演算部と、
    実行が完了した命令をインオーダでコミットするコミット制御部と、
    前記演算部により検出されたエラーの検出サイクルをそれぞれ示す複数のエラー信号を前記演算部から前記コミット制御部にそれぞれ伝達する複数のエラー信号線と、を有し、
    前記コミット制御部は、命令毎に命令の完了からのサイクル数をカウントし、前記エラー信号の受信時に、コミットしていない命令のうち、前記複数のエラー信号線を介して受けたエラー信号が示す前記検出サイクルと同じカウント値の命令をリトライ可能と判定する
    半導体装置。
  2. 前記コミット制御部は、コミットしていない命令のうち、リトライ可能と判定した命令を除いてコミット可能な命令をコミットし、コミットしない命令のリトライを決定する
    請求項1に記載の半導体装置。
  3. 前記コミット制御部は、
    実行が完了した命令と、命令の実行が完了してからのサイクル数を示す前記カウント値と、エラー情報とを命令毎に保持する複数のエントリを含む保持部を有し、
    前記エラー信号を受信する毎に、対応するエントリにエラー情報を格納し、
    各命令のコミット時に、エラー情報を保持するエントリが保持する命令をリトライ可能と判定する
    請求項1または請求項2に記載の半導体装置。
  4. 前記コミット制御部は、前記エラー信号が示す前記検出サイクルと同じカウント値が前記保持部のエントリに存在しない場合、リトライ不可能なエラーの発生を検出する
    請求項3に記載の半導体装置。
  5. 前記演算部をそれぞれ含み、命令を並列に実行可能な複数のパイプラインを有し、
    前記複数のパイプライン毎に前記演算部と前記コミット制御部とを接続する前記複数のエラー信号線が設けられ、
    前記コミット制御部は、
    実行が完了した命令と、命令の実行が完了してからのサイクル数を示す前記カウント値と、命令を実行した前記パイプラインを示すパイプ情報と、エラー情報とを命令毎に保持する複数のエントリを含む保持部を有し、
    前記エラー信号を受信する毎に、前記エラー信号が示す前記検出サイクルと同じカウント値と、前記エラー信号を伝達した前記エラー信号線に接続されたパイプラインを示すパイプ情報とを保持するエントリに前記エラー情報を格納し、
    各命令のコミット時に、エラー情報を保持するエントリが保持する命令をリトライ可能と判定する
    請求項1または請求項2に記載の半導体装置。
  6. 前記エラー信号を出力する前記パイプラインを示すパイプ情報と、エラーの検出サイクルとを、前記複数のエラー信号線に対応付けて保持するエントリ判定テーブルを有し、
    前記コミット制御部は、前記エラー信号を受信する毎に、前記エラー信号が伝達されたエラー信号線に対応して前記エントリ判定テーブルに保持されたパイプ情報および検出サイクルとそれぞれ同じパイプ情報およびサイクル数を保持する前記エントリに前記エラー情報を格納する
    請求項5に記載の半導体装置。
  7. 前記コミット制御部は、前記エラー信号が示す前記検出サイクルおよび前記エラー信号を出力する前記パイプラインを示すパイプ情報と一致する情報が前記保持部のエントリに存在しない場合、リトライ不可能なエラーの発生を検出する
    請求項5または請求項6に記載の半導体装置。
  8. 前記コミット制御部は、リトライ不可能なエラーの発生を検出した場合、半導体装置の動作を管理する管理装置にエラーを通知する
    請求項4または請求項7に記載の半導体装置。
JP2020097824A 2020-06-04 2020-06-04 半導体装置 Active JP7480595B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2020097824A JP7480595B2 (ja) 2020-06-04 2020-06-04 半導体装置
US17/203,000 US11842192B2 (en) 2020-06-04 2021-03-16 Arithmetic processing device and semiconductor device with improved instruction retry

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020097824A JP7480595B2 (ja) 2020-06-04 2020-06-04 半導体装置

Publications (2)

Publication Number Publication Date
JP2021190018A JP2021190018A (ja) 2021-12-13
JP7480595B2 true JP7480595B2 (ja) 2024-05-10

Family

ID=78817447

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020097824A Active JP7480595B2 (ja) 2020-06-04 2020-06-04 半導体装置

Country Status (2)

Country Link
US (1) US11842192B2 (ja)
JP (1) JP7480595B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114995884A (zh) * 2022-06-14 2022-09-02 平头哥(上海)半导体技术有限公司 指令退休单元、指令执行单元及相关装置和方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016062513A (ja) 2014-09-19 2016-04-25 株式会社東芝 プロセッサおよびプロセッサシステム
US10282250B1 (en) 2017-10-16 2019-05-07 Cadence Design Systems, Inc. Apparatus and method for a coherent, efficient, and configurable cyclic redundancy check retry implementation for synchronous dynamic random access memory

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4584124B2 (ja) 2005-11-24 2010-11-17 エヌイーシーコンピュータテクノ株式会社 情報処理装置およびそのエラー処理方法ならびに制御プログラム
US10228944B2 (en) * 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016062513A (ja) 2014-09-19 2016-04-25 株式会社東芝 プロセッサおよびプロセッサシステム
US10282250B1 (en) 2017-10-16 2019-05-07 Cadence Design Systems, Inc. Apparatus and method for a coherent, efficient, and configurable cyclic redundancy check retry implementation for synchronous dynamic random access memory

Also Published As

Publication number Publication date
US11842192B2 (en) 2023-12-12
JP2021190018A (ja) 2021-12-13
US20210382715A1 (en) 2021-12-09

Similar Documents

Publication Publication Date Title
US10579386B2 (en) Microprocessor for gating a load operation based on entries of a prediction table
US7870369B1 (en) Abort prioritization in a trace-based processor
JP3927546B2 (ja) 同時マルチスレッド化プロセッサ
US7162613B2 (en) Mechanism for processing speculative LL and SC instructions in a pipelined processor
US20040128487A1 (en) System and method for handling load and/or store operations in a superscalar microprocessor
JP2009527866A (ja) アウトオブオーダープロセッサにおけるトランザクショナルメモリ
JP2012198803A (ja) 演算処理装置及び演算処理方法
CN108694094B (zh) 用于处理存储器访问操作的装置和方法
US20050223201A1 (en) Facilitating rapid progress while speculatively executing code in scout mode
US11055101B2 (en) Processing apparatus and controlling method for processing apparatus
US10977040B2 (en) Heuristic invalidation of non-useful entries in an array
JP7480595B2 (ja) 半導体装置
US6715060B1 (en) Utilizing a scoreboard with multi-bit registers to indicate a progression status of an instruction that retrieves data
US5802340A (en) Method and system of executing speculative store instructions in a parallel processing computer system
JP3800533B2 (ja) プログラムカウンタ制御方法及びプロセッサ
US11372712B2 (en) Processing device and method of controlling processing device
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
JP2020091751A (ja) 演算処理装置および演算処理装置の制御方法
US10929137B2 (en) Arithmetic processing device and control method for arithmetic processing device
US20190384608A1 (en) Arithmetic processor and control method of arithmetic processor
US7783863B1 (en) Graceful degradation in a trace-based processor
US11507377B2 (en) Arithmetic processing circuit and arithmetic processing method
US11210101B2 (en) Arithmetic processing device and control method implemented by arithmetic processing device
US20240118900A1 (en) Arithmetic processing device and arithmetic processing method
JPH10154072A (ja) パイプライン処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230309

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20231227

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240123

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240314

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240326

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240408

R150 Certificate of patent or registration of utility model

Ref document number: 7480595

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150