(57)【特許請求の範囲】
【請求項１】
バイト命令およびワード命令を含むプログラムが格納されるプログラムメモリと、
プログラムの実行時にデータの読み出しおよび書き込みが行われるデータメモリと、
前記バイト命令を実行するときに前記データメモリの１個のデータアドレスに読み出しまたは書き込みを行い且つ前記ワード命令を実行するときに前記データメモリの２個の前記データアドレスに読み出しまたは書き込みを行うプロセッサと、該プロセッサが前記ワード命令を実行する際に該ワード命令のデータアドレスを加工して実際に読み出しまたは書き込みされる２個の連続する前記データアドレスを生成するワードバウンダリ回路とを有するプログラム実行部と、
前記プログラムの実行時に読み出しまたは書き込みされるか否かを前記データメモリの前記データアドレス毎に予想した結果を記憶し、該データアドレスが入力されたときに当該データアドレスに対応する該予想結果を出力するアライメント管理用メモリと、
前記プロセッサが前記ワード命令を実行した際にワード識別信号を出力する識別信号出力部と、
前記識別信号出力部から前記ワード識別信号が出力され且つ前記アライメント管理用メモリから読み出しまたは書き込みが行われないことを示す前記予想結果が出力されたときにアライメントアクセス検出信号を出力するアライメントアクセス検出部と、
前記ワード命令の命令アドレスと前記ワードバウンダリ回路が出力した前記データアドレスとを格納するとともに、前記アライメントアクセス検出部が出力した前記アライメントアクセス検出信号を格納するトレースメモリと、
を備えることを特徴とするインサーキットエミュレータ。
【請求項２】
前記プログラムの実行を制御するエミュレータ制御部と、
前記アライメントアクセス検出信号を入力したときに、前記エミュレータ制御部に前記プログラムの実行をブレークさせるブレーク回路と、
を備えることを特徴とする請求項１に記載のインサーキットエミュレータ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、インサーキットエミュレータ（以下、ＩＣＥと称す）におけるデータメモリへのアライメントアクセスの検知方法に関する。
【０００２】
【従来の技術】
ＩＣＥは、マイクロコントローラ（以下、マイコンと称す）の開発支援装置として、プログラム及びハードウェアのデバッグに用いられる。ＩＣＥは、システム状態の設定と変更ができる機能、実行状態が確認できるトレース機能、及びプログラムの特定部分やシステムとしての特定状態により実行を中断できるブレーク機能などを有していて、リアルタイムデバッグを効率的に行うことができる。
【０００３】
図９に、従来のＩＣＥ１０の構成例を示す。ＩＣＥ１０は、プログラム実行部１２と、トレースメモリ１４と、プログラムメモリ１６と、データメモリ１８とを有する。そして、これら各部は、互いにバス２８によって接続され、更に、このバス２８を介してエミュレータ制御部２２に接続される。
【０００４】
また、ＩＣＥ１０は、バス２８に接続された入出力ポート２０を有しており、該ポート２０は、目標システム３２と接続される。更に、ＩＣＥ１０において、エミュレータ制御部２２は、開発システム３０と接続される。
【０００５】
上述したような構成を有するＩＣＥ１０において、開発システム３０よりプログラムメモリ１６にロードされるプログラムのエミュレーション（実行）が行われる。尚、目標システム３２は、エミュレーションの対象となるシステムであって、例えば、ＣＰＵ等を有するマイコンによって構成される。
【０００６】
エミュレーション中、プログラムの命令の実行は、プログラム実行部１２においてＣＰＵ２４によって行われる。このＣＰＵ２４は、例えば目標システム３２がマイコンによって構成される場合、このマイコンのＣＰＵとハード的に等価な構成となっている。
【０００７】
図８を参照して、ＣＰＵ２４が、プログラム命令のうち所定のワード命令を実行する場合について説明する。尚、所定のワード命令が実行されると、該命令が指定するデータメモリ１８のアドレスに対して、ワード型、ダブルワード型、及びクワッドワード型などの所定のワード型のデータの読み出し／書き込みが行われる。また、以降の説明において、プログラム命令が指定するデータメモリ１８のアドレスを、プログラム命令のデータアドレスと称する。
【０００８】
図８は、データメモリ１８の構成例を示す図である。このデータメモリ１８は、例えば、Ａ０〜Ａ１９までの２０ビットのアドレスバス２８ａ、及びＤ０〜Ｄ７までの８ビットのデータバス２８ｄを含むバス２８の構成に対応する構成を有する。尚、図９には、アドレスバス２８ａ及びデータバス２８ｄは図示していない。
【０００９】
上述したような構成のデータメモリ１８は、プログラム命令のデータアドレスの偶数アドレスに対応する領域１８ａ、及び、プログラム命令のデータアドレスの奇数アドレスに対応する領域１８ｂを有している。
【００１０】
ＣＰＵ２４が、所定ワード命令として、例えば、ワード命令を実行した場合、データメモリ１８に対し、ワード型のデータの読み出し／書き込みが行われる。図８に示すデータバス２８ｄは８ビットで構成されているため、ワード命令のデータアドレスが偶数アドレスで開始する場合、データメモリ１８において、ワード単位のデータは、該偶数アドレスと、該偶数アドレスに１を加えたアドレスである奇数アドレス（例えば、ワード命令のデータアドレスが偶数アドレス１０００Ｈで開始する場合、図８に示すデータメモリ１８の１０００Ｈと１００１Ｈ）に対し読み出し／書き込みが行われる。
【００１１】
また、ワード命令のデータアドレスが奇数アドレスで開始する場合、データメモリ１８において、ワード単位のデータは、該奇数アドレスと、該奇数アドレスに１を減じた偶数アドレス（例えば、ワード命令のデータアドレスが奇数アドレス１００１Ｈで開始する場合、図８に示すデータメモリ１８の１００１Ｈと１０００Ｈ）に対し読み出し／書き込みが行われる。
【００１２】
尚、図８に示すデータメモリ１８の構成はただの一例にすぎず、上述したデータの読み出し／書き込みに関する動作と同様の動作が、ＩＣＥ１０において、一般的に行われる。
【００１３】
図９に示す構成例では、ＣＰＵ２４はワードバウンダリ回路２６とバス２８によって接続されている。データメモリ１８に対し、所定のワード型のデータの書き込み／読み出しを行うため、ＣＰＵ２４は、所定のワード命令のデータアドレスを、ワードバウンダリ回路２６において加工して出力するのが一般的である。
【００１４】
ＣＰＵ２４が、データアドレスが偶数アドレスで開始される所定のワード命令を実行するとする。その場合、ＣＰＵ２４より出力された所定のワード命令のデータアドレスがワードバウンダリ回路２６に入力されると、該ワードバウンダリ回路からは、該データアドレスの偶数アドレスと、該偶数アドレスに１を加えることによって変換されたアドレスである奇数アドレスとが、バス２８のアドレスバスに出力される。
【００１５】
また、ＣＰＵ２４が実行する所定のワード命令のデータアドレスが奇数アドレスで開始されるとする。このとき、ＣＰＵ２４より出力された所定のワード命令のデータアドレスがワードバウンダリ回路２６に入力されると、該ワードバウンダリ回路からは、該データアドレスの奇数アドレスと、該奇数アドレスから１だけ減じることによって変換されたアドレスである偶数アドレスとが、バス２８のアドレスバスに出力される。
【００１６】
ここで、ワード命令のデータアドレスの開始アドレスは、ＣＰＵ２４がワード命令を開始するとき、ワードバウンダリ回路２６に出力するアドレスである。よって、ＣＰＵ２４が所定のワード命令を開始するとき、ワードバウンダリ回路２６からバス２８のアドレスバスに出力されるアドレスの最下位ビットは、常に０となる。そして、データメモリ１８では、バス２８のアドレスバスを介してワードバウンダリ回路２６によって出力されたアドレスに従って、ワード単位のデータの読み出し／書き込みが行われる。
【００１７】
このため、ＩＣＥ１０のプログラムメモリ１６にロードされるプログラムは、一般的に、上述したようなワードバウンダリ回路２６の動作を考慮して作成される。
【００１８】
【発明が解決しようとする課題】
プログラムの作成は、よく知られているようにＣＰＵの解読できる機械語ではなく、Ｃ言語等によって作成される。そして、Ｃ言語等で作成されるプログラム命令のデータアドレスは、ポインタとして指定されるのが一般的である。上述したようなワードバウンダリ回路２６の動作を考えれば、所定のワード命令の開始アドレスに対するポインタは、常に偶数アドレスにおかれるように（即ち、ワードバウンダリ回路２６からバス２８のアドレスバスに出力されるアドレスの最下位ビットが０となるように）、設計する必要がある。
【００１９】
Ｃ言語等で作成されたプログラムは、既に説明したように、開発システム３０からＩＣＥ１０にロードされる。この際、開発システム３０は、コンパイラを用いてＣ言語等で作成されたプログラムをコンパイルし、コンパイル後のプログラムをＩＣＥ１０にロードする。
【００２０】
コンパイラによるプログラムのコンパイル後、上述したポインタは、プログラム命令のデータアドレスに変換される。そして、上述したような設計が行われたプログラムにおいて、所定のワード命令のデータアドレスの開始アドレスに対応するポインタは、偶数アドレスに変換される（おかれる）はずである。しかし、実際には、コンパイラの仕様により、所定のワード命令のデータアドレスの開始アドレスに対応するポインタが、奇数アドレスに変換されるという事態が生じることもある。
【００２１】
このようなプログラムがエミュレーションされると、データメモリ１８に対して、コンパイル前のプログラムのポインタが示すアドレスに対するアクセスが行われず、そのため、ＩＣＥ１０では、正常な動作が行われなくなってしまう。
【００２２】
このようなＩＣＥ１０の誤動作の検出は、エミュレーションがブレーク（中止）した後、開発システム３０によって行われるデバッグ時に、プログラムのエミュレーション状況が記載されたトレースメモリ１４のデータを確認すれば、行うことができる。しかし、トレースメモリ１４が有する多量のデータを逐一確認する作業は煩雑であり、その結果、上述したようなＩＣＥ１０の誤動作を見落とす事態が生じ、よって、デバッグ効率が悪くなるという問題が生じていた。
【００２３】
従って、この発明の目的は、上述したようなＩＣＥの誤動作を容易に検出することのできるＩＣＥにおけるデータメモリへのアライメントアクセスの検知方法を提供することにある。
【００２４】
【課題を解決するための手段】
この発明に係るインサーキットエミュレータ（以下、ＩＣＥと記す）は、バイト命令およびワード命令を含むプログラムが格納されるプログラムメモリと、プログラムの実行時にデータの読み出しおよび書き込みが行われるデータメモリと、バイト命令を実行するときにデータメモリの１個のデータアドレスに読み出しまたは書き込みを行い且つワード命令を実行するときにデータメモリの２個のデータアドレスに読み出しまたは書き込みを行うプロセッサと、プロセッサがワード命令を実行する際にワード命令のデータアドレスを加工して実際に読み出しまたは書き込みされる２個の連続するデータアドレスを生成するワードバウンダリ回路とを有するプログラム実行部と、プログラムの実行時に読み出しまたは書き込みされるか否かをデータメモリのデータアドレス毎に予想した結果を記憶し、データアドレスが入力されたときにデータアドレスに対応する予想結果を出力するアライメント管理用メモリと、プロセッサがワード命令を実行した際にワード識別信号を出力する識別信号出力部と、識別信号出力部からワード識別信号が出力され且つアライメント管理用メモリから読み出しまたは書き込みが行われないことを示す予想結果が出力されたときにアライメントアクセス検出信号を出力するアライメントアクセス検出部と、ワード命令の命令アドレスとワードバウンダリ回路が出力したデータアドレスとを格納するとともに、アライメントアクセス検出部が出力したアライメントアクセス検出信号を格納するトレースメモリとを備える。
【００２７】
本願では、プログラム実行部が、開始アドレスが奇数アドレスのデータアドレスである所定のワード命令を実行することを、アライメントアクセスと称する。
【００２８】
この発明に係るＩＣＥにおいて、プログラムメモリに格納されたプログラムのエミュレーションが開始されると、プログラム実行部から、ワードバウンダリ回路によって加工されたアドレスがアライメント管理用メモリに入力される。そして、アライメント管理用メモリは、アライメント管理用データのうち、プログラム実行部から入力されたアドレスに対応するデータを出力する。
【００２９】
また、この発明では、ＩＣＥにおけるプログラムのエミュレーション中、プログラム実行部は、所定のワード命令の実行の際、所定ワード識別信号を出力する。そして、プログラム実行部から所定ワード識別信号が識別信号出力部に入力されると、識別信号出力部は入力された識別信号を出力する。
【００３０】
この発明によれば、アライメント管理用メモリから、アライメントアクセスが行われた可能性が有ることを示すデータがアライメントアクセス検出部に入力され、かつ、識別信号出力部から所定ワード識別信号がアライメントアクセス検出部に入力されたとき、アライメントアクセス検出部から、トレースメモリに、アライメントアクセスが行われたことを検出するアライメントアクセス検出信号が出力される。
【００３１】
既に説明したように、ＩＣＥによるプログラムのエミュレーション中、データメモリに対するデータの読み出し／書き込みの際には、プログラム実行部から、ワードバウンダリ回路において加工されたアドレスが出力される。この発明に係るＩＣＥでは、上述したように、アライメント管理用メモリには、プログラム実行部から、ワードバウンダリ回路で加工されたアドレスが入力される。このアドレスの入力の都度、アライメント管理用メモリは、アライメントアクセスが行われた可能性の有無を示すデータを出力する。
【００３２】
そして、アライメントアクセス検出部は、アライメント管理用メモリからアライメントアクセスが行われた可能性が有ることを示すデータが入力され、プログラム実行部において所定のワード命令が実行されたことを示す、所定ワード識別信号が、識別信号出力部から入力されることにより、アライメントアクセス検出信号を出力する。このアライメントアクセス検出信号はトレースメモリに出力され、該信号の入力に応答して、該トレースメモリに、アライメントアクセスが検知されたことが記録される。
【００３３】
よって、この発明に係るＩＣＥによれば、エミュレーションがブレークした後のデバッグ時に、トレースメモリにアライメントアクセス検出信号が入力されたか否かを調べることにより、容易にアライメントアクセスが行われたことを確認することができる。その結果、この発明のＩＣＥによれば、トレースメモリのデータを逐一確認することによって、アライメントアクセスを検知する場合よりも、飛躍的にデバッグ効率を向上させることができる。
【００４１】
【発明の実施の形態】
以下、図を参照して、この出願に係る第１及び第２発明による実施の形態について説明する。尚、以下の説明に用いる各図は、第１及び第２発明を理解出来る程度に概略的に示してあるに過ぎず、従って、第１及び第２発明が図示例のみに限定されるものでないことは理解されたい。また、説明に用いる各図において、同様な構成成分については、同一の符号を付して示し、重複する説明を省略することもある。
【００４２】
〔第１の実施の形態〕
第１発明に係る実施の形態を、第１の実施の形態として説明する。
【００４３】
（１）第１の実施の形態によるインサーキットエミュレータの構成
図１は、第１の実施の形態のアライメントアクセス検知方法に係るインサーキットエミュレータ（ＩＣＥ）１１０の構成例を示す図である。ＩＣＥ１１０は、トレースメモリ１４と、プログラムが格納されたプログラムメモリ１６と、該プログラムメモリ１６から読み出したプログラムの命令の実行を行うプログラム実行部１２とを具える。そして、これら各部は、互いにバス１２８を介して接続され、更に、このバス１２８を介してエミュレータ制御部２２に接続される。また、ＩＣＥ１１０は、バス１２８に接続されたデータメモリ１８及び入出力ポート２０を有している。
【００４４】
上述したＩＣＥ１１０は、既に説明した図９に示す従来例と同様な構成成分を有している。よって、図１中、図９に示すＩＣＥ１０と同様の構成要素について、同一の符号を付して示し、重複する説明については記載を省略する。
【００４５】
尚、図１に示すように、ＩＣＥ１１０が有する各部構成要素を接続するバス１２８は、通常、アドレスバス１２８ａ、データバス１２８ｄ、及び制御バス１２８ｃによって構成される。既に説明したように、プログラム実行部１２は、ＣＰＵ２４と、ワードバウンダリ回路２６とを具える。図１に示すように、ＣＰＵ２４には、アドレスバス１２８ａ、データバス１２８ｄ、及び制御バス１２８ｃが接続され、ＣＰＵ２４は、これらのバス１２８ａ、１２８ｄ、１２８ｃを介して、ＩＣＥ１１０の各部構成要素に接続されている。また、ＣＰＵ２４とワードバウンダリ回路２６はアドレスバス１２８ａによって接続されている。更に、ワードバウンダリ回路２６の信号の出力は、アドレスバス１２８ａを介して、プログラム実行部１２の外部へ行われる。
【００４６】
また、この実施の形態によれば、データメモリ１８は、ＩＣＥ１１０がプログラムメモリ１６のプログラムをエミュレーションする際、プログラムの各命令の実行において用いられる任意の記録媒体である。このデータメモリ１８としての記録媒体は、ＩＣＥ１１０の内部もしくは外部のいずれに設けられている構成であってもよい。そして、データメモリ１８、プログラムメモリ１６、トレースメモリ１４の各メモリを、それぞれ、別々の記憶装置として構成するか、または、ひとつの記憶装置として構成するかは、当業者が適宜決め得る任意の設計事項である。
【００４７】
ところで、この実施の形態によれば、ＩＣＥ１１０には、アライメント管理用メモリ１０２と、識別信号出力部１０４と、アライメントアクセス検出部１０６とが、予め設けられる。
【００４８】
図１に示すように、アライメント管理用メモリ１０２は、アドレスバス１２８ａ及びデータバス１２８ｄに接続される構成とするのが好ましい。
【００４９】
また、識別信号出力部１０４は、好ましくは、ＯＲゲートによって構成され、かつ、ＣＰＵ２４と接続される。ＩＣＥ１１０におけるプログラムのエミュレーション中、所定のワード命令を実行する際、ＣＰＵ２４は所定ワード識別信号を出力する。この実施の形態によれば、ＣＰＵ２４から所定ワード識別信号が入力されると、識別信号出力部１０４は該入力された識別信号を出力する。尚、この実施の形態において、ＣＰＵ２４が実行する所定のワード命令は、ワード命令、ダブルワード命令、クワッドワード命令のいずれかであるとする。そして、図１に示す構成において、ＯＲゲート１０４とＣＰＵ２４とは、ワード命令識別信号が出力される信号線、ダブルワード命令識別信号が出力される信号線及びクワッドワード命令識別信号が出力される信号線の３種の信号線で接続される。また、上述したようなＯＲゲート１０４の構成はただの一例であって、この実施の形態が、上述したような構成に限定されないことはいうまでもない。
【００５０】
アライメントアクセス検出部１０６は、ＡＮＤゲートによって構成されるのが好ましい。このＡＮＤゲート１０６には、識別信号出力部１０４の出力信号、及び、アライメント管理用メモリ１０２から出力されるデータが入力される。尚、アライメント管理用メモリ１０２に接続されたデータバス１２８ｄに、アライメントアクセス検出部１０６が接続されている。そして、アライメントアクセス検出部１０６の出力信号は、トレースメモリ１４と接続している。
【００５１】
上述したように、アライメント管理用メモリ１０２とデータメモリ１８は同一のアドレスバス１２８ａによって接続される。そして、この実施の形態によれば、アライメント管理用メモリ１０２は、データメモリ１８のアドレスと同一のアドレスによって指定される各メモリ領域より構成される。
【００５２】
尚、この実施の形態によれば、アライメントアクセス検出部１０６と、アライメント管理用メモリ１０２とを接続する信号線は、少なくとも１ビットの信号線で構成されるのが望ましい。また、アライメント管理用メモリ１０２と、データメモリ１８とは、上述したような構成を満たしていれば、同一の記憶装置として構成してもよい。
【００５３】
（２）第１の実施の形態のアライメントアクセス検知方法
次に、この実施の形態のアライメントアクセス検知方法について説明する。この実施の形態のアライメントアクセス検知方法の一例として、プログラムのエミュレーション中、既に図８を参照して説明したデータメモリ１８に対し、データの読み出し／書き込みが行われる例を説明する。即ち、以下の説明において、アドレスバス１２８ａは、Ａ０〜Ａ１９の２０ビットの信号線で構成され、及びデータバス１２８ｄは、Ｄ０〜Ｄ７の８ビットの信号線で構成される。尚、この実施の形態のアライメントアクセス検知方法が上述したようなデータメモリ１８の構成に限定されるものでないことは理解されたい。
【００５４】
ところで、この実施の形態によれば、予め、アライメント管理用メモリ１０２にアライメント管理用データがロードされる。既に、図９を参照して説明したように、プログラムメモリ１６には開発システム３０よりプログラムがロードされる。このプログラムのロード時、アライメント管理用データは、開発システム３０より管理用メモリ１０２にロードされるのが最適である。
【００５５】
尚、この実施の形態によれば、アライメント管理用データは、プログラムメモリ１６にロードされるプログラムに対応するデータであって、プログラマによって作成される。アライメント管理用データについて図２を参照して説明する。
【００５６】
図２は、この実施の形態によるアライメント管理用データの一例を示す図である。既に説明したように、アライメント管理用メモリ１０２は、データメモリ１８のアドレスと同一のアドレスによって指定されるメモリ領域より構成される。図２に示すアライメント管理用データは、アライメント管理用メモリ１０２において、図８に示すデータメモリ１８のアドレス１０００Ｈ〜１００ＦＨと同一のアドレスで指定されるメモリ領域に格納されるデータを抜粋して示した表である。この表は、上段に１０００Ｈから１００ＦＨまでのアドレスが示してあり、下段に、アライメント管理用メモリ１０２において、上段のアドレスで指定されるメモリ領域にそれぞれ格納されるデータが示してある。尚、表中、便宜上アドレスが連続していることを数字等に＊を付して示してある。
【００５７】
プログラマは、Ｃ言語等でプログラムの作成を行うが、プログラムの命令、及びポインタで指定するプログラム命令のデータアドレスから、データメモリ１８の空き領域を予測して、アライメント管理用データを作成する。アライメント管理用データの作成について、図３のタイミングチャートを参照して説明する。
【００５８】
図３は、この実施の形態のアライメントアクセス検知方法を説明するためのタイミングチャートを示す図である。図３に示すタイミングチャートにおいて、一段目には、プログラム実行部１２が有するＣＰＵ２４のクロック信号ＣＬＫを示してある。そして、このタイミングチャートは、クロック信号ＣＬＫの周期に合わせて、時刻ｔ０から時刻ｔ８までの時系列的な区間を有している。
【００５９】
図３に示すタイミングチャートの二段目以降は、時刻ｔ０から時刻ｔ８までの区間における、ＣＰＵ２４が実行するプログラムの命令、該命令のデータアドレス、該データアドレスがワードバウンダリ回路２６で加工されたアドレス、所定ワード識別信号、アライメント管理用メモリ１０２の出力データ、及び、アライメントアクセス検出部１０６の出力するアライメントアクセス検出信号が順に示されている。尚、図１に示した構成のＩＣＥ１１０では、ＣＰＵ２４のクロックのタイミングでプログラムの各命令の実行が行われる。
【００６０】
ここで、図３に示すタイミングチャートはただの一例に過ぎず、この実施の形態は、図３に示すタイミングチャートの例に何ら限定されない。
【００６１】
ところで、図３中、二段目に示されたプログラムの命令は、ｔ０〜ｔ１間のバイト命令より開始され、続いて、ｔ１〜ｔ３間のワード命令、ｔ３〜ｔ４間のバイト命令、ｔ４〜ｔ６間のワード命令・・・というように各命令が実行される。
【００６２】
プログラマは、図３中のｔ０〜ｔ１の期間に始めのバイト命令が１０００Ｈに対して成されると予め仮定して、プログラムのポインタを作成する。図２を参照すれば、このとき、バイト単位のデータが読み出し／書き込みされるため、データメモリ１８の１０００Ｈは空き領域とならないから、アライメント管理用データの１０００Ｈに対して”０”（電圧の低い状態、もしくは、電圧のない状態であるローレベルを示すデータ）のデータを作成する。
【００６３】
次に、図３を参照すれば、上述したバイト命令に続いては、ｔ１からｔ３までの期間にワード命令が実行されるはずである。この際、ワード命令の実行が開始されるデータメモリ１８の領域は、１０００Ｈに続く１００１Ｈとなると予測される。しかし、１００１Ｈは奇数アドレスであるから、ワード命令の開始アドレスに対応するポインタを、偶数アドレスである１００２Ｈにおかれるものと仮定する。よって、１００１Ｈは空き領域となるはずであるから、プログラマは、アライメント管理用データの１００１Ｈに対して”１”（電圧のある状態であるハイレベルのデータ）のデータを作成する。
【００６４】
この実施の形態によれば、以下、上述したような手順と同様の手順によって、プログラマは、図２に示すようなアライメント管理用データを作成する。即ち、この実施の形態のアライメント管理用データは、プログラムメモリ１６のプログラムをエミュレーション中、ＩＣＥ１１０において、コンパイルされる前のプログラムによって指定される動作が行われた場合の、データメモリ１８の状態を予測したデータである。そして、アライメント管理用データにおいては、所定のワード命令がＣＰＵ２４において実行されるとき、該所定のワード命令の開始アドレスとならない奇数アドレスで指定されるデータメモリ１８の領域は空き領域となることを前提とする。
【００６５】
ところで、通常、ＩＣＥ１１０において、プログラムメモリ１６のプログラムのエミュレーションが開始されると、データメモリ１８に対するデータの読み出し／書き込みが行われる際、プログラム命令に基づく制御信号が制御バス１２８ｃへ、及び、ワードバウンダリ回路２６において加工済みのプログラム命令のデータアドレスがアドレスバス１２８ａへ、それぞれ、プログラム実行部１２から出力される。そして、制御バス１２８ｃからプログラム命令に基づく制御信号が、及びアドレスバス１２８ａからワードバウンダリ回路２６において加工済みのプログラム命令のデータアドレスが、データメモリ１８に入力されると、入力されたアドレスに対応するデータメモリ１８の領域に対し、データバス１２８ｄからデータが読み出し／書き込みされる。
【００６６】
また、トレースメモリ１４には、アドレスバス１２８ａに出力されたワードバウンダリ回路２６で加工済みのプログラム命令のデータアドレスが入力されて、格納される。このとき、トレースメモリ１４には、ＣＰＵ２４から出力されるプログラム命令のデータアドレス及びプログラム命令の命令アドレスも、アドレスバス１２８ａから入力されて、格納される。尚、プログラム命令の命令アドレスは、一般によく知られているように、プログラムメモリ１６に格納されたプログラムの各命令を読み出す際に、ＣＰＵ２４によって用いられるアドレスである。すなわち、命令アドレスによって指定されるプログラムメモリ１６の領域に、プログラムの命令は格納される。そして、ＣＰＵ２４はプログラムの各命令の命令アドレスを用いることにより、プログラムメモリ１６の各領域に格納されたプログラムの各命令を読み出し、読み出した命令の実行を行う。
【００６７】
この実施の形態によれば、ＩＣＥ１１０でプログラムのエミュレーションが開始されると、プログラム実行部１２から、ワードバウンダリ回路２６によって加工されたアドレスが、アドレスバス１２８ａを介してアライメント管理用メモリ１０２に入力される。そして、アライメント管理用メモリ１０２は、アライメント管理用データのうち、プログラム実行部１２から入力されたアドレスに対応するデータを出力する。
【００６８】
ここで、アライメント管理用メモリ１０２、及びデータメモリ１８には、同じアドレスが、同一のタイミングで入力される。そして、アライメント管理用メモリ１０２は、入力されたアドレスに対応するデータを出力する。上述したように、アライメント管理用データは、データメモリ１８の状態を予測したデータである。よって、エミュレーション時に、コンパイル前のプログラムに記載された動作がＩＣＥ１１０において行われていれば、データメモリ１８の状態は、アライメント管理用データが示す状態と同じになるはずである。この場合、アライメント管理用メモリ１０２の出力は、エミュレーション中、常に、”０”となる。
【００６９】
一方、エミュレーション中にアライメントアクセスが行われた場合、データメモリ１８の状態は、アライメント管理用データが示す状態と異なる状態となる。この場合、アライメント管理用データにおいて空き領域として予測されたアドレスに対応するデータメモリ１８の領域に対し、データが読み出し／書き込みされる。その結果、アライメント管理用メモリ１０２の出力は”１”となる。即ち、アライメント管理用データにおける複数のデータは、アライメントアクセスの可能性の有無を示すデータであるといえる。そして、アライメント管理用データの有する複数のデータのうち、“１”は、アライメントアクセスが行われた可能性が有ることを示すデータであり、“０”は、アライメントアクセスは行われなかった可能性を示すデータである。
【００７０】
この実施の形態について、具体的に、図３を参照して説明する。既に説明したように、プログラム実行部１２ではＣＰＵ２４がクロックのタイミングで、第２段目に示すプログラムの命令を実行する。この際、ＣＰＵ２４は、各命令のデータアドレスを、プログラム実行部１２内部のアドレスバス１２８ａを介して、ワードバウンダリ回路２６に出力する。図３のタイミングチャートより明らかなように、ＣＰＵ２４は、ｔ０〜ｔ１の期間に始めのバイト命令を実行する際、該命令のデータアドレス１０００Ｈをワードバウンダリ回路２６に出力する。そして、ワードバウンダリ回路２６からは加工済みのアドレス１０００Ｈが、アドレスバス１２８ａに出力される。このワードバウンダリ回路２６から出力されたアドレスは、データメモリ１８及びアライメント管理用メモリ１０２に、入力される。アライメント管理用メモリ１０２は、入力されたアドレス１０００Ｈに対応するデータを出力する。この場合、図２に示すデータの構成例によれば、アライメント管理用メモリ１０２からは、”０”が出力されるため、図３に示すアライメント管理用メモリの出力データは、ローレベルとなる。
【００７１】
尚、この実施の形態によれば、アライメントアクセス検出部１０６は、アライメント管理用メモリから、アライメントアクセスが行われた可能性が有ることを示すデータ“１”が入力され、かつ、識別信号出力部１０４から所定ワード識別信号が入力されたとき、トレースメモリに、アライメントアクセス検出信号を出力する。上述したように、このとき、ＣＰＵ２４が実行する命令はバイト命令であるから、識別信号出力部１０４の出力はローレベルのままである。よって、アライメントアクセス検出部１０６の出力もローレベルである。
【００７２】
続いて、ｔ１〜ｔ３の期間にＣＰＵ２４によって実行される命令は、ワード命令である。ここで、ワード命令の開始アドレスは、既に説明したように１００２Ｈとなるはずである。しかし、図３に示すワード命令の開始アドレスは１００１Ｈとなっているから、ここで、アライメントアクセスが行われてしまう。この場合、図３の第３段目に示すように、ＣＰＵ２４からワードバウンダリ回路２６には、ｔ１〜ｔ３の期間にワード命令のデータアドレスである１００１Ｈと１００２Ｈが出力される。
【００７３】
その後、ワードバウンダリ回路２６から加工済みのアドレス１０００Ｈと１００１Ｈが、アドレスバス１２８ａを介して、データメモリ１８及びアライメント管理用メモリ１０２に入力される。その結果、データメモリ１８において本来空き領域であるはずの１００１Ｈに対し、ワード型のデータのはじめの１バイトが読み出し／書き込みされる。このとき、図２を参照すれば、アライメント管理用メモリ１０２からは、アライメントアクセスが行われた可能性が有ることを示すデータ”１”が出力されるため、図３に示すアライメント管理用メモリの出力データは、ハイレベルとなる。
【００７４】
また、このとき識別信号出力部１０４の出力は、図３に示すようにハイレベルとなる。よって、アライメントアクセス検出部１０６の出力もハイレベルとなり、アライメントアクセス検出信号が、トレースメモリ１４に出力される。この実施の形態によれば、アライメントアクセス検出信号は、アライメントアクセスが行われたことを検出する信号であり、アライメントアクセス検出信号が入力されると、トレースメモリ１４にアライメントアクセスが検出されたことが記録される。
【００７５】
図３に示すタイミングチャートにおいて、ＩＣＥ１１０の各部構成要素で上述した動作と同様の動作が、以降行われる。従って、この実施の形態のアライメントアクセス検知方法によれば、ＩＣＥ１１０におけるエミュレーションがブレークした後のデバッグ時に、トレースメモリ１４にアライメントアクセス検出信号が入力されたか否かを調べることにより、容易にアライメントアクセスが行われたことを確認することができる。その結果、トレースメモリ１４のデータを逐一確認することにより、アライメントアクセスを検知するよりも、飛躍的にデバッグ効率を向上させることができる。
【００７６】
〔第２の実施の形態〕
次に、第２の実施の形態について、図６を参照して説明する。図６は、第２の実施の形態に係るＩＣＥ１１２の構成例を示す図である。ＩＣＥ１１２の構成は、図１を参照して説明した、第１の実施の形態におけるＩＣＥ１１０と、ほぼ同様の構成を有する。よって、図６において、ＩＣＥ１１０と同様の構成要素については、同一の符号を付して示し、重複する説明は記載を省略する。
【００７７】
ＩＣＥ１１２において、エミュレータ制御部２２はブレーク回路１１４を有している。そして、アライメントアクセス検出部１０６の出力は、トレースメモリ１４のほか、ブレーク回路１１４に接続される。
【００７８】
この実施の形態によれば、アライメントアクセス検出部１０６からアライメントアクセス検出信号が入力されると、ブレーク回路１１４はブレーク信号を出力する。このブレーク信号はエミュレータ制御部２２内部において受信され、その後、エミュレータ制御部２２は、プログラムの実行をブレークし、エミュレーションを終了する。尚、図６では、エミュレータ制御部２２におけるブレーク信号受信に関する構成は、図示を省略する。
【００７９】
この実施の形態において、ＩＣＥ１１２は、第１の実施の形態のＩＣＥ１１０と同様に動作する。よって、この実施の形態によれば、第１の実施の形態と同様の効果が得られる。尚、第１の実施の形態では、ＩＣＥ１１０におけるエミュレーションがブレークした後のデバッグ時に、トレースメモリ１４にアライメントアクセス検出信号が入力されたか否かを調べることにより、アライメントアクセスが行われたことを確認する必要があった。一方、この実施の形態によれば、アライメントアクセス検出信号がブレーク回路１１４において受信された後、ＩＣＥ１１２のエミュレーションがブレークするため、自動的にアライメントアクセスが行われたことを検知することができる。
【００８０】
〔第３の実施の形態〕
第２発明に係る実施の形態を、第３の実施の形態として説明する。
【００８１】
（３）第３の実施の形態によるインサーキットエミュレータの構成
図４は、第３の実施の形態のアライメントアクセス検知方法に係るＩＣＥ２１０の構成例を示す図である。ＩＣＥ２１０は、図１を参照して説明した、第１の実施の形態のＩＣＥ１１０と同様の構成を有する。よって、図４においては、ＩＣＥ１１０と同様の構成について、同一の符号を付して示し、重複する説明は記載を省略する。
【００８２】
この実施の形態によれば、プログラム実行部１２の内部において、ワードバウンダリ回路２６とＣＰＵ２４を接続するアドレスバス１２８ａに、開始アドレス信号出力部２０２が設けられる。開始アドレス信号出力部２０２は、少なくとも、ＣＰＵ２４がプログラム命令を実行する際、該ＣＰＵ２４からプログラム命令のデータアドレスの０ビット目が出力される信号線Ａ０に接続されるのが望ましい。好ましくは、開始アドレス信号出力部２０２としてフリップフロップ回路を用い、このフリップフロップ回路には、プログラム命令のデータアドレスの０ビット目信号及びプログラム命令の先頭信号を、ＣＰＵ２４のクロックのタイミングで入力するように構成するのが最適である。尚、プログラム命令の先頭信号は、通常、ＩＣＥ２１０におけるエミュレーション中、プログラム実行部１２においてＣＰＵ２４がプログラムの命令を実行する際に出力される。
【００８３】
上述したような構成の開始アドレス信号出力部２０２は、プログラムの命令の実行を開始するにあたり、プログラム実行部１２においてＣＰＵ２４が用いたプログラム命令のデータアドレスの０ビット目を示す、開始アドレス０ビット目信号を出力する。
【００８４】
また、この実施の形態によれば、アライメントアクセス検出部１０６には、識別信号出力部１０４の出力と、開始アドレス信号出力部２０２の出力が接続される。
【００８５】
（４）第３の実施の形態のアライメントアクセス検知方法
次に、この実施の形態のアライメントアクセス検知方法について説明する。この実施の形態のアライメントアクセス検知方法についても、一例として、第１の実施の形態と同様、既に図８を参照して説明したデータメモリ１８に対し、データの読み出し／書き込みが行われる例を説明する。尚、この実施の形態のアライメントアクセス検知方法が、上述したようなデータメモリ１８の構成に限定されないことはいうまでもない。また、この実施の形態のＩＣＥ２１０において、ＩＣＥ１１０と同様の構成要素によって行われる同様の動作については、以下、説明を省略する。
【００８６】
図４に示すＩＣＥ２１０では、ＣＰＵ２４のクロックのタイミングでプログラムの各命令の実行が行われる。図５は、この実施の形態のアライメントアクセス検知方法を説明するためのタイミングチャートを示す図である。図５においては、ＣＰＵ２４のクロック信号ＣＬＫ、プログラムの命令、該命令のデータアドレス、ワードバウンダリ回路２６で加工後のアドレス、所定ワード識別信号、及び、アライメントアクセス検出信号を、図３に示すタイミングチャートと同様に示してある。また、同図において、開始アドレス０ビット目信号を、１段目に示されたクロック信号のタイミングで６段目に示す。尚、図５に示すタイミングチャートは単なる一例に過ぎず、この実施の形態は、図５に示すタイミングチャートの例に何ら限定されない。
【００８７】
図５に示すタイミングチャートによれば、ＩＣＥ２１０におけるプログラムのエミュレーション中、ＣＰＵ２４は始めのバイト命令をｔ０からｔ１までの期間に実行する際、該命令のデータアドレスである１０００Ｈをワードバウンダリ回路２６に出力する。このとき、プログラム実行部１２の内部アドレスバス１２８ａの０ビット目信号は“０”であり、よって、開始アドレス信号出力部２０２から出力される開始アドレス０ビット目信号も“０”、即ち、ローレベルである。また、このとき、ＣＰＵ２４が実行する命令はバイト命令であるから、識別信号出力部１０４の出力はローレベルであり、また、アライメントアクセス検出部１０６の出力もローレベルである。
【００８８】
続いて、ＣＰＵ２４によってｔ１からｔ２までの期間に実行されるプログラム命令は、バイト命令であり、この際、該命令のデータアドレスである２００１Ｈが、ワードバウンダリ回路２６に出力される。よって、プログラム実行部１２の内部アドレスバス１２８ａの０ビット目信号は“１”であり、開始アドレス０ビット目信号は“１”、即ち、ハイレベルとなる。一方、このとき、識別信号出力部１０４の出力はローレベルであり、その結果、アライメントアクセス検出部１０６の出力もローレベルである。
【００８９】
次に、図５に示すように、ＣＰＵ２４によってｔ２からｔ４までの期間に実行されるプログラム命令は、ワード命令である。よって、このワード命令の開始アドレス（ｔ２からｔ３までの期間）は、偶数アドレスとなるはずである。しかし、図５を参照すると、開始アドレスは１００１Ｈとなっており、ここで、アライメントアクセスが行われてしまう。このとき、図５の第３段目に示すように、ＣＰＵ２４からワードバウンダリ回路２６には、ワード命令のデータアドレスとして、１００１Ｈ（ｔ２からｔ３までの期間）と１００２Ｈ（ｔ３からｔ４までの期間）が出力される。この場合、ワード命令の開始アドレスは１００１Ｈであるから、開始アドレス信号出力部２０２からは、プログラム実行部１２の内部アドレスバス１２８ａにおける、１００１Ｈの０ビット目信号の“１”が出力される。即ち、図５の６段目に示すように、開始アドレス０ビット目信号はハイレベルとなる。
【００９０】
また、このとき、ＣＰＵ２４が実行する命令はワード命令であるから、識別信号出力部１０４の出力はハイレベルとなり、アライメントアクセス検出部１０６の出力もハイレベルとなり、アライメントアクセス検出信号がトレースメモリ１４に出力される。アライメントアクセス検出信号が入力されると、トレースメモリ１４には、アライメントアクセスが検出されたことが記録される。
【００９１】
図５に示すタイミングチャートにおいて、ＩＣＥ２１０の各部構成要素で上述した動作と同様の動作が、以降行われる。この実施の形態によれば、プログラム実行部１２に開始アドレス信号出力部２０２を設け、該出力部２０２より開始アドレス０ビット目信号を出力させる。そして、アライメントアクセス検出部１０６において、入力された開始アドレス０ビット目信号が奇数アドレスの０ビット目を示す信号“１”（即ち、ハイレベルの信号）であって、プログラム実行部１２において所定のワード命令が実行されたことを示す、所定ワード識別信号が入力されると、トレースメモリ１４にアライメントアクセス検出信号を出力する。よって、この実施の形態において、第１の実施の形態と同様の効果を得ることができる。
【００９２】
更に、この実施の形態によれば、アライメント管理用メモリ１０２は設けられておらず、よって、アライメント管理用データも不要である。このため、この実施の形態では、アライメント管理用データの作成、アライメント管理用メモリ１０２へのアライメント管理用データのロードなどの手間を省き、ソフトウェアに負担をかけずに済む、という新たな効果を有するアライメントアクセス検知方法を提供することができる。
【００９３】
〔第４の実施の形態〕
次に、第４の実施の形態について、図７を参照して説明する。図７は、第４の実施の形態に係るＩＣＥ２１２の構成例を示す図である。ＩＣＥ２１２の構成は、図４を参照して説明した、第３の実施の形態におけるＩＣＥ２１０と、ほぼ同様の構成を有する。よって、図７において、ＩＣＥ２１０と同様の構成要素については、同一の符号を付して示し、重複する説明は記載を省略する。
【００９４】
ＩＣＥ２１２において、エミュレータ制御部２２はブレーク回路２１４を有している。そして、アライメントアクセス検出部１０６の出力は、トレースメモリ１４のほか、ブレーク回路２１４に接続される。
【００９５】
この実施の形態において、アライメントアクセス検出部１０６からアライメントアクセス検出信号が入力された場合、ブレーク回路２１４及びエミュレータ制御部２２は、図６を参照して説明した第２の実施の形態と同様に動作する。そして、その結果、エミュレータ制御部２２によって、エミュレーションが終了される。尚、図７では、エミュレータ制御部２２におけるブレーク信号受信に関する構成は、図示を省略する。
【００９６】
また、この実施の形態のＩＣＥ２１２は、第３の実施の形態のＩＣＥ２１０と同様に動作する。よって、この実施の形態によれば、第３の実施の形態と同様の効果が得られる。更に、この実施の形態では、アライメントアクセスが行われたことを自動的に検知することができるという第２の実施の形態と同様の効果も得ることができる。
【００９７】
【発明の効果】
以上説明したように、この発明のＩＣＥによれば、アライメントアクセス検出部は、アライメント管理用メモリからアライメントアクセスが行われた可能性が有ることを示すデータが入力され、プログラム実行部において所定のワード命令が実行されたことを示す、所定ワード識別信号が、識別信号出力部から入力されることにより、アライメントアクセス検出信号を出力する。このアライメントアクセス検出信号はトレースメモリに出力され、該信号が入力されたとき、該トレースメモリに、アライメントアクセスが検知されたことが記録される。よって、ＩＣＥにおけるエミュレーションがブレークした後のデバッグ時に、トレースメモリにアライメントアクセス検出信号が入力されたか否かを調べることにより、容易にアライメントアクセスが行われたことを確認することができる。その結果、この発明によれば、トレースメモリのデータを逐一確認することにより、アライメントアクセスを検知するよりも、飛躍的にデバッグ効率を向上させることができる。
【００９９】
更に、この発明について、エミュレータ制御部が有するブレーク回路に、アライメントアクセス検出信号を入力させ、その後、ブレーク回路から出力されるブレーク信号を受信したエミュレータ制御部によってエミュレーションをブレークさせるように、インサーキットエミュレータを構成すれば、自動的にアライメントアクセスが行われたことを検知することができる。
【図面の簡単な説明】
【図１】第１の実施の形態のインサーキットエミュレータの構成例を説明するための図である。
【図２】第１の実施の形態におけるアライメント管理用データの構成例を説明するための図である。
【図３】第１の実施の形態を説明するためのタイミングチャートを示す図である。
【図４】第３の実施の形態のインサーキットエミュレータの構成例を説明するための図である。
【図５】第３の実施の形態を説明するためのタイミングチャートを示す図である。
【図６】第２の実施の形態のインサーキットエミュレータの構成例を説明するための図である。
【図７】第４の実施の形態のインサーキットエミュレータの構成例を説明するための図である。
【図８】従来のデータメモリの構成例を説明するための図である。
【図９】従来のインサーキットエミュレータの構成例を説明するための図である。
【符号の説明】
１０、１１０、１１２、２１０、２１２：インサーキットエミュレータ
１２：プログラム実行部
１４：トレースメモリ
１６：プログラムメモリ
１８：データメモリ
２０：入出力ポート
２２：エミュレータ制御部
２４：ＣＰＵ
２６：ワードバウンダリ回路
２８、１２８：バス
３０：開発システム
３２：目標システム
１０２：アライメント管理用メモリ
１０４：識別信号出力部
１０６：アライメントアクセス検出部
１１４、２１４：ブレーク回路
１２８ａ：アドレスバス
１２８ｃ：制御バス
１２８ｄ：データバス
２０２：開始アドレス信号出力部
【図１】
0004118088.tif 000002
【図２】
0004118088.tif 000003
【図３】
0004118088.tif 000004
【図４】
0004118088.tif 000005
【図５】
0004118088.tif 000006
【図６】
0004118088.tif 000007
【図７】
0004118088.tif 000008
【図８】
0004118088.tif 000009
【図９】
0004118088.tif 000010