(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024147049
(43)【公開日】2024-10-16
(54)【発明の名称】デバッグプログラム、情報処理装置及びデバッグ方法
(51)【国際特許分類】
G06F 11/34 20060101AFI20241008BHJP
G06F 11/36 20060101ALI20241008BHJP
【FI】
G06F11/34 176
G06F11/36 164
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023059817
(22)【出願日】2023-04-03
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】藤岡 俊太郎
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042HH07
5B042HH30
5B042MA08
5B042MA17
5B042MC40
(57)【要約】
【課題】デバッグに有用なイベント情報が削除されることを防止する。
【解決手段】処理部12は検証対象回路15のシミュレーションの実行中に発生するイベントに係るイベント情報を時系列に記憶するトレースRAM11aに対し、書き込みアドレスを指定してイベント情報を書き込む。処理部12は書き込みのたびに書き込みアドレスを更新し、異常イベントの発生を検出したときの書き込みアドレスが末端アドレスとなり、異常イベントの前に発生したイベントに係るイベント情報が書き込まれた第1記憶領域11a1を設定する。処理部12は第1記憶領域11a1の設定後に発生するイベントに係るイベント情報を、第1記憶領域11a1以外の第2記憶領域11a2に書き込む。処理部12は第2記憶領域11a2の末端アドレスまでイベント情報を書き込んだ場合、第2記憶領域11a2の先頭アドレスに書き込みアドレスを戻しイベント情報の書き込みを続ける。
【選択図】
図1
【特許請求の範囲】
【請求項1】
回路のシミュレーションの実行中に発生するイベントに係るイベント情報を時系列に記憶する記憶領域に対して、書き込みアドレスを指定して、前記イベント情報を書き込み、
前記イベント情報を前記記憶領域に書き込むたびに、前記書き込みアドレスを更新し、
異常イベントの発生を検出したとき、前記異常イベントの発生を検出したときの前記書き込みアドレスが末端のアドレスとなり、前記異常イベントの前に発生した前記イベントに係る前記イベント情報が書き込まれた第1記憶領域を前記記憶領域に設定し、
前記第1記憶領域の設定後に発生する前記イベントに係る前記イベント情報を、前記記憶領域における前記第1記憶領域以外の第2記憶領域に書き込み、
前記第2記憶領域の末端のアドレスまで前記イベント情報を書き込んだ場合、前記第2記憶領域の先頭のアドレスに前記書き込みアドレスを戻し、前記イベント情報の書き込みを続ける、
処理をコンピュータに実行させるデバッグプログラム。
【請求項2】
前記第1記憶領域を設定する処理は、前記第1記憶領域の末端のアドレスから、前記第1記憶領域の先頭のアドレスを算出する処理を含む、請求項1に記載のデバッグプログラム。
【請求項3】
前記第1記憶領域を設定する処理は、前記第1記憶領域の末端のアドレスの、最上位ビットを反転させた値に1を加えることで、前記第1記憶領域の先頭のアドレスを算出する処理を含む、請求項1に記載のデバッグプログラム。
【請求項4】
前記書き込みアドレスが、前記第1記憶領域の先頭のアドレスである場合、前記書き込みアドレスを、前記第1記憶領域の末端のアドレスに1を加えたアドレスに変更する、処理を前記コンピュータに実行させる請求項1に記載のデバッグプログラム。
【請求項5】
前記回路を含むシミュレーションモデルは、
前記記憶領域に対応するトレースメモリと、
前記書き込みアドレスを保持する第1レジスタと、
前記第1記憶領域が設定されているか否かを示す値を保持する第2レジスタと、
前記第1記憶領域の先頭のアドレスを保持する第3レジスタと、
前記第1記憶領域の末端のアドレスを保持する第4レジスタと、
を含む、請求項1に記載のデバッグプログラム。
【請求項6】
前記回路は、プロセッサと前記プロセッサに接続されたメモリを含み、
前記イベント情報は、前記プロセッサに含まれるプログラムカウンタの値、前記メモリへのアクセス命令、前記メモリから読み出されるデータ、前記メモリに書き込まれるデータ、またはアクセスされた前記メモリのアドレス、を含む、
請求項1に記載のデバッグプログラム。
【請求項7】
回路のシミュレーションの実行中に発生するイベントに係るイベント情報を時系列に記憶する記憶領域を含む記憶部と、
前記記憶領域に対して、書き込みアドレスを指定して、前記イベント情報を書き込み、前記イベント情報を前記記憶領域に書き込むたびに、前記書き込みアドレスを更新し、異常イベントの発生を検出したとき、前記異常イベントの発生を検出したときの前記書き込みアドレスが末端のアドレスとなり、前記異常イベントの前に発生した前記イベントに係る前記イベント情報が書き込まれた第1記憶領域を前記記憶領域に設定し、前記第1記憶領域の設定後に発生する前記イベントに係る前記イベント情報を、前記記憶領域における前記第1記憶領域以外の第2記憶領域に書き込み、前記第2記憶領域の末端のアドレスまで前記イベント情報を書き込んだ場合、前記第2記憶領域の先頭のアドレスに前記書き込みアドレスを戻し、前記イベント情報の書き込みを続ける処理部と、
を有する情報処理装置。
【請求項8】
処理部が、
回路のシミュレーションの実行中に発生するイベントに係るイベント情報を時系列に記憶する記憶領域に対して、書き込みアドレスを指定して、前記イベント情報を書き込み、
前記イベント情報を前記記憶領域に書き込むたびに、前記書き込みアドレスを更新し、
異常イベントの発生を検出したとき、前記異常イベントの発生を検出したときの前記書き込みアドレスが末端のアドレスとなり、前記異常イベントの前に発生した前記イベントに係る前記イベント情報が書き込まれた第1記憶領域を前記記憶領域に設定し、
前記第1記憶領域の設定後に発生する前記イベントに係る前記イベント情報を、前記記憶領域における前記第1記憶領域以外の第2記憶領域に書き込み、
前記第2記憶領域の末端のアドレスまで前記イベント情報を書き込んだ場合、前記第2記憶領域の先頭のアドレスに前記書き込みアドレスを戻し、前記イベント情報の書き込みを続ける、
デバッグ方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デバッグプログラム、情報処理装置及びデバッグ方法に関する。
【背景技術】
【0002】
ASIC(Application Specific Integrated Circuit)やSoC(System on a Chip)などの半導体装置を実際に製造する前に、半導体装置の回路情報が作成される。そして、回路情報に基づいて、設計した回路が正常に動作するか検証するために、コンピュータ上でシミュレーションが行われる。このようなシミュレーションは、論理検証とも呼ばれる。
【0003】
シミュレーションにおいて、回路の論理障害(バグ)を発見するデバッグ機能を実現するため、シミュレーション実行中に発生したイベントに係るイベント情報を、時系列に記憶することがある。このようなイベント情報を記憶するメモリは、トレースメモリと呼ばれることもある。たとえば、CPUとメモリを含む回路のシミュレーションモデルを用いたシミュレーションの実行時、CPUの実行履歴情報をトレースメモリに保持する方法がある(たとえば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
イベント情報を記憶するメモリの記憶容量は有限であるため、イベント情報は、メモリの末端のアドレスまで書き込まれた後は、再度メモリの先頭アドレスから書き込みが行われることがある。しかし、この方法では、論理障害などの異常イベントが発生したときに、その発生原因の特定に有用な(つまりデバッグに有用な)イベント情報が、その後に発生するイベントに係るイベント情報によって上書きされ、消えてしまう可能性がある。
【0006】
1つの側面では、本発明は、デバッグに有用なイベント情報が削除されることを防止することを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様では、回路のシミュレーションの実行中に発生するイベントに係るイベント情報を時系列に記憶する記憶領域に対して、書き込みアドレスを指定して、前記イベント情報を書き込み、前記イベント情報を前記記憶領域に書き込むたびに、前記書き込みアドレスを更新し、異常イベントの発生を検出したとき、前記異常イベントの発生を検出したときの前記書き込みアドレスが末端のアドレスとなり、前記異常イベントの前に発生した前記イベントに係る前記イベント情報が書き込まれた第1記憶領域を前記記憶領域に設定し、前記第1記憶領域の設定後に発生する前記イベントに係る前記イベント情報を、前記記憶領域における前記第1記憶領域以外の第2記憶領域に書き込み、前記第2記憶領域の末端のアドレスまで前記イベント情報を書き込んだ場合、前記第2記憶領域の先頭のアドレスに前記書き込みアドレスを戻し、前記イベント情報の書き込みを続ける、処理をコンピュータに実行させるデバッグプログラムが提供される。
【0008】
また、1つの実施態様では、情報処理装置が提供される。
また、1つの実施態様では、デバッグ方法が提供される。
【発明の効果】
【0009】
1つの側面では、本発明は、デバッグに有用なイベント情報が削除されることを防止できる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施の形態の情報処理装置及びデバッグ方法の一例を示す図である。
【
図2】第2の実施の形態の情報処理装置のハードウェア例を示すブロック図である。
【
図3】情報処理装置の機能例を示すブロック図である。
【
図4】シミュレーションモデルの一例を示す図である。
【
図5】シミュレーションモデルの他の例を示す図である。
【
図6】トレースRAMユニットの一例を示す図である。
【
図9】第2の実施の形態の情報処理装置の処理手順の一例を示すフローチャートである。
【
図10】プロテクト領域の設定処理の手順の一例を示すフローチャートである。
【
図12】プロテクト領域の他の設定例を示す図である。
【発明を実施するための形態】
【0011】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
(第1の実施の形態)
第1の実施の形態の情報処理装置は、検証対象の回路のシミュレーションの実行中に発生するイベントに係るイベント情報を記憶領域に時系列に記憶する。イベント情報は、デバッグに用いられるものであるため、イベント情報の記憶処理を含めてデバッグ方法ということがある。
【0012】
検証対象の回路(たとえば、プロセッサ)は、近年高速化が進んでおり、デバッグに用いられるイベント情報は頻繁に発生する可能性がある。そのため、比較的大容量のメモリを用いてもすぐに容量を使い切ってしまう可能性がある。そこで、末端のアドレスまで書き込まれた後は、再度先頭アドレスから書き込みを行う(このような動作をサイクリックということがある)トレースメモリが用いられることがある。
【0013】
しかし、論理障害などの異常イベントが発生したときに、デバッグに有用なイベント情報が、その後に発生するイベントに係るイベント情報によって上書きされ、消えてしまう可能性がある。異常イベント発生前の(たとえば、異常イベント発生直前の)イベントに係るイベント情報は、異常イベントの発生原因の特定に有用であり、デバッグに有用なイベント情報である。
【0014】
第1の実施の形態の情報処理装置は、このようなデバッグに有用なイベント情報が削除されることを防止するものである。
図1は、第1の実施の形態の情報処理装置及びデバッグ方法の一例を示す図である。
【0015】
情報処理装置10は、記憶部11及び処理部12を有する。情報処理装置10は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置10は、コンピュータと呼ばれてもよい。
【0016】
記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。また、記憶部11は、揮発性半導体メモリと不揮発性ストレージの両方を含んでいてもよい。記憶部11は、トレース用の記憶領域11aを含む。
【0017】
記憶領域11aには、検証対象の回路のシミュレーションの実行中に発生するイベントに係るイベント情報が、時系列に記憶される。このような記憶領域11aは、たとえば、RAMなどの揮発性半導体メモリを用いて実装できる。以下、記憶領域11aをトレースRAM11aと表記する。ただし、トレースRAM11aは、フラッシュメモリなどの不揮発性ストレージの記憶領域であってもよい。
【0018】
また、記憶部11は、検証対象の回路の回路情報11bを記憶する。回路情報11bは、たとえば、HDL(Hardware Description Language)などで記述されている。以下の例では、検証対象の回路として、プロセッサ15aとメモリ15bを含む検証対象回路15(たとえば、ASICやSoC)が用いられる。このような検証対象回路15は、シミュレーションモデルということもできる。なお、検証対象の回路は、
図1に示すような検証対象回路15に限定されるわけではない。
【0019】
処理部12は、たとえば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。プロセッサは、たとえば、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラム(たとえば、デバッグプログラム)を実行する。プロセッサの集合が、マルチプロセッサまたは単に「プロセッサ」と呼ばれてもよい。ただし、処理部12は、ASICやFPGA(Field Programmable Gate Array)などの電子回路により実現されるようにしてもよい。その場合、情報処理装置10は、シミュレーション回路と呼ぶこともできる。
【0020】
処理部12は、記憶部11から回路情報11bを読み込み、検証対象回路15に対するシミュレーションを実行する。シミュレーションでは、たとえば、ハード・ソフト協調検証が行われ、検証対象回路15が正常に動作するか否かが検証される。
【0021】
処理部12は、トレースRAM11aに対して、書き込みアドレス(以下ライトアドレスという)を指定して、検証対象回路15のシミュレーションの実行中に発生するイベントに係るイベント情報を書き込む。
【0022】
イベント情報は、たとえば、プロセッサ15aに含まれるプログラムカウンタ(図示せず)の値や、プロセッサ15aがメモリ15bにアクセスした際のメモリアクセス情報などである。メモリアクセス情報は、たとえば、メモリ15bへのアクセス命令(書き込み命令または読み出し命令)、メモリ15bから読み出されるデータ、メモリ15bに書き込まれるデータ、またはアクセスされたメモリ15bのアドレスを含む。ただ、イベント情報は、プログラムカウンタの値やメモリアクセス情報に限定されるものではない。
【0023】
処理部12によるイベント情報の書き込みタイミングは、たとえば、プログラムカウンタを書き込む場合はクロックサイクルごと、メモリアクセス情報を書き込む場合は、イベント発生ごとである。
【0024】
処理部12は、イベント情報をトレースRAM11aに書き込むたびに、ライトアドレスを更新する(たとえば、+1する)。
処理部12は、シミュレーション中に、異常イベントの発生を検出したとき、そのときのライトアドレスが末端アドレスとなり、異常イベントの前に発生したイベントに係るイベント情報が書き込まれた第1記憶領域11a1をトレースRAM11aに設定する。
【0025】
たとえば、処理部12は、上記末端のアドレスから、第1記憶領域11a1の先頭アドレスを算出する。先頭アドレスの算出において、処理部12は、末端アドレスの最上位ビットを反転させた値に1を加えることで、先頭アドレスを算出してもよい。その場合、トレースRAM11aの半分の記憶領域を第1記憶領域11a1に割り当てることができる。
【0026】
また、処理部12は、たとえば、トレースRAM11aのうち第1記憶領域11a1とそれ以外の第2記憶領域11a2の割合に関する情報を取得して、当該割合になるように、第1記憶領域11a1の先頭アドレスを算出してもよい。なお、異常イベントとは、たとえば、仕様とは異なる回路動作などである。
【0027】
処理部12は、第1記憶領域11a1の設定後に発生するイベントに係るイベント情報を、トレースRAM11aにおける第1記憶領域11a1以外の第2記憶領域11a2に書き込む。つまり、第1記憶領域11a1は、プロテクト領域となり、第1記憶領域11a1の設定後に発生するイベントに係るイベント情報は、第1記憶領域11a1には書き込まれない。
【0028】
処理部12は、第2記憶領域11a2の末端のアドレスまでイベント情報を書き込んだ場合、第2記憶領域11a2の先頭のアドレスにライトアドレスを戻し、イベント情報の書き込みを続ける。
図1の例では、第2記憶領域11a2は、第1記憶領域11a1を挟んで2つに分かれている。
図1の例では、第2記憶領域11a2の後半部分の末端のアドレスは、トレースRAM11a自体の末端のアドレスに等しい。また、第2記憶領域11a2の前半部分の先頭のアドレスは、トレースRAM11a自体の先頭のアドレスに等しい。このため、
図1の例では、トレースRAM11aの末端のアドレスまでイベント情報を書き込んだ場合、トレースRAM11aの先頭のアドレスにライトアドレスを戻し、イベント情報の書き込みを続ける。
【0029】
なお、第1記憶領域11a1の末端アドレスの次のアドレスを第2記憶領域11a2の先頭アドレスということもでき、第1記憶領域11a1の先頭アドレスの1つ前のアドレスを第2記憶領域11a2の末端アドレスということもできる。
【0030】
処理部12は、ライトアドレスが第1記憶領域11a1の先頭アドレスである場合、ライトアドレスを、第1記憶領域11a1の末端のアドレスに1を加えたアドレスに変更する。これにより、第1記憶領域11a1へのイベント情報の書き込みをスキップできる。
【0031】
なお、検証対象回路15のシミュレーションが終了すると、処理部12は、たとえば、ユーザにより入力される読み出し命令に基づいて、トレースRAM11aに記憶されたイベント情報を読み出す。処理部12は、読み出したイベント情報を出力する。処理部12は、たとえば、イベント情報を、図示しない表示装置に出力して表示させる。処理部12は、読み出したイベント情報を他の情報処理装置に送信してもよい。
【0032】
ユーザは、読み出されたイベント情報に基づいて、デバッグ作業を行う。たとえばユーザは、読み出されたイベント情報に基づいて、異常イベントが発生した原因を調査し、バグの発生する検証対象回路15の論理の修正などを行う。
【0033】
以上のように、第1の実施の形態の情報処理装置10の処理部12は、回路のシミュレーションの実行中に発生するイベントに係るイベント情報を時系列に記憶するトレースRAM11aに対して、ライトアドレスを指定して、イベント情報を書き込む。また、処理部12は、イベント情報をトレースRAM11aに書き込むたびに、ライトアドレスを更新する。さらに処理部12は、異常イベントの発生を検出したとき、そのときのライトアドレスが末端のアドレスとなり、異常イベントの前に発生したイベントに係るイベント情報が書き込まれた第1記憶領域11a1をトレースRAM11aに設定する。そして、処理部12は、第1記憶領域11a1の設定後に発生するイベントに係るイベント情報を、トレースRAM11aにおける第1記憶領域11a1以外の第2記憶領域11a2に書き込む。また、処理部12は、第2記憶領域11a2の末端のアドレスまでイベント情報を書き込んだ場合、第2記憶領域11a2の先頭のアドレスにライトアドレスを戻し、イベント情報の書き込みを続ける。
【0034】
これにより、論理障害などの異常イベントが発生したときに、デバッグに有用なイベント情報が、その後に発生するイベントに係るイベント情報によって上書きされ、削除されることを防止できる。また、このようなデバッグに有用なイベント情報を用いることで、デバッグ効率が向上し、製品品質向上、出荷工程短縮などの効果が見込める。
【0035】
(第2の実施の形態)
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理装置のハードウェア例を示すブロック図である。
【0036】
情報処理装置20は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置20は、コンピュータと呼ばれてもよい。
情報処理装置20は、バスに接続されたCPU21、RAM22、HDD23、GPU24、入力インタフェース25、媒体リーダ26及び通信インタフェース27を有する。CPU21は、第1の実施の形態の処理部12に対応する。RAM22またはHDD23は、第1の実施の形態の記憶部11に対応する。
【0037】
CPU21は、プログラムの命令を実行するプロセッサである。CPU21は、HDD23に記憶されたプログラム及びデータをRAM22にロードし、プログラムを実行する。情報処理装置20は、複数のプロセッサを有してもよい。
【0038】
RAM22は、CPU21で実行されるプログラム及びCPU21で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。情報処理装置20は、RAM以外の種類の揮発性メモリを有してもよい。
【0039】
HDD23は、オペレーティングシステム(OS:Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムと、データとを記憶する不揮発性ストレージである。情報処理装置20は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の不揮発性ストレージを有してもよい。
【0040】
GPU24は、CPU21と連携して画像処理を行い、情報処理装置20に接続された表示装置24aに画像を出力する。表示装置24aは、たとえば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイまたはプロジェクタである。情報処理装置20に、プリンタなどの他の種類の出力デバイスが接続されてもよい。
【0041】
また、GPU24は、GPGPU(General Purpose Computing on Graphics Processing Unit)として使用されてもよい。GPU24は、CPU21からの指示に応じてプログラムを実行し得る。情報処理装置20は、RAM22以外の揮発性半導体メモリをGPUメモリとして有してもよい。
【0042】
入力インタフェース25は、情報処理装置20に接続された入力デバイス25aから入力信号を受け付ける。入力デバイス25aは、たとえば、マウス、タッチパネルまたはキーボードである。情報処理装置20に複数の入力デバイスが接続されてもよい。
【0043】
媒体リーダ26は、記録媒体26aに記録されたプログラム及びデータを読み取る読み取り装置である。記録媒体26aは、たとえば、磁気ディスク、光ディスクまたは半導体メモリである。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)及びHDDが含まれる。光ディスクには、CD(Compact Disc)及びDVD(Digital Versatile Disc)が含まれる。媒体リーダ26は、記録媒体26aから読み取られたプログラム及びデータを、RAM22やHDD23などの他の記録媒体にコピーする。読み取られたプログラムは、CPU21によって実行されることがある。
【0044】
記録媒体26aは、可搬型記録媒体であってもよい。記録媒体26aは、プログラム及びデータの配布に用いられることがある。また、記録媒体26a及びHDD23が、コンピュータ読み取り可能な記録媒体と呼ばれてもよい。
【0045】
通信インタフェース27は、ネットワーク27aを介して他の情報処理装置と通信する。通信インタフェース27は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【0046】
次に、情報処理装置20の機能について説明する。
図3は、情報処理装置の機能例を示すブロック図である。
情報処理装置20は、検証対象回路情報記憶部31、イベント情報記憶部32、シミュレーション実行部33、イベント情報書き込み部34、イベント情報読み出し部35、イベント情報出力部36を有する。検証対象回路情報記憶部31、イベント情報記憶部32は、たとえば、RAM22またはHDD23を用いて実装される。シミュレーション実行部33、イベント情報書き込み部34、イベント情報読み出し部35、イベント情報出力部36は、たとえば、CPU21及びプログラムを用いて実装される。
【0047】
検証対象回路情報記憶部31は、検証対象回路の回路情報を記憶する。
イベント情報記憶部32は、検証対象回路のシミュレーションの実行中に発生するイベントに係るイベント情報を時系列に記憶する。イベント情報記憶部32は、トレースRAMとして機能する。
【0048】
シミュレーション実行部33は、検証対象回路情報記憶部31から回路情報を読み込み、検証対象回路に対するシミュレーションを実行する。
イベント情報書き込み部34は、イベント情報記憶部32に、検証対象回路のシミュレーションの実行中に発生するイベントに係るイベント情報を書き込む。
【0049】
イベント情報読み出し部35は、たとえば、ユーザによる入力デバイス25aの操作などにより入力される読み出し命令に基づいて、イベント情報記憶部32に記憶されたイベント情報を読み出す。
【0050】
イベント情報出力部36は、読み出したイベント情報を出力する。イベント情報出力部36は、たとえば、イベント情報を、表示装置24aに出力して表示させる。イベント情報出力部36は、読み出したイベント情報を、ネットワーク27aを介して、他の情報処理装置に送信してもよい。
【0051】
(シミュレーションモデル)
以下、第2の実施の形態の情報処理装置20が扱うシミュレーションモデルの例を説明する。
【0052】
図4は、シミュレーションモデルの一例を示す図である。
シミュレーションモデル40aは、プロセッサ41とプロセッサ41に接続されたメインメモリ42とを含む検証対象回路(たとえば、ASICやSoC)と、トレースRAMユニット43を含むものである。
【0053】
プロセッサ41は、たとえば、CPU、GPU、DSPなどである。プロセッサ41は、プログラムカウンタ41aと、ERレジスタ41bを含む。
プログラムカウンタ41aは、プロセッサ41が次に実行する命令が格納されているメインメモリ42のアドレスを、カウンタ値として保持する。
【0054】
ERレジスタ41bは、シミュレーションの実行中に異常イベントが検出されたときに、その旨を表すフラグ値が設定されるレジスタである。
メインメモリ42は、プロセッサ41が実行するプログラムが格納されるメモリである。
【0055】
トレースRAMユニット43は、検証対象回路からイベント情報を取得し、取得したイベント情報を時系列に記憶する。
図4のシミュレーションモデル40aでは、トレースRAMユニット43は、プログラムカウンタ41aのカウンタ値をイベント情報として記憶する。また、トレースRAMユニット43は、ERレジスタ41bのフラグ値から、異常イベントの発生の有無を検出する。
【0056】
図5は、シミュレーションモデルの他の例を示す図である。
図5において
図4に示した要素と同じ要素については同一符号が付されている。
図5のシミュレーションモデル40bにおいてプロセッサ41は、メモリアクセス情報保持レジスタ41cを含む。
【0057】
メモリアクセス情報保持レジスタ41cは、プロセッサ41のメインメモリ42に対するメモリアクセスが発生したときに、そのメモリアクセスに係る情報(メモリアクセス情報)を格納する。メモリアクセス情報は、たとえば、メインメモリ42へのアクセス命令、メインメモリ42から読み出されるデータ、メインメモリ42に書き込まれるデータ、またはアクセスされたメインメモリ42のアドレスを含む。
【0058】
図5のシミュレーションモデル40bでは、トレースRAMユニット43は、メモリアクセス情報保持レジスタ41cに格納されたメモリアクセス情報を、イベント情報として時系列に記憶する。
【0059】
上記のようなプロセッサ41とメインメモリ42とを含む検証対象回路のシミュレーションが、シミュレーション実行部33によって実行される。
図6は、トレースRAMユニットの一例を示す図である。
【0060】
トレースRAMユニット43は、トレースRAM43a、ライトアドレスレジスタ43b、ライトアドレスインクリメンタ43c、ライトイネーブルレジスタ43dを有する。さらに、トレースRAMユニット43は、プロテクト有効レジスタ43f、プロテクト領域ボトムレジスタ43g、プロテクト領域トップレジスタ43hを有する。
【0061】
トレースRAM43aは、イベント情報を記憶する。
ライトアドレスレジスタ43bは、イベント情報を書き込むトレースRAM43aのアドレス(ライトアドレス)を保持する。
【0062】
ライトアドレスインクリメンタ43cは、イベント情報がトレースRAM43aに書き込まれるたびに、ライトアドレスを+1し、ライトアドレスレジスタ43bに保持させる。
【0063】
ライトイネーブルレジスタ43dは、トレースRAM43aへの書き込みを行うか否かを示す値(ライトイネーブル信号の値)を保持する。以下では、トレースRAM43aへの書き込みを行う場合に1が設定され、トレースRAM43aへの書き込みを行わない場合に0が設定されるものとする。
【0064】
ライトデータレジスタ43eは、トレースRAM43aに書き込むイベント情報を保持する。
プロテクト有効レジスタ43fは、プロテクト領域43a1の設定を有効にするか否かを示す値を保持する。以下では、プロテクト領域43a1の設定を有効にする場合に1が設定され、プロテクト領域43a1の設定を有効にしない場合に0が設定されるものとする。
【0065】
プロテクト領域ボトムレジスタ43gは、プロテクト領域43a1の末端アドレスを保持する。
プロテクト領域トップレジスタ43hは、プロテクト領域43a1の先頭アドレスを保持する。
【0066】
プロテクト領域43a1の設定後に発生するイベントに係るイベント情報は、プロテクト領域43a1以外の記憶領域43a2に記憶される。
上記のようなトレースRAMユニット43の各レジスタへの値の設定や、トレースRAM43aへのイベント情報の書き込みは、たとえば、
図4のイベント情報書き込み部34が行う。
【0067】
なお、トレースRAMユニット43の各レジスタは、情報処理装置10,20内のレジスタ(たとえば、処理部12またはCPU21に含まれるレジスタ)を用いて実装することもできる。
【0068】
このようなトレースRAMユニット43を用いたイベント情報の書き込み処理の手順については、後述する。
(イベント情報の記憶例)
図7は、イベント情報の記憶例を示す図である。
【0069】
図7の例では、
図4に示したシミュレーションモデル40aが用いられた場合のイベント情報の記憶例が示されている。すなわち、プログラムカウンタ41aのカウンタ値(PC値)が、イベント情報としてトレースRAM43aに記憶されている。
【0070】
たとえば、トレースRAM43aのアドレス“0000”には、カウンタ値“00001000”が、アドレス“0001”には、カウンタ値“00001004”が記憶されている。
【0071】
イベント情報がカウンタ値の場合、たとえば、プロセッサ41のクロックサイクルごとに、カウンタ値がトレースRAM43aに書き込まれる。
図8は、他のイベント情報の記憶例を示す図である。
【0072】
図8の例では、
図5に示したシミュレーションモデル40bが用いられた場合のイベント情報の記憶例が示されている。すなわち、メモリアクセス情報保持レジスタ41cのメモリアクセス情報が、イベント情報としてトレースRAM43aに記憶されている。
【0073】
メモリアクセス情報は、メモリアドレス、メモリデータ、アクセス命令を含む。メモリアドレスは、アクセスされたメインメモリ42のアドレスである。メモリデータは、メインメモリ42から読み出されるデータまたはメインメモリ42に書き込まれるデータである。アクセス命令は、メインメモリ42からの読み出し命令(ロード命令とも呼ばれる)、またはメインメモリ42への書き込み命令(ストア命令とも呼ばれる)である。たとえば、読み出し命令は“01”、書き込み命令は“02”と表される。
【0074】
たとえば、トレースRAM43aのアドレス“0000”には、メモリアドレス“00F00000”、メインメモリ42から読み出されるメモリデータ“AABBCCDD”、読み出し命令を表す“01”が記憶されている。
【0075】
イベント情報がメモリアクセス情報の場合、たとえば、プロセッサ41によるメインメモリ42のアクセスが発生するたびに、上記のようなメモリアクセス情報がトレースRAM43aに書き込まれる。
【0076】
(処理手順)
次に、第2の実施の形態の情報処理装置20の処理手順を説明する。
図9は、第2の実施の形態の情報処理装置の処理手順の一例を示すフローチャートである。
【0077】
イベント情報書き込み部34は、イベント情報の書き込みのための初期設定(またはリセット)を行う(ステップS10)。ステップS10の処理では、たとえば、
図6のプロテクト有効レジスタ43fに、初期値として0が設定される。ライトイネーブルレジスタ43dには、ライトイネーブル信号の初期値として0または1が設定される。
【0078】
プログラムカウンタ41aのカウンタ値など、クロックサイクルごとにイベント情報を書き込む場合、初期設定の段階で、ライトイネーブルレジスタ43dに1が設定されていてもよい。イベント発生ごとにイベント情報を書き込む場合は、ライトイネーブル信号の初期値は0でよい。その場合、イベント情報を取得するイベントの発生ごとに、ライトイネーブル信号が1に設定されるようにしてもよい。
【0079】
ライトアドレスレジスタ43bには、初期アドレスとして、イベント情報を書き込むトレースRAM43aの先頭アドレスが設定される。プロテクト領域ボトムレジスタ43gとプロテクト領域トップレジスタ43hの初期値は、不定値でよい。
【0080】
シミュレーション実行部33は、検証対象回路のシミュレーションを実行する(ステップS11)。
イベント情報書き込み部34は、イベント情報を取得するイベントが発生したか否かを判定する(ステップS12)。イベント情報書き込み部34は、イベント情報を取得するイベントが発生したと判定した場合には、ステップS13の処理を行う。イベント情報書き込み部34は、イベント情報を取得するイベントが発生していないと判定した場合、ステップS20の処理を行う。
【0081】
ステップS13の処理では、イベント情報書き込み部34は、異常イベントが発生し、ライトイネーブル信号の値が1、かつプロテクト有効レジスタ43fの値が0であるか否かを判定する。イベント情報書き込み部34は、
図4、
図5のシミュレーションモデル40a,40bにおいて、ERレジスタ41bに、たとえば、値が1のフラグ値が設定されている場合、異常イベントが発生したと判定する。イベント情報書き込み部34は、異常イベントが発生し、ライトイネーブル信号の値が1、かつプロテクト有効レジスタ43fの値が0であると判定した場合、ステップS14の処理を行う。イベント情報書き込み部34は、異常イベントが発生していないか、ライトイネーブル信号の値が1でないか、プロテクト有効レジスタ43fの値が0でないと判定した場合、ステップS15の処理を行う。
【0082】
ステップS14の処理では、イベント情報書き込み部34は、プロテクト領域の設定処理を行う。プロテクト領域43a1の設定処理の手順の例については、後述する。ステップS14の処理後、ステップS15の処理が行われる。
【0083】
ステップS15の処理では、イベント情報書き込み部34は、ライトイネーブル信号の値が、1であるか否かを判定する。イベント情報書き込み部34は、ライトイネーブル信号の値が、1であると判定した場合、ステップS16の処理を行う。イベント情報書き込み部34は、ライトイネーブル信号の値が、1でないと判定した場合、ステップS20の処理が行われる。
【0084】
ステップS16の処理では、イベント情報書き込み部34は、プロテクト有効レジスタ43fの値が1であるか否かを判定する。さらに、イベント情報書き込み部34は、ライトアドレスがプロテクト領域43a1の先頭アドレスであるか否かを判定する。イベント情報書き込み部34は、ライトアドレスレジスタ43bに設定されているライトアドレスと、プロテクト領域トップレジスタ43hに設定されているプロテクト領域43a1の先頭アドレスとを比較することで、この判定を行う。
【0085】
イベント情報書き込み部34は、プロテクト有効レジスタ43fの値が1であり、かつライトアドレスがプロテクト領域43a1の先頭アドレスであると判定した場合、ステップS17の処理を行う。イベント情報書き込み部34は、プロテクト有効レジスタ43fの値が1でないか、ライトアドレスがプロテクト領域43a1の先頭アドレスでないと判定した場合、ステップS18の処理を行う。
【0086】
ステップS17の処理では、イベント情報書き込み部34は、ライトアドレスをプロテクト領域43a1の末端のアドレスに1を加えた値にする。変更されたライトアドレスは、ライトアドレスレジスタ43bに設定される。ステップS17の処理後、ステップS18の処理が行われる。
【0087】
ステップS18の処理では、イベント情報書き込み部34は、ライトアドレスレジスタ43bに設定されているトレースRAM43aのライトアドレスに、イベント情報を書き込む。その後、イベント情報書き込み部34は、ライトアドレスインクリメンタ43cにライトアドレスをインクリメント(+1)させる(ステップS19)。
【0088】
ステップS20の処理では、シミュレーション実行部33は、シミュレーションが所定の終了条件を満たし、終了したか否かを判定する。シミュレーションが終了したと判定された場合、ステップS21の処理が行われ、シミュレーションが終了したと判定されなかった場合には、ステップS12からの処理が繰り返される。
【0089】
ステップS21の処理では、イベント情報読み出し部35は、たとえば、ユーザによる入力デバイス25aの操作などにより入力される読み出し命令に基づいて、トレースRAM43aとして機能するイベント情報記憶部32に記憶されたイベント情報を読み出す。そして、イベント情報出力部36は、読み出したイベント情報を出力する。
【0090】
これにより、情報処理装置20の処理が終了する。
図10は、プロテクト領域の設定処理の手順の一例を示すフローチャートである。
まず、イベント情報書き込み部34は、プロテクト有効レジスタ43fに1を設定する(ステップS30)。
【0091】
そして、イベント情報書き込み部34は、プロテクト領域43a1の末端アドレスとして、現在のライトアドレスを設定する(ステップS31)。ステップS31の処理は、ライトアドレスレジスタ43bに設定されているライトアドレスを、プロテクト領域ボトムレジスタ43gに設定することで行われる。
【0092】
次に、イベント情報書き込み部34は、プロテクト領域43a1の先頭アドレスとして、最上位ビットを反転したライトアドレス(=プロテクト領域43a1の末端アドレス)に1を加えた値を設定する(ステップS32)。ステップS32の処理は、ライトアドレスレジスタ43bに設定されているライトアドレスの最上位ビットを反転した上で、1を加えて算出されたアドレスを、プロテクト領域トップレジスタ43hに設定することで行われる。これにより、トレースRAM43aの半分の記憶領域をプロテクト領域43a1に割り当てることができる。
【0093】
これにより、プロテクト領域43a1の設定処理が終わる。
なお、
図9、
図10に示した処理の順序は一例であり、適宜処理の順序を入れ替えてもよい。
【0094】
(プロテクト領域設定例)
図11は、プロテクト領域の設定例を示す図である。
図11の例では、トレースRAM43aの記憶容量は21ビットである。この場合、トレースRAM43aの先頭アドレスは、0x000000で、末端アドレスは0x1FFFFFである。
【0095】
前述のようにプロテクト領域43a1の先頭アドレスは、プロテクト領域43a1の末端アドレスに基づいて算出される。異常イベントの発生時のライトアドレスが、0x123456であった場合、このアドレスが、プロテクト領域ボトムレジスタ43gに設定される。0x123456の最上位ビットは0x1であるため、反転させて+1すると、0x023456+0x1=0x023457となる。したがって、このアドレスが、プロテクト領域トップレジスタ43hに設定される。このため、0x023457~0x123456のアドレスの範囲でプロテクト領域43a1が設定される。
【0096】
このようなプロテクト領域43a1が設定されている場合、設定後に発生するイベントに係るイベント情報は、プロテクト領域43a1以外の記憶領域43a2に記憶される。異常イベント発生後のイベント情報は、記憶領域43a2の先頭アドレスである0x123457から書き込まれる。ライトアドレスが、トレースRAM43aの末端アドレスである0x1FFFFFに達すると、ライトアドレスレジスタ43bに設定されるアドレスは、0x000000に戻る。イベント情報の書き込みが進み、ライトアドレスが、プロテクト領域の先頭アドレスである0x023457に達した場合、前述のステップS17の処理により、ライトアドレスは、0x123456+1=0x123457となり、記憶領域43a2の先頭アドレスとなる。これにより、プロテクト領域43a1へのイベント情報の書き込みがスキップされる。
【0097】
図12は、プロテクト領域の他の設定例を示す図である。
図12の例でも、トレースRAM43aの記憶容量は21ビットである。
異常イベントの発生時のライトアドレスが、0x023456であった場合、このアドレスが、プロテクト領域ボトムレジスタ43gに設定される。0x023456の最上位ビットは0x0であるため、反転させて+1すると、0x123456+0x1=0x123457となる。したがって、このアドレスが、プロテクト領域トップレジスタ43hに設定される。このため、0x123457からトレースRAM43aの末端アドレスである0x1FFFFFまでと、トレースRAM43aの先頭アドレスである0x000000から0x023456までの範囲でプロテクト領域43a1が設定される。
【0098】
このようなプロテクト領域43a1が設定されている場合、異常イベント発生後のイベント情報は、記憶領域43a2の先頭アドレスである0x023457から書き込まれる。イベント情報の書き込みが進み、ライトアドレスが、プロテクト領域の先頭アドレスである0x123457に達した場合、前述のステップS17の処理により、ライトアドレスは、0x023456+1=0x023457となり、記憶領域43a2の先頭アドレスとなる。これにより、プロテクト領域43a1へのイベント情報の書き込みがスキップされる。
【0099】
以上のように、第2の実施の形態の情報処理装置20は、検証対象回路のシミュレーション中のイベントに係るイベント情報をサイクリックにトレースRAM43aに記憶する。そして、情報処理装置20は、異常イベントの発生を検出したときのライトアドレスが末端アドレスとなるプロテクト領域43a1を、トレースRAM43aに設定する。情報処理装置20は、プロテクト領域43a1の設定後に発生するイベントに係るイベント情報を、トレースRAM43aにおけるプロテクト領域43a1以外の記憶領域43a2に書き込む。情報処理装置20は、記憶領域43a2の末端アドレスまでイベント情報を書き込んだ場合、記憶領域43a2の先頭アドレスにライトアドレスを戻し、イベント情報の書き込みを続ける。
【0100】
これにより、論理障害などの異常イベントが発生したときに、デバッグに有用なイベント情報が、その後に発生する正常イベントに係るイベント情報によって上書きされ、削除されることを防止できる。また、このようなデバッグに有用なイベント情報を用いることで、デバッグ効率が向上し、製品品質向上、出荷工程短縮などの効果が見込める。
【0101】
また、上記のように、プロテクト領域43a1の末端アドレスの、最上位ビットを反転させた値に1を加えることで、プロテクト領域43a1の先頭アドレスを算出することで、比較的簡単な演算でプロテクト領域43a1を設定できる。
【0102】
ただ、上記の方法ではトレースRAM43aの半分の記憶領域がプロテクト領域43a1に割り当てられているが、プロテクト領域43aに割り当てる記憶領域の割合は、これに限定されるものではない。
【0103】
なお、前述のように、上記の処理内容は、情報処理装置20にプログラム(たとえば、デバッグプログラム)を実行させることで実現できる。
プログラムは、コンピュータ読み取り可能な記録媒体(たとえば、記録媒体26a)に記録しておくことができる。記録媒体として、たとえば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FD及びHDDが含まれる。光ディスクには、CD、CD-R(Recordable)/RW(Rewritable)、DVD及びDVD-R/RWが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体から他の記録媒体(たとえば、HDD23)にプログラムをコピーして実行してもよい。
【0104】
以上、実施の形態に基づき、本発明のデバッグプログラム、情報処理装置及びデバッグ方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【符号の説明】
【0105】
10 情報処理装置
11 記憶部
11a トレース用記憶領域(トレースRAM)
11a1 第1記憶領域
11a2 第2記憶領域
11b 回路情報
12 処理部
15 検証対象回路
15a プロセッサ
15b メモリ