(57)【要約】【課題】  ハードウェアのシミュレータとソフトウェアのシミュレータを協調しながら高速なシミュレーションを可能にする。【解決手段】  被デバッグソフトウェア１０２を実行する被デバッグソフトウェア実行部１０３と、被デバッグソフトウェア実行部１０３と連携して動作する実行可能なハードウェア記述部１０４と、シミュレーションに不要なハードウェア要素が指定されたハードウェア要素不活性化箇所情報１０６をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述部１０４へ出力するハードウェア要素不活性化指定部１０５とを備え、ソフトウェアのデバッグに不要なハードウェアのシミュレーションを抑制することで、協調シミュレーション全体の実行速度を上げる。【選択図】  図１
2005321848.tif 000002
【特許請求の範囲】
【請求項１】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、シミュレーションに不要なハードウェア要素が指定されたハードウェア要素不活性化箇所情報をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項２】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、シミュレーションに不要なハードウェア要素が指定されたハードウェア要素不活性化箇所情報をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項３】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、ハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項４】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項５】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、前記ハードウェア記述部の動作状態を監視してハードウェア要素活性状態を取得するためのハードウェア要素活性状態取得部と、前記ハードウェア要素活性状態取得部が取得した結果とハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備えるシミュレーション実行プログラム。
【請求項６】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記ハードウェア記述実行部の動作状態を監視してハードウェア要素活性状態を取得するためのハードウェア要素活性状態取得部と、前記ハードウェア要素活性状態取得部が取得した結果とハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備えるシミュレーション実行プログラム。
【請求項７】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、前記ハードウェア記述部の中のハードウェア要素状態を取得するためのハードウェア要素状態取得部と、前記ハードウェア要素状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、前記シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項８】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記ハードウェア記述実行部の中のハードウェア要素状態を取得するためのハードウェア要素状態取得部と、前記ハードウェア要素状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、前記シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項９】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、前記被デバッグソフトウェア実行部の中のソフトウェア実行状態を取得するためのソフトウェア実行状態取得部と、前記ソフトウェア実行状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、前記シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項１０】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記被デバッグソフトウェア実行部の中のソフトウェア実行状態を取得するためのソフトウェア実行状態取得部と、前記ソフトウェア実行状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、前記シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示を前記ハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備えるシステムシミュレーション実行プログラム。
【請求項１１】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、前記被デバッグソフトウェア実行部から前記ハードウェア記述部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、前記条件判定部の判定結果に基づいて前記被デバッグソフトウェア実行部から前記ハードウェア記述部の仮想メモリ空間へのアクセスを実行させるか否かを制御するアクセス制御部とを備えるシステムシミュレーション実行プログラム。
【請求項１２】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記被デバッグソフトウェア実行部から前記ハードウェア記述実行部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、前記条件判定部の判定結果に基づいて前記被デバッグソフトウェア実行部から前記ハードウェア記述実行部の仮想メモリ空間へのアクセスを実行させるか否かを制御するアクセス制御部とを備えるシステムシミュレーション実行プログラム。
【請求項１３】
ハードウェア記述の中から周期回路を抽出する周期回路抽出部と、前記周期回路抽出部で抽出された周期回路から周期回路パラメータを算出する周期回路パラメータ算出部と、前記周期回路パラメータ算出部で算出された周期回路パラメータに基づいて前記ハードウェア記述の中の周期回路部分を別の処理へ書き換える周期回路変換部とを備えるハードウェア記述変換プログラム。
【請求項１４】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記ハードウェア記述実行部で実行されるハードウェア記述の中から周期回路を抽出する周期回路抽出部と、前記周期回路抽出部で抽出された周期回路から周期回路パラメータを算出する周期回路パラメータ算出部とを備え、
前記ハードウェア記述実行部は、前記ハードウェア記述の中の周期回路部分を実行するかわりに、前記周期回路パラメータ算出部で算出された周期回路パラメータに基づいて前記周期回路の特性を実現するシステムシミュレーション実行プログラム。
【請求項１５】
ハードウェア記述の中から組合せ回路を抽出する組合せ回路抽出部と、前記組合せ回路抽出部で抽出された組合せ回路から組合せ回路パラメータを算出する組合せ回路パラメータ算出部と、前記組合せ回路パラメータ算出部で算出された組合せ回路パラメータに基づいて前記ハードウェア記述の中の組合せ回路部分を別の処理へ書き換える組合せ回路変換部とを備えるハードウェア記述変換プログラム。
【請求項１６】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記ハードウェア記述実行部で実行されるハードウェア記述の中から組合せ回路を抽出する組合せ回路抽出部と、前記組合せ回路抽出部で抽出された組合せ回路から組合せ回路パラメータを算出する組合せ回路パラメータ算出部とを備え、
前記ハードウェア記述実行部は、前記ハードウェア記述の中の組合せ回路部分を実行するかわりに、組合せ回路パラメータ算出部で算出された組合せ回路パラメータに基づいて前記組合せ回路の特性を実現するシステムシミュレーション実行プログラム。
【請求項１７】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、前記被デバッグソフトウェア実行部から前記ハードウェア記述部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、前記条件判定部の判定結果がアクセスを許可する場合に前記被デバッグソフトウェア実行部から前記ハードウェア記述部の仮想メモリ空間へのアクセスを実行させるアクセス制御部と、前記条件判定部の判定結果がアクセスを許可しない場合に前記ハードウェア記述の中の特定のハードウェア要素を直接操作するハードウェア要素操作部とを備えるシステムシミュレーション実行プログラム。
【請求項１８】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記被デバッグソフトウェア実行部から前記ハードウェア記述実行部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、前記条件判定部の判定結果がアクセスを許可する場合に前記被デバッグソフトウェア実行部から前記ハードウェア記述実行部の仮想メモリ空間へのアクセスを実行させるアクセス制御部と、前記条件判定部の判定結果がアクセスを許可しない場合に前記ハードウェア記述の中の特定のハードウェア要素を直接操作するハードウェア要素操作部とを備えるシステムシミュレーション実行プログラム。
【請求項１９】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、前記被デバッグソフトウェアの中に記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、前記ハードウェア操作コマンド解析部の解析結果に基づいて前記ハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部とを備えるシステムシミュレーション実行プログラム。
【請求項２０】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記被デバッグソフトウェアの中に記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、前記ハードウェア操作コマンド解析部の解析結果に基づいて前記ハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部とを備えるシステムシミュレーション実行プログラム。
【請求項２１】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、前記ハードウェア記述部の中に記述されている被デバッグソフトウェア実行部操作コマンドを解析し前記被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備えるシステムシミュレーション実行プログラム。
【請求項２２】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記ハードウェア記述の中に記述されている被デバッグソフトウェア実行部操作コマンドを解析し前記被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備えるシステムシミュレーション実行プログラム。
【請求項２３】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、テストスクリプトを実行するテストスクリプト実行部と、前記テストスクリプトに記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、前記ハードウェア操作コマンド解析部の解析結果に基づいて前記ハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部と、前記テストスクリプトに記述されている被デバッグソフトウェア実行部操作コマンドを解析し前記被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備えるシステムシミュレーション実行プログラム。
【請求項２４】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、テストスクリプトを実行するテストスクリプト実行部と、前記テストスクリプトに記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、前記ハードウェア操作コマンド解析部の解析結果に基づいて前記ハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部と、前記テストスクリプトに記述されている被デバッグソフトウェア実行部操作コマンドを解析し前記被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備えるシステムシミュレーション実行プログラム。
【請求項２５】
ハードウェア記述の中から過去に抽象化作業が完了している部分と同等部分を抽出する既抽象化部抽出部と、前記ハードウェア記述の中の前記既抽象化部抽出部による抽出部分を前記過去に抽象化作業が完了している抽象化された記述に置き換えるハードウェア記述置換え部とを備えるハードウェア記述変換プログラム。
【請求項２６】
被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに前記被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、前記ハードウェア記述実行部で実行されるハードウェア記述の中から過去に抽象化作業が完了している部分と同等部分を抽出する既抽象化部抽出部とを備え、
前記ハードウェア記述実行部は、前記ハードウェア記述の中の前記過去に抽象化作業が完了している部分と同等部分を実行するかわりに、前記過去に抽象化作業が完了している抽象化された記述を実行するシステムシミュレーション実行プログラム。
【請求項２７】
相互に関連しながら並行的に動作する複数のシミュレーション実行部と、前記シミュレーション実行部からアクセスされるイベント予約登録部と、前記イベント予約登録部に設定されたイベントタイミングに応じてシミュレーションの動きを変更させるシミュレーション実行指示部と、シミュレーション実行状況を記録したものを用いて特定の時点の状態にシミュレーション状態を復元させるシミュレーション状態復元部とを備え、一の前記シミュレーション実行部は他の前記シミュレーション実行部に関係するイベントを認識したときにイベントタイミングを前記イベント予約登録部に設定するシステムシミュレーション実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアとソフトウェアを協調してシミュレーションを行うシステムシミュレーションに係わり、特にソフトウェアデバッグが容易に実行できるシステムシミュレーション実行プログラムとシステムシミュレーション上で使用されるハードウェア記述変換プログラムに関する。
【背景技術】
【０００２】
ハードウェアとソフトウェアを協調してシミュレーションを行うシミュレーションシステムとして、ハードウェア・ソフトウェア協調シミュレーションが従来知られている。これによれば、実際のハードウェアを使わずに仮想的なハードウェアを使ってソフトウェアのデバッグを行うことによりハードウェアの不具合を早期に発見したり、ソフトウェアのデバッグを行ったり、あるいはシステムの全体の品質や完成度を短期間に上げたりするという効果が期待できる。
【０００３】
従来、マイコン上で動作するソフトウェアとマイコン周辺のハードウェアの両方を連動させてシミュレーションを行う協調シミュレーションという手法には大別して３つの手法が知られていた。
【０００４】
１つ目はハードウェアの動きをある程度抽象化してソフトウェアの一部として記述し、ソフトウェアと直接的に連結させて実行可能ファイルを作成してからそれを実行するという方法である。
【０００５】
２つ目は、ソフトウェアのシミュレータとハードウェアのシミュレータのそれぞれにインターフェイスを設けて連動させるという方法である。つまり、２つの大きなアプリケーションが連動してシミュレーションを行うことになる。
【０００６】
そして、３つ目は、ソフトウェアのシミュレータとハードウェアのシミュレータを１つのアプリケーションとして統合した上でそれぞれの処理にインターフェイスを設けて連動させるという方法である。
【特許文献１】特開２００２−２４４８８３号公報
【特許文献２】特開２００１−１５５０４７号公報
【特許文献３】特開２００１−２９０８６０号公報
【特許文献４】特開平１０−７４２１４号公報
【特許文献５】特開平１０−９１４８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
近年、ソフトウェアの規模が大きくなってきており、シミュレーションでソフトウェアのデバッグを行ったりする際にはそのシミュレーション実行速度が非常に重要であり、それをいかに高速にするかが課題である。
【０００８】
前述した１つ目の、ハードウェアの動きをある程度抽象化してソフトウェアとして記述し、ソフトウェアと連結させて実行可能ファイルを作成してからそれを実行するという方法の場合、シミュレータとしての実行速度は高速であるが、ハードウェアの動きを抽象化する工数が大きいという問題や、ハードウェアの実際の動きとは大きく異なった抽象化をしてしまったりするという問題があった。しかし、現状ではシミュレーション速度が高速という理由からこの方法が最もよく利用されている。
【０００９】
また、２つ目の、ソフトウェアのシミュレータとハードウェアのシミュレータの２つの別々のシミュレータを連携させてシミュレーションを行う方法では、ハードウェアの抽象化という作業がなくなるので最初の方法での問題は解決される。しかし、シミュレーションしようとするハードウェアの大規模化にともないハードウェアのシミュレーションが非常に低速となってしまい、ソフトウェアデバッグに耐えないものになってきている。さらに、協調シミュレーションの中ではハードウェアシミュレータとソフトウェアシミュレータが同時並行して動作したり、お互いの情報をやり取りすることが頻繁に発生したりするため、やり取りするたびに時間がかかってしまい、さらにシミュレーションが遅くなるという問題もあった。
【００１０】
また、３つ目の、ソフトウェアのシミュレータとハードウェアのシミュレータを１つのアプリケーションに統合した上でそれぞれのシミュレーション実行部にインターフェイスを設けて連動させるという方法の場合、ハードウェアとソフトウェアのシミュレータ相互のやり取りについては１つのアプリケーションの中で行うので高速にやり取りすることはできるようになる。しかし、ハードウェアシミュレータ単体で動作させるだけでも実際のハードウェアと比べてはるかに遅いという問題があり、さらにソフトウェアのシミュレータと連携させるともっと遅くなる。
【００１１】
本発明の目的は、実際の半導体デバイス設計で利用するレベルのハードウェア記述を使ったハードウェアのシミュレーションとソフトウェアのシミュレーションの協調シミュレーションでありながら高速にシミュレーションできるようにすることである。
【課題を解決するための手段】
【００１２】
本発明ではハードウェアのシミュレータの動作を高速化するために、ソフトウェアのデバッグに不要なハードウェア部分を特定してその部分だけシミュレーションを抑制したり、あるいは、ハードウェアやソフトウェアのシミュレーションの状態が特定の状態になったときに特定の一部のハードウェアのシミュレーションを抑止あるいは実行したり、あるいは、被デバッグソフトウェアの記述の中にハードウェアの内部のノードを直接操作する処理を記述できるようにして一部のハードウェアのシミュレーションを抑制したり、あるいは、ハードウェアの記述の中でソフトウェアのシミュレータの操作を記述することができるようにすることでソフトウェアの処理の一部のシミュレーションを省略させてシミュレーション時間を短縮したり、あるいは、ハードウェアの記述の抽象化を図ってハードウェアのシミュレーション時間の短縮をしたりすることができる。さらに、本発明では既に抽象化したハードウェア記述を含んだファイルを開発者が修正した場合、既に行った抽象化の結果を再利用することにより抽象化時間を省きトータルの開発工数の削減を図ることもできる。
【００１３】
まず、第１の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、シミュレーションに不要なハードウェア要素が指定されたハードウェア要素不活性化箇所情報をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備える。
【００１４】
第２の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、シミュレーションに不要なハードウェア要素が指定されたハードウェア要素不活性化箇所情報をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備える。
【００１５】
第３の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、ハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備える。
【００１６】
第４の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備える。
【００１７】
第５の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、ハードウェア記述部の動作状態を監視してハードウェア要素活性状態を取得するためのハードウェア要素活性状態取得部と、ハードウェア要素活性状態取得部が取得した結果とハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備える。
【００１８】
第６の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア記述実行部の動作状態を監視してハードウェア要素活性状態を取得するためのハードウェア要素活性状態取得部と、ハードウェア要素活性状態取得部が取得した結果とハードウェア要素間の関連を示すハードウェア記述構造情報と必須ハードウェア要素リストとに基づいてシミュレーションに不要なハードウェア要素を探索する不要ハードウェア要素探索部と、その探索結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備える。
【００１９】
上記第１〜第６の発明によれば、ソフトウェアのデバッグには関係のないハードウェア要素をシミュレーションに不要なハードウェア要素として特定し、その部分のハードウェアのシミュレーションを抑止してシミュレーション全体の速度を高速化することができる。
【００２０】
第７の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、ハードウェア記述部の中のハードウェア要素状態を取得するためのハードウェア要素状態取得部と、ハードウェア要素状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備える。
【００２１】
第８の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア記述実行部の中のハードウェア要素状態を取得するためのハードウェア要素状態取得部と、ハードウェア要素状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備える。
【００２２】
上記第７、第８の発明によれば、ハードウェア要素状態に応じて一部のハードウェアのシミュレーションを抑止してシミュレーション全体の速度を高速化することができる。
【００２３】
第９の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、被デバッグソフトウェア実行部の中のソフトウェア実行状態を取得するためのソフトウェア実行状態取得部と、ソフトウェア実行状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述部へ出力するハードウェア要素不活性化指定部とを備える。
【００２４】
第１０の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、被デバッグソフトウェア実行部の中のソフトウェア実行状態を取得するためのソフトウェア実行状態取得部と、ソフトウェア実行状態取得部が取得した結果に基づいて各ハードウェア要素のシミュレーションを行うかどうかを判定するシミュレーション条件判定部と、シミュレーション条件判定部の判定結果をもとにハードウェアのシミュレーションを部分的に抑制させる指示をハードウェア記述実行部へ出力するハードウェア要素不活性化指定部とを備える。
【００２５】
上記第９、第１０の発明によれば、ソフトウェアの状態に応じて一部のハードウェアのシミュレーションを抑止してシミュレーション全体の速度を高速化することができる。
【００２６】
第１１の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、被デバッグソフトウェア実行部からハードウェア記述部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、条件判定部の判定結果に基づいて被デバッグソフトウェア実行部からハードウェア記述部の仮想メモリ空間へのアクセスを実行させるか否かを制御するアクセス制御部とを備える。
【００２７】
第１２の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、被デバッグソフトウェア実行部からハードウェア記述実行部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、条件判定部の判定結果に基づいて被デバッグソフトウェア実行部からハードウェア記述実行部の仮想メモリ空間へのアクセスを実行させるか否かを制御するアクセス制御部とを備える。
【００２８】
上記第１１、第１２の発明によれば、ソフトウェア側からハードウェアへのアクセスの中のデバッグに不要なアクセスを中止することによりシミュレーションを抑止してシミュレーション全体の速度を高速化することができる。
【００２９】
第１３の発明のハードウェア記述変換プログラムは、ハードウェア記述の中から周期回路を抽出する周期回路抽出部と、周期回路抽出部で抽出された周期回路から周期回路パラメータを算出する周期回路パラメータ算出部と、周期回路パラメータ算出部で算出された周期回路パラメータに基づいてハードウェア記述の中の周期回路部分を別の処理へ書き換える周期回路変換部とを備える。
【００３０】
第１４の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア記述実行部で実行されるハードウェア記述の中から周期回路を抽出する周期回路抽出部と、周期回路抽出部で抽出された周期回路から周期回路パラメータを算出する周期回路パラメータ算出部とを備え、ハードウェア記述実行部は、ハードウェア記述の中の周期回路部分を実行するかわりに、周期回路パラメータ算出部で算出された周期回路パラメータに基づいて周期回路の特性を実現する。
【００３１】
上記第１３、第１４の発明によれば、ハードウェアのシミュレーションをする際に、周期回路のシミュレーション記述を簡略化して実行することによりシミュレーション全体の速度を高速化することができる。
【００３２】
第１５の発明のハードウェア記述変換プログラムは、ハードウェア記述の中から組合せ回路を抽出する組合せ回路抽出部と、組合せ回路抽出部で抽出された組合せ回路から組合せ回路パラメータを算出する組合せ回路パラメータ算出部と、組合せ回路パラメータ算出部で算出された組合せ回路パラメータに基づいてハードウェア記述の中の組合せ回路部分を別の処理へ書き換える組合せ回路変換部とを備えるハードウェア記述変換プログラム。
【００３３】
第１６の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア記述実行部で実行されるハードウェア記述の中から組合せ回路を抽出する組合せ回路抽出部と、組合せ回路抽出部で抽出された組合せ回路から組合せ回路パラメータを算出する組合せ回路パラメータ算出部とを備え、ハードウェア記述実行部は、ハードウェア記述の中の組合せ回路部分を実行するかわりに、組合せ回路パラメータ算出部で算出された組合せ回路パラメータに基づいて組合せ回路の特性を実現する。
【００３４】
上記第１５、第１６の発明によれば、ハードウェアのシミュレーションをする際に、組合せ回路のシミュレーション記述を簡略化して実行することによりシミュレーション全体の速度を高速化することができる。
【００３５】
第１７の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、被デバッグソフトウェア実行部からハードウェア記述部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、条件判定部の判定結果がアクセスを許可する場合に被デバッグソフトウェア実行部からハードウェア記述部の仮想メモリ空間へのアクセスを実行させるアクセス制御部と、条件判定部の判定結果がアクセスを許可しない場合にハードウェア記述の中の特定のハードウェア要素を直接操作するハードウェア要素操作部とを備える。
【００３６】
第１８の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、被デバッグソフトウェア実行部からハードウェア記述実行部の仮想メモリ空間へのアクセスをモニタしそのアクセスの内容に応じてそのアクセスを許可するか否かを判定する条件判定部と、条件判定部の判定結果がアクセスを許可する場合に被デバッグソフトウェア実行部からハードウェア記述実行部の仮想メモリ空間へのアクセスを実行させるアクセス制御部と、条件判定部の判定結果がアクセスを許可しない場合にハードウェア記述の中の特定のハードウェア要素を直接操作するハードウェア要素操作部とを備える。
【００３７】
上記第１７、第１８の発明によれば、条件判定部による判定の結果、ソフトウェア側からハードウェアへのアクセスが不許可の場合に、ソフトウェア側からハードウェアの外部バス信号などを操作する代わりに、ソフトウェア側からハードウェアの回路内部の要素を直接操作することでそこへ至るハードウェア要素のシミュレーションを不要にし、シミュレーション全体の速度を高速化することができる。
【００３８】
第１９の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、被デバッグソフトウェアの中に記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、ハードウェア操作コマンド解析部の解析結果に基づいてハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部とを備える。
【００３９】
第２０の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、被デバッグソフトウェアの中に記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、ハードウェア操作コマンド解析部の解析結果に基づいてハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部とを備える。
【００４０】
上記第１９、第２０の発明によれば、ソフトウェア側からハードウェアの回路内部の要素を直接操作することでそこへ至るハードウェア要素のシミュレーションを不要にし、シミュレーション全体の速度を高速化することができる。
【００４１】
第２１の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、ハードウェア記述部の中に記述されている被デバッグソフトウェア実行部操作コマンドを解析し被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備える。
【００４２】
第２２の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア記述の中に記述されている被デバッグソフトウェア実行部操作コマンドを解析し被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備える。
【００４３】
上記第２１、第２２の発明によれば、ハードウェア側からソフトウェアのシミュレータの内部を直接操作することでハードウェア要素のシミュレーションやソフトウェアのシミュレーションの一部を省略し、シミュレーション全体の速度を高速化することができる。
【００４４】
第２３の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、コンパイルされたハードウェア記述であってかつそのハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述部と、テストスクリプトを実行するテストスクリプト実行部と、テストスクリプトに記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、ハードウェア操作コマンド解析部の解析結果に基づいてハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部と、テストスクリプトに記述されている被デバッグソフトウェア実行部操作コマンドを解析し被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備える。
【００４５】
第２４の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、テストスクリプトを実行するテストスクリプト実行部と、テストスクリプトに記述されているハードウェア操作コマンドを解析するハードウェア操作コマンド解析部と、ハードウェア操作コマンド解析部の解析結果に基づいてハードウェア記述の中のハードウェア要素を直接操作するハードウェア要素操作部と、テストスクリプトに記述されている被デバッグソフトウェア実行部操作コマンドを解析し被デバッグソフトウェア実行部を操作するソフトウェア操作コマンド解析部とを備える。
【００４６】
上記第２３、第２４の発明によれば、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションによる自動テストを行う際に、テストスクリプトからソフトウェアのシミュレータの内部やハードウェアのシミュレータの内部を直接操作することでハードウェア要素のシミュレーションやソフトウェアのシミュレーションの一部を省略し、シミュレーション全体の速度を高速化することができる。
【００４７】
第２５の発明のハードウェア記述変換プログラムは、ハードウェア記述の中から過去に抽象化作業が完了している部分と同等部分を抽出する既抽象化部抽出部と、ハードウェア記述の中の既抽象化部抽出部による抽出部分を過去に抽象化作業が完了している抽象化された記述に置き換えるハードウェア記述置換え部とを備える。
【００４８】
第２６の発明のシステムシミュレーション実行プログラムは、被デバッグソフトウェアを実行する被デバッグソフトウェア実行部と、ハードウェア記述に基づいてハードウェアのシミュレーションを実行するとともに被デバッグソフトウェア実行部と連携して動作するハードウェア記述実行部と、ハードウェア記述実行部で実行されるハードウェア記述の中から過去に抽象化作業が完了している部分と同等部分を抽出する既抽象化部抽出部とを備え、ハードウェア記述実行部は、ハードウェア記述の中の過去に抽象化作業が完了している部分と同等部分を実行するかわりに、過去に抽象化作業が完了している抽象化された記述を実行する。
【００４９】
上記第２５、第２６の発明によれば、過去に行われた抽象化の結果を利用することにより、抽象化作業を行うことなく速やかにシミュレーションを行うことが可能となる。また、抽象化された記述を実行することによりシミュレーション全体の速度を高速化することができる。
【００５０】
第２７の発明のシステムシミュレーション実行プログラムは、相互に関連しながら並行的に動作する複数のシミュレーション実行部と、シミュレーション実行部からアクセスされるイベント予約登録部と、イベント予約登録部に設定されたイベントタイミングに応じてシミュレーションの動きを変更させるシミュレーション実行指示部と、シミュレーション実行状況を記録したものを用いて特定の時点の状態にシミュレーション状態を復元させるシミュレーション状態復元部とを備え、一のシミュレーション実行部は他のシミュレーション実行部に関係するイベントを認識したときにイベントタイミングをイベント予約登録部に設定する。
【００５１】
上記第２７の発明によれば、例えば２つのシミュレーション実行部が連携して並列に動作する場合、お互いに関係するイベントが発生する時間までそれぞれ独立してシミュレーションを実行し、そのシミュレーションの中であらかじめ特定したイベントの発生時間までに他方のシミュレーションの動きに関わるイベントが発生してしまった場合、双方のシミュレーションの状態をそのイベントが発生したシミュレーション時間におけるシミュレーション状態まで復元するという仕組みにすることで、シミュレーション実行部が同期を取るために頻繁に切り替わることによるオーバヘッドを削減し、シミュレーションを高速化することができる。
【発明の効果】
【００５２】
近年、システムの複雑化や大規模化が著しく、ソフトウェアのデバッグ工数や検証工数の増大が経営を圧迫するほどになっている。また、ソフトウェアのデバッグや検証に用いるハードウェアを必要なタイミングで入手することもますます困難となっている。
【００５３】
本発明によって、ハードウェアとソフトウェアを高速に協調してシミュレーションすることが可能となり、実際のハードウェアが出来上がる前にハードウェアとソフトウェアの相互関係によって発生する複雑な問題を効率よく解決することができる。これにより、新製品開発の期間短縮やコスト削減に貢献することができる。
【発明を実施するための最良の形態】
【００５４】
以下、本発明の各実施の形態を図面に基づいて説明する。
【００５５】
（実施の形態１）
図１は第１の発明に対応する実施の形態１にかかるシステムシミュレーション実行プログラムを示す。実施の形態１は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアのデバッグには関係のないハードウェアのシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。たとえば、図２８のようにソフトウェア２８０１とハードウェア２８０２が接続されており、ハードウェア２８０２の内部にモジュールＭ１からＭ７が図のような関係で接続されているシステムをシミュレーションする場合、ソフトウェア２８０１の動作に変化を及ぼす可能性のあるモジュールはＭ１、Ｍ２、Ｍ３、Ｍ６、Ｍ７であり、Ｍ４やＭ５のモジュールはソフトウェアの動作には影響を及ぼさない。したがって、ハードウェア２８０２をシミュレーションする際にソフトウェアのデバッグを行うという観点からは無駄であるＭ４とＭ５のモジュールをシミュレーションしなければその分だけ全体のシミュレーション実行速度が向上する。
【００５６】
図１の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３と実行可能なハードウェア記述部１０４は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。ハードウェア要素不活性化指定部１０５はハードウェア要素不活性化箇所情報１０６を読み込んでハードウェア記述部１０４に対してどの部分のシミュレーションを抑制するかを伝えるものである。ここで、ハードウェア要素とは信号線や回路のノードと呼ばれるものを指すことが多いが、場合によってはモジュールや関数もハードウェア要素として扱う。また、ここで活性化とは信号線や回路のノードが操作されてその状態が変化することを指す。
【００５７】
次に、実施の形態１の動作について説明する。
図２９は実行可能なハードウェア記述部１０４の中でハードウェア要素を不活性化するための処理フローである。ハードウェアのシミュレーションは信号線や回路のノードに対して信号値を設定する処理を頻繁に行っている。コンパイル済の実行可能なハードウェア記述部の場合、ハードウェア記述の中から信号値を設定するために信号設定用の関数を呼びだすため、その関数の先頭でＳ４０２の処理を行い、信号値設定を行うかどうか判断させる。抑止信号名リスト２９０１はハードウェア要素不活性化指定部１０５によって設定されたデータ列である。ハードウェアのシミュレータでは信号の変化に反応しながらシミュレーションが行われるので、信号値の設定を行ったり行わなかったりして信号変化を制御することによりシミュレーションを抑制できる。
【００５８】
同様に、シミュレータによってはハードウェアの並列性を実現するために、モジュール関数をスレッド化して時分割的に実行する場合があり、そのモジュール関数単位でシミュレーションを抑止することも有効である。そこでＳ４０４のような並列実行処理のループの中でＳ４０６のように抑止モジュールかどうかの判断を行い、抑止ならばモジュール関数を呼び出さないようにすることで、シミュレーションを抑制する。抑止モジュール名リスト２９０３はハードウェア要素不活性化指定部１０５によって設定されたデータ列である。
【００５９】
図３０はハードウェア要素不活性化箇所情報１０６の例である。不活性化させたい信号名やノード名、モジュール関数名を指定するものである。また、ハードウェア記述のソースコードの行単位で指定することもできるが、この場合、ハードウェア要素不活性化指定部１０５は実行可能なハードウェア記述部１０４のシンボル情報を用いてどの処理を不活性するかを特定し、かつ、実行可能なハードウェア記述部１０４において、行単位でシミュレーションを制御できるようなコードにあらかじめコンパイルする。
【００６０】
ハードウェア要素不活性化箇所情報１０６はテキストデータで開発者が記述すればよいが、設定用ＧＵＩを通じてハードウェア要素不活性化箇所を指定し、その情報をバイナリ形式で保存したりしてもよい。
【００６１】
ハードウェア要素不活性化指定部１０５はハードウェア要素不活性化箇所情報１０６から実行可能なハードウェア記述部１０４のＡＰＩを通じて抑止信号名リスト２９０１や抑止モジュール名リスト２９０３を設定する。
【００６２】
（実施の形態２）
図２は第２の発明に対応する実施の形態２にかかるシステムシミュレーション実行プログラムを示す。実施の形態２は実施の形態１と同様に、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアのデバッグには関係のないハードウェアのシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。実施の形態１との違いは図１の実行可能なハードウェア記述部１０４が図２のハードウェア記述実行部２０２になっていることである。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【００６３】
ハードウェア記述２０１の中の被デバッグソフトウェア１０２のデバッグに不要な部分のシミュレーションを抑制することによってシミュレーションの高速化を図り、ソフトウェアのデバッグを効率よく行うことが可能となる。
【００６４】
（実施の形態３）
図３は第３の発明に対応する実施の形態３にかかるシステムシミュレーション実行プログラムを示す。実施の形態３は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアのデバッグには関係のないハードウェア部分を自動的に決定して、その部分のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。たとえば、図３１のようにソフトウェア３１０１がハードウェア３１０２にアクセスしているシステムをシミュレーションするとする。ここでは、ハードウェア３１０２の回路内部にＮ１からＮ１６のノードがあるという前提で説明する。また、矢印の方向で出力側と入力側を表している。ソフトウェア３１０１はＮ１に対してノードの設定操作を行い、ノードＮ１６からデータとしてのノード状態を取得するものとする。また、ノード１４はＬＳＩの外部端子であり、外部端子の操作をＮ１５によって行っているものとする。ソフトウェアのデバッグにはノードＮ１６の適切な反応が必要であり、ノードＮ１６はソフトウェアからのノードＮ１へのアクセスによって変化する可能性がある。したがって、Ｎ１からＮ１６までのパスのシミュレーションが重要になってくる。一方、Ｎ６やＮ７、Ｎ８、Ｎ１１、Ｎ１２などのノードのシミュレーションはソフトウェアのデバッグには関係がないために、シミュレーションを省略してもよい。
【００６５】
図３の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３と実行可能なハードウェア記述部１０４は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【００６６】
ハードウェア記述構造情報３０１はハードウェア記述部１０４で表されているハードウェア要素間の関連を表現したものであり、ハードウェア記述部１０４のソースコードを構文解析して得たり、あるいはハードウェア記述部１０４の中にハードウェア要素間の関連を取得する部分があれば、そこから抽出したりして得た情報である。
【００６７】
必須ハードウェア要素リスト３０３は図３１の中のノードＮ１やＮ１６、Ｎ１４のようなハードウェアの外部インターフェイスとなるハードウェア要素であり、シミュレーションを行う人がそれを指定したり、あるいは、ハードウェア記述部１０４のソースコードの中にディレクティブと呼ばれるマーキングをつけておき、ツールなどで自動的にそれを収集したりして作るものである。
【００６８】
不要ハードウェア要素探索部３０２はハードウェア記述構造情報３０１や必須ハードウェア要素リスト３０３を使ってシミュレーションに不要な部分を特定する。図３２と図３３がその処理フローである。図３２は不要ハードウェア要素探索処理の概略フローである。最初にＳ５０１でソフトウェアのデバッグに有効なハードウェアの回路内部のパスやハードウェア要素を探索する。次に、Ｓ５０２でそれ以外のハードウェア要素をシミュレーション不要の要素とする。図３３のＳ６００が有効パスの探索のフローである。必須ハードウェア要素リスト３０３の中には図３１のノードＮ１やＮ１４のような必須入力ハードウェア要素と、ノードＮ１６のような必須出力ハードウェア要素がリストとして記録されている。Ｓ６００ではその中の必須出力ハードウェア要素に対して処理を行ってゆく。必須ハードウェア要素リスト３０３から取り出した必須出力ハードウェア要素をＳ６０２で基点要素とし、Ｓ６０３で入力ハードウェア要素の探索を行ってゆく。Ｓ６０４は基点要素から必須入力ハードウェア要素を探索するフローである。このフローでは基点要素に対して出力している要素を遡ってゆき、必須入力ハードウェア要素を探し出す。必須入力ハードウェア要素が見つかれば、それまでのパス上にあるハードウェア要素は有効であり、かつ、それより先のハードウェア要素も有効な要素として記録する。この情報を図３のハードウェア要素不活性化指定部１０５に伝え、ハードウェア要素不活性化指定部１０５はハードウェア記述部１０４のＡＰＩを介してシミュレーションを抑制し、シミュレーション速度の高速化を図る。ハードウェア要素不活性化指定部１０５は実施の形態１のハードウェア要素不活性化指定部１０５と同様のものである。
【００６９】
（実施の形態４）
図４は第４の発明に対応する実施の形態４にかかるシステムシミュレーション実行プログラムを示す。実施の形態４は実施の形態３と同様に、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアのデバッグには関係のないハードウェア部分を自動的に決定して、その部分のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。実施の形態３との違いは、実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【００７０】
図４の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３とハードウェア記述実行部２０２は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【００７１】
ハードウェア記述構造情報３０１は、実施の形態３と同様にハードウェア記述２０１で表されているハードウェア要素間の関連を表現したものであり、ハードウェア記述２０１のソースコードを構文解析して得たり、あるいはハードウェア記述２０１の中にハードウェア要素間の関連を取得する部分があれば、そこから抽出したりして得た情報である。
【００７２】
不要ハードウェア要素探索部３０２は、実施の形態３と同様にハードウェア記述構造情報３０１や必須ハードウェア要素リスト３０３を使ってシミュレーションに不要な部分を特定する。この情報をハードウェア要素不活性化指定部１０５に伝え、ハードウェア要素不活性化指定部１０５はハードウェア記述実行部２０２のＡＰＩを介してシミュレーションを抑制し、シミュレーション速度の高速化を図る。ハードウェア要素不活性化指定部１０５は、実施の形態２のハードウェア要素不活性化指定部１０５と同様のものである。
【００７３】
（実施の形態５）
図５は第５の発明に対応する実施の形態５にかかるシステムシミュレーション実行プログラムを示す。実施の形態５は実施の形態３と同様に、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアのデバッグには関係のないハードウェア部分を自動的に決定して、その部分のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。実施の形態３との違いは一度ハードウェアのシミュレーションを行い、その際のハードウェア要素の活性状態の記録から、ソフトウェアデバッグにとって真に不要な要素を実施の形態３よりも多く発見し、よりシミュレーション速度を高速にするものである。
【００７４】
たとえば、図３４のようにソフトウェア３４０１がハードウェア３４０２にアクセスしているシステムをシミュレーションするとする。ここでは、ハードウェア３４０２の回路内部にＮ１からＮ１６のノードがあるという前提で説明する。また、矢印の方向で出力側と入力側を表している。ソフトウェア３４０１はＮ１に対してノードの設定操作を行い、ノードＮ１６からデータとしてのノード状態を取得するものとする。また、ノード１４はＬＳＩの外部端子であり、外部端子の操作をＮ１５によって行っているものとする。ソフトウェアのデバッグにはノードＮ１６の適切な反応が必要であり、ノードＮ１６はソフトウェアからのノードＮ１へのアクセスによって変化する可能性がある。したがって、Ｎ１からＮ１６までのパスのシミュレーションが重要になってくる。一方、Ｎ６やＮ１２などのノードのシミュレーションはソフトウェアのデバッグには関係がないために、シミュレーションを省略してもよい。実施の形態３ではＮ１０もＮ１６に出力しているノードであるため必要なハードウェア要素として判断していたが、もしもＮ１０が過去に実施したシミュレーションの過程で何らかの要因により一度も変化しなかった場合、それにつながるＮ９のノードのシミュレーションもソフトウェアデバッグには不要であると判断できる。このように、一度シミュレーションを行い、その結果から実施の形態３よりもより多くの不要ハードウェア要素を発見し、それを次のシミュレーションで抑止することでシミュレーション速度を上げることができる。
【００７５】
図５の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３と実行可能なハードウェア記述部１０４は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【００７６】
ハードウェア要素活性状態取得部５０１はハードウェア記述部１０４からの状態設定呼び出しに応じてハードウェア要素活性状態をハードウェア要素活性化履歴記録５０２に記録する。ここで活性化とは信号線や回路のノードが操作されてその状態が変化することを指し、活性状態とはそれらが変化した状態を指している。図３５はハードウェア記述部１０４でハードウェア要素活性状態取得部５０１を呼び出す部分を示したものである。ハードウェア記述部１０４はハードウェアをシミュレーションするものであるため、回路内の信号線に対して値を設定したり、回路を見かけ上平行して動作させるなどのためにモジュール関数などを呼び出したりする。それらの処理Ｓ７０１やＳ７０４の直後のＳ７０２やＳ７０５でハードウェア要素活性状態取得部５０１を呼び出す。図３６はハードウェア要素活性状態取得部５０１のハードウェア要素活性化状態設定処理の処理フローを示したものである。ハードウェア要素活性化履歴記録５０２はハードウェア記述部１０４内の各ハードウェア要素が１度でも操作されたかどうかを記録するものであるため、ハードウェア要素活性状態取得部５０１ではその判定を行い、初めての操作のときのみハードウェア要素活性化履歴記録５０２へその状態を記録する。図３７はハードウェア要素活性化履歴記録５０２の例である。これはＣ言語の共用体型のデータにした場合のものである。ひとつのデータには活性化データタイプと活性化データ名があり、活性化データタイプの内容に応じて活性化データ名のフォーマットが変化する。実際にはデータの検索性を上げるために、ハッシュテーブルを用いるなど、データの持ち方はもっと複雑なものになる。
【００７７】
ハードウェア記述構造情報３０１は、実施の形態３と同様にハードウェア記述部１０４で表されているハードウェア要素間の関連を表現したものであり、ハードウェア記述部１０４のソースコードを構文解析して得たり、あるいはハードウェア記述部１０４の中にハードウェア要素間の関連を取得する部分があれば、そこから抽出したりして得た情報である。
【００７８】
必須ハードウェア要素リスト３０３は、実施の形態３と同様に図３４の中のノードＮ１やＮ１６、Ｎ１４のようなハードウェアの外部インターフェイスとなるハードウェア要素であり、シミュレーションを行う人がそれを指定したり、あるいは、ハードウェア記述部１０４のソースコードの中にディレクティブと呼ばれるマーキングをつけておき、ツールなどで自動的にそれを収集したりして作るものである。
【００７９】
不要ハードウェア要素探索部５０３はハードウェア記述構造情報３０１や必須ハードウェア要素リスト３０３を使ってシミュレーションに不要な部分を特定する。実施の形態３の不要ハードウェア要素探索部３０２と同様のフローであるが、ハードウェア要素活性化履歴記録５０２を反映させるために基点要素から必須入力ハードウェア要素を探索するフローが若干変更されている。図３８にそのフローを示す。Ｓ９０６の処理によって活性化された記録のないハードウェア要素の場合、次の接続を探索する。
【００８０】
探索された不要ハードウェア要素の情報を図５のハードウェア要素不活性化指定部１０５に伝え、ハードウェア要素不活性化指定部１０５はハードウェア記述部１０４のＡＰＩを介してシミュレーションを抑制し、シミュレーション速度の高速化を図る。ハードウェア要素不活性化指定部１０５は、実施の形態１のハードウェア要素不活性化指定部１０５と同様のものである。
【００８１】
（実施の形態６）
図６は第６の発明に対応する実施の形態６にかかるシステムシミュレーション実行プログラムを示す。実施の形態６は実施の形態５と同様に、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアのデバッグには関係のないハードウェア部分を自動的に決定して、その部分のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。実施の形態５との違いは、実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【００８２】
図６の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３とハードウェア記述実行部２０２は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【００８３】
さらに、ハードウェア記述実行部２０２はハードウェアをシミュレーションするものであるため、実施の形態５のハードウェア記述部１０４と同様に図３５のように、回路内の信号線に対して値を設定したり、回路を見かけ上平行して動作させるなどのためにモジュール関数などを呼び出したりする。それらの処理Ｓ７０１やＳ７０４の直後のＳ７０２やＳ７０５でハードウェア要素活性状態取得部５０１を呼び出す。このハードウェア記述実行部２０２からの状態設定呼び出しに応じてハードウェア要素活性状態取得部５０１は、実施の形態５と同様にハードウェア要素活性状態をハードウェア要素活性化履歴記録５０２に記録する。
【００８４】
ハードウェア記述構造情報３０１は、実施の形態５と同様にハードウェア記述２０１で表されているハードウェア要素間の関連を表現したものであり、ハードウェア記述２０１のソースコードを構文解析して得たり、あるいはハードウェア記述２０１の中にハードウェア要素間の関連を取得する部分があれば、そこから抽出したりして得た情報である。
【００８５】
不要ハードウェア要素探索部５０３は、実施の形態５と同様にハードウェア要素活性化履歴記録部５０２やハードウェア記述構造情報３０１、必須ハードウェア要素リスト３０３を使ってシミュレーションに不要な部分を特定する。この情報をハードウェア要素不活性化指定部１０５に伝え、ハードウェア要素不活性化指定部１０５はハードウェア記述実行部２０２のＡＰＩを介してシミュレーションを抑制し、シミュレーション速度の高速化を図る。ハードウェア要素不活性化指定部１０５は、実施の形態２のハードウェア要素不活性化指定部１０５と同様のものである。
【００８６】
（実施の形態７）
図７は第７の発明に対応する実施の形態７にかかるシステムシミュレーション実行プログラムを示す。実施の形態７は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ハードウェアの状態に応じてハードウェア記述の中の一部のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。たとえば、ある機能の有効フラグがＯＦＦを示しているときは、それに関連する機能全体のシミュレーションを停止するというものである。
【００８７】
図７の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３と実行可能なハードウェア記述部１０４は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【００８８】
シミュレーション条件判定はハードウェア要素の変化のタイミングで行うため、ハードウェア記述部１０４は図３９のように信号を操作したり、モジュール関数を呼び出したりする際にハードウェア要素状態取得部７０１のＡＰＩを呼び出す。ハードウェア要素状態取得部７０１はハードウェア記述部１０４からの状態設定呼び出しに応じてシミュレーション条件判定部７０２を呼び出すとともに、条件判定に必要な情報をハードウェア記述部１０４から取得してくる。シミュレーション条件判定に用いる条件はシミュレーション条件記録部７０３に用意されている。図４０がシミュレーション条件記録部７０３の例である。シミュレーション条件記録部７０３が人間に理解できるような形態で記録されている場合、信号名やノード名がシンボルという英数字で記述されていることがあるので、ハードウェア要素状態取得部７０１はハードウェア記述シンボル情報７０４で実際の回路のどの部分にあたるのかの解決を図る。
【００８９】
ハードウェア要素状態取得部７０１に呼び出されたシミュレーション条件判定部７０２はシミュレーション条件記録部７０３の条件を満たしているかどうか判断し、ハードウェア要素の中でシミュレーションを抑止したり、抑止を解除したりするものをハードウェア要素不活性化指定部１０５に伝える。ハードウェア要素不活性化指定部１０５は、実施の形態１のハードウェア要素不活性化指定部１０５と同様のものである。
【００９０】
この実施の形態７についてさらに詳しく説明する。図４０のシミュレーション条件記録部７０３に記録された条件タイプデータは次の条件データに格納されているデータの種類を示すものである。たとえば、条件タイプが「信号状態」であるならば、条件データには「信号名＋比較値」が格納されていることを示している。「信号名＋比較値」は“ＳｉｇｎａｌＡ”、“１”、という具合である。条件タイプが「信号変化」ならば、「信号名＋変化のタイプ」が格納されていることを示している。「信号名＋変化のタイプ」は“ＳｉｇｎａｌＢ”、“０"という具合で、この場合数字の０はハイレベルからローレベルへの変化を示し、数字が１ならばローレベルからハイレベルへの変化を示す。同様に不活性化要素タイプは次の不活性化要素名の種類を示す。不活性化要素タイプが「信号」ならば不活性化要素名には信号名が格納されている。不活性化要素タイプが「モジュール関数」ならば、モジュール関数名が格納されている。このようなデータの保持はプログラム言語の機能の一つである共用体で実現する。
【００９１】
次に判定の方法を説明すると、たとえば、条件タイプデータが「信号状態」で条件データに“ＳｉｇｎａｌＡ”、“１”、不活性化要素タイプデータが「信号名」で不活性化要素名に“ＳｉｇｎａｌＢ”が格納されているとするならば、ハードウェア要素状態取得部７０１がＳｉｇｎａｌＡの状態を取得し、それが１になっている期間ＳｉｇｎａｌＢのシミュレーションを抑止するようにハードウェア要素不活性化指定部１０５を呼び出す。もう少し具体的に説明すると、ハードウェア要素状態取得部７０１はどのような条件で判定するかをあらかじめ取得しておき、トリガ対象となる、たとえば“ＳｉｇｎａｌＡ”に変化があればシミュレーション条件判定部７０２を信号名とその状態を持って呼び出す。ちなみに、ここで、信号名のかわりにあらかじめ付与したＩＤを使って呼び出す方が処理時間を短くすることができる。呼び出されたシミュレーション条件判定部７０２はシミュレーション条件記録部７０３の内容と照らし合わせて、指定された条件となったかどうかを判定し、指定された条件に合致すると判定されたならば、ハードウェア要素不活性化指定部１０５に、たとえば信号“ＳｉｇｎａｌＢ”のシミュレーション停止を指示する。
【００９２】
（実施の形態８）
図８は第８の発明に対応する実施の形態８にかかるシステムシミュレーション実行プログラムを示す。実施の形態８は実施の形態７と同様に、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ハードウェアの状態に応じてハードウェア記述の中の一部のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。実施の形態７との違いは実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【００９３】
図８の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３とハードウェア記述実行部２０２は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【００９４】
シミュレーション条件判定はハードウェア要素の変化のタイミングで行うため、ハードウェア記述実行部２０２は図３９のように信号を操作したり、モジュール関数を呼び出したりする際にハードウェア要素状態取得部７０１のＡＰＩを呼び出す。ハードウェア要素状態取得部７０１はハードウェア記述部１０４からの状態設定呼び出しに応じてシミュレーション条件判定部７０２を呼び出すとともに、条件判定に必要な情報をハードウェア記述実行部２０２から取得してくる。シミュレーション条件判定に用いる条件はシミュレーション条件記録部７０３に用意されている。図４０がシミュレーション条件記録部７０３の例である。シミュレーション条件記録部７０３が人間に理解できるような形態で記録されている場合、信号名やノード名がシンボルという英数字で記述されていることがあるので、ハードウェア要素状態取得部７０１はハードウェア記述実行部２０２などから必要な情報を取得して実際の回路のどの部分にあたるのかの解決を図る。
【００９５】
ハードウェア要素状態取得部７０１に呼び出されたシミュレーション条件判定部７０２はシミュレーション条件記録部７０３の条件を満たしているかどうか判断し、ハードウェア要素の中でシミュレーションを抑止したり、抑止を解除したりするものをハードウェア要素不活性化指定部１０５に伝える。ハードウェア要素不活性化指定部１０５は実施の形態２のハードウェア要素不活性化指定部１０５と同様のものである。
【００９６】
（実施の形態９）
図９は第９の発明に対応する実施の形態９にかかるシステムシミュレーション実行プログラムを示す。実施の形態９は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアの状態に応じてハードウェア記述の中の一部のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。たとえば、被デバッグソフトウェアの中で扱っているある変数が指定された範囲の値ならば、指定されたハードウェアの一部分のシミュレーションを停止するというものである。これにより、ソフトウェアデバッグに必要なハードウェア要素のみをシミュレーションすることができ、シミュレーション速度を改善し、デバッグ効率を上げることができる。
【００９７】
図９の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３と実行可能なハードウェア記述部１０４は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【００９８】
被デバッグソフトウェア実行部１０３は仮想的なマイコンのメモリアクセスやレジスタアクセスのタイミングなどでソフトウェア実行状態取得部９０１を呼び出す。ソフトウェア実行状態取得部９０１はシミュレーション条件判定部９０２が必要とするデータを被デバッグソフトウェア実行部１０３から取得する。シミュレーション条件記録部７０３が人間に理解できるような形態で記録されている場合、変数名などがシンボルという英数字で表現されていることがあるので、ソフトウェア実行状態取得部９０１は被デバッグソフトウェア実行部１０３などからシンボルに関する情報などの必要な情報を取得してソフトウェアの中のどの変数を指すのかの解決を図る。
【００９９】
ソフトウェア実行状態取得部９０１に呼び出されたシミュレーション条件判定部９０２はシミュレーション条件記録部７０３の条件を満たしているかどうか判断し、ハードウェア要素の中でシミュレーションを抑止したり、抑止を解除したりするものをハードウェア要素不活性化指定部１０５に伝える。ハードウェア要素不活性化指定部１０５は、実施の形態１のハードウェア要素不活性化指定部１０５と同様のものである。
【０１００】
この実施の形態９についてさらに詳しく説明する。シミュレーション条件記録部７０３の内部は実施の形態７とほぼ同じであるが、図４０の例と異なる箇所としては、条件タイプデータの“信号状態”や“信号変化”、“モジュール実行”が、条件データの“信号名＋比較値”や“信号名＋変化のタイプ”、“モジュール名”がなくなり、そのかわりにたとえば条件タイプデータとして“変数状態”や“データアクセス”、“関数呼び出し”が、条件データとして“変数名＋比較値”や“開始アドレス＋終了アドレス”、“関数名"などが加わる。
【０１０１】
また、ソフトウェア実行状態取得部９０１は、条件タイプが“変数状態"ならば、その変数の格納箇所や変数のサイズをデバッグ情報などで解決し、被デバッグソフトウェア実行部１０３がそのアドレスにアクセスしたときに、アクセスしたデータ内容を取得し、それをシミュレーション条件判定部９０２へ変数名と共に渡します。条件タイプが”関数名“ならば、被デバッグソフトウェア実行部１０３が関数をアクセスしたときにアクセスした関数名をシミュレーション条件判定部９０２へ渡します。なお、関数名のやりとりを行うかわりにあらかじめ定めたＩＤでやり取りした方が処理速度を向上させることができる。シミュレーション条件判定部９０２は渡された情報やシミュレーション条件記録部７０３の内容をもとに判定を行い、不活性化要素タイプや不活性化要素名を使ってハードウェア要素不活性化指定部１０５に不活性化したい箇所の情報を渡す。
【０１０２】
（実施の形態１０）
図１０は第１０の発明に対応する実施の形態１０にかかるシステムシミュレーション実行プログラムを示す。実施の形態１０は実施の形態９と同様に、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェアの状態に応じてハードウェア記述中の一部のシミュレーションを抑止してシミュレーション全体の速度を高速化するものである。実施の形態９との違いは、実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【０１０３】
図１０の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。被デバッグソフトウェア実行部１０３とハードウェア記述実行部２０２は連携して動作してソフトウェアとハードウェアを合わせたシミュレーションが可能になっている。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【０１０４】
被デバッグソフトウェア実行部１０３は仮想的なマイコンのメモリアクセスやレジスタアクセスのタイミングなどでソフトウェア実行状態取得部９０１を呼び出す。ソフトウェア実行状態取得部９０１はシミュレーション条件判定部９０２が必要とするデータを被デバッグソフトウェア実行部１０３から取得する。シミュレーション条件記録部７０３が人間に理解できるような形態で記録されている場合、変数などがシンボルという英数字で表現されていることがあるので、ソフトウェア実行状態取得部９０１は被デバッグソフトウェア実行部１０３などからシンボルに関する情報などの必要な情報を取得してソフトウェアの中のどれを指すのかの解決を図る。
【０１０５】
ソフトウェア実行状態取得部９０１に呼び出されたシミュレーション条件判定部９０２はシミュレーション条件記録部７０３の条件を満たしているかどうか判断し、ハードウェア要素の中でシミュレーションを抑止したり、抑止を解除したりするものをハードウェア要素不活性化指定部１０５に伝える。ハードウェア要素不活性化指定部１０５は、実施の形態２のハードウェア要素不活性化指定部１０５と同様のものである。
【０１０６】
（実施の形態１１）
図１１は第１１の発明に対応する実施の形態１１にかかるシステムシミュレーション実行プログラムを示す。実施の形態１１は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェア側からハードウェアへのアクセスの中のデバッグに不要なアクセスを中止することによりシミュレーションを抑止してシミュレーション全体の速度を高速化し、ソフトウェアのデバッグの効率を上げようとするものである。
【０１０７】
図１１の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【０１０８】
被デバッグソフトウェア実行部１０３はハードウェア内部のレジスタを操作するなどの際に条件判定部１１０２を呼び出す。条件判定部１１０２はアクセス制御アドレス記録部１１０３からアクセスを許可したり不許可にしたりする条件を取得し、図４２のようなフローで判定を行う。図４１がアクセス制御アドレス記録部１１０３のデータの例である。アクセス制御アドレス記録部１１０３が人間に理解できるような形態で記録されている場合、アドレス値などをシンボルという英数字で表現することがあるので、条件判定部１１０２は被デバッグソフトウェア実行部１０３などからシンボルに関する情報などの必要な情報を取得してそのシンボルが具体的にどのような数値になるのかの解決を図る。条件判定部１１０２でアクセス許可が決定された場合、アクセス制御部１１０１で図４３のようなフローで実行可能なハードウェア記述部１０４のアドレスバス信号やデータバス信号などを操作してハードウェアへアクセスする。
【０１０９】
もう少し詳しく説明する。たとえば、アクセス制御アドレス記録部１１０３に、開始アドレスデータとして１００番地が、終了アドレスデータとして２００番地が、アクセスタイプとしてライトが、制御方法として不許可が記述されているものとすると、被デバッグソフトウェア実行部１０３がハードウェア記述部１０４をアクセスしようとしたときに、たとえば１１０番地にデータをライトしようとしたときにそのアドレスが条件判定部１１０２に伝えられ、条件判定部１１０２はアクセス制御アドレス記録部１１０３の内容に照らし合わせて条件を満たしているかどうかを判定する。上記の例では条件を満たしているので条件判定部１１０２はアクセス制御部１１０１に不許可を通知し、アクセス制御部１１０１ではそれを受けて１１０番地へのアクセスを無視し、ハードウェア記述部１０４へのアクセスを行わないようにする。
【０１１０】
（実施の形態１２）
図１２は第１２の発明に対応する実施の形態１２にかかるシステムシミュレーション実行プログラムを示す。実施の形態１２は実施の形態１１と同様に、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェア側からハードウェアへのアクセスの中のデバッグに不要なアクセスを中止することによりシミュレーションを抑止してシミュレーション全体の速度を高速化し、ソフトウェアのデバッグの効率を上げようとするものである。実施の形態１１との違いは、実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【０１１１】
図１２の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。ハードウェア記述実行部２０２は同様にハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【０１１２】
被デバッグソフトウェア実行部１０３はハードウェア内部のレジスタを操作するなどの際に条件判定部１１０２を呼び出す。条件判定部１１０２はアクセス制御アドレス記録部１１０３からアクセスを許可したり不許可にしたりする条件を取得し、図４２のようなフローで判定を行う。図４１がアクセス制御アドレス記録部１１０３のデータの例である。アクセス制御アドレス記録部１１０３が人間に理解できるような形態で記録されている場合、アドレス値などがシンボルという英数字で表現されることがあるので、条件判定部１１０２は被デバッグソフトウェア実行部１０３などからシンボルに関する情報などの必要な情報を取得してシンボルが具体的にどのような数値になるのかの解決を図る。条件判定部１１０２でアクセス許可が決定された場合、アクセス制御部１１０１で図４３のようなフローで実行可能なハードウェア記述実行部２０２のアドレスバス信号やデータバス信号などを操作してハードウェアへアクセスする。
【０１１３】
（実施の形態１３）
図１３は第１３の発明に対応する実施の形態１３にかかるハードウェア記述変換プログラムを示す。実施の形態１３は、ハードウェアのシミュレーションをする際に、周期回路のシミュレーション記述を簡略化することによりシミュレーション全体の速度を高速化しようとするものである。ソフトウェアのシミュレーションと連携してシミュレーションすることにより、シミュレータを使ったソフトウェアの効率良いデバッグが可能となる。
【０１１４】
例えば、図４４のＰ３００のようなＶｅｒｉｌｏｇＨＤＬで記述されたカウンタ回路があるとする。この回路は８ビットの周期カウンタであり、カウンタ値が１００になったときだけ「repeat#signal」が１になる。このような記述ではクロックが立ち上がるごとにＬ０８行目から始まるモジュールが評価され、カウンタ値が１ずつカウントアップするので非常に時間のかかるシミュレーションとなる。そこで、クロックの周期が決まっているという前提を考慮して、「repeat#signal」が周期的に変化するようにＰ３０１のように書き換える。この記述の場合、信号の変化だけで回路記述が評価され、かつ、カウンタのカウントアップも行われないので高速なシミュレーションが可能となる。
【０１１５】
図１３のハードウェア記述１３０１が元の記述であり、ハードウェア記述変換プログラム１３０２を経由することで、高速なシミュレーションができるハードウェア記述１３０６が生成される。ハードウェア記述変換プログラム１３０２の中にはハードウェア記述１３０１の中の周期回路を抽出する周期回路抽出部１３０３があり、周期回路抽出後、周期回路の周期時間を算出する周期回路パラメータ算出部１３０４がある。これらの処理のあとに、周期回路変換部１３０５でハードウェア記述１３０１の内容を修正してハードウェア記述１３０６を作り出す。
【０１１６】
図４５に周期回路抽出部１３０３でのカウンタ回路探索処理を示す。カウンタの場合、回路要素に対して加算する箇所があるので、それを含むモジュールを探索する。カウンタを含むモジュールが発見できたならば、一般にカウンタ回路にはクリアなどの初期化処理も含まれているので、その処理も抽出する。また、カウンタの周期を後で算出するためにカウンタクロックの信号名も抽出する。カウンタの動作をＯＮしたりＯＦＦしたりする機能があればその条件式も抽出する。
【０１１７】
図４６に周期回路抽出部１３０３の中の周期信号探索処理のフローを示す。一般に、周期的な動作をする信号はカウンタ値の一定の数値で反応するように記述されていることが多いため、カウンタ値と比較処理をしている部分を抽出する。
【０１１８】
図４７に周期回路パラメータ算出部１３０４のフローを示す。カウンタクロックの周期やカウンタのビット幅からカウンタの周期を求める。カウンタ値の比較値から周期信号の周期を求める。
【０１１９】
図４８に周期回路変換部１３０５の周期回路変換処理のフローを示す。最初にハードウェア記述１３０１の中のカウンタ回路の式やモジュールを削除し、さらに、周期信号を作っている式も削除する。その後で、元の回路記述と同じ仕様の周期信号が得られるように代わりの式とそれを含むモジュールを作って挿入する。
【０１２０】
（実施の形態１４）
図１４は第１４の発明に対応する実施の形態１４にかかるシステムシミュレーション実行プログラムを示す。実施の形態１４は実施の形態１３と同様に、ハードウェアのシミュレーションをする際に、周期回路のシミュレーション記述を簡略化することによりシミュレーション全体の速度を高速化しようとするものである。実施の形態１３との違いはハードウェア記述をソースコードレベルで高速化の変換をしてからコンパイルするのではなく、ハードウェア記述されたコードを直接ハードウェア記述実行部が実行する点にある。さらに、ハードウェア記述どおりに実行するのではなく、高速化したい周期回路を実行する代わりに周期回路を用いて作り出される周期信号の仕様を満たす動作だけを行う。
【０１２１】
図１４の周期回路抽出部１４０１や周期回路パラメータ算出部１４０２は実施の形態１３のものと同じである。これらで得られた情報をハードウェア記述実行部１３０３へ渡す。ハードウェア記述実行部１３０３はハードウェア記述２０１を解析してから実行するが、抽出された周期回路を実行しようとする際に、その記述の実行を止めて、その代わりに周期信号の変化を起こすようにする。一般的にハードウェア記述実行部では、イベントの予約として将来発生する信号の変化を登録する機構があるので、それを使って周期信号の動きを実現する。これにより、カウンタ回路を元の記述のままシミュレーションをすることなく、簡便なシミュレーションの処理で同様の効果を得ることができ、シミュレーション速度を上げることができる。
【０１２２】
（実施の形態１５）
図１５は第１５の発明に対応する実施の形態１５にかかるハードウェア記述変換プログラムを示す。実施の形態１５は、ハードウェアのシミュレーションをする際に、組合せ回路のシミュレーション記述を簡略化することによりシミュレーション全体の速度を高速化しようとするものである。ソフトウェアのシミュレーションと連携してシミュレーションすることにより、シミュレータを使ったソフトウェアの効率良いデバッグが可能となる。
【０１２３】
例えば、図４９のＰ４００のようなＶｅｒｉｌｏｇＨＤＬで記述された組合せ回路があるとする。この回路は３つの入力信号を相互に演算処理をしてゆくものだが、それぞれの処理に少しずつ異なる遅延時間が入っているので、入力信号の変化によっては出力波形が複雑に変化する可能性がある。また、このように遅延時間を多く含む回路をシミュレーションを行うと細かな信号変化が数多く発生し非常に時間のかかるシミュレーションとなる。一方、ソフトウェアのデバッグのためのハードウェアのシミュレーションを行う場合、厳密な信号変化は必要とされないことも多い。そこで、Ｐ４０１のように書き換えることで出力信号に至る中間の信号のシミュレーションを省略することができ、シミュレーションの高速化を図ることができる。この例では入力信号の変化が出力に伝わる時間がもっとも長いものは入力信号「in#C」に関わるものなので、４０＋５０＋３０＝１２０の遅延時間で出力信号「out#X」が変化する。
【０１２４】
図１５のハードウェア記述１３０１が元の記述であり、ハードウェア記述変換プログラム１３０２を経由することで、高速なシミュレーションができる変更後のハードウェア記述１３０６が生成される。ハードウェア記述変換プログラム１３０２の中にはハードウェア記述１３０１の中の組合せ回路を抽出する組合せ回路抽出部１５０１があり、組合せ回路抽出後、組合せ回路の遅延時間を算出する組合せ回路パラメータ算出部１５０２がある。これらの処理のあとに、組合せ回路変換部１５０３でハードウェア記述１３０１の内容を修正してハードウェア記述１３０６を作り出す。
【０１２５】
図５０に組合せ回路抽出部１５０１での組合せ回路探索フローを示す。すべてのモジュールを探索し、代入文を抽出してゆく。
【０１２６】
図５１に組合せ回路パラメータ算出部１５０２の中の組合せ回路パラメータ算出処理のフローを示す。組合せ回路抽出部１５０１で得られた代入文をスコープに注意しながら右辺を展開してゆく。展開の際に最大遅延時間を求めながら処理する。展開の最後に代入文の最大遅延時間を記録する。
【０１２７】
図５２に組合せ回路変換部１５０３の組合せ回路変換処理のフローを示す。最初にハードウェア記述１３０１の中の組合せ回路の代入文を削除する。その後で、遅延時間のついた展開後の代入文を挿入する。
【０１２８】
（実施の形態１６）
図１６は第１６の発明に対応する実施の形態１６にかかるシステムシミュレーション実行プログラムを示す。実施の形態１６は実施の形態１５と同様に、ハードウェアのシミュレーションをする際に、組合せ回路のシミュレーション記述を簡略化することによりシミュレーション全体の速度を高速化しようとするものである。実施の形態１５との違いはハードウェア記述をソースコードレベルで高速化の変換をしてからコンパイルするのではなく、ハードウェア記述されたコードを直接ハードウェア記述実行部が実行する点にある。さらに、ハードウェア記述どおりに実行するのではなく、簡略化した組合せ回路を実行する。
【０１２９】
図１６の組合せ回路抽出部１５０１や組合せ回路パラメータ算出部１５０２は実施の形態１５のものと同じである。これらで得られた情報をハードウェア記述実行部１６０３へ渡す。ハードウェア記述実行部１６０３はハードウェア記述２０１を解析してから実行するが、抽出された組合せ回路を実行しようとする際に、その記述の実行を止めて、その代わりに簡略化した組み合わせ回路を実行するようにする。一般的にハードウェア記述実行部では、イベントの予約として将来発生する信号の変化を登録する機構があるので、それを使って組合せ回路が代入する信号の動きを実現する。これにより、元の記述のままシミュレーションをすることなく、簡便なシミュレーションの処理でほぼ同様の効果を得ることができ、シミュレーション速度を上げることができる。
【０１３０】
（実施の形態１７）
図１７は第１７の発明に対応する実施の形態１７にかかるシステムシミュレーション実行プログラムを示す。実施の形態１７は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェア側からハードウェアの外部バス信号などを操作する代わりにソフトウェア側からハードウェアの回路内部の要素を直接操作することでそこへ至るハードウェア要素のシミュレーションを不要にし、これによりシミュレーション全体の速度を高速化してソフトウェアのデバッグの効率を上げようとするものである。
【０１３１】
図１７の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【０１３２】
被デバッグソフトウェア実行部１０３はハードウェア内部のレジスタを操作するなどの際に条件判定部１１０２を呼び出す。条件判定部１１０２はハードウェア要素操作情報記録部１７０１からハードウェアのバスへのアクセスを許可したり不許可にしたりする条件を取得し、図５３のようなフローで判定を行う。図５４がハードウェア要素操作情報記録部１７０１のデータの例であり、この中には判定に使われるバスアクセスの条件やハードウェアのバスのアクセスの代わりに行うハードウェア要素操作の情報などが含まれる。ハードウェア要素操作情報記録部１７０１のデータ内容が人間に理解できるような形態で記録されている場合、アドレス値がシンボルという英数字で表現されていることがあり、条件判定部１１０２は被デバッグソフトウェア実行部１０３やあるいは被デバッグソフトウェアのシンボル情報１７０３などからシンボルに関する情報などの必要な情報を取得してシンボルが具体的にどのような数値を指すのかの解決を図る。条件判定部１１０２でアクセス許可が決定された場合、アクセス制御部１１０１で図５５のようなフローで実行可能なハードウェア記述部１０４のアドレスバス信号やデータバス信号などを操作してハードウェアへアクセスする。一方、条件判定部１１０２でアクセス不許可が決定された場合、ハードウェアのバスのアクセスに代わって、ハードウェア要素操作部１７０２がハードウェア記述部１０４の中のハードウェア要素を図５６のようなフローを使って直接操作する。どの要素を操作するかはハードウェア要素操作情報記録部１７０１に書かれているが、そのデータ内容が人間に理解できるような形態で記録されている場合、信号名やノード名がシンボルという英数字で表現されていることがあり、ハードウェア要素操作部１７０２はハードウェア記述１０７をコンパイルした際などに得られるハードウェア記述シンボル情報７０４などからシンボルに関する情報などの必要な情報を取得してシンボルが回路のどの部分を指すのかの解決を図る。
【０１３３】
もう少し詳しく説明する。たとえば、ハードウェア要素操作情報記録部１７０１に、開始アドレスデータとして２００番地、アクセスタイプデータとしてライト、操作するノードのファイル名としてHardware.v、操作するノードのノード名としてmodule1.register1というものが設定されているものとすると、被デバッグソフトウェア実行部１０３がハードウェア記述部１０４に対して２００番地にアクセスしたときに、条件判定部１１０２はそれを検出し、アクセス制御部１１０１に対してアクセス不許可を通知する。さらに、ハードウェア要素操作部１７０２に対して、module1.register1へ２００番地に書き込もうとしたデータをセットする。実際のハードウェアの記述をそのままシミュレーションするとソフトウェア側からmodule1.register1のノードにデータをセットするまでに多くのノードが動作しなければならずシミュレーション時間を必要としてしまうが、この方法では直接module1.register1を操作するので、途中のシミュレーションを省略でき、その分高速になる。このハードウェア要素操作情報記録部１７０１ではソフトウェア実行部１０３からのアクセスサイズとノードのサイズが同じということを前提としているが、ソフトウェア実行部１０３からのアクセスデータのビットとハードウェアのノードとの関連付けができるようにすると利用範囲が広くなる。
【０１３４】
また、ハードウェア要素操作部１７０２の動作を示す図５６では、ハードウェア要素操作情報記録部１７０１のアクセスタイプがライトのときのフローを示しており、リードのときはＳ２２０２の内容に代えて「ハードウェア記述部のＡＰＩを呼び出して指定されたハードウェア要素の値を取得する」という内容になる。アクセスタイプがライトのときのＳ２２０２に記載された「指定された値」というのは、条件判定部１１０２が被デバッグソフトウェア実行部１０３から受け取ったデータであり、図５４のハードウェア要素操作情報記録部１７０１に示された「操作するノードのノード名」のところに、被デバッグソフトウェア実行部１０３から受け取ったデータを設定する。アクセスタイプがリードのときはハードウェア要素操作情報記録部１７０１に示された「操作するノードのノード名」のところからノードの状態を取得し、被デバッグソフトウェア実行部１０３へその状態をリードデータとして返す。
【０１３５】
（実施の形態１８）
図１８は第１８の発明に対応する実施の形態１８にかかるシステムシミュレーション実行プログラムを示す。実施の形態１８は、実施の形態１７と同様にソフトウェア側からハードウェアの外部バス信号などを操作する代わりにソフトウェア側からハードウェアの回路内部の要素を直接操作することでそこへ至るハードウェア要素のシミュレーションを不要にし、これによりシミュレーション全体の速度を高速化してソフトウェアのデバッグの効率を上げようとするものである。実施の形態１７との違いは、実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【０１３６】
図１８の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【０１３７】
被デバッグソフトウェア実行部１０３はハードウェア内部のレジスタを操作するなどの際に条件判定部１１０２を呼び出す。条件判定部１１０２はハードウェア要素操作情報記録部１７０１からハードウェアのバスへのアクセスを許可したり不許可にしたりする条件を取得し、判定を行う。ハードウェア要素操作情報記録部１８０１のデータ内容が人間に理解できるような形態で記録されている場合、条件判定部１１０２は被デバッグソフトウェア実行部１０３やあるいは被デバッグソフトウェアのシンボル情報１７０３などからシンボルに関する情報などの必要な情報を取得して解決を図る。条件判定部１１０２でアクセス許可が決定された場合、アクセス制御部１１０１でハードウェア記述実行部２０２のアドレスバス信号やデータバス信号などを操作してハードウェアへアクセスする。一方、条件判定部１１０２でアクセス不許可が決定された場合、ハードウェアのバスのアクセスに代わって、ハードウェア要素操作部１８０２がハードウェア記述実行部２０２の中のハードウェア要素を直接操作する。どの要素を操作するかはハードウェア要素操作情報記録部１８０１に書かれているが、そのデータ内容が人間に理解できるような形態で記録されている場合、ハードウェア要素操作部１８０２はハードウェア記述実行部２０２などからシンボルに関する情報などの必要な情報を取得して解決を図る。
【０１３８】
（実施の形態１９）
図１９は第１９の発明に対応する実施の形態１９にかかるシステムシミュレーション実行プログラムを示す。実施の形態１９は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェア側からハードウェアの回路内部の要素を直接操作することでそこへ至るハードウェア要素のシミュレーションを不要にし、これによりシミュレーション全体の速度を高速化してソフトウェアのデバッグの効率を上げようとするものである。たとえば、図５７に示すように、実際のソースコードではＬ０９行目のようにマイコンのメモリ空間へ直接アクセスするがシミュレーションでのデバッグのときはＬ０７行目のようにハードウェアのシミュレータの内部の信号に直接数値を設定する。シミュレーションでマイコンのメモリ空間へ直接アクセスすると、たとえハードウェアの中の一部の回路にアクセスするだけでも、マイコンのデータバスなどに接続されている多くのハードウェア要素のシミュレーションが行われることになりその時間が無駄となる。そこで図５７のようにハードウェアの内部を直接操作することで無駄なシミュレーションが行われなくなりシミュレーションを高速化することができる。また本発明はハードウェアの操作の処理をソフトウェアのソースコードの中に簡単に記述できる。
【０１３９】
図１９の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【０１４０】
被デバッグソフトウェア実行部１０３の中のソフトウェア実行処理のフローは図５８のようになっている。通常はＳ２３０６のように命令を次々と実行していくが、関数呼び出しの命令がある場合、その関数呼び出しがハードウェア操作用の関数かどうかを判断し、それがハードウェア操作用の関数であれば、その関数呼び出しの際に付加された引数の内容を取得し、図１９のハードウェア操作コマンド解析部１９０１を呼び出す。
【０１４１】
ハードウェア操作コマンド解析部１９０１では図５９のようなフローで処理を行う。最初に、被デバッグソフトウェア実行部１０３で得られたハードウェア操作コマンドの文字列からコマンドの種類やそのコマンドのパラメータを分解して取得する。次に、ハードウェア操作コマンド解析部１９０１は解析したコマンドに応じてハードウェア要素操作部１７０２を呼び出し、ハードウェア要素操作部１７０２はハードウェア記述部１０４の中のハードウェア要素を直接操作する。どの要素を操作するかはハードウェア操作コマンド解析部１９０１で解析したコマンドパラメータに書かれているが、そのデータ内容が人間に理解できるような形態で記録されている場合、信号名やノード名などがシンボルで表現されていることがあり、ハードウェア要素操作部１７０２はハードウェア記述部１０４をコンパイルした際などに得られるハードウェア記述シンボル情報７０４などからシンボルに関する情報などの必要な情報を取得してシンボルが回路のどの部分を指すのかの解決を図る。
【０１４２】
（実施の形態２０）
図２０は第２０の発明に対応する実施の形態２０にかかるシステムシミュレーション実行プログラムを示す。実施の形態２０は、実施の形態１９と同様にソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ソフトウェア側からハードウェアの回路内部の要素を直接操作することでそこへ至るハードウェア要素のシミュレーションを不要にし、これによりシミュレーション全体の速度を高速化してソフトウェアのデバッグの効率を上げようとするものである。実施の形態１９との違いは、実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【０１４３】
図２０の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【０１４４】
被デバッグソフトウェア実行部１０３の中のソフトウェア実行処理のフローは図５８のようになっている。通常はＳ２３０６のように命令を次々と実行していくが、関数呼び出しの命令がある場合、その関数呼び出しがハードウェア操作用の関数かどうかを判断し、それがハードウェア操作用の関数であれば、その関数呼び出しの際に付加された引数を取得し、図２０のハードウェア操作コマンド解析部１９０１を呼び出す。
【０１４５】
ハードウェア操作コマンド解析部１９０１では図５９のようなフローで処理を行う。最初に、被デバッグソフトウェア実行部１０３で得られたハードウェア操作コマンドの文字列からコマンドの種類やそのコマンドのパラメータを分解して取得する。次に、ハードウェア操作コマンド解析部１９０１は解析したコマンドに応じてハードウェア要素操作部１８０２を呼び出し、ハードウェア要素操作部１８０２はハードウェア記述部１０４の中のハードウェア要素を直接操作する。どの要素を操作するかはハードウェア操作コマンド解析部１９０１で解析したコマンドパラメータに書かれているが、そのデータ内容が人間に理解できるような形態で記録されている場合、信号名やノード名がシンボルという英数字で表現されることがあり、ハードウェア要素操作部１８０２はハードウェア記述実行部２０２などからシンボルに関する情報などの必要な情報を取得してシンボルが回路のどの部分を指すのかの解決を図る。
【０１４６】
（実施の形態２１）
図２１は第２１の発明に対応する実施の形態２１にかかるシステムシミュレーション実行プログラムを示す。実施の形態２１は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ハードウェア側からソフトウェアのシミュレータの内部を直接操作することでハードウェア要素のシミュレーションやソフトウェアのシミュレーションの一部を省略し、これによりシミュレーション全体の速度を高速化してソフトウェアのデバッグの効率を上げようとするものである。たとえば、ハードウェアのシミュレータ側からソフトウェア側に対して割込みを発生させ、ソフトウェア側が割込み処理を行い、変数の内容をセットするという処理があるとすると、最終目的が変数の内容のセットであるから、ハードウェアの記述の中でソフトウェアの変数の設定ができれば、途中の処理のシミュレーションを省くことができる。図６０がＶｅｒｉｌｏｇＨＤＬによる記述例であり、Ｌ１４行目がソフトウェアのシミュレータを操作する部分である。本発明によってハードウェア記述内に簡単にソフトウェアのシミュレータの操作コマンドを記述でき、効率の良いソフトウェアのデバッグが可能となる。
【０１４７】
図２１の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【０１４８】
実行可能なハードウェア記述部１０４でソフトウェア操作をする関数を呼び出したときに、そのパラメータを伴ってソフトウェア操作コマンド解析部２１０１を呼び出す。ソフトウェア操作コマンド解析部２１０１では図６１のフローのように、コマンド文字列を解析し、コマンドの種類やパラメータを抽出して被デバッグソフトウェア実行部１０３を呼び出す。ソフトウェア操作コマンド解析部２１０１で抽出したコマンドパラメータが人間に理解できるような形態で書かれている場合、変数やアドレス値などがシンボルという英数字で表現されることがあり、被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２をコンパイルした際などに得られるソフトウェアのシンボル情報１７０３などからシンボルに関する情報などの必要な情報を取得してシンボルが何を指すのかの解決を図る。
【０１４９】
（実施の形態２２）
図２２は第２２の発明に対応する実施の形態２２にかかるシステムシミュレーション実行プログラムを示す。実施の形態２２は、実施の形態２１と同様にソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションする際に、ハードウェア側からソフトウェアのシミュレータの内部を直接操作することでハードウェア要素のシミュレーションやソフトウェアのシミュレーションの一部を省略し、これによりシミュレーション全体の速度を高速化してソフトウェアのデバッグの効率を上げようとするものである。実施の形態２１との違いは、実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【０１５０】
図２２の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【０１５１】
ハードウェア記述実行部２０２でソフトウェア操作をする関数を呼び出したときに、そのパラメータを伴ってソフトウェア操作コマンド解析部２１０１を呼び出す。ソフトウェア操作コマンド解析部２１０１では図６１のフローのように、コマンド文字列を解析し、コマンドの種類やパラメータを抽出して被デバッグソフトウェア実行部１０３を呼び出す。ソフトウェア操作コマンド解析部２１０１で抽出したコマンドパラメータが人間に理解できるような形態で書かれている場合、変数名やアドレス値などがシンボルという英数字で表現されることがあり、被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２をコンパイルした際などに得られるソフトウェアのシンボル情報１７０３などからシンボルに関する情報などの必要な情報を取得してシンボルが何を指すのかの解決を図る。
【０１５２】
（実施の形態２３）
図２３は第２３の発明に対応する実施の形態２３にかかるシステムシミュレーション実行プログラムを示す。実施の形態２３は、ソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションによる自動テストを行う際に、テストスクリプトからソフトウェアのシミュレータの内部やハードウェアのシミュレータの内部を直接操作することでハードウェア要素のシミュレーションやソフトウェアのシミュレーションの一部を省略し、これによりシミュレーション全体の速度を高速化して自動テストの効率を上げようとするものである。たとえば、ハードウェアやソフトウェアを特定の状態に設定したい場合、ハードウェアの外部信号の操作だけでその状態まで移行するには多くのシミュレーション時間を要する可能性がある。そこで、たとえば図６２のようにハードウェアのシミュレータやソフトウェアのシミュレータ内部の状態をテストスクリプトで直接操作することで、すばやくテストに必要な状態を作り出し、システムの検証時間を短縮させる。
【０１５３】
図２３の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。実行可能なハードウェア記述部１０４は、Ｃ言語やＣ＋＋言語などのプログラム言語、あるいは、ＳｙｓｔｅｍＣやＳｐｅｃＣなどのシステム記述言語、あるいは、ＶＨＤＬやＶｅｒｉｌｏｇＨＤＬなどのハードウェア記述言語を用いてハードウェアの動作を記述したソースコードをパソコンやワークステーションなどのホストコンピュータ上で実行できるようにコンパイルしたものである。
【０１５４】
テストスクリプト実行部２３０１はテストスクリプト２３０２を読み込んでそれを実行する。テストスクリプトの実行直前にテストスクリプトをコンパイルし、コンパイルしたものを実行してもよい。テストスクリプト実行部２３０１では図６３のフローのように、テストスクリプトのコマンドがハードウェア操作コマンドかソフトウェア操作コマンドかを判別し、それに応じてハードウェア操作コマンド解析部１９０１かソフトウェア操作コマンド解析部２１０１を呼び出す。
【０１５５】
ハードウェア操作コマンド解析部１９０１は実施の形態１９と同様にコマンドを解析し、ハードウェア要素操作部１７０２を呼び出し、ハードウェア要素操作部１７０２はハードウェア記述部１０４のＡＰＩを呼び出してハードウェアのシミュレーションを制御する。
【０１５６】
ソフトウェア操作コマンド解析部２１０１は実施の形態２１と同様にコマンドを解析し、ソフトウェア実行部１０３を呼び出してソフトウェアのシミュレーションを制御する。
【０１５７】
（実施の形態２４）
図２４は第２４の発明に対応する実施の形態２４にかかるシステムシミュレーション実行プログラムを示す。実施の形態２４は実施の形態２３と同様にソフトウェアのシミュレータとハードウェアのシミュレータを連携させてシミュレーションによる自動テストを行う際に、テストスクリプトからソフトウェアのシミュレータの内部やハードウェアのシミュレータの内部を直接操作することでハードウェア要素のシミュレーションやソフトウェアのシミュレーションの一部を省略し、これによりシミュレーション全体の速度を高速化して自動テストの効率を上げようとするものである。実施の形態２３との違いは実施の形態２のようにハードウェア記述されたコードをハードウェア記述実行部が実行する点にある。
【０１５８】
図２４の被デバッグソフトウェア実行部１０３は被デバッグソフトウェア１０２を読み込んでそれを実行する。被デバッグソフトウェア実行部１０３はマイコンの命令をひとつひとつ実行する命令セットシミュレーションＩＳＳであってもよいし、あるいは、被デバッグソフトウェア１０２を中間言語に変換したものを実行するタイプのものでもよい。ハードウェア記述実行部２０２はハードウェア記述２０１を読み込んでその記述内容を実行するもので、一般的にはインタープリタが用いられ、最初に中間言語に変換してからその中間言語を実行することが多いが、実行時に部分的にコンパイルするジャストインタイムコンパイラ方式を採用してもよく、あるいは、ハードウェア記述内容をシミュレータが実行しやすいデータに変換し、それを参照しながら実行してもよい。
【０１５９】
テストスクリプト実行部２３０１はテストスクリプト２３０２を読み込んでそれを実行する。テストスクリプトの実行直前にテストスクリプトをコンパイルし、コンパイルされたものを実行してもよい。テストスクリプト実行部２３０１では図６３のフローのように、テストスクリプトのコマンドがハードウェア操作コマンドかソフトウェア操作コマンドかを判別し、それに応じてハードウェア操作コマンド解析部１９０１かソフトウェア操作コマンド解析部２１０１を呼び出す。
【０１６０】
ハードウェア操作コマンド解析部１９０１は実施の形態２０と同様にコマンドを解析し、ハードウェア要素操作部１８０２を呼び出し、ハードウェア要素操作部１８０２はハードウェア記述実行部２０２のＡＰＩを呼び出してハードウェアのシミュレーションを制御する。
【０１６１】
ソフトウェア操作コマンド解析部２１０１は実施の形態２２と同様にコマンドを解析し、ソフトウェア実行部１０３を呼び出してソフトウェアのシミュレーションを制御する。
【０１６２】
（実施の形態２５）
図２５は第２５の発明に対応する実施の形態２５にかかるハードウェア記述変換プログラムを示す。実施の形態２５は、ハードウェア記述を修正した際に、修正前のハードウェア記述に対して高速化のために行った抽象化処理を修正後のハードウェア記述に反映させるためのプログラムである。これにより、時間のかかる抽象化処理を必要最小限にとどめることができ、シミュレータを使った効率良いデバッグが可能となる。
【０１６３】
図２５の新ハードウェア記述２５０１が何らかの理由で修正した後のハードウェア記述であり、その他に修正前のハードウェア記述に対して行った抽象化に関する情報として抽象化済みハードウェア記述２５０２と図６４のような抽象化箇所記録２５０３がある。抽象化済みハードウェア記述２５０２にはたとえば図４４のＰ３０１のＬ０８行目からＬ２６行目までが記録される。
【０１６４】
ハードウェア記述変換プログラム２５０４を経由することで、高速なシミュレーションができる変更後のハードウェア記述１３０６が生成される。ハードウェア記述変換プログラム２５０４の中にはハードウェア記述２５０１の中の既抽象化箇所を抽出する既抽象化部抽出部２５０５がある。この処理のあとに、ハードウェア記述置換え部２５０６で新ハードウェア記述２５０１の内容を修正してハードウェア記述１３０６を作り出す。
【０１６５】
まず、既抽象化部抽出部２５０５は図６５のようなフローで抽象化箇所記録２５０３の情報を用いて新ハードウェア記述２５０１の中から既に抽象化されている部分を探し出し、抽象化部抽出記録２５０７へ記録する。
【０１６６】
次に、ハードウェア記述置換え部２５０６は図６６に示すように新ハードウェア記述２５０１の内容をコピーし、その中の抽象化される前のコードを抽象化部抽出記録２５０７を使って削除した後に、抽象化済みハードウェア記述２５０２の内容を取得し、変更後ハードウェア記述１３０５へ挿入する。
【０１６７】
このようにして、既に行われた抽象化の結果を利用することにより、抽象化作業を行うことなく速やかにシミュレーションを行うことが可能となる。
【０１６８】
（実施の形態２６）
図２６は第２６の発明に対応する実施の形態２６にかかるシステムシミュレーション実行プログラムを示す。実施の形態２６は実施の形態２５と同様にハードウェア記述を修正した際に、修正前のハードウェア記述に対して高速化のために行った抽象化結果を使ってハードウェア記述を実行し、抽象化作業を省略して効率よくデバッグを行うことができるものである。実施の形態２５との違いはハードウェア記述をソースコードレベルで高速化のための変換をしてからコンパイルするのではなく、ハードウェア記述されたコードを直接ハードウェア記述実行部が実行する点にある。さらに、ハードウェア記述どおりに実行するのではなく、抽象化した回路を実行する。
【０１６９】
図２６の新ハードウェア記述２５０１が何らかの理由により修正した後のハードウェア記述であり、その他に修正前のハードウェア記述に対して行った抽象化に関する情報として抽象化済みハードウェア記述２５０２と図６４のような抽象化箇所記録２５０３がある。抽象化済みハードウェア記述２５０２にはたとえば図４４のＰ３０１のＬ０８行目からＬ２６行目までが記録される。あるいは、ハードウェア記述実行部２６０１が実行しやすいデータ形式で記録していてもよい。
【０１７０】
まず、既抽象化部抽出部２５０５は図６５のようなフローで抽象化箇所記録２５０３の情報を用いて新ハードウェア記述２５０１の中から既に抽象化されている部分を探し出し、抽象化部抽出記録２５０７へ記録する。
【０１７１】
次に、ハードウェア記述実行部２６０１は図６７に示すフローのように新ハードウェア記述２５０１の内容を実行する。実行の際に、抽象化部抽出記録２５０７をもとに過去に抽象化されたハードウェア記述かどうかを判定し、過去に抽象化されたものであれば、抽象化されたものを実行する。
【０１７２】
このようにして、既に行われた抽象化の結果を利用することにより、抽象化作業を行うことなく速やかにシミュレーションを行うことが可能となる。
【０１７３】
（実施の形態２７）
図２７は第２７の発明に対応する実施の形態２７にかかるシミュレーションシステム実行プログラムを示す。実施の形態２７は、２つのシミュレータが連携して並列に動作する場合、お互いに関係するイベントが発生する時間までそれぞれ独立してシミュレーションを実行し、そのシミュレーションの中であらかじめ特定したイベントの発生時間までに他方のシミュレーションの動きに関わるイベントが発生してしまった場合、双方のシミュレーションの状態をそのイベントが発生したシミュレーション時間におけるシミュレーション状態まで復元するという仕組みにすることで、シミュレーション実行部が同期を取るために頻繁に切り替わることによるオーバヘッドを削減し、シミュレーションを高速化することが可能となるものである。
【０１７４】
図２７のシミュレーション実行部Ａ２７０１とシミュレーション実行部Ｂ２７０２は連携し、かつ、並列実行するものである。一般的には短いサイクルで相互に実行を切り替えることで同期をとってゆくが、本発明ではそれよりも長い時間間隔で切り替えたり、イベントの発生のタイミングで切り替えたりする。シミュレーション実行部２７０１、２７０２はそれぞれ、他方のシミュレーション実行に関係するイベントが発生することを認識したときは、そのイベントをイベント予約登録部２７０３へ登録し、イベント予約登録部２７０３は図６８のようなイベント予約情報２７０４を登録する。
【０１７５】
シミュレーション実行指示部２７０５は図７０のフローのように、イベント予約情報２７０４の中のもっとも近い将来に発生するイベントの情報を取得して、そのイベントが発生したシミュレーション時間までシミュレーションを独立して進めるようにシミュレーション実行部Ａ２７０１とシミュレーション実行部Ｂ２７０２へ指示する。ただし、その間隔があまり大きいと、シミュレーション時間を戻して復元しなければならない事態が発生したときのペナルティが大きくなるので、図６９のようなシミュレーション切り替え時間間隔情報２７１０の情報に基づいて、間隔が大きすぎないように調整する。
【０１７６】
シミュレーション実行部２７０１、２７０２は図７１のフローのように動作する。シミュレーション実行の内容は実行履歴記録部２７０６や２７０７へ図７２のような内容で記録する。シミュレーション実行部がシミュレーション実行中に他方のシミュレーション実行部に関わるイベントが発生したとき、それがシミュレーション実行指示部２７０５に指示された時間よりも近いのであれば、それをシミュレーション実行指示部２７０５へ伝え、シミュレーション実行指示部２７０５はシミュレーション状態復元部Ａ２７０８あるいはシミュレーション状態復元部Ｂ２７０９に対してシミュレーション状態を復元するように指示し、復元後にシミュレーションを継続して実行するように指示する。
【産業上の利用可能性】
【０１７７】
本発明にかかるシミュレーションシステムは、ハードウェアのシミュレータとソフトウェアのシミュレータを協調しながら高速にシミュレーションできるものであり、マイクロプロセッサを使用する各種電子機器のハードウェアやソフトウェア開発に有用である。また、マイクロプロセッサ自身の開発やマイクロプロセッサに接続される周辺ＬＳＩの開発においても有用である。
【図面の簡単な説明】
【０１７８】
【図１】本発明の実施の形態１におけるシステムシミュレーション実行プログラムの例を示す図
【図２】本発明の実施の形態２におけるシステムシミュレーション実行プログラムの例を示す図
【図３】本発明の実施の形態３におけるシステムシミュレーション実行プログラムの例を示す図
【図４】本発明の実施の形態４におけるシステムシミュレーション実行プログラムの例を示す図
【図５】本発明の実施の形態５におけるシステムシミュレーション実行プログラムの例を示す図
【図６】本発明の実施の形態６におけるシステムシミュレーション実行プログラムの例を示す図
【図７】本発明の実施の形態７におけるシステムシミュレーション実行プログラムの例を示す図
【図８】本発明の実施の形態８におけるシステムシミュレーション実行プログラムの例を示す図
【図９】本発明の実施の形態９におけるシステムシミュレーション実行プログラムの例を示す図
【図１０】本発明の実施の形態１０におけるシステムシミュレーション実行プログラムの例を示す図
【図１１】本発明の実施の形態１１におけるシステムシミュレーション実行プログラムの例を示す図
【図１２】本発明の実施の形態１２におけるシステムシミュレーション実行プログラムの例を示す図
【図１３】本発明の実施の形態１３におけるハードウェア記述変換プログラムの例を示す図
【図１４】本発明の実施の形態１４におけるシステムシミュレーション実行プログラムの例を示す図
【図１５】本発明の実施の形態１５におけるハードウェア記述変換プログラムの例を示す図
【図１６】本発明の実施の形態１６におけるシステムシミュレーション実行プログラムの例を示す図
【図１７】本発明の実施の形態１７におけるシステムシミュレーション実行プログラムの例を示す図
【図１８】本発明の実施の形態１８におけるシステムシミュレーション実行プログラムの例を示す図
【図１９】本発明の実施の形態１９におけるシステムシミュレーション実行プログラムの例を示す図
【図２０】本発明の実施の形態２０におけるシステムシミュレーション実行プログラムの例を示す図
【図２１】本発明の実施の形態２１におけるシステムシミュレーション実行プログラムの例を示す図
【図２２】本発明の実施の形態２２におけるシステムシミュレーション実行プログラムの例を示す図
【図２３】本発明の実施の形態２３におけるシステムシミュレーション実行プログラムの例を示す図
【図２４】本発明の実施の形態２４におけるシステムシミュレーション実行プログラムの例を示す図
【図２５】本発明の実施の形態２５におけるハードウェア記述変換プログラムの例を示す図
【図２６】本発明の実施の形態２６におけるシステムシミュレーション実行プログラムの例を示す図
【図２７】本発明の実施の形態２７におけるシステムシミュレーション実行プログラムの例を示す図
【図２８】本発明の実施の形態１のハードウェア構成の例を示す図
【図２９】本発明の実施の形態１のハードウェア記述部のフローを示す図
【図３０】本発明の実施の形態１のハードウェア要素不活性化箇所情報の例を示す図
【図３１】本発明の実施の形態３のハードウェア構成の例を示す図
【図３２】本発明の実施の形態３の不要ハードウェア要素探索部のフローを示す図
【図３３】本発明の実施の形態３の不要ハードウェア要素探索部のフローを示す図
【図３４】本発明の実施の形態５のハードウェア構成の例を示す図
【図３５】本発明の実施の形態５のハードウェア記述部のフローを示す図
【図３６】本発明の実施の形態５のハードウェア要素活性状態取得部のフローを示す図
【図３７】本発明の実施の形態５のハードウェア要素活性化履歴記録の例を示す図
【図３８】本発明の実施の形態５の不要ハードウェア要素探索部のフローを示す図
【図３９】本発明の実施の形態７のハードウェア記述部のフローを示す図
【図４０】本発明の実施の形態７のシミュレーション条件記録部の例を示す図
【図４１】本発明の実施の形態１１のアクセス制御アドレス記録部の例を示す図
【図４２】本発明の実施の形態１１の条件判定部のフローを示す図
【図４３】本発明の実施の形態１１のアクセス制御部のフローを示す図
【図４４】本発明の実施の形態１３のコード例を示す図
【図４５】本発明の実施の形態１３の周期回路抽出部のフローを示す図
【図４６】本発明の実施の形態１３の周期回路抽出部のフローを示す図
【図４７】本発明の実施の形態１３の周期回路パラメータ算出部のフローを示す図
【図４８】本発明の実施の形態１３の周期回路変換部のフローを示す図
【図４９】本発明の実施の形態１５のコード例を示す図
【図５０】本発明の実施の形態１５の組合せ回路抽出部のフローを示す図
【図５１】本発明の実施の形態１５の組合せ回路パラメータ算出部のフローを示す図
【図５２】本発明の実施の形態１５の組合せ回路変換部のフローを示す図
【図５３】本発明の実施の形態１７の条件判定部のフローを示す図
【図５４】本発明の実施の形態１７のハードウェア要素操作情報記録部の例を示す図
【図５５】本発明の実施の形態１７のアクセス制御部のフローを示す図
【図５６】本発明の実施の形態１７のハードウェア要素操作部のフローを示す図
【図５７】本発明の実施の形態１９のコード例を示す図
【図５８】本発明の実施の形態１９の被デバッグソフトウェア実行部のフローを示す図
【図５９】本発明の実施の形態１９のハードウェア操作コマンド解析部のフローを示す図
【図６０】本発明の実施の形態２１のコード例を示す図
【図６１】本発明の実施の形態２１のソフトウェア操作コマンド解析部のフローを示す図
【図６２】本発明の実施の形態２３のコード例を示す図
【図６３】本発明の実施の形態２３のテストスクリプト実行部のフローを示す図
【図６４】本発明の実施の形態２５の抽象化箇所記録の例を示す図
【図６５】本発明の実施の形態２５の既抽象化部抽出部のフローを示す図
【図６６】本発明の実施の形態２５のハードウェア記述置換え部のフローを示す図
【図６７】本発明の実施の形態２６のハードウェア記述実行部のフローを示す図
【図６８】本発明の実施の形態２７のイベント予約情報の例を示す図
【図６９】本発明の実施の形態２７の切り替え時間間隔情報の例を示す図
【図７０】本発明の実施の形態２７のシミュレーション実行指示部のフローを示す図
【図７１】本発明の実施の形態２７のシミュレーション実行部のフローを示す図
【図７２】本発明の実施の形態２７の実行履歴記録の例を示す図
【符号の説明】
【０１７９】
１０１  システムシミュレーション実行プログラム
１０２  被デバッグソフトウェア
１０３  被デバッグソフトウェア実行部
１０４  実行可能なハードウェア記述部
１０５  ハードウェア要素不活性化指定部
１０７  ハードウェア記述
１０８  コンパイラ
２０１  ハードウェア記述
２０２  ハードウェア記述実行部
３０２  不要ハードウェア要素探索部
５０１  ハードウェア要素活性状態取得部
７０２  シミュレーション条件判定部
９０１  ソフトウェア実行状態取得部
１１０１  アクセス制御部
１１０２  条件判定部
１３０２  ハードウェア記述変換プログラム
１３０３  周期回路抽出部
１３０４  周期回路パラメータ抽出部
１３０５  周期回路変換部
１３０６  変更後ハードウェア記述
１３０７  コンパイラ
１５０１  組合せ回路抽出部
１５０２  組合せ回路パラメータ算出部
１５０３  組合せ回路変換部
１７０１  ハードウェア要素操作情報記録部
１７０２  ハードウェア要素操作部
１９０１  ハードウェア操作コマンド解析部
２１０１  ソフトウェア操作コマンド解析部
２３０１  テストスクリプト実行部
２５０４  ハードウェア記述変換プログラム
２５０５  既抽象化部抽出部
２５０６  ハードウェア記述置換え部
【図１】
2005321848.tif 000003
【図２】
2005321848.tif 000004
【図３】
2005321848.tif 000005
【図４】
2005321848.tif 000006
【図５】
2005321848.tif 000007
【図６】
2005321848.tif 000008
【図７】
2005321848.tif 000009
【図８】
2005321848.tif 000010
【図９】
2005321848.tif 000011
【図１０】
2005321848.tif 000012
【図１１】
2005321848.tif 000013
【図１２】
2005321848.tif 000014
【図１３】
2005321848.tif 000015
【図１４】
2005321848.tif 000016
【図１５】
2005321848.tif 000017
【図１６】
2005321848.tif 000018
【図１７】
2005321848.tif 000019
【図１８】
2005321848.tif 000020
【図１９】
2005321848.tif 000021
【図２０】
2005321848.tif 000022
【図２１】
2005321848.tif 000023
【図２２】
2005321848.tif 000024
【図２３】
2005321848.tif 000025
【図２４】
2005321848.tif 000026
【図２５】
2005321848.tif 000027
【図２６】
2005321848.tif 000028
【図２７】
2005321848.tif 000029
【図２８】
2005321848.tif 000030
【図２９】
2005321848.tif 000031
【図３０】
2005321848.tif 000032
【図３１】
2005321848.tif 000033
【図３２】
2005321848.tif 000034
【図３３】
2005321848.tif 000035
【図３４】
2005321848.tif 000036
【図３５】
2005321848.tif 000037
【図３６】
2005321848.tif 000038
【図３７】
2005321848.tif 000039
【図３８】
2005321848.tif 000040
【図３９】
2005321848.tif 000041
【図４０】
2005321848.tif 000042
【図４１】
2005321848.tif 000043
【図４２】
2005321848.tif 000044
【図４３】
2005321848.tif 000045
【図４４】
2005321848.tif 000046
【図４５】
2005321848.tif 000047
【図４６】
2005321848.tif 000048
【図４７】
2005321848.tif 000049
【図４８】
2005321848.tif 000050
【図４９】
2005321848.tif 000051
【図５０】
2005321848.tif 000052
【図５１】
2005321848.tif 000053
【図５２】
2005321848.tif 000054
【図５３】
2005321848.tif 000055
【図５４】
2005321848.tif 000056
【図５５】
2005321848.tif 000057
【図５６】
2005321848.tif 000058
【図５７】
2005321848.tif 000059
【図５８】
2005321848.tif 000060
【図５９】
2005321848.tif 000061
【図６０】
2005321848.tif 000062
【図６１】
2005321848.tif 000063
【図６２】
2005321848.tif 000064
【図６３】
2005321848.tif 000065
【図６４】
2005321848.tif 000066
【図６５】
2005321848.tif 000067
【図６６】
2005321848.tif 000068
【図６７】
2005321848.tif 000069
【図６８】
2005321848.tif 000070
【図６９】
2005321848.tif 000071
【図７０】
2005321848.tif 000072
【図７１】
2005321848.tif 000073
【図７２】
2005321848.tif 000074