(57)【要約】【課題】デバッグ機能を向上させることができる半導体装置を提供することができる。【解決手段】一実施の形態によれば、半導体装置１０ａは、デバッグ対象のプログラムを実行するＣＰＵコア４０と、プログラムがアクセスする所定のデータ値において、前回のアクセス時の所定のデータ値と、今回のアクセス時の所定のデータ値との差分を、所定のデータ値の変化量における閾値と比較するデータ変化量比較機構６０と、を備える。また、データ変化量比較機構６０は、閾値を保持する閾値データ保持機構６２と、前回のアクセス時の所定のデータ値を保持するデータＮ保持機構６１と、を有し、今回のアクセス時の所定のデータ値と、データＮ保持機構６１に保持された所定のデータ値との差分を、閾値データ保持機構６２に保持された閾値と比較する。【選択図】図４
2019200455.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ対象のプログラムを実行するＣＰＵコアと、
前記プログラムがアクセスする所定のデータ値において、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較するデータ変化量比較機構と、
を備えた半導体装置。
【請求項２】
前記データ変化量比較機構は、
前記閾値を保持する閾値データ保持機構と、
前記前回のアクセス時の前記所定のデータ値を保持するデータＮ保持機構と、
を有し、
前記データ変化量比較機構は、前記今回のアクセス時の前記所定のデータ値と、前記データＮ保持機構に保持された前記所定のデータ値との差分を、前記閾値データ保持機構に保持された前記閾値と比較する、
請求項１に記載の半導体装置。
【請求項３】
前記データ変化量比較機構は、前記差分が前記閾値の範囲内の場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換える、
請求項２に記載の半導体装置。
【請求項４】
前記データ変化量比較機構は、
前記所定のデータ値の初期値を保持するデータ初期値保持機構と、
をさらに有し、
前記データ変化量比較機構は、前記今回のアクセス時の前記所定のデータ値を、前記データ初期値保持機構に保持された前記初期値と比較する、
請求項２に記載の半導体装置。
【請求項５】
前記データ変化量比較機構は、前記今回のアクセス時の前記所定のデータ値が、前記データ初期値保持機構に保持された前記初期値である場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換える、
請求項４に記載の半導体装置。
【請求項６】
前記データ変化量比較機構は、前記差分が前記閾値を超える場合で、かつ、前記今回のアクセス時の前記所定のデータ値が前記データ初期値保持機構に保持された前記初期値と異なる場合に、イベントを発生させる、
請求項４に記載の半導体装置。
【請求項７】
各アクセス時においての前記所定のデータ値の履歴を保持するトレース機構をさらに備え、
前記トレース機構は、前記イベントが発生した場合に、前記履歴を出力する、
請求項６に記載の半導体装置。
【請求項８】
前記所定のデータ値は、第１種のデータ値及び第２種のデータ値を含み、
前記第１種のデータ値に対して、前記閾値が設定され、前記第２種のデータ値に対して、前記閾値が設定されている、
請求項１に記載の半導体装置。
【請求項９】
前記所定のデータ値があらかじめ設定された設定値と合致するか検出する条件比較機構をさらに備え、
前記所定のデータ値が前記設定値と合致した場合には、前記条件比較機構は、イベントを発生させる、
請求項１に記載の半導体装置。
【請求項１０】
デバッグ対象のプログラムを実行するＣＰＵコアを含む半導体装置と、
前記半導体装置に接続されたエミュレータと、
前記エミュレータを介して前記半導体装置に接続され、前記プログラムのデバッグ制御を行なうホストＰＣと、
を備え、
前記半導体装置、前記エミュレータ及び前記ホストＰＣのいずれかは、
前記プログラムがアクセスする所定のデータ値において、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較するデータ変化量比較機構を有する、
デバッグシステム。
【請求項１１】
前記データ変化量比較機構は、
前記閾値を保持する閾値データ保持機構と、
前記前回のアクセス時の前記所定のデータ値を保持するデータＮ保持機構と、
を有し、
前記データ変化量比較機構は、前記今回のアクセス時の前記所定のデータ値と、前記データＮ保持機構に保持された前記所定のデータ値との差分を、前記閾値データ保持機構に保持された前記閾値と比較する、
請求項１０に記載のデバッグシステム。
【請求項１２】
前記データ変化量比較機構は、前記差分が前記閾値の範囲内の場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換える、
請求項１１に記載のデバッグシステム。
【請求項１３】
前記データ変化量比較機構は、
前記所定のデータ値の初期値を保持するデータ初期値保持機構と、
をさらに有し、
前記データ変化量比較機構は、前記今回のアクセス時の前記所定のデータ値を、前記データ初期値保持機構に保持された前記初期値と比較する、
請求項１１に記載のデバッグシステム。
【請求項１４】
前記データ変化量比較機構は、前記今回のアクセス時の前記所定のデータ値が、前記データ初期値保持機構に保持された前記初期値である場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換える、
請求項１３に記載のデバッグシステム。
【請求項１５】
前記データ変化量比較機構は、前記差分が前記閾値を超える場合で、かつ、前記今回のアクセス時の前記所定のデータ値が前記データ初期値保持機構に保持された前記初期値と異なる場合に、イベントを発生させる、
請求項１３に記載のデバッグシステム。
【請求項１６】
前記半導体装置は、各アクセス時においての前記所定のデータ値の履歴を保持するトレース機構を含み、
前記トレース機構は、前記イベントが発生した場合に、前記履歴を出力する、
請求項１５に記載のデバッグシステム。
【請求項１７】
前記所定のデータ値は、第１種のデータ値及び第２種のデータ値を含み、
前記第１種のデータ値に対して、前記閾値が設定され、前記第２種のデータ値に対して、前記閾値が設定されている、
請求項１０に記載のデバッグシステム。
【請求項１８】
前記ホストＰＣは、前記プログラムのソースコードをコンパイルするコンパイラを有しており、
前記コンパイラは、前記ソースコードに基づいて前記閾値を生成する、
請求項１０に記載のデバッグシステム。
【請求項１９】
前記ホストＰＣは、前記プログラムのソースコードをコンパイルするコンパイラを有しており、
前記コンパイラは、前記ソースコードに基づいて前記初期値を生成する、
請求項１３に記載のデバッグシステム。
【請求項２０】
デバッグ対象のプログラムがアクセスする所定のデータにおいて、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較させる、
ことをコンピュータに実行させるデバッグプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置、デバッグシステム及びデバッグプログラムに関し、例えば、データの不正値への書き換えを検出する半導体装置、デバッグシステム及びデバッグプログラムに関する。
【背景技術】
【０００２】
特許文献１〜３には、トレース機構及びイベント発生機構を有するエミュレータが開示されている。トレース機構は、プログラムの実行及び分岐のトレース、または、データに着目したデータアクセストレースを取得する。このように、トレース機構は、プログラムの実行履歴やデータ変化の履歴を保持するので、デバッグ対象プログラムに暴走が発生した場合に、暴走時点でプログラムを停止させれば、トレースの内容から暴走直前の状態を知ることができる。イベント発生機構は、着目したデータ値があらかじめ設定した設定値と合致した場合には、プログラムの実行を停止させるブレークを行う。また、イベント発生機構は、トレースの取得を開始または終了することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０６−３２４９１４号公報
【特許文献２】特開平０９−３１９６１６号公報
【特許文献３】特開２０００−３０５８０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
エミュレータにおいて、トレース機構がトレースを蓄えるメモリは有限である。したがって、プログラムの実行から数秒程度しかトレースを蓄えることができない。よって、プログラムの暴走発生時点から真の原因である「暴走に至らない何等かのデータ破壊」箇所まで遡って解析することは困難である。仮に、膨大なトレースを取得できるシステムを用いたとしても、その場合には、トレースの解析に多大な時間を要する。また、イベント発生機構は、イベント発生条件として、データ値を設定する必要がある。このため、データ値の状態をあらかじめ知ることができない「暴走に至らない何等かのデータ破壊」箇所の解析を、イベント発生機構を用いて検出することは困難である。
【０００５】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００６】
一実施の形態によれば、半導体装置は、デバッグ対象のプログラムを実行するＣＰＵコアと、前記プログラムがアクセスする所定のデータ値において、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較するデータ変化量比較機構と、を備える。
【０００７】
一実施の形態によれば、デバッグシステムは、デバッグ対象のプログラムを実行するＣＰＵコアを含む半導体装置と、前記半導体装置に接続されたエミュレータと、前記エミュレータを介して前記半導体装置に接続され、前記プログラムのデバッグ制御を行なうホストＰＣと、を備え、前記半導体装置、前記エミュレータ及び前記ホストＰＣのいずれかは、前記プログラムがアクセスする所定のデータ値において、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較するデータ変化量比較機構を有する。
【０００８】
一実施の形態によれば、デバッグプログラムは、デバッグ対象のプログラムがアクセスする所定のデータにおいて、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較させる、ことをコンピュータに実行させる。
【発明の効果】
【０００９】
前記一実施の形態によれば、デバッグ機能を向上させることができる半導体装置、デバッグシステム及びデバッグプログラムを提供することができる。
【図面の簡単な説明】
【００１０】
【図１】比較例に係るデバッグシステムを例示した構成図である。
【図２】比較例に係るデバッグシステムにおいて、半導体装置のデバッグ機構の動作を例示したフローチャート図である。
【図３】比較例に係るデバッグシステムにおいて、デバッグ機構のデータ値の変化を例示したグラフであり、横軸は、時間を示し、縦軸は、データ値を示す。
【図４】実施形態１に係るデバッグシステムを例示した構成図である。
【図５】実施形態１に係るデバッグシステムにおいて、データ変化量比較機構の動作を例示したフローチャート図である。
【図６】実施形態１に係るデバッグシステムにおいて、データ変化量比較機構の動作を示すプログラムを例示した図である。
【図７】実施形態２に係るデバッグシステムを例示した構成図である。
【図８】実施形態３に係るデバッグシステムを例示した構成図である。
【図９】実施形態４に係るデバッグシステムを例示した構成図である。
【発明を実施するための形態】
【００１１】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１２】
まず、デバッグシステムにおける課題を、比較例を用いて説明する。その後、比較例と対比させて、実施形態に係るデバッグシステムを説明する。これにより、実施形態に係るデバッグシステムをより明確にする。
【００１３】
（比較例）
まず、比較例に係るデバッグシステムの構成を説明する。図１は、比較例に係るデバッグシステムを例示した構成図である。
【００１４】
図１に示すように、デバッグシステム１０１は、半導体装置１０、ホストＰＣ２０及びエミュレータ３０を備えている。半導体装置１０は、例えば、デバッグの対象となる所定のプログラムが実行されるマイクロコンピュータである。
【００１５】
半導体装置１０は、ＣＰＵコア４０及びデバッグ機構５０を備えている。ＣＰＵコア４０は、デバッグの対象となるプログラムを実行する。デバッグ機構５０は、デバッグの対象となるプログラムのデバッグを行う。デバッグ機構５０は、トレース機構５１及びイベント発生機構５２を有している。
【００１６】
トレース機構５１は、デバッグ対象のプログラムを実行するＣＰＵコア４０の命令の実行を順番にたどる。そして、トレース機構５１は、各段階の状態・状況を示すトレース情報を取得する。そして、トレース機構５１は、各アクセス時においての所定のデータ値の履歴を保持する。例えば、トレース機構５１は、ＣＰＵコア４０におけるプログラムの実行や分岐に注目してトレースしてもよいし、データアクセストレースと呼ばれるデータに着目してトレースしてもよい。データアクセストレースの場合には、着目するデータは、１種類のデータでもよいし、複数の種類のデータでもよい。
【００１７】
このように、トレース機構５１は、プログラムの実行履歴やデータ変化の履歴を含むトレース情報を保持する。したがって、デバッグ対象プログラムに暴走が発生した場合に、暴走時点でプログラムを停止することができれば、トレース情報の内容から、暴走直前の状態を把握することができる。トレース機構５１は、トレース情報を保持するメモリを含んだ回路として構成されてもよいし、上述のような機能を有するソフトウェアを含んでもよい。
【００１８】
イベント発生機構５２は、デバッグ対象のプログラムを実行するＣＰＵコア４０に対して、実行の制御及びトレース出力制御を行う。イベント発生機構５２は、条件比較機構５３を有している。
【００１９】
条件比較機構５３は、トレース機構５１からトレース情報を取得する。条件比較機構５３は、着目した所定のデータの値があらかじめ設定した設定値と合致するかどうかを検出する。条件比較機構５３は、着目した所定のデータの値があらかじめ設定した設定値と合致した場合には、イベントを発生させる。イベントは、着目した所定のデータの値があらかじめ設定した設定値と合致したことを示す信号をいう。イベント発生機構５２は、条件比較機構５３によるイベント発生を受けて、ＣＰＵコア４０におけるプログラムのブレーク、または、ＣＰＵコア４０に対するトレースの出力制御を行う。イベント発生機構５２は、条件比較機構５３を含んだ回路として構成されてもよいし、上述のような機能を有するソフトウェアを含んでもよい。
【００２０】
ホストＰＣ２０は、エミュレータ３０を介して半導体装置１０のデバッグ機構５０に接続されている。ホストＰＣ２０は、デバッガ２１を有している。デバッガ２１は、デバッグ機構５０をユーザに見える形式で示すソフトウェアである。ホストＰＣ２０は、エミュレータ３０を介して、半導体装置１０において実行されるプログラムのトレース情報を取得する。また、ホストＰＣ２０は、エミュレータ３０が取得したトレース情報に基づいて、エミュレータ３０を介して、プログラムのデバッグ制御を行なう。例えば、ホストＰＣ２０は、エミュレータ３０を介して、条件比較機構５３における設定値をあらかじめ設定する。
【００２１】
エミュレータ３０は、半導体装置１０のデバッグ機構５０に接続されている。エミュレータ３０は、ＣＰＵコア４０において実行されるプログラムがアクセスする所定のデータ値の履歴を含むトレース情報を取得する。エミュレータ３０は、デバッグ機構５０から取得したトレース情報をホストＰＣ２０に出力する。また、エミュレータ３０は、ホストＰＣからのデバッグ制御に基づいて、半導体装置１０のデバッグ制御を行う。
【００２２】
次に、比較例に係るデバッグシステム１０１において、半導体装置１０のデバッグ機構５０の動作を説明する。図２は、比較例に係るデバッグシステム１０１において、半導体装置１０のデバッグ機構５０の動作を例示したフローチャート図である。
【００２３】
図２のステップＳ１１に示すように、まず、データアクセスを行う。具体的には、トレース機構５１は、トレースしたデータ値をイベント発生機構５２の条件比較機構５３に入力する。
【００２４】
次に、ステップＳ１２に示すように、データ値が設定値に一致するか判断する。具体的には、条件比較機構５３は、トレース機構５１から入力されたデータ値があらかじめ設定した設定値と合致するかどうか判断する。データ値が設定値に一致しないＮｏの場合には、ステップＳ１３に示すように、条件比較機構５３は、データ値を出力する。そして、トレース機構５１は、入力すべきデータ値がなくなるまで、ステップＳ１１〜Ｓ１３を繰り返す。
【００２５】
一方、ステップＳ１２において、データ値が設定値に一致したＹｅｓの場合には、ステップＳ１４に示すように、条件比較機構５３は、イベントを発生させる。よって、イベント発生機構５２は、条件比較機構５３におけるイベントの発生を受けて、デバッグ対象のプログラムをブレークし、トレース情報の取得を開始する。
【００２６】
比較例に係るデバッグシステム１０１においては、イベント発生機構５２は、デバッグ対象のプログラムに暴走が発生した場合に、暴走時点でプログラムを停止することができる。そして、トレース機構５１は、プログラムの実行履歴やデータ変化の履歴を保持するので、デバッグ対象のプログラムが暴走した場合に、トレースの内容から暴走直前の状態を取得することはできる。
【００２７】
しかしながら、プログラムの暴走発生時点から真の原因である「暴走に至らない何等かのデータ破壊」箇所まで遡って解析することは困難である。このことを、以下の課題例を用いて説明する。
【００２８】
例えば、第１の課題例として、割り込みのマスク抜けによって意図しない割り込みが発生し、その割り込みを起点にした計算の不正が累積した結果、イベントが発生した場合を説明する。
【００２９】
図３は、比較例に係るデバッグシステム１０１において、デバッグ機構５０のデータ値の変化を例示したグラフであり、横軸は、時間を示し、縦軸は、データ値を示す。図３に示すように、時間とともに変化するデータ値として、グローバル変数Ａが挙げられる。グローバル変数Ａは、通常処理と割り込み処理の双方で値が更新される変数である（１−１）。グローバル変数Ａは、通常処理では、線形に変化する。これに対して、割り込み処理では、グローバル変数Ａは、離散的な変化をする（１−２）。
【００３０】
割り込み処理は、意図したタイミングでのみ発生するよう、通常は、ＤＩ（Ｄｉｓａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ（割り込み禁止設定））でマスクしている（１−３）。プログラムのバグにより、ＤＩにおけるマスク抜けがあると、意図外のタイミングで、グローバル変数Ａが離散的な変化をする。これにより、グローバル変数Ａの値を起点とする計算結果は、プログラムの意図外の値となる。しかし、この時点では、条件比較機構５３におけるデータ値の条件は一致しないので、イベントの発生とはならない（１−４）。
【００３１】
そして、マスク抜けの結果を起点にした計算の不正が累積した場合に、条件比較機構５３におけるデータ値の条件が一致し、イベントが発生する（１−５）。しかしながら、イベントの発生時点前後で解析を行ったとしても、マスク抜けの（１−４）の時点で発生した不正処理を検知することは困難である。
【００３２】
また、第２の課題例として、ポインタを監視し、アクセス先アドレスが大きく変化することにより、イベントが発生した場合を説明する。図３に示すように、時間とともに変化するデータ値として、配列要素を指すポインタＡが挙げられる（２−１）。ポインタＡは、ループ内で単純にインクリメントされている（２−２）。プログラムのバグにより、ポインタＡが配列外を指す場合がある。しかし、ポインタＡの指す先がデータ読み込み可能な領域である場合には、条件比較機構５３におけるデータ値の条件は一致しないので、イベントの発生とはならない（２−３）。
【００３３】
そして、ポインタＡ経由で読み込んだ不正値を起点に計算の不正が累積した結果、条件比較機構５３におけるデータ値の条件が一致し、イベントが発生する（２−４）。しかしながら、イベントの発生時点前後で解析を行ったとしても、ポインタＡが配列外を指す（２−３）の時点に発生した不正処理を検知することは困難である。
【００３４】
比較例に係るデバッグシステム１０１の条件比較機構では、予め設定値を設定する必要があるが、どのような場合にプログラムに暴走が発生するかを予測することは困難である。したがって、どのような設定値が適しているか予測することは困難であり、適切な設定値を設定することはできない。
【００３５】
（実施形態１）
次に、実施形態１に係るデバッグシステムを説明する。本実施形態では、上記課題例の（１−４）及び（２−３）の時点の不正処理を検出することができ、デバッグ機能を向上させることができる。まず、実施形態１に係るデバッグシステムの構成を説明する。図４は、実施形態１に係るデバッグシステム１を例示した構成図である。
【００３６】
図４に示すように、デバッグシステム１は、半導体装置１０ａ、ホストＰＣ２０及びエミュレータ３０を備えている。半導体装置１０ａは、例えば、デバッグの対象となる所定のプログラムが実行されるマイクロコンピュータであるが、比較例における半導体装置１０と異なり、データ変化量比較機構６０を備えている。まず、半導体装置１０ａを説明する。その後、半導体装置１０ａを含めたデバッグシステム１を説明する。
【００３７】
＜半導体装置＞
半導体装置１０ａは、ＣＰＵコア４０及びデバッグ機構５０ａを備えている。ＣＰＵコア４０は、デバッグの対象となるプログラムを実行する。デバッグ機構５０ａは、デバッグの対象となるプログラムのデバッグを行う。デバッグ機構５０ａは、トレース機構５１及びイベント発生機構５２ａを有している。
【００３８】
半導体装置１０ａにおけるイベント発生機構５２ａは、条件比較機構５３の他、データ変化量比較機構６０を有している。データ変化量比較機構６０は、データＮ保持機構６１、閾値データ保持機構６２、及び、データ初期値保持機構６３を有している。データ変化量比較機構６０は、デバッグ対象のプログラムがアクセスする所定のデータ値において、前回のアクセス時の所定のデータ値と、今回のアクセス時の所定のデータ値との差分を算出する。そして、算出した差分を、所定のデータの変化量における閾値と比較する。以下、具体的に説明する。
【００３９】
データＮ保持機構６１は、Ｎを自然数とした場合に、所定のデータのＮ回目のアクセス時の所定のデータ値を保持する。例えば、データＮ保持機構６１は、前回のアクセス時の所定のデータ値を保持する。
【００４０】
閾値データ保持機構６２は、デバッグ対象のプログラムがアクセスする所定のデータ値の変化量における閾値を保持する。プログラムがアクセスするデータ値がランダムに変化するものは稀である。データ値は、通常、何等かの式によって計算され、規則性を持って変化する。そのようなデータ値は、例えば、Ｎを自然数とした場合に、Ｎ回目の値に対し、Ｎ＋１回目の値が、ある範囲内にあると考えられる。例えば、上述した第１の課題例におけるグローバル変数Ａ、第２の課題例におけるポインタＡ等のように線形に変化する。また、例えば、ｉｎｔ型の配列要素をポインタによって順にアクセスするプログラムでは、ポインタの指す先は、ｉｎｔ型のサイズずつ変化していく。
【００４１】
したがって、着目したデータのＮ回目の値と、Ｎ＋１回目の値の変化量は、所定の閾値の範囲内となっている。そして、変化量が閾値を超えた場合を、「暴走に至らない何等かのデータ破壊」の可能性として検出することができる。例えば、プログラムの例では、何等かのプログラム不具合によりポインタが破壊され、かつ、ポインタの指す先が例外を発生しない読み書き可能なＲＡＭ内であっても、変化量と閾値との関係により、「暴走に至らない何等かのデータ破壊」として検出することができる。
【００４２】
データ初期値保持機構６３は、所定のデータ値の初期値を保持する。プログラムが正常動作していても、Ｎ回目とＮ＋１回目のデータ値に大きく変化する場合がある。例えば、システムのリセットやループカウンタの初期化などによるものである。そこで、データ初期値保持機構６３に着目データの初期値を保持させている。前回のデータ値と今回のデータ値との差分が閾値を超える場合であっていても、今回のアクセス時のデータ値がデータ初期値保持機構６３に保持された初期値である場合には、「暴走に至らない何等かのデータ破壊」ではないと判断できるようにする。
【００４３】
このように、データ変化量比較機構６０は、今回のアクセス時の所定のデータ値と、データＮ保持機構６１に保持された所定のデータ値との差分を、閾値データ保持機構６２に保持された閾値と比較する。具体的には、Ｎを自然数として、データ変化量比較機構６０は、Ｎ＋１回目のアクセス時の所定のデータ値と、データＮ保持機構６１に保持されたＮ回目のアクセス時の所定のデータ値との差分を、閾値と比較する。また、データ変化量比較機構６０は、今回のアクセス時の所定のデータ値を、データ初期値保持機構６３に保持された初期値と比較する。
【００４４】
データ変化量比較機構６０は、差分が閾値を超える場合で、かつ、今回のアクセス時のデータ値がデータ初期値保持機構６３で保持された初期値と異なる場合に、イベントを発生させる。データ変化量比較機構６０におけるイベントの発生を受けて、イベント発生機構５２ａは、トレース機構５１に履歴を含んだトレース情報を出力させる。または、イベント発生機構５２ａは、プログラムをブレークさせる。
【００４５】
一方、データ変化量比較機構６０は、今回のアクセス時の所定のデータ値と、データＮ保持機構６１に保持された所定のデータ値との差分が閾値の範囲内の場合には、データＮ保持機構６１に保持された所定のデータ値を、今回の所定のデータ値で置き換える。また、今回のアクセス時の所定のデータ値と、データＮ保持機構６１に保持された所定のデータ値との差分が閾値を超える場合であっても、今回のアクセス時の所定のデータ値がデータ初期値保持機構６３に保持された初期値である場合には、データＮ保持機構６１に保持された所定のデータ値を、今回の所定のデータ値で置き換える。具体的には、Ｎ＋１回目のアクセス時のデータ値がデータ初期値保持機構６３に保持されたデータ値と等しかった場合に、データＮ保持機構６１のデータ値をＮ＋１回目のデータ値で置き換える。
【００４６】
所定のデータ値は、複数の種類を含んでもよい。例えば、データ値は、グローバル変数、ポインタ等の複数の種類のデータ値を含んでもよい。その場合には、１種類目のデータ値に対して、閾値が設定され、２種類目のデータ値に対して、閾値が設定されてもよい。
【００４７】
＜デバッグシステム＞
次に、半導体装置１０ａを含めたデバッグシステム１を説明する。
エミュレータ３０は、半導体装置１０ａのデバッグ機構５０ａに接続されている。エミュレータ３０は、ＣＰＵコア４０において実行されるプログラムがアクセスした所定のデータ値の履歴を含むトレース情報を取得する。エミュレータ３０は、デバッグ機構５０ａから取得したトレース情報をホストＰＣ２０に出力する。また、エミュレータ３０は、ホストＰＣ２０からのデバッグ制御に基づいて、半導体装置１０ａのデバッグ制御を行う。また、エミュレータ３０は、ホストＰＣ２０からのデバッグ制御に基づいて、閾値データ保持機構６２に保持される閾値を設定する。さらに、エミュレータ３０は、ホストＰＣ２０からのデバッグ制御に基づいて、データ初期値保持機構６３に保持される初期値を設定する。
【００４８】
ホストＰＣ２０は、エミュレータ３０を介して半導体装置１０ａのデバッグ機構５０ａに接続されている。ホストＰＣ２０は、デバッガ２１を有し、エミュレータ３０を介して、半導体装置１０において実行されるプログラムのトレース情報を取得する。また、ホストＰＣ２０は、エミュレータ３０が取得したトレース情報に基づいて、エミュレータ３０を介して、プログラムのデバッグ制御を行なう。例えば、ホストＰＣ２０は、エミュレータ３０を介して、条件比較機構５３における条件をあらかじめ設定する。また、ホストＰＣ２０は、エミュレータ３０を介して、閾値データ保持機構６２に保持される閾値を設定する。さらに、ホストＰＣ２０は、エミュレータ３０を介して、データ初期値保持機構６３に保持される初期値を設定する。これ以外の構成は、比較例におけるデバッグシステム１０１の構成と同様である。
【００４９】
次に、本実施形態の半導体装置１０におけるデータ変化量比較機構６０の動作を説明する。図５は、実施形態１に係るデバッグシステム１において、データ変化量比較機構６０の動作を例示したフローチャート図である。
【００５０】
図５のステップＳ２１に示すように、まず、データアクセスを行う。具体的には、トレース機構５１は、トレースしたデータ値をデータ変化量比較機構６０に入力する。また、トレース機構５１は、トレースしたデータ値をイベント発生機構５２の条件比較機構５３に入力する。なお、条件比較機構５３における動作は、比較例におけるデバッグシステム１０１のデバッグ機構５０の動作と同様であるので、説明を省略する。
【００５１】
次に、ステップＳ２２に示すように、データＮ保持機構６１に保持されたデータがなく、データＮ保持機構６１が空か判断する。データＮ保持機構６１が空でないＮｏの場合には、ステップＳ２３に示すように、データ変化量比較機構６０は、データＮ保持機構６１に保持されたデータ値と、入力されたデータ値との差分を算出する。具体的には、差分は、データＮ保持機構６１に保持されたデータ値と、入力されたデータ値との差の絶対値である。
【００５２】
次に、ステップＳ２４に示すように、データ変化量比較機構６０は、差分が閾値データ保持機構６２に保持された閾値よりも大きいか判断するとともに、入力されたデータ値がデータ初期値保持機構６３に保持された初期値と異なるか判断する。
【００５３】
ステップＳ２４において、差分が閾値データ保持機構６２に保持された閾値の範囲内の場合、または、入力されたデータ値がデータ初期値保持機構６３に保持された初期値であるＮｏの場合には、ステップＳ２５に示すように、データ変化量比較機構６０は、データＮ保持機構６１に保持されたデータ値を、入力されたデータ値で置き換える。
【００５４】
次に、ステップＳ２６に示すように、データ変化量比較機構６０は、データ値を出力する。そして、トレース機構５１は、入力すべきデータ値がなくなるまで、ステップＳ２１〜Ｓ２６を繰り返す。
【００５５】
一方、ステップＳ２４において、差分が閾値データ保持機構６２に保持された閾値を超える場合で、かつ、入力されたデータ値がデータ初期値保持機構６３に保持された初期値と異なるＹｅｓの場合には、ステップＳ２７に示すように、イベントを発生させる。これにより、データ変化量比較機構６０は、イベント発生機構５２に対して、実行中のプログラムをブレークさせる。または、履歴を含んだトレース情報を出力させる。
【００５６】
また、ステップ２２において、データＮ保持機構６１に保持されたデータがなく、データＮ保持機構６１が空のＹｅｓの場合には、ステップＳ２８に示すように、データＮ保持機構６１に、入力されたデータ値を保持させる。そして、ステップＳ２６に進む。
【００５７】
本実施形態の半導体装置１０におけるデータ変化量比較機構６０は、ステップＳ２４に示すように、差分が閾値データ保持機構６２に保持された閾値よりも大きいか判断するとともに、入力されたデータ値がデータ初期値保持機構６３に保持された初期値と異なるか判断する。
【００５８】
図６は、実施形態１に係るデバッグシステム１において、データ変化量比較機構６０の動作を示すプログラムを例示した図である。図６に示すように、差分が閾値データ保持機構６２に保持された閾値よりも大きく、かつ、入力されたデータ値がデータ初期値保持機構６３に保持された初期値と異なる場合には、イベントを発生させる。このように、デバッグシステム１のデータ変化量比較機構６０は、着目したデータ値の変化を監視することができる。そして、データ値の変化量が閾値を超えた場合を「暴走に至らない何等かのデータ破壊」の可能性として検出することができる。これにより、比較例の半導体装置では困難であったデバッグ機能を向上させることができる。
【００５９】
例えば、比較例における第１の課題例に適用すると、データ変化量比較機構６０によって、（１−４）のグローバル変数Ａが離散的な変化をする時点を、検出することができる。また、比較例における第２の課題例に適用すると、データ変化量比較機構６０によって、（２−３）のポインタＡが配列外を指す時点を検出することができる。したがって、「暴走に至らない何等かのデータ破壊」を検出することができ、デバッグ機能を向上させることができる。
【００６０】
また、データ値がどのような値の場合に、プログラムに暴走が発生するのかを予測することは困難であるのに対して、データ値における変化量は、予測することが可能である。よって、条件比較機構５３における設定値よりも、高精度な閾値を用いることができるので、デバッグ機能を向上させることができる。
【００６１】
さらに、データ変化量比較機構６０は、入力されたデータ値を、データ初期値保持機構６３に保持された初期値と比較している。そして、初期値と同じ値の時は、イベントを発生させていない。よって、ループ等の初期値に戻る場合を除外してイベントを発生させることができるので、「暴走に至らない何等かのデータ破壊」の検出精度を向上させることができる。
【００６２】
（実施形態２）
次に、実施形態２を説明する。本実施形態は、データ変化量比較機構６０がエミュレータ３０に備えられている点が、実施形態１と異なっている。図７は、実施形態２に係るデバッグシステムを例示した構成図である。
【００６３】
図７に示すように、実施形態２に係るデバッグシステム２は、半導体装置１０、ホストＰＣ２０及びエミュレータ３０ａを備えている。実施形態２に係る半導体装置１０は、比較例に係るデバッグシステム１０１の半導体装置１０と同様であり、ＣＰＵコア４０及びデバッグ機構５０を有している。デバッグ機構５０は、トレース機構５１及びイベント発生機構５２を有している。そして、イベント発生機構５２は、条件比較機構５３を含んでいる。実施形態２の半導体装置１０において、イベント発生機構５２は、データ変化量比較機構６０を含んでいない。ホストＰＣ２０は、比較例及び実施形態１と同様であり、デバッガ２１を含んでいる。
【００６４】
実施形態２に係るエミュレータ３０ａは、データ変化量比較機構６０を有している。データ変化量比較機構６０は、データＮ保持機構６１、閾値データ保持機構６２、及び、データ初期値保持機構６３を含んでいる。エミュレータ３０ａは、半導体装置１０のデバッグ機構５０に接続され、データ値の履歴を含むトレース情報を取得している。これにより、データ変化量比較機構６０は、エミュレータ３０ａにおいて、前回のアクセス時の所定のデータ値と、今回のアクセス時の所定のデータ値との差分を、所定のデータ値の変化量における閾値と比較することができる。また、エミュレータ３０ａは、半導体装置１０のデバッグ機構５０に接続されているので、半導体装置１０のデバッグ制御を行うことができる。
【００６５】
ホストＰＣ２０は、エミュレータ３０ａにおける閾値データ保持機構６２に保持される閾値を設定する。さらに、ホストＰＣ２０は、エミュレータ３０におけるデータ初期値保持機構６３に保持される初期値を設定する。
【００６６】
これ以外の構成は、比較例及び実施形態１の記載に含まれている。実施形態２におけるデータ変化量比較機構６０の動作は、データ変化量比較機構６０がエミュレータ３０ａに配置されている以外は、実施形態１と同様である。
【００６７】
本実施形態のデバッグシステム２によれば、エミュレータ３０ａがデータ変化量比較機構６０を有している。したがって、半導体装置１０は、比較例と同様に、データ変化量比較機構６０を有していない一般的なものを用いることができる。よって、特別な半導体装置１０を準備しなくてもよいのでコストを低減することができる。これ以外の構成及び効果は、実施形態１の記載に含まれている。
【００６８】
（実施形態３）
次に、実施形態３を説明する。本実施形態は、データ変化量比較機構６０がホストＰＣ２０に備えられている点が、実施形態１及び２と異なっている。図８は、実施形態３に係るデバッグシステムを例示した構成図である。
【００６９】
図８に示すように、実施形態３に係るデバッグシステム３は、半導体装置１０、ホストＰＣ２０ａ及びエミュレータ３０を備えている。半導体装置１０は、比較例及び実施形態２と同様であり、ＣＰＵコア４０及びデバッグ機構５０を有している。デバッグ機構５０は、トレース機構５１及びイベント発生機構５２を有している。そして、イベント発生機構５２は、条件比較機構５３を含んでいる。実施形態３の半導体装置１０において、イベント発生機構５２は、データ変化量比較機構６０を含んでいない。
【００７０】
エミュレータ３０は、比較例及び実施形態１と同様であり、データ変化量比較機構６０を含んでいない。
【００７１】
本実施形態のホストＰＣ２０ａは、デバッガ２１ａに、データ変化量比較機構６０を含んでいる。データ変化量比較機構６０は、データＮ保持機構６１、閾値データ保持機構６２、及び、データ初期値保持機構６３を含んでいる。ホストＰＣ２０ａは、エミュレータ３０を介して、半導体装置１０において実行されるプログラムのトレース情報を取得している。これにより、データ変化量比較機構６０は、ホストＰＣ２０ａにおいて、前回のアクセス時の所定のデータ値と、今回のアクセス時の所定のデータ値との差分を、所定のデータ値の変化量における閾値と比較することができる。また、ホストＰＣ２０は、ホストＰＣ２０における閾値データ保持機構６２に保持される閾値を設定する。さらに、ホストＰＣ２０は、ホストＰＣ２０におけるデータ初期値保持機構６３に保持される初期値を設定する。
【００７２】
これ以外の構成は、比較例、実施形態１及び２の記載に含まれている。実施形態３におけるデータ変化量比較機構６０の動作は、データ変化量比較機構６０がホストＰＣ２０ａに配置されている以外は、実施形態１及び２と同様である。
【００７３】
本実施形態のデバッグシステム３は、ホストＰＣ２０ａがデータ変化量比較機構６０を有している。したがって、半導体装置１０は、比較例及び実施形態２と同様に、データ変化量比較機構６０を有していない一般的なものを用いることができる。また、エミュレータ３０は、比較例及び実施形態１と同様に、データ変化量比較機構６０を有していない一般的なものを用いることができる。よって、特別な半導体装置１０及びエミュレータ３０を準備しなくてもよいので、ハードウェアを変更することなく、コストを低減することができる。これ以外の構成及び効果は、実施形態１及び２の記載に含まれている。
【００７４】
（実施形態４）
次に、実施形態４を説明する。本実施形態は、データ変化量比較機構６０において用いられる閾値を、ユーザが設定するのではなく、コンパイラが生成する。図９は、実施形態４に係るデバッグシステムを例示した構成図である。
【００７５】
図９に示すように、実施形態４に係るデバッグシステム４は、半導体装置１０、ホストＰＣ２０ｂ、エミュレータ３０を備えている。半導体装置１０及びエミュレータ３０の構成は、実施形態３と同様である。
【００７６】
ホストＰＣ２０ｂは、デバッガ２１ａ、コンパイラ７０、実行形式ファイル８０を有している。デバッガ２１ａは、実施形態３のホストＰＣ２０ａに含まれたデバッガ２１ａと同様であり、データ変化量比較機構６０を含んでいる。
【００７７】
コンパイラ７０は、構文解析部７１及びコード生成部７２を有している。コンパイラ７０は、Ｃ言語のソースコードであるＣソース７４をコンパイルする。構文解析部７１は、Ｃソース７４を構文解析する。コード生成部７２は、構文解析されたＣソース７４から機械語のコード及びデータを生成する。コンパイラ７０は、生成された機械語のコード／データ８１、及び、デバッグ情報８２を実行形式ファイル８０に出力する。デバッグ情報８２は、機械語のコード／データ８１とＣソース７４との対比等を含んでいる。
【００７８】
本実施形態では、構文解析部７１に、変数変化量認識機構７３が組み込まれている。変数変化量認識機構７３は、構文解析部７１が構文解析する際に、データの初期値及び閾値データを認識する。例えば、配列要素にアクセスするポインタの変化を構文解析部７１が構文解析した際に、ポインタが一定の変化量で変化する配列であると解析する。その場合には、変数変化量認識機構７３は、一定の変化量を閾値として認識する。また、変数が初めの値に戻ることを繰り返すループを含むと解析した場合には、変数変化量認識機構７３は、初めの値をデータの初期値として認識する。コンパイラ７０は、初期値及び閾値として認識されたデータ初期値及び閾値データをデバッグ情報８２における変数情報８３に追加出力する。
【００７９】
デバッガ２１ａは、実行形式ファイル８０のデバッグ情報８２に変数情報８３として出力されたデータの初期値及び閾値データを読み込み、データ初期値保持機構６３及び閾値データ保持機構６２に保持する。
【００８０】
本実施形態のデバッグシステム４によれば、コンパイラ７０は、プログラムのソースコードに基づいて初期値及び閾値を生成することができる。したがって、ユーザが初期値及び閾値を生成する必要がないので作業工程を短縮することができる。また、コンパイラ７０は、プログラムソースコードに基づいて初期値及び閾値を生成するので、初期値及び閾値を最適化することができる。これ以外の構成及び効果は、実施形態１〜３の記載に含まれている。
【００８１】
なお、本実施形態では、コンパイラ７０及び実行形式ファイル８０とともに、データ変化量比較機構６０がホストＰＣ２０ｂに配置された例を示したが、これに限らず、実施形態１及び２の態様において、ホストＰＣ２０にコンパイラ７０及び実行形式ファイル８０が配置されてもよいし、実施形態１及び２の態様において、データ変化量比較機構６０とともに、コンパイラ７０及び実行形式ファイル８０が配置されてもよい。
【００８２】
また、実施形態１〜４において、データ変化量比較機構６０は、Ｎ回目のアクセス時のデータ値と、Ｎ＋１回目のアクセス時のデータ値との差分を、閾値と比較しているが、これに限らない。例えば、データ変化量比較機構６０は、差分の変化量が一定値の場合における一定値からの逸脱を検出してイベントを発生させてもよいし、差分が常に増加する場合において、差分の減少を検出してイベントを発生させてもよい。逆に、差分が常に減少する場合において、差分の増加を検出してイベントを発生させてもよい。さらに、差分が特定の関数、例えば、２次曲線に従って変化する場合に、２次関数からの逸脱を検出してイベントを発生させてもよい。また、閾値を一定値ではなく、関数としてもよい。例えば、閾値を、差分を基にした任意の関数や、差分を基にした任意の計算結果としてもよい。
【００８３】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。また、下記の事項も、実施形態１〜４に記載の技術思想に含まれる。
【００８４】
（付記１）
デバッグ対象のプログラムがアクセスする所定のデータにおいて、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較するステップを備えたデバッグ方法。
【００８５】
（付記２）
前記閾値を、閾値データ保持機構に保持するステップと、
前記前回のアクセス時の前記所定のデータ値を、データＮ保持機構に保持するステップと、
を有し、
前記閾値と比較するステップは、
前記今回のアクセス時の前記所定のデータの値と、前記データＮ保持機構に保持された前記所定のデータ値との差分を、前記閾値データ保持機構に保持された前記閾値と比較する、
付記１に記載のデバッグ方法。
【００８６】
（付記３）
前記閾値と比較するステップにおいて、前記差分が前記閾値の範囲内の場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換える、
付記２に記載のデバッグ方法。
【００８７】
（付記４）
前記所定のデータ値の初期値を、データ初期値保持機構に保持するステップと、
前記今回のアクセス時の前記所定のデータ値を、前記データ初期値保持機構に保持された前記初期値と比較するステップと、
をさらに有する、
付記２に記載のデバッグ方法。
【００８８】
（付記５）
前記初期値と比較するステップにおいて、前記今回のアクセス時の前記所定のデータ値が、前記データ初期値保持機構に保持された前記初期値である場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換える、
付記４に記載のデバッグ方法。
【００８９】
（付記６）
前記閾値と比較するステップにおいて、前記差分が前記閾値を超える場合であり、かつ、前記初期値と比較するステップにおいて、前記今回のアクセス時の前記所定のデータ値が前記データ初期値保持機構に保持された前記初期値と異なる場合には、イベントを発生させる、
付記４に記載のデバッグ方法。
【００９０】
（付記７）
各アクセス時においての前記所定のデータ値の履歴を、トレース機構に保持するステップをさらに備え、
前記イベントを発生させるステップにおいて、前記トレース機構は、前記履歴を出力する、
付記６に記載のデバッグ方法。
【００９１】
（付記８）
前記所定のデータ値は、第１種のデータ値及び第２種のデータ値を含み、
前記閾値を、閾値データ保持機構に保持するステップにおいて、
前記第１種のデータ値に対する前記閾値を、前記閾値データ保持機構に保持し、前記第２種のデータ値に対する前記閾値を、前記閾値データ保持機構に保持する、
付記２に記載のデバッグ方法。
【００９２】
（付記９）
前記所定のデータ値があらかじめ設定された設定値と合致するか検出するステップをさらに備え、
前記設定値と合致するか検出するステップにおいて、前記所定のデータ値が前記設定値と合致した場合には、イベントを発生させる、
付記１に記載のデバッグ方法。
【００９３】
（付記１０）
デバッグ対象のプログラムがアクセスする所定のデータにおいて、前回のアクセス時の前記所定のデータ値と、今回のアクセス時の前記所定のデータ値との差分を、前記所定のデータ値の変化量における閾値と比較させる、
ことをコンピュータに実行させるデバッグプログラム。
【００９４】
（付記１１）
前記閾値を、閾値データ保持機構に保持させ、
前記前回のアクセス時の前記所定のデータ値を、データＮ保持機構に保持させ、
前記今回のアクセス時の前記所定のデータの値と、前記データＮ保持機構に保持された前記所定のデータ値との差分を、前記閾値データ保持機構に保持された前記閾値と比較させる、
ことをコンピュータに実行させる付記１０に記載のデバッグプログラム。
【００９５】
（付記１２）
前記差分が前記閾値の範囲内の場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換えさせる、
ことをコンピュータに実行させる付記１１に記載のデバッグプログラム。
【００９６】
（付記１３）
前記所定のデータ値の初期値を、データ初期値保持機構に保持させ、
前記今回のアクセス時の前記所定のデータ値を、前記データ初期値保持機構に保持された前記初期値と比較させる、
ことをコンピュータに実行させる付記１１に記載のデバッグプログラム。
【００９７】
（付記１４）
前記今回のアクセス時の前記所定のデータ値が、前記データ初期値保持機構に保持された前記初期値である場合には、前記データＮ保持機構に保持された前記所定のデータ値を、前記今回のアクセス時の前記所定のデータ値で置き換えさせる、
ことをコンピュータに実行させる付記１３に記載のデバッグプログラム。
【００９８】
（付記１５）
前記差分が前記閾値を超える場合であり、かつ、前記今回のアクセス時の前記所定のデータ値が前記データ初期値保持機構に保持された前記初期値と異なる場合には、イベントを発生させる、
ことをコンピュータに実行させる付記１３に記載のデバッグプログラム。
【００９９】
（付記１６）
各アクセス時においての前記所定のデータ値の履歴を、トレース機構に保持させ、
前記イベントを発生させた場合に、前記トレース機構に、前記履歴を出力させる、
ことをコンピュータに実行させる付記１５に記載のデバッグプログラム。
【０１００】
（付記１７）
前記所定のデータ値は、第１種のデータ値及び第２種のデータ値を含み、
前記第１種のデータ値に対する前記閾値を、前記閾値データ保持機構に保持させ、前記第２種のデータ値に対する前記閾値を、前記閾値データ保持機構に保持させる、
ことをコンピュータに実行させる付記１１に記載のデバッグプログラム。
【０１０１】
（付記１８）
前記所定のデータ値があらかじめ設定された設定値と合致するか検出させ
前記所定のデータ値が前記設定値と合致した場合には、イベントを発生させる、
ことをコンピュータに実行させる付記１０に記載のデバッグプログラム。
【符号の説明】
【０１０２】
１、２、３、４、１０１  デバッグシステム
１０、１０ａ  半導体装置
２０、２０ａ、２０ｂ  ホストＰＣ
２１、２１ａ  デバッガ
３０、３０ａ  エミュレータ
４０  ＣＰＵコア
５０、５０ａ  デバッグ機構
５１  トレース機構
５２、５２ａ  イベント発生機構
５３  条件比較機構
６０  データ変化量比較機構
６１  データＮ保持機構
６２  閾値データ保持機構
６３  データ初期値保持機構
７０  コンパイラ
７１  構文解析部
７２  コード生成部
７３  変数変化量認識機構
７４  Ｃソース
８０  実行形式ファイル
８１  コード／データ
８２  デバッグ情報
８３  変数情報
【図１】
2019200455.tif 000003
【図２】
2019200455.tif 000004
【図３】
2019200455.tif 000005
【図４】
2019200455.tif 000006
【図５】
2019200455.tif 000007
【図６】
2019200455.tif 000008
【図７】
2019200455.tif 000009
【図８】
2019200455.tif 000010
【図９】
2019200455.tif 000011