(57)【要約】【課題】ハードウェア資源の使用を抑制しつつ、効率よくアサーション検証を行うことができる、半導体集積回路の設計装置及び半導体集積回路の設計プログラムを提供する。【解決手段】検証対象回路記述１１１に組み込まれたアサーション記述を解析して観測対象アサーション信号を抽出するアサーション記述解析部２１と、観測対象アサーション信号と接続された回路を辿り、検証対象回路記述１１１のモジュールの入力までトレースして観測対象入力信号を抽出するアサーション入力側ＩＯ解析部２２と、観測対象アサーション信号の出力値と、観測対象入力信号の出力値とを格納するメモリ領域を確保し、メモリ領域に観測対象アサーション信号と観測対象入力信号とが格納されるための接続回路４７を生成する波形ダンプ回路生成部２３とを有することを特徴とする。【選択図】図２
2013196187.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路記述に組み込まれたアサーション記述を解析して観測対象アサーション信号を抽出し、かつ、前記アサーション記述で使用される第１のサイクル数を算出するアサーション記述解析部と、
前記観測対象アサーション信号と接続された回路を辿り、前記半導体集積回路の入力までトレースして観測対象入力信号を抽出し、かつ、前記観測対象アサーション信号と接続されたロジックを解析して非同期ループを特定し、更に、前記観測対象アサーション信号から前記観測対象入力信号までに使用される第２のサイクル数を算出するアサーション入力側ＩＯ解析部と、
前記観測対象アサーション信号の出力値と、前記観測対象入力信号の出力値とを格納する記憶領域を確保し、前記記憶領域に前記観測対象アサーション信号と前記観測対象入力信号とが格納されるための接続回路を生成する記憶領域接続回路生成部と、
を有し、前記記憶領域は、前記観測対象アサーション信号及び前記観測対象入力信号について、前記第１のサイクル数と前記第２のサイクル数の和の最大値のサイクル数だけそれぞれの出力値を格納できる容量を有しており、機能検証においてアサーション違反が発生した時点において、前記記憶領域に蓄積されている前記観測対象アサーション信号の出力値のうち、違反を生じたアサーション記述から抽出された前記観測対象アサーション信号である保存対象アサーション信号の出力値を、違反を生じた前記アサーション記述で使用される前記第１のサイクル数だけ第二の記憶領域にダンプし、また、前記記憶領域に蓄積されている前記観測対象入力信号の出力値のうち、前記保存対象アサーション信号と接続された回路を辿り前記半導体集積回路の入力までトレースして抽出された前記観測対象入力信号である保存対象入力信号の出力値を、違反を生じた前記アサーション記述で使用される前記第１のサイクル数と、前記保存対象アサーション信号から前記保存対象入力信号までに使用される前記第２のサイクル数の和のサイクル数だけ、前記第二の記憶領域にダンプすることを特徴とする、半導体集積回路の設計装置。
【請求項２】
半導体集積回路記述に組み込まれたアサーション記述を解析して観測対象アサーション信号を抽出するアサーション記述解析部と、
前記観測対象アサーション信号と接続された回路を辿り、前記半導体集積回路の入力までトレースして観測対象入力信号を抽出するアサーション入力側ＩＯ解析部と、
前記観測対象アサーション信号の出力値と、前記観測対象入力信号の出力値とを格納する記憶領域を確保し、前記記憶領域に前記観測対象アサーション信号と前記観測対象入力信号とが格納されるための接続回路を生成する記憶領域接続回路生成部と、
を有することを特徴とする、半導体集積回路の設計装置。
【請求項３】
前記アサーション記述解析部は、前記アサーション記述で使用される第１のサイクル数を算出し、前記アサーション入力側ＩＯ解析部は、前記観測対象アサーション信号から前記観測対象入力信号までに使用される第２のサイクル数を算出することを特徴とする、請求項２に記載の半導体集積回路の設計装置。
【請求項４】
前記記憶領域は、前記観測対象アサーション信号及び前記観測対象入力信号について、前記第１のサイクル数と前記第２のサイクル数の和の最大値のサイクル数だけそれぞれの出力値を格納できる容量を有しており、機能検証においてアサーション違反が発生した時点において、前記記憶領域に蓄積されている前記観測対象アサーション信号の出力値及び前記観測対象入力信号の出力値を第二の記憶領域にダンプすることを特徴とする、請求項３に記載の半導体集積回路の設計装置。
【請求項５】
前記記憶領域に蓄積されている前記観測対象アサーション信号の出力値及び前記観測対象入力信号の出力値のうち、違反を生じたアサーション記述から抽出された前記観測対象アサーション信号である保存対象アサーション信号の出力値と、前記保存対象アサーション信号と接続された回路を辿り前記半導体集積回路の入力までトレースして抽出された前記観測対象入力信号である保存対象入力信号の出力値とを、違反を生じた前記アサーション記述で使用される前記第１のサイクル数と、前記保存対象アサーション信号から前記保存対象入力信号までに使用される前記第２のサイクル数の最大値とを和して得られるサイクル数だけ、前記第二の記憶領域にダンプすることを特徴とする、請求項４に記載の半導体集積回路の設計装置。
【請求項６】
前記記憶領域に蓄積されている前記保存対象アサーション信号の出力値を、違反を生じた前記アサーション記述で使用される前記第１のサイクル数だけ前記第二の記憶領域にダンプし、前記保存対象入力信号を、違反を生じた前記アサーション記述で使用される前記第１のサイクル数と、前記保存対象アサーション信号から前記保存対象入力信号までに使用される前記第２のサイクル数の最大値とを和して得られるサイクル数だけ、前記第二の記憶領域にダンプすることを特徴とする、請求項５に記載の半導体集積回路の設計装置。
【請求項７】
半導体集積回路記述に組み込まれたアサーション記述を解析して観測対象アサーション信号を抽出し、
前記観測対象アサーション信号と接続された回路を辿り、前記半導体集積回路の入力までトレースして観測対象入力信号を抽出し、
前記観測対象アサーション信号の出力値と、前記観測対象入力信号の出力値とを格納する記憶領域を確保し、前記記憶領域に前記観測対象アサーション信号と前記観測対象入力信号とが格納されるための接続回路を生成する処理をコンピュータに実行させることを特徴とする、半導体集積回路の設計プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、半導体集積回路の設計装置及び半導体集積回路の設計プログラムに関する。
【背景技術】
【０００２】
従来、半導体集積回路の設計では、設計する集積回路に対して要求される回路動作や機能が定義されている抽象度の高い言語（ＲＴＬ）にアサーションと呼ばれる仕様記述を挿入した回路記述を、機能シミュレータや論理シミュレータなどを用いて動作させ、集積回路が要求仕様記述通りに正しく動作しているか否かを確認していた。
【０００３】
シミュレーションにおいて集積回路が正しく動作しなかった場合、どのアサーション記述で正しく動作しなかったのかを調べ、当該アサーション記述の中で、どの信号及びどのサイクル動作が期待通りでなかったのかを特定する作業（以下、デバックと示す）を行う。
【０００４】
集積回路にアサーションを挿入しないで行うデバック作業に対し、アサーションを挿入して行うデバック作業はどの仕様が正しく動作しなかったのかが短時間で判明するという利点がある。しかし、集積回路にアサーション検証用の回路を追加しているために、シミュレーションにおいてオーバーヘッドが発生し、検証に要する時間が増大してしまうという問題がある。
【０００５】
近年は、集積回路の大規模化及び複雑化に対応して検証を高速に行う手段であるエミュレーションなどハードウェア検証装置でも、アサーション検証を取り扱えるようになってきた。エミュレーションなどのハードウェア検証装置では、検証対象の回路をプロセッサあるいはＦＰＧＡなどのプログラマブルな回路へマッピングして論理検証などを行うことにより、検証に要する時間を大幅に短縮することができる。
【０００６】
ハードウェア検証装置でのアサーション検証は、信号の観測を優先して検証する方法と、速度を優先して検証する方法とに大別される。前者は、全ての信号の波形結果を出力するものであるが、この方法では全信号を波形トレースするための回路や、波形をダンプするためのメモリが必要になる。すなわち、多大なハードウェア資源が必要となる。すなわち、前者の方法では、回路規模の増大によりハードウェア資源が圧迫されてしまうために大規模回路の検証ができなくなってしまう点、動作速度が大幅に低下してしまう点、ダンプした波形をファイルに格納するために多大なディスク容量を要するため、長時間のダンプができない点、といった多くの問題があった。
【０００７】
一方、速度を優先して検証する方法（後者の方法）は、観測を行う信号を事前に選択することで波形観測用の回路を小さくするものである。この方法では、観測したい信号を検証に先んじて作業者がマニュアルで登録する必要があるため、必要な信号を登録し忘れる可能性がある。登録忘れが発見されるたびに、信号の追加登録を行ったり、検証用のデータベースを構築しなおして再検証を行ったりという余計な手間や手戻りが発生し、結果として検証時間の短縮効果が得られないという問題があった。
【０００８】
ロジックコーンと呼ばれる複数のフリップフロップ間の組み合わせ回路を抽出・定義し、検証作業で発見された不具合箇所について、ロジックコーンの情報を用いて効率的に変更を行う設計装置においては、検証作業自体の時間的、資源的な効率化を図ることはできない。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００１−１４３７１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
そこで、本実施形態は、以上の点に鑑みてなされたもので、ハードウェア資源の使用を抑制しつつ、効率よくアサーション検証を行うことができる、半導体集積回路の設計装置及び半導体集積回路の設計プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本実施形態の半導体集積回路の設計装置は、半導体集積回路記述に組み込まれたアサーション記述を解析して観測対象アサーション信号を抽出するアサーション記述解析部と、前記観測対象アサーション信号と接続された回路を辿り、前記半導体集積回路の入力までトレースして観測対象入力信号を抽出するアサーション入力側ＩＯ解析部と、前記観測対象アサーション信号の出力値と、前記観測対象入力信号の出力値とを格納する記憶領域を確保し、前記記憶領域に前記観測対象アサーション信号と前記観測対象入力信号とが格納されるための接続回路を生成する記憶領域接続回路生成部と、を有することを特徴とする。
【図面の簡単な説明】
【００１２】
【図１】本実施形態に係わる情報処理装置の構成の一例を説明するブロック図。
【図２】本実施形態に係わる半導体集積回路の設計装置の構成を示す概略図。
【図３】検証対象回路の一例を説明するブロック図。
【図４】図３に示す検証対象回路の一部を抽出した回路図。
【図５】第１の実施形態に係わるアサーション情報抽出部２の処理手順を説明するフローチャート。
【図６】アサーション信号マップ４５を説明する図。
【図７】ロジックコーン信号マップ４６を説明する図。
【図８】前処理完了時における検証対象回路の一例を説明する図。
【図９】第１の実施形態に係わる検証結果波形の取得領域を概念的に説明する図。
【図１０】第２の実施形態に係わるアサーション情報抽出部２の処理手順を説明するフローチャート。
【図１１】アサーションサイクルマップ４７を説明する図。
【図１２】ロジックコーンサイクルマップ４８を説明する図。
【発明を実施するための形態】
【００１３】
以下、図面を参照して実施形態を説明する。
【００１４】
（第１の実施形態）
まず、図１を参照して、本実施形態に係わる情報処理装置の構成を説明する。図１は、本実施形態に係わる情報処理装置の構成の一例を説明するブロック図である。
【００１５】
図１に示すように、情報処理装置１０１は、各種ソフトウェアプログラムを実行する中央処理装置（以下、CPUという）１０１ａ、ＲＯＭ、ＲＡＭなどを含む装置本体１０１と、キーボード１０５やマウス１０６などの入力装置と、表示装置１０４と、ハードディスク装置などの外部記憶装置１０２（以下、単に記憶装置１０２と示す）とを有してなるパーソナルコンピュータ（ＰＣ）などのコンピュータに、外部ハードウェア装置１０３を接続した構成である。
【００１６】
記憶装置１０２には、ＲＴＬなどで記載されアサーションが埋め込まれている検証対象回路記述１１１と、論理検証を行うための前処理を行うソフトウェアプログラムである前処理プログラム１１２と、後述するハードウェア検証装置に論理検証を実行させるエミュレータ１１３と、検証結果を格納する結果ファイル１１４とが記憶されている。
【００１７】
外部ハードウェア装置１０３には、論理検証のための前処理を施した検証対象回路をプログラマブルな回路（例えば、ＦＰＧＡ）１１６へマッピングするための焼付回路１１５と、ＦＰＧＡ１１６と、検証結果を格納するメモリ１１７とが格納されている。
【００１８】
前処理プログラム１１２をＣＰＵ１０１ａ上で実行し、前処理を施した検証対象回路記述１１１をＦＰＧＡ１１６にマッピングし、エミュレーションを実行することで、後述する半導体集積回路の設計装置を実現する。
【００１９】
図２は、本実施形態に係わる半導体集積回路の設計装置の構成を示す概略図である。図２に示すように、半導体集積回路の設計装置は、アサーション情報抽出部２と、エミュレーション部３とから主に構成されている。
【００２０】
アサーション情報抽出部２は、検証で観測する信号（以下、観測信号と示す）と出力波形をダンプするサイクル数（以下、ダンプサイクル数と示す）を決定し、モジュールＩＯからアサーションの各入力までのロジックを求める。エミュレーション部３は、アサーション情報抽出部２で決定された観測信号の波形を、同じくアサーション情報抽出部２で決定されたダンプサイクル数分、メモリ１１７にダンプする。検証途中でアサーションが期待通りに動作しなかったら（以下、アサーションが期待通りに動作しない、いわゆる違反状態をＦａｉｌと示す）、その時点でのメモリ１１７に格納されている内容を結果ファイル１１４にダンプする。
【００２１】
なお、図１に示す前処理プログラム１１２を実行することにより、アサーション情報抽出部２の各処理が実行される。（すなわち、アサーション情報抽出部２によって、論理検証を行うための前処理が行われる。）また、図１に示すエミュレータ１１３を実行することにより、エミュレーション部３の処理が実行される。
【００２２】
アサーション情報抽出部２は、入力される検証対象回路記述１１１に組み込まれているアサーション記述を抽出して解析を行うアサーション記述解析部２１と、アサーションの各入力まで接続されているＩＯ信号を抽出して解析を行うアサーション入力側ＩＯ解析部２２と、検証結果として得られる波形信号をメモリ１１７に出力して格納するための接続回路を生成する、記憶領域接続回路生成部としての波形ダンプ回路作成部２３とから構成されている。
【００２３】
以下、アサーション情報抽出部２を構成する各要素の具体的な処理内容について、図３から図８の各図を用いて説明する。図３は、検証対象回路の一例を説明するブロック図、図４は、図３に示す検証対象回路の一部を抽出した回路図である。また、図５は、第１の実施形態に係わるアサーション情報抽出部２の処理手順を説明するフローチャートである。また、図６は、アサーション信号マップ４５を説明する図、図７は、ロジックコーン信号マップ４６を説明する図である。更に、図８は、前処理完了時における検証対象回路の一例を説明する図である。
【００２４】
検証対象回路が、例えば図３に示すように、３つのモジュール４１、４２、４３から構成されるシステム４である場合について考える。各モジュール４１、４２、４３にはそれぞれ論理検証のためのアサーションが必要な箇所に組み込まれている。すなわち、モジュール４１には２つのアサーション４４ａ、４４ｂが組み込まれており、モジュール４２にはアサーション４４ｃが組み込まれている。また、モジュール４３には２つのアサーション４４ｄ、４４ｅが組み込まれている。
【００２５】
各モジュール４１、４２、４３は、入力端子から出力端子までの間、複数のレジスタと種々の組み合わせ回路とが所定のロジックに従って接続されている（図４参照）。なお、図４において、矩形の内側に“reg”と表記されている記号はレジスタを示しており、雲形の形状を有する記号は組み合わせ回路を示している。モジュール４１には、例えば
ｎ１  ＆＆  ｎ２  ｜−＞  ＃＃  ［１：２］  ｎ３    …  （１）
に示す記述内容のアサーション４４ａが組み込まれている。
【００２６】
図３、図４に示すような構成の検証対象回路について、図５に示すフローチャートに従って、アサーション情報抽出部２で行われる具体的な処理内容について説明する。まず、アサーション記述解析部２１において、検証対象回路に組み込まれているアサーション記述を抽出する（ステップＳ１）。次に、抽出したアサーション記述から信号名を抽出してアサーション信号マップ４５に書き込む（ステップＳ２）。
【００２７】
ステップＳ１において、アサーション４４ａを抽出した場合、上述の（１）に示すアサーション記述内容より、ステップＳ２ではｎ１、ｎ２、ｎ３の３つの信号が抽出される。アサーション信号マップ４５は、図６に示すように、行方向をアサーション、列方向を信号（アサーションに記述されている信号）とする二次元のテーブルである。上述の一例の場合、図６のテーブルの１行目（アサーション４４ａに対応する行）に、１列目（信号１）にｎ１、２列目（信号２）にｎ２、３列目（信号３）にｎ３がそれぞれ記述される。アサーション記述に書かれている信号名が３つより多い場合は更に列を増やしていき、当該テーブルに信号名をすべて列挙する。また、信号名が２つの場合は、３列目は空欄となる。
【００２８】
次に、ステップＳ２で抽出された信号のうち、アサーション入力信号について、当該アサーションが属するモジュールのIO信号までロジックコーンをバックトレースする。なお、ここでいうロジックコーンとは、アサーション入力からモジュールIOまでの複数のレジスタ間に跨った組み合わせ回路部分を示している。
【００２９】
そして、ロジックコーンをバックトレースすることでたどり着いたIO信号を、図７に示すロジックコーン信号マップ４６に書き込む（ステップS３）。例えば、アサーション４４ａの入力信号はｎ１、ｎ２の２信号である。従って、ステップＳ３では、この２つの信号（ｎ１、ｎ２）についてロジックコーンを作成してバックトレースする。例えばアサーション４４ａの属するモジュール４１の内部回路が図４に示すような回路である場合について考える。図４に示すように、アサーション４４ａに関するロジックコーンｒ１をバックトレースすると、信号ｎ１がたどり着くＩＯ信号はｐ１であり、信号ｎ２がたどり着くＩＯ信号はｐ２、ｐＮであるとする。
【００３０】
ロジックコーン信号マップ４６は、図７に示すように、行方向をアサーションの入力信号、列方向をＩＯ信号とする二次元のテーブルである。ロジックコーン信号マップ４６は、１つのアサーション記述につき１テーブルずつ作成される。上述の一例の場合、アサーション４４ａに関するロジックコーン信号マップ４６は、１行目（アサーション入力信号ｎ１に対応する行）には、１列目（ＩＯ信号１）にｐ１が記述され、以降の列は空欄となる。また、２行目（アサーション入力信号ｎ２に対応する行）には、１列目（ＩＯ信号１）にｐ２が、２列目（ＩＯ信号２）にｐＮがそれぞれ記述される。トレースの結果たどり着くＩＯ信号が３つより多い場合は更に列を増やしていき、当該テーブルに信号名をすべて列挙する。
【００３１】
アサーション信号マップ４５及びロジックコーン信号マップ４６の作成をしていないアサーションが存在する場合（ステップＳ４、Ｎｏ）、ステップＳ１に戻る。例えば図３に示すように、検証対象回路に５つのアサーション４４ａ〜４４ｅが組み込まれている場合、ステップＳ１〜ステップＳ３を５回実行し、５行目まで入力されたアサーション信号マップ４５が１個と、ロジックコーン信号マップ４６が５個作成される。
【００３２】
全てのアサーションについて観測信号の抽出が終了すると（ステップＳ４、Ｙｅｓ）、抽出した観測信号に関する論理検証の波形結果を格納するためのメモリマップを作成する（ステップＳ５）。具体的には、ステップＳ２で抽出されたアサーションに関する観測信号、すなわち、アサーション信号マップ４５に書き込まれている信号の個数と、ロジックコーン信号マップ４６に書き込まれているＩＯ信号に関する観測信号の個数（ロジックコーン信号マップ４６に同じ信号が重複して複数出現する場合は１つと数える）を足した個数分のビット幅を持つメモリ空間を、メモリ１１７に確保する。なお、観測信号（アサーション、ＩＯ信号ともに）は従来と同様に全サイクル分をダンプする。
【００３３】
最後にステップＳ６において、図８に示すように、メモリ１１７内に作成したメモリマップと、検証対象回路における観測信号の抽出点との間を接続する接続回路４７を作成し、アサーション情報抽出部２の処理を終了する。なお、ステップＳ１とステップＳ２の処理はアサーション記述解析部２１で実行され、ステップＳ３の処理はアサーション入力側ＩＯ解析部で実行される。また、ステップＳ５及びステップＳ６の処理は波形ダンプ回路作成部２３で実行される。
【００３４】
上述のようにして前処理の終了した検証対象回路は、コンパイル後に焼付回路１１５を介してＦＰＧＡ１１６などにマッピングされる。その後、エミュレーション部３によって従来と同じようにエミュレーションが行われる。エミュレーション結果として得られた波形はメモリ１１７に形成されたメモリマップに蓄積される。検証のサイクル数が増加して出力波形がメモリ１１７から溢れてしまう場合は、メモリ１１７から結果ファイル１１４に波形をダンプする。エミュレーションの結果Ｆａｉｌがある場合は、当該箇所についての解析を行う。
【００３５】
このようにして得られる検証結果の出力波形を図９に示す。図９は、第１の実施形態に係わる検証結果波形の取得領域を概念的に説明する図である。図９において、縦軸は観測信号を示しており、横軸は検証時間（サイクル）を示している。図９の縦軸は、上から順に、クロック、アサーション４４ａの入力信号に接続されているＩＯ信号に関する観測信号、アサーション４４ａに関する観測信号、アサーション４４ｂに関する各種信号（ＩＯ観測信号、アサーション観測信号）…、のように並んでいる。すなわち、図９の縦軸に表記されている信号は、アサーション記述に書かれている信号と、アサーションの入力信号に関するロジックコーンをバックトレースしたときにたどり着くＩＯ信号のみである。
【００３６】
各信号の出力波形については本図においては具体的な表記を省略しているが、実際のメモリ１１７には、縦軸に並んでいる観測信号の出力波形が全サイクルにわたって格納されている。なお、図９において×印で示すポイントはＦａｉｌが発生したポイントを示している。
【００３７】
このように、本実施形態によれば、半導体集積回路の設計、特に回路の論理検証において、全信号の中から検証に先立ち選択された論理検証に必要な信号のみに関し、波形結果を取得するようにしているので、メモリ１１７などに格納する波形結果のボリュームを低減することができ、ハードウェア資源の使用を抑制することができる。また、アサーション記述から観測信号を抽出したり、抽出したアサーション入力信号からロジックコーンをバックトレースしてたどり着くＩＯ信号をＩＯ観測信号として抽出したりする作業を、前処理プログラム１１２によって自動的に行うため、必要な観測信号を漏れなく登録して波形結果を得ることができる。従って、観測信号の再登録など手戻りなどが生じることがなく、効率よく検証を行うことができる。
【００３８】
（第２の実施形態）
上述した第１の実施形態の半導体集積回路の設計装置では、波形結果を全サイクルで取得しているが、本実施形態においては、Ｆａｉｌの解析に必要なサイクル分のみを取得・ダンプする点が異なっている。すなわち、本実施形態の半導体集積回路の設計装置は、アサーション情報解析部２での処理内容として各観測信号の最大サイクル数が追加される点と、波形結果をメモリ１１７及び結果ファイル１１４にダンプするときのダンプの範囲（サイクル数）とが第１の実施形態と異なる。その他の構成要素は第１の実施形態と構成要素が同じであるので、同じ符号を付して説明は省略する。
【００３９】
本実施形態の半導体集積回路の設計装置におけるアサーション情報解析部２で行われる具体的な処理の内容について、図１０示すフローチャートを用いて説明する。図１０は、第２実施形態に係わるアサーション情報抽出部２の処理手順を説明するフローチャートである。
【００４０】
まず、アサーション記述解析部２１において、検証対象回路に組み込まれているアサーション記述を抽出する（ステップＳ１１）。次に、抽出したアサーション記述から信号名を抽出してアサーション信号マップ４５に書き込む（ステップＳ１２）。次に、ステップＳ１３において、当該アサーションで使用されるサイクル数を算出する。アサーションのサイクル数の算出方法は一般的な方法に従う。すなわち、遅延／繰り返しのそれぞれの最大値、非オーバーラップインプリケーションの数、マルチクロックの数を算出し、その合計値を当該アサーションの所要サイクル数とする。なお、幅を持たせた遅延／繰り返しにて、無限サイクル（記号“＄”）が使用された場合には、とりうる最小値を仮の値として用いる。このようにして算出されたアサーションのサイクル数を、図１１に示すアサーションサイクルマップ４７に書き込む。
【００４１】
図１１は、アサーションサイクルマップ４７を説明する図である。図１１に示すように、アサーションサイクルマップ４７は、行方向をアサーション、列方向をサイクル数とする二次元のテーブルである。一列目には、ステップＳ１３で算出したアサーションのサイクル数を書き込み、二列目には、後述のステップＳ１５で算出するＩＯ信号からアサーションの入力信号までの最大サイクル数を書き込むように構成されている。例えば、上述の（１）の記述のアサーション４４ａの場合、ステップＳ１３においてサイクル数は３と算出される。従って、アサーションサイクルマップ４７の１行目（アサーション４４ａに対応する行）の１列目に“３”と書き込む。
【００４２】
次に、ステップＳ１４に進み、ステップＳ１２で抽出された信号のうちアサーション入力信号について、当該アサーションが属するモジュールのIO信号までロジックコーンをバックトレースする。そして、たどり着いたIO信号をロジックコーン信号マップ４６に書き込む。なお、ステップＳ１４は、図５のフローチャートにおけるステップＳ３と同様である。
【００４３】
続いて、ステップＳ１５において、ステップＳ１４で抽出したＩＯ信号からアサーション入力信号までのサイクル数を算出する。具体的には、ステップＳ１４において、アサーション入力信号からロジックコーンをバックトレースしてＩＯ信号まで到達する間に経由したレジスタの数（もしくはレジスタの数＋１）を、当該アサーション信号から当該ＩＯ信号までの間のサイクル数とする。算出したサイクル数は、図１２に示すロジックコーンサイクルマップ４８に書き込まれる。
【００４４】
図１２は、ロジックコーンサイクルマップ４８を説明する図である。図１２に示すように、ロジックコーンサイクルマップ４８は、行方向をアサーション入力信号、列方向をＩＯ信号とする二次元のテーブルである。例えば、アサーション入力信号ｎ１からロジックコーンをバックトレースしてＩＯ信号ｐ１まで到達する間に１つのレジスタを経由した場合、これらの信号の間のサイクル数は“１”となる。従って、ロジックコーンサイクルマップ４８の１行目（アサーション入力信号ｎ１に対応する行）の１列目（ＩＯ信号ｐ１に対応する列）に“１”と書き込む。
【００４５】
このようにして、当該アサーションに関し、全てのアサーション入力信号の各々について、ロジックコーンをバックトレースしてたどり着くＩＯ信号までのサイクル数を算出し、ロジックコーンサイクルマップ４８に書き込む。従って、１つのアサーション入力信号から複数のＩＯ信号にたどりつく場合、到達するＩＯ信号ごとにサイクル数が算出されることになる。
【００４６】
当該アサーションについてロジックコーンサイクルマップ４８の作成が終了したら、算出されたサイクル数（アサーション入力信号からＩＯ信号の間のサイクル数）のうちの最大値を抽出する。そして、抽出したサイクル数の値を、図１１に示すアサーションサイクルマップ４７のロジックコーンサイクルの行に書き込む。例えば、アサーション４４ａについて、ロジックコーンサイクルマップ４８に書き込まれたサイクル数の最大値が“２”である場合、アサーションサイクルマップ４７の１行目（アサーション４４ａに対応する行）の２列目に“２”と書き込む。
【００４７】
また、ステップＳ１３において、例えば、
ｒｅｑ  ＆  ｂｓｔ  ＃＃［０：＄］  ＄ｒｏｓｅ（ｓｅｌ）    …  （２）
に示す記述内容のアサーションのように、幅を持たせた遅延／繰り返しにて、無限サイクル（記号“＄”）が使用されており、とりうる最小値を仮のアサーションサイクル数とし用いている場合、アサーションサイクル数にロジックコーンサイクル数の最大値あてはめてアサーションサイクルマップ４７の当該箇所を上書きする。（ＩＯからのサイクル数でアサーションが変化しない場合、モジュール外部（他のアサーション部分）に問題があると判断できるため。）
観測信号の抽出及びサイクル数の算出が終了していないアサーションが存在する場合（ステップＳ１６、Ｎｏ）、ステップＳ１１に戻る。例えば図３に示すように、検証対象回路に５つのアサーション４４ａ〜４４ｅが組み込まれている場合、ステップＳ１１〜ステップＳ１５を５回実行し、１行目１列目から５行目２列目まで１０個のサイクル数が入力されたアサーションサイクルマップ４７が１個と、ロジックコーンサイクルマップ４８が５個作成される。
【００４８】
全てのアサーションについて観測信号の抽出及びサイクル数の算出が終了すると（ステップＳ１６、Ｙｅｓ）、抽出した観測信号に関する論理検証の波形結果を格納するためのメモリマップを作成する（ステップＳ１７）。
【００４９】
まず、各アサーションについて、アサーション入力信号から出力信号までの最大サイクル数と、ＩＯ信号からアサーション入力信までの最大サイクル数とを足し合わせる。具体的には、アサーションサイクルマップ４７の各行について、１列目（アサーションサイクル数）の値と２列目（ロジックコーンサイクル数）との値を足し合わせる。得られた値は、すなわち、各アサーションにおけるＦａｉｌ解析に必要サイクル数となる。
【００５０】
次に、各アサーションのＦａｉｌ解析必要サイクル数のうちの最大の値を、メモリ深さ（波形結果をダンプするサイクル数）とする。更に、ステップＳ１２で抽出されたアサーションに関する観測信号、すなわち、アサーション信号マップ４５に書き込まれている信号の個数と、ロジックコーン信号マップ４６に書き込まれているＩＯ信号に関する観測信号の個数（ロジックコーン信号マップ４６に同じ信号が重複して複数出現する場合は１つと数える）を足した数を、メモリのビット幅とする。すなわち、（ビット幅）×（メモリ深さ）の配列を有するメモリ領域をメモリ１１７に確保する。
【００５１】
最後にステップＳ１８において、メモリ１１７内に作成したメモリマップと、検証対象回路における観測信号の抽出点との間を接続する接続回路４７を作成し、アサーション情報抽出部２の処理を終了する。なお、ステップＳ１１からステップＳ１３の処理はアサーション記述解析部２１で実行され、ステップＳ１４及びステップＳ１５の処理はアサーション入力側ＩＯ解析部で実行される。また、ステップＳ１７及びステップＳ１８の処理は波形ダンプ回路作成部２３で実行される。
【００５２】
上述のようにして前処理の終了した検証対象回路は、コンパイル後に焼付回路１１５を介してＦＰＧＡ１１６などにマッピングされる。その後、エミュレーション部３によって従来と同じようにエミュレーションが行われる。エミュレーション結果として得られた波形はメモリ１１７に形成されたメモリマップに蓄積される。
【００５３】
メモリ１１７への書き込みは、実行サイクルに合わせてインデックスを移動し、その時の波形結果を随時書き込んでいく。確保されたメモリ領域の最後の深さ（最後のサイクル）に達した場合、インデックスを１に戻して既にメモリに格納されている波形結果を上書きする。例えば、メモリ深さが“５”である、すなわち、５サイクル分の波形結果が格納できるメモリ領域が形成されている場合、６サイクル目の波形結果は１サイクル目の波形結果が格納されているメモリ領域に上書きして格納される。
【００５４】
検証途中でアサーションがＦａｉｌしたら、その時点でメモリ１１７に格納されている波形結果を結果ファイル１１４にダンプする。このとき、結果ファイル１１４にダンプする波形結果は、最も過去のサイクルの結果から最新のサイクルの結果の順に時系列に波形が並ぶようにする。また、メモリ１１７に格納されている全ての観測信号について、波形結果を結果ファイルに１１４ダンプする。
【００５５】
例えば、メモリ１１７に確保したメモリ領域の深さが“５”であり、検証開始後２１サイクル目にアサーションがＦａｉｌした場合について説明する。この場合、メモリ１１７に確保されているメモリ領域には、２１サイクル目、１７サイクル目、１８サイクル目、１９サイクル目、２０サイクル目、の順に結果が格納されている。従って、２番目の深さのメモリから順に波形結果を結果ファイル１１４にダンプし、５番目の深さのメモリの結果までダンプした後に１番目の深さのメモリの結果をダンプする。このようにダンプを行うことで、結果ファイルには、１７サイクル目から２１サイクル目の波形結果が実行順に時系列に格納されることになり、後に行われるＦａｉｌ解析を効率的に行うことができる。
【００５６】
例えば、結果ファイル１１４がｆｓｄｂファイルである場合、Ｆａｉｌが発生した個数部の結果ファイル１１４が作成される。それぞれの結果ファイル１１４には、Ｆａｉｌが発生した時点における、抽出されている全観測信号に関する波形結果が、メモリ領域の深さ分のサイクル数だけダンプされている。
【００５７】
このように、本実施形態においては、アサーションのＦａｉｌ解析に必要な最大サイクル数を算出し、同サイクル数の波形結果を格納できるだけの領域をメモリ１１７に確保すればよいので、ハードウェア資源の使用を更に抑制することができる。
【００５８】
（変形例）
第２の実施形態の変形例について説明する。上述した第２の実施形態では、アサーションがＦａｉｌする都度、メモリ１１７に格納されている全ての波形結果を結果ファイル１１４にダンプするようにしているが、変形例として、Ｆａｉｌしたアサーションに関する波形結果のみを結果ファイル１１４にダンプするように構成することができる。
【００５９】
例えば、アサーション４４ａがＦａｉｌした場合、アサーション４４ａに関する観測信号（ｎ１、ｎ２、ｎ３、ｐ１、ｐ２、ｐＮ）の波形結果のみをメモリ１１７から結果ファイル１１４へダンプする。このとき、メモリ１１７に格納されているアサーション４４ｂ〜アサーション４４ｅに関する波形結果については、結果ファイル１１４にダンプしない。
【００６０】
また、結果ファイル１１４にダンプするサイクル数は、Ｆａｉｌしたアサーションの解析に必要なサイクル数とする。例えばメモリ１１７に確保したメモリ領域のメモリ深さが“５”であって、アサーション４４ｂのＦａｉｌ解析に必要なサイクル数（アサーションサイクルマップ４７の行に書かれている、アサーションサイクル数とロジックコーンサイクル数とを足した数）が“３”である場合について説明する。
【００６１】
２１サイクル目にアサーション４４ｂがＦａｉｌした場合、メモリ１１７に確保されているメモリ領域には、２１サイクル目、１７サイクル目、１８サイクル目、１９サイクル目、２０サイクル目、の順に結果が格納されている。アサーション４４ｂのＦａｉｌ解析に必要なサイクル数は“３”であるので、１９サイクル目、２０サイクル目、２１サイクル目の波形結果を抽出してメモリ１１７から結果ファイル１１４にダンプする。
【００６２】
このように、Ｆａｉｌしたアサーションに関する観測信号の、Ｆａｉｌ解析に必要なサイクル数分の波形結果のみを抽出してメモリ１１７から結果ファイル１１４にダンプすることで、メモリ１１７から結果ファイル１１４へのデータ転送量を削減することができ、結果ファイル１１４の容量を削減することができる。また、アサーションごとにダンプするサイクル数については、アサーションサイクルマップ４７から取得可能であるので、新たにサイクル数を算出する手順を追加することなく実現可能である。
【００６３】
（別の変形例）
別の変形例として、メモリ１１７から結果ファイル１１４へダンプする波形結果を、アサーションに記述されている観測信号と、ＩＯ信号に関する観測信号とで異なるサイクル数とすることもできる。すなわち、アサーション信号マップ４５に示されているアサーションに記述されている観測信号については、アサーションサイクルマップ４７の一行目（アサーションサイクル）に書き込まれているサイクル数を、メモリ１１７から結果ファイル１１４にダンプする。
【００６４】
また、ロジックコーン信号マップ４６に示されているＩＯ信号の観測信号については、アサーションサイクルマップ４７に書き込まれているアサーションサイクル数とロジックコーンサイクル数とを足したサイクル数を、メモリ１１７から結果ファイル１１４にダンプする。
【００６５】
このようにすることで、アサーションに記述されている観測信号について、メモリ１１７から結果ファイル１１４にダンプするサイクル数を減少させることができるため、メモリ１１７から結果ファイル１１４へのデータ転送量を更に削減することができ、結果ファイル１１４の容量を更に削減することができる。
【００６６】
なお、観測信号の中に非同期ループが存在する場合、当該信号については、当該アサーションの解析に必要な最大サイクル数（アサーションサイクルマップ４７に書き込まれているアサーションサイクル数とロジックコーンサイクル数とを足したサイクル数）だけ、メモリ１１７から結果ファイル１１４に波形結果をダンプする。非同期ループは、図１０のステップＳ１４において、モジュール４１、４２、４３のＩＯからアサーション入口までのロジックのブーリアン解析を実行することによって特定することができる。
【００６７】
更に、ＩＯ信号の観測信号については、ロジックコーンサイクルマップ４８に基づき、個々の観測信号ごとにメモリ１１７から結果ファイル１１４にダンプするサイクル数を変えることも可能である。すなわち、ＩＯ信号の観測信号については、個々に、ステップＳ１５で算出されロジックコーンサイクルマップ４８に書き込まれたＩＯ〜アサーション入力までのサイクル数に、アサーションサイクル数を足して、ダンプサイクル数を求める。
【００６８】
例えば、ＩＯ信号ｐ１からアサーション入力信号ｎ１の間のサイクル数が“１”、ＩＯ信号ｐ２からアサーション入力信号ｎ２の間のサイクル数が“２”アサーション４４ａのアサーションサイクル数が“３”である場合、ＩＯ信号ｐ１のダンプサイクル数は“４”となり、ＩＯ信号ｐ２のダンプサイクル数は“５”となる。すなわち、アサーションがＦａｉｌした場合、ＩＯ信号の観測信号については、上述のように求めた個々のダンプサイクル数に基づきメモリ１１７から結果ファイル１１４に波形信号をダンプすることで、メモリ１１７から結果ファイル１１４へのデータ転送量を更に削減することができ、結果ファイル１１４の容量を更に削減することができる。
【００６９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として例示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７０】
２…アサーション情報抽出部、３…エミュレーション部、２１…アサーション記述解析部、２２…アサーション入力ＩＯ解析部、２３…波形ダンプ回路作成部、１１１…検証対象回路記述、１１４…結果ファイル、１１７…メモリ、
【図１】
2013196187.tif 000003
【図２】
2013196187.tif 000004
【図３】
2013196187.tif 000005
【図４】
2013196187.tif 000006
【図５】
2013196187.tif 000007
【図６】
2013196187.tif 000008
【図７】
2013196187.tif 000009
【図８】
2013196187.tif 000010
【図９】
2013196187.tif 000011
【図１０】
2013196187.tif 000012
【図１１】
2013196187.tif 000013
【図１２】
2013196187.tif 000014