(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-19
(45)【発行日】2024-11-27
(54)【発明の名称】チェックサムの生成
(51)【国際特許分類】
G06F 11/22 20060101AFI20241120BHJP
G06F 11/10 20060101ALI20241120BHJP
G06F 11/30 20060101ALI20241120BHJP
G06F 11/34 20060101ALI20241120BHJP
【FI】
G06F11/22 675E
G06F11/10 604
G06F11/22 607D
G06F11/30 140H
G06F11/30 168
G06F11/30 172
G06F11/34 176
【外国語出願】
(21)【出願番号】P 2019232415
(22)【出願日】2019-12-24
【審査請求日】2022-12-15
(32)【優先日】2019-01-15
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】スピローズ リベリス
(72)【発明者】
【氏名】リチャード ウィリアム アーンショウ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2002/0199151(US,A1)
【文献】米国特許出願公開第2017/0075760(US,A1)
【文献】米国特許出願公開第2002/0095642(US,A1)
【文献】米国特許第04885739(US,A)
【文献】米国特許出願公開第2017/0083326(US,A1)
【文献】米国特許出願公開第2020/0183782(US,A1)
【文献】米国特許出願公開第2019/0250969(US,A1)
【文献】A. Floridia et al,Parallel software-based self-test suite for multi-core system-on-chip: Migaration from single-core automotive microcontrollers,2018 13th International Conference on Design & Technology of Integrated Systems In Nanoscale Era (DTIS),米国,IEEE,2018年04月09日,1-6,[online],[令和5年9月15日検索],インターネット<URL:https://ieeexplore.ieee.org/abstract/document/8368558/>,DOI: 10.1109/DTIS.2018.8368558
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/22
G06F 11/10
G06F 11/30
G06F 11/34
(57)【特許請求の範囲】
【請求項1】
命令に応答してデータ処理を実行する処理回路と、
前記処理回路の動作を制御するための内部状態を格納する少なくとも1つの制御記憶素子
であって、前記内部状態は前記処理回路で実行されるソフトウェアによっては読み書きできないマイクロアーキテクチャ状態である、少なくとも1つの制御記憶素子と、
前記処理回路による一連の命令の処理に続いて前記少なくとも1つの制御記憶素子に格納された内部状態の少なくとも1つの項目を受け取り、前記内部状態の少なくとも1つの項目に基づいてチェックサムを生成するチェックサム生成回路と、
を含む装置であって、
前記チェックサム生成回路は、
内部状態の前記少なくとも1つの項目に基づいて生成された前記チェックサムが診断制御エージェントからアクセス可能な診断記憶場所に前記チェックサムを格納するように構成され、前記診断制御エージェントは、前記処理回路で実行される
前記ソフトウェアおよび外部
診断デバイスの少なくとも一方を含む、装置。
【請求項2】
前記チェックサム生成回路は、複数の制御記憶素子から受け取った内部状態の複数の項目の中から前記内部状態の少なくとも1つの項目を選択するセレクタを含み、
前記セレクタは、前記診断制御エージェントによって設定された、または前記診断制御エージェントによって設定された構成情報に基づいて生成された選択制御信号に基づいて、前記内部状態の少なくとも1つの項目を選択するように構成される、
請求項1に記載の装置。
【請求項3】
前記選択制御信号は、ソフトウェア書き込み可能レジスタに格納された選択制御値から導出される、請求項2に記載の装置。
【請求項4】
前記チェックサム生成回路は、前記診断制御エージェントによって設定された、または前記診断制御エージェントによって設定された構成情報に基づいて生成されたチェックサム更新イネーブル信号に基づいて、前記内部状態の少なくとも1つの項目に応答して前記チェックサムを更新するかどうかを制御するように構成される、請求項1から3のいずれか一項に記載の装置。
【請求項5】
ソフトウェア書き込み可能レジスタへの書き込みに応答して、前記チェックサム更新イネーブル信号をアサートする回路を含む、請求項4に記載の装置。
【請求項6】
前記診断記憶場所は、前記処理回路によって実行されるソフトウェアからアクセス可能な、ソフトウェアでアクセス可能なレジスタを含む、請求項1から5のいずれか一項に記載の装置。
【請求項7】
前記処理回路によるデータ処理を監視し、かつ、前記処理回路によって実行される前記データ処理の特性または前記データ処理中に発生するイベントを示すトレースデータをトレースバッファに出力するトレース回路を含み、
前記診断記憶場所は前記トレースバッファを含む、請求項1から6のいずれか一項に記載の装置。
【請求項8】
前記チェックサム生成回路は、前記チェックサムの以前の値および前記内部状態の少なくとも1つの項目に依存するチェックサム関数を使用して、前記チェックサムの新しい値を生成するように構成される、請求項1から7のいずれか一項に記載の装置。
【請求項9】
前記少なくとも1つの制御記憶素子に格納された前記内部状態は、前記診断制御エージェントからアクセス不能である、請求項1から8のいずれか一項に記載の装置。
【請求項10】
前記少なくとも1つの制御記憶素子は、
前記処理回路によって処理されたそれぞれの命令間のレジスタハザードを検出するためのレジスタ追跡情報を格納するレジスタハザード回路と、
メモリシステムによってサービスされるそれぞれのメモリアクセス要求間のアドレスハザードを検出するためのアドレス追跡情報を格納するメモリハザード回路と、
キャッシュによるサービスを待機している要求、前記キャッシュへの割り当てを待機しているデータ、またはメモリへのライトバックを待機しているデータに関する情報を格納するキャッシュバッファと、
バスに対して行われたバス要求に関する情報を格納するバス制御回路と、
メモリに対して行われたメモリアクセス要求に関する情報を格納するメモリコントローラと、
のうちの少なくとも1つを含む、請求項1から9のいずれか一項に記載の装置。
【請求項11】
命令に応答してデータ処理を実行する処理回路と、前記処理回路の動作を制御するための内部状態
であって前記処理回路で実行されるソフトウェアによっては読み書きできないマイクロアーキテクチャ状態である内部状態を格納する少なくとも1つの制御記憶素子と、を含む装置の診断テストのための方法であって、
前記方法は、
前記処理回路による一連の命令の処理に続いて前記少なくとも1つの制御記憶素子に格納された内部状態の少なくとも1つの項目に基づいてチェックサムを生成するために、前記装置のチェックサム生成回路を制御するステップと、
診断制御エージェントがアクセス可能な診断記憶場所から
内部状態の前記少なくとも1つの項目に基づいて前記チェックサム生成回路によって生成された前記チェックサムを
前記診断制御エージェントが読み取るステップであって、前記診断制御エージェントは、前記処理回路で実行される
前記ソフトウェアおよび外部
診断デバイスの少なくとも一方を含む、ステップと、
前記処理回路による前記一連の命令の前記処理中に関心のあるイベントが発生したかどうかを判定するために、前記診断記憶場所から読み取られた前記チェックサムを目標値と比較するステップと、
を含む方法。
【請求項12】
前記診断制御エージェントによって設定された選択制御情報に基づいて、前記装置の複数の制御記憶素子に格納された内部状態の複数の項目の中から前記内部状態の少なくとも1つの項目を選択するステップをさらに含む、請求項11に記載の方法。
【請求項13】
請求項11および12のいずれか一項に記載の方法を実行するように装置を制御するためのコンピュータプログラム。
【請求項14】
前記コンピュータプログラムは、ソフトウェアテストライブラリ(STL)プログラムを含む、請求項13に記載のコンピュータプログラム。
【請求項15】
請求項13および14のいずれか一項に記載のコンピュータプログラムを格納する記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理の分野に関する。
【背景技術】
【0002】
データ処理装置は、命令に応答してデータ処理を実行する処理回路を有することができる。装置はまた、処理回路の動作を制御するための内部状態を格納する少なくとも1つの制御記憶素子を含むことができる。このような制御記憶素子の中には、特定の命令に応答して生成される処理結果に直接影響を与えない状態を格納する場合があるが、命令の処理時に達成される性能に影響を与える場合がある。
【発明の概要】
【0003】
少なくともいくつかの例は装置を提供し、装置は、命令に応答してデータ処理を実行する処理回路と、処理回路の動作を制御するための内部状態を格納する少なくとも1つの制御記憶素子と、処理回路による一連の命令の処理に続いて前記少なくとも1つの制御記憶素子に格納された内部状態の少なくとも1つの項目を受け取り、内部状態の少なくとも1つの項目に基づいてチェックサムを生成するチェックサム生成回路と、を含み、チェックサム生成回路は、情報が診断制御エージェントからアクセス可能な診断記憶場所に前記チェックサムを格納するように構成され、前記診断制御エージェントは、処理回路で実行されるソフトウェアおよび外部デバイスの少なくとも一方を含む。
【0004】
少なくともいくつかの例は、命令に応答してデータ処理を実行する処理回路と、処理回路の動作を制御するための内部状態を格納する少なくとも1つの制御記憶素子と、を含む装置の診断テストのための方法を提供し、本方法は、処理回路による一連の命令の処理に続いて前記少なくとも1つの制御記憶素子に格納された内部状態の少なくとも1つの項目に基づいてチェックサムを生成するために、装置のチェックサム生成回路を制御するステップと、診断制御エージェントがアクセス可能な診断記憶場所からチェックサム生成回路によって生成されたチェックサムを読み取るステップであって、診断制御エージェントは、処理回路および外部デバイスで実行されるソフトウェアの少なくとも1つを含む、ステップと、処理回路による一連の命令の処理中に関心のあるイベントが発生したかどうかを判定するために、診断記憶場所から読み取られたチェックサムを目標値と比較するステップと、を含む。
【0005】
上述の方法を実行するために制御装置にコンピュータプログラムを提供することができる。コンピュータプログラムは、記憶媒体に格納されてもよい。記憶媒体は、非一時的な記憶媒体であってもよい。
【0006】
本技術のさらなる態様、特徴および利点は、添付の図面と併せて読まれる例の以下の説明から明らかになろう。
【図面の簡単な説明】
【0007】
【
図1】データ処理装置の例を概略的に示す図である。
【
図2】内部状態の少なくとも1つの項目に基づいてチェックサムを生成するためのチェックサム生成回路を有する装置の例を示す図である。
【
図3】チェックサム生成回路の例をより詳細に示す図である。
【発明を実施するための形態】
【0008】
いくつかの理由により、データ処理装置の機能に関する情報が、処理回路または外部デバイスで実行されるソフトウェアなどの診断制御エージェントに公開される診断技術を提供することが有用となり得る。例えば、特定のプロセッサで実行することを目的としたソフトウェアのソフトウェア開発中に、外部診断デバイスは、プロセッサに組み込まれたトレースモジュールを制御して、命令の実行方法の態様をプローブし、トレースモジュールが出力するトレースデータに基づいてソフトウェアのバグを特定することができる。また、フィールドでデバイスが動作可能になると、エレクトロマイグレーションなどの経年変化の影響によりランダムに発生する可能性のあるハードウェア障害を検出するための診断手段が提供される。例えば、いくつかのセーフティクリティカルなアプリケーションでは、ソフトウェア内蔵セルフテスト(SBIST)アルゴリズムとも呼ばれるソフトウェアテストライブラリ(STL)を実行することが望ましい場合があり、ソフトウェアテストライブラリ(STL)は、ブート時にプロセッサ上で実行されるか、通常の動作中に定期的に実行され、例えば0または1でスタックしたゲートなどのハードウェア障害をスクラブする。
【0009】
診断制御エージェントが、特定のプロセッサに提供される処理ロジックの一部に関連する障害を検出することは比較的簡単であり、これらの障害は、処理回路によって実行される命令によって生成される処理結果から視認可能である。しかし、処理回路の動作を制御するための内部状態を格納する他の素子が存在する場合があるが、診断アルゴリズムではカバーするのがはるかに困難である。例えば、ソフトウェアテストライブラリ用のソフトウェアコードを開発する場合、ロジックの特定の部分(例えば約60%)をカバーするテストを記述するのは比較的簡単で費用対効果が高くなるが、カバレッジをロジックの70~80%に到達するように増やすことはますます難しくなり、費用がかかる。したがって、ソフトウェアテストライブラリの開発におけるソフトウェア開発時間の大部分は、この到達困難な状態のプローブに費やされ得る。また、そのような到達困難な状態をカバーすることができる場合でも、その状態のエラーをプローブするように設計されたアルゴリズムに必要な命令の数は非常に多くなる可能性がある(例えば、コードループの多くの反復と、ハードウェア障害によって引き起こされる可能性のあるエラーをプローブするための時間ベースの測定が必要である)。より長いテストアルゴリズムが必要になると、ソフトウェアテストライブラリの実行に関連する待ち時間が増加して、例えばデバイスがテストのために使用されない期間が長くなり、テストコードを格納するメモリオーバーヘッドも増加する。
【0010】
以下に説明する技術では、処理装置は、処理回路による一連の命令の処理に続いて、少なくとも1つの制御記憶素子に格納された内部状態の少なくとも1つの項目を受け取るチェックサム生成回路を含む。チェックサム生成回路は、受け取った内部状態の少なくとも1つの項目に基づいてチェックサムを生成する。チェックサムは、診断制御エージェントが情報にアクセスすることができる診断記憶場所に格納される。診断制御エージェントは、処理回路上で実行されるソフトウェアと外部デバイスの少なくとも一方であってもよい。
【0011】
したがって、従来の診断方法では到達が困難な内部状態の素子は、ハードウェアのチェックサム生成回路でプローブすることができ、チェックサムは外部デバイスまたは診断制御エージェントとして機能するソフトウェアに公開することができる。内部状態を直接公開するのではなく、内部状態に基づいてチェックサムを生成することにより、潜在的に大量の内部状態でエラーチェックを実行することに関連するオーバーヘッドを削減することができる。チェックサムは、診断制御エージェントがチェックする必要のあるビット数を減らすために、チェックサム生成回路に渡される内部状態の1つまたは複数の項目のダイジェストとして効果的に機能する。
【0012】
したがって、チェックサム生成回路により、多くの追加の回路オーバーヘッドを必要とせずに診断スキームでカバーすることができる処理ロジックの量を増やすことができ、これは、上述の理由でソフトウェアテストライブラリのカバレッジを強化するのに特に役立ち得る。
【0013】
いくつかの実施態様では、チェックサム生成回路は内部状態の特定の項目に固有である可能性があるため、チェックサム生成回路を複数のタイプの内部状態に適用する機能はない。
【0014】
他の例では、チェックサム生成回路は、いくつかの異なる制御記憶素子から内部状態の複数の項目を受け取ることができる場合がある。これにより、診断スキームの対象範囲を拡大することができる。
【0015】
内部状態の複数の項目がチェックサム生成回路に提供される場合に、1つのアプローチは、それらの項目のそれぞれに基づいてチェックサムを生成することであり、それらの項目のどの特定のサブセットをチェックサムの計算に使用するかを選択する能力はない。
【0016】
しかし、多くの制御記憶素子から受け取った内部状態の2つ以上の項目の中から内部状態の少なくとも1つの項目(これからチェックサムが生成される)を選択するセレクタをチェックサム生成回路に設けることが有用であり得る。セレクタは、診断制御エージェントによって設定されるか、または診断制御エージェントによって設定される構成情報に基づいて自動的に生成される選択制御信号に基づいて、内部状態の少なくとも1つの項目を選択することができる。これにより、診断制御エージェントは、特定のテストまたは調査の処理ロジックの特定領域のエラーに集中することができるように、内部状態の特定の項目を使用してチェックサムを生成することができる。これにより、エラーの場所をより正確に特定することができる。
【0017】
一例では、選択制御信号は、ソフトウェア書き込み可能レジスタに格納されている選択制御値から導出されてもよい。これは、上述のソフトウェアテストライブラリをサポートするのに役立ち、ソフトウェアテストライブラリは、ソフトウェア書き込み可能なレジスタに書き込んで、チェックサムの生成に使用する内部状態の項目を選択することができ、その後に、いくつかのテストを実行し、診断記憶場所で対応して生成されたチェックサムをキャプチャし、診断記憶場所から値を読み取り、それを期待値と比較して障害があったかどうかを判断する。
【0018】
いくつかの例では、チェックサム生成回路は、診断制御エージェントによって設定された、または診断制御エージェントによって設定された構成情報に基づいて生成されたチェックサム更新イネーブル信号に基づいて、内部状態の少なくとも1つの項目に応答してチェックサムを更新するかどうかを制御することができる。これにより、診断制御エージェントは、チェックサム生成回路がアクティブかどうかを設定したり、チェックサムが更新されるタイミングを指定したりすることができる。繰り返すが、チェックサム更新イネーブル信号は、ソフトウェア書き込み可能レジスタへの書き込みに基づいて更新イネーブル信号を制御する回路によってアサートすることができる。チェックサム更新イネーブル信号がデアサートされると、チェックサムの以前の値が更新されずに診断記憶場所に保持されてもよい。
【0019】
一例では、診断記憶場所は、処理回路によって実行されるソフトウェアがアクセス可能な、ソフトウェアアクセス可能性を備えていてもよい。これにより、上記で説明したソフトウェアテストライブラリなどの、処理回路で実行されるソフトウェアによってチェックサムが読み取り可能になる。このように内部状態に基づいて生成されたチェックサムをソフトウェアに公開することは異例であると見なされる場合がある。一部のシステムでは、一時的な障害(宇宙線や粒子の衝突による単一イベントの混乱など)から保護するために、チェックサム生成器が既に設けられている場合があるが、これは通常、このような障害の発生を検出し、ソフトウェアに対して透過的な方法で障害を静かに修正して、障害が発生しなかったかのように処理を続行することができるようにするために使用される。これは、多くの内部状態から導出されたチェックサムが処理回路で実行されているソフトウェアにアクセス可能になる、上記のチェックサム生成器とはまったく異なり、これは、処理回路ロジックの一部の到達困難な部分でエラーをプローブすることができるように大きなコードサイズを必要としない、より効率的なソフトウェアテストライブラリをサポートするのに役立ち得る。
【0020】
他の例では、診断記憶場所は、処理回路によって実行されるデータ処理の特性または処理回路によって実行されるデータ処理中に発生するイベントを示すトレースデータを格納するためにトレース回路によって使用されるトレースバッファを含むことができる。
【0021】
ソフトウェア開発を支援するために、処理回路によるデータ処理を監視し、処理中に発生した特定のイベントを示すトレースパケットを出力するオンチップトレースモジュールをプロセッサに含めることが有用であり得る。例えば、トレースパケットは、所与のアプリケーションのソフトウェアを実行するときに処理回路によって実行された命令の正確なシーケンスをトレースアナライザが再構築することができるようにするトレース情報を提供する。例えば、トレースパケットは、条件分岐の結果、例外または割り込みの発生、またはアクセスされたデータアドレスに関する情報を示すことができる。
【0022】
多くの内部制御状態から導出されたチェックサムをトレースバッファに出力することにより、特定の制御バッファがいっぱいになることによって生じる性能の損失などの、命令トレース自体から直接見えないイベントの視認性をトレースアナライザに提供することができる。また、チェックサムは、内部状態の項目の特定の組み合わせ(異なる記憶素子からの内部状態、または異なる時間にキャプチャされた同じ記憶素子からの内部状態の一連の値)から導出することができ、また、これにより、イベントのより複雑な組み合わせをチェックサム値から識別することができるが、これは他のトレースデータとは解析が異なる。これは、トレースデータの特定のパターンが識別されたときに、診断アクション(例えば、デバッグモードへの切り替え、トレースバッファから外部デバイスへのトレースデータの出力の開始または停止)をトリガーするトレーストリガーイベントを設定するのに役立ち得る。トレースバッファにチェックサムを提供することにより、トレーストリガーイベントを、特定の条件(目的の特定の値と一致するなど)を満たすチェックサムを条件とすることができ、これにより、追加のトリガー条件をより柔軟にサポートすることができる。これにより、特定のソフトウェアプログラムが実行されているときに何が起きているかを調査するトレースアナライザの機能が向上する。
【0023】
トレースバッファへのチェックサムの出力は、上記のソフトウェアでアクセス可能なレジスタへのチェックサムの出力に加えて実行することができる。あるいは、いくつかの実施形態では、ソフトウェアでアクセス可能なレジスタおよびトレースバッファの一方のみが、チェックサム生成回路によってチェックサムが出力される診断記憶場所として使用されてもよい。
【0024】
いくつかの実施態様では、チェックサム生成回路は、チェックサムの以前の値と内部状態の少なくとも1つの項目に依存するチェックサム関数を使用して、チェックサムの新しい値を生成してもよい。したがって、チェックサム関数は、チェックサムの最新値が次のチェックサム計算への入力として返される循環関数であってもよい。例えば、チェックサムは巡回冗長検査(CRC)関数を使用することができる。これは、一定期間にわたって記録された内部状態の一連の値に依存するチェックサムを生成するのに役立つことができ、これは、最終チェックサムの単一の値をチェックすることにより、これらの値のいずれかにエラーが存在するかどうかをチェックすることができるためである。周期的なチェックサム生成関数は、異なる記憶素子に格納された異なる内部状態の複数のピースからチェックサムを導出する場合にも役立ち得る。この場合、上記のセレクタを使用して、それぞれの記憶素子から内部状態の異なる項目を選択するサイクルを実行することができ、最終チェックサムが内部状態の選択されたすべての項目に依存するまで、次の内部状態の項目でチェックサムの更新が折り返されるたびに、単一のチェックサム値が繰り返し計算され、状態のこれらの項目のエラーは、最終チェックサムが期待される結果と一致するかどうかから検出することができる。繰り返すが、エラーをプローブしたり、トレーストリガーイベントを検出したりするためにチェックする必要がある状態のビットが少ないため、ソフトウェアテストライブラリまたはトレースインフラストラクチャの設計が簡素化される。
【0025】
原則として、チェックサム生成回路は、プロセッサの任意の記憶素子に格納されたプロセッサの状態の任意の項目に適用することができる。しかし、実際には、プロセッサ内の多くの記憶素子は、処理回路上で実行されるソフトウェアによって書き込みまたは読み取りが可能で、外部診断デバイスがデバッグモードを使用してプローブすることができるレジスタなど、診断制御エージェントから既にアクセス可能であってもよい。したがって、実際には、チェックサム生成回路をチェックサム生成回路以外のメカニズムを介して診断制御エージェントがアクセスできない、内部状態がその素子に記憶される、少なくとも1つの制御記憶素子に、チェックサム生成回路を適用することが有用であり得る。
【0026】
特に、プロセッサの状態の少なくとも1つの項目は、プロセッサのマイクロアーキテクチャ状態であってもよい。所与の命令セットアーキテクチャと互換性を保つためにプロセッサで提供する必要があり、かつ、通常、処理回路の少なくとも1つの動作状態で実行されるソフトウェアによって直接読み取り/書き込みが可能であるアーキテクチャ状態とは異なり、マイクロアーキテクチャの状態は、プロセッサの特定のハードウェア実装で提供される状態であり、プロセッサがサポートする命令セットアーキテクチャでは直接必要がない。マイクロアーキテクチャの状態は命令の実行に影響を与える可能性があるが、命令はそのマイクロアーキテクチャの状態を直接読み書きすることはできない。このようなマイクロアーキテクチャの状態は、そのような状態記憶素子のエラーが必ずしも誤った処理結果をもたらすとは限らず、性能の損失を引き起こす可能性があるため、理由がより診断困難であり得る従来の診断方法を使用してプローブするのは比較的難しい場合がある。
【0027】
このような到達困難な制御記憶素子の例は、
・処理回路によって処理されたそれぞれの命令間のレジスタハザードを検出するためのレジスタ追跡情報を格納するレジスタハザード回路と、
・メモリシステムによってサービスされるそれぞれのメモリアクセス要求間のアドレスハザードを検出するためのアドレス追跡情報を格納するメモリハザード回路と、
・キャッシュによるサービスを待機している要求、キャッシュへの割り当てを待機しているデータ、またはメモリへのライトバックを待機しているデータに関する情報を格納するキャッシュバッファ(ラインフィルバッファまたはライトバックバッファなど)と、
・バスに対して行われたバス要求に関する情報を格納するバス制御回路と、
・メモリに対して行われたメモリアクセス要求に関する情報を格納するメモリコントローラと、
のいずれかであってもよい。
【0028】
上記の制御記憶素子のタイプの1つからチェックサム生成回路に状態を公開し、チェックサムにソフトウェアからアクセスすることができるようにすることで、ソフトウェアテストライブラリ(STL)の設計を大幅に簡素化し、これらの素子のエラーをプローブするためのSTLアルゴリズムをより効率的にする。
【0029】
図1は、プロセッサコア2の構成要素の一例を示している。プロセッサコアは、いくつかのパイプラインステージを有する処理パイプラインを含むことができ、パイプラインステージは、命令キャッシュ6から命令をフェッチするためのフェッチステージ4、フェッチされた命令をデコードして、どの処理操作を実行する必要があるかを特定し、適切な処理操作を実行するためにパイプラインの下流ステージを制御するための制御信号を生成するためのデコードステージ8、必要なオペランドが利用可能になると実行する命令を発行する発行ステージ10、レジスタ14から読み取られたオペランドに対してデータ処理操作を実行するための命令を実行して、処理結果を生成する実行ステージ12、および、処理結果をレジスタ14に書き戻すライトバックステージ16を含む。これは潜在的なパイプラインアーキテクチャの単なる一例であり、他の例はパイプラインステージの構成が異なる場合があることを理解されたい。例えば、アウトオブオーダープロセッサでは、命令によって指定されたアーキテクチャレジスタをハードウェアに備えられた物理レジスタ14にマッピングするためのレジスタリネームステージがあってもよい。また、実行ステージ12は、いくつかの実行パイプラインステージに分割されてもよい。
【0030】
実行ステージ12は、例えば算術演算または論理演算を実行するための算術/論理ユニット(ALU)20、浮動小数点数として表されるデータ値を含む演算を実行するための浮動小数点ユニット22、および、メモリシステムからレジスタ14にデータをロードしたり、レジスタ14からメモリシステムにデータを格納したりするためのメモリアクセス操作を処理するロード/ストアユニット24を含む、いくつかの実行ユニットを含む。メモリシステムは、命令キャッシュ6、データキャッシュ30(および潜在的にさらなるレベルのキャッシュ)、ならびにDRAMユニットまたは他の形態メモリなどの、プロセッサコアの外側に配置され得るメモリシステム32の残りの部分を含んでもよい。
図1に示す実行ユニット20、22、24の特定のセットおよび特定のメモリ階層6、30、32は、単なる一例であることが理解されよう。
【0031】
図1に示すように、プロセッサコアは、プロセッサパイプラインによる処理命令を制御するために使用される内部状態の項目を格納するいくつかの制御記憶素子を含んでもよい。これらは、パイプラインによって実行されるソフトウェア命令からは見えないマイクロアーキテクチャ状態の項目であってもよい(すなわち、プロセッサがサポートする命令セットアーキテクチャの命令には、このマイクロアーキテクチャ状態に値を書き込むか、このマイクロアーキテクチャ状態から読み取ることを要求するアーキテクチャ定義がない)。例えば、命令キャッシュ6およびデータキャッシュ30は、実際のデータまたは命令を格納するキャッシュ記憶34に加えて、キャッシュに対してまたはキャッシュによって行われた要求をバッファリングするための1つまたは複数のバッファを含むことができる。例えば、命令キャッシュ6は、フェッチステージ4からのフェッチ要求をバッファリングしてキャッシュから命令をフェッチするための要求バッファ36を含むことができる。データキャッシュ30は、ロード/ストアユニット24によってキャッシュに対してなされた読み取りまたは書き込み要求をバッファリングするための同様の要求バッファ36を有することができる。また、キャッシュ6、30は、メモリシステム32から読み取られたがキャッシュ記憶34への割り当てを待っているデータまたは命令をバッファリングするためのラインフィルバッファ38を有することができる。データキャッシュ30は、メモリ32に書き戻されるデータの要求をバッファリングするライトバックバッファ40を含むこともできる。
【0032】
制御記憶素子の別の例は、レジスタハザードロジック42であり、それは、パイプライン内で待機している命令間の書き込み後の読み取り(RAW)、読み取り後の書き込み(WAR)、または書き込み後の書き込み(WAW)ハザードを識別するために発行ステージ10で使用することができる。例えば、レジスタハザードロジックは、実行の発行を待っている命令によって読み書きされるレジスタのレジスタ番号を追跡するためのバッファ44を有してもよい。レジスタハザードロジック42は、以前の命令が完了するまで、後続の命令が、実行のために発行される以前の命令と同じレジスタに読み書きするのを防ぐことができる。
【0033】
また、ロード/ストアユニット24は、同じアドレスを指定するそれぞれのメモリアクセス命令間のデータハザードを検出するためのメモリハザードロジック46に関連付けられてもよい。例えば、メモリハザードロジック46は、メモリシステムにストア要求がまだ発行されていないストア命令のアドレスを追跡するストアバッファ48を含むことができるので、同じアドレスへの後続のロード命令が生じた場合には、ストア命令に応答して格納されたデータ値を使用してロードを処理することができ、また、以前のストアの同じアドレスへの後続のストア命令が生じた場合には、これら2つのストア命令のメモリに格納されるデータ値をメモリへの単一の要求に結合することができる。また、メモリアクセス要求が適切な順序で処理されるように、メモリハザードロジックを使用することができる。
【0034】
図2に示すように、プロセッサコア2は、より大きなデータ処理システム内に含まれてもよく、外部メモリ52と共に使用される。コア2は、バスユニット54およびメモリコントローラ56を介してメモリにアクセスすることができる。
図2はシステム50内の単一のプロセッサコア2のみを示しているが、他の例では、これは、2つ以上のプロセッサコアがバスユニット54を介して通信し、共有メモリ52にアクセスするマルチプロセッサシステムであってもよい。また、ディスプレイコントローラ、グラフィックス処理ユニットなどのような他のマスターデバイスをバスユニットに結合することもでき、バスユニット54は周辺機器などの他のスレーブデバイスへのアクセスを制御することもできる。
図2に示すように、バスユニット54またはメモリコントローラ56内には、バス上またはメモリへの要求をそれぞれバッファリングする要求キュー60、62などの内部制御状態の項目がさらに存在してもよい。
【0035】
したがって、プロセッサコアでの命令の処理に影響を与える値を格納する可能性があるシステム全体の内部状態の部分が多数存在する可能性がある。このような内部状態の項目はハードウェア障害に対して脆弱である可能性があり、例えば、エレクトロマイグレーションなどの経年変化の影響により、特定のゲートがバイナリ0またはバイナリ1などの特定の値にスタックし、内部状態の所与の部分に誤った値が格納される場合がある。安全性が重要なアプリケーションの場合、このようなハードウェア障害をプローブするためのソフトウェアテストライブラリ(STL)を提供すると有用であり得る。しかし、上記の内部制御状態のタイプをプローブすることができるSTLを開発することは困難である。通常、ロジックの約60%をカバーするテストを記述するのは比較的簡単で費用対効果が高くなるが、70~80%のカバレッジを達成することは非常に困難で高価である。
【0036】
図2に示すように、プロセッサコア2には、小さな内部チェックサムエンジンとして機能するチェックサム生成器70を備えることができる。プロセッサコア2および周囲の処理システムの様々なユニット74(例えば、上述の素子36、38、40、42、46、60、62のいずれか)は、それらの内部状態の複数ビットをチェックサムユニット70に公開することができる。診断制御エージェント(プロセッサコア2で実行されるSTLソフトウェアなど)は、チェックサム生成器70を使用してチェックサム値を生成するために使用する特定の内部状態を選択することができる。チェックサム値は、ソフトウェアでアクセス可能なチェックサムレジスタ72に格納され、そこからSTLソフトウェアによって読み取られ、期待値と比較されて、この到達困難な状態の障害を識別することができる。
【0037】
したがって、ラインフィルバッファの制御ビット、バス制御ユニットの識別子ビットなど、内部状態に到達しにくいものは、テストソフトウェアで視認可能になる。これにより、カバレッジが向上すると共に、STLコードサイズと開発時間が削減されるが、これは、複数のループを使用する代替技術と高価な時間ベースのチェックをSTLで使用して、内部状態のこれらの項目をプローブする場合よりもはるかに少ない命令で到達困難な領域をテストすることができるためである。
【0038】
図3は、チェックサム生成ロジック70をより詳細に示す。セレクタ80は、上述のように、様々な制御記憶素子74から内部状態のいくつかの項目82を受け取る。所与の実施態様では、上記の制御記憶素子36、38、42、46、40、60、62のすべてがそれらの値をチェックサム生成器70に提供する必要はないことが理解されよう(制御記憶素子74は、これらの要素のサブセットであっても、他の要素を含んでもよい)。セレクタ80は、チェックサム計算器84に供給されるこれらの状態項目の1つを選択し、この選択は、ソフトウェアで書き込み可能な選択制御レジスタ88に基づいて設定された選択制御信号86に基づいて行われる。したがって、STLコードは、制御値を選択制御レジスタ88に書き込んで、チェックサムを計算するためにどの内部状態の項目を使用すべきかを指定することができる。
【0039】
チェックサム計算器84は、チェックサム86の以前の値およびチェックサム80によって選択された内部状態88の選択された項目に依存する循環関数を使用して、チェックサムの新しい値を計算する。CRCまたは類似の関数などの既知のチェックサム関数を使用することができる。チェックサムの新しい値は、チェックサムレジスタ72に書き込まれる。チェックサムレジスタが更新されるかどうか72は、チェックサムイネーブル信号90に依存し、これは、プロセッサ2で実行されるソフトウェアからアクセス可能なソフトウェア書き込み可能レジスタ92に再び依存する。例えば、ソフトウェア書き込み可能レジスタ92の特定のビットに書き込むことにより、そのビットに書き込まれた値に依存して、チェックサムイネーブル信号がアサートまたはデアサートされるようにトリガーすることができる。チェックサムレジスタ72は、非同期に更新されるレジスタとして実装することができ、チェックサムイネーブル信号90がアサートされるたびに、チェックサム機能84をチェックサムの以前の値に適用した結果およびセレクタによって提供される内部状態89の現在選択されている項目に基づいてチェックサム値が更新される。あるいは、チェックサムレジスタ72は、チェックサムイネーブル信号90がアサートされた場合にクロック信号の各立ち上がりエッジ(または各立ち下がりエッジ)がチェックサムレジスタの次の更新をトリガーし、一方、イネーブル信号90がデアサートされた場合にクロック信号のクロックパルスに関係なく、レジスタが現在の状態を保持する、同期レジスタであってもよい。
【0040】
したがって、1つまたは複数の内部状態から導出されたチェックサムをソフトウェアに公開するためにハードウェア内にチェックサム生成器を設けることで、ソフトウェアテストライブラリの開発を大幅に簡素化することができる。
【0041】
特定のアプリケーションでは、チェックサム生成器を使用して、プロセッサパイプラインのレジスタハザードを解析し、パイプラインをストールするか、プロデューサからコンシューマの命令にデータを転送することにより、検出されたハザードに応答するレジスタハザードロジック42のカバレッジを増やすことができる。このようなハザードロジックでは、2種類の障害が発生する可能性がある。第一に、例えば、レジスタ追跡バッファ44の記憶素子で発生した0または1のスタックエラーにより、ハザードロジックが、ハザードがないと誤って判断するが、実際にはハザードが存在する障害が存在する場合がある。第2のタイプの障害は、ハザードロジック42がハザードがあると誤って判断するが、ハザードは実際には存在しない場合がある。第1のタイプの障害は、データの破損につながるため、STLで比較的簡単に検出することができる。これは、STLに含めるのが比較的簡単で費用効率の高いチェックサムを計算するためのソフトウェアベースのアルゴリズムを使用して検出することができる。しかし、第2のタイプの障害は、完全なデッドロックが発生しない限り、これらの障害が、計時しチェックするのが困難であり得るわずかな性能の低下を引き起こすだけであるため、STLで検出するのがはるかに困難であるが、それはキャッシュミスなど、他のいくつかの要因が影響するからである。第2のタイプの障害については、チェックサム生成器を備えた上記の技術を使用して、ハザードロジック42の内部状態をチェックサムテストハードウェアに公開することができる。小さなコードを実行すると、レジスタ追跡データから導出されたチェックサムが予想されるチェックサムと一致しないことにより、誤ったハザードを特定することができる。したがって、これにより、第2のタイプの障害のカバレッジが拡大し、第1のタイプの障害をプローブするためのコードサイズが小さくなる場合がある。これは大きな利点となり得る。例えば、上記のチェックサム生成回路70を有さず、(データの破損を引き起こす)第1のタイプの障害のみをカバーして、(性能の低下のみを引き起こす)第2のタイプの障害を無視する、特定のプロセッサ設計のハードウェア障害から保護するように設計されたSTLの場合では、STLは、コードベースの大部分が専用であるにもかかわらず、レジスタハザードロジック42のカバレッジの約50%にしか到達することができなかった。プロセッサ設計にチェックサム生成インフラストラクチャ70を含めることにより、第1のタイプの障害のカバレッジははるかに少ないコードしか必要とせず、また第2のタイプの障害のより大きなカバレッジも可能である。これはほんの一例であり、チェックサム生成器70を使用して上記で説明した内部状態の他の項目を調べることで、同様の利点が得ることができる。
【0042】
図2を参照すると、チェックサム生成回路70によって生成されたチェックサムを診断制御エージェントに公開する別の方法は、診断上の理由でプロセッサコアの動作を監視するトレースモジュール102によって使用され得るトレースバッファ100にチェックサムを提供することであってもよい。トレースモジュール102がコアの動作を監視し、トレースパケットをトレースバッファ100に出力するように、ソフトウェア開発を支援するためにトレースモジュール102を設けることができる。トレースパケットは、所与のソフトウェアが実行されたときに発生したイベントに関する情報を提供する。例えば、トレースデータには、例えば実行された命令内の条件分岐の結果、および/または例外の発生を追跡することによって、実行された命令の正確な(命令ごとの)シーケンスを再構築できる情報を記録することができる。また、トレースモジュールは、アクセスされたデータアドレスまたは他の情報を記録することができる。通常、トレースモジュールは、処理回路内の制御インフラストラクチャに関連する、上述のマイクロアーキテクチャ状態74の項目には関係しない、というのはこれらがプログラムのバグを反映するとは予想されないからである。しかし、チェックサムをトレースバッファに公開することにより、特定のイベントパターンが検出されたときにトレースモジュールが何らかのアクションを実行するのに役立つ可能性がある特定のイベントの組み合わせを検出することができる。トレースバッファ100からのデータは、例えば、外部からアクセス可能な出力ポートを介して読み出すことにより、外部診断装置からアクセス可能であってもよい。同様に、外部診断デバイスは、トレースモジュール内の構成レジスタを構成して、検出するトレーストリガーイベントの定義や、トレースバッファ100にキャプチャされる情報の種類の構成などの設定を構成することができる。したがって、トレースバッファ100は、チェックサム生成器70が生成器チェックサムを書き込み、診断制御エージェントからアクセスできるようにする診断記憶場所の別の例である。
図2は、チェックサムがチェックサムレジスタ72とトレースバッファ100の両方に書き込まれる例を示しているが、他の例ではこれら2つのオプションのうちの1つしか提供できないことが理解されよう。
【0043】
本出願では、「~するように構成される」という語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。これに関連して、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有してもよく、あるいはプロセッサまたは他の処理装置が機能を実行するようにプログラムされてもよい。「するように構成される」は、定義された動作を提供するために装置要素が何らかの方法で変更される必要があることを意味しない。
【0044】
本発明の例示的な実施形態を添付の図面を参照しながら本明細書で詳細に説明したが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲および趣旨から逸脱することなく、当業者によって様々な変更および修正がその中で達成され得ることを理解されたい。
【符号の説明】
【0045】
2 プロセッサコア
4 フェッチステージ
6 命令キャッシュ
8 デコードステージ
10 発行ステージ
12 実行ステージ
14 物理レジスタ
16 ライトバックステージ
20 算術/論理ユニット(ALU)
22 浮動小数点ユニット
24 ロード/ストアユニット
30 データキャッシュ
32 メモリシステム
34 キャッシュ記憶
36 要求バッファ、制御記憶素子
38 ラインフィルバッファ、制御記憶素子
40 ライトバックバッファ、制御記憶素子
42 レジスタハザードロジック、制御記憶素子
44 レジスタ追跡バッファ
46 メモリハザードロジック、制御記憶素子
48 ストアバッファ
50 システム
52 外部メモリ、共有メモリ
54 バスユニット
56 メモリコントローラ
60 要求キュー、制御記憶素子
62 要求キュー、制御記憶素子
70 チェックサム生成器
72 チェックサムレジスタ
74 マイクロアーキテクチャ状態、制御記憶素子、ユニット
80 セレクタ、チェックサム
82 内部状態の項目
84 チェックサム機能、チェックサム計算器
86 チェックサム、選択制御信号
88 選択制御レジスタ、内部状態
89 内部状態
90 チェックサムイネーブル信号
92 ソフトウェア書き込み可能レジスタ
100 トレースバッファ
102 トレースモジュール