(57)【要約】【課題】各結線が単独で出力に伝播することの確認をすることができるテストパターンの生成技術を提供する。【解決手段】テストパターンの生成装置１０において、論理ゲート、論理ブロック及びこれらを接続する結線により表現される回路表現データに含まれる回路の接続情報を保持する回路接続情報保持部１８と、前記回路のロジックテストに用いるテストケースをテストＤＢ１３に登録するテスト登録部１２と、前記テストケースを前記回路に入力して算出される結線値を結線値履歴１５に記録する結線値算出部１４と、指定した出力線に影響を与える入力線群を前記接続情報に基づいて導出し、各入力線が単独で前記出力線に伝播するか否かを前記結線値履歴に基づいて算出する結線伝播算出部２１と、を備える。【選択図】  図１
2014130414.tif 000002
【特許請求の範囲】
【請求項１】
論理ゲート、論理ブロック及びこれらを接続する結線により表現される回路表現データに含まれる回路の接続情報を保持する回路接続情報保持部と、
前記回路のロジックテストに用いるテストケースをテストＤＢに登録するテスト登録部と、
前記テストケースを前記回路に入力して算出される結線値を結線値履歴に記録する結線値算出部と、
指定した出力線に影響を与える入力線群を前記接続情報に基づいて導出し、各入力線が単独で前記出力線に伝播するか否かを前記結線値履歴に基づいて算出する結線伝播算出部と、を備えることを特徴とするテストパターンの生成装置。
【請求項２】
請求項１に記載のテストパターンの生成装置において、
前記単独の入力線による伝播が確認されない前記入力線群と前記出力線の組を記録する伝播未確認結線リストと、
前記記録された入力線群と出力線の組において前記単独の入力線による伝播が実現される結線伝播制約を生成する結線伝播制約生成部と、
前記回路表現データで表現される各結線間に成立する結線間制約を生成する結線間制約生成部と、
結線伝播制約と結線間制約に基づいて生成した制約を制約ソルバで解いてテストケースを生成するテスト生成部と、を備えることを特徴とするテストパターンの生成装置。
【請求項３】
請求項２に記載のテストパターンの生成装置において、
前記伝播未確認結線リストは、記録されている入力線群と出力線の組を出力することを特徴とするテストパターンの生成装置。
【請求項４】
請求項１から請求項３のいずれか１項に記載のテストパターンの生成装置において、
前記入力線及び前記出力線は、前記回路を構成する前記結線の全てを対象にすることができることを特徴とするテストパターンの生成装置。
【請求項５】
請求項２から請求項４のいずれか１項に記載のテストパターンの生成装置において、
前記論理ブロックの入力値、出力値及び内部状態の変化前の値とその変化後の値との組からなる論理ブロック入出力例を生成する論理ブロック入出力例生成部と、
前記テストケースの生成に関与する論理ブロック制約表を前記論理ブロック入出力例に基づいて生成する論理ブロック制約生成部と、備えることを特徴とするテストパターンの生成装置。
【請求項６】
論理ゲート、論理ブロック及びこれらを接続する結線により表現される回路表現データに含まれる回路の接続情報を保持するステップと、
前記回路のロジックテストに用いるテストケースをテストＤＢに登録するステップと、
前記テストケースを前記回路に入力して算出される結線値を結線値履歴に記録するステップと、
指定した出力線に影響を与える入力線群を前記接続情報に基づいて導出し、各入力線が単独で前記出力線に伝播するか否かを前記結線値履歴に基づいて算出するステップと、を含むことを特徴とするテストパターンの生成方法。
【請求項７】
コンピュータに、
論理ゲート、論理ブロック及びこれらを接続する結線により表現される回路表現データに含まれる回路の接続情報を保持させるステップ、
前記回路のロジックテストに用いるテストケースをテストＤＢに登録させるステップ、
前記テストケースを前記回路に入力して算出される結線値を結線値履歴に記録させるステップ、
指定した出力線に影響を与える入力線群を前記接続情報に基づいて導出させ、各入力線が単独で前記出力線に伝播するか否かを前記結線値履歴に基づいて算出させるステップ、を実行させることを特徴とするテストパターンの生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理回路設計のロジックテストに用いるテストパターンの生成技術に関する。
【背景技術】
【０００２】
論理回路設計の工程において、ロジックが正しく設計されていること確認するために、テストやレビューが行なわれる。
その際には、回路に入力を与えた際に期待する出力や内部状態の変化を、「内部状態Ｓにおいて入力Ｉを与えると内部状態Ｓ’に遷移し出力が０になる」といった記述で定義し、シミュレーションや目視により、設計した回路が期待通りの動作を行うか否かを確認する。
【０００３】
この際に使われる「内部状態の変化、入力、出力」の組をテストケースという。そして、ロジックテストに用いた全てのテストケースをまとめて、テストパターンと呼ぶ。
設計が正しいことを詳細に確認するには、高品質のテストパターンを用いることが重要となり、テストパターンの品質を評価する方法が求められる。
このような、テストパターンの品質評価方法として、論理回路の構造に基づいて、テスト実施中に回路内部をどれだけ動作させたかに着目する構造カバレッジが知られている。
【０００４】
このような構造カバレッジを基準としたトグル網羅では、テスト中に結線が０，１の両値に変化（トグル）することを確認し、トグルが確認されない結線が発見された場合にテスト不十分と評価する。
外部から結線のトグルが計測できるときのみこのトグルをカウントし、トグル網羅より厳しいカバレッジ基準を採用したテストパターンの評価方法が開示されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平４−２２２０５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
トグル網羅であるテストパターンを用いることにより、テスト中に各結線が０と１両方の値を持つことを保証することができるが、これは各結線の変化を単独に確認しているに止まる。論理回路は、結線の変化が他の結線へ伝播することを繰り返すことで、その振る舞いが決まるが、トグル網羅は、結線値の変化の伝播が正しく行なわれているかまで保証することはできない。
【０００７】
特許文献１の方法では、出力まで変化が伝播した場合のみトグルしたと見なすため、結線値の変化の伝播を確認しているが、出力に影響していない結線に対してもトグルしたと見なすことがある。そのため、個々の結線が単独で出力に伝播するか否かについて確認できるまでには至っていない。
【０００８】
本発明はこのような事情を考慮してなされたもので、各結線が単独で出力に伝播することの確認をすることができるテストパターンの生成技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
テストパターンの生成装置において、論理ゲート、論理ブロック及びこれらを接続する結線により表現される回路表現データに含まれる回路の接続情報を保持する回路接続情報保持部と、前記回路のロジックテストに用いるテストケースをテストＤＢに登録するテスト登録部と、前記テストケースを前記回路に入力して算出される結線値を結線値履歴に記録する結線値算出部と、指定した出力線に影響を与える入力線群を前記接続情報に基づいて導出し各入力線が単独で前記出力線に伝播するか否かを前記結線値履歴に基づいて算出する結線伝播算出部と、を備える。
【発明の効果】
【００１０】
本発明により、各結線が単独で出力に伝播することの確認をすることができるテストパターンの生成技術が提供される。
【図面の簡単な説明】
【００１１】
【図１】本発明に係るテストパターン生成装置の第１実施形態を示すブロック図。
【図２】第１実施形態におけるテストパターンの生成処理を示すフローチャート。
【図３】テストケースの登録処理を示すフローチャート。
【図４】テストパターンを示すテーブル。
【図５】検証対象とする論理回路の回路図。
【図６】結線値履歴を示すテーブル。
【図７】回路表現データとして例示されるＰＯＬの記述。
【図８】回路表現データとして例示されるＶＨＤＬの記述。
【図９】論理ブロック制約表を示すテーブル。
【図１０】回路の結線間制約の一例を示す記述。
【図１１】回路の接続情報の一例を示すグラフ構造図。
【図１２】回路の接続情報の一例を示すテーブル。
【図１３】第１実施形態における結線伝播の算出処理を説明するフローチャート。
【図１４】第１実施形態における結線伝播制約の生成処理を説明するフローチャート。
【図１５】単独で出力線に伝播する入力線の説明図。
【図１６】結線伝播制約を示す記述。
【図１７】テストパターン生成する制約を示す記述。
【図１８】第２実施形態における結線伝播の算出処理を説明するフローチャート。
【図１９】第２実施形態における結線伝播制約の生成処理を説明するフローチャート。
【図２０】伝播経路算出のための木構造を示す図。
【図２１】全結線に対する結線伝播制約の記述。
【図２２】第２実施形態における効果の説明図。
【図２３】本発明に係るテストパターン生成装置の第３実施形態を示すブロック図。
【図２４】第３実施形態におけるテストパターンの生成処理を示すフローチャート。
【図２５】論理ブロック入出力例を示すテーブル。
【図２６】論理ブロック入出力例の生成処理を説明するフローチャート。
【図２７】図２５の論理ブロック入出力例から作成した論理ブロック制約表の記述。
【発明を実施するための形態】
【００１２】
（第１実施形態）
以下、本発明の実施形態を添付図面に基づいて説明する。
図１は、第１実施形態に係るテストパターン生成装置１０のブロック図を示し、図２はテストパターンの生成処理のフローチャートを示している。
テストパターン生成装置１０は、テスト登録部１２が、既存テストパターン１１とテスト生成部２５で生成されるテストパターンとをテストＤＢ１３に登録することによって、全テストパターンを生成する。
まず、未登録の既存テストパターン１１がテスト登録部１２に残っているか否かについて検索がなされる（Ｓ１１）。ここで、既存テストパターン１１とは、論理回路を検証するために既に用意されているテストケース群である。
【００１３】
図４のテーブルは、テストパターンの例であり、各行がテストケースを表している。
このテストケースは入力、事前内部状態、出力、事後内部状態から成り立っている。
テストケースＴ１では、事前の内部状態についてｆｆ_ｓｔが１、ｄｉ_ｓｔが１０の際に、入力線ｄｏ１に０、入力線ｄｏｎｅに０、入力線ｓｔｏｐに０を与えると、事後の内部状態についてｆｆ_ｓｔが１、ｄｉ_ｓｔが１０となり、出力線ｄｏ２が１、出力線ｅｒｒが１となることを意味している。
図４のような既存テストパターンがある場合、未登録の既存テスト（テストケースＴ１，Ｔ２，Ｔ３）が残っているため(Ｓ１１ Ｙｅｓ)、テストケース登録処理を行う（Ｓ２０）。
【００１４】
図３のフローチャートは、テストケースの登録処理の順序を示している。
まず、テスト登録部１２は、新しいテストケースをテストＤＢ１３に登録する（Ｓ２１）。テストＤＢ１３は、テストケース群をテストパターン生成装置１０に内部保持させるものであり、新しく生成したテストケースを既存テストパターン１１に加えたものである。
【００１５】
テストケース登録処理（Ｓ２０）では、テスト登録部１２が既存テストパターン１１をそのままテストＤＢ１３にコピーすることを行う。
続いて、テスト登録部１２はテストＤＢ１３に登録したテストケースを結線値算出部１４に渡し、この結線値算出部１４は結線値履歴１５を更新する（Ｓ２２）。
結線値履歴１５には、回路を構成する全ての結線の結線値が、テストケースが入力される度に記録される。
【００１６】
ここで、検証対象としている回路が図５であるとする。
図５において、符号３１，３２，３３は入力を表し、符号３４，３５は出力を表している。符号３６，３７は結線を表し、それぞれの結線名はｄｏ１，ｗ１である。
符号３８は、結線が枝分かれしているケースを示している。結線は、幾つに枝分かれしていても、それらは同じ値となるため、結線名もｗ２で統一される。
【００１７】
符号３９，４０，４１は論理ゲートを表し、それぞれＡＮＤゲート，ＯＲゲート，ＮＯＴゲートを表している。符合４２，４３は論理ブロックであり、論理ゲートを組み合わせて、それぞれの機能を実現する機能モジュールである。
符号４２はリセット優先フリップフロップであり、内部状態（ｆｆ_ｓｔ）を持つ。
符号４３はタイマーである。符号４４はタイマーの設定値であり、定数１０の値が設定されている。
符号４３は内部状態ｄｉ_ｓｔを保持しており、結線４５の値が１である間はｄｉ_ｓｔの値はカウントアップされ、設定値を超えたら、結線４６が０から１に変化する。
【００１８】
図４は、論理回路（図５）を対象としたテストパターンであり、入力、内部状態及び出力の値のみが記載されている。
一方、結線値履歴１５は、図６に示すように、全ての結線の値を保持するとともに、内部状態を事前状態と事後状態で区別して保持する。
結線値履歴の各履歴は、結線値算出部１４により算出される。結線値算出部１４は回路表現データ１６を元に、全結線の値を算出する（Ｓ２２）。
【００１９】
図７は、回路表現データ１６の一例として示すＰＯＬ（Problem Oriented Language）の記述である。
ＰＯＬとは、ある問題のために特化した言語であり、図７は図５に示す回路の振る舞いを記述したものである。
”．ＤＥＦ”から”．ＤＥＦＥＮＤ”までが一つの回路を定義している範囲であり、名前として”Ｓａｍｐｌｅ”が付けられている。
”ＯＲ”はＯＲゲートを表し、第１引数のｗ１が出力線、それ以外の引数（ｓｔｏｐ，ｄｏｎｅ）が入力線を表している。
【００２０】
”ＦＦ”はフリップフロップを表しており、第１引数のｗ２が出力線、第２引数のｆｆ_ｓｔが内部状態、第３引数のｄｏ１がセット信号、第４引数のｗ１がリセット信号を表している。
”ＡＮＤ”はＡＮＤゲートを表しており、第１引数のｗ３が出力線、それ以外の引数（ｗ２，−ｄｏｎｅ）が入力線を表している。
”ｄｏｎｅ”の前に付いている”−”はＮＯＴゲートを表している。
【００２１】
”ＤＩ”はタイマーを表しており、第１引数のｗ４が出力線、第２引数のｄｉ_ｓｔが内部状態（カウントアップ値）、第３引数がカウント数の上限であり定数１０が与えられている。第４引数のｗ３は入力線を表している。
”ＯＵＴ”は出力命令を意味し、第１引数のｄｏ２やｅｒｒが回路の出力線、第２引数のｗ２，ｗ４の値が出力線に繋がる結線を表し、第２引数の結線値が第１引数の出力に移ることを意味する。
【００２２】
ＰＯＬは各行のコマンドを一つずつ解釈して、動作のシミュレーションが可能である。
そのため、テストケースの入力、内部状態の値を設定し、シミュレーションすることで、各結線がどのような値を取りうるか算出することができる。
【００２３】
図８は、図５の回路を表す回路表現データ１６の他の例として示すＶＨＤＬ（Very high speed integrated circuits Hardware Description Language ）の記述である。
ＶＨＤＬとは、ＩＥＥＥで標準化されているハードウエア記述言語であり、このシミュレーションツールを用いることにより、各結線がどのような値を取りうるかを算出することができる。
【００２４】
既存テストパターン１１の全テストケースをテストＤＢ１３に登録し、そのシミュレーション結果を結線値履歴１５に登録し終わったら（Ｓ１１ Ｙｅｓ）、結線間制約生成部１７にて、回路内の結線間に成立する制約を生成する（Ｓ１２）。
このステップＳ１２では、回路表現データ１６を読み取り、回路を構成する論理ブロックを抽出する。そして、抽出した論理ブロック毎に関連する結線間で成り立つ制約式を作成し、これら制約式の論理積を取る。
【００２５】
回路表現データ１６がＰＯＬの場合、各行を読み出すことにより、論理ブロックの種類と、そのブロックに繋がる出力線、内部状態、出力線の結線名を取得することができる。
また、ここで取得した情報から論理ブロックと結線の接続関係も分かるため、後述する回路接続情報保持部１８に保持される接続情報も作成できる。
【００２６】
一方、回路表現データ１６がＶＨＤＬの場合、図８のコンポーネント宣言、コンフィギュレーション定義及びコンポーネント・インスタンス文を参照することにより、回路内で利用される論理ブロックを取得できる。
また、エンティティ宣言（図８）を参照することにより、入力線と出力線の結線名を取得でき、コンポーネント宣言に記載される定義文を参照することにより内部状態を取得できる。
さらに、これらの接続関係はコンポーネント・インスタンス文（図８）を参照して理解できるため、ＶＨＤＬによる回路表現データ１６からも後述する回路接続情報保持部１８に保持される接続情報を作成することができる。
【００２７】
各論理ブロックの入力、出力、内部状態の間で成立する制約は、論理ブロック毎に所定の関係式が適用され、これら関係式は論理ブロック制約表１９で管理される。
図９は論理ブロックの制約を示す論理ブロック制約表１９の一例である。
図９に示すように、論理ブロックがＡＮＤゲートの場合、制約は全入力の論理積が出力と等しくなることを意味した制約となる。
【００２８】
ＦＦは、リセット優先フリップフロップを想定している。
そのため、制約は、リセット信号（入力ｉｎ−ｒ）が１の時は出力（ｏｕｔ）が０となり、それ以外の時は、事前の内部状態（ｓｔ−ｐｒｅ）とセット信号（入力ｉｎ−ｓ）の論理和が出力（ｏｕｔ）となる。
また、事後の内部状態（ｓｔ−ｐｏｓｔ）は出力（ｏｕｔ）と等しくなることを表している。
【００２９】
ＤＩはタイマーであり、入力線（ｉｎ）が１なら、内部状態のｃｎｔを最大値（ｍａｘ）に達するまでカウントアップする。
最大値に達したところで、カウントアップを停止し、出力（ｏｕｔ）を１にする。
入力線（ｉｎ）が０なら内部状態のｃｎｔは０となる。このような性質を記述したものが制約である。
【００３０】
回路を構成する論理ブロックの個々の制約の論理積を取ることにより、回路間の結線間で成立する制約式（結線間制約２０（図１））が生成する。
図１０は、図５の回路の結線間制約の一例である。
図１０において、（＝ ｄｏ２ ｗ２）と（＝ ｅｒｒ ｗ４）は、出力と出力に結ばれる結線の値とが等しいことを表している。
そして、ＣｉｒｃｕｉｔＣｏｎｓｔｒａｉｎｔという名前で、入力、出力、事前の内部状態、事後の内部状態を引数で表した制約式が、図５の回路の結線間制約２０として定義されている。
【００３１】
続いて、結線伝播算出部２１において、結線値履歴１５から伝播未確認の結線を算出する（Ｓ１３）。
この結線伝播算出部２１は、指定した出力や結線に影響を与える結線を導いて、これらに対し単独の入力が伝播するテストケースの有無を調べ、そのようなテストケースが無い結線を算出する。
【００３２】
ここで、入力の伝播先として指定された出力や結線を、デシジョンポイントと呼ぶ。
このデシジョンポイントは、出力や主要な論理ブロックにおける入出力線のうち単数もしくは複数が、設計者及びテスターにより選出される。
【００３３】
処理（Ｓ１３）において回路接続情報保持部１８は、回路表現データ１６を解析し、回路内の結線と論理ブロックがどのように接続されているかの情報を抽出して保持する。
その際、選択された結線、論理ブロックに接続される結線、及び論理ブロックを、認識可能な形式で保持する必要がある。
【００３４】
図１１はグラフ構造で保持を表した例であり、入力と出力と内部状態をノードと見なし、結線をエッジと見なしている。
各エッジは入力元のノードと出力先のノードを保持し、各ノードは入力となるエッジと出力となるエッジを保持する。
このようなグラフ構造で示すことにより、与えられた結線や論理ブロックに影響を及ぼす結線を求めることが可能になる。
【００３５】
例えば、出力ｄｏ２に影響を及ぼす結線を探索する場合について説明する。
まず、ｄｏ２の入力エッジであるｗ２が、この出力ｄｏ２に影響を及ぼす結線として探索される。続いて、このｗ２の入力ノードであるＦＦの入力エッジであるｆｆ_ｓｔ，ｄｏ１，ｗ１も探索される。
これらｆｆ_ｓｔ，ｄｏ１の入力ノードは、入力エッジを持たないため、ここまでの探索は打ち切られるが、ｗ１の入力ノードであるＯＲは入力エッジを持つため、更にｓｔｏｐ，ｄｏｎｅが影響を及ぼす結線であることが判明する。
【００３６】
また、回路接続情報保持部１８は、図１２のようなテーブル形式で回路の接続情報を保持することもできる。
この図１２に示すテーブル形式によれば、図１１のグラフの場合と同様、エッジに対する入力ノードやノードに対する入力エッジが何であるかが分かり、与えられたデシジョンポイントに影響を及ぼす結線を求めることが可能になる。
【００３７】
結線伝播算出部２１において、伝播未確認の結線を算出する際は（Ｓ１３）、このような回路接続情報保持部１８を参照して、着目すべき結線を必要に応じ求める。
伝播未確認の結線を算出する処理（Ｓ１３）を図１３に基づいて説明する。
まず、未チェックのデシジョンポイントの有無について調査する（Ｓ３１）。
この処理（Ｓ３１）の分岐は、複数のデシジョンポイントが設定されている場合に、デシジョンポイント毎に結線の伝播を算出することを表している。
【００３８】
全てのデシジョンポイントに対し結線の伝播を算出したところで（Ｓ３１ Ｎｏ）、伝播未確認結線リスト２２を更新して処理が終了する（Ｓ３２）。
この伝播未確認結線リスト２２の更新は、図１３のフローの処理中に記憶したデシジョンポイントと伝播未確認の結線との組を全てリストとして登録し、それ以外の組の登録を取り消すことにより行う。
【００３９】
伝播未確認結線リスト２２は、伝播を確認していない結線とデシジョンポイントとの組をリストにしたものである。
未チェックのデシジョンポイントがある場合は（Ｓ３１ Ｙｅｓ）、この未チェックのデシジョンポイントに影響を与える入力線の集合を、回路接続情報保持部１８より得る（Ｓ３３）。
【００４０】
図１１においてデシジョンポイントをｄｏ２とした場合、得られる入力線の集合は、ｆｆ_ｓｔ，ｄｏ１，ｓｔｏｐ，ｄｏｎｅとなる。
続いて、異なるＩＤの結線履歴のペアを、結線値履歴１５から得る（Ｓ３４）。このとき、既に調べたペアを記憶することで、重複した調査を回避することも可能である。
【００４１】
全ての結線値履歴のペアで確認済みがなされたところで（Ｓ３５ Ｙｅｓ）、次のデシジョンポイントの調査に移る。
未だ確認されてないペアがあれば（Ｓ３５ Ｎｏ）、そのペアの履歴から、単独でデシジョンポイントに伝播する入力があるか調べる（Ｓ３６）。
【００４２】
図１５は、入力線ｉｎが単独でデシジョンポイントｄｐに伝播する状態を表している。
ここで、入力線ｉｎが単独でデシジョンポイントに伝播するということは、入力線の集合の内、着目する入力線ｉｎ以外の入力線の値は変化が無いが、この着目する入力線ｉｎの値のみ変化した場合に、デシジョンポイントの値が変化する状態を指す。
【００４３】
なお図１５において、入力線ｉｎはブール値をとる場合を例示しているが、これに限定されるものではなく、結線が整数や実数値をとる場合も含まれる。
このような入力線が存在するか否かについての判断は、結線値履歴１５のペアの値を比較することで可能である。
【００４４】
例えば、図５に示す回路において、デシジョンポイントをｄｏ２とすると、入力線集合は{ｆｆ_ｓｔ，ｄｏ１，ｓｔｏｐ，ｄｏｎｅ}となる。
この場合、図６のテーブルにおける履歴Ｒ１と履歴Ｒ３を比べると、入力ｄｏｎｅの値は履歴Ｒ１が０、履歴Ｒ３が１と異なっている。
これ対し、他の入力（ｆｆ_ｓｔ，ｄｏ１，ｓｔｏｐ）の値は同じであり、デシジョンポイントｄｏ２の値は履歴Ｒ１が０、履歴Ｒ３が１と異なっていることが確認される。
そのため、入力ｄｏｎｅが単独でデシジョンポイントｄｏ２に伝播することが確認される。
【００４５】
着目しているデシジョンポイントの全入力線において、デシジョンポイントに単独で伝播する入力線を確認した場合は（Ｓ３８ Ｙｅｓ）、次のデシジョンポイントの調査に移る。
そうでない場合（Ｓ３８ Ｎｏ）は、Ｓ３４に戻り、まだ調べていない結線履歴ペアに対し調査を行う。
【００４６】
全ての結線履歴ペアの調査が終了した段階で（Ｓ３５ Ｙｅｓ）、単独での伝播が未確認の結線が確認される。
この場合、デシジョンポイントと未確認の結線の組の情報は、一時的に記憶され（Ｓ３７）、伝播未確認結線リスト２２を更新する処理（Ｓ３２）に利用される。
【００４７】
図２に戻って説明を続ける。
伝播未確認の結線が無い場合（Ｓ１４ Ｎｏ）、全ての結線に対し伝播を確認するテストパターンがテストＤＢ１３に登録されたこととなり、テストパターンの生成を終了する（Ｓ１５）。
伝播未確認の結線が有る場合（Ｓ１４ Ｙｅｓ）、結線伝播制約生成部２３により、未確認の結線を確認するための制約を生成する（Ｓ１６）。
【００４８】
この制約を生成する処理（Ｓ１６）を、図１４に基づいて説明を行う。
まず、伝播未確認結線リスト２２から、デシジョンポイントと結線の組を１組選択する（Ｓ４１）。
この選択方法は、特に限定されないが、同じ組が重複選択されないようにする。
全ての組が既に選択済みであった場合は（Ｓ４２ Ｙｅｓ）、後述の処理（Ｓ４４）で生成した制約の論理和を作成する（Ｓ４５）。
この論理和で作られた制約が、結線伝播制約２４となる。
【００４９】
選択済みでないデシジョンポイントと結線の組があった場合は（Ｓ４２ Ｎｏ）、デシジョンポイントに影響を及ぼす入力線の集合を得る（Ｓ４３）。
この処理（Ｓ４３）は、工程（Ｓ３３：図１３）と同様に回路接続情報保持部１８から算出することも可能であるし、工程（Ｓ３３）で算出した結果を記録し、参照することもできる。
【００５０】
続いて、工程（Ｓ４１）で選択した入力線の伝播を確認するための制約を生成する（Ｓ４４）。
この工程（Ｓ４４）では、工程（Ｓ４１）で選択した結線とデシジョンポイントの値が異なり、工程（Ｓ４３）で得られた入力線の集合に含まれる結線の値が変わらないことを制約式として表現する。
【００５１】
図１６は、図５の回路において、デシジョンポイントをｄｏ２、入力線をｓｔｏｐとした場合の結線伝播制約の記述例である。
この図１６の記述のうち、二箇所のCircuit Constraintにおいて、２つのテストケースが回路の制約を満たすことを表現している。
【００５２】
(!=stop-1 stop-2), (!=do2-1 do2-2)において、Ｓ４１で選択した結線とデシジョンポイントの値が異なることを表現している。
(=do1-1 do1-2), (=done-1 done-2), (=di_st-pre-1 di_st-pre-2), (=ff_st-pre-1 ff_st-pre-2)において、他の入力線の値が等しいことを表現している。
【００５３】
選択した入力線の伝播を確認する制約を生成したら（Ｓ４４）、他の未確認の入力線の選択するフロー（Ｓ４１）に戻り、伝播未確認結線リスト２２に登録された他のデシジョンポイントと入力線の組に対しても同様の処理を行う。
このようにして作成した全ての制約の論理和が作成される（Ｓ４５；図１４）。
【００５４】
図２に戻って説明を続ける。
結線伝播制約２４を生成したら（Ｓ１６）、テスト生成部２５によりテストケースの生成を行なう（Ｓ１７）。
テストケースの生成は、結線伝播制約２４と結線間制約２０を、制約ソルバ２６で解くことにより行う。
【００５５】
図１６の記述例に示すように、結線伝播制約２４は結線間制約２０の情報を含むため、テストケースを生成するに当り、結線伝播制約２４の参照先としての結線間制約２０が必要となる。
制約ソルバ２６としては、例えば、ＯｐｅｎＳＭＴやＹＩＣＥＳといったＳＭＴソルバ等の既存のソルバを使用することができる。
【００５６】
以上において、内部状態を入力と見なした組み合わせ回路のテストケースを生成するという想定の下で説明を行った。
ところで、順序回路のテストケースの生成を、内部状態の事前状態の値を限定した制約を論理積で追記することにより実現することができる。
【００５７】
図１７は、内部状態ｆｆ_ｓｔとｄｉ_ｓｔが、それぞれ１と０である状態からのテストケースを生成する制約（破線で囲った部分）を図１６の記述に追記した例である。
このような制約を追記することで、順序回路としてのテストパターンの生成も実現可能となる。
【００５８】
図２に戻って説明を続ける。
テスト生成部２５（図１）による新しいテストケース生成に失敗した場合（Ｓ１８ Ｎｏ）、テストケースの生成を止め、テストＤＢ１３に登録されたテストパターンを出力する（Ｓ１５）。
テスト生成部２５により新しくテストケースを得られれば（Ｓ１８ Ｙｅｓ）、テストＤＢ１３に登録し、このテストケースを行なった場合の結線値の値を結線値履歴１５に登録する（Ｓ２０）。
【００５９】
この際、新たに登録するテストケースが既にテストＤＢ１３に登録されていた場合、テストケースの登録や結線値履歴１５への登録を省略することで、テストケース数の数を削減することもできる。
この後、工程（Ｓ１３）まで戻り、伝播未確認の結線がなくなる(Ｓ１４ Ｎｏ)、又は制約を満たすテストパターンの生成ができなくなるまで（Ｓ１８ Ｎｏ）、Ｓ１３、Ｓ１４、Ｓ１６、Ｓ１７、Ｓ１８、Ｓ２０の処理を繰り返す。
【００６０】
（Ｓ１４ Ｎｏ）または（Ｓ１８ Ｎｏ）の処理が発生したら、テスト生成を終了し、テストＤＢ１３に登録されたテストパターンを新規テストパターン２７として出力する（Ｓ１５）。
また、伝播未確認結線リスト２２に登録されたままの結線とデシジョンポイントがあれば、それらの組を未確認結線リスト２８として出力する。
【００６１】
以上説明した実施形態によれば、指定した出力や結線（デシジョンポイント）に影響を与える入力群のうち、単独で伝播する入力を与えるテストパターン２７が得られる。
これにより、デシジョンポイントに対し各入力線が単独で寄与することを確認できるテストが実施可能となる。
【００６２】
また、未確認結線リスト２８に結線とデシジョンポイントの組が登録されている場合は、この登録されたデシジョンポイントに対し単独で伝播する入力が確認されないことが判明する。
この確認が出来ない理由を分析することにより、設計や仕様に関する詳細な知見を得ることができる。
【００６３】
（第２実施形態）
第２実施形態に係るテストパターン生成装置の構成は、第１実施形態の場合と同じ図１のブロック図で表されるので、重複説明を省略する。
第２実施形態に係るテストパターン生成装置は、入力線の伝播のみ確認した第１実施形態に対し、結線伝播算出部２１と結線伝播制約生成部２３の順序を変更することにより全ての結線に対して伝播を確認できるようにしたものである。
【００６４】
具体的に、第２実施形態は、図２の処理（Ｓ１３）の処理順序を図１８（第１実施形態の図１３に対応）の処理順序に変更し、図２のＳ１６の処理順序を図１９（第１実施形態の図１４に対応）の処理順序に変更したものである。
【００６５】
図１８の処理順序について説明する。
まず、未チェックのデシジョンポイントがあるか否かについて検索する（Ｓ５１）。
全てのデシジョンポイントに対し結線の伝播を算出したら（Ｓ５１ Ｎｏ）、伝播未確認結線リスト２２の更新をして処理終了となる（Ｓ５２）。
伝播未確認結線リスト２２の更新は、後述する処理（Ｓ６０）で記憶したデシジョンポイントと結線の組全てに対し、伝播未確認結線リスト２２に未登録である組を新たに登録することにより行う。
【００６６】
未チェックのデシジョンポイントがある場合は（Ｓ５１ Ｙｅｓ）、未チェックのデシジョンポイントを選択し（Ｓ５３）、選択したデシジョンポイントに影響を及ぼす全ての結線が単独でデシジョンポイントに伝播するか否かについて調査する（Ｓ５４−Ｓ６２）。
【００６７】
まず、異なるＩＤの結線履歴のペアを、結線値履歴１５から得る（Ｓ５４）。
この際、既に調べたペアを記憶することで、重複調査を回避することも可能である。
全ての結線値履歴のペアの調査が済んだところで（Ｓ５５ Ｙｅｓ）、次のデシジョンポイントの調査に移る。
【００６８】
未だ確認していないペアが存在している場合（Ｓ５５ Ｎｏ）、選択したデシジョンポイントを着目ノードとし（Ｓ５６）、この着目ノードへの入力となる結線集合を得る（Ｓ５７）。
例えば、図５の回路で、デシジョンポイントをｄｏ２とすると、着目ノードは出力ｄｏ２となり、その入力となる結線集合はｗ２となる。着目ノードやその入力となる結線集合は、回路接続情報保持部１８により求めることができる。
この回路接続情報保持部１８がグラフ構造であるとして、図１８の処理順序ではノードという言葉を使っているが、図１２のように表で管理しても構わない。
表で管理する場合は、ノードではなくブロックという表現の方が適している。
【００６９】
続いて、選択した結線履歴ペアの結線集合の値を比較する（Ｓ５８）。
工程（Ｓ５４）において、図６における履歴Ｒ１と履歴Ｒ２を選択していた場合、結線集合がｗ２のみであれば、結線履歴Ｒ１，Ｒ２ともにｗ２は１であり結線集合のうち異なる結線が０本であるため、異なる結線履歴ペアに関する調査が行われる（Ｓ５９ Ｎｏ）。
【００７０】
図６において履歴Ｒ１と履歴Ｒ３を選択していた場合は、結線履歴Ｒ１，Ｒ３でｗ２の値が異なるため、結線集合のうち異なる結線が１本となり（Ｓ５９ Ｙｅｓ）、結線ｗ２がデシジョンポイントに単独で伝播していることが確認される。
そのため、結線ｗ２とデシジョンポイントｄｏ２の組を記憶する（Ｓ６０）。この工程（Ｓ６０）で記憶した組は上述した通り、工程（Ｓ５２）で更新される。
【００７１】
単独でデシジョンポイントに伝播する結線がある場合は（Ｓ５９ Ｙｅｓ）、更に前の結線も単独でデシジョンポイントに伝播する可能性があるため、着目ノードを前のノードに更新する（Ｓ６１）。
この場合、着目ノードがｄｏ２であれば、ＦＦに更新される。ＦＦが前のノードであることは、回路接続情報保持部１８により把握される（図１１、図１２）。
【００７２】
更新した着目ノードが入力や内部状態であった場合、これ以上に前に結線は存在しないので、異なる結線履歴のペアに対して調査をすすめる（Ｓ６２ Ｙｅｓ）。
その場合以外では（Ｓ６２ Ｎｏ）、Ｓ５７に戻り、更に単独で伝播する結線が存在しないか探索する。
【００７３】
着目ノードがＦＦに変化した場合、結線集合はｆｆ_ｓｔ，ｄｏ１，ｗ１となる（Ｓ５７）。図６における履歴Ｒ１と履歴Ｒ３は、ｆｆ_ｓｔが共に１で、ｄｏ１も共に０と同じ値を示すが、ｗ１の値のみ異なり、結線ｗ１も単独でデシジョンポイントに伝播することが確認される。
【００７４】
図１９の処理順序について説明する。
図１９は、伝播未確認結線リスト２２から、デシジョンポイントとこのデシジョンポイントに伝播が未確認の結線との組を一つ選択する際の結線伝播制約２４の算出方法を示している。
伝播未確認結線リスト２２に複数の組が登録されていた場合は、図１９で得られた制約式を論理和で結んだ制約式が、結線伝播制約２４となる。
【００７５】
まず、デシジョンポイントから未確認結線に辿る経路を算出する（Ｓ７１）。
この際、図２０のような木構造を作ると経路の算出が容易となる。
図２０は、デシジョンポイントとなるノードを頂点として、入力となるエッジやノードを結び作成する。その際、同じエッジやノードを別のノードと見なすため、各葉から頂点までの経路が一通りしかない木構造が作成される。
【００７６】
図２０において、デシジョンポイントをｅｒｒ、未確認結線をｄｏｎｅとした場合、次の二つの経路の存在が認識される。
・経路１
ｄｏｎｅエッジ→ＡＮＤノード→ｗ３エッジ→ＤＩノード→ｗ４エッジ→ｅｒｒノード
・経路２
ｄｏｎｅエッジ→ＯＲノード→ｗ１エッジ→ＦＦノード→ｗ２エッジ→ＡＮＤノード
→ｗ３エッジ→ＤＩノード→ｗ４エッジ→ｅｒｒノード
【００７７】
次に、各経路に対し制約式を生成する（Ｓ７２）。
ここで、未確認結線が独立で伝播をするための制約を作成するために、経路上の結線の値は異なり、経路上のノードの入力となる結線で経路から外れた結線の値は等しくなるテストケースのペアを求める。
そのため、経路１の例であれば、ｄｏｎｅ、ｗ３、ｗ４エッジの値が異なり、ｄｉ_ｓｔ、ｗ２の値が等しくなることを結線伝播制約２４として表現する。
【００７８】
経路が複数ある場合は、いずれの経路を伝播することも許容されるので、各経路で生成した制約式の論理和を取る（Ｓ７３）。
デシジョンポイントがｅｒｒ、未確認結線がｄｏｎｅの場合の結線伝播制約２４は、図２1のようになる。
【００７９】
第１実施形態では結線伝播算出部２１が入力線のみに着目していた（図１３参照）。
これに対し第２実施形態では、参照する図２２のケースにおいて、各入力線がデシジョンポイントＹに単独で伝播していることの確認ができる。
つまり、図２２において、Ｔ１とＴ２より入力線Ａ、Ｔ１とＴ３より入力線Ｂ、Ｔ３とＴ４より入力線Ｃが、結線iは常に０に固定され伝播に寄与していないことが分る。
【００８０】
回路図における各結線は、それぞれにおいて設計上の意義を有している。
このために、伝播に寄与しない結線があることは、その結線を使う場合のテストが不十分であると解釈できる。
そこで、第２実施形態では、入力線に限定せずに、デシジョンポイントに影響を及ぼす全ての結線について単独での伝播が可能であるか否かの算出をすることで、入力線に限定した場合（第１実施形態）よりも、品質の高いテストを生成することが可能となる。
【００８１】
（第３実施形態）
図２３に第３実施形態に係るテストパターン生成装置１０の構成を示す。
図２３の構成は、図１の構成に、論理ブロック入出力例生成部５１、論理ブロック入出力例５２及び論理ブロック制約生成部５３を追加したものである。
【００８２】
論理ブロック入出力例５２とは、論理ブロックの入力値と出力値と内部状態の事前・事後の値の組の集合である。ここで、内部状態が事前値のときに入力値を論理ブロックに与えると、内部状態が事後値に変化し、出力値が出力される関係にある。
【００８３】
図２５は、論理ブロック入出力例を示すテーブルで、論理ブロックＦＦとＤＩの入出力例を示している。
図２５のＦＦの入出力例を示すテーブルの三行目は、論理ブロックＦＦの内部状態ｓｔが０の時に、入力ｉｎ−ｓ，ｉｎ−ｒにそれぞれ０，０を与えた場合、内部状態ｓｔは０となり、出力ｏｕｔの値が０となることを示している。
同様に、図２５のＤＩの入出力例を示すテーブルの五行目は、論理ブロックＤＩの内部状態ｃｎｔが４の時に、入力ｉｎ，ｍａｘにそれぞれ１，５を与えたら、内部状態ｃｎｔは５となり、出力ｏｕｔの値が０となることを示している。
【００８４】
論理ブロック入出力例生成部５１は、論理ブロック入出力例５２（図２５）の行の追加を行い、論理ブロック制約生成部５３は、論理ブロック入出力例５２を参照して論理ブロック制約表１９を生成する。
【００８５】
図２４は、第３実施形態におけるテストパターンの生成処理を示している。
まず、論理ブロックを実装する論理ブロック入出力例生成部５１が、その実行環境を用いて論理ブロック入出力例５２を生成し追記する（Ｓ８１）。
【００８６】
図２６のフローチャートに基づいて、この論理ブロック入出力例生成部５１における処理（Ｓ８１）を説明する。
まず、いずれの論理ブロックの入出力例を生成するかを選択する（Ｓ９１）。
この順序は、オペレータの判断により指定してもよいし、論理ブロック制約表１９を参照してそのなかから制約の記述の無い論理ブロックを選択してもよい。いずれの方法による場合でも、複数の論理ブロックを選択して構わない。
【００８７】
次に、選択した論理ブロックを実際に動作させて、入出力例を得る（Ｓ９２）。
すなわち、論理ブロックが単独で動作する環境で、入力や事前状態を乱数で与え、実際に論理ブロックを動作させ出力と事後状態を得る。
これにより、入力と出力と事前状態と事後状態の値の組を得ることができ、入出力例を得ることができる。
【００８８】
処理（Ｓ９１）で、複数の論理ブロックを選択していた場合は、それぞれの論理ブロックに対して同様の作業を行い、入出力例を得る。
続いて、得られた入出力例を論理ブロック入出力例５２に追記する（Ｓ９３）。ただし、既に同じ値の組が登録されている場合は、追記する必要はない。
【００８９】
最後に、入出力例の生成を続けるか否かについての決定を行う（Ｓ９４）。
論理ブロック入出力例５２に追記する数や、処理（Ｓ９２）〜（Ｓ９４）を繰り返す回数を指定し、入出力例の生成を続けるか否かについて決定を行う。
生成を続ける場合（Ｓ９４ Ｙｅｓ）は、処理（Ｓ９２）〜（Ｓ９４）を繰り返し、生成を続けない場合（Ｓ９４ Ｎｏ）は、処理を終了する。
【００９０】
この一連の処理（Ｓ９１−Ｓ９４）で表される追記処理（Ｓ８１）が終了したところで、論理ブロック制約生成部５３により、論理ブロック制約表１９を生成する（Ｓ８２）。
ここで生成する論理ブロックの制約は、入出力例の各行の内のいずれかを満たすことを意味する制約である。この制約は、各入出力例の行ごとの制約を作り、これら制約の論理和を取ることで生成することができる。
各行の制約は、結線とその値を等号で結んだ制約を全ての結線に対して論理積をとることで生成できる。
【００９１】
図２７は、論理ブロック制約生成部５３が図２５の論理ブロック入出力例５２を用いて作成した論理ブロック制約表１９である。
図２７の論理ブロック制約表のうち論理ブロックＦＦとＤＩは、図２５の入出力例から作成された論理ブロック制約を示しており、それ以外（ＡＮＤ，ＯＲ，ＮＯＴ）は、図９と同じ制約が記述されている。
【００９２】
図２４の処理（Ｓ８２）において、論理ブロック制約表の生成が終わったら、図２と同様の順序でテスト生成処理（Ｓ８３）を行う。
図２４のテスト生成処理（Ｓ８３）が終了したところで、テスト生成を続けるか否かについて判断する（Ｓ８４）。
テスト生成を続ける場合（Ｓ８４ Ｙｅｓ）は、処理（Ｓ８１）〜（Ｓ８３）を繰り返し、テスト生成を続けない場合（Ｓ８４ Ｎｏ）は、処理を終了する。
【００９３】
処理（Ｓ８４）において、テスト生成を続けるか否かは、次の値から判断する。
・Ｓ８１からＳ８３を繰り返した回数（繰り返し回数）
・未確認結線リスト２８の結線数（未確認数）
・未確認結線リスト２８と確認した結線数の割合（未確認割合）
【００９４】
例えば、次のような段取りでテスト生成を続けるか否かの判断を行う。
・未確認数が０になるまで、繰り返し回数最大１０回続ける
・未確認割合が５％以下になるまで、繰り返し回数最大２０回続ける
・未確認数が減少している限り繰り返す
【００９５】
以上述べた第３実施形態によれば、論理ブロック制約生成部５３と論理ブロック入出力例生成部５１を用い、論理ブロック制約表１９を生成することで、人手により論理ブロック制約を作る必要が無くなる。
これにより、制約の記述が困難な論理ブロックがある場合もテスト生成が可能となる。
【００９６】
また、論理ブロック制約の代わりに入出力例を用いることにより、実数の掛け算のような制約ソルバとの相性が悪い制約記述を避けることが可能となる。
このように論理ブロック制約の記述が、制約ソルバとの相性が悪く、制約の解を得るのに時間がかかったり解を得ることができなかったりするような場合においても、テスト生成が可能になる。
【００９７】
以上述べた少なくともひとつの実施形態のテストパターンの生成装置によれば、指定した出力や結線に対し影響を与える入力のテストパターンを得て、これら出力や結線に単独の入力が伝播することを確認するロジックテストを実施することができる。
【００９８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更、組み合わせを行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
また、テストパターンの生成装置の構成要素は、コンピュータのプロセッサで実現することも可能であり、テストパターンの生成プログラムにより動作させることが可能である。
【符号の説明】
【００９９】
１０…テストパターン生成装置、１１…既存テストパターン、１２…テスト登録部、１３…テストＤＢ、１４…結線値算出部、１５…結線値履歴、１６…回路表現データ、１７…結線間制約生成部、１８…回路接続情報保持部、１９…論理ブロック制約表、２０…結線間制約、２１…結線伝播算出部、２２…伝播未確認結線リスト、２３…結線伝播制約生成部、２４…結線伝播制約、２５…テスト生成部、２６…制約ソルバ、２７…新規テストパターン、２８…未確認結線リスト、５１…論理ブロック入出力例生成部、５２…論理ブロック入出力例、５３…論理ブロック制約生成部。
【図１】
2014130414.tif 000003
【図２】
2014130414.tif 000004
【図３】
2014130414.tif 000005
【図４】
2014130414.tif 000006
【図５】
2014130414.tif 000007
【図６】
2014130414.tif 000008
【図７】
2014130414.tif 000009
【図８】
2014130414.tif 000010
【図９】
2014130414.tif 000011
【図１０】
2014130414.tif 000012
【図１１】
2014130414.tif 000013
【図１２】
2014130414.tif 000014
【図１３】
2014130414.tif 000015
【図１４】
2014130414.tif 000016
【図１５】
2014130414.tif 000017
【図１６】
2014130414.tif 000018
【図１７】
2014130414.tif 000019
【図１８】
2014130414.tif 000020
【図１９】
2014130414.tif 000021
【図２０】
2014130414.tif 000022
【図２１】
2014130414.tif 000023
【図２２】
2014130414.tif 000024
【図２３】
2014130414.tif 000025
【図２４】
2014130414.tif 000026
【図２５】
2014130414.tif 000027
【図２６】
2014130414.tif 000028
【図２７】
2014130414.tif 000029