(57)【要約】【課題】  メモリに送信する情報のトレースに使用される回路の規模を削減する。【解決手段】  メモリと、メモリに対する情報の送受信を制御するメモリコントローラを含むプロセッサとを有する情報処理装置において、メモリコントローラは、複数の第１の記憶領域と、メモリに送信する情報のうち、メモリを動作させる第１の情報を複数の第１の記憶領域のいずれかに記憶する第１の制御部と、第１の情報のメモリへの送信から次の第１の情報のメモリへの送信までの間にメモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報のメモリへの送信数をカウントするカウンタと、複数の第１の記憶領域の各々に対応する複数の第２の記憶領域と、カウンタのカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、複数の第２の記憶領域のいずれかに記憶する第２の制御部とを有する。【選択図】    図１
2018195260.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、前記メモリに対する情報の送受信を制御するメモリコントローラを含むプロセッサとを有する情報処理装置において、
前記メモリコントローラは、
複数の第１の記憶領域と、
前記メモリに送信する情報のうち、前記メモリを動作させる第１の情報を前記複数の第１の記憶領域のいずれかに記憶する第１の制御部と、
第１の情報の前記メモリへの送信から次の第１の情報の前記メモリへの送信までの間に前記メモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報の前記メモリへの送信数をカウントするカウンタと、
前記複数の第１の記憶領域の各々に対応する複数の第２の記憶領域と、
前記カウンタのカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、前記複数の第２の記憶領域のいずれかに記憶する第２の制御部と
を備えることを特徴とする情報処理装置。
【請求項２】
前記第１の制御部は、前記複数の第１の記憶領域のうち、第１の情報を記憶する第１の記憶領域をポインタにより管理し、第１の記憶領域に第１の情報を記憶する毎に、前記ポインタの値を更新し、
前記カウンタは、前記ポインタの値の更新に基づいてリセットされた後、第２の情報の前記メモリへの送信数をカウントすること
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記メモリコントローラは、さらに、
前記ポインタの値が記憶されるポインタ記憶部と、
前記メモリに送信した第１の情報に対する前記メモリからのエラー応答に基づいて、前記ポインタ記憶部に前記ポインタの値を記憶するポインタ制御部と
を備えることを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記第１の制御部は、前記複数の第１の記憶領域に循環的に第１の情報を記憶し、
前記メモリコントローラは、さらに、
前記ポインタ記憶部に保持された前記ポインタの値が有効かを示すフラグを備え、
前記ポインタ制御部は、前記ポインタ記憶部への前記ポインタの値の書き込みに基づいて前記フラグを有効状態に設定し、前記ポインタの値が一巡して前記ポインタ記憶部に保持されたポインタの値と一致した場合に前記フラグを無効状態に設定すること
を特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記メモリコントローラは、さらに、
複数の第３の記憶領域と、
前記複数の第３の記憶領域の各々に対応する複数の第４の記憶領域と、
前記複数の第１の記憶領域のうち、前記ポインタにより示される第１の記憶領域に、新たな第１の情報が記憶される前に記憶された第１の情報を前記複数の第３の記憶領域のいずれかに記憶するとともに、前記複数の第２の記憶領域のうち、前記ポインタにより示される第１の記憶領域に対応する第２の記憶領域に記憶された前記カウント値を、前記複数の第４の記憶領域のうち、第１の情報を記憶した第３の記憶領域に対応する第４の記憶領域に記憶する第３の制御部と
を備えることを特徴とする請求項２ないし請求項４のいずれか１項に記載の情報処理装置。
【請求項６】
前記情報処理装置は、さらに、前記複数の第１の記憶領域に記憶された複数の第１の情報と、前記複数の第２の記憶領域に記憶された複数の前記カウント値とを使用して、前記メモリに送信した情報をトレースするトレース部を備えること
を特徴とする請求項１ないし請求項５のいずれか１項に記載の情報処理装置。
【請求項７】
メモリに対する情報の送受信を制御するメモリコントローラを含むプロセッサにおいて、
前記メモリコントローラは、
複数の第１の記憶領域と、
前記メモリに送信する情報のうち、前記メモリを動作させる第１の情報を前記複数の第１の記憶領域のいずれかに記憶する第１の制御部と、
第１の情報の前記メモリへの送信から次の第１の情報の前記メモリへの送信までの間に前記メモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報の前記メモリへの送信数をカウントするカウンタと、
前記複数の第１の記憶領域の各々に対応する複数の第２の記憶領域と、
前記カウンタのカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、前記複数の第２の記憶領域のいずれかに記憶する第２の制御部と
を備えることを特徴とするプロセッサ。
【請求項８】
メモリに対する情報の送受信を制御するメモリコントローラにより、前記メモリに送信する情報を記憶するメモリ送信情報記憶方法において、
前記メモリコントローラが
前記メモリに送信する情報のうち、前記メモリを動作させる第１の情報を複数の第１の記憶領域のいずれかに記憶し、
第１の情報の前記メモリへの送信から次の第１の情報の前記メモリへの送信までの間に前記メモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報の前記メモリへの送信数をカウントし、
カウントにより得たカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、複数の第２の記憶領域のいずれかに記憶すること
を特徴とするメモリ送信情報記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、プロセッサおよびメモリ送信情報記憶方法に関する。
【背景技術】
【０００２】
信号を送受信する信号端末装置では、相手局に送信するメッセージが送信バッファに保持された場合、メッセージを送信バッファから取り出して相手局に送信するとともに、送信したメッセージを再送バッファに蓄積する。再送バッファに保持されたメッセージは、相手局からメッセージを正常に受信したことを示す完了信号を受信するまで保持される。この種の信号端末装置において、相手局との間のデータリンクに障害が発生した場合に、送信バッファ内のメッセージを取り出す処理を実施することで、捨てられるメッセージの数は最小限に留められる（例えば、特許文献１参照）。
【０００３】
画像を送受信する画像通信装置では、複数のプロトコルによる通信の送信履歴および受信履歴等を記憶する共通の記憶手段を設けることで、送信処理、受信処理および再送処理を統一的に行うことが可能になる（例えば、特許文献２参照）。また、デバイスのパターンが形成される基板に対して露光等の処理を行う処理装置は、特定のエラーが発生した場合、動作の履歴を示す履歴情報の中からエラーが発生する前の履歴情報を取り出して保存する。これにより、エラーの発生原因を特定するための負担が軽減される（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭６２−２１３４５２号公報
【特許文献２】特開２００２−２３２５８８号公報
【特許文献３】特開２００５−７２２５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば、メモリのアクセスを制御するメモリコントローラでは、メモリを動作させる動作パケットをメモリに送信してから次の動作パケットをメモリに送信するまでの間に、動作パケットの無送信を示す無効パケットをメモリに送信する場合がある。メモリコントローラが、メモリに送信した動作パケットを再送するために、送信した動作パケットを保持する再送バッファを有する場合、再送バッファには、動作パケットに含まれる情報は記憶されるが、無効パケットに含まれる情報は記憶されない。
【０００６】
例えば、動作パケットと無効パケットとが記憶されるバッファをメモリコントローラに設けることで、バッファに記憶された情報を使用して、メモリに送信したパケットをトレースすることが可能である。これにより、メモリコントローラとメモリとの間の伝送路等で発生したエラーを再現することが可能になる。しかしながら、バッファに記憶可能なパケットの数を増やすほど、メモリコントローラの回路規模は増大してしまう。
【０００７】
１つの側面では、本発明は、メモリに送信する情報のトレースに使用される回路の規模を削減することを目的とする。
【課題を解決するための手段】
【０００８】
一つの実施態様では、メモリと、メモリに対する情報の送受信を制御するメモリコントローラを含むプロセッサとを有する情報処理装置において、メモリコントローラは、複数の第１の記憶領域と、メモリに送信する情報のうち、メモリを動作させる第１の情報を複数の第１の記憶領域のいずれかに記憶する第１の制御部と、第１の情報のメモリへの送信から次の第１の情報のメモリへの送信までの間にメモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報のメモリへの送信数をカウントするカウンタと、複数の第１の記憶領域の各々に対応する複数の第２の記憶領域と、カウンタのカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、複数の第２の記憶領域のいずれかに記憶する第２の制御部とを有する。
【発明の効果】
【０００９】
１つの側面では、本発明は、メモリに送信する情報のトレースに使用される回路の規模を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理装置、プロセッサおよびメモリ送信情報記憶方法の一実施形態を示す図である。
【図２】図１に示すメモリコントローラの動作の一例を示す図である。
【図３】図１に示すメモリコントローラの動作フローの一例を示す図である。
【図４】情報処理装置、プロセッサおよびメモリ送信情報記憶方法の別の実施形態を示す図である。
【図５】図４に示す送信情報記録部の一例を示す図である。
【図６】図４に示すリトライバッファのエントリと図５に示すカウンタバッファのエントリとの関係の一例を示す図である。
【図７】図４に示すメモリコントローラの動作の一例を示す図である。
【図８】図４に示す情報処理装置において、割り込み信号が発生した場合の割り込み処理部の状態の一例を示す図である。
【図９】図４に示す情報処理装置において、メモリに送信したパケットをデバッガによりトレースする動作の一例を示す図である。
【図１０】図４に示す情報処理装置において、割り込み信号が発生した後の割り込み処理部の状態の一例を示す図である。
【図１１】図５に示す送信情報記録部の動作フローの一例を示す図である。
【図１２】情報処理装置、プロセッサおよびメモリ送信情報記憶方法の別の実施形態を示す図である。
【図１３】図１２に示す送信情報記録部の一例を示す図である。
【図１４】図１２に示すメモリコントローラの動作の一例を示す図である。
【図１５】図１２に示すメモリコントローラの動作の別の例を示す図である。
【図１６】図１３に示す送信情報記録部の動作フローの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を用いて実施形態を説明する。
【００１２】
図１は、情報処理装置、プロセッサおよびメモリ送信情報記憶方法の一実施形態を示す。図１に示す情報処理装置１００は、演算処理を実行するプロセッサ１と、情報を記憶する主記憶装置等のメモリ２とを有する。例えば、プロセッサ１は、メモリ２に対する情報の送受信を制御するメモリコントローラ３を有する。さらに、プロセッサ１は、図示しないプロセッサコアおよびキャッシュメモリ等を有する。
【００１３】
メモリコントローラ３は、パケット生成部４、送信部５、リトライバッファ６、カウンタ７およびカウンタバッファ８を有する。なお、図１では、メモリ２から受信する情報を処理する受信系の回路と受信系の回路に接続される信号経路との記載を省略する。
【００１４】
パケット生成部４は、例えば、図示しないキャッシュメモリがキャッシュミスの発生時に出力するメモリアクセス要求ＭＲＥＱに基づいて、メモリ２を動作させるためのパケットＰＣＫＴ１を生成する。パケット生成部４は、リトライバッファ６に保持されたパケットＰＣＫＴ１に含まれる情報に基づいて、パケットＰＣＫＴ１を再度生成可能である。
【００１５】
さらに、パケット生成部４は、パケットＰＣＫＴ１の送信から次のパケットＰＣＫＴ１の送信までの間に、パケットＰＣＫＴ１の無送信を示すパケットＰＣＫＴ０を生成する。例えば、パケットＰＣＫＴ０に含まれる情報の全てのビットは、ゼロに設定される。パケット生成部４は、生成したパケットＰＣＫＴ１、ＰＣＫＴ０の各々に含まれる複数ビットの情報を並列に出力する。パケットＰＣＫＴ１は、送信部５およびリトライバッファ６に出力される。パケットＰＣＫＴ０は、送信部５に出力される。パケットＰＣＫＴ１は、第１の情報の一例であり、パケットＰＣＫＴ０は、第２の情報の一例である。以下では、パケットＰＣＫＴ１、ＰＣＫＴ０は、パケットＰＣＫＴとも称される。パケット生成部４は、情報生成部の一例である。
【００１６】
送信部５は、パケット生成部４から受信したパケットＰＣＫＴをメモリ２に順次送信する。例えば、送信部５は、パケットＰＣＫＴに含まれる複数ビットの情報を並列に受信し、受信した複数ビットの情報を直列に変換してメモリ２に送信する。このため、送信部５は、パケット生成部４を動作させるクロックＣＬＫに同期してパケットＰＣＫＴを受信し、クロックＣＬＫより高い周波数のクロックに同期してパケットＰＣＫＴをメモリ２に送信する。例えば、クロックＣＬＫより高い周波数は、クロックＣＬＫの周波数を逓倍することにより生成される。リトライバッファ６、カウンタ７およびカウンタバッファ８は、クロックＣＬＫに同期して動作する。
【００１７】
リトライバッファ６は、メモリ２に送信するパケットＰＣＫＴ１に含まれる情報が記憶される複数のエントリＥＮＴ（ＥＮＴ１−ＥＮＴ８）と、パケットＰＣＫＴ１に含まれる情報をエントリＥＮＴのいずれかに格納する制御を行うバッファ制御部６ａとを有する。リトライバッファ６のエントリＥＮＴ１−ＥＮＴ８は、第１の記憶領域の一例であり、バッファ制御部６ａは、第１の制御部の一例である。
【００１８】
以下の説明では、パケットＰＣＫＴ１に含まれる情報は、単にパケットＰＣＫＴ１とも称される。バッファ制御部６ａは、パケットＰＣＫＴ１を格納するエントリＥＮＴを示すポインタＰＴの値を、パケットＰＣＫＴ１をエントリＥＮＴに格納する毎に、”１”から”８”に向けて順次更新する。なお、バッファ制御部６ａは、ポインタＰＴの値を循環的に更新することで、リトライバッファ６をリングバッファとして機能させてもよい。さらに、バッファ制御部６ａは、パケットＰＣＫＴ１を書き込むエントリＥＮＴを示すライトポインタと、パケットＰＣＫＴ１を読み出すエントリＥＮＴを示すリードポインタとを使用してリトライバッファ６の動作を制御してもよい。以下では、ポインタＰＴの値は、ポインタ値ＰＴとも称される。
【００１９】
図１に示す例では、バッファ制御部６ａは、メモリ２に順次送信されたパケットＰＣＫＴ１（０）、ＰＣＫＴ１（１）、ＰＣＫＴ１（２）、ＰＣＫＴ１（３）の各々を、リトライバッファ６のエントリＥＮＴ１、ＥＮＴ２、ＥＮＴ３、ＥＮＴ４の各々に記憶する。そして、バッファ制御部６ａは、ポインタ値ＰＴを、メモリ２に送信される次のパケットＰＣＫＴ１を格納するエントリＥＮＴ５を示す値に更新する。リトライバッファ６の各エントリＥＮＴに保持されたパケットＰＣＫＴ１に含まれる情報は、メモリコントローラ３の外部から読み出し可能である。
【００２０】
なお、パケットＰＣＫＴ１を正常に受信できなかったことを示すエラー応答をメモリコントローラ３がメモリ２から受信した場合、パケット生成部４は、エラー応答に対応するパケットＰＣＫＴ１に含まれる情報をリトライバッファ６から読み出す。そして、パケット生成部４は、読み出した情報に基づいてパケットＰＣＫＴ１を再度生成し、生成したパケットＰＣＫＴ１を送信部５に再度出力する。
【００２１】
カウンタ７は、パケットＰＣＫＴ１の送信から次のパケットＰＣＫＴ１の送信までの間にメモリ２に送信されるパケットＰＣＫＴ０の数をカウントする。この際、カウンタ７は、パケットＰＣＫＴ１の送信から次のパケットＰＣＫＴ１の送信までの間に発生するクロックＣＬＫの数を、パケットＰＣＫＴ０の数としてカウントしてもよい。カウンタ７は、カウントにより得たカウント値ＣＮＴをカウンタバッファ８に出力する。なお、カウンタ７がカウントするカウント値は、最大値に到達した後、ラップアラウンドせずに、最大値で停止する。
【００２２】
カウンタバッファ８は、カウント値ＣＮＴが記憶される複数のエントリＥＮＴ（ＥＮＴ１−ＥＮＴ８）と、カウント値ＣＮＴをエントリＥＮＴのいずれに格納する制御を行うバッファ制御部８ａとを有する。カウンタバッファ８のエントリＥＮＴ１−ＥＮＴ８は、第２の記憶領域の一例であり、バッファ制御部８ａは、第２の制御部の一例である。カウンタバッファ８のエントリＥＮＴの各々は、リトライバッファ６のエントリＥＮＴの各々に対応して設けられる。なお、リトライバッファ６およびカウンタバッファ８のエントリＥＮＴの数は、８個に限定されない。
【００２３】
バッファ制御部８ａは、パケットＰＣＫＴ１が生成される毎に、生成されたパケットＰＣＫＴ１が記憶されたリトライバッファ６のエントリＥＮＴに対応するエントリＥＮＴに、カウンタ７がカウントしたカウント値ＣＮＴを記憶する。カウンタバッファ８の各エントリＥＮＴに保持されたカウント値ＣＮＴは、メモリコントローラ３の外部から読み出し可能である。
【００２４】
図１に示す例では、バッファ制御部８ａは、カウンタバッファ８のエントリＥＮＴ１−ＥＮＴ４のそれぞれに、”０”、”３”、”２”、”４”のカウント値ＣＮＴを記憶する。エントリＥＮＴ１に記憶されたカウント値ＣＮＴ（”０”）は、初期値を示し、図１の状態では意味を持たない。エントリＥＮＴ２に記憶されたカウント値ＣＮＴ（”３”）は、パケットＰＣＫＴ１（０）の送信からパケットＰＣＫＴ１（１）の送信までの間に、３つのパケットＰＣＫＴ０がメモリ２に送信されたことを示す。エントリＥＮＴ３に記憶されたカウント値ＣＮＴ（”２”）は、パケットＰＣＫＴ１（１）の送信からパケットＰＣＫＴ１（２）の送信までの間に、２つのパケットＰＣＫＴ０がメモリ２に送信されたことを示す。エントリＥＮＴ４に記憶されたカウント値ＣＮＴ（”４”）は、パケットＰＣＫＴ１（２）の送信からパケットＰＣＫＴ１（３）の送信までの間に、４つのパケットＰＣＫＴ０がメモリ２に送信されたことを示す。
【００２５】
なお、カウンタバッファ８のエントリＥＮＴ１に記憶されるカウント値ＣＮＴは、リトライバッファ６がリングバッファとして機能する場合に意味を持つ。すなわち、カウンタバッファ８のエントリＥＮＴ１に記憶されるカウント値ＣＮＴは、リトライバッファ６のエントリＥＮＴ８、ＥＮＴ１に順次記憶された２つのパケットＰＣＫＴ１の送信の間に、メモリ２に送信されたパケットＰＣＫＴ０の数を示す。
【００２６】
図２は、図１に示すメモリコントローラ３の動作の一例を示す。すなわち、図２は、メモリ送信情報記憶方法の一例およびメモリコントローラ３の制御方法の一例を示す。図２は、リトライバッファ６のエントリＥＮＴとカウンタバッファ８のエントリＥＮＴとが、初期状態から図１に示す状態になるまでのメモリコントローラ３の動作を示す。
【００２７】
初期状態において、ポインタ値ＰＴは”１”であり、カウント値ＣＮＴは”０”である。まず、パケット生成部４は、パケットＰＣＫＴ１（０）を生成し、生成したパケットＰＣＫＴ１（０）を、送信部５を介してメモリ２に送信する（図２（ａ））。バッファ制御部６ａは、パケットＰＣＫＴ１（０）がパケット生成部４から出力されたことに基づいて、ポインタ値ＰＴ（”１”）が示すエントリＥＮＴ１にパケットＰＣＫＴ１（０）を記憶し、ポインタ値ＰＴを”２”に更新する（図２（ｂ）、（ｃ））。バッファ制御部８ａは、パケットＰＣＫＴ１（０）がパケット生成部４から出力されたことに基づいて、リトライバッファ６の更新前のポインタ値ＰＴ（”１”）が示すエントリＥＮＴ１に、カウント値ＣＮＴ（”０”）を記憶する（図２（ｄ））。なお、バッファ制御部８ａは、ポインタ値ＰＴが更新されたことに基づいて、更新前のポインタ値ＰＴ（”１”）が示すエントリＥＮＴ１に、カウント値ＣＮＴ（”０”）を記憶してもよい。
【００２８】
カウンタ７は、パケットＰＣＫＴ１（０）がメモリ２に送信されたことに基づいて、カウント値ＣＮＴを”０”にリセットし、カウント動作を継続する（図２（ｅ））。なお、カウンタ７は、ポインタ値ＰＴが更新されたことに基づいて、カウント値ＣＮＴを”０”にリセットし、カウント動作を継続してもよい。パケット生成部４は、パケットＰＣＫＴ１（０）を生成した後、３つのパケットＰＣＫＴ０を順次生成し、生成した３つのパケットＰＣＫＴ０を、送信部５を介してメモリ２に順次送信する（図２（ｆ））。なお、パケット生成部４が生成するパケットＰＣＫＴ０の数は、メモリアクセス要求ＭＲＥＱの頻度が高いほど少なく、メモリアクセス要求ＭＲＥＱの頻度が低いほど多い。
【００２９】
次に、パケット生成部４は、パケットＰＣＫＴ１（１）を生成し、生成したパケットＰＣＫＴ１（１）を、送信部５を介してメモリ２に送信する（図２（ｇ））。バッファ制御部６ａは、ポインタ値ＰＴ（”２”）が示すエントリＥＮＴ２にパケットＰＣＫＴ１（１）を記憶し、ポインタ値ＰＴを”３”に更新する（図２（ｈ）、（ｉ））。バッファ制御部８ａは、リトライバッファ６の更新前のポインタ値ＰＴ（”２”）が示すエントリＥＮＴ２に、カウント値ＣＮＴ（”３”）を記憶する（図２（ｊ））。カウント値ＣＮＴ（”３”）は、パケットＰＣＫＴ１（０）の送信からパケットＰＣＫＴ１（１）の送信までの間にメモリ２に送信されたパケットＰＣＫＴ０の数を示す。
【００３０】
カウンタ７は、パケットＰＣＫＴ１（１）がメモリ２に送信されたことに基づいて、カウント値ＣＮＴを”０”にリセットし、カウント動作を継続する（図２（ｋ））。パケット生成部４は、パケットＰＣＫＴ１（１）を生成した後、２つのパケットＰＣＫＴ０を順次生成し、生成した２つのパケットＰＣＫＴ０を、送信部５を介してメモリ２に順次送信する（図２（ｌ））。
【００３１】
次に、パケット生成部４は、パケットＰＣＫＴ１（２）を生成し、生成したパケットＰＣＫＴ１（２）を、送信部５を介してメモリ２に送信する（図２（ｍ））。バッファ制御部６ａは、ポインタ値ＰＴ（”３”）が示すエントリＥＮＴ３にパケットＰＣＫＴ１（２）を記憶し、ポインタ値ＰＴを”４”に更新する（図２（ｎ）、（ｏ））。バッファ制御部８ａは、リトライバッファ６の更新前のポインタ値ＰＴ（”３”）が示すエントリＥＮＴ３に、カウント値ＣＮＴ（”２”）を記憶する（図２（ｐ））。カウント値ＣＮＴ（”２”）は、パケットＰＣＫＴ１（１）の送信からパケットＰＣＫＴ１（２）の送信までの間にメモリ２に送信されたパケットＰＣＫＴ０の数を示す。
【００３２】
カウンタ７は、パケットＰＣＫＴ１（２）がメモリ２に送信されたことに基づいて、カウント値ＣＮＴを”０”にリセットし、カウント動作を継続する（図２（ｑ））。パケット生成部４は、パケットＰＣＫＴ１（２）を生成した後、４つのパケットＰＣＫＴ０を順次生成し、生成した４つのパケットＰＣＫＴ０を、送信部５を介してメモリ２に順次送信する（図２（ｒ））。
【００３３】
次に、パケット生成部４は、パケットＰＣＫＴ１（３）を生成し、生成したパケットＰＣＫＴ１（３）を、送信部５を介してメモリ２に送信する（図２（ｓ））。バッファ制御部６ａは、ポインタ値ＰＴ（”４”）が示すエントリＥＮＴ４にパケットＰＣＫＴ１（３）を記憶し、ポインタ値ＰＴを”５”に更新する（図２（ｔ）、（ｕ））。バッファ制御部８ａは、リトライバッファ６の更新前のポインタ値ＰＴ（”４”）が示すエントリＥＮＴ４に、カウント値ＣＮＴ（”４”）を記憶する（図２（ｖ））。カウント値ＣＮＴ（”４”）は、パケットＰＣＫＴ１（２）の送信からパケットＰＣＫＴ１（３）の送信までの間にメモリ２に送信されたパケットＰＣＫＴ０の数を示す。
【００３４】
カウンタ７は、パケットＰＣＫＴ１（３）がメモリ２に送信されたことに基づいて、カウント値ＣＮＴを”０”にリセットし、カウント動作を継続する（図２（ｗ））。パケット生成部４は、パケットＰＣＫＴ１（３）を生成した後、複数のパケットＰＣＫＴ０を順次生成し、生成したパケットＰＣＫＴ０を、送信部５を介してメモリ２に順次送信する（図２（ｘ））。
【００３５】
以上の動作により、リトライバッファ６のエントリＥＮＴとカウンタバッファ８のエントリＥＮＴは、図１に示す状態になる。例えば、プロセッサ１が実行するデバッグプログラムにより、リトライバッファ６とカウンタバッファ８とに保持された情報を読み出すことで、メモリ２に送信されたパケットＰＣＫＴ１、ＰＣＫＴ０の内容をトレースすることができる。換言すれば、リトライバッファ６に保持されたパケットＰＣＫＴ１の内容と、カウンタバッファ８に保持されたカウント値ＣＮＴとに基づいて、メモリ２に送信されたパケットＰＣＫＴ１、ＰＣＫＴ０の内容をトレースすることができる。さらに、トレースの結果に基づいて、メモリ２に送信されたパケットＰＣＫＴ１、ＰＣＫＴ０を再現してメモリ２に再送することで、プロセッサ１とメモリ２との間の伝送路等で発生したエラーの原因を解析することができる。
【００３６】
なお、リトライバッファ６とカウンタバッファ８とに保持された情報は、情報処理装置１００に含まれるデバッガにより読み出されてもよい。あるいは、リトライバッファ６とカウンタバッファ８とに保持された情報は、情報処理装置１００に含まれる通信インタフェースを介して、情報処理装置１００に接続されるデバッグ装置等の外部の装置により読み出されてもよい。
【００３７】
メモリコントローラ３がリトライバッファ６を有する場合、カウンタ７とカウンタバッファ８とをメモリコントローラ３に追加することで、メモリ２に送信されたパケットＰＣＫＴ１、ＰＣＫＴ０の内容をトレースすることができる。この結果、メモリコントローラ３の回路規模の増大を最小限にして、メモリ２に送信されたパケットＰＣＫＴ１、ＰＣＫＴ０の内容をトレースすることができる。
【００３８】
例えば、カウンタバッファ８の各エントリＥＮＴを８ビットにすることで、カウンタバッファ８は、２５５個までのパケットＰＣＫＴ０の送信を示す情報を各エントリＥＮＴに保持できる。これにより、２つのパケットＰＣＫＴ１間に最大で２５５個のパケットＰＣＫＴ０が挿入される場合にも、メモリ２に送信されたパケットＰＣＫＴ１、ＰＣＫＴ０をトレースすることができる。さらに、カウンタバッファ８の各エントリＥＮＴを１０ビットにすることで、カウンタバッファ８は、１０２３個のパケットＰＣＫＴ０が送信されたことを示す情報を各エントリＥＮＴに保持できる。
【００３９】
これに対して、メモリコントローラ３が、メモリ２に送信するパケットＰＣＫＴ０に含まれる情報自体を保持することが考えられる。この場合、例えば、メモリコントローラ３には、図１に示すカウンタ７とカウンタバッファ８の代わりに、パケットＰＣＫＴ０を保持するバッファが設けられる。パケットＰＣＫＴ０は、パケットＰＣＫＴ１の無送信を示すパケットであるため、２つのパケットＰＣＫＴ１の送信間隔が長いほど、パケットＰＣＫＴ１間に挿入されるパケットＰＣＫＴ０の数は増加する。
【００４０】
例えば、パケットＰＣＫＴ０を保持するバッファに１０００個のエントリが設けられ、２つのパケットＰＣＫＴ１間に最大で２００個のパケットＰＣＫＴ０の挿入が想定されるとする。この場合、リトライバッファ６に保持可能な８つのパケットＰＣＫＴ１の間に、最大で１４００個のパケットＰＣＫＴ０が挿入されるため、パケットＰＣＫＴ０を保持するバッファは、パケットＰＣＫＴ０のいずれかを保持できないおそれがある。パケットＰＣＫＴ０のいずれかを保持できない場合、リトライバッファ６に保持された８個のパケットＰＣＫＴ１をトレースすることができない。
【００４１】
図３は、図１に示すメモリコントローラ３の動作フローの一例を示す。すなわち、図３は、メモリコントローラ３０の制御方法の一例およびメモリ送信情報記憶方法の一例を示す。図３に示すフローは、情報処理装置１００がパケットＰＣＫＴをメモリ２０に送信する動作を開始したことに基づいて開始され、メモリコントローラ３を動作させるクロックサイクル毎に繰り返し実行される。
【００４２】
まず、ステップＳ１において、メモリコントローラ３０は、リトライバッファ６の動作を停止する要求が発生した場合、動作をステップＳ２に移行し、リトライバッファ６の動作を停止する要求が発生しない場合、動作をステップＳ３に移行する。例えば、リトライバッファ６の動作を停止する停止要求は、メモリ２に送信したパケットＰＣＫＴ１、ＰＣＫＴ０をトレースする場合に、メモリコントローラ３の内部または外部の制御ブロックが発生する。ステップＳ２において、メモリコントローラ３は、リトライバッファ６の動作を停止し、動作を終了する。なお、リトライバッファ６の動作が停止した場合、パケット生成部４は、パケットＰＣＫＴ１、ＰＣＫＴ０の生成を停止するため、図３の動作は繰り返されない。
【００４３】
ステップＳ３において、メモリコントローラ３は、パケット生成部４が新たなパケットＰＣＫＴ１を生成したか否を判定する。新たなパケットＰＣＫＴ１が生成された場合、動作はステップＳ５に移行される。新たなパケットＰＣＫＴ１が生成されない場合、パケットＰＣＫＴ０が生成されるため、動作はステップＳ４に移行される。ステップＳ４において、メモリコントローラ３は、カウンタ７をカウントアップし、動作を終了する。
【００４４】
ステップＳ５において、メモリコントローラ３は、生成されたパケットＰＣＫＴ１をリトライバッファ６のエントリＥＮＴのいずれかに記憶する。次に、ステップＳ６において、メモリコントローラ３は、カウント値ＣＮＴを、カウンタバッファ８のエントリＥＮＴのいずれかに記憶する。次に、ステップＳ７において、メモリコントローラ３は、カウンタ７をリセットし、カウント値ＣＮＴを”０”に設定し、動作を終了する。
【００４５】
以上、図１および図２に示す実施形態では、カウンタ７とカウンタバッファ８とをメモリコントローラ３に追加することで、メモリ２に送信されたパケットＰＣＫＴ１、ＰＣＫＴ０の内容をトレースすることができる。この際、ＰＣＫＴ０に含まれる情報自体を保持するバッファをメモリコントローラ３に設ける場合に比べて、メモリ２に送信するパケットＰＣＫＴ１、ＰＣＫＴ０のトレースに使用される回路の規模を削減することができる。
【００４６】
図４は、情報処理装置、プロセッサおよびメモリ送信情報記憶方法の別の実施形態を示す。図１に示す実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。図４に示す情報処理装置１００Ａは、演算処理を実行するプロセッサ１０、情報を記憶する主記憶装置等のメモリ２０およびデバッガ１０２を有する。プロセッサ１０は、演算処理を実行するプロセッサコア１２、キャッシュメモリ１４、リクエスト処理部１６およびメモリ２０に対するパケットの送受信を制御するメモリコントローラ３０を有する。
【００４７】
例えば、キャッシュメモリ１４は、二次キャッシュである。キャッシュメモリ１４は、キャッシュミスが発生した場合に、メモリ２０に対するメモリアクセス要求ＭＲＥＱを発行する。また、キャッシュメモリ１４は、メモリアクセス要求ＭＲＥＱに応答してメモリ２０から読み出されるデータを保持するとともに、プロセッサコア１２に出力する。リクエスト処理部１６は、キャッシュメモリ１４からのメモリアクセス要求ＭＲＥＱに基づいて、送信情報ＳＩＮＦを生成し、生成した送信情報ＳＩＮＦをメモリコントローラ３０に出力する。また、リクエスト処理部１６は、データ等を含む受信情報ＲＩＮＦをメモリコントローラ３０から受信した場合、受信した受信情報ＲＩＮＦを送信情報ＳＩＮＦに対応付けてキャッシュメモリ１４に出力する。
【００４８】
メモリコントローラ３０は、送信制御部４０、送信情報記録部５０、受信制御部８０および受信情報記録部９０を有する。送信制御部４０は、送信情報処理部４２、パケット生成部４４、送信部４６およびリトライバッファ４８を有する。受信制御部８０は、受信部８２、異常検出処理部８４および受信情報処理部８６を有する。
【００４９】
送信情報処理部４２は、リクエスト処理部１６から順次受信する送信情報ＳＩＮＦを保持するバッファを有し、バッファに保持された送信情報ＳＩＮＦを順次パケット生成部４４に出力する。パケット生成部４４は、送信情報処理部４２からの送信情報ＳＩＮＦに基づいて、メモリ２０を動作させるためのパケットＰＣＫＴ１を生成する。パケットＰＣＫＴ１は、メモリ２０からデータを読み出す読み出し要求、メモリ２０にデータを書き込む書き込み要求、または、メモリ２０の動作モードを設定するモード設定要求等のメモリ２０の内部回路を動作させるパケットである。また、パケット生成部４４は、リトライバッファ４８に保持されたリトライ情報ＲＴＲＹに基づいて、メモリ２０に過去に送信したパケットＰＣＫＴ１を再度生成する。パケットＰＣＫＴ１は、メモリ２０を動作させるため、論理的に有効なパケットである。
【００５０】
さらに、パケット生成部４４は、パケットＰＣＫＴ１の送信から次のパケットＰＣＫＴ１の送信までの間に、パケットＰＣＫＴ１の無送信を示すパケットＰＣＫＴ０（例えば、オールゼロ）を生成する。例えば、各パケットＰＣＫＴ１、ＰＣＫＴ０のサイズは、１２８ビットである。パケット生成部４４は、生成したパケットＰＣＫＴ（ＰＣＫＴ１またはＰＣＫＴ０）の各々に含まれる複数ビットの情報を並列に出力する。パケットＰＣＫＴ１は、送信部４６およびリトライバッファ４８に出力される。パケットＰＣＫＴ０は、送信部４６に出力される。パケット生成部４４は、情報生成部の一例である。
【００５１】
送信部４６は、図示しない送信バッファ、シリアライザおよびアンプ等を有し、パケットＰＣＫＴに含まれる並列の情報を直列データに変換し、変換した直列データの信号振幅を増幅してメモリ２０に送信する。送信部４６は、例えば、直列データを８ｂ／１０ｂ方式または６４ｂ／６６ｂ方式等により符号化してメモリ２０に送信する。送信部４６は、ビット列を電気信号に変換する物理層に相当する回路ブロックである。送信部４６が直列データの送信に使用するクロックの周波数は、パケット生成部４４等を動作させるクロックＣＬＫの周波数よりも高い。なお、送信部４６は、データの伝送路である複数のレーンを使用して直列データをメモリ２０に送信してもよい。なお、パケットＰＣＫＴ０は、メモリ２０を動作させないため、論理的には無効であるが、送信部４６からメモリ２０に送信される電気信号として物理的に意味がある。
【００５２】
リトライバッファ４８は、図１に示すリトライバッファ６と同様に、図示しない複数のエントリＥＮＴとバッファ制御部６ａとを有する。各エントリＥＮＴには、メモリ２０に送信するパケットＰＣＫＴ１がリトライ情報ＲＴＲＹとして記憶される。図示しないバッファ制御部６ａは、パケット生成部４４が生成したパケットＰＣＫＴ１をリトライ情報ＲＴＲＹとして複数のエントリＥＮＴのいずれかに記憶する。リトライバッファ４８は、デバッガ１０２から出力される読み出しコマンドＲＣＭＤ３に基づいて、エントリＥＮＴに記憶したリトライ情報ＲＴＲＹまたはポインタ値ＰＴをデバッガ１０２に出力する。
【００５３】
送信情報記録部５０は、リトライバッファ４８で使用されるポインタ値ＰＴの更新に基づいて、パケットＰＣＫＴ１が送信されない期間にメモリ２０に送信されるパケットＰＣＫＴ０の送信数を示す情報を記録する。送信情報記録部５０は、デバッガ１０２から出力される読み出しコマンドＲＣＭＤ１に基づいて、エントリＥＮＴに記憶したカウント値ＲＣＮをデバッガ１０２に出力する。また、送信情報記録部５０は、デバッガ１０２から出力される読み出しコマンドＲＣＭＤ２に基づいて、送信情報記録部５０に記録された情報（ＰＴＳＴ、ＲＶＡＬ）をデバッガ１０２に出力する。送信情報記録部５０の例は、図５に示す。
【００５４】
受信部８２は、図示しないＤＦＥ（Decision Feedback Equalizer）等のイコライザ、デシリアライザおよびクロックデータ再生回路等を有する。イコライザは、メモリ２０から送信される直列のデータ信号の損失を補償する。デシリアライザは、イコライザから出力される直列のデータ信号を並列のデータ信号に変換する。クロックデータ再生回路は、デシリアライザから出力されるデータ信号の遷移エッジに基づいてクロックを抽出し、クロックの位相を調整してＤＦＥに出力する。受信部８２は、デシリアライザにより変換された並列のデータ情報をパケットＰＣＫＴ（ＰＣＫＴ１またはＰＣＫＴ０）として異常検出処理部８４および受信情報記録部９０に出力する。受信部８２は、メモリ２０から受信する電気信号をビット列に変換する物理層に相当する回路ブロックである。なお、受信部８２は、データの伝送路である複数のレーンを使用して直列データをメモリ２０から受信してもよい。
【００５５】
異常検出処理部８４は、メモリ２０からのエラー応答を検出し、あるいは、ＣＲＣ（Cyclic Redundancy Check）方式等により受信部８２で受信したパケットＰＣＫＴ１に含まれる情報の異常の有無を検出する。異常検出処理部８４は、例えば、メモリ２０からのエラー応答を検出した場合、割り込み信号ＩＮＴを送信情報記録部５０および受信情報記録部９０に出力するとともに、異常の発生をパケット生成部４４およびデバッガ１０２に通知する。異常検出処理部８４は、異常を検出しない場合、受信部８２で受信したパケットＰＣＫＴ１を受信情報処理部８６に出力する。
【００５６】
受信情報処理部８６は、異常検出処理部８４を介して受信部８２から受信するパケットＰＣＫＴ１に含まれる情報を取り出し、取り出した情報を受信情報ＲＩＮＦとしてリクエスト処理部１６に出力する。
【００５７】
受信情報記録部９０は、図示しない複数のエントリを有し、メモリ２０から順次受信するパケットＰＣＫＴ１、ＰＣＫＴ０を複数のエントリのいずれかに記憶する。受信情報記録部９０は、デバッガ１０２から出力される読み出しコマンドＲＣＭＤ４に基づいて、複数のエントリに記憶したメモリ２０からのパケットＰＣＫＴ１、ＰＣＫＴ０をトレース情報ＴＲＣとしてデバッガ１０２に出力する。
【００５８】
メモリ２０は、シリアル通信インタフェースを有し、従来のＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）に比べて通信速度が高いＨＭＣ（Hybrid Memory Cube）等の記憶装置である。例えば、メモリ２０は、積層された複数のメモリチップ２２、入出力制御部２４、受信制御部２６および送信制御部２８を有する。入出力制御部２４は、受信制御部２６から出力される情報に基づいてメモリチップ２２のいずれかにデータを書き込み、メモリチップ２２のいずれかから読み出されるデータを送信制御部２８に出力する。受信制御部２６は、メモリコントローラ３０に含まれる受信制御部８０と同様の構成を有し、受信制御部８０と同様に動作する。送信制御部２８は、メモリコントローラ３０に含まれる送信制御部４０と同様の構成を有し、送信制御部４０と同様に動作する。
【００５９】
デバッガ１０２は、メモリコントローラ３０に読み出しコマンドＲＣＭＤ（ＲＣＭＤ１、ＲＣＭＤ２、ＲＣＭＤ３、ＲＣＭＤ４）を出力し、パケットＰＣＫＴのトレースに使用する情報をメモリコントローラ３０から読み出す。デバッガ１０２とプロセッサ１０との間は、Ｉ２Ｃ（Inter-Integrated Circuit：登録商標）またはＳＰＩ（Serial Peripheral Interface：登録商標）等の入出力インタフェースにより接続される。デバッガ１０２は、メモリ２０に送信した情報をトレースするトレース部の一例である。なお、デバッガ１０２は、情報処理装置１００Ａの外部に設けられてもよい。
【００６０】
図５は、図４に示す送信情報記録部５０の一例を示す。送信情報記録部５０は、カウント処理部６０および割り込み処理部７０を有する。カウント処理部６０は、カウンタバッファ６１、カウンタバッファ制御部６２、カウンタ６３、カウンタ制御部６４およびフリップフロップＦＦを有する。カウンタ制御部６４は、一致比較器６５および不一致比較器６６を有する。割り込み処理部７０は、ポインタ保持部７１、有効フラグ７２および割り込み制御部７３を有する。送信情報記録部５０は、クロックＣＬＫに同期して動作する。
【００６１】
カウンタバッファ６１は、リトライバッファ４８に含まれるｎ個のエントリＥＮＴ（ＥＮＴ１−ＥＮＴｎ）に対応するｎ個のエントリＥＮＴ（ＥＮＴ１−ＥＮＴｎ）を有する。フリップフロップＦＦは、クロックＣＬＫに同期して受信したポインタ値ＰＴを１クロックサイクル遅らせ、ポインタ値ＰＴ−１として出力する。
【００６２】
一致比較器６５は、リトライバッファ４８のポインタ値ＰＴとフリップフロップＦＦから出力される１クロックサイクル前のポインタ値ＰＴ−１とが一致する場合、クロックサイクル毎にカウントアップ信号ＣＵＰをカウンタ６３に出力する。不一致比較器６６は、ポインタ値ＰＴとポインタ値ＰＴ−１とが一致しない場合、すなわち、ポインタ値ＰＴが更新された場合、リセット信号ＲＳＴをカウンタ６３に出力し、書き込み信号ＷＲをカウンタバッファ制御部６２に出力する。カウンタ６３は、不一致比較器６６から出力されるリセット信号ＲＳＴに基づいてカウント値を”０”にリセットし、一致比較器６５から出力されるカウントアップ信号ＣＵＰに基づいてカウント値を”１”増加する。なお、カウンタ６３がカウントするカウント値は、最大値に到達した後、ラップアラウンドせずに、最大値で停止する。
【００６３】
カウンタバッファ制御部６２は、フリップフロップＦＦから出力されるポインタ値ＰＴ−１が示すエントリＥＮＴを検出するデコーダ６２ａを有する。カウンタバッファ制御部６２は、カウンタ制御部６４から出力される書き込み信号ＷＲに基づいて、カウンタ６３でカウントされたカウント値ＣＮＴをカウント値ＲＣＮ（ＲＣＮ１−ＲＣＮｎ）として、デコーダ６２ａで検出されたエントリＥＮＴに記憶する。
【００６４】
また、カウンタバッファ制御部６２は、デバッガ１０２からの読み出しコマンドＲＣＭＤ１に基づいて、読み出しコマンドＲＣＭＤ１により指定されるエントリＥＮＴからカウント値ＲＣＮを読み出し、読み出したカウント値ＲＣＮをデバッガ１０２に出力する。なお、カウンタバッファ制御部６２は、読み出しコマンドＲＣＭＤ１に基づいて、全てのエントリＥＮＴ１−ＥＮＴｎに記憶されたカウント値ＲＣＮ１−ＲＣＮｎをデバッガ１０２に出力してもよい。
【００６５】
割り込み処理部７０の割り込み制御部７３は、割り込み信号ＩＮＴに基づいて、リトライバッファ４８のポインタ値ＰＴをポインタ値ＰＴＳＴとしてポインタ保持部７１に記憶し、有効フラグ７２を”１”にセットする。割り込み制御部７３は、リトライバッファ４８のポインタ値ＰＴが一巡してポインタ保持部７１に記憶したポインタ値ＰＴＳＴと一致した場合、有効フラグ７２を”０”にリセットする。また、割り込み制御部７３は、デバッガ１０２からの読み出しコマンドＲＣＭＤ２に基づいて、ポインタ保持部７１が保持するポインタ値ＰＴＳＴと、有効フラグ７２の値であるフラグ値ＲＶＡＬとをデバッガ１０２に出力する。割り込み制御部７３は、メモリ２０に送信したパケットＰＣＫＴ１に対するメモリ２０からのエラー応答に基づいて、ポインタ保持部７１にポインタ値ＰＴを記憶するポインタ制御部の一例である。
【００６６】
ポインタ保持部７１は、割り込み制御部７３から出力されるポインタ値ＰＴをポインタ値ＰＴＳＴとして保持し、保持したポインタ値ＰＴＳＴを出力する。有効フラグ７２は、ポインタ保持部７１が保持するポインタ値ＰＴＳＴが有効な場合、有効状態を示す”１”にセットされ、ポインタ値ＰＴＳＴが無効な場合、無効状態を示す”０”にリセットされる。ポインタ保持部７１は、ポインタ値ＰＴが記憶されるポインタ記憶部の一例であり、有効フラグ７２は、ポインタ保持部７１に記憶されたポインタ値ＰＴが有効か否かを示すフラグの一例である。
【００６７】
図６は、図４に示すリトライバッファ４８のエントリＥＮＴと図５に示すカウンタバッファ６１のエントリＥＮＴとの関係の一例を示す。リトライバッファ４８は、パケットＰＣＫＴ１が記憶されるｎ個のエントリＥＮＴを有し、カウンタバッファ６１は、カウント値ＲＣＮが記憶されるｎ個のエントリＥＮＴを有する。図６に示すように、カウンタバッファ６１のエントリＥＮＴの各々は、リトライバッファ４８のエントリＥＮＴの各々に対応して設けられる。リトライバッファ４８のエントリＥＮＴは、第１の記憶領域の一例であり、カウンタバッファ６１のエントリＥＮＴは、第２の記憶領域の一例である。カウンタバッファ制御部６２は、第２の制御部の一例である。
【００６８】
リトライバッファ４８の各エントリのサイズは、パケットＰＣＫＴ１のサイズと同じ１２８ビットである。カウンタバッファ６１の各エントリＥＮＴのサイズは、１０ビットであり、１０２３個のパケットＰＣＫＴ０に相当するカウント値ＲＣＮまで記憶可能である。図６に示す例では、リトライバッファ４８のエントリＥＮＴ１−ＥＮＴ４と、カウンタバッファ６１のエントリＥＮＴ１−ＥＮＴ４とに記憶された情報は、図２に示した情報と同じであり、ポインタ値ＰＴは、”５”である。なお、リトライバッファ４８のエントリＥＮＴ１−ＥＮＴｎと、カウンタバッファ６１のエントリＥＮＴ１−ＥＮＴｎは、初期状態において、オールゼロにクリアされている。
【００６９】
図７は、図４に示すメモリコントローラ３０の動作の一例を示す。すなわち、図７は、メモリ送信情報記憶方法の一例およびメモリコントローラ３０の制御方法の一例を示す。図２と同一または同様の動作については、詳細な説明は省略する。メモリコントローラ３０からメモリ２０に送信されるパケットＰＣＫＴ１、ＰＣＫＴ０は、図２と同じであり、リトライバッファ４８に記憶されるパケットＰＣＫＴ１およびカウンタバッファ６１に記憶されるカウント値ＣＮＴは、図２および図６と同じである。
【００７０】
パケットＰＣＫＴ１、ＰＣＫＴ０のいずれかは、クロックサイクル毎にメモリ２０に送信される。図５に示すフリップフロップＦＦは、ポインタ値ＰＴを１クロックサイクル遅らせたポインタ値ＰＴ−１を生成する（図７（ａ））。図５に示す不一致比較器６６は、ポインタ値ＰＴ、ＰＴ−１が互いに異なるクロックサイクルにおいて、パルス状の書き込み信号ＷＲとパルス状のリセット信号ＲＳＴとを出力する（図７（ｂ）、（ｃ））。
【００７１】
図５に示すカウンタバッファ制御部６２は、書き込み信号ＷＲの立ち上がりエッジに同期して、図５に示すカウンタ６３がカウントしたカウント値ＣＮＴを、ポインタ値ＰＴ−１が示すカウンタバッファ６１のエントリＥＮＴ１に記憶する（図７（ｄ））。この後、カウンタ６３は、リセット信号ＲＳＴの立ち下がりエッジに同期して”０”にリセットされる（図７（ｅ））。
【００７２】
図５に示す一致比較器６５は、ポインタ値ＰＴ、ＰＴ−１が互いに同じクロックサイクルにおいて、パルス状のカウントアップ信号ＣＵＰを出力する（図７（ｆ））。カウンタ６３は、カウントアップ信号ＣＵＰの立ち下がりエッジに同期してカウント動作し、カウント値ＣＮＴを”１”増加する（図７（ｇ））。不一致比較器６６によりカウント値ＣＮＴをリセットし、一致比較器６５によりカウント値ＣＮＴを増加することで、パケットＰＣＫＴ０を直接検出することなく、パケットＰＣＫＴ０の生成数をカウントすることができる。以上の動作が繰り返されることで、リトライバッファ４８とカウンタバッファ６１の状態は、図６に示した状態になる。すなわち、図２と同様の動作が実行される。
【００７３】
図８は、図４に示す情報処理装置１００Ａにおいて、割り込み信号ＩＮＴが発生した場合の割り込み処理部７０の状態の一例を示す。図８に示す例では、図７に示す動作が実行された後、例えば、図４に示す異常検出処理部８４がメモリ２０からのエラー応答を検出し、割り込み信号ＩＮＴを発生する。
【００７４】
図８の左側に示すメモリ２０に送信されたパケットＰＣＫＴは、図７の動作でメモリ２０に送信されたパケットＰＣＫＴを１６進数で示したものであり、オールゼロはパケットＰＣＫＴ０を示し、オールゼロ以外はパケットＰＣＫＴ１を示す。下側のパケットＰＣＫＴほど送信時刻が早い。
【００７５】
図５に示す割り込み処理部７０は、割り込み信号ＩＮＴの受信に基づいて、リトライバッファ４８のポインタ値ＰＴ（＝５）をポインタ保持部７１にポインタ値ＰＴＳＴとして記憶し、有効フラグ７２のフラグ値ＲＶＡＬを”１”に設定する。
【００７６】
図９は、図４に示す情報処理装置１００Ａにおいて、メモリ２０に送信したパケットＰＣＫＴ１、ＰＣＫＴ０をデバッガ１０２によりトレースする動作の一例を示す。例えば、デバッガ１０２は、異常検出処理部８４が割り込み信号ＩＮＴを出力した後、情報処理装置１００Ａを制御する端末装置等からの指示に基づいて、メモリ２０に送信したパケットＰＣＫＴ１、ＰＣＫＴ０をトレースする動作を開始する。端末装置等は、情報処理装置１００Ａのオペレータにより操作される。
【００７７】
まず、デバッガ１０２は、読み出しコマンドＲＣＭＤ２を割り込み処理部７０に出力し、ポインタ値ＰＴＳＴとフラグ値ＲＶＡＬとを読み出す。デバッガ１０２は、フラグ値ＲＶＡＬが”１”であるため、ポインタ値ＰＴＳＴが有効であると判定する（図９（ａ））。デバッガ１０２は、ポインタ値ＰＴＳＴから”１”を引いて、トレースするパケットＰＣＫＴ１のうち、最新のパケットＰＣＫＴ１が記憶されたリトライバッファ４８のエントリＥＮＴの番号（＝４）を算出する（図９（ｂ））。
【００７８】
次に、デバッガ１０２は、読み出しコマンドＲＣＭＤ３をリトライバッファ４８に出力し、リトライバッファ４８のエントリＥＮＴ４に記憶されたリトライ情報ＲＴＲＹ（すなわち、パケットＰＣＫＴ１）を読み出す（図９（ｃ））。次に、デバッガ１０２は、読み出しコマンドＲＣＭＤ１をカウント処理部６０に出力し、カウンタバッファ６１のエントリＥＮＴ４に記憶されたカウント値（＝４）を読み出す（図９（ｄ））。そして、デバッガ１０２は、読み出したカウント値に対応する４エントリ分のパケットＰＣＫＴ０を再生する（図９（ｅ））。
【００７９】
次に、デバッガ１０２は、読み出しコマンドＲＣＭＤ３をリトライバッファ４８に出力し、リトライバッファ４８のエントリＥＮＴ３に記憶されたリトライ情報ＲＴＲＹを読み出す（図９（ｆ））。次に、デバッガ１０２は、読み出しコマンドＲＣＭＤ１をカウント処理部６０に出力し、カウンタバッファ６１のエントリＥＮＴ３に記憶されたカウント値（＝２）を読み出す（図９（ｇ））。そして、デバッガ１０２は、読み出したカウント値に対応する２エントリ分のパケットＰＣＫＴ０を再生する（図９（ｈ））。デバッガ１０２は、上述と同様の動作を繰り返し、メモリ２０に送信したパケットＰＣＫＴ１、ＰＣＫＴ０をトレースする（図９（ｉ）−（図９（ｌ）））。
【００８０】
このように、デバッガ１０２により、割り込み信号ＩＮＴが出力されるまでにリトライバッファ４８に記憶されたパケットＰＣＫＴ１と、隣接する２つのパケットＰＣＫＴ１の間に送信されたパケットＰＣＫＴ０とをトレースすることができる。
【００８１】
例えば、リトライバッファ４８が５１２個の１２８ビットのエントリＥＮＴを有し、カウンタバッファ６１が５１２個の１０ビットのエントリＥＮＴを有するとする。この場合、リトライバッファ４８のエントリＥＮＴの容量は、６５５３６ビットであり、カウンタバッファ６１のエントリＥＮＴの容量は、５１２０ビットであり、トータルの容量は、７０６５６ビットである。カウンタバッファ６１の１つのエントリＥＮＴは、１０２３個のパケットＰＣＫＴ０に相当する情報を保持することができる。したがって、デバッガ１０２は、最大で、５１２個のパケットＰＣＫＴ１と、５２万２７５３個（１０２３個×５１１）のパケットＰＣＫＴ０とをトレースすることができる。
【００８２】
例えば、２つのパケットＰＣＫＴ１の間にメモリ２０に送信されるパケットＰＣＫＴ０の数が、平均で２０個であるとする。この場合、５１２個のパケットＰＣＫＴ１に対して、１０２２０個（５１１×２０）のパケットＰＣＫＴ０がメモリ２０に送信される。１２８ビットのパケットＰＣＫＴ０をバッファ等にそのまま記憶する場合、１０２２０個のパケットＰＣＫＴ０を記憶するバッファの容量は、１２７万７５００ビット（１０２２０×１２８）になる。図５に示すカウンタバッファ６１を設けることで、１２７万７５００ビットを７０６５６ビットに削減することができる。この結果、１２８ビットのパケットＰＣＫＴ０をバッファ等にそのまま記憶する場合に比べて、メモリコントローラ３０の実装面積を削減することができる。
【００８３】
なお、図９では、エントリＥＮＴ４に記憶されたパケットＰＣＫＴ１の送信後にメモリ２０に送信されたパケットＰＣＫＴ０はトレースできない。しかしながら、例えば、図５に示す割り込み処理部に、割り込み信号ＩＮＴが発生したときのカウント値ＣＮＴを保持するカウント値保持部を設けることで、割り込み信号ＩＮＴが発生した時点のパケットＰＣＫＴ０も正確にトレースすることができる。
【００８４】
図１０は、図４に示す情報処理装置１００Ａにおいて、割り込み信号ＩＮＴが発生した後の割り込み処理部７０の状態の一例を示す。図１０に示す例では、リトライバッファ４８は、５１２個のエントリＥＮＴ１−ＥＮＴ５１２を有し、網掛けで示すエントリＥＮＴ２００−ＥＮＴ５１２、ＥＮＴ１−ＥＮＴ１９９にトレース可能な有効なパケットＰＣＫＴ１が記憶されている。
【００８５】
ここで、メモリコントローラ３０は、エントリＥＮＴ２００−ＥＮＴ５１２、ＥＮＴ１−ＥＮＴ１９９に記憶された順に、パケットＰＣＫＴ１をメモリ２０に送信済みである。すなわち、エントリＥＮＴ１−ＥＮＴ５１２に記憶されたパケットＰＣＫＴ１のうち、エントリＥＮＴ２００に記憶されたパケットＰＣＫＴ１の送信時刻が最も早く、エントリＥＮＴ１９９に記憶されたパケットＰＣＫＴ１の送信時刻が最も遅い。図１０に示す例では、ポインタ値ＰＴが２００のときに割り込み信号ＩＮＴが発生する（図１０（ａ））。
【００８６】
図５に示す割り込み処理部７０は、割り込み信号ＩＮＴの発生に基づいて、ポインタ保持部７１にポインタ値ＰＴＳＴ（＝２００）を記憶し、フラグ値ＲＶＡＬを”１”に設定する（図１０（ｂ））。例えば、図４に示すパケット生成部４４は、異常検出処理部８４からの異常の通知を受けた場合（すなわち、割り込み信号ＩＮＴが発行された場合）にも、パケットＰＣＫＴ１、ＰＣＫＴ０の生成を停止しない。この場合、斜線の枠で示すように、リトライバッファ４８のエントリＥＮＴにパケットＰＣＫＴ１が順次上書きされていく（図１０（ｃ）、（ｄ）、（ｅ））。
【００８７】
割り込み信号ＩＮＴの発生時に、ポインタ値ＰＴをポインタ値ＰＴＳＴとしてポインタ保持部７１に記憶することで、割り込み信号ＩＮＴの発生後にパケットＰＣＫＴが生成される場合にも、割り込み信号ＩＮＴの発生時のポインタ値ＰＴを保持することができる。したがって、新たに生成されたパケットＰＣＫＴ１がリトライバッファ４８に記憶され、ポインタ値ＰＴが更新される場合にも、割り込み信号ＩＮＴの発生時のポインタ値ＰＴを失うことを抑止することができる。
【００８８】
そして、ポインタ値ＰＴが一巡し、”２００”になった場合、割り込み信号ＩＮＴの発生後に生成されメモリ２０に送信された新たなパケットＰＣＫＴ１により、網掛けで示す有効なパケットＰＣＫＴ１が全て上書きされる（図１０（ｆ））。この時点で、割り込み信号ＩＮＴの発生前にメモリ２０に送信したパケットＰＣＫＴ１のトレースはできなくなるため、割り込み処理部７０は、フラグ値ＲＶＡＬを”０”に設定する（図１０（ｇ））。
【００８９】
デバッガ１０２は、割り込み処理部７０から読み出したフラグ値ＲＶＡＬが”０”の場合、リトライバッファ４８が有効なパケットＰＣＫＴ１を保持していないと判定し、パケットＰＣＫＴ１、ＰＣＫＴ０をトレースする動作を実行しない。一方、フラグ値ＲＶＡＬが”１”の場合、デバッガ１０２は、リトライバッファ４８のエントリＥＮＴに記憶されたパケットＰＣＫＴ１を使用して、メモリ２０に送信したパケットＰＣＫＴ１、ＰＣＫＴ０をトレースすることができる。ここで、トレースに使用できるパケットＰＣＫＴ１は、ポインタ値ＰＴＳＴの１つ前の値が示すエントリＥＮＴからポインタ値ＰＴが示すエントリＥＮＴまでに記憶されたパケットＰＣＫＴ１である。
【００９０】
なお、パケット生成部４４が、異常検出処理部８４からの異常の通知に基づいて、パケットＰＣＫＴ１、ＰＣＫＴ０の生成を停止する場合、リトライバッファ４８は、図１０の最も左側に示す状態に維持される。この場合、ポインタ値ＰＴをポインタ値ＰＴＳＴとして待避しなくてよいため、
メモリコントローラ３０は、図５に示した割り込み処理部７０を持たない送信情報記録部５０を有する。
【００９１】
図１１は、図５に示す送信情報記録部５０の動作フローの一例を示す。すなわち、図１１は、メモリ送信情報記憶方法の一例およびメモリコントローラ３０の制御方法の一例を示す。図１１に示すフローは、情報処理装置１００ＡがパケットＰＣＫＴをメモリ２０に送信する動作を開始したことに基づいて開始され、クロックサイクル毎に繰り返し実行される。
【００９２】
まず、ステップＳ１０において、メモリコントローラ３０は、割り込み信号ＩＮＴが発生した場合、動作をステップＳ１２に移行し、割り込み信号ＩＮＴが発生しない場合、動作をステップＳ１８に移行する。ステップＳ１２において、割り込み処理部７０は、ポインタ値ＰＴをポインタ値ＰＴＳＴとしてポインタ保持部７１に記憶する。次に、ステップＳ１４において、割り込み処理部７０は、フラグ値ＲＶＡＬを”１”に設定する。次に、ステップＳ１６において、異常検出処理部８４は、割り込み信号ＩＮＴの発行をマスクする。割り込み信号ＩＮＴの発行をマスクすることで、新たなに発生する割り込み信号ＩＮＴにより、ポインタ保持部７１に記憶されたポインタ値ＰＴが書き替えられることを抑止することができる。なお、ステップＳ１６の動作は、ステップＳ１２またはステップＳ１４の動作の前に実行されてもよい。
【００９３】
ステップＳ１８において、リトライバッファ４８は、新たなパケットＰＣＫＴ１が生成された場合、動作をステップＳ２０に移行し、新たなパケットＰＣＫＴ１が生成されていない場合、動作をステップＳ２２に移行する。ステップＳ２０において、リトライバッファ４８は、新たに生成されたパケットＰＣＫＴ１をリトライ情報ＲＴＲＹとしてエントリＥＮＴのいずれかに記憶し、ポインタＰＴを更新する。ステップＳ２０の後、動作はステップＳ２２に移行される。
【００９４】
ステップＳ２２において、カウント処理部６０は、ポインタ値ＰＴが更新されたか否かを判定する。すなわち、カウント処理部６０は、メモリ２０に送信する新たなパケットＰＣＫＴ１が生成され、新たなパケットＰＣＫＴ１がリトライバッファ４８に記憶されたか否かを判定する。新たなパケットＰＣＫＴ１が生成され、ポインタ値ＰＴが更新された場合、動作はステップＳ２６に移行され、新たなパケットＰＣＫＴ１が生成されず、ポインタ値ＰＴが更新されていない場合、動作はステップＳ２４に移行される。ステップＳ２４において、カウント処理部６０は、カウンタ６３をカウントアップし、動作を終了する。
【００９５】
ステップＳ２６において、カウント処理部６０は、カウント値ＣＮＴをカウント値ＲＣＮとしてカウンタバッファ６１のエントリＥＮＴのいずれかに記憶する。次に、ステップＳ２８において、カウント処理部６０は、カウンタ６３をリセットし、カウント値ＣＮＴを”０”に設定する。次に、ステップＳ３０において、割り込み処理部７０は、ポインタ値ＰＴが一巡してポインタ値ＰＴＳＴに到達したか否かを判定する。割り込み処理部７０は、ポインタ値ＰＴがポインタ値ＰＴＳＴに到達していない場合、ポインタ値ＰＴＳＴが有効であると判定し、動作を終了する。一方、割り込み処理部７０は、ポインタ値ＰＴが一巡してポインタ値ＰＴＳＴに到達した場合、ポインタ値ＰＴＳＴが無効であると判定し、動作をステップＳ３２に移行する。ステップＳ３２において、割り込み処理部７０は、ポインタ値ＰＴＳＴが無効になったため、フラグ値ＲＶＡＬを”０”に設定し、動作を終了する。
【００９６】
なお、パケット生成部４４が、割り込み信号ＩＮＴの発生等に基づいて、パケットＰＣＫＴ１、ＰＣＫＴ０の生成を停止する場合、メモリコントローラ３０は割り込み処理部７０を持たない。この場合、図１１のステップＳ１２、Ｓ１４、Ｓ３０、Ｓ３２の処理は削除され、ステップＳ２８の実行後、動作は終了する。
【００９７】
以上、図４から図１１に示す実施形態においても、図１から図３に示す実施形態と同様の効果を得ることができる。すなわち、ＰＣＫＴ０に含まれる情報自体を保持するバッファをメモリコントローラ３０に設ける場合に比べて、メモリ２０に送信するパケットＰＣＫＴ１、ＰＣＫＴ０のトレースに使用される回路の規模を削減することができる。
【００９８】
さらに、図４から図１１に示す実施形態では、以下に示す効果を得ることができる。すなわち、不一致比較器６６によりカウント値ＣＮＴをリセットし、一致比較器６５によりカウント値ＣＮＴを増加することで、パケットＰＣＫＴ０を直接検出することなく、パケットＰＣＫＴ０の生成数をカウントすることができる。
【００９９】
ポインタ保持部７１を設けることで、割り込み信号ＩＮＴの発生後にパケットＰＣＫＴの生成が継続される場合に、割り込み信号ＩＮＴの発生時のポインタ値ＰＴを失うことなく保持することができる。さらに、有効フラグ７２を設けることで、割り込み信号ＩＮＴの発生後にパケットＰＣＫＴの生成が継続される場合に、トレースする有効なパケットＰＣＫＴ１がリトライバッファ４８に保持されているか否かを判定することができる。
【０１００】
情報処理装置１００Ａにデバッガ１０２を設けることで、リトライバッファ４８に保持されたパケットＰＣＫＴ１およびカウンタバッファ６１に保持されたカウント値ＲＣＮに基づいて、メモリ２０に送信したパケットＰＣＫＴをトレースすることができる。異常検出処理部８４により割り込み信号ＩＮＴの発行をマスクすることで、新たなに発生する割り込み信号ＩＮＴにより、ポインタ保持部７１に記憶されたポインタ値ＰＴが書き替えられることを抑止することができる。この結果、メモリコントローラ３０の誤動作を抑止することができる。
【０１０１】
図１２は、情報処理装置、プロセッサおよびメモリ送信情報記憶方法の別の実施形態を示す。図１から図１１で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。図１２に示す情報処理装置１００Ｂは、図４に示すリトライバッファ４８、送信情報記録部５０およびデバッガ１０２の代わりに、リトライバッファ４８Ｂ、送信情報記録部５０Ｂおよびデバッガ１０２Ｂを有する。情報処理装置１００Ｂにおいて、リトライバッファ４８Ｂ、送信情報記録部５０Ｂおよびデバッガ１０２Ｂを除く構成は、図３に示す情報処理装置１００Ａと同様である。
【０１０２】
リトライバッファ４８Ｂは、図４に示すリトライバッファ４８の機能に加えて、エントリＥＮＴのいずれかに保持されたリトライ情報ＲＴＲＹ（すなわち、パケットＰＣＫＴ１）を送信情報記録部５０Ｂに出力する機能を有する。送信情報記録部５０Ｂは、リトライバッファ４８Ｂから出力されるリトライ情報ＲＴＲＹを、カウント値ＲＣＮに対応付けて記憶する機能を有する。また、送信情報記録部５０Ｂは、読み出しコマンドＲＣＭＤ５に基づいて、記憶したリトライ情報ＲＴＲＹおよびカウント値ＲＣＮをリトライ情報ＲＲおよびカウント値ＲＲＣＮとしてデバッガ１０２Ｂに出力する機能を有する。送信情報記録部５０Ｂのその他の機能は、図４に示す送信情報記録部５０の機能と同様である。
【０１０３】
デバッガ１０２Ｂは、図４に示すデバッガ１０２の機能に加えて、読み出しコマンドＲＣＭＤ５を出力する機能と、読み出しコマンドＲＣＭＤ５に応答してメモリコントローラ３０から出力されるリトライ情報ＲＲとカウント値ＲＲＣＮとを受信する機能とを有する。デバッガ１０２Ｂは、メモリ２０に送信した情報をトレースするトレース部の一例である。
【０１０４】
図１３は、図１２に示す送信情報記録部５０Ｂの一例を示す。図５に示した送信情報記録部５０と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。
【０１０５】
送信情報記録部５０Ｂは、カウント処理部６０、割り込み処理部７０および追加情報記録部６８Ｂを有する。カウント処理部６０は、図５に示すカウンタバッファ制御部６２の代わりにカウンタバッファ制御部６２Ｂを有する。カウント処理部６０のその他の構成は、図５に示すカウント処理部６０と同じである。
【０１０６】
カウンタバッファ制御部６２Ｂは、図１２に示すリトライバッファ４８Ｂから受信するリトライ情報ＲＴＲＹをカウンタバッファ６１に保持されたカウント値ＲＣＮのいずれかとともに追加情報記録部６８Ｂに出力する機能を有する。カウンタバッファ制御部６２Ｂのその他の機能は、図５に示すカウンタバッファ制御部６２と同じである。カウンタバッファ制御部６２Ｂは、第３の制御部の一例である。
【０１０７】
追加情報記録部６８Ｂは、リトライ情報ＲＴＲＹを保持するｍ個のエントリＥＮＴａ（ＥＮＴａ１−ＥＮＴａｍ）と、カウンタバッファ６１から転送されるカウント値ＲＣＮを保持するｍ個のエントリＥＮＴ（ＥＮＴｂ１−ＥＮＴｂｍ）を有する。エントリＥＮＴａ１−ＥＮＴａｍの各々は、エントリＥＮＴｂ１−ＥＮＴｂｍの各々に対応する。各エントリＥＮＴａは、第３の記憶領域の一例であり、各エントリＥＮＴｂは、第４の記憶領域の一例である。
【０１０８】
エントリＥＮＴａ１−ＥＮＴａｍは、シフトレジスタの構造を有しており、初段のエントリＥＮＴａ１に記憶されたリトライ情報ＲＴＲＹは、新たなリトライ情報ＲＴＲＹを受信する毎に、後段のエントリＥＮＴａに向けて順次転送される。最終段のエントリＥＮＴａｍに記憶されたリトライ情報ＲＴＲＹは、新たなリトライ情報ＲＴＲＹの受信に基づいてエントリＥＮＴａｍから追い出される。以下では、エントリＥＮＴ（エントリＥＮＴａ１−ＥＮＴａｍ）に記憶されたリトライ情報ＲＴＲＹは、リトライ情報ＲＲ（ＲＲ１−ＲＲｍ）とも称される。
【０１０９】
エントリＥＮＴｂ１−ＥＮＴｂｍは、シフトレジスタの構造を有しており、初段のエントリＥＮＴｂ１に記憶されたカウント値ＲＣＮは、新たなカウント値ＲＣＮを受信する毎に、後段のエントリＥＮＴｂに向けて順次転送される。最終段のエントリＥＮＴｂｍに記憶されたカウント値ＲＣＮは、新たなカウント値ＲＣＮの受信に基づいてエントリＥＮＴｂｍから追い出される。以下では、エントリＥＮＴ（エントリＥＮＴｂ１−ＥＮＴｂｍ）に記憶されたカウント値ＲＣＮは、カウント値ＲＲＣＮ（ＲＲＣＮ１−ＲＲＣＮｍ）とも称される。
【０１１０】
追加情報記録部６８Ｂは、デバッガ１０２Ｂから受信する読み出しコマンドＲＣＭＤ５に基づいて、エントリＥＮＴａに保持されたリトライ情報ＲＲと、エントリＥＮＴｂに保持されたカウント値ＲＲＣＮとをデバッガ１０２Ｂに出力する。例えば、追加情報記録部６８Ｂは、読み出しコマンドＲＣＭＤ５に基づいて、リトライ情報ＲＲ１−ＲＲｍと、カウント値ＲＣＮ１−ＲＣＮｍとをデバッガ１０２Ｂに出力する。なお、読み出しコマンドＲＣＭＤ５にエントリ番号が含まれる場合、追加情報記録部６８Ｂは、指定されたエントリＥＮＴａ、ＥＮＴｂに保持されたリトライ情報ＲＲおよびカウント値ＲＲＣＮをデバッガ１０２Ｂに出力してもよい。また、エントリＥＮＴａ、ＥＮＴｂは、図６に示すリトライバッファ４８と同様にポインタ値ＰＴで管理されるリングバッファの構造を有してもよい。
【０１１１】
図１４は、図１２に示すメモリコントローラ３０の動作の一例を示す。図１４は、リトライバッファ４８ＢにパケットＰＣＫＴ１が記憶されていない初期状態において、パケット生成部４４が生成したパケットＰＣＫＴ１がリトライバッファ４８Ｂに順に記憶される例を示す。図１４では、説明を分かりやすくために、リトライバッファ４８Ｂおよびカウンタバッファ６１の各々は、４つのエントリＥＮＴ１−ＥＮＴ４を有するとする。また、追加情報記録部６８Ｂは、リトライ情報ＲＴＲＹをリトライ情報ＲＲとして記憶する３つのエントリＥＮＴａ１−ＥＮＴａ３と、カウント値ＲＣＮをカウント値ＲＲＣＮとして記憶する３つのエントリＥＮＴｂとを有するとする。
【０１１２】
リトライバッファ４８ＢのエントリＥＮＴおよび追加情報記録部６８ＢのエントリＥＮＴａの初期状態は、”００”で示される。リトライバッファ４８ＢのエントリＥＮＴに順次記憶されるパケットＰＣＫＴ１は、Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈで示される。カウンタバッファ６１のエントリＥＮＴおよび追加情報記録部６８ＢのエントリＥＮＴｂは、”０”に初期化される。
【０１１３】
リトライバッファ４８Ｂは、パケット生成部４４によるパケットＡの生成に基づいて、ポインタ値ＰＴが示すエントリＥＮＴ１にパケットＡを記憶し、ポインタ値ＰＴを更新する（図１４（ａ））。カウンタバッファ制御部６２Ｂは、カウンタバッファ６１においてポインタ値ＰＴ−１（図１３）により示されるエントリＥＮＴ１に、カウンタ６３のカウント値ＣＮＴをカウント値ＲＣＮとして記憶する（図１４（ｂ））。
【０１１４】
また、カウンタバッファ制御部６２Ｂは、リトライバッファ４８Ｂにおいてポインタ値ＰＴにより示されるエントリＥＮＴ２が保持する情報をリトライ情報ＲＲとして追加情報記録部６８ＢのエントリＥＮＴａ１に記憶させる（図１４（ｃ））。さらに、カウンタバッファ制御部６２Ｂは、カウンタバッファ６１においてポインタ値ＰＴにより示されるエントリＥＮＴ２が保持する情報をカウント値ＲＲＣＮとして追加情報記録部６８ＢのエントリＥＮＴｂ１に記憶させる（図１４（ｄ））。なお、各エントリＥＮＴａに記憶されたリトライ情報ＲＲは、クロックサイクル毎に後段側のエントリＥＮＴａに順次転送され、各エントリＥＮＴｂに記憶されたカウント値ＲＲＣＮは、クロックサイクル毎に後段側のエントリＥＮＴｂに順次転送される。
【０１１５】
この後、リトライバッファ４８Ｂは、パケット生成部４４により生成されたパケットＢ、Ｃ、Ｄを、ポインタ値ＰＴが示すエントリＥＮＴに順次記憶する（図１４（ｅ）、（ｆ）、（ｇ））。カウンタバッファ制御部６２Ｂは、ポインタ値ＰＴが更新される毎に、カウンタバッファ６１においてポインタ値ＰＴ−１により示されるエントリＥＮＴにカウント値ＣＮＴをカウント値ＲＣＮとして記憶する（図１４（ｈ））。ここで、カウント値ＣＮＴは、２つのパケットＰＣＫＴ１（例えば、ＡとＢ）の間に生成されたパケットＰＣＫＴ０の数を示す。
【０１１６】
また、カウンタバッファ制御部６２Ｂは、リトライバッファ４８Ｂにおいてポインタ値ＰＴにより示されるエントリＥＮＴに保持されたパケットＰＣＫＴ１をリトライ情報ＲＲとしてエントリＥＮＴａ１に記憶する。さらに、カウンタバッファ制御部６２Ｂは、カウンタバッファ６１において、ポインタ値ＰＴに対応するエントリＥＮＴに保持されたカウント値ＲＣＮをカウント値ＲＲＣＮとしてエントリＥＮＴｂに記憶する。例えば、パケットＤがリトライバッファ４８ＢのエントリＥＮＴ３に記憶されたクロックサイクルにおいて、パケットＡがリトライ情報ＲＲとしてエントリＥＮＴａ１に記憶される（図１４（ｉ））。また、カウント値”０”（初期値）がカウント値ＲＲＣＮとしてエントリＥＮＴｂ１に記憶される（図１４（ｊ））。
【０１１７】
次に、リトライバッファ４８Ｂは、パケット生成部４４により生成されたパケットＥを、ポインタ値ＰＴが示すエントリＥＮＴ１に記憶し、ポインタ値ＰＴを更新する（図１４（ｋ））。ここで、エントリＥＮＴ１に保持されたパケットＡは、パケットＥにより上書きされる前に追加情報記録部６８ＢのエントリＥＮＴａ１に転送済みである。
【０１１８】
次に、リトライバッファ４８Ｂは、パケット生成部４４により生成されたパケットＦを、ポインタ値ＰＴが示すエントリＥＮＴ２に記憶し、ポインタ値ＰＴを更新する（図１４（ｌ））。カウンタバッファ制御部６２Ｂは、カウンタバッファ６１においてポインタ値ＰＴ−１により示されるエントリＥＮＴ２にカウント値ＣＮＴ（”４”）を記憶する（図１４（ｍ））。ここで、リトライバッファ４８ＢのエントリＥＮＴ２に保持されたパケットＢは、パケットＦにより上書きされる前に追加情報記録部６８ＢのエントリＥＮＴａ１に転送済みである（図１４（ｎ））。カウンタバッファ６１のエントリＥＮＴ２に保持されたカウント値ＣＮＴ（”５”）は、カウント値ＣＮＴ（”４”）により上書きされる前に追加情報記録部６８ＢのエントリＥＮＴｂ１に転送済みである（図１４（ｏ））。
【０１１９】
図１４に示すように、メモリコントローラ３０に追加情報記録部６８Ｂを設けることで、リトライバッファ４８Ｂおよびカウンタバッファ６１に記憶されたパケットＰＣＫＴ１およびカウント値ＣＮＴを、追加情報記録部６８Ｂに転送することができる。これにより、リトライバッファ４８ＢのエントリＥＮＴの数より多いパケットＰＣＫＴ１と、２つのパケットＰＣＫＴ１の間に生成されるパケットＰＣＫＴ０の数とをメモリコントローラ３０に保持することができる。
【０１２０】
例えば、設計済みのリトライバッファ４８Ｂを使用してメモリコントローラ３０を新たに設計する場合がある。この場合、リトライバッファ４８ＢのエントリＥＮＴの数に制限されることなく、所望の数のパケットＰＣＫＴ１と、パケットＰＣＫＴ０の数を示す情報とをメモリコントローラ３０に保持することができる。この結果、デバッガ１０２Ｂによりトレース可能なパケットＰＣＫＴ１、ＰＣＫＴ０の数を、追加情報記録部６８ＢのエントリＥＮＴａ、ＥＮＴｂの数に応じて増加することができる。
【０１２１】
図１５は、図１２に示すメモリコントローラ３０の動作の別の例を示す。図１４と同じ動作については、詳細な説明は省略する。図１５は、リトライバッファ４８Ｂの全てのエントリＥＮＴ１−ＥＮＴ４にパケットｗ、ｘ、ｙ、ｚのいずれかが記憶された状態で、図１４に示したパケットＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈがリトライバッファ４８Ｂに順に記憶される例を示す。カウンタバッファ６１のエントリＥＮＴ１−ＥＮＴ４の各々には、パケットｗ、ｘ、ｙ、ｚに対応してカウント値ＣＮＴ（”７”、”８”、”９”、”１０”）が記憶される。
【０１２２】
図１５に示す例では、パケットＡがリトライバッファ４８ＢのエントリＥＮＴ１に記憶される前に、エントリＥＮＴ１に保持されたパケットｗが追加情報記録部６８Ｂに転送される（図１５（ａ））。パケットＡに対応するカウント値ＣＮＴ（”２”）がカウンタバッファ６１のエントリＥＮＴ１に記憶される前に、エントリＥＮＴ１に保持されたカウント値ＣＮＴ（”７”）が追加情報記録部６８Ｂに転送される（図１５（ｂ））。
【０１２３】
図１５において、割り込み信号ＩＮＴ（図１２）が、例えば、リトライバッファ４８ＢにパケットＥが記憶されたクロックサイクルで発生したとする。この場合、デバッガ１０２Ｂは、パケットＰＣＫＴ１（ｙ、ｚ、Ａ、Ｂ、Ｃ、Ｄ、Ｅ）と、パケットｙからパケットＥの間に生成されたパケットＰＣＫＴ０をトレースすることができる。これに対して、メモリコントローラ３０が追加情報記録部６８Ｂを含まない場合、デバッガ１０２Ｂがトレース可能なパケットは、パケットＰＣＫＴ１（Ｂ、Ｃ、Ｄ、Ｅ）と、パケットＢからパケットＥの間に生成されたパケットＰＣＫＴ０である。
【０１２４】
図１６は、図１３に示す送信情報記録部５０Ｂの動作フローの一例を示す。すなわち、図１６は、メモリ送信情報記憶方法の一例およびメモリコントローラ３０の制御方法の一例を示す。図１１と同一または同様の動作については、同じ符号を付し、詳細な説明は省略する。図１６は、ステップＳ２２とステップＳ２６の間にステップＳ２５が挿入されることを除き、図１１に示す動作と同じである。
【０１２５】
ステップＳ２２において、新たなパケットＰＣＫＴ１の生成に基づいてポインタ値ＰＴが更新されたと判定された場合、動作はステップＳ２５に移行する。ステップＳ２５において、カウンタバッファ制御部６２Ｂは、リトライバッファ４８Ｂにおいてポインタ値ＰＴにより示されるエントリＥＮＴが保持するパケットＰＣＫＴ１をリトライ情報ＲＲとして追加情報記録部６８ＢのエントリＥＮＴａ１に記憶させる。また、カウンタバッファ制御部６２Ｂは、カウンタバッファ６１においてポインタ値ＰＴにより示されるエントリＥＮＴが保持するカウント値ＲＣＮをカウント値ＲＲＣＮとして追加情報記録部６８ＢのエントリＥＮＴｂ１に記憶させる。そして、動作はステップＳ２６に移行される。
【０１２６】
以上、図１２から図１６に示す実施形態においても、図１から図１１に示す実施形態と同様の効果を得ることができる。すなわち、ＰＣＫＴ０に含まれる情報自体を保持するバッファをメモリコントローラ３０に設ける場合に比べて、メモリ２０に送信するパケットＰＣＫＴ１、ＰＣＫＴ０のトレースに使用される回路の規模を削減することができる。
【０１２７】
さらに、図１２から図１６に示す実施形態では、メモリコントローラ３０に追加情報記録部６８Ｂが設けられる。これにより、ポインタ値ＰＴが一巡することにより、リトライバッファ４８Ｂに記憶されたパケットＰＣＫＴ１が上書きされる場合にも、上書きされるパケットＰＣＫＴ１とカウント値ＲＣＮとを追加情報記録部６８Ｂに記憶することができる。したがって、リトライバッファ４８ＢのエントリＥＮＴの数に制限されることなく、所望の数のパケットＰＣＫＴ１と、パケットＰＣＫＴ０の数を示す情報とをメモリコントローラ３０に保持することができる。すなわち、デバッガ１０２Ｂによりトレース可能なパケットＰＣＫＴ１、ＰＣＫＴ０の数を、追加情報記録部６８ＢのエントリＥＮＴａ、ＥＮＴｂの数に応じて増加することができる。
【０１２８】
以上の図１から図１６に示す実施形態に関し、さらに以下の付記を開示する。
（付記１）
メモリと、前記メモリに対する情報の送受信を制御するメモリコントローラを含むプロセッサとを有する情報処理装置において、
前記メモリコントローラは、
複数の第１の記憶領域と、
前記メモリに送信する情報のうち、前記メモリを動作させる第１の情報を前記複数の第１の記憶領域のいずれかに記憶する第１の制御部と、
第１の情報の前記メモリへの送信から次の第１の情報の前記メモリへの送信までの間に前記メモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報の前記メモリへの送信数をカウントするカウンタと、
前記複数の第１の記憶領域の各々に対応する複数の第２の記憶領域と、
前記カウンタのカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、前記複数の第２の記憶領域のいずれかに記憶する第２の制御部と
を備えることを特徴とする情報処理装置。
（付記２）
前記第１の制御部は、前記複数の第１の記憶領域のうち、第１の情報を記憶する第１の記憶領域をポインタにより管理し、第１の記憶領域に第１の情報を記憶する毎に、前記ポインタの値を更新し、
前記カウンタは、前記ポインタの値の更新に基づいてリセットされた後、第２の情報の前記メモリへの送信数をカウントすること
を特徴とする付記１に記載の情報処理装置。
（付記３）
前記メモリコントローラは、さらに、
前記ポインタの値が記憶されるポインタ記憶部と、
前記メモリに送信した第１の情報に対する前記メモリからのエラー応答に基づいて、前記ポインタ記憶部に前記ポインタの値を記憶するポインタ制御部と
を備えることを特徴とする付記２に記載の情報処理装置。
（付記４）
前記第１の制御部は、前記複数の第１の記憶領域に循環的に第１の情報を記憶し、
前記メモリコントローラは、さらに、
前記ポインタ記憶部に保持された前記ポインタの値が有効かを示すフラグを備え、
前記ポインタ制御部は、前記ポインタ記憶部への前記ポインタの値の書き込みに基づいて前記フラグを有効状態に設定し、前記ポインタの値が一巡して前記ポインタ記憶部に保持されたポインタの値と一致した場合に前記フラグを無効状態に設定すること
を特徴とする付記３に記載の情報処理装置。
（付記５）
前記メモリコントローラは、さらに、
複数の第３の記憶領域と、
前記複数の第３の記憶領域の各々に対応する複数の第４の記憶領域と、
前記複数の第１の記憶領域のうち、前記ポインタにより示される第１の記憶領域に、新たな第１の情報が記憶される前に記憶された第１の情報を前記複数の第３の記憶領域のいずれかに記憶するとともに、前記複数の第２の記憶領域のうち、前記ポインタにより示される第１の記憶領域に対応する第２の記憶領域に記憶された前記カウント値を、前記複数の第４の記憶領域のうち、第１の情報を記憶した第３の記憶領域に対応する第４の記憶領域に記憶する第３の制御部と
を備えることを特徴とする付記２ないし付記４のいずれか１項に記載の情報処理装置。
（付記６）
前記情報処理装置は、さらに、前記複数の第１の記憶領域に記憶された複数の第１の情報と、前記複数の第２の記憶領域に記憶された複数の前記カウント値とを使用して、前記メモリに送信した情報をトレースするトレース部を備えること
を特徴とする付記１ないし付記５のいずれか１項に記載の情報処理装置。
（付記７）
前記情報処理装置は、さらに、メモリアクセス要求に基づいて第１の情報を生成し、第１の情報を生成しない期間に第２の情報を生成する情報生成部を備えること
を特徴とする付記１ないし付記６のいずれか１項に記載の情報処理装置。
（付記８）
メモリに対する情報の送受信を制御するメモリコントローラを含むプロセッサにおいて、
前記メモリコントローラは、
複数の第１の記憶領域と、
前記メモリに送信する情報のうち、前記メモリを動作させる第１の情報を前記複数の第１の記憶領域のいずれかに記憶する第１の制御部と、
第１の情報の前記メモリへの送信から次の第１の情報の前記メモリへの送信までの間に前記メモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報の前記メモリへの送信数をカウントするカウンタと、
前記複数の第１の記憶領域の各々に対応する複数の第２の記憶領域と、
前記カウンタのカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、前記複数の第２の記憶領域のいずれかに記憶する第２の制御部と
を備えることを特徴とするプロセッサ。
（付記９）
メモリに対する情報の送受信を制御するメモリコントローラにより、前記メモリに送信する情報を記憶するメモリ送信情報記憶方法において、
前記メモリコントローラが
前記メモリに送信する情報のうち、前記メモリを動作させる第１の情報を複数の第１の記憶領域のいずれかに記憶し、
第１の情報の前記メモリへの送信から次の第１の情報の前記メモリへの送信までの間に前記メモリに送信する情報であって、第１の情報の無送信を示す情報である第２の情報の前記メモリへの送信数をカウントし、
カウントにより得たカウント値を、第１の記憶領域に記憶された第１の情報に対応付けて、複数の第２の記憶領域のいずれかに記憶すること
を特徴とするメモリ送信情報記憶方法。
【０１２９】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１３０】
１…プロセッサ；２…メモリ；３…メモリコントローラ；４…パケット生成部；５…送信部；６…リトライバッファ；６ａ…バッファ制御部；７…カウンタ；８…カウンタバッファ；８ａ…バッファ制御部；１０…プロセッサ；１２…プロセッサコア；１４…キャッシュメモリ；１６…リクエスト処理部；２０…メモリ；２２…メモリチップ；２４…入出力制御部；２６…受信制御部；２８…送信制御部；３０…メモリコントローラ；４０…送信制御部；４２…送信情報処理部；４４…パケット生成部；４６…送信部；４８、４８Ｂ…リトライバッファ；５０、５０Ｂ…送信情報記録部；６０…カウント処理部；６１…カウンタバッファ；６２、６２Ｂ…カウンタバッファ制御部；６２ａ…デコーダ；６３…カウンタ；６４…カウンタ制御部；６５…一致比較器；６６…不一致比較器；６８Ｂ…追加情報記録部；７０…割り込み処理部；７１…ポインタ保持部；７２…有効フラグ；７３…割り込み制御部；８０…受信制御部；８２…受信部；８４…異常検出処理部；８６…受信情報処理部；９０…受信情報記録部；１００、１００Ａ、１００Ｂ…情報処理装置；１０２、１０２Ｂ…デバッガ；ＣＬＫ…クロック；ＣＮＴ…カウント値；ＥＮＴ、ＥＮＴａ、ＥＮＴｂ…エントリ；ＦＦ…フリップフロップ；ＩＮＴ…割り込み信号；ＭＲＥＱ…メモリアクセス要求；ＰＣＫＴ０、ＰＣＫＴ１…パケット；ＰＴ、ＰＴＳＴ…ポインタ値；ＲＣＮ…カウント値；ＲＩＮＦ…受信情報；ＲＲ…リトライ情報；ＲＲＣＮ…カウント値；ＲＶＡＬ…フラグ値；ＳＩＮＦ…送信情報
【図１】
2018195260.tif 000003
【図２】
2018195260.tif 000004
【図３】
2018195260.tif 000005
【図４】
2018195260.tif 000006
【図５】
2018195260.tif 000007
【図６】
2018195260.tif 000008
【図７】
2018195260.tif 000009
【図８】
2018195260.tif 000010
【図９】
2018195260.tif 000011
【図１０】
2018195260.tif 000012
【図１１】
2018195260.tif 000013
【図１２】
2018195260.tif 000014
【図１３】
2018195260.tif 000015
【図１４】
2018195260.tif 000016
【図１５】
2018195260.tif 000017
【図１６】
2018195260.tif 000018