(57)【特許請求の範囲】
【請求項１】
ハードウェアとソフトウェアとからなるシステムのうち前記ソフトウェアの検証をコンピュータに支援させるソフトウェア検証支援プログラムにおいて、
前記ハードウェアのレジスタ仕様を定義するレジスタ仕様情報を取得させる取得工程と、
前記取得工程によって取得されたレジスタ仕様情報に基づいて、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードを生成させる生成工程と、
前記ハードウェアの機能のうち少なくとも前記ソフトウェアからのレジスタまたはメモリへの読み出し／書き込み機能を実現するハードウェアモデルの動作が表現され、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードの挿入位置が定義されたハードウェア記述情報に、前記生成工程によって生成されたチェックコードを挿入することにより、前記ソフトウェアの動作を検証するハードウェア記述情報を作成させる作成工程と、
前記作成工程によって作成されたハードウェア記述情報を出力させる出力工程と、
を前記コンピュータに実行させることを特徴とするソフトウェア検証支援プログラム。
【請求項２】
前記取得工程によって取得されたレジスタ仕様情報の中から、前記レジスタごとに、前記レジスタへの書き込み時に当該レジスタとは異なる他のレジスタが満たすべき条件を抽出させる抽出工程を前記コンピュータに実行させ、
前記生成工程は、
前記抽出工程によって抽出された条件に基づいて、前記レジスタへの書き込み時に前記他のレジスタが前記条件を満たしているか否かを判定するためのチェックコードを生成させることを特徴とする請求項１に記載のソフトウェア検証支援プログラム。
【請求項３】
前記抽出工程は、
前記レジスタ仕様情報の中から、前記レジスタごとに、当該レジスタを構成するビット列のうち書き込み可能なビット位置を指定するビットフィールドの値の有効範囲を抽出させ、
前記生成工程は、
前記抽出工程によって抽出された有効範囲に基づいて、前記レジスタへの書き込み時に前記ビットフィールドの値が前記有効範囲内となっているか否かを判定するためのチェックコードを生成させることを特徴とする請求項１または２に記載のソフトウェア検証支援プログラム。
【請求項４】
前記抽出工程は、
前記レジスタ仕様情報の中から、前記レジスタごとに、当該レジスタを構成する各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプを抽出させ、
前記生成工程は、
前記抽出工程によって抽出されたビットタイプに基づいて、読み出し専用レジスタへの書き込みを判定するためのチェックコードを生成させることを特徴とする請求項１〜３のいずれか一つに記載のソフトウェア検証支援プログラム。
【請求項５】
前記生成工程は、
前記抽出工程によって抽出されたビットタイプに基づいて、書き込み専用レジスタへの読み出しを判定するためのチェックコードを生成させることを特徴とする請求項４に記載のソフトウェア検証支援プログラム。
【請求項６】
請求項１〜５のいずれか一つに記載のソフトウェア検証支援プログラムを記録したコンピュータに読み取り可能な記録媒体。
【請求項７】
ハードウェアとソフトウェアとからなるシステムの前記ソフトウェアの検証を支援するソフトウェア検証支援装置において、
前記ハードウェアのレジスタ仕様を定義するレジスタ仕様情報を取得する取得手段と、
前記取得手段によって取得されたレジスタ仕様情報に基づいて、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードを生成する生成手段と、
前記ハードウェアの機能のうち少なくとも前記ソフトウェアからのレジスタまたはメモリへの読み出し／書き込み機能を実現するハードウェアモデルの動作が表現され、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードの挿入位置が定義されたハードウェア記述情報に、前記生成手段によって生成されたチェックコードを挿入することにより、前記ソフトウェアの動作を検証するハードウェア記述情報を作成する作成手段と、
前記作成手段によって作成されたハードウェア記述情報を出力する出力手段と、
を備えることを特徴とするソフトウェア検証支援装置。
【請求項８】
ハードウェアとソフトウェアとからなるシステムの前記ソフトウェアの検証を支援するソフトウェア検証支援方法において、
コンピュータが、
前記ハードウェアのレジスタ仕様を定義するレジスタ仕様情報を取得する取得工程と、
前記取得工程によって取得されたレジスタ仕様情報に基づいて、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードを生成する生成工程と、
前記ハードウェアの機能のうち少なくとも前記ソフトウェアからのレジスタまたはメモリへの読み出し／書き込み機能を実現するハードウェアモデルの動作が表現され、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードの挿入位置が定義されたハードウェア記述情報に、前記生成工程によって生成されたチェックコードを挿入することにより、前記ソフトウェアの動作を検証するハードウェア記述情報を作成する作成工程と、
前記作成工程によって作成されたハードウェア記述情報を出力する出力工程と、
を実行することを特徴とするソフトウェア検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ハードウェアとソフトウェアとからなるシステムのソフトウェアの検証を支援するソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法に関する。
【背景技術】
【０００２】
一般に、ＣＰＵコアやＤＳＰコアを集積したＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）のようなハードウェアとソフトウェアとが混在するシステムを開発する場合、ハードウェアとソフトウェアとを同時に取り扱って、システム全体の動作検証をおこなう必要がある。このため、ハードウェアの論理設計が完了しシステム全体の動作検証を開始するまでに、ファームウェアやミドルウェアなどのソフトウェア開発をある程度進めておく必要がある。
【０００３】
しかし一方で、ＳｏＣの大規模化、複雑化により、その上で動作するファームウェアも大規模化、複雑化してきている。このため、ファームウェアの検証が困難となってきている。具体的には、ソフトウェアが扱うレジスタ数が増大しており、それらレジスタ間の依存関係も複雑になってきている。このため、従来に比べてソフトウェアも大幅に複雑化しており、デバックが困難となっている。
【０００４】
従来より、ソフトウェアのデバック手法としては、ファームウェアにアサーションを埋め込む手法が用いられている。これは、実行時に埋め込まれたアサーションコードを実行し、変数の値などのチェックをおこなう。Ｃ／Ｃ＋＋言語では、ライブラリとしてａｓｓｅｒｔ関数が用意されているため、組み込み系のソフトウェアでも使用することができる。また、アサーションを使うと、ｐｒｉｎｔｆによるログ出力に比べて効果的にデバックをおこなうことができる。
【０００５】
また、ハードウェアの仕様情報からハードウェアモデルを自動生成し、ファームウェアからのレジスタアクセス時にレジスタ設定値や依存関係などのチェックをおこなう手法が開示されている（たとえば、下記特許文献１参照。）。
【０００６】
これによれば、ＩＳＳ側のタイミングに影響を与えることなくアサーションコードを実行することができる。また、ＩＳＳ・ハードウェアモデルが動作するソフトウェア開発環境は、ＰＣ／ＷＳなどで実行されるためメモリサイズを考慮する必要がない。
【０００７】
【特許文献１】特開２００４−２２０２２３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した従来技術のファームウェアにアサーションを埋め込む手法によれば、時間制約の厳しいリアルタイムソフトウェアでは、アサーションを使うことにより、タイミングのズレが発生し動作が変わってしまう場合があるという問題があった。また、組み込み系のソフトウェアでは、メモリサイズが限られているためアサーションを使うとコード量が増加してメモリに収まらなくなる場合があるという問題があった。さらに、組み込み系のソフトウェア開発環境では、そのシステム専用のライブラリを作成しなければａｓｓｅｒｔ関数が使えないという問題があった。
【０００９】
また、ハードウェアモデル内にアサーションを埋め込むことが考えられる。しかし、ハードウェアモデル開発者は、ハードウェアモデルにチェッカを組み込む際に、ファームウェアの詳細を理解していないために、当該ファームウェアの動作を検証するためのチェッカを作成することが困難となっていた。このため、ソフトウェア開発者が実装のあとにチェッカを作成し、ハードウェアモデル開発者に提供するという手順が取られており、開発期間の長期化を招いてしまうという問題があった。
【００１０】
また、組み込み系のソフトウェアの場合、チェック対象となるハードウェアレジスタが大量に存在するため、チェック用コードを人手で入力する場合、作業負担が増大化するだけでなく、チェック用コードの入力漏れが発生する場合があり、検証の手戻り作業が多発し、検証作業の長期化、ひいては開発期間の長期化を招いてしまうという問題があった。
【００１１】
この発明は、上述した従来技術による問題点を解消するため、ソフトウェア検証のチェッカが挿入されたハードウェアモデルの自動生成を実現することにより、ソフトウェア開発と並行したハードウェアモデル開発の実行を可能とし、開発期間の短縮化を図ることができるソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、この発明にかかるソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法は、ハードウェアとソフトウェアとからなるシステムのうち前記ソフトウェアの検証を支援するソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法において、前記ハードウェアのレジスタ仕様を定義するレジスタ仕様情報を取得し、そのレジスタ仕様情報に基づいて、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードを生成し、そのチェックコードを出力することを特徴とする。
【００１３】
この発明によれば、レジスタ仕様情報にアサーションに必要な情報を追加することにより、ソフトウェアのレジスタへのアクセスを検証するためのチェックコードを自動生成することができる。
【００１４】
また、上記発明において、前記レジスタ仕様情報の中から、前記レジスタごとに、前記レジスタへの書き込み時に当該レジスタとは異なる他のレジスタが満たすべき条件を抽出し、その条件に基づいて、前記レジスタへの書き込み時に前記他のレジスタが前記条件を満たしているか否かを判定するためのチェックコードを生成することとしてもよい。
【００１５】
この発明によれば、レジスタ仕様情報に事前条件に関する情報を追加することにより、レジスタへの書き込み時に他のレジスタが事前条件を満たしているか否かを判定するためのチェックコードを自動生成することができる。
【００１６】
また、上記発明において、前記レジスタ仕様情報の中から、前記レジスタごとに、当該レジスタを構成するビット列のうち書き込み可能なビット位置を指定するビットフィールドの値の有効範囲を抽出し、その有効範囲に基づいて、前記レジスタへの書き込み時に前記ビットフィールドの値が前記有効範囲内となっているか否かを判定するためのチェックコードを生成することとしてもよい。
【００１７】
この発明によれば、レジスタ仕様情報にビットフィールドの値の有効範囲に関する情報を追加することにより、レジスタへの書き込み時にビットフィールドの値が有効範囲内となっているか否かを判定するためのチェックコードを自動生成することができる。
【００１８】
また、上記発明において、前記レジスタ仕様情報の中から、前記レジスタごとに、当該レジスタを構成する各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプを抽出し、そのビットタイプに基づいて、読み出し専用レジスタへの書き込みを判定するためのチェックコードを生成することとしてもよい。
【００１９】
この発明によれば、レジスタ仕様情報に含まれている各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプに関する情報を用いて、読み出し専用レジスタへの書き込みを判定するためのチェックコードを自動生成することができる。
【００２０】
また、上記発明において、前記ビットタイプに基づいて、書き込み専用レジスタへの読み出しを判定するためのチェックコードを生成することとしてもよい。
【００２１】
この発明によれば、書き込み専用レジスタへの読み出しを判定するためのチェックコードを自動生成することができる。
【００２２】
また、上記発明において、前記ビットタイプに基づいて、ビットフィールドが定義されていない未定義ビットまたは読み出し専用ビットフィールドへの書き込みを判定するためのチェックコードを生成することとしてもよい。
【００２３】
この発明によれば、未定義ビットまたは読み出し専用ビットフィールドへの書き込みを判定するためのチェックコードを自動生成することができる。
【００２４】
また、上記発明において、前記レジスタ仕様情報の中から、前記ソフトウェアモデルのすべてのレジスタのレジスタアドレスを抽出し、そのレジスタアドレスに基づいて、前記レジスタ仕様情報に定義されていない未定義レジスタへのアクセスを判定するためのチェックコードを生成することとしてもよい。
【００２５】
この発明によれば、レジスタ仕様情報に含まれている各レジスタのレジスタアドレスに関する情報を用いて、未定義レジスタへのアクセスを判定するためのチェックコードを自動生成することができる。
【発明の効果】
【００２６】
本発明にかかるソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法によれば、ソフトウェア検証のチェッカが挿入されたハードウェアモデルの自動生成を実現することにより、ソフトウェア開発と並行したハードウェアモデル開発の実行を可能とし、開発期間の短縮化を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００２７】
以下に添付図面を参照して、この発明にかかるソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法の好適な実施の形態を詳細に説明する。
【００２８】
（この発明の概要）
まず、この発明の概要について説明する。図１は、ハードウェア／ソフトウェア混在システムの開発工程を示す説明図である。ハードウェア／ソフトウェア混在システムでは、ハードウェアとソフトウェアとを実装し各種の機能を実現する。このとき、ハードウェア／ソフトウェア混在システム開発においては、ハードウェア開発者によるハードウェア開発とソフトウェア開発者によるソフトウェア開発とがおこなわれる。このとき、開発期間の短縮化のために、ハードウェア開発とソフトウェア開発とを並行しておこなうことが望ましい。
【００２９】
一方で、開発したソフトウェアを検証するためには、ハードウェアとソフトウェアとのインターフェースに関するハードウェアモデルが必要となる。したがって、ソフトウェアの検証は、ハードウェアの外部仕様が決定し、その外部仕様に基づくハードウェアモデル設計が完了したあとにおこなわれる。ここで、ハードウェア／ソフトウェア混在システムの開発工程を説明する。
【００３０】
図１において、まず、ハードウェア開発において、ハードウェア開発者は、Ｖｅｒｉｌｏｇ−ＨＤＬやＶＨＤＬなどのハードウェア記述言語を用いて、論理回路などの仕様を設計するハードウェア仕様設計をおこなう（１０１）。そして、ハードウェア仕様設計が完了すると、ハードウェアを実装し（１０２）、そのハードウェアの仕様を検証するハードウェア検証をおこなう（１０３）。
【００３１】
また、このハードウェア開発と並行して、ソフトウェア開発において、ソフトウェア開発者は、Ｃ言語などのプログラム言語を用いて、ファームウェアやミドルウェアなどのプログラムを作成するソフトウェア仕様設計をおこなう（１０４）。そして、ソフトウェア仕様設計が完了すると、ソフトウェアの実装をおこなう（１０５）。
【００３２】
また、ハードウェアモデル開発において、ハードウェアモデル開発者は、ハードウェア開発でハードウェアの外部仕様が決定されると、その外部仕様に基づいて、ソフトウェア検証で利用するためのハードウェアモデルを設計するハードウェアモデル設計をおこなう（１０６）。
【００３３】
このあと、ハードウェアモデル設計が完了すると、ソフトウェア開発者は、ハードウェアモデルを利用してソフトウェアの検証をおこなう（１０７）。そして、ハードウェア検証およびソフトウェア検証が完了すると、ハードウェア開発者およびソフトウェア開発者は、ハードウェアとソフトウェアとを組み合わせたハードウェア／ソフトウェア協調検証をおこなう（１０８）。
【００３４】
本発明では、ハードウェアモデル設計（１０６）において、ファームウェアからのレジスタへのアクセスをチェックするためのアサーションをハードウェアモデル内に埋め込むことにより、ソフトウェアのデバックを実現する。このとき、ハードウェアモデルの設計元となる仕様書に、アサーションに必要な情報を追加することにより、ソフトウェアの詳細を理解していないハードウェアモデル開発者によるアサーションの記述を可能とする。
【００３５】
これにより、ソフトウェア開発と並行して、アサーションが挿入されたハードウェアモデルの開発をおこなうことを可能とし、ハードウェア／ソフトウェア混在システム全体の開発期間の短縮化を図る。
【００３６】
（ソフトウェア検証装置のハードウェア構成）
つぎに、この発明の実施の形態にかかるソフトウェア検証装置のハードウェア構成について説明する。図２は、この発明の実施の形態にかかるソフトウェア検証装置のハードウェア構成を示す説明図である。
【００３７】
図２において、ソフトウェア検証装置２００は、コンピュータ本体２１０と、入力装置２２０と、出力装置２３０と、から構成されており、不図示のルータやモデムを介してＬＡＮ，ＷＡＮやインターネットなどのネットワーク２４０に接続可能である。
【００３８】
コンピュータ本体２１０は、ＣＰＵ，メモリ，インターフェースを有する。ＣＰＵは、ソフトウェア検証装置２００の全体の制御を司る。メモリは、ＲＯＭ，ＲＡＭ，ＨＤ，光ディスク２１１，フラッシュメモリから構成される。メモリはＣＰＵのワークエリアとして使用される。
【００３９】
また、メモリには各種プログラムが格納されており、ＣＰＵからの命令に応じてロードされる。ＨＤおよび光ディスク２１１はディスクドライブによりデータのリード／ライトが制御される。また、光ディスク２１１およびフラッシュメモリはコンピュータ本体２１０に対し着脱自在である。インターフェースは、入力装置２２０からの入力、出力装置２３０への出力、ネットワーク２４０に対する送受信の制御をおこなう。
【００４０】
また、入力装置２２０としては、キーボード２２１、マウス２２２、スキャナ２２３などがある。キーボード２２１は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス２２２は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ２２３は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体２１０内のメモリに格納される。なお、スキャナ２２３にＯＣＲ機能を持たせてもよい。
【００４１】
また、出力装置２３０としては、ディスプレイ２３１、スピーカ２３２、プリンタ２３３などがある。ディスプレイ２３１は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。また、スピーカ２３２は、効果音や読み上げ音などの音声を出力する。また、プリンタ２３３は、画像データや文書データを印刷する。
【００４２】
（検証対象の一例）
つぎに、この発明の実施の形態にかかる検証対象の一例について説明する。図３は、検証対象の一例を示す説明図である。図３において、検証対象であるＳｏＣ３００は、ＣＰＵ３０１と、ＨＷ（ハードウェア）ブロックＡ３０２と、ＨＷブロックＢ３０３と、ＨＷブロックＣ３０４と、メモリ３０５と、から構成されている。また、各構成部３０１〜３０５は、バス３１０によってそれぞれ接続されている。
【００４３】
ＣＰＵ３０１は、ＲＯＭやＲＡＭなどの記憶領域に保持されているファームウェア３０６を実行することにより、バス３１０を介して接続されたＨＷブロックＡ３０２〜ＨＷブロックＣ３０４の制御をおこなう。なお、図１で示したハードウェア／ソフトウェア混在システム開発において、ハードウェア開発者は上記ＨＷブロックＡ３０２〜ＨＷブロックＣ３０４を開発し、ソフトウェア開発者はファームウェア３０６を開発する。
【００４４】
（ソフトウェア検証環境）
つぎに、ソフトウェア検証環境について説明する。図４は、ソフトウェア検証環境の一例を示す説明図である。図４において、ソフトウェア検証環境４００は、ＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ）４０１と、ＨＷモデルＡ４０２と、ＨＷモデルＢ４０３と、ＨＷモデルＣ４０４と、メモリモデル４０５と、から構成されている。また、各構成部４０１〜４０５は、バスモデル４１０によってそれぞれ接続されている。
【００４５】
ＩＳＳ４０１は、ＣＰＵのすべての命令の実行をシミュレーションすることができるシミュレーターである。ＨＷモデルＡ４０２〜ＨＷモデルＣ４０４は、図３に示したＨＷブロックＡ３０２〜ＨＷブロックＣ３０４の機能を実現するモデルである。また、各ＨＷモデルＡ４０２〜ＨＷモデルＣ４０４には、ファームウェア３０６の動作を検証するためのアサーション４０６〜４０８がそれぞれ埋め込まれている。
【００４６】
メモリモデル４０５は、ＩＳＳ４０１と各ＨＷモデルＡ４０２〜ＨＷモデルＣ４０４との間で使用する共有メモリである。なお、各ＨＷモデルＡ４０２〜ＨＷモデルＣ４０４は、ハードウェアモデル開発者により、後述するレジスタ仕様情報Ｒを用いて設計される。
【００４７】
（ソフトウェア検証支援装置の機能的構成）
つぎに、この発明の実施の形態にかかるソフトウェア検証支援装置２００の機能的構成について説明する。図５は、この発明の実施の形態にかかるソフトウェア検証支援装置の機能的構成を示すブロック図である。図５において、ソフトウェア検証支援装置２００は、取得部５０１と、生成部５０２と、抽出部５０３と、作成部５０４と、出力部５０５と、から構成されている。
【００４８】
これら各機能５０１〜５０５は、記憶領域に格納された当該機能に関するプログラムをＣＰＵに実行させることにより、当該機能を実現することができる。また、各機能５０１〜５０５からの出力データは記憶領域に保持される。また、図５中矢印で示した接続先の機能的構成は、接続元の機能からの出力データを記憶領域から読み込んで、当該機能に関するプログラムをＣＰＵに実行させる。
【００４９】
まず、取得部５０１は、ハードウェアのレジスタ仕様を定義するレジスタ仕様情報Ｒを取得する機能を有する。具体的には、ソフトウェア検証支援装置２００にレジスタ仕様情報Ｒを直接入力することとしてもよく、また、ネットワーク２４０を介して外部のコンピュータ装置から取得することとしてもよい。
【００５０】
ここで、レジスタ仕様情報Ｒについて説明する。図６〜図８は、レジスタ仕様情報Ｒの一例を示す説明図である。図６〜図８において、レジスタ仕様情報Ｒ１，Ｒ２，Ｒ３は、レジスタごとに、レジスタ名、レジスタアドレス、事前条件、ビット番号、ビットフィールド名、Ｒ／Ｗ、初期値および有効範囲をあらわす情報を有している。
【００５１】
レジスタ名は、レジスタの名称である。レジスタアドレスは、各レジスタに割り振られたメモリ上のアドレスである。事前条件は、各レジスタへの書き込み時に当該レジスタとは異なる他のレジスタが満たすべき条件である。ビット番号は、レジスタを構成する各ビットの位置を指定する番号である。ビットフィールド名は、ビットフィールドの名称である。
【００５２】
Ｒ／Ｗは、各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプである。ここでは、「Ｒ」は読み出し可能なビットを、「Ｗ」は書き込み可能なビットを、「Ｒ／Ｗ」は読み出しおよび書き込み可能なビットをあらわしている。初期値は、各ビットに予め保持されている値である。有効範囲は、書き込み可能なビット位置を指定するビットフィールドの値の有効範囲をあらわしている。
【００５３】
ここで、レジスタ仕様情報Ｒ１を例に挙げると、レジスタ名が「ＣＯＭＭＡＮＤ＿ＲＥＱ」のレジスタの仕様が定義されている。レジスタアドレスは「０２０」である。事前条件は「ＣＯＭ＿ＳＴＡＴＵＳ＝＝０」および「ＤＥＣ＿ＭＯＤＥ＜＝３」が定義されている。これは、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、レジスタ「ＣＯＭ＿ＳＴＡＴＵＳ」が「０」、レジスタ「ＤＥＣ＿ＭＯＤＥ」が「３以下」となる条件をあらわしている。
【００５４】
また、ビット番号０〜２および８〜１１にビットフィールド「ＣＯＭＭＡＮＤ」および「ＣＯＭ＿ＰＡＲＡＭ」がそれぞれ指定されている。ビットフィールド「ＣＯＭＭＡＮＤ」は、書き込み可能なビットフィールドである。また、ビットフィールド「ＣＯＭ＿ＰＡＲＡＭ」は、読み出しおよび書き込み可能なビットフィールドであり、その有効範囲は「（−５）〜６」である。なお、初期値はすべてが「０」となっている。
【００５５】
図５の説明に戻り、生成部５０２は、取得部５０１によって取得されたレジスタ仕様情報Ｒに基づいて、ＣＰＵ上で動作するソフトウェアからのレジスタへのアクセスを検証するためのチェックコードを生成する機能を有する。具体的には、たとえば、ＨＷブロックＡ３０２〜ＨＷブロックＣ３０４（図３参照）の機能を実現するＨＷモデルＡ４０２〜ＨＷモデルＣ４０４（図４参照）の制御をおこなうファームウェア３０６からのレジスタへの読み出し／書き込みを検証するためのチェックコードを生成する。
【００５６】
以下、生成部５０２による生成処理の処理内容について説明する。抽出部５０３は、取得部５０１によって取得されたレジスタ仕様情報Ｒの中から、レジスタごとに、レジスタへの書き込み時に当該レジスタとは異なる他のレジスタが満たすべき条件を抽出する。条件とは、たとえば、図６に示したレジスタ仕様情報Ｒ１に含まれている事前条件『ＣＯＭ＿ＳＴＡＴＵＳ＝＝０，ＤＥＣ＿ＭＯＤＥ＜＝３』である。
【００５７】
この場合、生成部５０２は、抽出部５０３によって抽出された条件に基づいて、レジスタへの書き込み時に他のレジスタが条件を満たしているか否かを判定するためのチェックコードを生成する。具体的には、たとえば、図６に示したレジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、チェック対象となるレジスタ『ＣＯＭ＿ＳＴＡＴＵＳ』に保持されている値を読み出して、その値が事前条件『ＣＯＭ＿ＳＴＡＴＵＳ＝＝０』を満たしているか否かを判定するためのチェックコードを生成する。
【００５８】
ここで、事前条件に関するチェックコードを生成する生成処理の具体例を説明する。以下において、Ｃ言語を用いてチェックコードを記述する場合を例に挙げて説明する。図９は、事前条件に関するチェックコードの一例を示す説明図である。図９において、まず、チェック対象となるレジスタの値を代入するための変数を宣言するコードを生成する（コードＣ１）。
【００５９】
チェック対象とは、事前条件として定義されているレジスタである。このあと、チェック対象のレジスタから値を読み出すコードを生成する（コードＣ２）。そして、読み出した値が事前条件を満たしているか否かをチェックするコードを生成し（コードＣ３）、満たしていない場合にエラーメッセージを出力するコードを生成する（コードＣ４）。
【００６０】
なお、レジスタ仕様情報Ｒに定義されている事前条件が複数存在する場合には、各事前条件について上記コードＣ１〜Ｃ４同様のコードを生成することとなる。たとえば、図６に示したレジスタ仕様情報Ｒ１では、事前条件が２つ存在するため、事前条件『ＣＯＭ＿ＳＴＡＴＵＳ＝＝０』および事前条件『ＤＥＣ＿ＭＯＤＥ＜＝３』について各種を生成する。
【００６１】
また、抽出部５０３は、レジスタ仕様情報Ｒの中から、レジスタごとに、当該レジスタを構成するビット列のうち書き込み可能なビット位置を指定するビットフィールドの値の有効範囲を抽出する。具体的には、たとえば、図６に示したレジスタ仕様情報Ｒ１の中から、ビットフィールド『ＣＯＭ＿ＰＡＲＡＭ』の値の有効範囲『（−５）〜６』を抽出する。
【００６２】
この場合、生成部５０２は、抽出部５０３によって抽出された有効範囲に基づいて、レジスタへの書き込み時にビットフィールドの値が有効範囲内となっているか否かを判定するためのチェックコードを生成する。具体的には、たとえば、図６に示したレジスタ『ＣＯＭＭＡＮＤ＿ＲＥＱ』のビットフィールド『ＣＯＭ＿ＰＡＲＡＭ』に書き込まれた値を読み出して、その値が有効範囲『（−５）〜６』内となっているか否かを判定するためのチェックコードを生成する。
【００６３】
ここで、ビットフィールドに書き込まれた値をチェックするためのチェックコードを生成する生成処理の具体例を説明する。図１０は、ビットフィールドの有効範囲に関するチェックコードの一例を示す説明図である。図１０において、まず、チェック対象となるビットフィールドの値を代入するための変数を宣言するコードを生成する（コードＣ５）。
【００６４】
このとき、有効範囲の符号の有無に応じて、変数を宣言するコードを生成する。ここでは、符号付きのため、変数を宣言するコードを「ｓｉｇｎｅｄ」として生成する。なお、チェック対象とは、有効範囲が定義されているビットフィールドである。このあと、チェック対象のビットフィールドに書き込まれた値を読み出すコードを生成し（コードＣ６）、読み出した値を符号拡張するコードを生成する（コードＣ７）。
【００６５】
コードＣ６において、整数値８は、チェック対象のビットフィールドの最下位ビットを示している。この整数値は、ビットフィールドの位置を特定するための情報に基づいて決定される。また、コードＣ７において、関数「ｓｉｇｎ＿ｅｘｔｅｎｄ  ｔｏ  ｓｈｏｒｔ（）」は、第２引数で指定したビット幅の値を１６ビット幅（ｓｈｏｒｔ）に符号拡張するための関数である。
【００６６】
そして、ｉｆ文を用いて読み出した値がビットフィールドの有効範囲内となっているか否かをチェックするコードを生成し（コードＣ８）、最後に、有効範囲外となっている場合にエラーメッセージを出力するコードを生成する（コードＣ９）。ここでは、符号付きの有効範囲について説明したが、符号なしの有効範囲の場合には上記コードＣ５を「ｕｎｓｉｇｎｅｄ」として生成し、上記コードＣ７は不要となる。
【００６７】
また、抽出部５０３は、レジスタ仕様情報Ｒの中から、レジスタごとに、当該レジスタを構成する各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプを抽出する。具体的には、たとえば、図６に示したレジスタ仕様情報Ｒ１の中から、各ビットの読み出し／書き込みの可否を特定するためのＲ／Ｗ情報を抽出する。
【００６８】
この場合、生成部５０２は、抽出部５０３によって抽出されたビットタイプに基づいて、読み出し専用レジスタへの書き込みを判定するためのチェックコードを生成する。具体的には、たとえば、図７に示したレジスタ『ＣＯＭ＿ＳＴＡＴＵＳ』のような読み出し専用レジスタへの書き込みを判定するためのチェックコードを生成する。
【００６９】
ここで、読み出し専用レジスタへの書き込みをチェックするためのチェックコードを生成する生成処理の具体例を説明する。図１１は、読み出し専用レジスタへの書き込みに関するチェックコードの一例を示す説明図である。まず、各レジスタのレジスタマスク値を用いて、チェック対象となる読み出し専用レジスタを特定する。
【００７０】
具体的には、レジスタ仕様情報Ｒに含まれるＲ／Ｗ情報に基づいて、各レジスタのレジスタマスク値を算出する。このあと、そのレジスタマスク値から当該レジスタが読み出し専用レジスタであるか否かを判断する。この結果、レジスタが読み出し専用レジスタであった場合、読み出し専用レジスタへの書き込みが発生した場合にエラーメッセージを出力するコードを生成する（コードＣ１０）。
【００７１】
たとえば、図７に示したレジスタ『ＣＯＭ＿ＳＴＡＴＵＳ』について、レジスタ仕様情報Ｒ２からＲ／Ｗ情報を抽出し、Ｗを“１”としたマスク値を算出する。この結果、マスク値は「０ｘ００００」となるため、レジスタ『ＣＯＭ＿ＳＴＡＴＵＳ』は読み出し専用レジスタであると判断し、上記コードＣ１０を生成する。
【００７２】
また、生成部５０２は、抽出部５０３によって抽出されたビットタイプに基づいて、書き込み専用レジスタへの読み出しを判定するためのチェックコードを生成する。具体的には、たとえば、レジスタ仕様情報Ｒに含まれる各ビットのＲ／Ｗ情報がすべてＷとなっているレジスタ（以下、「レジスタ『ＲＥＳＥＴ＿ＲＥＧ』」という）のような書き込み専用レジスタへの読み出しを判定するためのチェックコードを生成する。
【００７３】
ここで、書き込み専用レジスタへの読み出しをチェックするためのチェックコードを生成する生成処理の具体例を説明する。図１２は、書き込み専用レジスタへの書き込みに関するチェックコードの一例を示す説明図である。まず、各レジスタのレジスタマスク値を用いて、チェック対象となる書き込み専用レジスタを特定する。
【００７４】
具体的には、レジスタ仕様情報Ｒに含まれるＲ／Ｗ情報に基づいて、各レジスタのレジスタマスク値を算出する。このあと、そのレジスタマスク値から書き込み専用レジスタであるか否かを判断する。この結果、書き込み専用レジスタであった場合、書き込み専用レジスタからの読み出しが発生した場合にエラーメッセージを出力するコードを生成する（コードＣ１１）。
【００７５】
たとえば、レジスタ『ＲＥＳＥＴ＿ＲＥＧ』について、レジスタ仕様情報ＲからＲ／Ｗ情報を抽出し、Ｒを“１”としたマスク値を算出する。この結果、マスク値は「０ｘ００００」となるため、レジスタ『ＲＥＳＥＴ＿ＲＥＧ』は書き込み専用レジスタであると判断し、上記コードＣ１１を生成する。
【００７６】
また、生成部５０２は、抽出部５０３によって抽出されたビットタイプに基づいて、ビットフィールドが定義されていない未定義ビットまたは読み出し専用ビットフィールドへの書き込みを判定するためのチェックコードを生成する。これは、レジスタを構成するビット列のうちレジスタ仕様情報Ｒに定義されていない未定義ビットまたは読み出し専用ビットフィールドへの“１”の書き込みが発生したか否かをチェックするためのチェックコードである。
【００７７】
具体的には、たとえば、図６に示したレジスタ『ＣＯＭＭＡＮＤ＿ＲＥＱ』の場合、このレジスタへの書き込み時に、ビット列のうちビットフィールドが定義されていない未定義ビット「３〜７」、「１２〜１５」に“１”の書き込みが発生したか否かを判定するためのチェックコードを生成する。
【００７８】
ここで、未定義ビットまたは読み出し専用ビットフィールドへの書き込みをチェックするためのチェックコードを生成する生成処理の具体例を説明する。図１３は、未定義ビットまたは読み出し専用ビットフィールドへの書き込みに関するチェックコードの一例を示す説明図である。まず、各レジスタのレジスタマスク値を用いて、書き込み専用レジスタであるか否かを特定する。
【００７９】
具体的には、レジスタ仕様情報Ｒに含まれるＲ／Ｗ情報に基づいて、各レジスタのレジスタマスク値を算出する。このあと、そのレジスタマスク値から書き込み専用レジスタであるか否かを判断する。この結果、書き込み専用レジスタではなかった場合、未定義または読み出し専用ビットフィールドへの書き込みをチェックするコード（コードＣ１２）を生成する。
【００８０】
具体的には、ｉｆ文を用いて書き込み値とレジスタマスク値のビット反転値との論理積をとり、「０」になっているか否かで未定義または読み出し専用ビットフィールドへの“１”の書き込みがあるか否かを判断するコードを生成する。このあと、未定義または読み出し専用ビットフィールドへの書き込みが発生した場合にエラーメッセージを出力するコードを生成する（コードＣ１３）。
【００８１】
ここでは図示は省略するが、コードＣ１３のあとに、シミュレーション実行停止用のコードを追加することとしてもよい。これにより、未定義または読み出し専用ビットフィールドへの書き込みが発生した場合に、エラーメッセージを出力するとともに、ソフトウェア検証のシミュレーションを停止させることができる。
【００８２】
また、抽出部５０３は、レジスタ仕様情報Ｒの中から、ハードウェアのすべてのレジスタのレジスタアドレスを抽出する。たとえば、ハードウェア（各ハードウェアブロック）のレジスタが『ＣＯＭＭＡＮＤ＿ＲＥＱ』、『ＣＯＭＭＡＮＤ＿ＳＴＡＴＵＳ』および『ＣＯＭ＿ＲＥＳＥＴ』であった場合、図６〜図８に示したレジスタ仕様情報Ｒ１，Ｒ２およびＲ３の中から、それぞれのレジスタアドレス『０２０』、『０４０』および『５００』を抽出する。
【００８３】
この場合、生成部５０２は、抽出部５０３によって抽出されたレジスタアドレスに基づいて、レジスタ仕様情報Ｒに定義されていない未定義レジスタへのアクセスの有無を判定するためのチェックコードを生成する。具体的には、たとえば、アクセス先のレジスタのレジスタアドレスがレジスタ仕様情報Ｒに定義されているか否かを判定するためのチェックコードを生成する。
【００８４】
作成部５０４は、ハードウェアの機能を実現するハードウェアモデルの動作が表現されたハードウェア記述情報Ｄを作成する機能を有する。ここで、ハードウェアモデルとは、ＣＰＵ上で動作するファームウェア（たとえば、ファームウェア３０６）からの読み出し／書き込みなどのアクセスへの応答、割り込み信号の発生、ブロック内部の処理など、ハードウェアの機能を擬似的に実現するソフトウェアによるモデルである。
【００８５】
このハードウェアモデルは、Ｃ／Ｃ＋＋言語またはＳｙｓｔｅｍＣなどのシステムレベル記述言語によって記述され、ハードウェアの機能のうち少なくともファームウェアからのレジスタまたはメモリへの読み出し／書き込み機能を実現するモデルである。また、ソフトウェアモデルとハードウェアモデルとのインターフェースは特に規定しない。
【００８６】
ここで、ハードウェア記述情報Ｄについて説明する。図１４は、ハードウェア記述情報Ｄの一例を示す説明図である。図１４において、ハードウェア記述情報Ｄ１には、レジスタモデル（Ｒｅａｄモデル）が記述されており、生成部５０２によって生成されたチェックコードを挿入するための挿入位置１４０１〜１４０５が定義されている。
【００８７】
また、ハードウェア記述情報Ｄ１において、コードＣ１４は、未定義アドレスからの読み出しが発生した場合にエラーメッセージを出力するためのチェックコードである。具体的には、たとえば、ｉｆ文を用いて未定義アドレスからの読み出しがあるか否かを判断し、未定義アドレスからの読み出しが発生した場合にエラーメッセージを出力する。さらに、コードＣ１５は、レジスタデータを読み出すための読み出し関数である。
【００８８】
ここで、出力されたハードウェア記述情報Ｄ１を用いたソフトウェア検証環境上でファームウェアを実行した場合の検証処理の具体例を説明する。まず、事前条件に関するチェックについて、たとえば、図６に示したレジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、レジスタ「ＣＯＭ＿ＳＴＡＴＵＳ」の値が「０」、レジスタ「ＤＥＣ＿ＭＯＤＥ」の値が「２」となっている場合はチェック合格となる。
【００８９】
一方で、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、レジスタ「ＣＯＭ＿ＳＴＡＴＵＳ」の値が「２」、レジスタ「ＤＥＣ＿ＭＯＤＥ」の値が「４」となっている場合はチェック不合格となり、コードＣ４（図９参照）に示したエラーメッセージが出力される。
【００９０】
つぎに、ビットフィールドの有効範囲に関するチェックについて、たとえば、図６に示したレジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、ビットフィールド「ＣＯＭ＿ＰＡＲＡＭ」の値が「５」となっている場合はチェック合格となる。なお、ビットフィールド「ＣＯＭＭＡＮＤ」の値を「１」とすると、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」全体での書き込み値は１６進数で「０５０１」となる。また、ビットフィールド「ＣＯＭ＿ＰＡＲＡＭ」は、符号付きのため２の補数表現を用いる。
【００９１】
一方で、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、ビットフィールド「ＣＯＭ＿ＰＡＲＡＭ」の値が「７」となっている場合はチェック不合格となり、コードＣ９（図１０参照）に示したエラーメッセージが出力される。なお、ビットフィールド「ＣＯＭＭＡＮＤ」の値を「１」とすると、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」全体での書き込み値は１６進数で「０７０１」となる。
【００９２】
つぎに、読み出し専用レジスタへの書き込みに関するチェックについて、たとえば、図７に示したレジスタ「ＣＯＭ＿ＳＴＡＴＵＳ」に対して読み出しが発生した場合はチェック合格となる。一方で、レジスタ「ＣＯＭ＿ＳＴＡＴＵＳ」に対して書き込みが発生した場合はチェック不合格となり、コードＣ１０（図１１参照）に示したエラーメッセージが出力される。
【００９３】
つぎに、書き込み専用レジスタへの読み出しに関するチェックについて、たとえば、図８に示したレジスタ「ＣＯＭ＿ＲＥＳＥＴ」に対して書き込みが発生した場合はチェック合格となる。一方で、レジスタ「ＣＯＭ＿ＲＥＳＥＴ」に対して読み出しが発生した場合はチェック不合格となり、コードＣ１１（図１２参照）に示したエラーメッセージが出力される。
【００９４】
つぎに、未定義ビットへの書き込みに関するチェックについて、たとえば、図６に示したレジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、未定義のビットフィールド部分のすべてのビットが「０」となっている場合はチェック合格となる。
【００９５】
具体的には、ビットフィールド「ＣＯＭ＿ＰＡＲＡＭ」の値が「５」（２進数：０１０１、１６進数：５）で、ビットフィールド「ＣＯＭＭＡＮＤ」の値を「１」（２進数：００１、１６進数：１）とすると、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」の値は、２進数で「００００  ０１０１  ００００  ０００１」、１６進数で「０５０１」となる。
【００９６】
この「０５０１」をｗｒｉｔｅＤａｔａとして、図１３に示したコードＣ１２のｉｆ文の条件式部分の演算をおこなうと、「０ｘ０５０１  ＆  ０ｘＦ０Ｆ８  ＝  ０ｘ００００」となり、結果が「０」となるため、ｉｆ文の条件式が偽（チェック合格を意味する）となる。なお、コードＣ１２中のマスク値（０ｘＦ０Ｆ８）は、レジスタの書き込み可能なビットを「０」、それ以外のビットを「１」として求める。
【００９７】
レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」の場合は、２進数で「１１１１  ００００  １１１１  １０００」、１６進数で「Ｆ０Ｆ８」となる。この値と書き込みデータのビットごとの論理積をとることで、書き込み可能なビットの値が「０」、それ以外のビットの値は元のまま、という結果が得られる。そのため、この論理積の値が「０」のときは書き込み可能ビット以外のビットはすべて「０」（エラーなし）、「０」でない場合は、書き込み可能ビット以外のビットのいずれかが「１」となっている（エラーあり）ことがわかる。
【００９８】
一方で、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」への書き込み時に、未定義のビットフィールド部分のいずれかのビットが「１」となっている場合はチェック不合格となり、コードＣ１３（図１３参照）に示したエラーメッセージが出力される。
【００９９】
具体的には、ビットフィールド「ＣＯＭ＿ＰＡＲＡＭ」の値が「５」（２進数：０１０１、１６進数：５）、ビットフィールド「ＣＯＭＭＡＮＤ」の値が「１」（２進数：００１、１６進数：１）で、未定義部分のビット１４とビット４が「１」となっていた場合、レジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」の値は２進数で「０１００  ０１０１  ０００１  ０００１」、１６進数で「４５１１」となる。
【０１００】
この「４５１１」をｗｒｉｔｅＤａｔａとして図１３に示したコードＣ１２のｉｆ文の条件式部分の演算をおこなうと、「０ｘ４５１１  ＆  ０ｘＦ０Ｆ８  ＝  ０ｘ４０１０」となり、結果が「０」ではないため、ｉｆ文の条件式が真（エラーを意味する）となり、コードＣ１３に示したエラーメッセージが出力される。
【０１０１】
つぎに、未定義アドレスへの書き込みに関するチェックについて、たとえば、図６に示したレジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」に対する書き込みが発生した場合はチェック合格となる。一方で、レジスタ仕様情報Ｒに定義されていないアドレスに対する書き込みが発生した場合はチェック不合格となり、その旨を示すエラーメッセージ（不図示）が出力される。
【０１０２】
たとえば、レジスタ仕様情報Ｒに「０ｘ００００〜０ｘ１ＦＦＦ」までのアドレスのレジスタが定義されている場合に、アドレス「０ｘ３０００」に対する書き込みが発生した場合、チェック不合格となり、その旨を示すエラーメッセージが出力される。
【０１０３】
つぎに、未定義アドレスへの読み出しに関するチェックについて、たとえば、図６に示したレジスタ「ＣＯＭＭＡＮＤ＿ＲＥＱ」に対する読み出しが発生した場合はチェック合格となる。一方で、レジスタ仕様情報Ｒに定義されていないアドレスに対する読み出しが発生した場合はチェック不合格となり、コードＣ１４に示した（図１４参照）エラーメッセージが出力される。
【０１０４】
たとえば、レジスタ仕様情報Ｒに「０ｘ００００〜０ｘ１ＦＦＦ」までのアドレスのレジスタが定義されている場合に、アドレス「０ｘ３０００」からの読み出しが発生した場合、チェック不合格となり、コードＣ１４に示したエラーメッセージが出力される。
【０１０５】
出力部５０５は、生成部５０２によって生成されたチェックコードを出力する機能を有する。さらに、作成部５０４によって作成されたハードウェア記述情報Ｄを出力することとしてもよい。なお、出力部５０５による出力形式は、ディスプレイ２３１での画面表示、プリンタ２３３での印刷出力、メモリへのデータ出力（保存）、外部のコンピュータ装置への送信のいずれであってもよい。
【０１０６】
（ソフトウェア検証支援装置のソフトウェア検証支援処理手順）
つぎに、この発明の実施の形態にかかるソフトウェア検証支援装置２００のソフトウェア検証支援処理手順について説明する。図１５は、この発明の実施の形態にかかるソフトウェア検証支援装置のソフトウェア検証支援処理手順を示すフローチャートである。
【０１０７】
図１５のフローチャートにおいて、まず、取得部５０１により、ハードウェアのレジスタ仕様を定義するレジスタ仕様情報Ｒを取得したか否かを判断する（ステップＳ１５０１）。ここで、レジスタ仕様情報Ｒを取得するのを待って（ステップＳ１５０１：Ｎｏ）、取得した場合（ステップＳ１５０１：Ｙｅｓ）、作成部５０４により、レジスタ仕様情報Ｒに定義されているレジスタごとにレジスタモデルを作成する（ステップＳ１５０２）。
【０１０８】
このあと、レジスタ仕様情報Ｒに定義されている任意のレジスタについて、事前条件に関するチェックの要否を判断する（ステップＳ１５０３）。具体的には、レジスタ仕様情報Ｒに事前条件が記載されている場合に、事前条件に関するチェックが必要であると判断する。ここで、事前条件に関するチェックが必要な場合（ステップＳ１５０３：Ｙｅｓ）、生成部５０２により、事前条件に関するチェックコードの生成処理を実行して（ステップＳ１５０４）、ステップＳ１５０５に移行する。
【０１０９】
また、ステップ１５０３において、事前条件に関するチェックが不要な場合（ステップＳ１５０３：Ｎｏ）、ビットフィールドの有効範囲に関するチェックの要否を判断する（ステップＳ１５０５）。具体的には、レジスタ仕様情報Ｒにビットフィールドの有効範囲が記載されている場合に、事前条件に関するチェックが必要であると判断する。
【０１１０】
ここで、ビットフィールドの有効範囲に関するチェックが必要な場合（ステップＳ１５０５：Ｙｅｓ）、生成部５０２により、ビットフィールドの有効範囲に関するチェックコードの生成処理を実行して（ステップＳ１５０６）、ステップＳ１５０７に移行する。
【０１１１】
また、ステップＳ１５０５において、ビットフィールドの有効範囲に関するチェックが不要な場合（ステップＳ１５０５：Ｎｏ）、生成部５０２により、読み出しまたは書き込み専用のレジスタへのアクセスに関するチェックコードの生成処理を実行し（ステップＳ１５０７）さらに、未定義ビットへの書き込みに関するチェックコードの生成処理を実行する（ステップＳ１５０８）。
【０１１２】
このあと、ステップＳ１５０１において取得されたレジスタ仕様情報Ｒに定義されているすべてのレジスタを網羅したか否かを判断し（ステップＳ１５０９）、網羅していない場合は（ステップＳ１５０９：Ｎｏ）、ステップＳ１５０２に戻り、一連の処理を繰り返す。一方で、すべてのレジスタを網羅した場合は（ステップＳ１５０９：Ｙｅｓ）、出力部５０６により、各種チェックコードが埋め込まれたハードウェア記述情報Ｄを出力して（ステップＳ１５１０）、本フローチャートによる一連の処理を終了する。
【０１１３】
つぎに、図１５に示したステップＳ１５０４における事前条件に関するチェックコード生成処理の処理手順について説明する。図１６は、事前条件に関するチェックコード生成処理の処理手順を示すフローチャートである。
【０１１４】
図１６のフローチャートにおいて、まず、抽出部５０３により、図１５に示したステップＳ１５０１において取得されたレジスタ仕様情報Ｒの中から、レジスタへの書き込み時に当該レジスタとは異なる他のレジスタが満たすべき事前条件を抽出する（ステップＳ１６０１）。
【０１１５】
このあと、生成部５０２により、チェック対象となるレジスタの値を代入するための変数宣言コードを生成する（ステップＳ１６０２）。つぎに、チェック対象のレジスタから値を読み出すための読み出しコードを生成する（ステップＳ１６０３）。そして、レジスタへの書き込み時に読み出した値が事前条件を満たしているか否かをチェックするためのチェックコードを生成する（ステップＳ１６０４）。
【０１１６】
さらに、事前条件を満たしていない場合にエラーメッセージを出力するためのエラーコードを生成する（ステップＳ１６０５）。このあと、すべての事前条件を網羅したか否かを判断し（ステップＳ１６０６）、網羅していない場合は（ステップＳ１６０６：Ｎｏ）、ステップＳ１６０１に戻り、一連の処理を繰り返す。一方、すべての事前条件を網羅した場合は（ステップＳ１６０６：Ｙｅｓ）、図１５に示したステップ１５０５に移行する。
【０１１７】
これにより、レジスタ仕様情報Ｒに定義されている各レジスタへの書き込み時に他のレジスタが事前条件を満たしているか否かを判定するためのチェックコード（図９参照）をレジスタごとに自動生成することができる。
【０１１８】
つぎに、図１５に示したステップＳ１５０６におけるビットフィールドの有効範囲に関するチェックコード生成処理の処理手順について説明する。図１７は、ビットフィールドの有効範囲に関するチェックコード生成処理の処理手順を示すフローチャートである。
【０１１９】
図１７のフローチャートにおいて、まず、レジスタ仕様情報Ｒを参照することにより、ビットフィールドの位置を特定する（ステップＳ１７０１）。そして、抽出部５０３により、レジスタ仕様情報Ｒの中から、レジスタを構成するビット列のうち書き込み可能なビット位置を指定するビットフィールドにおける値の有効範囲を抽出する（ステップＳ１７０２）。
【０１２０】
このあと、抽出された有効範囲が符号付きか否かを判断する（ステップＳ１７０３）。ここで、有効範囲が符号付きの場合（ステップＳ１７０３：Ｙｅｓ）、生成部５０２により、チェック対象となるビットフィールドの値を代入するための符号付き用の変数宣言コードを生成する（ステップＳ１７０４）。
【０１２１】
そして、ステップＳ１７０１において特定されたビットフィールドの位置に基づいて、チェック対象のビットフィールドに書き込まれた値を読み出すための読み出しコードを生成する（ステップＳ１７０５）。さらに、読み出した値を符号拡張するための符号拡張コードを生成する（ステップＳ１７０６）。
【０１２２】
このあと、読み出した値がビットフィールドの有効範囲内となっているか否かをチェックするためのチェックコードを生成する（ステップＳ１７０７）。一方、ステップＳ１７０３において、有効範囲が符号付きではない場合（ステップＳ１７０３：Ｎｏ）、生成部５０２により、チェック対象となるビットフィールドの値を代入するための符号なし用の変数宣言コードを生成する（ステップＳ１７０８）。
【０１２３】
そして、ステップＳ１７０１において特定されたビットフィールドの位置に基づいて、チェック対象のビットフィールドに書き込まれた値を読み出すための読み出しコードを生成して（ステップＳ１７０９）、ステップＳ１７０７に移行する。
【０１２４】
ステップＳ１７０７においてチェックコードを生成したあと、読み出した値が有効範囲外となっている場合にエラーメッセージを出力するためのエラーコードを生成する（ステップＳ１７１０）。このあと、すべてのビットフィールドを網羅したか否かを判断し（ステップＳ１７１１）、網羅していない場合は（ステップＳ１７１１：Ｎｏ）、ステップＳ１７０１に戻り、一連の処理を繰り返す。一方、すべてのビットフィールドを網羅した場合は（ステップＳ１７１１：Ｙｅｓ）、図１５に示したステップ１５０７に移行する。
【０１２５】
これにより、レジスタ仕様情報Ｒに定義されている各レジスタへの書き込み時に、ビットフィールドの値が有効範囲内となっているか否かを判定するためのチェックコード（図１０参照）をレジスタごとに自動生成することができる。
【０１２６】
つぎに、図１５に示したステップＳ１５０７におけるレジスタアクセスに関するチェックコード生成処理の処理手順について説明する。図１８は、レジスタアクセスに関するチェックコード生成処理の処理手順を示すフローチャートである。
【０１２７】
図１８のフローチャートにおいて、まず、抽出部５０３により、レジスタ仕様情報Ｒの中から、レジスタを構成する各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプ（Ｒ／Ｗ情報）を抽出する（ステップＳ１８０１）。このあと、抽出されたビットタイプに基づいて、チェック対象となるレジスタのレジスタマスク値を算出する（ステップＳ１８０２）。
【０１２８】
このとき、読み出し専用レジスタへの書き込みチェックをおこなう場合、書き込み可能なビットを“１”としたレジスタマスク値を算出する。また、書き込み専用レジスタへの読み出しチェックをおこなう場合、読み出し可能なビットを“１”としたレジスタマスク値を算出する。
【０１２９】
ステップＳ１８０２においてレジスタマスク値を算出したあと、そのレジスタマスク値が「レジスタマスク値＝＝０」となっているか否かを判断する（ステップＳ１８０３）。ここで、「レジスタマスク値＝＝０」となっている場合（ステップＳ１８０３：Ｙｅｓ）、チェック対象のレジスタへのアクセス違反が発生した場合のエラーメッセージを出力するためのエラーコードを生成して（ステップＳ１８０４）、図１５に示したステップＳ１５０８に移行する。
【０１３０】
具体的には、読み出し専用レジスタへの書き込み、または、書き込み専用レジスタへの読み出しが発生した場合のエラーメッセージを出力するためのエラーコードを生成する。一方、ステップＳ１８０３において、「レジスタマスク値＝＝０」となっていない場合（ステップＳ１８０３：Ｎｏ）、図１５に示したステップＳ１５０８に移行する。
【０１３１】
これにより、読み出し専用レジスタへの書き込み、または、書き込み専用レジスタへの読み出しの有無を判定するためのチェックコード（図１１および図１２参照）をレジスタごとに自動生成することができる。
【０１３２】
つぎに、図１５に示したステップＳ１５０８における未定義ビットに関するチェックコード生成処理の処理手順について説明する。図１９は、未定義ビットに関するチェックコード生成処理の処理手順を示すフローチャートである。
【０１３３】
図１９のフローチャートにおいて、まず、図１８に示したステップＳ１８０１において抽出されたビットタイプ（Ｒ／Ｗ情報）に基づいて、チェック対象となるレジスタのレジスタマスク値を算出する（ステップＳ１９０１）。このとき、書き込み可能なビットを“１”としたレジスタマスク値を算出する。
【０１３４】
このあと、レジスタマスク値が「レジスタマスク値！＝＝０ｘＦＦＦＦ」となっているか否かを判断する（ステップＳ１９０２）。ここで、「レジスタマスク値！＝＝０ｘＦＦＦＦ」となっている場合（ステップＳ１９０２：Ｙｅｓ）、生成部５０２により、未定義ビットへの書き込みを判定するためのチェックコードを生成する（ステップＳ１９０３）。
【０１３５】
さらに、未定義ビットへの書き込みが発生した場合のエラーメッセージを出力するためのエラーコードを生成して（ステップＳ１９０４）、図１５に示したステップＳ１５０９に移行する。また、ステップＳ１９０２において、「レジスタマスク値！＝＝０ｘＦＦＦＦ」となっていない場合（ステップＳ１９０２：Ｎｏ）、図１５に示したステップＳ１５０９に移行する。これにより、未定義ビットへの書き込みを判定するためのチェックコードをレジスタごとに自動生成することができる。
【０１３６】
この発明の実施の形態によれば、レジスタ仕様情報Ｒにアサーションに関する記載を追加することにより、レジスタへのアクセスを検証するためのチェックコードが挿入されたハードウェア記述情報Ｄを自動生成することができる。
【０１３７】
具体的には、レジスタ仕様情報Ｒに事前条件に関する記載を追加することにより、レジスタへの書き込み時に他のレジスタが事前条件を満たしているか否かを判定するためのチェックコードを自動生成することができる。また、レジスタ仕様情報Ｒにビットフィールドの値の有効範囲に関する記載を追加することにより、レジスタへの書き込み時にビットフィールドの値が有効範囲内となっているか否かを判定するためのチェックコードを自動生成することができる。
【０１３８】
また、レジスタ仕様情報の各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプに関する記載から、読み出しまたは書き込み専用レジスタへの書き込みまたは読み出しを判定するためのチェックコードを自動生成することができる。さらに、上記ビットタイプに基づいて、未定義ビットまたは読み出し専用ビットフィールドへの書き込みを判定するためのチェックコードを自動生成することができる。
【０１３９】
また、レジスタ仕様情報Ｒの各レジスタのレジスタアドレスに関する記載から、未定義レジスタへのアクセスを判定するためのチェックコードを自動生成することができる。これにより、ソフトウェアの詳細を理解していないハードウェアモデル開発者によるアサーションの記述を可能とし、さらに、大量のレジスタを持つＳｏＣ向けのファームウェアのチェックコードを生成する際の作業負担を軽減することができる。
【０１４０】
また、アサーションが挿入されたハードウェア記述情報Ｄを用いて、ハードウェアモデル上で動作するソフトウェアモデルの検証をおこなうことができる。この結果、各種チェックに不合格となった場合には、その旨を示すエラーメッセージが出力されるため、バグの発生箇所を容易に特定することができる。
【０１４１】
以上説明したように、ソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法によれば、ソフトウェア検証のチェッカが挿入されたハードウェアモデルの自動生成を実現することにより、ソフトウェア開発と並行したハードウェアモデル開発の実行を可能とし、開発期間の短縮化を図ることができる。
【０１４２】
なお、本実施の形態で説明したソフトウェア検証支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な伝送媒体であってもよい。
【０１４３】
また、本実施の形態で説明したソフトウェア検証支援装置２００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述したソフトウェア検証支援装置２００の機能的構成５０１〜５０６をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、ソフトウェア検証支援装置２００を製造することができる。
【０１４４】
（付記１）ハードウェアとソフトウェアとからなるシステムのうち前記ソフトウェアの検証をコンピュータに支援させるソフトウェア検証支援プログラムにおいて、
前記ハードウェアのレジスタ仕様を定義するレジスタ仕様情報を取得させる取得工程と、
前記取得工程によって取得されたレジスタ仕様情報に基づいて、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードを生成させる生成工程と、
前記生成工程によって生成されたチェックコードを出力させる出力工程と、
を前記コンピュータに実行させることを特徴とするソフトウェア検証支援プログラム。
【０１４５】
（付記２）前記取得工程によって取得されたレジスタ仕様情報の中から、前記レジスタごとに、前記レジスタへの書き込み時に当該レジスタとは異なる他のレジスタが満たすべき条件を抽出させる抽出工程を前記コンピュータに実行させ、
前記生成工程は、
前記抽出工程によって抽出された条件に基づいて、前記レジスタへの書き込み時に前記他のレジスタが前記条件を満たしているか否かを判定するためのチェックコードを生成させることを特徴とする付記１に記載のソフトウェア検証支援プログラム。
【０１４６】
（付記３）前記抽出工程は、
前記レジスタ仕様情報の中から、前記レジスタごとに、当該レジスタを構成するビット列のうち書き込み可能なビット位置を指定するビットフィールドの値の有効範囲を抽出させ、
前記生成工程は、
前記抽出工程によって抽出された有効範囲に基づいて、前記レジスタへの書き込み時に前記ビットフィールドの値が前記有効範囲内となっているか否かを判定するためのチェックコードを生成させることを特徴とする付記１または２に記載のソフトウェア検証支援プログラム。
【０１４７】
（付記４）前記抽出工程は、
前記レジスタ仕様情報の中から、前記レジスタごとに、当該レジスタを構成する各ビットへの読み出しまたは／および書き込みの可否を特定するビットタイプを抽出させ、
前記生成工程は、
前記抽出工程によって抽出されたビットタイプに基づいて、読み出し専用レジスタへの書き込みを判定するためのチェックコードを生成させることを特徴とする付記１〜３のいずれか一つに記載のソフトウェア検証支援プログラム。
【０１４８】
（付記５）前記生成工程は、
前記抽出工程によって抽出されたビットタイプに基づいて、書き込み専用レジスタへの読み出しを判定するためのチェックコードを生成させることを特徴とする付記４に記載のソフトウェア検証支援プログラム。
【０１４９】
（付記６）前記生成工程は、
前記抽出工程によって抽出されたビットタイプに基づいて、ビットフィールドが定義されていない未定義ビットまたは読み出し専用ビットフィールドへの書き込みを判定するためのチェックコードを生成させることを特徴とする付記４または５に記載のソフトウェア検証支援プログラム。
【０１５０】
（付記７）前記抽出工程は、
前記レジスタ仕様情報の中から、前記ハードウェアのすべてのレジスタのレジスタアドレスを抽出させ、
前記生成工程は、
前記抽出工程によって抽出されたレジスタアドレスに基づいて、前記レジスタ仕様情報に定義されていない未定義レジスタへのアクセスを判定するためのチェックコードを生成させることを特徴とする付記１〜６のいずれか一つに記載のソフトウェア検証支援プログラム。
【０１５１】
（付記８）前記ハードウェアの機能を実現するハードウェアモデルの動作が表現されたハードウェア記述情報を作成させる作成工程を前記コンピュータに実行させ、
前記出力工程は、
前記作成工程によって作成されたハードウェア記述情報を出力させることを特徴とする付記１〜７のいずれか一つに記載のソフトウェア検証支援プログラム。
【０１５２】
（付記９）付記１〜８のいずれか一つに記載のソフトウェア検証支援プログラムを記録したコンピュータに読み取り可能な記録媒体。
【０１５３】
（付記１０）ハードウェアとソフトウェアとからなるシステムのうち前記ソフトウェアの検証を支援するソフトウェア検証支援装置において、
前記ハードウェアのレジスタ仕様を定義するレジスタ仕様情報を取得する取得手段と、
前記取得手段によって取得されたレジスタ仕様情報に基づいて、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードを生成する生成手段と、
前記生成手段によって生成されたチェックコードを出力する出力手段と、
を備えることを特徴とするソフトウェア検証支援装置。
【０１５４】
（付記１１）ハードウェアとソフトウェアとからなるシステムのうち前記ソフトウェアの検証を支援するソフトウェア検証支援方法において、
前記ハードウェアのレジスタ仕様を定義するレジスタ仕様情報を取得する取得工程と、
前記取得工程によって取得されたレジスタ仕様情報に基づいて、前記ソフトウェアからの前記レジスタへのアクセスを検証するためのチェックコードを生成する生成工程と、
前記生成工程によって生成されたチェックコードを出力する出力工程と、
を含んだことを特徴とするソフトウェア検証支援方法。
【産業上の利用可能性】
【０１５５】
以上のように、本発明にかかるソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法は、ハードウェアとソフトウェアとが混在するシステムのソフトウェア検証に有用である。
【図面の簡単な説明】
【０１５６】
【図１】ハードウェア／ソフトウェア混在システムの開発工程を示す説明図である。
【図２】この発明の実施の形態にかかるソフトウェア検証装置のハードウェア構成を示す説明図である。
【図３】検証対象の一例を示す説明図である。
【図４】ソフトウェア検証環境の一例を示す説明図である。
【図５】この発明の実施の形態にかかるソフトウェア検証支援装置の機能的構成を示すブロック図である。
【図６】レジスタ仕様情報の一例を示す説明図（その１）である。
【図７】レジスタ仕様情報の一例を示す説明図（その２）である。
【図８】レジスタ仕様情報の一例を示す説明図（その３）である。
【図９】事前条件に関するチェックコードの一例を示す説明図である。
【図１０】ビットフィールドの有効範囲に関するチェックコードの一例を示す説明図である。
【図１１】読み出し専用レジスタへの書き込みに関するチェックコードの一例を示す説明図である。
【図１２】書き込み専用レジスタへの書き込みに関するチェックコードの一例を示す説明図である。
【図１３】未定義ビットまたは読み出し専用ビットフィールドへの書き込みに関するチェックコードの一例を示す説明図である。
【図１４】ハードウェア記述情報Ｄの一例を示す説明図である。
【図１５】この発明の実施の形態にかかるソフトウェア検証支援装置のソフトウェア検証支援処理手順を示すフローチャートである。
【図１６】事前条件に関するチェックコード生成処理の処理手順を示すフローチャートである。
【図１７】ビットフィールドの有効範囲に関するチェックコード生成処理の処理手順を示すフローチャートである。
【図１８】レジスタアクセスに関するチェックコード生成処理の処理手順を示すフローチャートである。
【図１９】未定義ビットに関するチェックコード生成処理の処理手順を示すフローチャートである。
【符号の説明】
【０１５７】
２００  ソフトウェア検証支援装置
３０１  ＣＰＵ
３０２  ＨＷブロックＡ
３０３  ＨＷブロックＢ
３０４  ＨＷブロックＣ
３０５  メモリ
３０６  ファームウェア
３１０  バス
４０１  ＩＳＳ
４０２  ＨＷモデルＡ
４０３  ＨＷモデルＢ
４０４  ＨＷモデルＣ
４０５  メモリモデル
４０６，４０７，４０８  アサーション
５０１  取得部
５０２  生成部
５０３  抽出部
５０４  作成部
５０５  出力部
Ｒ，Ｒ１，Ｒ２，Ｒ３  レジスタ仕様情報
Ｄ，Ｄ１  ハードウェア記述情報
【図１】
0005034867.tif 000002
【図２】
0005034867.tif 000003
【図３】
0005034867.tif 000004
【図４】
0005034867.tif 000005
【図５】
0005034867.tif 000006
【図６】
0005034867.tif 000007
【図７】
0005034867.tif 000008
【図８】
0005034867.tif 000009
【図９】
0005034867.tif 000010
【図１０】
0005034867.tif 000011
【図１１】
0005034867.tif 000012
【図１２】
0005034867.tif 000013
【図１３】
0005034867.tif 000014
【図１４】
0005034867.tif 000015
【図１５】
0005034867.tif 000016
【図１６】
0005034867.tif 000017
【図１７】
0005034867.tif 000018
【図１８】
0005034867.tif 000019
【図１９】
0005034867.tif 000020