(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-04
(54)【発明の名称】分岐記録構成値が所定の条件を満たすときに分岐記録を有効化すること
(51)【国際特許分類】
G06F 11/34 20060101AFI20240927BHJP
G06F 9/38 20180101ALI20240927BHJP
G06F 9/32 20180101ALI20240927BHJP
【FI】
G06F11/34 199
G06F9/38 330Z
G06F9/32 320Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024519476
(86)(22)【出願日】2022-08-11
(85)【翻訳文提出日】2024-03-28
(86)【国際出願番号】 GB2022052096
(87)【国際公開番号】W WO2023057733
(87)【国際公開日】2023-04-13
(32)【優先日】2021-10-05
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ウィリアムズ、マイケル ジョン
【テーマコード(参考)】
5B013
5B033
5B042
【Fターム(参考)】
5B013BB20
5B033FA21
5B033FA22
5B033FA23
5B042MC02
(57)【要約】
装置は、コールドリセットを実行し、コールドリセットでリセットされる状態のサブセットをリセットすることによってウォームリセットを実行する、リセット回路と、処理された分岐命令に関する情報を分岐記録記憶回路に記憶するために分岐記録を実行する分岐記録回路とを備える。分岐記録回路は、少なくとも1つのレジスタに保持されたウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすか否かを判定し、ウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たさないとき、分岐記録を無効化する。分岐記録記憶回路は、処理された分岐命令に関する情報を診断分析に利用可能にするように構成される。コールドリセットは、ウォーム分岐記録構成値及びコールド分岐記録構成値の両方をリセットすることを含み、ウォームリセットは、ウォーム分岐記録構成値をリセットし、コールド分岐記録構成値を変更しないままにすることを含む。
【特許請求の範囲】
【請求項1】
装置であって、
命令を処理する処理回路と、
コールドリセットトリガイベントに応答して、前記処理回路をリセットすることによってコールドリセットを実行し、ウォームリセットトリガイベントに応答して、前記コールドリセットトリガイベントに応答してリセットされる状態のサブセットをリセットすることによってウォームリセットを実行する、リセット回路と、
分岐記録を実行して、処理された分岐命令に関する情報を分岐記録記憶回路に記憶する分岐記録回路とを備え、
前記分岐記録回路は、
少なくとも1つのレジスタに保持されたウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすか否かを判定し、
前記ウォーム分岐記録構成値及びコールド分岐記録構成値が前記所定の条件を満たすとき、前記分岐記録を有効化するように構成され、
前記分岐記録記憶回路は、前記処理された分岐命令に関する前記情報を診断分析に利用可能にするように構成され、
前記コールドリセットは、前記ウォーム分岐記録構成値及び前記コールド分岐記録構成値の両方をリセットすることを含み、前記ウォームリセットは、前記ウォーム分岐記録構成値をリセットし、前記コールド分岐記録構成値を変更しないままにすることを含む、装置。
【請求項2】
前記分岐記録回路は、前記少なくとも1つのレジスタに保持された前記ウォーム分岐記録構成値及び前記コールド分岐記録構成値が前記所定の条件を満たすか否かを、前記ウォーム分岐記録構成値と前記コールド分岐記録構成値との比較に基づいて判定するように構成される、請求項1に記載の装置。
【請求項3】
前記所定の条件は、
前記ウォーム分岐記録構成値と前記コールド分岐記録構成値とが等しいことと、
前記ウォーム分岐記録構成値と前記コールド分岐記録構成値とが異なることとのうちの1つを含む、請求項1又は2に記載の装置。
【請求項4】
前記少なくとも1つのレジスタは、前記ウォーム分岐記録構成値及びコールド分岐記録構成値を複数の状態のうちの1つに設定するようにソフトウェアによって構成可能であり、
前記ウォーム分岐記録構成値は、ウォーム構成値及びウォームリセット値のうちの1つを有し、前記ウォームリセット及び前記コールドリセットは両方とも、前記ウォーム分岐記録構成値を前記ウォームリセット値にリセットすることを含む、請求項1~3のいずれか一項に記載の装置。
【請求項5】
前記複数の状態は、リセット開始状態を含み、前記分岐記録回路は、前記リセット回路が前記ウォームリセットを実行することに応答して、前記分岐記録を有効化するために、前記ウォーム分岐記録構成値及びコールド分岐記録構成値が前記リセット開始状態を示すことに応答する、請求項4に記載の装置。
【請求項6】
前記リセット開始状態は、前記ウォーム構成値を有する前記ウォーム分岐記録構成値と、第1の値を有する前記コールド分岐記録構成値とによって示され、
前記分岐記録回路は、前記ウォーム分岐記録構成値が前記ウォームリセット値を有し、前記コールド分岐記録構成値が前記第1の値を有するとき、前記所定の条件が満たされていると判定するように構成され、
前記分岐記録回路は、前記ウォーム分岐記録構成値が前記ウォーム構成値を有し、前記コールド分岐記録構成値が前記第1の値を有するときに、前記所定の条件が満たされていないと判定するように構成される、請求項5に記載の装置。
【請求項7】
前記複数の状態は、リセット停止状態を含み、前記分岐記録回路は、前記リセット停止状態を示す前記ウォーム分岐記録構成値及び前記コールド分岐記録構成値に応答して、前記リセット回路が前記ウォームリセットを実行することに応答して、前記分岐記録を無効化する、請求項4~6のいずれか一項に記載の装置。
【請求項8】
前記リセット停止状態は、前記ウォーム構成値を有する前記ウォーム分岐記録構成値と、第2の値を有する前記コールド分岐記録構成値とによって示され、
前記分岐記録回路は、前記ウォーム分岐記録構成値が前記ウォーム構成値を有し、前記コールド分岐記録構成値が前記第2の値を有するとき、前記所定の条件が満たされていると判定するように構成され、
前記分岐記録回路は、前記ウォーム分岐記録構成値が前記ウォームリセット値を有し、前記コールド分岐記録構成値が前記第2の値を有するとき、前記所定の条件が満たされていないと判定するように構成される、請求項7に記載の装置。
【請求項9】
前記複数の状態は、リセットを介した記録状態を含み、前記分岐記録回路は、前記リセット回路が前記ウォームリセットを実行する前及び後の両方で前記分岐記録を有効化するために、前記リセットを介した記録状態を示す前記ウォーム分岐記録構成値及び前記コールド分岐記録構成値に応答する、請求項4~8のいずれか一項に記載の装置。
【請求項10】
前記リセットを介した記録状態は、前記ウォームリセット値を有する前記ウォーム分岐記録構成値及び第1の値を有する前記コールド分岐記録構成値によって示され、
前記分岐記録回路は、前記ウォーム分岐記録構成値が前記ウォームリセット値を有し、前記コールド分岐記録構成値が前記第1の値を有するとき、前記所定の条件が満たされたと判定するように構成される、請求項9に記載の装置。
【請求項11】
前記コールド分岐記録構成値は、コールド構成値及びコールドリセット値のうちの1つを有し、前記コールドリセットは、前記コールド分岐記録構成値を前記コールドリセット値にリセットすることを含み、
前記分岐記録回路は、前記ウォーム分岐記録構成値が前記ウォームリセット値を有し、前記コールド分岐記録構成値が前記コールドリセット値を有するとき、前記所定の条件が満たされていないと判定するように構成される、請求項4~10のいずれか一項に記載の装置。
【請求項12】
前記コールドリセットトリガイベントに応答して、前記リセット回路は、前記コールド分岐記録構成値を、リセット値選択信号によって指定される第1の値及び第2の値のうちの1つにリセットするように構成される、請求項4~10のいずれか一項に記載の装置。
【請求項13】
前記処理回路は、第1の値を有する制御レジスタに保持された制御値に応答して、前記処理回路が所与の実行レベルよりも低い特権実行レベルで動作している間に前記分岐記録記憶回路がアクセスされることを防止する、請求項1~12のいずれか一項に記載の装置。
【請求項14】
前記分岐記録回路は、所与の実行レベルで動作する前記処理回路に応答して、前記ウォーム分岐記録構成値及び前記コールド分岐記録構成値に基づいて前記分岐記録を有効化するか否かを判定し、前記所与の実行レベルよりも低い特権実行レベルで動作する前記処理回路に応答して、前記ウォーム分岐記録構成値及び前記コールド分岐記録構成値とは独立して、前記分岐記録が有効化されるか無効化されるかを判定する、請求項1~13のいずれか一項に記載の装置。
【請求項15】
前記処理された分岐命令に関する情報は、処理された命令のプログラムフローが再構築されることを可能にする情報を含む、請求項1~14のいずれか一項に記載の装置。
【請求項16】
前記処理された分岐命令に関する前記情報は、
処理された分岐が取られた命令の命令アドレスと、
前記処理された分岐が取られた命令のターゲットアドレスとのうちの少なくとも1つを含む、請求項1~15のいずれか一項に記載の装置。
【請求項17】
前記分岐記録記憶回路は、前記処理された分岐命令に関する前記情報を、
外部診断ハードウェアと、
前記処理回路上で実行される診断プロセスとのうちの少なくとも1つに利用可能にするように構成される、請求項1~16のいずれか一項に記載の装置。
【請求項18】
ウォーム分岐記録構成値及びコールド分岐記録構成値の両方が、同じレジスタに保持される、請求項1~17のいずれか一項に記載の装置。
【請求項19】
前記リセット回路は、前記ウォームリセットトリガイベントに応答して、前記分岐記録記憶回路のリセットを禁止する、請求項1~18のいずれか一項に記載の装置。
【請求項20】
前記コールドリセットトリガイベントは、電源オンイベントを含む、請求項1~19のいずれか一項に記載の装置。
【請求項21】
前記ウォームリセットトリガイベントは、ウォッチドッグカウンタの経過に応答して生成されるタイムアウト信号を含む、請求項1~20のいずれか一項に記載の装置。
【請求項22】
前記リセット回路は、複数の異なるウォームリセットトリガイベントの各々に応答して、前記コールドリセットトリガイベントに応答してリセットされる前記状態の異なるサブセットをリセットする、請求項1~21のいずれか一項に記載の装置。
【請求項23】
方法であって、
処理回路上で命令を処理することと、
コールドリセットトリガイベントに応答して、前記処理回路をリセットすることによってコールドリセットを実行することと、
ウォームリセットトリガイベントに応答して、前記コールドリセットトリガイベントに応答してリセットされる状態のサブセットをリセットすることによってウォームリセットを実行することと、
少なくとも1つのレジスタに保持されたウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすか否かを判定することと、
前記ウォーム分岐記録構成値及びコールド分岐記録構成値が前記所定の条件を満たすとき、分岐記録を有効化することであって、前記分岐記録が、処理された分岐命令に関する情報を分岐記録記憶回路に記憶することを含む、有効化することとを含む方法であって、
前記方法は、前記処理された分岐命令に関する前記情報を診断分析に利用可能にすることを含み、
前記コールドリセットは、前記ウォーム分岐記録構成値及び前記コールド分岐記録構成値の両方をリセットすることを含み、前記ウォームリセットは、前記ウォーム分岐記録構成値をリセットし、前記コールド分岐記録構成値を変更しないままにすることを含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本技法は、データ処理の分野に関する。
【背景技術】
【0002】
データ処理装置は、分岐記録を実行するように構成されてもよく、分岐記録は、処理された分岐命令に関する情報を取り込み、取り込まれた情報を使用して、後のソフトウェアがプロセス(例えば、診断、デバッグ、及び/又はプロファイリングプロセス)を実行することを可能にする技法である。
【発明の概要】
【0003】
本技法の一例から見ると、
命令を処理する処理回路と、
コールドリセットトリガイベントに応答して、処理回路をリセットすることによってコールドリセットを実行し、ウォームリセットトリガイベントに応答して、コールドリセットトリガイベントに応答してリセットされる状態のサブセットをリセットすることによってウォームリセットを実行する、リセット回路と、
分岐記録を実行して、処理された分岐命令に関する情報を分岐記録記憶回路に記憶する分岐記録回路とを備え、
分岐記録回路は、
少なくとも1つのレジスタに保持されたウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすか否かを判定し、
ウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすとき、分岐記録を有効化するように構成され、
分岐記録記憶回路は、処理された分岐命令に関する情報を診断分析に利用可能にするように構成され、
コールドリセットは、ウォーム分岐記録構成値及びコールド分岐記録構成値の両方をリセットすることを含み、ウォームリセットは、ウォーム分岐記録構成値をリセットし、コールド分岐記録構成値を変更しないままにすることを含む、装置が提供される。
【0004】
本技法の別の例から見ると、
処理回路上で命令を処理することと、
コールドリセットトリガイベントに応答して、処理回路をリセットすることによってコールドリセットを実行することと、
ウォームリセットトリガイベントに応答して、コールドリセットトリガイベントに応答してリセットされる状態のサブセットをリセットすることによってウォームリセットを実行することと、
少なくとも1つのレジスタに保持されたウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすか否かを判定することと、
ウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすとき、分岐記録を有効化することであって、分岐記録が、処理された分岐命令に関する情報を分岐記録記憶回路に記憶することを含む、有効化することとを含む方法であって、
方法は、処理された分岐命令に関する情報を診断分析に利用可能にすることを含み、
コールドリセットは、ウォーム分岐記録構成値及びコールド分岐記録構成値の両方をリセットすることを含み、ウォームリセットは、ウォーム分岐記録構成値をリセットし、コールド分岐記録構成値を変更しないままにすることを含む、方法が提供される。
【図面の簡単な説明】
【0005】
本技法の更なる態様、特徴、及び利点は、添付の図面と併せて読まれる以下の例の説明から明らかとなる。
【
図1】本技法が実装され得るデータ処理システムを概略的に示す。
【
図2】ウォームリセットドメイン、非ウォームリセットドメイン及びコールドリセットドメインを概略的に示す。
【
図3】ウォーム分岐記録構成値及びコールド分岐記録構成値(BREW、BREC)が分岐記録回路の動作を制御するためにどのように構成され得るかの一例を示す表である。
【
図4】
図3に示された例による、ソフトウェアによる構成後、及びウォームリセット後に、ウォーム分岐記録構成値及びコールド分岐記録構成値(BREW、BREC)に何が発生するかを示す図である。
【
図5】ウォーム分岐記録構成値及びコールド分岐記録構成値(BREW、BREC)が分岐記録回路の動作を制御するためにどのように構成され得るかの別の例を示す表である。
【
図6】ウォーム分岐記録構成値及びコールド分岐記録構成値(BREW、BREC)の制御下で、分岐記録回路によって実行される方法の一例を示すフロー図である。
【
図7】リセットプロセスの一例を示すフロー図である。
【
図8】データ処理システムにおいて実行され得る様々なプロセスを概略的に示す。
【
図9】所与の実行レベル(
図9の例におけるEL3)よりも低い特権実行レベルにおけるプロセスが分岐記録バッファに記憶された情報にアクセスすることを可能にするか否かを判定する一例を示すフロー図である。
【発明を実施するための形態】
【0006】
添付図面を参照して例示的な実装形態を考察する前に、例示的な実施形態及び関連する利点について以下の説明が提供される。
【0007】
1つの例示的な構成によれば、命令を処理するための処理回路を備える装置が提供される。例えば、処理回路は、中央処理装置(CPU)、CPU内の処理パイプライン、又は命令を処理することができる装置内の任意の他の回路であってもよい。
【0008】
本装置はまた、コールドリセットトリガイベントに応答して、処理回路をリセットすることによってコールドリセットを実行し、ウォームリセットトリガイベントに応答して、コールドリセットトリガイベントに応答してリセットされる状態のサブセットをリセットすることによってウォームリセットを実行する、リセット回路を備える。例えば、リセットは、リセットの対象となる任意の状態の値をデフォルト(リセット)値に設定することを伴い得る(例えば、これは、0又は1であり得る-場合によっては、0にリセットされる状態のいくつかの項目及び1にリセットされる状態の他の項目が存在し得る)。ウォームリセットは、コールドリセットにおいてリセットされる状態のすべてではないが一部(例えば、適切なサブセット)をリセットすることを含む部分リセットであると考えることができる。この文脈において、「状態」は、処理回路のコンポーネントによって記憶された(例えば、記憶された)情報を指すと理解することができ、例えば、これは、レジスタ、キャッシュ又はメモリなどの記憶回路に記憶されたデータを含むことができるが、処理回路のコンポーネント内のフリップフロップによって記録された任意の情報も含むことができる。
【0009】
この装置では、処理された分岐命令に関する情報を分岐記録記憶回路に記憶するために分岐記録を実行する分岐記録回路も提供される。分岐記録回路は、少なくとも1つのレジスタに保持されたウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすか否かを判定し、ウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすとき、分岐記録を有効化するように構成される。
【0010】
例えば、分岐記録が有効化されるとき、分岐記録回路は、分岐命令(例えば、実行されると、処理回路に、プログラム順序でプログラムフロー変更命令に連続して続く命令以外の別の命令に分岐させることができるプログラムフロー変更命令)が、処理回路内のフェッチ回路によってフェッチされるとき、処理回路内の復号回路によって復号されるとき、処理回路内の発行回路によって発行されるとき、又は処理回路内の実行回路によって実行されるときに、分岐命令が処理されていることを検出し得る。しかしながら、これらはすべて単なる例に過ぎず、分岐記録回路は、分岐命令が処理回路の任意のステージ/部分で処理されていることを検出するように構成されてもよいことが理解されよう。特定の分岐命令が検出されたとき、分岐記録が有効化されているとき、分岐に関する情報が分岐記録回路に記憶されるか否かは、ウォーム分岐記録構成値及びコールド分岐記録構成値以外の要因(例えば、分岐が取られるか否か、又は以下で更に説明するようにフィルタ基準が満たされるか否か)に依存し得る。したがって、分岐記録が有効化されるとき、これは、一般に分岐記録が有効化されて、特定の処理された分岐に関する情報が記録されることを可能にすることを意味するが、これは、分岐記録が有効化されている間に処理されるすべての分岐が、分岐記録記憶回路に記録された情報を有する必要があることを意味するものではない。
【0011】
ウォーム分岐記録構成値及びコールド分岐記録構成値は、例えば、1つ以上のレジスタに保持された一対の値であってもよく、任意の値(例えば、1、0、又は任意の他の値)であってもよいが、ウォーム分岐記録構成値及びコールド分岐記録構成値は2つより多くの値を含んでもよいことが理解されるであろう。所定の条件は、ウォーム分岐記録構成値及びコールド分岐記録構成値が設定される値に依存してもよく、いくつかの例では、所定の条件は、ウォーム分岐記録構成値及びコールド分岐記録構成値の両方によって満たされるべき条件(例えば、一対の分岐記録構成値によって一緒に満たされるべき条件)を含む。処理回路の少なくともいくつかの状態において、所定の条件が満たされることは、分岐記録回路が分岐記録を有効化すべきであることを示す。所定の条件が満たされていないとき、分岐記録は無効化される。
【0012】
分岐記録が有効化されると、処理された分岐命令に関する情報が分岐記録記憶回路に記憶され、分岐記録記憶回路は、例えば、専用記憶構造であってもよいし、メモリ内のデータ構造(例えば、循環バッファ)であってもよい。分岐記録記憶回路は、処理された分岐命令に関する情報を診断分析に利用可能にするように構成される。分岐記録バッファに記憶された情報は、デバッグ又はコードプロファイリングなどの診断プロセスにおいて有用であり得、分岐記録バッファは、このような分析を実行する診断プロセスにこの情報を利用可能にするように構成され得る。分岐に関する情報は、診断ソフトウェア又はデバッグツールが分岐記録記憶回路から情報を読み出すことを可能にすることによって、又は診断分析を実行するためにトレースポートを介して外部デバッガ又はコンピュータに記録された分岐情報を出力することによって、診断分析のために利用可能にされ得る。
【0013】
本技法の装置では、コールドリセットは、ウォーム分岐記録構成値及びコールド分岐記録構成値の両方をリセットすることを含み、ウォームリセットは、ウォーム分岐記録構成値をリセットし、コールド分岐記録構成値を変更しないままにすることを含む。例えば、コールドリセットトリガに応答してリセットされる状態は、コールド分岐記録構成値及びウォーム分岐記録構成値の両方を含んでもよく、ウォームリセットトリガに応答してリセットされる状態(例えば、コールドリセットトリガに応答してリセットされる状態のサブセット)は、ウォーム分岐記録構成値を含むが、コールド分岐記録構成値を含まなくてもよい。したがって、ウォーム分岐記録構成値の値は、ウォームリセット中にそのデフォルト/リセット値にリセットされ得るが、コールド分岐記録構成値は、ウォームリセットトリガが受信/検出される前にそれが有していた値(そのデフォルト/リセット値であり得るが、異なる値でもあり得る)を維持し、コールド分岐記録構成値は、ウォームリセットによって影響されない。
【0014】
本技法の発明者らは、ウォームリセットの周りで処理された分岐に関する情報を検査できることが診断プロセスにとって有用であり得ることを認識した。例えば、これは、事後診断(例えば、リセットの原因を識別するために、リセットの前に実行された分岐に関して取り込まれた情報を検査すること)、又はウォームリセットの直後に処理回路によって実行され得る任意のリセットファームウェアに対して診断を行うことさえ可能にすることができる。しかしながら、リセット信号は典型的には非同期であり、これは、それらがいつでも発生し得ることを意味し、リセットがいつ発生するかを予測することを困難にする。これは、ウォームリセットの周りで分岐記録が実行されるか否かを制御することを困難にし得る。
【0015】
本技法は、2つの制御値、すなわちウォーム分岐記録構成値及びコールド分岐記録構成値を提供することによってこれらの問題に処理し、これらの制御値は、リセットの前後で分岐記録が有効化されるか無効化されるかを制御するために(分岐記録構成値の対が所定の条件を満たすか否かを判定することによって)使用され得る。特に、ウォームリセット及びコールドリセットの両方に応答してリセットされる制御値(ウォーム分岐記録構成値)と、ウォームリセットに応答せずにコールドリセットに応答してリセットされる制御値(コールド分岐記録構成値)との2つの制御値を提供することによって、ウォーム分岐記録構成値及びコールド分岐記録構成値は、(例えば、所定の条件、及びウォーム分岐記録構成値がウォームリセットでリセットされるという事実を考慮してウォーム分岐記録構成値及びコールド分岐記録構成値を設定することによって)ウォームリセット付近で分岐記録がいつ開始及び停止するかを制御するように設定され得る。更に、本技法は、回路面積及び電力使用量を大幅に増加させることなく実装することができる。したがって、本装置は、回路面積の増加に関して回路コストを大幅に増加させることなく、ウォームリセットの周囲でより有益な診断情報を取り込むことを可能にする。
【0016】
いくつかの例では、分岐記録回路は、少なくとも1つのレジスタに保持されたウォーム分岐記録構成値及びコールド分岐記録構成値が所定の条件を満たすか否かを、ウォーム分岐記録構成値とコールド分岐記録構成値との比較に基づいて判定するように構成される。
【0017】
これは、一対の値の単純な比較を実行することが、(例えば、分岐記録構成値の各々におけるビットの任意の状態を復号するための論理のより複雑なセットと比較して)より少ない回路面積を必要とし、したがって、より少ないコストを被るので、本技法の分岐記録回路を実装するための特に有利な方法であり得る。
【0018】
いくつかの例では、所定の条件は、ウォーム分岐記録構成値とコールド分岐記録構成値とが等しいこと、及びウォーム分岐記録構成値とコールド分岐記録構成値とが異なることのうちの1つを含む。例えば、所定の条件は、ウォーム分岐記録構成値とコールド分岐記録構成値の両方が同じ値を有する(例えば、両方が1の値を有し得るか、又は両方が0の値を有し得るが、他の例では、分岐記録構成値が0又は1以外の値を有し得ることが理解される)ときに満たされると考えられ得る。代替的に、所定の条件は、ウォーム分岐記録構成値がコールド分岐記録構成値とは異なる値を有するときに満たされると考えられ得る(例えば、値の一方が1であり、他方が0であり得るが、(再び)他の例では、分岐記録構成値が0又は1以外の値を有し得ることが理解されよう)。
【0019】
このように、本技法は単純な比較回路を使用して実装することができ、したがって回路面積のわずかな増加しか必要としない。
【0020】
ウォーム分岐記録構成値及びコールド分岐記録構成値が等しいか又は等しくないかに基づいて所定の条件を評価する別の利点は、これが、各々が所定の条件を満たすか又は満たさないウォーム分岐記録構成値及びコールド分岐記録構成値の設定の複数の異なる組合せが存在し得ることを意味することである。例えば、等しい条件は、2つの構成値が両方とも0又は両方とも1のいずれかであるときに満たされ得、等しくない条件は、2つの構成値が0及び1、又は1及び0のいずれかであるときに満たされ得る。「有効化」に対応する複数の設定又は「無効化」に対応する複数の設定を提供することは、ウォームリセット前の有効化/無効化ステータスがそれらの設定の各々に対して同じであっても、ウォームリセット後の分岐記録に対して異なる有効化/無効化ステータスを提供する異なる設定でユーザが構成値を構成することができる(又は逆に、ウォームリセット後の分岐記録の有効化/無効化ステータスに対する所望の挙動が同じであっても、ウォームリセット前の有効化/無効化ステータスに対して異なる設定でユーザが構成値を構成することができる)ことを意味するので、有用であり得る。対照的に、有効化されている分岐記録に対応する単一の構成設定及び無効化されている分岐記録に対応する単一の構成設定のみを提供するアプローチ(例えば、単一の有効化/無効化ビットを使用する)は、ウォームリセットの前及び後に異なるオプションを構成する際にあまり柔軟性を有さない。
【0021】
いくつかの例では、少なくとも1つのレジスタは、ウォーム分岐記録構成値及びコールド分岐記録構成値を複数の状態のうちの1つに設定するようにソフトウェアによって構成可能であり、ウォーム分岐記録構成値は、ウォーム構成値及びウォームリセット値のうちの1つを有し、ウォームリセット及びコールドリセットは両方とも、ウォーム分岐記録構成値をウォームリセット値にリセットすることを含む。例えば、プログラマは、少なくとも1つのレジスタに記憶された値を更新するための1つ以上の命令をソフトウェアに含めることによって、ウォーム分岐記録構成値及びコールド分岐記録構成値を構成し得る。ウォームリセット値は、ウォーム又はコールドリセット後にウォーム分岐記録構成値が戻る値である(例えば、ウォームリセット及びコールドリセットがウォーム分岐記録構成値を0にリセットすることを含む場合、ウォームリセット値は0であり、同様に、ウォームリセット及びコールドリセットがウォーム分岐記録構成値を1にリセットすることを含む場合、ウォームリセット値は1である。しかしながら、ウォームリセット値の他の例も可能であることが理解されよう。ウォーム構成値は、ウォームリセット値とは異なる値であり得る。更に、理解されるように上述の複数の「状態」は、ウォームリセットが発生する前にソフトウェアが少なくとも1つのレジスタに書き込むものを記述し、ウォーム分岐記録構成値の値は、ウォームリセットで(例えば、ウォーム構成値からウォームリセット値に)変更されることができ、したがって、ソフトウェアによって設定された状態は、必ずしもウォームリセットを介して留まるとは限らない。
【0022】
ソフトウェアがウォーム分岐記録構成値及びコールド分岐記録構成値を設定することを可能にすることによって、これは、分岐記録がウォームリセットの前及び後に実行されるか否かの制御をプログラマが設定することを可能にする。これは、プログラマが分岐記録回路によって収集された診断情報を制御することを可能にするので、特に有用であり得る。
【0023】
いくつかの例では、複数の状態は、リセット開始状態を含み、分岐記録回路は、リセット回路がウォームリセットを実行することに応答して、分岐記録を有効化するために、ウォーム分岐記録構成値及びコールド分岐記録構成値がリセット開始状態を示すことに応答する。例えば、ウォーム分岐記録構成値及びコールド分岐記録構成値のリセット開始状態(例えば、モード又は構成)は、分岐記録回路に、ウォームリセットの前に分岐記録を実行させず(例えば、ウォームリセットの前に所定の条件が満たされていない)、ウォームリセットの後に分岐記録を実行させる(例えば、ウォーム分岐記録構成値がウォームリセットでリセットされ、その結果、ウォームリセットに続いて所定の条件が満たされる)。
【0024】
リセット開始状態は、必要ではないかもしれないウォームリセットの前に分岐記録を実行することによって電力を浪費したり性能を低下させたりすることなく、(例えば、ウォームリセット後に実行されるリセットファームウェア内の分岐に関する情報を記録して、ウォームリセットイベントの原因を識別又はそれに応答する)分岐記録回路にリセットプロセス自体に関する情報を取り込ませることができ、ウォームリセット後に収集されたより最近の情報のいずれかで(少なくとも小さい循環分岐記録バッファの場合)上書きすることができるので、有利であり得る(いくつかの実装形態では、分岐記録を有効化することは、分岐記録が無効化されているときよりも処理回路によって達成可能な最大性能を制限することがあり、例えば、分岐記録が有効化されているとき、分岐記録回路は、処理回路によって1サイクルで処理されることができる分岐の数に制限を課すことがあるためである)。例えば、開発者は、リセットファームウェアの性能又は正しい機能を分析するために診断分析を実行する場合、リセット開始状態を選択することを望む場合がある。
【0025】
いくつかの例では、リセット開始状態は、ウォーム構成値を有するウォーム分岐記録構成値及び第1の値を有するコールド分岐記録構成値によって示され、分岐記録回路は、ウォーム分岐記録構成値がウォームリセット値を有し、コールド分岐記録構成値が第1の値を有するとき、所定の条件が満たされていると判定するように構成され、ウォーム分岐記録構成値がウォーム構成値を有し、コールド分岐記録構成値が第1の値を有するとき、所定の条件が満たされていないと判定するように構成される。この設定では、コールド分岐記録構成値がウォームリセットイベント後に第1の値を保持すると仮定すると、ウォームリセットでウォーム構成値からウォームリセット値に遷移することによって、ウォームリセット前に所定の条件が満たされていなかったときにウォームリセット後に所定の条件が満たされるようになり、その結果、ウォームリセットで分岐記録が有効化される。
【0026】
例えば、
・ウォームリセット値が0であり、ウォーム分岐記録構成値とコールド分岐記録構成値とが異なる(等しくない)場合に所定の条件が満たされるとき、コールド分岐記録構成値を1に設定し(例えば、第1の値が1である)、ウォーム分岐記録構成値を1に設定する例えば、ウォーム構成値が1である)ことによってリセット開始状態を構成することができ、
・ウォームリセット値が1であり、ウォーム分岐記録構成値とコールド分岐記録構成値とが異なる(等しくない)場合に所定の条件が満たされるとき、コールド分岐記録構成値を0に設定し(例えば、第1の値が0である)、ウォーム分岐記録構成値を0に設定する例えば、ウォーム構成値が0である)ことによってリセット開始状態を構成することができ、
・ウォーム分岐記録構成値及びコールド分岐記録構成値が同じ(等しい)場合にウォームリセット値が1であり、所定の条件が満たされるとき、コールド分岐記録構成値を1に設定し(例えば、第1の値が1である)、ウォーム分岐記録構成値を0に設定する(例えば、ウォーム構成値が0である)ことによって、リセット開始状態を構成することができ、及び
・ウォームリセット値が0であり、ウォーム分岐記録構成値及びコールド分岐記録構成値が同じ(等しい)場合に所定の条件が満たされるとき、コールド分岐記録構成値を0に設定し(例えば、第1の値が0である)、ウォーム分岐記録構成値を1に設定する例えば、ウォーム構成値が1である)ことによって、リセット開始状態を構成することができる。
【0027】
いくつかの例では、複数の状態はリセット停止状態を含み、分岐記録回路は、リセット停止状態を示すウォーム分岐記録構成値及びコールド分岐記録構成値に応答して、リセット回路がウォームリセットを実行することに応答して、分岐記録を無効化する。例えば、ウォーム分岐記録構成値及びコールド分岐記録構成値のリセット停止状態(例えば、モード又は構成)は、分岐記録回路に、ウォームリセット(例えば、ウォームリセットの前に所定の条件が満たされる)まで分岐記録を実行させるが、ウォームリセットの後に分岐記録を実行させない(例えば、ウォーム分岐記録構成値がウォームリセットでリセットされ、その結果、ウォームリセットに続いて所定の条件がもはや満たされていない)。
【0028】
リセット停止状態は、それが、ウォームリセットの直前のプログラムフローに関する情報(例えば、リセットの後に実行するように構成された任意のファームウェアに関する情報)が再構築されることを可能にし、ウォームリセットの直前に実行されたコードにおける任意の問題(例えば、ウォームリセットを引き起こした問題を含む)が診断されることを可能にするので、有利であり得る。ウォームリセット後の分岐記録を無効化することによって、これは、ウォームリセット前に記録された分岐記録が、ウォームリセット後に実行された分岐に関連する分岐記録によって上書きされることを防止する。
【0029】
いくつかの例では、リセット停止状態は、ウォーム構成値を有するウォーム分岐記録構成値及び第2の値を有するコールド分岐記録構成値によって示され、分岐記録回路は、ウォーム分岐記録構成値がウォーム構成値を有し、コールド分岐記録構成値が第2の値を有するとき、所定の条件が満たされていると判定するように構成され、分岐記録回路は、ウォーム分岐記録構成値がウォームリセット値を有し、コールド分岐記録構成値が第2の値を有するとき、所定の条件が満たされていないと判定するように構成される。例えば、第2の値は、第1の値とは異なる任意の値であってもよい。この設定では、コールド分岐記録構成値がウォームリセットイベント後に第2の値を保持すると仮定すると、ウォーム構成値からウォームリセット値へのウォームリセットでの遷移は、ウォームリセット前に所定の条件が満たされていたときにウォームリセット後に所定の条件が満たされなくなる(例えば、満たされるのを停止する)ので、ウォームリセットで分岐記録が無効化される。
【0030】
例えば、
・ウォームリセット値が0であり、ウォーム分岐記録構成値とコールド分岐記録構成値とが異なる(等しくない)場合に所定の条件が満たされるとき、コールド分岐記録構成値を0に設定し(例えば、第2の値が0である)、ウォーム分岐記録構成値を1に設定する例えば、ウォーム構成値が1である)ことによってリセット停止状態を構成することができ、
・ウォームリセット値が1であり、ウォーム分岐記録構成値とコールド分岐記録構成値とが異なる(等しくない)場合に所定の条件が満たされるとき、コールド分岐記録構成値を1に設定し(例えば、第2の値が1である)、ウォーム分岐記録構成値を0に設定する例えば、ウォーム構成値が0である)ことによってリセット停止状態を構成することができ、
・ウォームリセット値が1であり、ウォーム分岐記録構成値とコールド分岐記録構成値とが同じ(等しい)場合に所定の条件が満たされるとき、コールド分岐記録構成値を0に設定し(例えば、第2の値が0である)、ウォーム分岐記録構成値を0に設定する例えば、ウォーム構成値が0である)ことによってリセット停止状態を構成することができ、及び
・ウォームリセット値が0であり、ウォーム分岐記録構成値とコールド分岐記録構成値とが同じ(等しい)場合に所定の条件が満たされるとき、コールド分岐記録構成値を1に設定し(例えば、第2の値が1である)、ウォーム分岐記録構成値を1に設定する例えば、ウォーム構成値が1である)ことによってリセット停止状態を構成することができる。
【0031】
いくつかの例では、複数の状態は、リセットを介した記録状態を含み、分岐記録回路は、リセット回路がウォームリセットを実行する前及び後の両方で分岐記録を実行するために、リセットを介した記録状態を示すウォーム分岐記録構成値及びコールド分岐記録構成値に応答する。例えば、ウォーム分岐記録構成値及びコールド分岐記録構成値のリセットを介した記録状態(例えば、モード又は構成)は、分岐記録回路に、ウォームリセット(例えば、ウォームリセットの前に所定の条件が満たされる)まで分岐記録を実行させ、次いで、ウォームリセットの後に分岐記録を継続させる(例えば、ウォームリセットは、分岐記録構成値のいずれも変更せず、その結果、所定の条件は、ウォームリセットに続いて満たされ続ける)。例えば、リセットを介した記録状態は、ウォームリセットの両側(前及び後)で分岐記録を有効化するように分岐記録回路に命令する。
【0032】
リセットを介した記録構成は、ウォームリセットの前及び後の両方で取り込まれるべき関心のある診断情報がある場合(例えば、ウォームリセットの前に実行されるソフトウェアで何らかの特定の条件が生じた場合にリセットファームウェアが正しく挙動するか否かを開発者がテストしたい場合、したがって、そのイベントが発生したか否かをプローブするためにウォームリセットの前にソフトウェア内の分岐に関する何らかの情報を開発者が必要とする場合)、開発者にとって有用であり得る。
【0033】
いくつかの例では、リセットを介した記録状態は、ウォームリセット値を有するウォーム分岐記録構成値及び第1の値を有するコールド分岐記録構成値によって示され、分岐記録回路は、ウォーム分岐記録構成値がウォームリセット値を有し、コールド分岐記録構成値が第1の値を有するとき、所定の条件が満たされていると判定するように構成される。この設定では、コールド分岐記録構成値がウォームリセットイベント後に第1の値を保持し、ウォーム分岐記録構成値がウォームリセットイベント後にウォームリセット値を保持すると仮定すると、ウォームリセットは、所定の条件が満たされるか否かを変更しない。したがって、所定の条件は、ウォームリセットの前に満たされたときにウォームリセット後も満たされたままであり、その結果、分岐記録は、ウォームリセットの前及び後の両方で有効化される。
【0034】
例えば、
・ウォームリセット値が0であり、ウォーム分岐記録構成値とコールド分岐記録構成値が異なる(等しくない)場合に所定の条件が満たされるとき、コールド分岐記録構成値を1に設定し(例えば、第1の値が1である)、ウォーム分岐記録構成値を0に設定することによって、リセットを介した記録状態を構成することができ、
・ウォームリセット値が1であり、ウォーム分岐記録構成値とコールド分岐記録構成値が異なる(等しくない)場合に所定の条件が満たされるとき、コールド分岐記録構成値を0に設定し(例えば、第1の値が0である)、ウォーム分岐記録構成値を1に設定することによって、リセットを介した記録状態を構成することができ、
・ウォームリセット値が1であり、ウォーム分岐記録構成値とコールド分岐記録構成値が同じ(等しい)場合に所定の条件が満たされるとき、コールド分岐記録構成値を1に設定し(例えば、第1の値が1である)、ウォーム分岐記録構成値を1に設定することによって、リセットを介した記録状態を構成することができ、及び
・ウォームリセット値が0であり、ウォーム分岐記録構成値とコールド分岐記録構成値が同じ(等しい)場合に所定の条件が満たされるとき、コールド分岐記録構成値を0に設定し(例えば、第1の値が0である)、ウォーム分岐記録構成値を0に設定することによって、リセットを介した記録状態を構成することができる。
【0035】
ウォーム分岐記録構成値及びコールド分岐記録構成値がどのように構成され得るかの特定の例が、リセット開始状態、リセット停止状態、及びリセットを介した記録状態の各々について上記で与えられたが、これらは、ウォーム分岐記録構成値及びコールド分岐記録構成値が各々1又は0のいずれかの値を取り得ることが仮定される単なる例であることが理解される。ウォーム分岐記録構成値及びコールド分岐記録構成値が単一のビットに限定されない場合などの他の例では、他の所定の条件が設定され得る。
【0036】
いくつかの例では、コールド分岐記録構成値は、コールド構成値及びコールドリセット値のうちの1つを有し、コールドリセットは、コールド分岐記録構成値をコールドリセット値にリセットすることを含む。
【0037】
いくつかの例では、分岐記録回路は、ウォーム分岐記録構成値がウォームリセット値を有し、コールド分岐記録構成値がコールドリセット値を有するとき、所定の条件が満たされていないと判定するように構成される。これは、コールドリセット後のウォーム分岐記録構成値及びコールド分岐記録構成値のデフォルト状態が、分岐記録を無効化することであり得ることを意味する。例えば、リセット停止状態、リセット開始状態、及び/又はリセットを介した記録状態が上述したように実装されるシステムでは、コールドリセット後のデフォルト状態が分岐記録を無効化するために、コールド構成値は第1の値であり得、コールドリセット値は第2の値であり得る。
【0038】
しかしながら、コールド分岐記録構成値がコールド構成値及びコールドリセット値のうちの1つを有する他の例では、コールドリセット後に分岐記録を有効化することが許容可能であると考えられる場合、リセット停止状態、リセット開始状態、及び/又はリセットを介した記録状態が上述のように実装されるシステムにおいて、コールド構成値は第2の値であってもよく、コールドリセット値は第1の値であってもよい。
【0039】
このようにして、装置は、ソフトウェアがウォーム分岐記録構成値及びコールド分岐記録構成値を設定する機会を有する前に分岐情報を記録することを回避するために、コールドリセット後のデフォルトが分岐記録なし(例えば、分岐記録が無効化される)であるように構成され得る。これは、(例えば、必要とされないときに分岐記録を実行する際に)浪費される電力の量を低減することができ、また、リセットの周りの分岐記録がより高い特権のソフトウェアによって制御されるシステムにおいて、よりセキュアにこともできる。この設定では、コールド分岐記録構成値がウォームリセットイベント後にコールドリセット値を保持し、ウォーム分岐記録構成値がウォームリセットイベント後にウォームリセット値を保持すると仮定すると、ウォームリセットは、所定の条件が満たされるか否かを変更しない。したがって、ウォームリセット前に所定の条件が満たされていなかったときには、ウォームリセット後も所定の条件が満たされず、分岐記録が実行されない。
【0040】
いくつかの例では、コールドリセットに応答してコールド分岐記録構成値に設定される値は、固定され、あらかじめ決定されてもよく、上述のように第1の値又は第2の値のいずれかである。
【0041】
しかしながら、他の例では、コールドリセットトリガイベントに応答して、リセット回路は、コールド分岐記録構成値を、リセット値選択信号によって指定される第1の値及び第2の値のうちの1つにリセットし得る。したがって、コールドリセット後に分岐記録が有効化されるか無効化されるかは、コールドリセットトリガイベントのときに供給される信号に依存して変化し得る。これにより、分岐記録がデフォルトで有効化されるか、コールドリセット後にデフォルトで無効化されるかを制御することができる。例えば、リセット値選択信号は、コールドリセットドメインの外部の回路論理に接続され得、集積回路上のピンを介して、リセット値選択信号を供給する外部回路に接続され得る。
【0042】
いくつかの例では、処理回路は、第1の値を有する制御レジスタに保持された制御値に応答して、処理回路が所与の実行レベルよりも低い特権実行レベルで動作している間に分岐記録記憶回路がアクセスされることを防止する。例えば、処理回路は、複数の実行レベル(例えば、これらは特権レベル又は例外レベルとも称され得る)のうちの1つにおいて動作するように構成され得、各実行レベルにおいて実行するプロセスは、処理回路内に記憶された、又は処理回路にアクセス可能な情報/状態の異なるサブセットにアクセスすることを許可される。例えば、より特権のある実行レベルで実行するプロセスは、より低い特権のプロセス(例えば、より低い実行レベルで実行されているプロセス)にアクセス可能でない記憶構造又はメモリ領域にアクセスすることを許可され得る。これらの記憶構造は、いくつかの例では、例えば、制御レジスタに記憶された制御値の制御下で、少なくともある時間、所与の特権レベルよりも低い特権実行レベルで実行するプロセスにアクセス不可能にされ得る分岐記録記憶回路を含み得る。例えば、制御レジスタは、処理回路の様々な機能を制御する状態を保持してもよく、制御値は、制御レジスタに記憶された状態のうちの単一の値(例えば、単一ビット)であってもよく、又は、分岐記録記憶回路が低い特権実行レベルからアクセス可能であるべきでないことをそのフィールドの少なくとも1つの符号化が示すマルチビットフィールドであってもよい。あるいは、制御レジスタは、制御値を保持する専用のレジスタであってもよい。制御値の第1の値は、上述の例におけるコールド分岐記録構成値の第1の値と必ずしも同じでなくてもよく、制御値は、分岐記録記憶回路が、所与の実行レベルよりも低い特権を有する実行レベルで動作する低い特権のプロセスによってアクセスされ得るか否かを制御するように(例えば、所与の実行レベルで動作するソフトウェアによって)設定され得る。
【0043】
このようにして、所与の実行レベルよりも低い特権で動作している(実行されている)プロセスが、その実行レベルで生成された分岐記録にアクセスすることを防止することによって、システムのセキュリティを改善することができ(例えば、リセットファームウェアは、所与の実行レベルで実行され得る)、したがって、信頼できないコードが、より高い特権のコードに関する情報を取得することをより困難にする(例えば、特に、分岐記録回路によって記録された情報は、プログラムフローが再構築されることを可能にするのに十分であり得るので、悪意のあるプログラムは、分岐記録記憶回路に記憶された情報を使用して、機密情報を推測することが可能であり得る)。これは、所与の実行レベルで処理された分岐命令に関する情報が、システムのセキュリティを損なうことなく、必要に応答して依然として記録され得ることを意味し、これは診断において有用であり得る。
【0044】
いくつかの例では、分岐記録回路は、所与の実行レベルで動作する処理回路に応答して、ウォーム分岐記録構成値及びコールド分岐記録構成値に基づいて分岐記録を有効化するか否かを判定し、所与の実行レベルよりも低い特権実行レベルで動作する処理回路に応答して、ウォーム分岐記録構成値及びコールド分岐記録構成値とは独立して、分岐記録が有効化されるか無効化されるかを判定する。例えば、ウォーム分岐記録構成値及びコールド分岐記録構成値は、所与の実行レベル(又はより特権のある実行レベル)で処理された分岐に対する分岐記録のみを制御し得、所与の実行レベルよりも低い特権実行レベルで実行するときに分岐記録を制御するために他の何らかの制御を実装し得る。例えば、ウォーム分岐構成値及びコールド分岐構成値を利用する制御機構は、特定の実行レベルに固有であり得、特権がより少ない実行レベルは、異なる制御機構を有し得る(例えば、分岐記録が有効化されるか又は無効化されるかを指定する単一の有効化値を使用する)。
【0045】
より特権の高いレベルで分岐記録を制御するための別個の機構を提供することによって、ウォーム分岐記録構成値及びコールド分岐記録構成値へのアクセスをより低い特権実行レベルに許可する必要がない。更に、ウォーム分岐記録構成値及びコールド分岐記録構成値を提供することは、低特権コードがウォームリセットの直後に実行されないので、低い特権実行レベルに対して正当化されない場合があり、したがって、ソフトウェアが、分岐記録挙動を制御するためにウォームリセットの後に有効化/無効化値を構成することが許容可能である(これは、単一の有効化/無効化値などのより単純な構成オプションが使用され得ることを意味する)。ウォーム分岐記録構成値/コールド分岐記録構成値の使用は、ウォームリセットの直後に実行するより特権のあるコードに特に有用であり、したがって、より特権のあるコードが分岐記録構成情報への構成変更を行うことができるときまでに、診断情報を提供することができることが有用である妥当な数の命令(例えば、ウォームリセットの直後に実行するリセットファームウェア内の命令)を既に実行している可能性がある。ウォーム分岐記録構成値/コールドリセット構成値を使用することによって、これは、ウォームリセットの直後に実行するコードに関連付けられた問題を診断することを実用的にし、これは、分岐記録が開始することができる前にウォームリセットの後に有効化値のソフトウェア構成が必要とされた場合には実用的でない可能性がある。更に、いくつかの特定の例では、ウォーム分岐記録構成値及びコールド分岐記録構成値はまた、所与の実行レベルよりも低い特権実行レベルで実行するプロセスにアクセス不可能にされてもよく、その結果、低い特権の(及び潜在的に信頼できない)プログラムは、分岐記録が所与の実行レベルでプロセスに対して実行されるか否かを制御することができない。
【0046】
いくつかの例では、処理された分岐命令に関する情報は、処理された命令のプログラムフローが再構築されることを可能にする情報を含む。例えば、分岐記録記憶回路に保持される情報は、(例えば、どの分岐命令が実行されたか、並びに実行された分岐の結果及び/又はターゲットを示す情報を提供することによって)プログラムのコピーを有するプログラムフローアナライザによってプログラムフローが再構築されることを可能にし得、記憶された情報は、それ自体、プログラムフローの完全な記録である必要はない。
【0047】
このようにして、分岐記録回路によって実行される分岐記録は、診断に役立つ(例えば、コード又はプロセッサにおける任意の問題を識別するのに役立つ)情報を提供することができる。
【0048】
いくつかの例では、処理された分岐命令に関する情報は、処理された分岐が取られた命令の命令アドレス、及び処理された分岐が取られた命令のターゲットアドレスのうちの少なくとも1つを含む。処理された分岐命令のために分岐記録記憶回路に記憶される情報は、これらの情報のいずれか1つ、又はこれらの情報の両方を含んでもよい。分岐記録回路に記憶される他の情報も存在してもよく、正確にどの情報が記録されるべきかの選択は、特定の実装に依存し、例えば、使用されることが意図される診断又はデバッグプログラムに依存することが理解されるであろう。
【0049】
このようにして、処理された分岐命令の挙動を識別することができ、したがって、例えば、プログラムフローを再構築することを可能にし、これは診断に役立つ。
【0050】
場合によっては、フィルタ基準を設定して、どのタイプの分岐が分岐記録記憶回路に記録された情報を有するかを制御することができる。例えば、タイプは、間接分岐、リターンアドレスの指示をリンクレジスタに記憶させるリンク付き分岐命令、又はリンクレジスタに示されたリターンアドレスに分岐する関数リターン分岐命令を含むことができる。フィルタ基準は、分岐記録が有効化されるときに、これらのタイプのうちのどれが分岐記録記憶回路に記録された情報を有するべきかを指定することができる。したがって、分岐記録がウォーム分岐記録構成値及びコールド分岐記録構成値を使用して有効化されるときであっても、すべての分岐が分岐記録記憶回路に記録された情報を有することは必須ではない。
【0051】
いくつかの例では、分岐記録記憶回路は、処理された分岐命令に関する情報を、外部診断ハードウェアと、処理回路上で実行される診断プロセスとのうちの少なくとも1つに利用可能にするように構成される。プロセッサの診断又はデバッグを実行する多くの異なる方法があり、これらは、処理回路自体によって実行される診断プログラムを提供すること、又は診断プログラムを実行するために外部(例えば、処理回路自体の外部(とは別個)、例えば、オフチップ)診断ハードウェア(例えば、回路)を提供することを含んでもよく、これは、分岐記録記憶回路を含む処理ハードウェアの外部診断ハードウェアコンポーネントを含み得る。例えば、外部診断ハードウェアは、専用診断(例えば、デバッグ)ハードウェア又は診断ソフトウェアを実行する外部コンピュータを含むことができる。いずれの状況においても、分岐記録記憶回路に記憶された情報は、診断プロセスに利用可能にすることができる。
【0052】
診断専用の外部ハードウェアを使用することは、(例えば、外部ハードウェアが、分岐記録などの診断情報のために、処理回路に利用可能な記憶空間よりも多くの記憶空間を有する場合)より大量の分岐情報(及び実際には、処理回路によって取り込まれ、外部ハードウェアに提供され得る任意の他の情報)が分析されることを可能にし得、(処理回路に利用可能なリソースに依存しないので)より大きな機能性を提供し得、破局的エラーが処理回路が使用できないことを意味する場合であっても診断プロセスが実行されることを可能にし得る。したがって、分岐記録記憶回路に記憶された情報を外部診断ハードウェアに利用可能にすることは非常に有用であり得る。しかしながら、診断プロセスは、オンチップで(例えば、処理回路によって)実行することもでき、したがって、処理回路上で実行されるそのようなプロセスが、記憶された分岐情報にアクセスすることを可能にすることも有利であり得る。
【0053】
いくつかの例では、ウォーム分岐記録構成値とコールド分岐記録構成値の両方が同じレジスタ内に保持される。ウォーム分岐記録構成値及びコールド分岐記録構成値の各々が別個のレジスタに保持されることが可能である(例えば、それらは各々専用レジスタに保持され得る)が、いくつかの実装形態では、両方の値が同じレジスタ内に保持され得る。例えば、これは、ウォーム分岐記録構成値及びコールド分岐記録構成値を記憶するための専用レジスタ、又は他の制御状態も記憶する制御レジスタであり得る。例えば、ウォーム分岐記録構成値及びコールド分岐記録構成値は、この制御値が提供される実装において、上述の制御値を記憶する同じ制御レジスタ内に保持され得る。ウォーム分岐記録構成値及びコールド分岐記録構成値は各々、任意のサイズを有するか、又は任意の値をとることができるが、いくつかの特定の例では、ウォーム分岐記録構成値及びコールド分岐記録構成値の各々は、同じレジスタ内に単一のビットを備えることができる。
【0054】
ウォーム分岐記録構成値及びコールド分岐記録構成値の両方を同じレジスタに記録するこのアプローチは、これらの値が構成されることをより迅速にすることによって特に有利であり得る。特に、単一のシステムレジスタ更新命令は、単一のシステムレジスタに記憶された複数のビットの新しい値を指定することができるが、ウォーム分岐記録構成値及び分岐記録構成値が複数の異なるレジスタに保持された場合、これは、値を更新するために実行される、各々がレジスタのうちの1つを指定する2つの別個のシステムレジスタ更新命令を必要とする場合がある。このアプローチはまた、ウォーム分岐記録構成値及びコールド分岐記録構成値へのアクセスが特定の実行レベルに制限される実装形態におけるアクセス制御を簡略化し得る。
【0055】
リセット回路は、ウォームリセットトリガイベントに応答して、分岐記録記憶回路のリセットを禁止し得る。したがって、分岐記録記憶回路は、ウォームリセットに応答して変更されないままにされ得る。分岐記録記憶回路は、コールドリセットトリガイベントに応答してリセットされるが、ウォームリセットトリガイベントに応答してリセットされないコールドリセットドメイン内にあり得る。これにより、分岐記録記憶回路に記録された任意の分岐情報が、ウォームリセットに続いてアクセス可能なままであることが可能になる。
【0056】
いくつかの例では、コールドリセットトリガイベントは、電源オンイベントを含む。例えば、これは、処理回路がシャットダウンされた後に電源ボタンが押されて処理回路をオンにすることに応答することができる。しかしながら、コールドトリガイベントの他の例も可能である。
【0057】
いくつかの例では、ウォームリセットトリガイベントは、ウォッチドッグカウンタの経過に応答して生成されるタイムアウト信号を含む。例えば、処理回路が適切に動作しているか否かをチェックするために、ウォッチドッグカウンタ(例えば、ウォッチドッグタイマ)が使用され得る。タイマは、所与の値に設定され、時間とともにカウントダウンすることが可能にされ得る。処理回路が正しく動作しているとき、処理回路は、周期的にカウンタをリセット(例えば、カウンタをその初期値に設定)し得、その結果、ウォッチドッグカウンタは、コンピュータが適切に動作していない場合にのみ経過する。ウォッチドッグタイマが経過した場合、ウォッチドッグタイマは、割り込みを生成し、ウォームリセットを実行することを含む補正又は診断アクションを実行するように処理回路をトリガし得る。しかしながら、ウォッチドッグイベント(例えば、ウォッチドッグカウンタの経過)はウォームリセットトリガイベントの一例に過ぎず、他の例も可能であることが理解されるであろう。
【0058】
いくつかの例では、リセット回路は、複数の異なるウォームリセットトリガイベントの各々に応答して、コールドリセットトリガイベントに応答してリセットされる状態の異なるサブセットをリセットする。例えば、コールドリセットにおける状態リセットの異なるサブセットを含む2つ以上のウォームリセットドメインが存在してもよく、これらの2つ以上のリセットドメインは、コールドリセットにおける状態リセットのすべてを包含するコールドドメインに加えて提供されてもよい。
【0059】
ここで、特定の実施形態を、図面を参照して説明する。
【0060】
図1は、本技法を実装することができるデータ処理システムを示す。
図1に示されるデータ処理システムは、メモリ104及び外部診断回路106と通信する中央処理装置(CPU)102を含むが、図に示されない他の要素がデータ処理システム内にあってもよいことが理解されるであろう。
【0061】
CPU102は、命令を処理するためのいくつかのパイプラインステージを備えるプロセッサパイプライン108を含む。特に、パイプライン108はフェッチステージ(フェッチ回路)110を含み、フェッチステージ(フェッチ回路)110は、キャッシュ112から命令をフェッチし(例えば、読み出し)、それらを復号ステージ114に渡す。例えば、キャッシュ112は、複数レベルのキャッシュを含み得、各キャッシュは、メモリ104に記憶されたデータ及び命令のサブセットを保持する。フェッチステージ110がキャッシュ112から命令をフェッチするとき、例えば、その命令が以前にフェッチされていたとき、又はそれが前もってキャッシュにプリフェッチされていたとき、命令は既に最高レベルキャッシュ(例えば、フェッチステージ110に最も近いキャッシュ-これは「レベル1」キャッシュであり得るが、キャッシュレベルが異なるラベルを付けられ、レベル1キャッシュがメモリ104に最も近いキャッシュであることも可能である)に記憶され得る。代替的に、命令は最高レベルキャッシュに存在しなくてもよく、その場合、フェッチステージ110に戻される前に、メモリ又は低レベルキャッシュから最高レベルキャッシュにフェッチされる必要があり得る。
【0062】
フェッチステージが命令を受け取ると、フェッチステージは命令を復号ステージ(復号回路/デコーダ)114に渡し、復号ステージは命令を復号して制御信号を生成し、制御信号は実行ステージ(実行回路)116を制御して命令を実行する。次いで、発行ステージ(発行回路)118は、復号された命令(例えば、復号回路によって生成された制御信号)が実行のために実行ステージ116に発行されるときを制御し、実行ステージ116は、復号された命令に応答して(例えば、制御信号に応答して)命令を実行する。
【0063】
実行ステージ116は、
・ADD、SUBTRACTなどの算術命令に応答して算術演算を実行するための算術論理ユニット(ALU)120として、
・浮動小数点オペランドに対する演算を実行するための浮動小数点ユニット(FPU)122、
・分岐命令を実行する分岐ユニット(Br)124、及び、
・メモリ104から(任意選択でキャッシュ112を介して)レジスタ128のセットにデータをロードするロード動作を実行し、レジスタ128からのデータをメモリに記憶する記憶動作を実行する、ロード/記憶ユニット(ld/st)126のような複数の実行ユニットを含む。例えば、ロード/記憶ユニット126は、復号されたロード命令に応答してデータをレジスタ128にロードし得、復号された記憶命令に応答してデータを記憶し得る。
【0064】
パイプライン108は、実行ステージ116によって実行されたデータ処理演算の結果をレジスタ128に書き込むための書き戻しステージ(書き戻し回路)130も含む。パイプライン108は、命令を処理する処理回路の一例である。
【0065】
レジスタファイル128は、複数のレジスタを備え、各レジスタは、所与のサイズのデータを記憶するための一時記憶構造である。
図1の例では、レジスタファイル128は、CPUの1つ以上の要素の動作を制御するための情報を記憶する1つ以上の制御レジスタ136を含む。レジスタファイルはまた、ウォーム分岐記録構成値(BREW)140及びコールド分岐記録構成値(BREC)138の例である、2つの分岐記録構成値138、140を記憶する。実行回路116によって実行される演算のための入力オペランド及び結果オペランドを保持するために、他のレジスタ(図示せず)もレジスタファイル128内に提供される。
【0066】
CPU102はまた、1つ以上の分岐予測器キャッシュ134に記憶された分岐予測情報に基づいて分岐命令に関する予測を行う分岐予測器132を含む。例えば、分岐予測器132は、分岐命令の結果(例えば、分岐が取られる又は分岐が取られない)を予測してもよく、及び/又は分岐命令のターゲット(例えば、ターゲット命令のターゲットアドレス)を予測してもよい。分岐予測器キャッシュ134は、分岐ユニット124によって受信された、実行された分岐命令の結果及びターゲットアドレスを示す信号に応答して更新され得る。
【0067】
また、CPU102には、分岐記録構成値138、140を読み出し、分岐記録構成値が所定の条件を満たす(例えば、所与の値を有する)ときに分岐記録を有効化するように構成された分岐記録回路142が提供される。分岐記録が有効化されると、実行された分岐命令に関する情報を分岐記録バッファ144に記録することができる。特に、分岐記録バッファ144は、結果が取られる所与の分岐命令について、処理された分岐命令の命令アドレス(例えば、命令が記憶されている場所を示すメモリアドレス)、及び/又は処理された分岐命令のターゲットアドレスを記憶し得る。分岐記録に現れない分岐が取られなかったことを暗示することができるので、分岐が分岐記録バッファ144に記憶された情報を有する必要はない。処理された分岐命令に関するそのような情報は、診断動作(例えば、デバッグ動作など、発生したエラーの原因を判定するための動作)において有用であり得る。したがって、分岐記録バッファ144は、その内容を外部診断回路106による検査に利用可能にするように構成され、外部診断回路106は、記憶された情報を使用して、CPUが遭遇する問題を診断する。分岐記録バッファ144はまた(又は代替的に)、実行回路116によって実行されている診断プロセスにその内容を利用可能にし得る。分岐記録バッファ144は、前述の分岐記録記憶回路の一例であり、処理された分岐命令に関する情報を診断分析に利用可能にするように構成される。他の例では、分岐記録が有効化されたときに記録された分岐記録をメモリシステムに書き込むことができ、したがって、キャッシュ112及びメモリ104は分岐記録記憶回路として機能し得る。
【0068】
実行された分岐命令に関する情報が外部診断回路106又は診断プロセスにとって有用であり得る状況の一例は、CPU102の全部又は一部のウォームリセットの周りである。例えば、これは、CPUのコンポーネントに記憶された状態のサブセット(ウォーム分岐記録構成値(BREW)140を含む)がリセットされるウォームリセットであり得る(例えば、これは、ウォッチドッグタイマの経過に応答して、又はある種のエラーの発生に応答し得る)。ウォームリセットトリガ(例えば、ウォームリセットをトリガするイベント)に先行するサイクルにおいて実行された分岐命令に関する情報を考慮することは、ウォームリセットがトリガされることにつながるイベントの指示を与えることができるので、診断プロセスにとって有用であり得る。また、リセット直後に処理された分岐命令(例えば、リセットファームウェア内の分岐命令)に関する情報を記録して、リセットコード自体の問題を診断することも有用であり得る。
【0069】
しかしながら、分岐記録バッファ144は、限定されたサイズを有し、例えば、小さい循環バッファとして実装されてもよく、分岐記録バッファ144のサイズを拡張することは、診断プロセスのためにのみ使用されてもよく、プロセッサパイプライン108による通常の処理のために使用されなくてもよく、回路面積の増加に関してこれが被る追加コストを考慮すると、正当化されない場合がある。したがって、分岐記録バッファ144に情報を記憶できる分岐命令の数は制限される。したがって、分岐記録回路による分岐記録が有効化されるときを制御することが有用であり得る。例えば、リセットがトリガされたときに分岐記録を停止すべきか否か(例えば、リセット後に処理された分岐命令に関する情報を記録しない)を制御することが有用であり得、その結果、リセットに先行する時間に実行されたより多くの分岐命令が(より古い分岐命令に関する情報がリセット信号後に処理された分岐命令に関する情報によって上書きされることを防止することによって)記録され得る。これはまた、必要とされないときに分岐記録を実行することによって電力の浪費を回避する。一方、リセットで分岐記録を開始することも有用であり得る。例えば、意図がリセット手順自体における問題を診断することである場合、リセットが発生する前に分岐記録を実行することは電力の浪費であり得、したがって、リセットで分岐記録を開始するように分岐記録回路142を制御することは、電力を節約することができる。また、場合によっては、分岐記録を実行することは侵襲的であり、処理回路の挙動に影響を及ぼし得る。例えば、分岐記録回路142が一度に限られた数の分岐の記録を扱うことができる場合、実行された分岐に関する記録情報を見逃すことを回避するために、分岐記録が有効化されるとき、分岐ユニット124によって単一サイクルで実行され得る分岐の数は、分岐記録回路142によってサポートされ得る数に制限され得る。したがって、不必要に性能を制限することを回避するために、分岐記録回路142によって収集されている情報がユーザにとって関心のないときに分岐記録を有効化することを回避することが望ましい場合がある。
【0070】
しかしながら、いくつかの状況では、プログラマは、リセットの前及び後の両方で分岐情報を記録することが有益であると考える場合があり、又は実際に、分岐記録が無効化され得る(例えば、電力を節約するために)ことを決定する場合がある。
【0071】
したがって、BREC値138及びBREW値140は、ウォームリセットの周りの分岐記録を制御するために提供される。BREW値140は、ウォームリセット及びコールドリセットの両方によってリセットされるように構成されるが、BREC値138は、コールドリセットのみによってリセットされるように構成され、プログラマは、分岐記録回路142が分岐記録を実行するときを制御するように各レジスタの値を設定することができる。
【0072】
BREC値138及びBREW値140は、各々別個のレジスタに記憶されてもよいし、両方とも同じレジスタに記憶されてもよい。例えば、BREC値及びBREW値の各々は、制御レジスタ136のうちの1つの中に提供される単一ビット(例えば、1又は0)であり得る。
【0073】
図2は、ウォームリセットドメイン、非ウォームリセットドメイン及びコールドリセットドメインを示す。図に示されるように、CPUは、(ウォームリセットピン208によって提供される信号に応答して)ウォームリセット中にリセットされるウォームドメイン202と、ウォームリセット中にリセットされないが、(非ウォームリセットピン210によって提供される信号に応答して)コールドリセット中にリセットされる非ウォームドメイン204とに分割され得る。コールドリセットでは、ウォームドメイン202内のすべての状態及び非ウォームドメイン204内のすべての状態がリセットされるので、状態のコールドドメイン206は、ウォームドメイン202及び非ウォームドメイン204の両方を包含するドメインであると考えることができる。
【0074】
データ処理システムはまた、ウォームリセットピン208及び非ウォームリセットピン210を駆動するリセット回路201を含む。特に、リセット回路210は、(ウォームリセットトリガイベントに応答して生成される)ウォームリセット信号及び(コールドリセットトリガイベントに応答して生成される)コールドリセット信号の両方に応答して、ウォームドメイン202内の状態のすべてがリセットされるようにウォームリセットピン208を駆動する。一方、リセット回路210は、コールドリセット信号(ウォームリセット信号ではない)に応答して、コールド非ウォームリセットピン210を駆動し、非ウォームドメイン204内の状態をリセットする。リセット回路はまた、ウォームドメイン202及び非ウォームドメイン204の各々において、ウォームリセットピン208又はコールドリセットピン210のいずれかから分岐して、対応するリセットドメイン(例えば、ウォームドメイン又は非ウォームドメイン)内の各コンポーネントに対応するリセット信号を伝搬し、それらのコンポーネントの状態のリセットをトリガするリセット信号経路のセットを提供するリセットツリーを含んでもよい。リセット回路201は、コールドリセットトリガイベントに応答して、処理回路をリセットすることによってコールドリセットを実行し、ウォームリセットトリガイベントに応答して、コールドリセットトリガイベントに応答してリセットされる状態のサブセットをリセットすることによってウォームリセットを実行する、リセット回路の一例である。
【0075】
図2の例では、ウォームリセットドメイン202は、ウォームリセット構成値(BREW)140と、ウォッチドッグタイマ212などの様々な他のウォームドメイン状態とを含む。ウォッチドッグタイマ(適切に動作するコンピュータ又はCOPタイマとも称される)は、誤動作を検出するために使用されるタイマである。特に、CPUは、通常動作中に、ウォッチドッグタイマを定期的に再始動して、ウォッチドッグタイマが経過する(0にカウントダウンする)のを防止するように構成される。CPUがウォッチドッグタイマの再始動に失敗した場合(例えば、エラーにより)、タイマは経過し、タイムアウト信号を生成する。タイムアウト信号は、補正アクションを開始するために使用され、例えば、ウォッチドッグタイマの経過がウォームリセットトリガであってもよく、したがってウォームリセットをトリガしてもよい。例えば、ウォームリセットで、集積回路への電力はオンのままであり得、その結果、ウォームリセットドメイン内にない状態は、その現在の値を保持する。
【0076】
一方、
図2の非ウォームリセットドメイン204は、コールドリセット構成値138と、分岐記録バッファ144と、デバッグ状態214(例えば、CPUによって実行されるデバッグプロセスに関連する状態)などの様々な他のウォームドメイン状態とを含む。
【0077】
一般に、非ウォームリセットドメイン204は、ウォームリセットの後に維持される必要があるが、コールドリセットの後に維持される必要がない状態を含み得る。例えば、分岐記録バッファ144は、ウォームリセットの前に生成された分岐記録を記憶し得るので、非ウォームドメイン204内にあり、これは、ウォームリセットの原因(例えば、ウォッチドッグタイマ212の経過の原因)を診断するための診断プロセスに必要とされ得る。同様に、ウォームリセット後のデバッグはウォームリセットの前に記憶されたデバッグ状態へのアクセスを必要とし得るので、デバッグ状態214も非ウォームドメイン214内にある。
【0078】
リセットドメインの各々における状態は、デフォルト状態にリセットされるフリップフロップを備え得る(例えば、これは0の値であり得るが、これは単なる一例であり、他の例では、デフォルト状態は例えば1であり得る)。同様に、ウォームリセット構成値及びコールドリセット構成値138、140の各々は、リセット信号に応答してデフォルト値にリセットすることができる(この場合も、これは、例えば、特定の実装形態に応答して1又は0であり得る)。
【0079】
ウォームドメイン202及び非ウォームドメイン204の各々は、
図2に示されていない他の状態も含み得ることが理解されるであろう。
【0080】
図2に示すように、任意選択で、リセット値選択信号を供給して、コールドリセット分岐記録構成値138を1にリセットするか0にリセットするかを制御することができる。リセット値選択信号は、コールドドメイン206を備える集積回路の外部の外部デバイスからコールドリセット分岐記録構成信号ピン216において供給され得るか、又はコールドドメイン206の外部にある集積回路の別の部分上の論理によって生成され得る。これは、コールドリセットの後、分岐記録が、コールドリセットと、処理回路によって実行されるソフトウェアがBREC138及びBREW140の値を構成する時間との間の期間においてデフォルトによって有効化されるか、又はデフォルトによって無効化されるかの構成を可能にする。リセット値選択信号を設けることは任意であり、他の例では、単にBREC138を0又は1の固定値にリセットして、コールドリセット後に分岐記録が有効化されるか否かが固定されるようにしてもよい。
【0081】
上述したように、BREC値138及びBREW値140は、プログラマによって設定されて、ウォームリセットの前後で分岐記録回路142による分岐記録を制御することができる。
図3は、これがどのように実装され得るかの一例を示す。
【0082】
図3の例では、BREC値及びBREW値は各々、1又は0のいずれかに設定することができ、各々、リセット信号に応答して0にリセットされるように構成される。分岐記録回路142は、BREC値とBREW値とが異なるとき(例えば、BREC!=BREWであるとき)分岐記録を有効化し、BREC値とBREW値とが等しいとき(BREC==BREW)分岐記録を無効化するように構成される。
【0083】
図3の表は、様々な分岐記録構成を選択するために、プログラマがBREC及びBREW値を設定することができる値を示す。言い換えれば、この表は、BREC値及びBREW値が、プログラマによって設定されたときから、ウォームリセットが発生し、その時点でBREW値が0にリセットされるときまで、どのようになるかを示す。
図3の表の第1の行に示されるように、プログラマは、BREC値を0に、BREW値を1に設定して、ウォームリセットまで分岐記録を有効化し、ウォームリセット後に分岐記録を無効化するように分岐記録回路を制御することができる(例えば、「ウォームリセット停止」構成)。特に、分岐記録は、プログラマがBREC及びBREWの値を異なる値(0及び1)に設定しているので、リセットの前に有効化される。しかしながら、BREC及びBREW値がリセット後に等しくなる(両方とも0である)ように、BREW値はウォームリセットにおいて0にリセットされるので、分岐記録はウォームリセット後に無効化される。
【0084】
図3の表の第2の行に示されるように、ウォームリセット(例えば、「ウォームリセットで開始」構成)で分岐記録を有効化するように分岐記録回路を制御するために、プログラマは、BREC及びBREW値の両方を1に設定する。このようにして、BREC値とBREW値が等しい(両方とも1である)ので、ウォームリセットの前に分岐記録が無効化されるが、BREW値が0にリセットされ、BREC値とBREW値がもはや等しくない(1と0)ので、ウォームリセットの後に分岐記録が有効化される。
【0085】
したがって、「ウォームリセット停止」構成及び「ウォームリセットで開始」構成の両方について、BREW値は1(又は、より一般的には、非リセット値)に設定され、その結果、BREC値及びBREW値によって示される状態は、(例えば、BREW値がウォームリセットでリセット値(例えば、0)に変更されるため)ウォームリセット値で変更される。しかしながら、これらの値は、BREC!=BREWであるときに分岐記録が有効化される実装形態に固有であることが理解されよう。
【0086】
図3の表の第3の行を参照すると、ウォームリセットを介して記録するように分岐記録回路を制御するために(例えば、「ウォームリセットを介して記録」と称される、ウォームリセットの前及び後の両方で分岐記録を有効化するために)、プログラマは、BREC値を1に、BREW値を0に設定する。このようにして、BREW値とBREC値が等しくなく(1と0)、ウォームリセットでどちらの値も変化しないので、ウォームリセットの前とウォームリセットの後の両方で分岐記録が有効化される。
【0087】
最後に、分岐記録回路を制御して分岐記録を全く実行されないようにするために、プログラマはBREC値とBREW値の両方を0に設定する。このようにして、BREC値とBREW値が等しく(両方とも0)、ウォームリセットでどちらの値も変化しないので、ウォームリセットの前と後の両方で分岐記録が無効化される。BREC値とBREW値の両方がコールドリセットで0にリセットされるので、コールドリセット後のデフォルト状態は分岐記録を無効化することである。
【0088】
したがって、「ウォームリセットを介して記録する」構成及び「記録しない」構成の両方について、BREW値は0(又は、より一般的にはリセット値)に設定され、その結果、BREC値及びBREW値によって示される状態は、(例えば、BREW値は、ウォームリセットの前に既にリセット値(例えば0)であるため)ウォームリセット値において変化しない。しかしながら、これは、BREC==BREWであるときに分岐記録が無効化される実装形態においてのみ当てはまることが理解されよう。
【0089】
上述したように、
図3の表は、BREC!=BREWであるとき、及びBREC値とBREW値の両方がコールドリセットで(及びBREW値の場合にはウォームリセットでも)0にリセットされるときに分岐記録が実行される実装形態において、プログラマがリセットの前及び後に分岐記録をどのように制御できるかを示す。BREC値及びBREW値の両方が1にリセットされる代替実装形態では、表内の0及び1の値は、単にそれぞれ1及び0に置き換えられる。
【0090】
図4は、どのようにソフトウェアが
図3に示される構成の各々を設定することができるか、及びどのようにウォームリセットがBREC及びBREW値に影響を及ぼすかを示す。
図4の図では、BREC値及びBREW値(以下でより詳細に説明するように、これらの値が例外レベル3で実行されるプロセスの分岐記録のみを制御することを示すために、
図4で「E3BREC」及び「E3BREW」として識別される)は、最初は両方とも0であり、例えば、これは、両方の値が0にリセットされるコールドリセットに続く可能性があるか、又はプログラマが両方の値を0に設定することによって分岐記録をオフにしたためである可能性がある。
【0091】
「有効化」ステップにおいて、ソフトウェアは、上述した構成のうちの1つにおいて分岐記録を有効化する。特に、「リセット停止」状態を選択するために、ソフトウェアはBREW値を1に設定する。これは、BREC!=BREWであるので、分岐記録を有効化する。「リセットを介した記録」構成を選択するために、ソフトウェアはBREC値を1に設定し、これはまた、BREC!=BREWであるので、分岐記録を有効化する。「リセット開始」状態を選択するために、ソフトウェアはBREC及びBREWの両方を1に設定し、これは、BREC==BREWであるので、分岐記録を無効化する(又はむしろ、既に無効化されているので、分岐記録を有効化しない)。最後に(簡潔にするために
図4には示されていない)、ソフトウェアは、BREC値及びBREW値をそのままにする(例えば、両方とも0に設定する)ことによって、「記録しない」構成を維持することができる。
【0092】
ウォームリセットでは、BREW値は0にリセットされるが、BREC値は変更されないままである。これは、BREC値及びBREW値が、ウォームリセット後の2つの可能な状態、すなわち、BREC=1及びBREW=0であり、したがってBREC!=BREWであり、分岐記録が有効化される状態と、BREC=0及びBREW=0であり、したがってBREC==BREWであり、分岐記録が無効化される状態とのうちの1つを示すことを意味する。特に、ソフトウェアがリセット停止構成(ウォームリセットの前にBREC=0及びBREW=1)を選択したとき、分岐記録はリセットに続いて無効化される。ソフトウェアがリセット構成(ウォームリセット前にBREC=1及びBREW=0)を介して記録を選択したとき、分岐記録はウォームリセット後に有効化されたままである。ソフトウェアがリセット開始構成(ウォームリセット前にBREC=1及びBREW=1)を選択したとき、ウォームリセットで分岐記録が有効化される。最後に、図には示されていないが、ソフトウェアが記録禁止構成を選択した場合(例えば、ウォームリセット前にBREC値とBREW値の両方を0のままにしておく)、ウォームリセット後に分岐記録が無効化され続けることが理解されよう。
【0093】
図5は、(BREC値とBREW値とが等しくないときに分岐記録が実行される
図3及び
図4とは異なり)BREC値とBREW値とが等しいときに分岐記録を有効化するように分岐記録回路が構成される更に別の例示的な実装形態を示す。この例では、BREC値とBREW値が等しいときに分岐記録が有効化されるので、BREW値は、ウォームリセット開始状態とウォームリセット停止状態の両方を構成するために非リセット値に設定され(例えば、BREWの値がウォームリセットで変更されるように)、BREW値は、ウォームリセットを介した記録状態と記録しない状態の両方を構成するためにリセット値に(例えば、BREWの値がウォームリセットで変化しないように)設定される。
【0094】
図5の表に示す特定の例では、BREC値は、コールドリセット時に0にリセットされ、BREW値は、ウォームリセット時及びコールドリセット時の両方で1にリセットされる。したがって、ウォームリセット停止状態は、BREC==BREW==1を設定することによって構成され、ウォームリセット状態での開始は、BREC==1及びBREW==0を設定することによって構成され、ウォームリセット状態を通じた記録は、BREC==BREW==1を設定することによって構成され、記録しない状態は、BREC及びBREWの両方をそれらのリセット値(それぞれ0及び1)のままにすることによって構成される。
【0095】
BREC値が1にリセットされ、BREW値が0にリセットされる代替実装形態では、表内の0及び1の値は、単にそれぞれ1及び0に置き換えられることに留意されたい。
【0096】
図3~
図5に示される例の各々において、4つの異なる構成(ウォームリセットで停止する、ウォームリセットで開始する、ウォームリセットを介して記録する、及び記録しない)が可能であり、ウォームリセットの前及び後の両方の分岐記録は、分岐記録回路がウォームリセットの前及び後で異なるように動作する(例えば、ウォームリセットで分岐記録を開始又は停止する)ように構成されるときであっても、2つの値(BREC及びBREW)のみを使用して制御され得る。これは、(1)一対の値が4つの異なる状態(例えば、00、01、10、11)を提供し、(2)BREW値はウォームリセットとコールドリセットの両方でリセットされ、BREC値はコールドリセットでのみリセットされ(4つの状態のうちの2つが分岐記録回路を制御して、ウォームリセットの両側で異なるように動作させることができる)、(3)BREC値及びBREW値は、値を比較することによって(例えば、値が等しいか又は等しくないかを見るために)分岐記録を実行するか否かを判定するために使用され得るために可能である。したがって、ウォームリセットの前及び後の両方の分岐記録は、ウォームリセット後にいかなるソフトウェア構成も必要とせずに構成可能な方法で実装することができ、プログラマがシステムの特定の必要性に合わせて(例えば、CPU上又は外部診断回路で実行される診断ソフトウェアの要件に応答して、及び節電対性能改善の相対的重要性に応答して)プロセスを調整することを可能にする。更に、4つの状態すべてを表すために2つの値(BREC及びBREW)だけが必要とされ、BREC値とBREW値とを比較することによって(例えば、それらが等しいか否かを判定するために)任意の所与の時間に分岐記録を実行するか否かを判定することが可能であるので、コストの著しい増加なしにこれらの利点を提供することが可能である。特に、本技法は、分岐記録を制御するようにプログラムされるべき2つの構成値を利用し、任意の所与の時間において分岐記録を実行するか否かを判定するために必要とされる回路は、2つの値を比較するための単純な比較回路を使用して実装され得る。
【0097】
図6は、BREC及びBREW値の制御下での分岐記録回路の動作方法を示すフロー図である。
図6に示される方法では、分岐命令が処理されるか否かが判定される(S610)。分岐記録回路は、分岐命令が(例えば、
図1のプロセッサパイプラインによって)処理されるまで待機する(「N」分岐)。
【0098】
分岐記録回路が、処理回路が分岐命令を処理していると判定(「Y(はい)」矢印、例えば、分岐記録回路は、いつ分岐命令がフェッチ回路によってフェッチされたか、いつ分岐命令が復号回路によって復号されたか、若しくはいつ分岐命令が発行回路によって発行されたか、又はいつ分岐命令が実行回路によって実行されたかを検出し得る)したとき、次いで、BREC及びBREW値が所定の条件を満たすか否かを判定する(S620)。例えば、
図3~
図5の例のように、所定の条件は、BREC値とBREW値が等しいか否かに基づくことができる(例えば、
図3及び
図4では、所定の条件は、BREC!=BREWであり、
図5では、所定の条件は、BREC==BREWである)。代替的に、分岐記録が実行されるべきであることを示すために、任意の他の所定の条件がBREC及びBREW値に対して指定され得る。
【0099】
BREC値及びBREW値が所定の条件を満たさない場合(「N(いいえ)」矢印)、方法はステップS610に戻り、分岐記録回路は、別の分岐命令が処理されるまで待機する。
【0100】
一方、所定の条件が満たされる場合(「Y(はい)」矢印)、分岐記録回路は、ステップS622において、処理された分岐が取られたか否かを判定する。分岐が取られない場合、方法は再びステップS610に戻り、別の分岐の処理を待機する。
【0101】
ステップS622において、分岐が取られると判定された場合、ステップS624において、分岐記録回路は、(特定の分岐が分岐記録バッファに記録された情報を有するべきか否かを判定するための)任意のフィルタ基準が満たされるか否かを判定する。例えば、フィルタ基準は、分岐記録が記憶されるべき1つ以上のタイプの分岐(又は分岐記録が記憶されるべきでない1つ以上のタイプの分岐)を指定することができる。また、フィルタ基準は、1つ以上のアドレス範囲を指定することができ、その範囲内の命令アドレス(又はターゲットアドレス)を有する分岐は、分岐記録バッファに記憶されるべきであり、又は記憶されるべきではない。フィルタ基準が指定されることは必須ではなく、フィルタ基準が現在指定されていない場合、ステップS622における結果は常にY(はい)であり得る。
【0102】
したがって、ステップS622でいずれかのフィルタ基準が満たされた場合、ステップS630で、分岐記録回路は、処理された分岐命令に関する情報を分岐記録バッファに記録する。ステップS630は、課されているフィルタ基準が現在の分岐に対して満たされていない場合には省略される。分岐記録バッファに何らかの情報が記憶されているか否かにかかわらず、方法はステップS610に戻り、分岐記録回路は別の分岐命令が処理されるまで待機する。
【0103】
図6は、ある順序で一連のステップを示しているが、ステップS620、S622、S624における様々なチェックは、異なる順序で実行されてもよく、又は少なくとも部分的に並行して実行されてもよいことが理解されよう。
【0104】
図7は、対応するリセットトリガに応答してウォームリセット又はコールドリセットを実行する方法を示すフロー図である。
図7の方法では、コールドリセットトリガ(例えば、電源オン動作)が検出されたか否かが判定される(S710)。コールドリセットトリガが検出されると(「Y(はい)」矢印)、コールドリセットS730が実行される。特に、コールドリセットS730は、「非ウォーム」ドメイン(BREC値を含む)をリセットするステップS740と、ウォームドメインをリセットするステップS760とを含む。方法は次いでステップS710に戻る。
【0105】
一方、ステップS710において、コールドリセットトリガが発生したと判定された場合、ウォームリセットトリガが発生したか否かが判定される(ステップS720)。ウォームリセットトリガが発生していない場合(「N(いいえ)」矢印)、方法はステップS710に戻る。一方、ウォームリセットトリガが発生したと判定された場合(「Y(はい)」矢印)、方法がステップS710に戻る前に、ウォームドメイン(BREW値を含む)がリセットされる(S750)。
【0106】
ここで
図8を参照すると、この図は、データ処理装置によって実行され得るプロセスの一例を概略的に示す。ハイパーバイザ802は、いくつかの仮想マシン(VM、ゲストオペレーティングシステム又はゲストOSとしても知られる)804を管理し得る。各VM804は、1つ以上のアプリケーション806を管理し得る。例えば、ハイパーバイザ802は、アドレス空間のどの領域が各仮想マシン804に割り当てられるかを制御し、仮想マシン804間のスイッチ(例えば、それぞれの仮想マシン804間で処理リソースを時間共有するための割り込みのスケジューリング)を制御し得る。同様に、各VM804は、アドレス空間のどの領域がそのVM804の下で実行する各アプリケーション806に割り当てられるかを制御し得、必要に応答してアプリケーション間のスイッチを制御し得る。
【0107】
図8に示すように、各プロセスは、所与の特権レベルEL0、EL1、EL2、EL3に関連付けられている。この例では、より高い番号付けされた特権レベルは、より低い番号付けされた特権レベルよりも特権が与えられているが、他の例では他の方法で番号付けされてもよい(例えば、EL0は、代わりに、最も特権が与えられた例外レベルを示してもよい)。この例では、アプリケーション806は特権レベルEL0で実行され、VM804は特権レベルEL1で実行され、ハイパーバイザ802は特権レベルEL2で実行される。典型的には、より高い特権レベルで実行されるプロセスは、より低い特権レベルで実行されるプロセスに利用できない権利を有する。
【0108】
図8に示すように、ハイパーバイザ802、VM804、及び装置806は、通常ドメインで動作し得る。更に、この装置は、通常ドメインで実行されるプロセスがセキュアドメインに関連付けられたデータ又は命令にアクセスできないように、通常ドメインから分割されたセキュアドメインをサポートし得る。したがって、セキュアオペレーティングシステム(OS)810、及びセキュアOS810の制御下でセキュアドメイン内で実行される信頼できるアプリケーション812など、セキュアドメイン内で実行されるプロセスも存在し得る。セキュアOS810及び信頼できるアプリケーション812は、それぞれ特権レベルS-EL1、S-EL0で実行される。通常ドメインとセキュアドメインとの間の遷移を管理するために、セキュアモニタプロセス814も特権レベルEL3で提供される。セキュアモニタプロセス814は、例えば、アドレス空間のどの領域がセキュアドメイン又は非セキュアドメインに関連付けられているかを管理し得、通常ドメイン内の非セキュアプロセスがセキュア領域内のデータ又は命令にアクセスすることを防止するために、何らかの保護ハードウェアが提供される。セキュアモニタ814はまた、ウォームリセット又はコールドリセットに続くリセットコードの実行を制御し得る。通常ドメイン及びセキュアドメインを分割するための技法の一例は、英国ケンブリッジのARM(登録商標)Limitedによって提供されるTrustzone(登録商標)技法であるが、他の例も使用することができる。
図8に示されるようなセキュアドメインの提供は任意選択であり、他の実施形態は、例えば、セキュアモニタ814、セキュアOS810、及び信頼できるアプリケーション812をサポートしなくてもよい。通常ドメイン及びセキュアドメインは、ウォームリセットドメイン及び非ウォームリセットドメインなどのリセットドメインとは無関係である(独立している)。
【0109】
より高い特権レベルに関連付けられたデータ(例えば、より高い特権レベルで実行されるプロセスによって修正されたデータ)は、より低い特権レベルで実行されるプロセスにアクセス不可能であり得、その結果、例えば、あまり信頼されていないプログラムは、機密コード及びデータにアクセスできない。例えば、処理回路がより高い特権レベルで実行していた間に、より低い特権コードが分岐記録回路によって生成された分岐記録にアクセスすることを防止することが望ましい場合がある。リセットファームウェア(例えば、リセット直後に実行されるコード)は、典型的には、より高い特権レベルで実行されるので、これは、ウォームリセットの前後に生成される分岐記録の場合に特に当てはまり得る。したがって、所与の特権レベルよりも低い特権レベルで実行されるプロセスが分岐記録バッファにアクセスできるか否かを制御する何らかの機構を提供することが有用である可能性がある。
【0110】
例えば、BREC値及びBREW値は、EL3において実行されるプロセスにのみアクセス可能であり得、分岐記録は、より低い特権レベルにおいて何らかの他の機構によって(例えば、BREC値及びBREW値とは独立して)制御される。これにより、EL3で実行された分岐に関する情報が分岐記録バッファに記憶されるか否かを低い特権のプロセスが制御することが防止され、セキュリティが改善される。
【0111】
更に、EL0、EL1、又はEL2で実行されるプロセスは、分岐記録バッファにアクセスすることが防止され得る。例えば、制御値が(例えば、
図1に示される制御レジスタ136のうちの1つにおいて)提供されてもよく、処理回路は、制御値が所与の値に設定されるとき、EL0、EL1、又はEL2において実行するプロセスが分岐記録バッファにアクセスすることを防止するように構成されてもよい。これはまた、セキュリティの改善につながり、一方で、より低い特権のプロセスが分岐記録にアクセスすることを、そうすることが有用かつ安全である状況において可能にする柔軟性も与える。一方、いくつかの実装形態では、制御値は提供されず、EL0、EL1、又はEL2において実行するプロセスは、分岐記録にアクセスすることを完全に防止され得る。
【0112】
図9は、現在実行中のプロセスが分岐記録にアクセスすることを許可されるべきか否かを判定するための方法の一例を示すフロー図である。この方法では、現在実行中のプロセスがEL3で実行中であるか否かが判定される(S902)。現在の例外レベルがEL3である場合、処理回路は、分岐記録にアクセスすることを許可される(S904)。更に、処理回路がEL3において実行しているとき、BREC値及びBREW値が所定の条件(上述したように、例えば、所定の条件はBREC!=BREW又はBREC==BREWであり得る)を満たすか否かを判定すること(S906)によって、分岐記録を有効化するか否かが判定される。所定の条件が満たされた場合、分岐記録回路は分岐記録を有効化する(S908)。
【0113】
一方、現在の例外レベルがEL3でない場合(例えば、現在の例外レベルがEL0、EL1、又はEL2などのより低い例外レベルである場合)、分岐記録回路は、BREC値及びBREW値とは独立して(例えば、何らかの他の条件に基づいて)分岐記録を有効化するか否かを判定する(S910)ように構成される。更に、EL3において実行していないとき、制御レジスタ内の所与の制御値が第1の値を有するか否かが判定され(S912)、第1の値を有する場合、処理回路は分岐記録にアクセスすることが防止される(S914)。一方、制御値が異なる(例えば、第2の)値を有する場合、処理は分岐記録バッファにアクセスすることが防止されない(例えば、処理回路は分岐記録バッファにアクセスすることを許可される)。制御値は、EL3で動作するコードにアクセス可能であり、低い特権例外レベルで動作するコードにアクセス不可能であり、その結果、所与の制御値の更新は、EL3で実行される命令に制限される。
【0114】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配設又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0115】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されているが、本発明はこれらの正確な実施形態に限定されないこと、及び様々な変更及び修正が、当業者によって、添付の特許請求の範囲によって定義されている本発明の範囲から逸脱することなく、実施形態に行われ得ることが理解されよう。
【国際調査報告】