スキャンチェーンを形成する複数のスキャンフリップフロップを備え、前記スキャンフリップフロップは、スキャン入力端子から受け付けるスキャンテストデータ、又は、前記スキャンフリップフロップのデータ出力端子から出力されるデータを反転させた反転出力データをスキャンデータ入力端子により受け付け、前記スキャンテストデータ又は前記反転データのいずれかを保持することを特徴とするスキャンテスト回路。さらに、前記スキャンデータ入力端子と接続され、前記スキャンテストデータと、前記反転出力データと、を切り替え可能なセレクタを複数含む請求項1のスキャンテスト回路。さらに、前記スキャンフリップフロップのデータ出力端子から出力されるデータを反転する否定論理回路を複数含むと共に、前記セレクタの出力の切り替えと前記スキャンフリップフロップの動作モードの切り替えが、外部から可能である請求項2のスキャンテスト回路。スキャンチェーンを形成する複数のスキャンフリップフロップを備えたスキャンテスト回路において、前記複数のスキャンフリップフロップはスキャン入力端子からスキャンテストデータを受け付け、保持できる状態で、前記スキャンテスト回路をシフト動作させる第1の工程と、前記複数のスキャンフリップフロップはデータ出力端子から出力されるデータを反転させた反転出力データを受け付け、保持できる状態で、前記第1の工程で保持した前記スキャンテストデータを反転した値を保持させる第2の工程と、を含み、前記第2の工程後、前記複数のスキャンフリップフロップは前記スキャンテストデータを受け付け、保持できる状態で、前記スキャンテスト回路をシフト動作させる第3の工程を含むことを特徴とするスキャンテスト方法。さらに、前記第3の工程において、スキャン出力端子から得られるスキャンテストの結果に基づいて、前記スキャンチェーン上の故障箇所を特定する第4の工程を含む請求項4のスキャンテスト方法。前記第4の工程は、前記スキャンテストの結果から得られるデータの論理レベルが変化するタイミング及び変化値に基づいて、前記故障箇所及びその故障値を特定する請求項5のスキャンテスト方法。前記第1の工程は、少なくても前記複数のスキャンフリップフロップの個数に等しい数のクロックを入力し、前記第2の工程は、1クロックを入力する請求項4乃至6のいずれか一に記載のスキャンテスト方法。請求項1乃至3のいずれか一に記載のスキャンテスト回路を備えることを特徴とする半導体集積回路。なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明の観点からなされたものである。上述のように、特許文献1で開示された技術は、全てのスキャンフリップフロップがセットリセット機能を有する必要がある。そのため、セットリセット機能を持たないスキャンフリップフロップから、セットリセット機能を有するスキャンフリップフロップに置き換える必要がある。その結果、ユーザ回路ロジック回路のセットアップタイムに関する設計制約が厳しくなり、半導体集積回路のレイアウト設計時のロジック回路に関するタイミングの設計が困難になるという問題がある。図2は、特許文献4の図7である。図2は、セットリセット機能を有さないフリップフロップの回路構成である。図3は、特許文献4の図5である。図3は、セットリセット機能を有するフリップフロップの回路構成である。ここで、図2及び図3の通常データライン上の素子を検証する。セットリセット機能を有さないフリップフロップ図2では、トランスファトランスミッションゲート間はインバータで構成されている。一方、セットリセット機能を有するフリップフロップ図3では、トランスファトランスミッションゲート間はNAND回路で構成されている。NAND回路はインバータよりも遅延が大きいため、セットリセット機能を有さないフリップフロップからセットリセット機能を有するフリップフロップに置き換えると、通常データラインの遅延もまた大きくなる。フリップフロップの通常データは、クロックが変化する前に一定期間、確定している必要があるセットアップタイムに関する設計制約が、通常データラインの遅延が大きくなるとこのセットアップタイムに関する設計制約が守れないことが考えられる。即ち、特許文献1で開示された回路では、ロジック回路のセットアップタイムに関する設計制約が厳しくなり、ロジック回路のタイミングの設計タイミングの収束を困難にする。以上のとおり、従来技術には、解決すべき問題点が存在する。本発明の一側面において、スキャンフリップフロップの通常データライン上のセットアップタイムに関する設計制約が厳しくなることなく、スキャンチェーン上の故障箇所を特定するスキャンテスト回路及びスキャンテスト方法、スキャンテスト回路を備える半導体集積回路が、望まれる。本発明の第1の視点によれば、スキャンチェーンを形成する複数のスキャンフリップフロップを備え、前記スキャンフリップフロップは、スキャン入力端子から受け付けるスキャンテストデータ、又は、前記スキャンフリップフロップのデータ出力端子から出力されるデータを反転させた反転出力データをスキャンデータ入力端子により受け付け、前記スキャンテストデータ又は前記反転データのいずれかを保持するスキャンテスト回路が提供される。本発明の第2の視点によれば、スキャンチェーンを形成する複数のスキャンフリップフロップを備えたスキャンテスト回路において、前記複数のスキャンフリップフロップはスキャン入力端子からスキャンテストデータを受け付け、保持できる状態で、前記スキャンテスト回路をシフト動作させる第1の工程と、前記複数のスキャンフリップフロップはデータ出力端子から出力されるデータを反転させた反転出力データを受け付け、保持できる状態で、前記第1の工程で保持した前記スキャンテストデータを反転した値を保持させる第2の工程と、を含み、前記第2の工程後、前記複数のスキャンフリップフロップは前記スキャンテストデータを受け付け、保持できる状態で、前記スキャンテスト回路をシフト動作させる第3の工程を含むスキャンテスト方法が提供される。本発明の第3の視点によれば、上述のスキャンテスト回路を備える半導体集積回路が提供される。本発明の各視点によれば、スキャンフリップフロップのセットアップタイムに関する設計制約が厳しくなることなく、スキャンチェーン上の故障箇所を特定するスキャンテスト回路及びスキャンテスト方法、スキャンテスト回路を備える半導体集積回路が、提供される。初めに、図1を用いて実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。上述のように、スキャンテスト回路上の故障箇所を特定しようとすれば、通常データラインの遅延が増大し、ロジック回路のセットアップタイムに関する設計制約が厳しくなるという問題点がある。そのため、スキャンフリップフロップのセットアップタイムに関する設計制約が厳しくなることなく、スキャンチェーン上の故障箇所を特定するスキャンテスト回路及びスキャンテスト方法、スキャンテスト回路を備える半導体集積回路が、望まれる。そこで、一例として図1に示すスキャンテスト回路を提供する。図1に示すスキャンテスト回路は、スキャンチェーンを形成する複数のスキャンフリップフロップを備え、スキャンフリップフロップは、スキャン入力端子から受け付けるスキャンテストデータ、又は、スキャンフリップフロップのデータ出力端子から出力されるデータを反転させた反転出力データをスキャンデータ入力端子により受け付け、スキャンテストデータ又は反転データのいずれかを保持する。スキャンテスト回路をこのような構成にすることによって、スキャンチェーン上の故障箇所の特定をすることが可能になる。例えば、図1に示す箇所に故障が存在するとする。この場合に、故障箇所よりも後段にあるスキャンフリップフロップでは、スキャンテストデータが故障箇所を通過してくるため、故障値及びその反転値を保持することができる。従って、各スキャンフリップフロップの出力データの反転値を保持させた後に、シフト動作を行えば故障値を反転させたデータが出力されてくる。しかし、故障箇所よりも前段のスキャンフリップフロップは保持しているデータを後段に伝達することはできず、シフト動作の結果としては故障値が出力されてくる。このように、一度、各スキャンフリップフロップの反転出力データを保持させてシフト動作を行うと、スキャン出力端子から出力されるデータには、故障箇所よりも後段では故障値を反転したデータ、故障箇所よりも前段では故障値そのもののデータ、といった違いが現れる。即ち、この違いが現れるタイミングと入力したクロック数から、スキャンチェーン上の故障箇所を特定することができる。その際に、各スキャンフリップフロップの通常データ入力に対して、セットアップタイムを悪化させるような回路を挿入しておらず、スキャンテスト回路を含む半導体集積回路のタイミング設計が困難になることもない。[第1の実施形態]次に、本発明の第1の実施形態について、図面を用いてより詳細に説明する。図4は、本実施形態に係るスキャンテスト回路1の内部構成の一例を示す図である。図4に示すスキャンテスト回路1は、スキャンフリップフロップSFF01乃至SFF03と、インバータINV01乃至INV03と、セレクタSEL01乃至SEL03から構成されている。図4には、スキャンテスト回路1のテスト対象であるロジック回路10乃至30も示されている。スキャンテスト回路1は、スキャン入力端子SINと、スキャンモード制御入力端子SMCと、スキャンデータ制御入力端子CNTと、クロック端子CLKの各入力端子と、スキャン出力端子SOTを備える。スキャン入力端子SINからスキャンテストデータをスキャンテスト回路1に入力し、スキャン出力端子SOTからスキャンテストの結果を出力する。スキャンモード制御入力端子SMCは、スキャンフリップフロップSFF01乃至SFF03の各スキャンデータ入力制御端子SEと接続される。スキャンデータ制御入力端子CNTは、セレクタSEL01乃至SEL03のセレクト端子と接続される。クロック端子CLKは、スキャンフリップフロップSFF01乃至SFF03のクロック入力端子CKと接続される。スキャンフリップフロップSFF01の通常データ入力端子Dは、ロジック回路10と接続されている。スキャンフリップフロップSFF01のスキャンデータ入力端子SIは、セレクタSEL01の出力端子と接続されている。さらに、スキャンフリップフロップSFF01のデータ出力端子Qは、セレクタSEL02の入力端子In1に接続されている。スキャンフリップフロップSFF01は、スキャンモード制御入力端子SMCに0Lレベルが設定されると、通常データ入力端子Dにより受け付けるロジック回路10の出力を選択し、クロック端子CLKに入力されたクロックに同期してデータ出力端子Qから出力する。スキャンモード制御入力端子SMCに1Hレベルが設定されると、スキャンデータ入力端子SIにより受け付けるセレクタSEL01の出力を選択し、クロックに同期してデータ出力端子Qから出力する。スキャンフリップフロップSFF02及びSFF03も同様に接続され、スキャンフリップフロップSFF03のデータ出力端子Qがスキャン出力端子SOTと接続される。インバータINV01の入力端子は、スキャンフリップフロップSFF01のデータ出力端子Qと接続され、出力端子はセレクタSEL01の入力端子In2と接続される。インバータINV02及びINV03についても同様である。セレクタSEL01は、スキャンデータ制御入力端子CNTに0Lレベルが設定されると入力端子In1を選択し、出力端子からスキャン入力端子SINを経由してスキャンテストデータを出力する。スキャンデータ制御入力端子CNTに1Hレベルが設定されると入力端子In2を選択し、出力端子からインバータINV01が出力する信号を出力する。セレクタSEL02及びSEL03についても同様である。なお、説明の便宜上、本実施形態ではスキャンフリップフロップを3段としているが、スキャンテストの対象となるロジック回路に適応させてスキャンフリップフロップの段数を拡張できることは当然である。次に、図4に示すスキャンテスト回路1の動作について説明する。図5は、スキャンテスト回路1を用いてスキャンチェーン上の故障箇所を特定する際のテスト手順の一例を示すフローチャートである。動作の説明にあたり、スキャンフリップフロップSFF01のデータ出力端子Qの直後に故障以降、FAIL01と呼ぶが存在するものとする。なお、この際の故障とは、信号の値が常に0又は1のいずれかの値から変化しない縮退故障とし、故障FAIL01は値が常に1となる縮退故障とする。図5のステップS01においては、スキャンモード制御入力端子SMCを1に設定することで、スキャンテスト回路1のスキャンチェーンをシフトモードに設定する。図4のスキャンフリップフロップSFF01乃至SFF03では、スキャンデータ入力端子SIから受け付けるスキャンテストデータをデータ出力端子Qに出力する設定に切り替わる。ステップS02において、スキャンデータ制御入力端子CNTに0を設定することで、スキャンフリップフロップSFF01乃至SFF03のスキャン入力端子SIにスキャンテストデータを伝達する設定にセレクタSEL01乃至SEL03を切り替える。セレクタSEL01はスキャン入力端子SINを、セレクタSEL02はスキャンフリップフロップSFF01のデータ出力端子Qを、セレクタSEL03はスキャンフリップフロップSFF02のデータ出力端子Qを、それぞれ選択する。ステップS03において、スキャン入力端子SINから入力するスキャンテストデータを0に固定した状態で、スキャンテスト回路1のスキャンチェーン上に存在するスキャンフリップフロップの個数と同数のクロックをクロック端子CLKから入力する。スキャンテスト回路1には、3個のスキャンフリップフロップが存在するので3クロックを入力する。スキャンテスト回路1にクロックを入力することで、シフト動作を実施する。スキャンテスト回路1には、スキャンフリップフロップSFF01のデータ出力端子Qの直後に故障値が1である故障FAIL01が存在している。ここで、シフト動作が完了した際に、スキャンフリップフロップSFF01はスキャン入力端子SINから入力するスキャンテストデータである0を保持している。スキャンフリップフロップSFF01は故障FAIL01よりも前段であるためである。しかし、故障FAIL01の後段にあるスキャンフリップフロップSFF02及びSFF03では故障FAIL01の縮退故障値である1を保持している。ステップS04において、スキャンデータ制御入力端子CNTに1を設定することで、スキャンフリップフロップSFF01乃至SFF03のスキャンデータ入力端子SIに各スキャンフリップフロップが保持している値の反転値を伝達する設定にセレクタSEL01乃至SEL03を切り替える。セレクタSEL01乃至SEL03は、それぞれインバータINV01乃至INV03の出力を選択する。ステップS05において、クロック端子CLKから1クロック入力する。この際、セレクタSEL01乃至SEL03は、スキャンフリップフロップSFF01乃至SFF03が保持している値の反転値であるインバータINV01乃至INV03の出力を選択しているステップS04。従って、スキャンフリップフロップSFF01乃至SFF03は、ステップS03において取り込んだ値の反転値を取り込むことになる。ステップS03において、スキャンフリップフロップSFF01は0を保持し、スキャンフリップフロップSFF02及びSFF03は1を保持している。従って、ステップS05で、スキャンフリップフロップSFF01が保持する値は1に更新され、スキャンフリップフロップSFF02及びSFF03が保持する値は0に更新される。ステップS06において、スキャンデータ制御入力端子CNTを0に設定することで、スキャンフリップフロップSFF01乃至SFF03のスキャンデータ入力端子SIにスキャンテストデータを伝達する設定にセレクタSEL01乃至SEL03を切り替える。セレクタSEL01はスキャン入力端子SINを、セレクタSEL02はスキャンフリップフロップSFF01のデータ出力端子Qを、セレクタSEL03はスキャンフリップフロップSFF02のデータ出力端子Qを、それぞれ選択する。ステップS07において、再びスキャンテスト回路1のシフト動作を行う。その際に、ステップS03と同様に、スキャンテストデータを0に固定した状態で、スキャンテスト回路1のスキャンチェーン上に存在するスキャンフリップフロップの個数と同数のクロックをクロック端子CLKから入力する。その後、スキャン出力端子SOTから出力される値を観測する。スキャン出力端子SOTからは、スキャンフリップフロップSFF03、SFF02、SFF01の順でそれぞれが保持していた値が出力される。しかし、スキャンテスト回路1上に故障箇所が存在する場合、故障よりも後段にあるスキャンフリップフロップの保持値が出力された後は、故障値が出力されることになる。故障箇所より前段にあるスキャンフリップフロップの保持値は出力されないためである。即ち、ステップS05において更新されたスキャンフリップフロップSFF03の保持値である0が最初に観測される。続いて、スキャンフリップフロップSFF02の保持値である0が観測される。最後に、ステップS05で更新されたスキャンフリップフロップSFF01の保持値ではなく、故障FAIL01の故障値である1が観測される。ステップS08において、ステップS07でスキャン出力端子SOTから観測した値に基づいて、故障箇所が存在するスキャンチェーン、その故障値、及び、スキャンチェーン上の故障箇所等を特定する。スキャンテスト回路1に故障箇所が存在しない場合、全てのスキャンフリップフロップSFF01乃至SFF03には、0が取り込まれるステップS03。その後、ステップS05において1に更新されるため、スキャン出力端子SOTから1、1、1の順で3つのスキャンテストデータが観測されるステップS07。しかし、本実施形態のように、スキャンフリップフロップSFF01のデータ出力端子Qの直後に故障FAIL01が存在すると、スキャン入力端子SINから入力するスキャンテストデータを0に固定したとしても、故障FAIL01より後段にあるスキャンフリップフロップSFF02及びSFF03は故障値である1しか取り込むことができない故障FAIL01より前段にあるスキャンフリップフロップSFF01は0を取り込むことができる。その後、故障FAIL01より後段にあるスキャンフリップフロップSFF02及びSFF03の保持値は0に更新されステップS05、ステップS07のシフト動作によって、スキャン出力端子SOTから、0、0、1の順で3つのスキャンテストデータが観測される。従って、スキャンテストデータを0に固定した状態で、スキャン出力端子SOTから、0、0、1の順に3つのスキャンテストデータが観測されれば、スキャン出力端子SOTから数えて3番目観測される値が反転値になる箇所の位置にあるスキャンフリップフロップSFF01のデータ出力端子Qに、故障値が1である故障FAIL01が存在することが特定できる。なお、本実施形態においては、スキャン入力端子SINから入力するスキャンテストデータを0に固定する場合について説明したが、スキャンテストデータを1に固定しても故障FAIL01の故障値とその箇所を特定することが可能である。この場合においても、ステップS03で、スキャンフリップフロップSFF02及びSFF03の保持値は1となるため、ステップS04以降の結果は変わらない。即ち、ステップS05において、スキャンフリップフロップSFF02及びSFF03の保持値は0に更新されるため、ステップS07でスキャン出力端子SOTから観測される値は、0、0、1の3つのスキャンテストデータとなる。このように、ステップS03でスキャン入力端子SINから入力するスキャンテストデータを1に固定した場合であっても、ステップS08で特定される結果は同じである。本実施形態においては、スキャンフリップフロップSFF01のデータ出力端子Qの直後に故障値が1である故障FAIL01が存在する場合について説明した。次に、故障FAIL01以外の故障であってもその故障箇所及び故障値の特定が可能であることを説明する。初めに、故障FAIL01の故障値が1ではなく、0である場合について説明する。この場合であっても、図5を用いて説明した手順によって故障FAIL01の故障値とその故障箇所の特定が可能である。故障FAIL01の故障値が0の場合、ステップS03において、スキャンフリップフロップSFF01乃至SFF03の保持値は全て0になる。その後、ステップS05において、スキャンフリップフロップSFF02及びSFF03の保持値は、1に更新される。すると、ステップS07において、スキャン出力端子SOTから、1、1、0の順に3つのスキャンテストデータが観測される。従って、ステップS08では、スキャン出力端子SOTから数えて3番目観測される値が反転値になる箇所の位置にあるスキャンフリップフロップSFF01のデータ出力端子Qに、故障値が0である故障FAIL01が存在することが特定できる。次に、スキャンフリップフロップSFF02のデータ出力端子Qに故障値が1である故障FAIL02が存在する場合であっても、故障FAIL02の故障値と故障箇所の特定が可能であることを説明する。この場合、ステップS03では、故障FAIL02より前段にあるスキャンフリップフロップSFF01及びSFF02の保持値は0となる。スキャンフリップフロップSFF03の保持値は1となる。その後、ステップS05において、スキャンフリップフロップSFF03に限り保持値が0に更新される。その結果、ステップS07でスキャン出力端子SOTから、0、1、1の順で3つのスキャンテストデータが観測される。従って、ステップS08において、スキャン出力端子SOTから数えて2番目観測される値が反転値になる箇所の位置にあるスキャンフリップフロップSFF02のデータ出力端子Qに、故障値が1である故障FAIL02が存在することが特定できる。以上のように、スキャンテスト回路1と図5に示すスキャンテスト方法によりスキャンテスト回路上の故障箇所及びその故障値を特定することができる。即ち、スキャンテスト回路1のスキャンフリップフロップSFF01乃至SFF03の前段に、スキャンテストデータとスキャンフリップフロップの出力データの反転値を選択可能なセレクタSEL01乃至SEL03を配置する。このセレクタSEL01乃至SEL03を適宜切り替えて、スキャンフリップフロップSFF01乃至SFF03の各出力データの反転値を各スキャンフリップフロップに保持させる。すると、故障が存在するスキャンフリップフロップは、出力データを反転させて保持することができないため、正常なスキャンフリップフロップと区別をすることができる。その結果、スキャン出力端子SOTから出力されるスキャンテストデータにおいて、当初出力されていた値から反転する箇所が故障箇所と特定することができる。このように、スキャンテスト回路1では、特許文献1で開示された技術のようにスキャンフリップフロップをセットリセット機能付きスキャンフリップフロップに置き換える必要はなく、ロジック回路のセットアップタイムに関する設計制約を悪化させることはない。そのため、半導体集積回路のレイアウト設計時におけるロジック回路のタイミングに関する設計が困難になることもない。また、スキャンテスト回路1では、通常データラインにセレクタを挿入しておらず、セレクタの挿入が原因となってロジック回路のセットアップタイムに関する設計制約を悪化させることはない。このことは、特許文献2及び3で開示された技術が、通常データラインにセレクタを挿入し、ロジック回路に対するセットアップタイムに関する設計制約を悪化させているのとは対照的である。さらに、特許文献3で開示された技術では、挿入したセレクタの制御にテスト用のスキャンフリップフロップを用いている。しかし、スキャンフリップフロップはスキャンチェーンに含まれており、スキャンチェーン上に故障がある場合には、セレクタの制御ができず、始点となるスキャンフリップフロップが自身の反転値を取り込むことができない可能性がある。そのような場合、スキャンチェーン上の故障箇所が特定できないという問題点がある。一方、本実施形態に係るスキャンテスト回路1では、セレクタの制御にスキャンフリップフロップを使用しておらず、そのような事象が発生することはない。また、特許文献1で開示された技術では、スキャンチェーン上の故障値が0である場合には、セット機能を有効にした解析パタンを実行し、故障値が1の場合には、リセット機能を有効にした解析パタンを実行することで、故障箇所の特定を行う。そのため、予め故障値が0又は1のいずれかであるかを調査しておき、その値に応じて解析パタンを実行する必要があるため、少なくても2回以上故障値の調査に1回、解析に1回のテストパタンの実行が必要である。しかし、本実施形態に係るスキャンテスト回路1では、故障値に依存することなく、1回の解析パタンの実行により、故障値と故障箇所の特定が可能である。従って、特許文献1で開示されたスキャンテスト方法と比較して、解析工程が簡易化されるという利点がある。このことは、スキャンテストを実行する際のテストパタンが小規模であることを意味し、テストパタンの実行に必要な資源ハードディスクやメモリが大規模になることがない。さらに、半導体集積回路内部にスキャンテスト回路をレイアウトする際において、ロジック回路の信号伝播経路と同様に、スキャンチェーン上の信号伝播経路に対してもタイミング調整が必要である。その際、スキャンチェーン上のホールドタイムに関する設計制約が守れていない場合に、ホールドバッファを挿入してタイミング調整を行うことになるが、スキャンテスト回路1に挿入される各セレクタの遅延量が、ホールドバッファを挿入することによる全遅延量の一部を補うことができるため、ホールドバッファの削減が可能であるという利点もある。なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示請求の範囲を含むの枠内において、さらにその基本的技術思想に基づいて、実施形態の変更調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせ乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。