(57)【要約】【課題】シミュレーション対象の回路記述に不具合があっても、シミュレーション動作が異常状態に陥ることを回避することのできるシミュレータを提供する。【解決手段】シミュレータ１は、シミュレーション部１０におけるシミュレーションの実行中に、ビット幅監視部１１が、回路記述データに記述された演算動作のシミュレーション結果のビット幅が回路記述データに記述された演算結果代入変数のビット幅に対してオーバーフローしないかを監視し、ビット幅監視部１１によりオーバーフローの発生が検知されたときに、オーバーフロー回避部１２が、シミュレーション結果を格納する演算結果格納変数のビット幅の動的な拡張を行う。【選択図】図１
2010160622.tif 000002
【特許請求の範囲】
【請求項１】
記述言語により回路が記述された回路記述データのシミュレーションを実行するシミュ
レーション実行手段と、
前記シミュレーション実行手段における前記シミュレーションの実行中に、前記回路記述
データに記述された演算動作のシミュレーション結果のビット幅が、前記回路記述データ
に記述された演算結果代入変数のビット幅に対してオーバーフローしないかを監視するビ
ット幅監視手段と、
前記ビット幅監視手段により前記オーバーフローの発生が検知されたときに、前記シミュ
レーション結果を格納する演算結果格納変数のビット幅の動的な拡張を行うオーバーフロ
ー回避手段と
を備えることを特徴とするシミュレータ。
【請求項２】
記述言語により回路が記述された回路記述データのシミュレーションを実行するシミュ
レーション実行手段と、
前記シミュレーション実行手段における前記シミュレーションの実行中に、前記回路記述
データに記述された配列への代入があった場合、代入される配列のインデックスが、前記
回路記述データに記述された配列サイズに対してオーバーフローしないかを監視する配列
監視手段と、
前記配列監視手段により前記オーバーフローの発生が検知されたときに、前記配列サイズ
の動的な拡張を行う配列インデックスオーバーフロー回避手段と
を備えることを特徴とするシミュレータ。
【請求項３】
記述言語により回路が記述された回路記述データのシミュレーションを実行するシミュ
レーション実行手段と、
前記シミュレーション実行手段における前記シミュレーションの実行中に、前記回路記述
データに記述されたループ演算が、無限ループに陥っていないかを監視する無限ループ監
視手段と、
前記無限ループ監視手段により前記無限ループが検知されたときに、前記ループ演算から
の脱出を前記シミュレーション実行手段へ指示する無限ループ回避手段と
を備えることを特徴とするシミュレータ。
【請求項４】
記述言語により回路が記述された回路記述データのシミュレーションを実行するシミュ
レーション実行手段と、
前記シミュレーション実行手段における前記シミュレーションの実行中に、前記回路記述
データに記述された演算動作のシミュレーション結果のビット幅が、前記回路記述データ
に記述された演算結果代入変数のビット幅に対してオーバーフローしないかを監視するビ
ット幅監視手段と、
前記ビット幅監視手段により前記オーバーフローの発生が検知されたときに、前記シミュ
レーション結果を格納する演算結果格納変数のビット幅の動的な拡張を行うオーバーフロ
ー回避手段と、
前記シミュレーション実行手段における前記シミュレーションの実行中に、前記回路記述
データに記述された配列への代入があった場合、代入される配列のインデックスが、前記
回路記述データに記述された配列サイズに対してオーバーフローしないかを監視する配列
監視手段と、
前記配列監視手段により前記オーバーフローの発生が検知されたときに、前記配列サイズ
の動的な拡張を行う配列インデックスオーバーフロー回避手段と、
前記シミュレーション実行手段における前記シミュレーションの実行中に、前記回路記述
データに記述されたループ演算が、無限ループに陥っていないかを監視する無限ループ監
視手段と、
前記無限ループ監視手段により前記無限ループが検知されたときに、前記ループ演算から
の脱出を前記シミュレーション実行手段へ指示する無限ループ回避手段と、
前記ビット幅監視手段、前記配列監視手段および前記無限ループ監視手段の各監視手段の
うち、外部からの入力により選択された監視手段に対して監視動作の実行を指示する監視
動作選択手段と
を備えることを特徴とするシミュレータ。
【請求項５】
前記ビット幅監視手段、前記配列監視手段および前記無限ループ監視手段により異常が
検出されたときに、前記異常の発生箇所および内容を警告として外部へ出力する警告出力
手段
をさらに備えることを特徴とする請求項４に記載のシミュレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレータに関する。
【背景技術】
【０００２】
ハードウェア記述言語など、レジスタや信号などのビット幅の指定が可能な言語で回路
記述を行い、その回路記述の検証をシミュレーションで行う場合、検証の初期段階では、
回路記述に不具合があることが多く、シミュレータの動作に異常が発生することがある。
例えば、回路記述のビット幅指定に誤りがあり、ビット幅が不足していると、シミュレー
ション演算にオーバーフローが発生し、シミュレータが無限ループの演算に陥ることがあ
る。
【０００３】
そのような場合、一旦シミュレーションを停止し、回路記述の不具合を修正してから再
びシミュレーションを行わなければならない。同様の回路記述の不具合が他にもある場合
、シミュレーションの異常が発生する度に、シミュレーションの停止と回路記述の修正を
繰り返さなければならず、検証作業が非効率的である。
【０００４】
ここでいうシミュレーションの異常とは、演算桁数のオーバーフロー／アンダーフロー
、配列インデックスのオーバーフロー、無限ループなどであり、その原因となる回路記述
の不具合を静的に検知し、シミュレーション実行前に対処することは難しい。
【０００５】
従来技術としては、ビット幅を指定せずにシミュレーションを行った後に、シミュレー
ションの結果から適切なビット幅の指定を自動で行う方法が提案されている（例えば、特
許文献１参照。）。
【０００６】
しかし、上述の提案の方法では、静的にビット幅を決定するため、ループ回数が静的に
決定されない場合は、ループ内のインクリメンタル演算などのビット幅が決定できない。
そのため、シミュレーションの最中にオーバーフローなどの異常が発生する可能性が依然
として残り、その異常状態から脱するため、シミュレーションを停止させなければならな
い、という問題があった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−１９００８５号公報  （第８−９ページ、図２）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
そこで、本発明の目的は、シミュレーション対象の回路記述に不具合があっても、シミ
ュレーション動作が異常状態に陥ることを回避することのできるシミュレータを提供する
ことにある。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、記述言語により回路が記述された回路記述データのシミュレ
ーションを実行するシミュレーション実行手段と、前記シミュレーション実行手段におけ
る前記シミュレーションの実行中に、前記回路記述データに記述された演算動作のシミュ
レーション結果のビット幅が、前記回路記述データに記述された演算結果代入変数のビッ
ト幅に対してオーバーフローしないかを監視するビット幅監視手段と、前記ビット幅監視
手段により前記オーバーフローの発生が検知されたときに、前記シミュレーション結果を
格納する演算結果格納変数のビット幅の動的な拡張を行うオーバーフロー回避手段とを備
えることを特徴とするシミュレータが提供される。
【００１０】
また、本発明の別の一態様によれば、記述言語により回路が記述された回路記述データ
のシミュレーションを実行するシミュレーション実行手段と、前記シミュレーション実行
手段における前記シミュレーションの実行中に、前記回路記述データに記述された配列へ
の代入があった場合、代入される配列のインデックスが、前記回路記述データに記述され
た配列サイズに対してオーバーフローしないかを監視する配列監視手段と、前記配列監視
手段により前記オーバーフローの発生が検知されたときに、前記配列サイズの動的な拡張
を行う配列インデックスオーバーフロー回避手段とを備えることを特徴とするシミュレー
タが提供される。
【００１１】
また、本発明のさらに別の一態様によれば、記述言語により回路が記述された回路記述
データのシミュレーションを実行するシミュレーション実行手段と、前記シミュレーショ
ン実行手段における前記シミュレーションの実行中に、前記回路記述データに記述された
ループ演算が、無限ループに陥っていないかを監視する無限ループ監視手段と、前記無限
ループ監視手段により前記無限ループが検知されたときに、前記ループ演算からの脱出を
前記シミュレーション実行手段へ指示する無限ループ回避手段とを備えることを特徴とす
るシミュレータが提供される。
【００１２】
また、本発明のさらに別の一態様によれば、記述言語により回路が記述された回路記述
データのシミュレーションを実行するシミュレーション実行手段と、前記シミュレーショ
ン実行手段における前記シミュレーションの実行中に、前記回路記述データに記述された
演算動作のシミュレーション結果のビット幅が、前記回路記述データに記述された演算結
果代入変数のビット幅に対してオーバーフローしないかを監視するビット幅監視手段と、
前記ビット幅監視手段により前記オーバーフローの発生が検知されたときに、前記シミュ
レーション結果を格納する演算結果格納変数のビット幅の動的な拡張を行うオーバーフロ
ー回避手段と、前記シミュレーション実行手段における前記シミュレーションの実行中に
、前記回路記述データに記述された配列への代入があった場合、代入される配列のインデ
ックスが、前記回路記述データに記述された配列サイズに対してオーバーフローしないか
を監視する配列監視手段と、前記配列監視手段により前記オーバーフローの発生が検知さ
れたときに、前記配列サイズの動的な拡張を行う配列インデックスオーバーフロー回避手
段と、前記シミュレーション実行手段における前記シミュレーションの実行中に、前記回
路記述データに記述されたループ演算が、無限ループに陥っていないかを監視する無限ル
ープ監視手段と、前記無限ループ監視手段により前記無限ループが検知されたときに、前
記ループ演算からの脱出を前記シミュレーション実行手段へ指示する無限ループ回避手段
と、前記ビット幅監視手段、前記配列監視手段および前記無限ループ監視手段の各監視手
段のうち、外部からの入力により選択された監視手段に対して監視動作の実行を指示する
監視動作選択手段とを備えることを特徴とするシミュレータが提供される。
【発明の効果】
【００１３】
本発明によれば、シミュレーション対象の回路記述に不具合があっても、シミュレーシ
ョン動作が異常状態に陥ることを回避することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施例１に係るシミュレータの構成の例を示すブロック図。
【図２】本発明の実施例のシミュレータを用いた検証環境のハードウェア構成の例を示す図。
【図３】実施例１のシミュレータにおける処理の流れの例を示すフロー図。
【図４】演算結果にオーバーフローが起きる可能性のある回路記述の例。
【図５】実施例１のシミュレータにおけるオーバーフロー回避処理の説明図。
【図６】本発明の実施例２に係るシミュレータの構成の例を示すブロック図。
【図７】実施例２のシミュレータにおける処理の流れの例を示すフロー図。
【図８】配列インデックスオーバーフローが起きる可能性のある回路記述の例。
【図９】本発明の実施例３に係るシミュレータの構成の例を示すブロック図。
【図１０】実施例３のシミュレータにおける処理の流れの例を示すフロー図。
【図１１】無限ループ演算が起きる可能性のある回路記述の例。
【図１２】本発明の実施例４に係るシミュレータの構成の例を示すブロック図。
【図１３】本発明の実施例５に係るシミュレータの構成の例を示すブロック図。
【発明を実施するための形態】
【００１５】
以下、本発明の実施例について図面を参照して説明する。なお、図中、同一または相当
部分には同一の符号を付して、その説明は繰り返さない。
【実施例１】
【００１６】
図１は、本発明の実施例１に係るシミュレータの構成の例を示すブロック図である。
【００１７】
本実施例のシミュレータ１は、記述言語により回路が記述された回路記述データのシミ
ュレーションを実行するシミュレーション実行部１０と、シミュレーション部１０におけ
るシミュレーションの実行中に、回路記述データに記述された演算動作のシミュレーショ
ン結果のビット幅が、回路記述データに記述された演算結果代入変数のビット幅に対して
オーバーフローしないかを監視するビット幅監視部１１と、ビット幅監視部１１によりオ
ーバーフローの発生が検知されたときに、シミュレーション結果を格納する演算結果格納
変数のビット幅の動的な拡張を行うオーバーフロー回避部１２と、を備える。
【００１８】
図２は、本実施例のシミュレータ１を用いた検証環境のハードウェア構成の例を示す図
である。
【００１９】
シミュレータ１を用いた検証環境のハードウェアは、シミュレータ１によるシミュレー
ションを実行するＣＰＵ１００と、キーボードやマウスなどの入力装置２００と、ハード
ディスクやメモリなどの記憶装置３００と、ディスプレイやプリンタなどの出力装置４０
０と、により構成される。
【００２０】
シミュレータ１のシミュレーションをＣＰＵ１００で実行するため、回路記述データは
、シミュレーションに先立ってコンパイルされ、ターゲットプログラムとして記憶装置３
００に記憶されている。
【００２１】
ＣＰＵ１００は、入力装置２００によりシミュレーションの実行コマンドが入力される
と、記憶装置３００からターゲットプログラムをロードし、シミュレータ１のシミュレー
ション実行部１０によるシミュレーションを開始する。
【００２２】
シミュレーション実行部１０は、プログラムカウンタ（ＰＣ）を有し、ＰＣが示す値に
従って命令を実行する。
【００２３】
シミュレータ１のシミュレーション結果は、出力装置４００へ出力され、ディスプレイ
への表示やプリンタへのプリントアウトなどが行われる。
【００２４】
なお、図２に示すハードウェア構成は、本実施例に限らず、後述する各実施例のシミュ
レータに対しても共通に用いられる。
【００２５】
次に、図３〜図５を用いて、本実施例のシミュレータ１が、シミュレーション実行中の
演算のオーバーフローを検知し、回避する処理について説明する。
【００２６】
図３は、本実施例のシミュレータ１における処理の流れの例を示すフロー図であり、図
４は、演算結果にオーバーフローが起きる可能性のある回路記述を、記述言語としてＳｙ
ｓｔｅｍＣを用いて記述した例である。また、図５は、オーバーフローが発生したときの
、本実施における処理の様子を示す図である。
【００２７】
ここで、図４に示す回路記述では、まず、８ビットの変数ｖａｌ１と、４ビットの変数
ｖａｌ２が定義され、その後に、変数ｖａｌ１へ変数ｖａｌ２を加算し、その加算結果を
変数ｖａｌ１へ代入する演算（１）が記述されている。
【００２８】
なお、この例では、ＳｙｓｔｅｍＣによる記述例を示したが、記述言語としては、他の
記述言語を用いてもよい。
【００２９】
図３に示すフロー図において、シミュレーションの実行が開始されると、シミュレーシ
ョン実行部１０は、実行する命令が演算命令かどうかをチェックし（ステップＳ１１）、
演算命令であった場合は（ＹＥＳ）、演算の入力変数をＣＰＵ１００で扱われるビット幅
（例えば、３２ビット）に拡張する（ステップＳ１２）。
【００３０】
このとき、変数が符号なし変数ならば、拡張部分に‘０’をコピーし、変数が符号付き
変数ならば、拡張部分に符号ビットの値をコピーする。
【００３１】
例えば、図４の記述例の（１）の演算では、図５に示すように、ｖａｌ１、ｖａｌ２の
両変数を３２ビットに拡張する。
【００３２】
その後、ＣＰＵ１００による演算が行われ（ステップＳ１３）、その演算結果が出力さ
れると、ビット幅監視部１１は、その演算結果のビット幅を監視し、その演算結果のビッ
ト幅に対して、その演算結果を代入する変数のビット幅が足りるかどうかをチェックする
（ステップＳ１４）。
【００３３】
このとき、符号なし変数の場合は、拡張した部分のビットが総て‘０’ならば代入先の
変数のビット幅は足りると判定し、それ以外ならばオーバーフローと判定する。また、符
号付き変数の場合は、代入される変数の最上位ビット以上のビットが総て同じならばビッ
ト幅は足りると判定し、それ以外ならばオーバーフローと判定する。
【００３４】
ビット幅が足りると判定したとき（ＹＥＳ）、ビット幅監視部１１は、その判定結果を
シミュレーション実行部１０へ伝達する。これにより、シミュレーション実行部１０は、
演算結果を代入する変数のビット幅分を残して演算結果にマスクを掛けた後、演算結果を
代入する変数へ代入する（ステップＳ１５）。
【００３５】
例えば、図４の記述例では、演算結果が代入される変数ｖａｌ１は符号付き変数である
ため、演算結果の７ビット目以上が総て同じならオーバーフローしていないと判定される
。その場合、シミュレーション実行部１０は、変数ｖａｌ１のビット幅分（８ビット）を
残して演算結果にマスクを掛け、その値を変数ｖａｌ１へ代入する。
【００３６】
一方、ステップＳ１４で、ビット幅が不足してオーバーフローが発生すると判定したと
き（ＮＯ）、ビット幅監視部１１は、シミュレーション実行部１０のシミュレーション実
行を一時中断させ、オーバーフロー回避部１２を呼び出す。
【００３７】
この呼び出しを受けて、オーバーフロー回避部１２は、まず、演算結果が代入される変
数の必要ビット幅を決定する（ステップＳ１６）。
【００３８】
このとき、符号なし変数なら最上位の‘１’がある桁まで、符号付き変数なら３２ビッ
ト目と異なる値がある最上位桁＋１桁までが必要なビット幅となる。
【００３９】
次に、必要なビット幅分を残して演算結果にマスクを掛け、演算結果を代入する変数へ
代入する（ステップＳ１７）。
【００４０】
例えば、図４の記述例の変数ｖａｌ１のビット幅が、図５に示す例では、１ビット拡張
され、９ビットに変更される。
【００４１】
その後、オーバーフロー回避部１２は、ターゲットプログラム内の変数ｖａｌ１のビッ
ト幅情報を拡張したものに更新し（ステップＳ１８）、シミュレーション実行部１０のシ
ミュレーション実行を再開させる。これにより、次の参照では、図４の記述例の変数ｖａ
ｌ１は９ビットの変数として扱われる。
【００４２】
以上の処理を、ターゲットプログラムの全命令が終了するまで、繰り返し実行する（ス
テップＳ１９）。
【００４３】
なお、一度オーバーフローを回避した変数でも、再度オーバーフローの可能性があれば
同じ処理を行い、ビット幅を拡張していく。
【００４４】
このような本実施例によれば、シミュレーションの実行中に、演算結果を代入する変数
のオーバーフローを検知でき、その変数のビット幅を動的に拡張することができる。これ
により、演算結果を変数へ代入するときのオーバーフローを回避することができる。
【実施例２】
【００４５】
実施例１では、演算結果を代入する変数のオーバーフローを検知し、回避することので
きるシミュレータの例を示したが、本実施例では、配列インデックスのオーバーフローを
検知し、回避することのできるシミュレータの例を示す。
【００４６】
図６は、本発明の実施例２に係るシミュレータの構成の例を示すブロック図である。
【００４７】
本実施例のシミュレータ２は、実施例１と同様のシミュレーション実行部１０と、シミ
ュレーション実行部１０におけるシミュレーションの実行中に、回路記述データに記述さ
れた配列への代入があった場合、代入される配列のインデックスが、回路記述データに記
述された配列サイズに対してオーバーフローしないかを監視する配列監視部２１と、配列
監視部２１によりオーバーフローの発生が検知されたときに、その配列サイズの動的な拡
張を行う配列インデックスオーバーフロー回避部２２と、を備える。
【００４８】
このシミュレータ２の動作について、図７のフロー図のフローに従って、図８に示した
ＳｙｓｔｅｍＣによる配列の記述を例にとりながら、説明する。
【００４９】
図７に示すフロー図において、シミュレーションの実行開始後、配列監視部２１は、配
列への代入が実行されるかどうかをチェックしている（ステップＳ２１）。
【００５０】
配列への代入があった場合（ＹＥＳ）、配列監視部２１は、さらに、代入される配列の
インデックスが、回路記述で宣言された配列サイズを超えないかどうかをチェックする（
ステップＳ２２）。
【００５１】
例えば、図８の（２）に記述された配列への代入が行われるとき、配列監視部２１は、
インデックスｉｄｘの値が配列ａｒｙのサイズである５０を超えないかどうかをチェック
する。
【００５２】
インデックスが配列サイズを超えないと判定したとき（ＹＥＳ）、配列監視部２１は、
その判定結果をシミュレーション実行部１０へ伝達する。これにより、シミュレーション
実行部１０は、配列のインデックスが示す位置へ値を代入する（ステップＳ２３）。
【００５３】
一方、インデックスが配列サイズを超えると判定したとき（ＮＯ）、配列監視部２１は
、シミュレーション実行部１０にシミュレーションの実行を一時中断させ、配列インデッ
クスオーバーフロー回避部２２を呼び出す。
【００５４】
この呼び出しを受けて、配列インデックスオーバーフロー回避部２２は、まず、オーバ
ーフローしたインデックス分の拡張を行った配列（拡張配列）をメモリのヒープ領域に確
保する（ステップＳ２４）。
【００５５】
例えば、図８の記述例で、インデックスｉｄｘの値が５５になったとすると、配列サイ
ズとしては５６が必要となる。したがって、この場合、８ビット×５６個分のメモリをヒ
ープ領域に確保する。
【００５６】
次に、元の配列の内容を、ヒープ領域に確保した拡張配列にコピーする（ステップＳ２
５）。
【００５７】
続いて、配列の参照先をヒープ領域に確保した拡張配列のアドレスに書き換え、シミュ
レーション実行部１０が、シミュレーション実行中に参照する、配列の参照先を変更する
（ステップＳ２６）。
【００５８】
その後、この拡張配列のインデックスの位置に値の代入を行い（ステップＳ２７）、シ
ミュレーション実行部１０のシミュレーション実行を再開させる。
【００５９】
以上の処理を、ターゲットプログラムの全命令が終了するまで、繰り返し実行する（ス
テップＳ２８）。
【００６０】
なお、一度オーバーフローを回避した配列でも、再度オーバーフローの可能性があれば
同じ処理を行い、配列サイズを拡張していく。
【００６１】
このような本実施例によれば、シミュレーションの実行中に、配列のオーバーフローを
検知でき、その配列のサイズを動的に拡張することができる。これにより、インデックス
の値を配列へ代入するときのオーバーフローを回避することができる。
【実施例３】
【００６２】
本実施例では、無限ループ演算を検知し、回避することのできるシミュレータの例を示
す。
【００６３】
図９は、本発明の実施例３に係るシミュレータの構成の例を示すブロック図である。
【００６４】
本実施例のシミュレータ３は、実施例１と同様のシミュレーション実行部１０と、シミ
ュレーション実行部１０におけるシミュレーションの実行中に、回路記述データに記述さ
れたループ演算が、無限ループに陥っていないかを監視する無限ループ監視部３１と、無
限ループ監視部３１により無限ループが検知されたときに、ループ演算からの脱出をシミ
ュレーション実行部１０へ指示する無限ループ回避部３２と、を備える。
【００６５】
このシミュレータ３の動作について、図１０のフロー図を用いて説明する。
【００６６】
図１０に示すフロー図において、シミュレーションの実行開始後、ループ演算が開始さ
れた場合（ステップＳ３１のＹＥＳ）、シミュレーション実行部１０により、ループ脱出
条件を満たしたかどうかが確認される（ステップＳ３２）。
【００６７】
ループ脱出条件を満たしていれば（ＹＥＳ）、シミュレーション実行部１０は、ＰＣの
値を指定されたループ外の命令アドレスへ更新し、ループ演算から脱出する（ステップＳ
３３）。
【００６８】
一方、ループ脱出条件を満たさない場合（ＮＯ）、無限ループ監視部３１は、ループ回
数をカウントし、そのカウント値（ループ回数）が、設計者によって予め指定された値（
指定回数）に到達したかどうかをチェックする（ステップＳ３４）。
【００６９】
ループ回数が指定回数に達していなければ（ＮＯ）、シミュレーション実行部１０にル
ープ内演算を続行させる（ステップＳ３５）。
【００７０】
一方、ループ回数が指定回数に達した場合（ＹＥＳ）、無限ループ監視部３１は、無限
ループ演算に陥っていると判断し、シミュレーション実行部１０にシミュレーションの実
行を一時中断させ、無限ループ回避部３２を呼び出す。
【００７１】
この呼び出しを受けると、無限ループ回避部３２は、ループ内の命令をキャンセルする
ために、シミュレーション実行部１０のＰＣの値をループ脱出条件が満たされた場合のジ
ャンプ先のアドレスに書き換える（ステップＳ３５）。
【００７２】
その後、シミュレーション実行部１０のシミュレーションを再開させると、シミュレー
ション実行部１０は、無限ループ演算から脱出し、ＰＣで指定されたアドレスの命令を実
行する。
【００７３】
図１１は、無限ループ演算の起きる可能性のある、ＳｙｓｔｅｍＣによる回路記述の例
である。
【００７４】
この例では、（３）に記述されている条件ｃｎｔ＜ｓｉｚｅが満たされている間、（４
）に記述されている演算を行う、ループ演算実行される。すなわち、ループ演算の脱出条
件は、ｃｎｔ≧ｓｉｚｅが満たされることである。ところが、変数の定義において、ｃｎ
ｔが８ビット、ｓｉｚｅが９ビットの変数と定義されているため、いつまでもｃｎｔ＜ｓ
ｉｚｅのままで、脱出条件であるｃｎｔ≧ｓｉｚｅが満たされない可能性がある。
【００７５】
このような場合も、無限ループ監視部３１に、ループ回数の上限を指定しておくことに
より、無限ループ演算に陥ることを回避することができる。
【００７６】
このような本実施例によれば、シミュレーションの実行中に、指定回数以上のループ演
算を検知でき、そのループ演算を強制的に終了させることができる。これにより、実行中
の演算が無限ループ演算に陥ることを回避することができる。
【実施例４】
【００７７】
図１２は、本発明の実施例４に係るシミュレータの構成の例を示すブロック図である。
【００７８】
本実施例のシミュレータ４は、実施例１で示したビット幅監視部１１とオーバーフロー
回避部１２、実施例２で示した配列監視部２１と配列インデックスオーバーフロー回避部
２２、および実施例３で示した無限ループ監視部３１と無限ループ回避部３２を総て備え
、さらに、ビット幅監視部１１、配列監視部２１および無限ループ監視部３２の各監視部
のうち、外部からの入力により選択された監視部に対して監視動作の実行を指示する監視
動作選択部４１を備える。
【００７９】
監視動作選択部４１は、外部からの監視対象選択の指示に従って、ビット幅監視部１１
、配列監視部２１および無限ループ監視部３２へ監視動作の実行を指示する。
【００８０】
すなわち、監視対象として、演算結果代入変数のビット幅オーバーフロー、配列サイズ
のオーバーフロー、無限ループ演算の３つ総てが選択された場合は、総ての監視部へ監視
動作の実行を指示し、いずれか１つの監視対象が選択された場合は、その選択された監視
部にのみ監視動作の実行を指示し、いずれか２つの監視対象が選択された場合は、その選
択された２つの監視部に監視動作の実行を指示する。
【００８１】
このような本実施例によれば、シミュレーションの実行中に、演算結果代入変数のビッ
ト幅オーバーフロー、配列サイズのオーバーフロー、無限ループ演算といったシミュレー
ション動作の異常に遭遇しても、動的にシミュレーション対象に変更を加えることにより
、シミュレーションを途中終了させることなく最後まで実行することができる。これによ
り、１回のシミュレーションで検証できるパスを増加させることができる。
【００８２】
また、回路記述の内容に応じて、例えば、配列を用いてない回路記述に対しては配列サ
イズのオーバーフローの監視を行わないなど、監視対象の選択を行うことができるので、
効率のよい監視を行うことができる。
【実施例５】
【００８３】
図１３は、本発明の実施例５に係るシミュレータの構成の例を示すブロック図である。
【００８４】
本実施例のシミュレータ５は、実施例４のシミュレータ４の構成に加えて、さらに、ビ
ット幅監視部１１、配列監視部２１および無限ループ監視部３２により異常が検出された
ときに、その異常の発生箇所および異常の内容を警告として外部へ出力する警告出力部５
１を備える。
【００８５】
警告出力部５１は、ビット幅監視部１１、配列監視部２１および無限ループ監視部３２
のそれぞれで監視対象の異常が検出されたときに、その異常の発生箇所および異常の内容
を警告として外部へ出力する。
【００８６】
回路設計者は、この警告を表示することにより、回路記述のどこに、どのような問題が
あるのかを知ることができる。
【００８７】
このような本実施例によれば、シミュレーション動作の異常に遭遇した場合に警告を出
力することにより、デバッガを使用したり、回路記述にデバッグ用のコードを埋め込んだ
りしなくても、回路記述の不具合箇所を特定することができる。
【００８８】
また、回路記述の複数の不具合が１回のシミュレーションで検出されるので、回路設計
者は、複数の不具合をまとめて修正することができる。これにより、回路設計者は、従来
のような、回路記述の不具合が見つかるたびにシミュレーションを停止させ、回路記述の
修正を行なうという手間がなくなり、回路記述の検証を効率的に行うことができる。
【符号の説明】
【００８９】
１〜５  シミュレータ
１０  シミュレーション実行部
１１  ビット幅監視部
１２  オーバーフロー回避部
２１  配列幅監視部
２２  配列オーバーフロー回避部
３１  ループ監視部
３２  無限ループ回避部
４１  監視動作選択部
５１  警告出力部
【図１】
2010160622.tif 000003
【図２】
2010160622.tif 000004
【図３】
2010160622.tif 000005
【図４】
2010160622.tif 000006
【図５】
2010160622.tif 000007
【図６】
2010160622.tif 000008
【図７】
2010160622.tif 000009
【図８】
2010160622.tif 000010
【図９】
2010160622.tif 000011
【図１０】
2010160622.tif 000012
【図１１】
2010160622.tif 000013
【図１２】
2010160622.tif 000014
【図１３】
2010160622.tif 000015