(57)【要約】【課題】複数のデータの任意の競合点における競合タイミングを最適に調整できること。【解決手段】半導体装置の入力のトランザクションと、イベントとを関連付けたイベントテーブル１０２と、競合させたい一対のイベントの入力に基づき、イベントテーブル１０２を参照して、一対のイベントに関連する複数のトランザクションを１組毎に選択し、選択した１組のトランザクションに含まれる一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整し、入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断し、判断結果として不一致が得られた１組のトランザクションと、調整した入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力する競合シナリオ生成部１０３と、を有する。【選択図】図１
2015026337.tif 000002
【特許請求の範囲】
【請求項１】
半導体装置の内部信号を任意のイベントで競合させる競合タイミングを調整する競合テスト用タイミング調整プログラムにおいて、
コンピュータに、
競合させたい一対のイベントの指定により、前記半導体装置の入力のトランザクションと前記イベントとに基づき、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択させ、
選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整させ、
入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断させ、
判断結果として不一致が得られた１組のトランザクションと、調整した前記入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力させる、
処理を実行させることを特徴とする競合テスト用タイミング調整プログラム。
【請求項２】
前記半導体装置の入力のトランザクションと、前記イベントとを関連付けたイベントテーブルを生成させ、
競合させたい一対のイベントの入力に基づき、前記イベントテーブルを参照して、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択させることを特徴とする請求項１に記載の競合テスト用タイミング調整プログラム。
【請求項３】
前記判断結果として一致が生じた前記一方のトランザクションには低い優先度を付与することを特徴とする請求項１または２に記載の競合テスト用タイミング調整プログラム。
【請求項４】
前記判断結果として一致が生じた後、前記一対のイベントに関連する前記トランザクションの組が残っていない場合には、一対のイベントに対するタイミング調整が不可であると判断することを特徴とする請求項１〜３のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【請求項５】
前記トランザクションをシミュレータに実行させ、前記イベントが生じた時刻を前記イベントテーブルに記録させることを特徴とする請求項２〜４のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【請求項６】
前記タイミング調整結果により得られた複数組のトランザクションをシミュレータに出力させ、
前記シミュレータのシミュレーション結果に基づき、前記一対のイベントにおける競合条件が満たされた場合に、一対のイベントに対するタイミング調整に関する情報を競合シナリオとして出力させる、
ことを特徴とする請求項１〜５のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【請求項７】
前記判断結果として一致が生じた前記一方のトランザクションは、前記イベントテーブルの優先度が低い格納位置に変更させることを特徴とする請求項２〜６のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【請求項８】
選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻のうち、時刻が最大値のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整させることを特徴とする請求項１〜７のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【請求項９】
半導体装置の内部信号を任意のイベントで競合させる競合タイミングを調整する競合テスト用タイミング調整方法において、
コンピュータが、
競合させたい一対のイベントの指定により、前記半導体装置の入力のトランザクションと前記イベントとに基づき、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択し、
選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整し、
入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断し、
判断結果として不一致が得られた１組のトランザクションと、調整した前記入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力する、
処理を実行することを特徴とする競合テスト用タイミング調整方法。
【請求項１０】
半導体装置の内部信号を任意のイベントで競合させる競合タイミングを調整する競合テスト用タイミング調整装置において、
前記半導体装置の入力のトランザクションと、前記イベントとを関連付けたイベントテーブルと、
競合させたい一対のイベントの入力に基づき、前記イベントテーブルを参照して、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択し、
選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整し、
入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断し、
判断結果として不一致が得られた１組のトランザクションと、調整した前記入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力する競合シナリオ生成部と、
を有することを特徴とする競合テスト用タイミング調整装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置の競合テスト用タイミング調整プログラム、競合テスト用タイミング調整方法および競合テスト用タイミング調整装置に関する。
【背景技術】
【０００２】
ＬＳＩ等の半導体装置は、機能検証装置を用いてハードウェア記述言語により記載された論理回路を検証する。この機能検証の一つとして、複数信号のタイミング依存によるＬＳＩ内部信号の競合検証がある。
【０００３】
競合検証では、例えば、競合の条件を登録したテーブルを参照し、複数のプログラムが並行して動作するシミュレーション中に発生した条件のうち競合させたい条件が一致するかをチェックする技術がある。この技術では、一部の条件一致時にシミュレーション実行を停止し、全部の条件一致時にシミュレーション実行を再開させる（例えば、下記特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−２３８００２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、データの入力側からみて深い位置に位置する競合点における競合の検証時に、複数のデータパス別の時間差を全て把握して競合を生じさせることは困難であり、競合の検証に手間がかかった。
【０００６】
例えば、競合点として、コア内部の競合点（アービタ）の調停動作（優先出力）を確認するために、このアービタに対して２つの信号（データ１，データ２）が同時に入力されたときの検証を行う。この際、コアに対して外部からそれぞれ入力される２つのデータは、競合点（アービタ）に到達するまでにかかる時間が異なる場合がある。例えば、２つのデータパス上で競合点（アービタ）より手前の回路ブロック（例えば、フリップフロップ（ＦＦ））で所定のイベント発生が生じると、検証が必要な競合点（アービタ）にリクエストが届くまでの（遅延）時間が異なってしまう。
【０００７】
図１０は、競合の発生を説明するための図である。横軸は時間であり、縦軸には２つのデータ（データ１，データ２）を示す。はじめに、（ａ）に示すように、データ１，２を同時に（時期ｔ＝０）入力させたとする。このときのアービタに対するリクエストが生じるまでの時間は、データ１がｔ＝１、データ２がｔ＝２であったとする。この場合、データ１，２間のリクエストの時間差Δを波形等で確認する。この後、（ｂ）に示すように、時間差Δに相当する分だけデータ２の入力タイミングを遅らせれば、競合点（アービタ）においてデータ１，２のリクエストが競合可能となる。
【０００８】
しかしながら、（ｂ）に示した入力タイミングを遅らせたとしても、競合点（アービタ）においてデータ１，２のリクエストのタイミングが競合しない場合がある。例えば、（ｃ）に示すように、データ２に対して時間差Δを与えて入力しても、実際に競合点（アービタ）にリクエストが発生するまでの時間がｔ＝２’となり予想したｔ＝２と異なることがある。
【０００９】
この相違は、データパス上の複数の回路ブロック（ＦＦ）において所定のイベント発生等に基づく遅延量の積算によって生じる。従来、検証装置では、大規模なＬＳＩ上での個々の回路ブロック（ＦＦ）の順序制御までは把握せずに、時間差Δを更新して所定回数までに競合条件が満たされるか判断している。そして、検証装置による競合条件が満たされない場合、設計者により時間差Δを手作業で更新する等の作業が必要となり、競合条件に収束するまでに時間と手間がかかった。また、手作業で行っても競合条件に収束しない結果となる場合もある。
【００１０】
ここで、データパス上の回路ブロック（ＦＦ）は膨大な数であるため、個々の回路ブロックの動作にかかる遅延量を全て把握することは困難であり、競合点（アービタ）における競合のタイミングが最適となるようにいかにして調整するか、その具体的解決が望まれている。データの入力側からみたデータパスの深い位置の競合点（アービタ）では、手前に多数のブロックが存在するため、複数のデータが競合する入力タイミングを得ることが困難であった。
【００１１】
一つの側面では、本発明は、複数のデータの任意の競合点における競合タイミングを最適に調整できることを目的とする。
【課題を解決するための手段】
【００１２】
一つの案では、競合させたい一対のイベントの指定により、半導体装置の入力のトランザクションとイベントとに基づき、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択し、選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整し、入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断し、判断結果として不一致が得られた１組のトランザクションと、調整した前記入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力する。
【発明の効果】
【００１３】
一つの実施形態によれば、複数のデータの任意の競合点における競合タイミングを最適に調整できる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施の形態にかかる競合テスト用タイミング調整装置の機能を示すブロック図である。
【図２】図２は、イベントテーブルに格納されるイベントテーブル情報を示す図表である。
【図３】図３は、イベントテーブル生成の処理手順の一例を示すフローチャートである。
【図４】図４は、競合シナリオ生成にかかるトランザクション選択例を説明するための図表である。
【図５】図５は、競合シナリオ生成のためのトランザクション選択処理の一例を示すフローチャートである。
【図６】図６は、競合シナリオ生成処理の一例を示すフローチャートである。
【図７】図７は、競合テスト用タイミング調整装置のハードウェア構成の一例を示すブロック図である。
【図８】図８は、競合テスト用タイミング調整装置の配置例を示す図である。
【図９】図９は、競合点でのタイミング競合の一例を示す図である。
【図１０】図１０は、競合の発生を説明するための図である。
【発明を実施するための形態】
【００１５】
（実施の形態）
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。図１は、実施の形態にかかる競合テスト用タイミング調整装置の機能を示すブロック図である。競合テスト用タイミング調整装置１００は、イベントテーブル生成部１０１と、イベントテーブル１０２と、競合シナリオ生成部１０３と、を含む。
【００１６】
イベントテーブル生成部１０１は、コアに対する入力トランザクションの集合の情報（Ｔｒ１，Ｔｒ２，…，Ｔｒｎ）１１０と、コア内部における内部イベントのリスト情報（Ｅｖ１，Ｅｖ２，…，Ｅｖｍ）１１１とに基づき、イベントテーブル情報１１２を生成し、イベントテーブル１０２に格納する。内部イベントのリスト情報１１１は、コア内部において競合点（アービタ等）における競合させたい（競合対象）のイベントを含む。
【００１７】
競合シナリオ生成部１０３は、イベントテーブル１０２に格納されたイベントテーブル情報１１２と、競合させたいイベントの組の情報１１３の指定入力と、に基づいて、競合させたいイベントに対する競合シナリオの情報１２１を生成する。競合させたいイベントの組の情報１１３は、内部イベントのリスト情報１１１のなかからサブセットとして用意し、指定入力することができる。例えば、競合点がコア内部の所定のブロック（例えばアービタ）の場合、このブロック（アービタ）に対してリクエスト（Ｒｅｑ）を出力する１対のブロック（例えばＦＦ）がイベントの組の情報として指定入力される。
【００１８】
（イベントテーブルの生成について）
図２は、イベントテーブルに格納されるイベントテーブル情報を示す図表である。イベントテーブル生成部１０１は、入力トランザクションの集合の情報１１０の複数のトランザクション（Ｔｒｉ）をシミュレータによりシミュレーション実行する。このシミュレーション実行時に、イベントテーブル生成部１０１は、内部イベントのリスト情報１１１に登録されたイベント（Ｅｖｊ）が発生する時刻（Ｔｋ）を一覧化したイベントテーブル情報１１２をイベントテーブル１０２に格納する。イベントテーブル情報１１２は、縦軸が各トランザクションＴｒｉ、横軸には各イベントＥｖｊを時刻Ｔｋ毎に（右方向ほど時刻経過）格納する。
【００１９】
例えば、各イベントＥｖｊは、コア内部におけるデータパス上の各ＦＦに相当する。図２において、例えば、図中１１２ａに示すトランザクションＴｒ３を実行した際に、イベントＥｖ１，Ｅｖ３は発生せず、イベントＥｖ２，Ｅｖ４，Ｅｖ５が発生した時刻がそれぞれＴ＝５０，８０，１００であることを示している。
【００２０】
図３は、イベントテーブル生成の処理手順の一例を示すフローチャートである。イベントテーブル生成部１０１が行うイベントテーブル情報１１２の生成内容について説明する。はじめに、イベントテーブル生成部１０１は、トランザクションＴｒｉ実行の初期値ｉ＝０をセットする（ステップＳ３０１）。次に、イベントテーブル生成部１０１は、シミュレータにより、入力トランザクションの集合の情報１１０が示すトランザクションＴｒｉを実行させる（ステップＳ３０２）。
【００２１】
この後、イベントテーブル生成部１０１は、内部イベントのリスト情報１１１に登録されたイベント（Ｅｖｊ）が発生する時刻（Ｔｋ）をイベントテーブル情報１１２の該当するイベント（Ｅｖｊ）に記録する（ステップＳ３０３）。そして、変数ｉをインクリメントする。
【００２２】
そして、イベントテーブル生成部１０１は、ｎ個の最後のトランザクション（Ｔｒｎ）のシミュレーション実行が終了したか判断する（ｉ＜ｎ）（ステップＳ３０４）。そして、未実行分のトランザクションがあれば（ステップＳ３０４：Ｎｏ）、ステップＳ３０２に戻り、全て実行済みであれば（ステップＳ３０４：Ｙｅｓ）、以上のイベントテーブル情報１１２の生成の処理を終了する。
【００２３】
（競合シナリオの生成について）
競合シナリオ生成部１０３は、以下の（１）、（２）の処理を行う。
（１）競合イベントが同時に発生するための時刻調整と、トランザクションの組の優先度の付与。この処理では、イベントテーブル情報１１２に基づいて、競合点において競合させたいイベントが発生するトランザクションの組を全て生成する。そして、競合させたいイベントが同時に発生するように、トランザクションの開始時刻を決定する。また、他のイベントの競合可能性により、生成したトランザクションの組に優先度を付与する。
【００２４】
（２）上記（１）で付与された優先度順にトランザクションの各組み合わせのシミュレーション実行による競合発生の有無の確認と、競合シナリオの生成。この処理では、競合シナリオ生成部１０３は、トランザクションの各組み合わせに対し、優先度順にシミュレータによるシミュレーションの実行により、実際に競合点で競合が生じるか否かを確認し、競合が起こった組み合わせを競合シナリオ１２１として出力する。
【００２５】
（１：競合イベントが同時に発生するための時刻調整と、トランザクションの組の優先度の付与の処理内容の説明）
図４は、競合シナリオ生成にかかるトランザクション選択例を説明するための図表である。図２と同様のイベントテーブル情報１１２の例を用い、競合シナリオ生成部１０３が行う処理例について説明する。ここで、競合点（アービタ等）において競合させたいイベントの組がＥｖ４とＥｖ５であるとする。
【００２６】
はじめに、（ａ）に示すように、競合シナリオ生成部１０３は、（１）イベントＥｖ４を発生させるトランザクションＴｒを探す。そして、（２）イベントＥｖ４が含まれるトランザクションＴｒ１を選択する。この後、（３）イベントＥｖ５を発生させるトランザクションを探し、トランザクションＴｒ２を選択する。
【００２７】
この後、（ｂ）示すように、（４）選択したトランザクションＴｒ１のイベントＥｖ４（Ｔ＝５０）と、トランザクションＴｒ２のイベントＥｖ５（Ｔ＝８０）を同時に発生させる時刻を判断する。この場合、競合シナリオ生成部１０３は、トランザクションＴｒ１とＴｒ２の時刻の差分Δにより、トランザクションＴｒ１の開始時刻を＋３０と判断する。
【００２８】
この後、（ｃ）に示すように、（５）トランザクションＴｒ１のイベントＥｖ２の時刻が５０となり（２０＋３０）、トランザクションＴｒ２のイベントＥｖ２の時刻５０と同じになる。これにより、イベントＥｖ２における競合による調停が働き、トランザクションＴｒ１またはＴｒ２のいずれかの処理が待たされる（遅延が生じる）可能性がある。
【００２９】
イベントＥｖ２の発生は、競合させたいイベントＥｖ４とＥｖ５が発生する前（データパス上の手前）の位置であるため、競合シナリオ生成部１０３は、イベントＥｖ２における調停の結果、イベントＥｖ４とＥｖ５は同時に発生（競合）しない可能性があると判断する。このような場合、競合シナリオ生成部１０３は、トランザクションＴｒ１とＴｒ２の組み合わせを低優先度に設定する。
【００３０】
そして、（ｄ）に示すように、（６）一方のトランザクションＴｒ１を基準として組み合わせたときの他方のトランザクションＴｒ２を優先度を下げ、対応してテーブルの格納順位を下げる。この後、（７）競合シナリオ生成部１０３は、再度イベントＥｖ５を生じるトランザクションＴｒを探し、（８）トランザクションＴｒ３を選択する。
【００３１】
この後、選択したトランザクションＴｒ１のイベントＥｖ４（Ｔ＝５０）と、トランザクションＴｒ３のイベントＥｖ５（Ｔ＝１００）を同時に発生させる時刻を判断する。この場合、競合シナリオ生成部１０３は、トランザクションＴｒ１とＴｒ３の時刻の差分Δにより、トランザクションＴｒ１の開始時刻を＋５０と判断する。
【００３２】
この場合、（ｅ）に示すように、トランザクションＴｒ１について、（９）イベントＥｖ２の開始時刻は７０となり（２０＋５０）、トランザクションＴｒ３の時刻５０と異なるため、同時に発生しない（競合なし）と判断する。また、（１０）イベントＥｖ３については、トランザクションＴｒ３側にイベントがないため、同時に発生しないと判断する。そして、（１１）イベントＥｖ４の開始時刻は１００であり（５０＋５０）、トランザクションＴｒ３の時刻８０と異なるため、同時に発生しない（競合なし）と判断する。
【００３３】
以上により、競合シナリオ生成部１０３は、（１２）トランザクションＴｒ１とＴｒ３の組み合わせを高優先度とする。
【００３４】
この後、競合シナリオ生成部１０３は、トランザクションの各組み合わせに対し、シミュレータによるシミュレーションの実行により、実際に競合点で競合が生じるか否かを確認し、競合が起こった組み合わせを競合シナリオ１２１として出力する。この際、図４に示した高優先度のトランザクションＴｒ１のイベントＥｖ４と、トランザクションＴｒ３のイベントＥｖ５との組み合わせ、を優先してシミュレーションを行う。
【００３５】
図５は、競合シナリオ生成のためのトランザクション選択処理の一例を示すフローチャートである。上記図４の処理例に示した競合シナリオ生成部１０３が行う処理内容について説明する。以下の処理では、競合させたいイベントを含む１組のトランザクションを選択して、１組のトランザクションに含まれる複数の他の（競合点以外の）イベントについての競合が発生しないトランザクションの組を選択する。競合シナリオ生成部１０３は、イベントテーブル１０２のイベントテーブル情報１１２からトランザクションの組を変更して読み出し、各トランザクションの組に対する以下の処理を行う。
【００３６】
はじめに、競合シナリオ生成部１０３は、イベントテーブル１０２のイベントテーブル情報１１２を読み出し、競合点におけるイベントＥｖｊを含むトランザクションＴｒｉを選択する（ステップＳ５０１）。次に、選択したトランザクションＴｒｉに含まれる全てのイベントＥｖｊを抽出したか判断し（ステップＳ５０２）、未抽出分が残っていれば（ステップＳ５０２：Ｎｏ）、残りのイベントＥｖｊを抽出し（ステップＳ５０３）、ステップＳ５０１に戻る。全て抽出済みであれば（ステップＳ５０２：Ｙｅｓ）、ステップＳ５０４に移行する。
【００３７】
ステップＳ５０１〜ステップＳ５０３の処理により、イベントテーブル情報１１２に含まれる全てのトランザクションＴｒｉの全てのイベントＥｖｊが抽出される。抽出した情報は、図示しないメモリに保持しておく。例えば、図４の（ａ）に示す例では、トランザクションＴｒ１〜Ｔｒ３に含まれる各イベントＥｖが抽出される。
【００３８】
以下の処理では、競合シナリオ生成部１０３は、競合点における競合を発生させる複数のイベントＥｖｊを含む全てのトランザクションＴｒｉについて、１組（一対）のトランザクションＴｒｉ毎にタイミング（時刻）調整を行い、競合点以外でのイベントでの競合の発生の有無を確認する。
【００３９】
まず、競合シナリオ生成部１０３は、１組のトランザクションＴｒｉを選択する（ステップＳ５０４）。例えば、図４に示したトランザクションＴｒ１，Ｔｒ２を選択する。次に、選択した１組のトランザクションＴｒｉのうち、時刻Ｔｉｊが最大値のイベントＥｖｊを探す（ステップＳ５０５）。最大値の時刻Ｔｉｊにおけるイベントは、コア上のデータパスにおいて最も奥部に位置するブロック（アービタ等）における競合を示す。例えば、図４の（ｂ）に示す例では、１組のトランザクションＴｒ１，Ｔｒ２のうち最大値の時刻Ｔｉｊは、８０である。
【００４０】
なお、この例では、競合点を最も奥に位置するブロックとして時刻の最大値を探すこととしたが、競合点をデータパス上でより手前の任意のブロックに設定し、対応する時刻を探すこととしてもよい。
【００４１】
次に、競合シナリオ生成部１０３は、選択した１組のトランザクションＴｒｉのうち一方のトランザクションＴｒｉの開始時刻を変更する（ステップＳ５０６）。この際、競合シナリオ生成部１０３は、１組のトランザクションＴｒｉにおける競合点における時刻が同じになる差分Δを求め、一方のトランザクションＴｒｉの開始時刻に差分Δを加える。例えば、図４の（ｃ）に示す例では、トランザクションＴｒ１の開始時刻に差分Δとして３０を加える。
【００４２】
次に、競合シナリオ生成部１０３は、差分Δを加えたトランザクションＴｒｉに含まれる各イベントＥｖｊの時刻に差分Δを加える（ステップＳ５０７）。図４の（ｃ）に示す例では、トランザクションＴｒ１の各イベントＥｖ２，Ｅｖ３，Ｅｖ４の時刻にそれぞれ差分Δの３０が加えられる。
【００４３】
次に、競合シナリオ生成部１０３は、選択した一対のトランザクションＴｒｉにおける各イベントＥｖｊにおける競合の有無を確認する処理を行う。この際、所望する競合点に対応するイベントＥｖｊの時刻は一致し、かつ、他のイベントＥｖｊにおける時刻が不一致であることを条件として確認の処理を行う。
【００４４】
ステップＳ５０８の処理は、１組のトランザクションＴｒｉを更新する処理であるが、競合シナリオ生成部１０３は、初回については、ステップＳ５０４にて選択された１組のトランザクションＴｒｉを選択する（ステップＳ５０８）。
【００４５】
以降の処理では、変数ｋのインクリメントにより、競合点における競合を行うトランザクションＴｒｉの組が変更される。すなわち、競合点（アービタ）に対するデータ入力は、１組に限らず複数存在する可能性があるため、これら複数のデータ入力に対応する複数組のトランザクションＴｒｉを順次選択する。例えば、図４の例では、トランザクションＴｒ１とＴｒ２の組の後、トランザクションＴｒ１を代えずにトランザクションＴｒ３を選択してトランザクションＴｒ１，Ｔｒ３を１組とする。
【００４６】
ステップＳ５０８の後、競合シナリオ生成部１０３は、１組のトランザクションＴｒｉについて、各イベントＥｖｊにおける時刻Ｔｉｊが不一致であるか判断する（ステップＳ５０９）。例えば、図４の（ｃ）に示す例では、トランザクションＴｒ１，Ｔｒ２のイベントＥｖ２，Ｅｖ３，Ｅｖ４における時刻の不一致を判断する。
【００４７】
この結果、競合シナリオ生成部１０３は、イベントＥｖｊにおける時刻の一致が生じた場合には（ステップＳ５０９：Ｎｏ）、該当するトランザクションＴｒｉの優先度を下げ、イベントテーブル情報１１２の最下段に位置変更する（ステップＳ５１０）。例えば、図４（ｄ）に示すように、１組のトランザクションＴｒｉのうち一方のトランザクションＴｒ２の優先度を下げてイベントテーブル情報１１２の最下段に位置変更する。これにより、イベントテーブル情報１１２には、上段ほど、優先度が高いトランザクションＴｒｉが格納されることになる。
【００４８】
次に、競合シナリオ生成部１０３は、１組のトランザクションＴｒｉの一方のトランザクションを新たなトランザクションＴｒｉに変更する（ステップＳ５１１）。この際、トランザクションは競合点におけるイベント（時刻）を含むトランザクションを選択する。図４の（ｄ）の例では、新たなトランザクションＴｒｉとしてトランザクションＴｒ３を選択し、トランザクションＴｒ１，Ｔｒ３が新たな１組のトランザクションとなる。
【００４９】
次に、競合シナリオ生成部１０３は、この新たな一組のトランザクションＴｒｉを用いた上記のタイミング調整の処理を実行済みであるか確認する（ステップＳ５１２）。未実行の組であれば（ステップＳ５１２：Ｎｏ）、ステップＳ５０９に戻るが、実行済みであれば（ステップＳ５１２：Ｙｅｓ）、全ての組み合わせのトランザクションＴｒｉにおいてタイミング調整の結果、競合点以外のイベントでの競合が生じたため、タイミング調整（以降の競合シナリオ作成）は不可能と判断し（ステップＳ５１３）、以上のタイミング調整にかかる処理を終了する。
【００５０】
また、上記ステップＳ５０９において、競合シナリオ生成部１０３は、イベントＥｖｊにおける時刻の不一致が確認できた場合には（ステップＳ５０９：Ｙｅｓ）、競合点における他の組のトランザクションＴｒｉがあるか判断する（ステップＳ５１４）。そして、他の組のトランザクションＴｒｉが残っている場合には（ステップＳ５１４：Ｙｅｓ）、競合シナリオ生成部１０３は、変数ｋをインクリメントし（ステップＳ５１５）、ステップＳ５０８に戻り、新たなトランザクションＴｒｉ＋ｋを用いた１組のトランザクションにおけるタイミングの調整処理を行う。
【００５１】
一方、他の組のトランザクションＴｒｉがない場合には（ステップＳ５１４：Ｎｏ）、競合シナリオ生成部１０３は、競合点における全ての組のトランザクションＴｒｉに対するタイミング調整が有効であり、以降の競合シナリオの作成が可能であると判断し、以上のタイミング調整の処理を終了する。
【００５２】
（２：優先度順にトランザクションの各組み合わせのシミュレーション実行による競合発生の有無の確認と、競合シナリオの生成の処理説明）
図６は、競合シナリオ生成処理の一例を示すフローチャートである。競合シナリオ生成部１０３が行う処理内容について説明する。図６は、図５に示した処理の実行後に競合シナリオ生成部１０３が実行し、選択した１組のトランザクション毎の競合シミュレーションをシミュレータに実行させる。そして、競合が起こるトランザクションの組み合わせを競合シナリオとして生成する。
【００５３】
はじめに、競合シナリオ生成部１０３は、初期設定を行う（ステップＳ６０１）。トランザクションＴｒ１をｄ１とし、他のトランザクションＴｒ２以降をｄ２〜ｄｎとする。また、フラグを初期値（０）に設定する。フラグは、イベントの開始時間変更時に１に変更される。
【００５４】
次に、競合シナリオ生成部１０３は、トランザクションｄ１〜ｄｎの組み合わせをシミュレータに出力し、シミュレーションを実行させる（ステップＳ６０２）。この際、図４および図５を用いて説明した選択処理により、優先度が高い１組のトランザクションを最初に選択し、シミュレータにシミュレーション実行させる。そして、競合シナリオ生成部１０３は、シミュレーション結果が、所望する一対のイベントにおいて実際に競合条件が満たされたかを判断する（ステップＳ６０３）。
【００５５】
シミュレーション実行により実際に競合条件が満たされたシミュレーション結果が得られた場合には（ステップＳ６０３：Ｙｅｓ）、競合シナリオ生成部１０３は、競合テスト用タイミング調整が成功したと判断する。そして、競合シナリオ生成部１０３は、ステップＳ６０２にて実行したトランザクションの組み合わせの情報を示す競合シナリオを生成し（ステップＳ６０４）、処理を終了する。
【００５６】
一方、シミュレーション実行により競合条件が満たされないシミュレーション結果の場合には（ステップＳ６０３：Ｎｏ）、競合シナリオ生成部１０３は、各組み合わせの一方のトランザクションｄ１以外のトランザクションｄ（ｄ２〜ｄｎ）について、各イベントＥｖｊに所定の時間差Δを加える（ステップＳ６０５）。時間差Δにより、上述したように、イベントＥｖｊの開始時間が変更される。
【００５７】
次に、競合シナリオ生成部１０３は、フラグが１であるか判断する（ステップＳ６０６）。フラグが１でなければ（ステップＳ６０６：Ｎｏ）、開始時間の変更に対応してフラグを１に変更し（ステップＳ６０７）、ステップＳ６０２に戻り、ステップＳ６０２以下の処理を再実行する。開始時間の変更後のシミュレーション実行により、競合条件が満たされれば（ステップＳ６０３：Ｙｅｓ）、タイミング調整が成功した（ステップＳ６０４）、と判断できるようになる。ステップＳ６０２〜ステップＳ６０７の処理は、既存の競合タイミング検証と同等の処理である。
【００５８】
一方、ステップＳ６０６にて、フラグが１であれば（ステップＳ６０６：Ｙｅｓ）、競合シナリオ生成部１０３に設けられたアサーション生成部は、アサーションの生成を行う（ステップＳ６０８）。このアサーションは、各イベントにおける競合があり得るかの組の情報であり、例えば、（ｅ１｜−＞！ｅ２）｜｜（ｅ１｜−＞！ｅ３）…（ｅ１｜−＞！ｅｎ）との記載で表し、各イベントｅ１，ｅ２…からのそれぞれのリクエスト（Ｒｅｑ）に関する情報を含む。そして、フォーマル検証ツールにこのアサーションを渡し、シミュレータによるシミュレーション時のフォーマル分析を実行させる（ステップＳ６０９）。フォーマル検証ツールからは、分析結果としてアサーションが証明されたか否かを競合シナリオ生成部１０３に返答する。
【００５９】
そして、競合シナリオ生成部１０３は、アサーションが証明された場合には（ステップＳ６１０：Ｙｅｓ）、ステップＳ６１２に移行する。アサーションが証明されていない場合には（ステップＳ６１０：Ｎｏ）、競合シナリオ生成部１０３は、次に高い優先度のトランザクションの組を選定し（ステップＳ６１１：Ｙｅｓ）、ステップＳ６０１に戻る。
【００６０】
ステップＳ６１１において、次に優先の高いトランザクションの組がない場合（ステップＳ６１１：Ｎｏ）には、ステップＳ６１２に移行する。ステップＳ６１２では、競合シナリオの生成が不可能であり失敗であると判断し（ステップＳ６１２）、以上の競合シナリオ生成の処理を終了する。
【００６１】
（競合テスト用タイミング調整装置のハードウェア構成）
図７は、競合テスト用タイミング調整装置のハードウェア構成の一例を示すブロック図である。図７において、競合テスト用タイミング調整装置７００は、ＣＰＵ７０１と、Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）７０２と、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）７０３と、を含む。また、半導体メモリやディスクドライブ等の記憶部７０４と、ディスプレイ７０８と、通信インターフェース（Ｉ／Ｆ）７０９と、キーボード７１０と、マウス７１１と、スキャナ７１２と、プリンタ７１３とを備えてもよい。これらＣＰＵ７０１〜プリンタ７１３はバス７１４によってそれぞれ接続されている。
【００６２】
ＣＰＵ７０１は、競合テスト用タイミング調整装置７００の全体の制御を司る演算処理装置である。ＲＯＭ７０２は、競合テスト用タイミング調整装置７００の競合テスト用タイミング調整プログラムを記憶する不揮発性メモリである。ＲＡＭ７０３は、ＣＰＵ７０１による演算処理実行時のワークエリアとして使用される揮発性メモリである。
【００６３】
通信インターフェース７０９は、ネットワーク７１５と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。具体的に、通信インターフェース７０９は、通信回線を通じてネットワーク７１５となるＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＡＮ）、インターネットなどに接続され、ネットワーク７１５を介して他の装置に接続される。通信インターフェース７０９には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００６４】
ディスプレイ７０８は、競合テスト用タイミング調整処理のための設定画面やタイミング調整結果について、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などをデータ表示する装置である。ディスプレイ７０８には、例えば、Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ（ＴＦＴ）液晶ディスプレイ、プラズマディスプレイ、有機ＥＬディスプレイなどを採用することができる。
【００６５】
上述した図１を用いて説明した競合テスト用タイミング調整の機能（イベントテーブル生成部１０１、競合シナリオ生成部１０３）は、図７に記載のＣＰＵ７０１がＲＯＭ７０２に格納された競合テスト用タイミング調整プログラムを実行処理して得ることができる。
【００６６】
（競合テスト用タイミング調整装置の配置を示す図）
図８は、競合テスト用タイミング調整装置の配置例を示す図である。フォーマル検証ツール８０１と、シミュレータ８０２との間のインターフェースとして競合テスト用タイミング調整装置１００（競合シナリオ生成部１０３）が配置される。
【００６７】
競合シナリオ生成部１０３には、上述したように、競合点での競合を確認するために、競合点で競合させたいイベントの組（例えば、Ｅｖ４，Ｅｖ５）の情報が入力される。競合シナリオ生成部１０３は、上述した（１）、（２）の処理により、このイベントの組の情報に基づいて、このイベントに対応するトランザクションの組を生成する。そして、競合点において競合させたいイベントが同時に起こるように、トランザクションのデータｄ１…ｄｎに対するタイミング調整を更新する。
【００６８】
この更新は、図８のデータ入力シーケンス更新処理部１０３ａが実行し、シミュレータ８０２に対してタイミング調整し、更新したトランザクションｄ１…ｄｎを出力する。シミュレータ８０２は、シミュレーション結果ｔ１…ｔｎをデータ入力シーケンス更新処理部１０３ａに返答する。
【００６９】
また、アサーション生成部１０３ｂは、アサーションを作成してフォーマル検証ツール８０１に出力する。フォーマル検証ツール８０１は、フォーマル分析結果をアサーション生成部１０３ｂに返答する。
【００７０】
そして、競合シナリオ生成部１０３は、データ入力シーケンス更新処理部１０３ａ、およびアサーション生成部１０３ｂからの返答に基づいて、競合点において競合させたいイベントが同時に起こり、かつ、他のイベント（競合点よりも前のデータパス上のブロック）における競合を回避する旨の競合シナリオを生成し、出力する。競合シナリオは、シミュレータ８０２に出力されるものであり、シミュレータ８０２に対する競合可能データ入力シーケンスをテキスト等により記載したものである。
【００７１】
（競合点でのタイミング競合の例）
図９は、競合点でのタイミング競合の一例を示す図である。コア９０１には、複数のデータパスが配置され、データパス１（９０２ａ）上の複数のブロック（ＦＦ１〜ＦＦｎ）と、データパス２（９０２ｂ）上の複数のブロック（ＦＦ１〜ＦＦｍ）が配置されている。これらデータパス１，２の入力側からみた奥部のブロックとしてアービタ９０３が配置されているとする。そして、このアービタ９０３におけるデータ入力の競合時の動作を検証する場合には、アービタ９０３の直前のＦＦｎとＦＦｍからのリクエスト（Ｒｅｑ）を同時に発生させる必要がある。
【００７２】
このため、テストベンチ９１０は、データパス１，２に対してデータを入力するドライバ１（９１１ａ），ドライバ２（９１１ｂ）の入力タイミングを調整する。テストベンチ９１０は、上述したフォーマル検証ツール８０１、シミュレータ８０２および競合テスト用タイミング調整装置１００（競合シナリオ生成部１０３）を含む。そして、競合シナリオ生成部１０３によって最適に調整されたタイミングを有してデータが入力され、アービタ９０３は、直前のＦＦｎとＦＦｍからのリクエスト（Ｒｅｑ）を同時に発生させることができる。
【００７３】
これにより、コア９０１の奥部に位置するアービタ９０３等のブロックであっても、競合を発生させることができるようになり、競合発生時のブロックの動作（アービタ９０３の調停動作）をモニタ等で確認できるようになる。なお、データパス上の任意のブロック（イベント）を指定して競合テスト用タイミング調整装置に入力すれば、このブロックにおける競合についても同様に競合時の動作を確認できるようになる。
【００７４】
さらには、入力トランザクションのイベントのうち最大値の時刻を抽出するとともに、一対のイベントが入力されるブロックを特定してもよい。そして、イベントテーブル１１２を参照して、データパスの最奥部に位置するブロック（例えばアービタ９０３）を競合点として競合点を自動探索することもできる。これにより、競合させたい一対のイベントの指定入力を省くことができる。
【００７５】
以上説明した実施の形態によれば、競合点において競合させたいイベントを同時に起こすことができるようにトランザクションの入力タイミングを調整することができる。この際、入力タイミングを調整したトランザクションにおいて競合点以外のイベントにおける競合の有無を確認する。これにより、競合点以外のデータパス上の前段のブロックでのイベント発生による遅延発生の可能性を確認でき、競合点において競合させたいイベントの入力タイミングを最適に調整できるようになる。
【００７６】
これにより、単にトランザクションの入力タイミング（開始時刻）を遅延させただけの場合に、他のブロックでのイベント発生を要因として、競合点で競合のタイミングがずれ、競合が生じない、状態となることを回避できる。そして、競合点で競合させたいイベントを同時に起こるトランザクションを用いて競合タイミングテスト（競合検証）を行えるようになる。
【００７７】
なお、本実施の形態で説明したプログラムは、予め用意されたプログラムをコンピュータで実行することにより実現することができる。また、このプログラムは、半導体メモリ、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、このプログラムは、インターネット等のネットワークを介して配布してもよい。
【００７８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００７９】
（付記１）半導体装置の内部信号を任意のイベントで競合させる競合タイミングを調整する競合テスト用タイミング調整プログラムにおいて、
コンピュータに、
競合させたい一対のイベントの指定により、前記半導体装置の入力のトランザクションと前記イベントとに基づき、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択させ、
選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整させ、
入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断させ、
判断結果として不一致が得られた１組のトランザクションと、調整した前記入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力させる、
処理を実行させることを特徴とする競合テスト用タイミング調整プログラム。
【００８０】
（付記２）前記半導体装置の入力のトランザクションと、前記イベントとを関連付けたイベントテーブルを生成させ、
競合させたい一対のイベントの入力に基づき、前記イベントテーブルを参照して、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択させることを特徴とする付記１に記載の競合テスト用タイミング調整プログラム。
【００８１】
（付記３）前記判断結果として一致が生じた前記一方のトランザクションには低い優先度を付与することを特徴とする付記１または２に記載の競合テスト用タイミング調整プログラム。
【００８２】
（付記４）前記判断結果として一致が生じた後、前記一対のイベントに関連する前記トランザクションの組が残っていない場合には、一対のイベントに対するタイミング調整が不可であると判断することを特徴とする付記１〜３のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【００８３】
（付記５）前記トランザクションをシミュレータに実行させ、前記イベントが生じた時刻を前記イベントテーブルに記録させることを特徴とする付記２〜４のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【００８４】
（付記６）前記タイミング調整結果により得られた複数組のトランザクションをシミュレータに出力させ、
前記シミュレータのシミュレーション結果に基づき、前記一対のイベントにおける競合条件が満たされた場合に、一対のイベントに対するタイミング調整に関する情報を競合シナリオとして出力させる、
ことを特徴とする付記１〜５のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【００８５】
（付記７）前記判断結果として一致が生じた前記一方のトランザクションは、前記イベントテーブルの優先度が低い格納位置に変更させることを特徴とする付記２〜６のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【００８６】
（付記８）選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻のうち、時刻が最大値のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整させることを特徴とする付記１〜７のいずれか一つに記載の競合テスト用タイミング調整プログラム。
【００８７】
（付記９）半導体装置の内部信号を任意のイベントで競合させる競合タイミングを調整する競合テスト用タイミング調整方法において、
コンピュータが、
競合させたい一対のイベントの指定により、前記半導体装置の入力のトランザクションと前記イベントとに基づき、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択し、
選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整し、
入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断し、
判断結果として不一致が得られた１組のトランザクションと、調整した前記入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力する、
処理を実行することを特徴とする競合テスト用タイミング調整方法。
【００８８】
（付記１０）半導体装置の内部信号を任意のイベントで競合させる競合タイミングを調整する競合テスト用タイミング調整装置において、
前記半導体装置の入力のトランザクションと、前記イベントとを関連付けたイベントテーブルと、
競合させたい一対のイベントの入力に基づき、前記イベントテーブルを参照して、前記一対のイベントに関連する複数の前記トランザクションを１組毎に選択し、
選択した１組の前記トランザクションに含まれる前記一対のイベントの時刻が一致するように、一方のトランザクションの入力タイミングを調整し、
入力タイミングが調整された一方のトランザクションに含まれる他のイベントの時刻が、他方のトランザクションに含まれる同一のイベントの時刻と不一致となるかを判断し、
判断結果として不一致が得られた１組のトランザクションと、調整した前記入力タイミングと、を競合させたい一対のイベントに対するタイミング調整結果として出力する競合シナリオ生成部と、
を有することを特徴とする競合テスト用タイミング調整装置。
【００８９】
（付記１１）前記トランザクションをシミュレータに実行させ、前記イベントが生じた時刻を前記イベントテーブルに記録させることにより、前記半導体装置の入力のトランザクションと、前記イベントとを関連付けた前記イベントテーブルを生成するイベントテーブル生成部、
をさらに有することを特徴とする付記１０に記載の競合テスト用タイミング調整装置。
【符号の説明】
【００９０】
１００  競合テスト用タイミング調整装置
１０１  イベントテーブル生成部
１０２  イベントテーブル
１０３  競合シナリオ生成部
９０１  コア
９０３  アービタ
９１０  テストベンチ
【図１】
2015026337.tif 000003
【図２】
2015026337.tif 000004
【図３】
2015026337.tif 000005
【図４】
2015026337.tif 000006
【図５】
2015026337.tif 000007
【図６】
2015026337.tif 000008
【図７】
2015026337.tif 000009
【図８】
2015026337.tif 000010
【図９】
2015026337.tif 000011
【図１０】
2015026337.tif 000012