JP2004192062A - シミュレーション方法およびエミュレーション方法 - Google Patents
シミュレーション方法およびエミュレーション方法 Download PDFInfo
- Publication number
- JP2004192062A JP2004192062A JP2002355819A JP2002355819A JP2004192062A JP 2004192062 A JP2004192062 A JP 2004192062A JP 2002355819 A JP2002355819 A JP 2002355819A JP 2002355819 A JP2002355819 A JP 2002355819A JP 2004192062 A JP2004192062 A JP 2004192062A
- Authority
- JP
- Japan
- Prior art keywords
- execution
- input
- block
- row
- processing unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
Abstract
【課題】ハードウェア記述言語検証時のソースコードカバレッジ測定において、シミュレーション実行処理が逐次処理である為、機能的に実行されないはずの行が瞬間的に実行され、不当に網羅性の高いカバレッジ結果が出力されるという問題があった。
【解決手段】ハードウェア記述の記述ブロック単位に実行行履歴を記録し、同一時刻に同じ記述ブロックが実行された場合、同一時刻の前回の実行履歴を消去する工程を有し、カバレッジ測定時の誤カウントを防止する。
【選択図】図1
【解決手段】ハードウェア記述の記述ブロック単位に実行行履歴を記録し、同一時刻に同じ記述ブロックが実行された場合、同一時刻の前回の実行履歴を消去する工程を有し、カバレッジ測定時の誤カウントを防止する。
【選択図】図1
Description
【0001】
【発明の属する技術分野】
この発明はシミュレーション方法およびエミュレーション方法に関し、さらに詳しくは、半導体素子設計時のハードウェア記述言語の検証方法に関する。
【0002】
【従来の技術】
近年、半導体素子の大規模化に伴い、半導体素子設計の効率化が重要視されている。このような背景の中、半導体素子の動作をプログラミング言語と同等に表現したハードウェア記述言語を用いて半導体素子を設計している。
【0003】
ハードウェア記述を用いた半導体素子の設計では、設計したハードウェア記述が半導体素子の仕様通りに動作するか検証しなければならない。この検証を行う従来のシミュレーション装置の概略構成を図32に示す。この装置は、シミュレーション実行処理部3と、実行行カウント処理部5とを備える。シミュレーション実行処理部3は、RTL記述1をテストベクタ2に基づいてシミュレーションする。RTL記述1は、半導体素子の機能をハードウェア記述言語で記述したものである。RTLとは、レジスタトランスファーレベルの略で、記述の抽象度の一種である。テストベクタ2は、設計者が半導体素子の仕様に合わせて作成したものである。設計者は、実行処理部3によるシミュレーション結果4が仕様と一致しているか逐一確認しながら、RTL記述1が正しく設計されているか検証する。実行行カウント処理部5は、テストベクタ2の検証網羅性を測定するため、シミュレーション実行処理時のRTL記述1の実行行を逐一カウントし観測したカバレッジ結果6を出力する。設計者は、カバレッジ結果6からRTL記述1の未実行行を特定し、その未実行行が実行されるテストベクタ2を追加し再シミュレーションすることで検証漏れの無い品質の高い半導体素子を設計することができる。
【0004】
【特許文献1】
特許第2699377号公報
【0005】
【発明が解決しようとする課題】
図32に示したシミュレーション装置では、シミュレーション実行処理部3が逐次処理であるため、機能上実行されていない行が瞬間的に実行されてしまい、実行行カウント処理部5において誤カウントが生じ、不当に網羅性の高いカバレッジ結果6が出力されるという問題があった。その様子を図3(a)のRTL記述例と図3(b)のテストベクタ記述例を用いて説明する。
【0006】
図3(a)および(b)はハードウェア記述言語としてVerilog−HDLを用いた例であり、左端の番号は記述の行番号を意味する。図3(a)において、100行および113行のalways文は、定義されている信号が変化する度に実行される構文であり、100行の場合、a,b,cのどれかが変化する度に101〜110行が実行される。このような、ある信号変化に伴って一連の処理を行う記述のかたまりを記述ブロックと定義する。図3(a)の場合、100行から111行および113行から115行の2つの記述ブロックが存在する。
【0007】
時刻0において図3(b)の201行が実行され、aとbに0が代入される。
次にaとbの変化を受けて図3(a)の100行と113行が評価されることになるのが逐次処理なので仮に100行から実行されたとする。この時、a=0,b=0であるがcの値が確定されていないため、outへの代入は行われず、113行に処理が移りc=1が代入される。次にcの変化を受けて再び100行が評価され、101行のcase文によって{a,b,c}={0,0,1}の103行が実行され、outに0が代入される。次に時刻100において、図3(b)の202行が実行され、a=1が代入される。次にaの変化を受け、図3(a)の100行が評価され、101行のcase文によって{a,b,c}={1,0,1}の107行が実行され、outに1が代入される。次に113行に処理が移りc=0が代入される。次にこのcの変化を受け、再び100行が評価され、101行のcase文によって{a,b,c}={1,0,0}の106行が実行され、outに0が代入される。ここまでの処理におけるカバレッジ結果を図33に示す。図33は、図3(a)のRTL記述例の左端にカバレッジ結果として各行の実行回数を示したものである。上述のように逐次実行の度に実行行をカウントする場合には、機能的には実行されていない107行が実行されたことになり、不当に網羅性の高いカバレッジ結果になってしまう。
【0008】
この発明の目的は、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐシミュレーション方法を提供することである。
【0009】
【課題を解決するための手段】
この発明による第1のシミュレーション方法は、記述ブロック単位に実行行を記録し、同一時刻に同じ記述ブロックが実行された場合、同一時刻の前回の実行履歴を消去する工程を有する。
【0010】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐことができる。
【0011】
この発明による第2のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号のトレース結果から実行行を解析する工程を有する。
【0012】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することができる。
【0013】
この発明による第3のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号を単位時間単位にてトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号の単位時間単位のトレース結果から実行行を解析する工程を有する。
【0014】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐとともにオーバーヘッドを軽減することができる。
【0015】
この発明による第4のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をサイクル単位にてトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号のサイクル単位のトレース結果から実行行を解析する工程を有する。
【0016】
上記シミュレーション方法によれば、設計する半導体素子の設計が完全同期設計である場合、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐシミュレーション方法とオーバーヘッドを軽減することができる。
【0017】
この発明の第1のエミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力に対応するハードウェアエミュレーション処理での信号を抽出する工程を有し、記述ブロックの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報を解析する工程を有し、エミュレーション実行処理工程にて、各記述ブロックの入力に対応するハードウェアエミュレーション処理での信号をトレースする工程を有し、前記記述ブロックの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報と前記各記述ブロックの入力信号に対応するハードウェアエミュレーション処理での信号をトレースした結果から実行行を解析する工程を有する。
【0018】
上記エミュレーション方法によれば、ハードウェア記述言語のハードウェアエミュレーションにおけるカバレッジ測定を可能とすることができる。
【0019】
この発明による第2のエミュレーション方法は、ロジックコーン単位にハードウエア記述を分解し、各ロジックコーン単位にそのロジックコーンの入力に対応するハードウェアエミュレーション処理での信号を抽出する工程を有し、ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報を解析する工程を有し、エミュレーション実行処理工程にて、各ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号をトレースする工程を有し、前記ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報と前記ロジックコーンの入力信号に対応するハードウェアエミュレーション処理での信号をトレースした結果から実行行を解析する工程を有する。
【0020】
上記エミュレーション方法によれば、ハードウェア記述言語のハードウェアエミュレーションにおいて、回路の最適化処理を実施した場合におけるカバレッジ測定を可能とする。
【0021】
この発明による第5のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロック内の各行が実行される入力条件を解析する工程を有し、前記入力条件と実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をトレースする工程を有し、前記入力条件と実行行の対応情報と前記記述ブロックの入力信号のトレース結果から、実行行を解析する工程を有する。
【0022】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおいて、入力信号の多い記述ブロックのカバレッジ測定が可能となる。
【0023】
【発明の実施の形態】
以下、この発明の実施の形態を図面を参照して詳しく説明する。なお、図中同一または相当部分には同一の符号を付しその説明は繰り返さない。
【0024】
(第1の実施形態)
第1の実施形態によるシミュレーション装置の構成を図1に示す。このシミュレーション装置は、シミュレーション実行処理部3と、実行行カウント処理部10とを備える。
【0025】
シミュレーション実行処理部3は、RTL記述1をテストベクタ2に基づいてシミュレーションする。RTL記述1は、半導体素子の機能をハードウェア記述言語で記述したものである。RTLとは、レジスタトランスファーレベルの略で、記述の抽象度の一種である。テストベクタ2は、設計者が半導体素子の仕様に合わせて作成したものである。
【0026】
実行行カウント処理部10は、単位時間実行行トレース処理部11と、実行行集計処理部12とを含む。
【0027】
単位時間実行行トレース処理部11は、シミュレーション実行処理部3から実行行情報を受け取り、各記述ブロックについて単位時間ごとに実行行を抽出する。単位時間とは、設計者が指定できる最小時間を意味する。
【0028】
実行行集計処理部12は、単位時間実行行トレース処理部11により抽出された実行行情報に基づいて各行の実行回数をカウントし、シミュレーション実行処理終了後にカバレッジ結果6を出力する。
【0029】
次に、実行行カウント処理部10における処理について図2を参照しつつ説明する。
【0030】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理が開始される(ST101)。以後、シミュレーション実行処理が終了するまで実行行カウントループST102〜ST111が繰り返され、シミュレーション時刻が更新されるまで単位時間実行行トレースループST103〜ST108が繰り返される。
【0031】
ステップST104において、シミュレーション実行処理部3から現在の実行行情報を受け取り、シミュレータの実行行が変化したか調べる。変化していない場合はシミュレーション時刻が更新されるまで再びステップST103のループに戻る。ステップST104において実行行が変化していた場合、現在の実行行が記述ブロックの先頭行か調べる(ST105)。記述ブロックの先頭行である場合、現在の実行行が含まれる記述ブロックのカウントテーブルをクリアする(ST106)。カウントテーブルとは、各記述ブロック単位に単位時間ごとの実行履歴を記憶しておくものである。次に現在の実行行をカウントテーブルに登録する(ST107)。ステップST105において記述ブロックの先頭行ではない場合は、カウントテーブルをクリアせずに、現在の実行行をカウントテーブルに登録する(ST107)。次にシミュレーション時刻が更新されるまで再びステップST103のループに戻る。ここまでのステップST103〜ST108における処理は単位時間実行行トレース処理部11において行われる。
【0032】
シミュレーション時刻が更新された場合、カウントテーブルに登録されている全ての実行行の実行行集計テーブルを+1する(ST109)。この処理は実行行集計処理12において行われる。実行行集計テーブルとは、各行についてその行の実行回数を記録するものである。次にステップST110においてカウントテーブルをクリアする。シミュレーション実行処理が終了するまでステップST102の実行行カウント処理ループに戻り、実行行カウント処理を繰り返す。
【0033】
図3(a)に示すRTL記述1と図3(b)に示すテストベクタ2とに対して実行行カウント処理を行った場合のカバレッジ結果6を図4に示す。
【0034】
以上のように第1の実施形態では、単位時間実行行トレース処理部11により、単位時間単位に機能的に実行された行のみの実行行履歴を抽出するため、誤カウントの無い正確なカバレッジ結果6を得ることができる。
【0035】
(第2の実施形態)
図32に示した従来のシミュレーション装置ではシミュレーションの実行行をトレースする処理を実行行単位で行っているため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じ、シミュレーション速度が低下する。第2の実施形態では、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することを目的とする。
【0036】
第2の実施形態によるシミュレーション装置の構成を図5に示す。このシミュレーション装置は、シミュレーション実行処理部3と、ブロック入力−実行行対応表作成処理部20と、実行行カウント処理部21とを備える。
【0037】
ブロック入力−実行行対応表作成処理部20は、RTL記述1を記述ブロック単位に分解し、各記述ブロックに対してブロックの入力信号の組み合わせと実行行の対応を解析し、そのブロックの入力信号の組み合わせと実行行の対応情報を抽出する。
【0038】
実行行カウント処理部21は、ブロック入力トレース処理部22と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0039】
ブロック入力トレース処理部22は、ブロック入力−実行行対応表作成処理部20により分解された記述ブロックの入力信号の変化毎に入力信号情報をシミュレーション実行処理部3から受け取る。
【0040】
実行行解析処理部23は、ブロック入力トレース処理部22が受け取った入力信号情報と、ブロック入力−実行行対応表作成処理部20が抽出したブロックの入力信号の組み合わせと実行行との対応情報とから実行行を抽出する。
【0041】
実行行集計処理部12は、実行行解析処理部23により抽出された実行行情報を基に各行の実行回数をカウントし、シミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0042】
次に、ブロック入力−実行行対応表作成処理部20で行われる処理について図6を参照しつつ説明する。
【0043】
まず、RTL記述1を読み込む(ST201)。ここでは図3(a)に示したRTL記述が読み込まれるものとする。
【0044】
次に、読み込んだRTL記述1を記述ブロック単位に分割する(ST202)。この処理により、100行から110行までの記述ブロックと113行から115行までの記述ブロックとに分割される(図3(a)参照)。続くステップST203〜ST209のブロック別対応表作成ループにおける処理は、ステップST202で分解された全ての記述ブロックに対して行われる。
【0045】
次に、処理対象の記述ブロックの入力信号を抽出する(ST204)。処理対象の記述ブロックが113〜115行までの記述ブロックの場合、そのブロックの入力信号は、a,b,cになる(図3(a)参照)。次からのステップST205〜ST208のブロック入力パターン生成ループにおける処理は、ステップST204で抽出されたブロックの入力信号の組み合わせ全てに対して行われる。113〜115行までの記述ブロックの場合、{a,b,c}={0,0,0}〜{1,1,1}の8通りの組み合わせに対して処理されることになる。
【0046】
次に、対象組み合わせパターンでの対象記述ブロックの実行行を解析する(ST206)。対象パターンが{a,b,c}={0,0,0}の場合、実行行は100,101,102行となる(図3(a)参照)。
【0047】
次に、ステップST206で得られたブロック入力と実行行の関係をブロック入力−実行行対応表に追加する(ST207)。
【0048】
次に、ブロック入力の組み合わせを変えて、ステップST205〜ST208のループに戻る。全ての組み合わせの処理が終了後、次の記述ブロックに処理を移し、ステップST203〜ST209のループに戻る。
【0049】
以上の処理を図3(a)に示したRTL記述に対して行った場合のブロック入力−実行行対応表を図7に示す。
【0050】
次に、実行行カウント処理部21における実行行カウント処理について図8を参照しつつ説明する。
【0051】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST250)。
【0052】
次に、ブロック入力−実行行対応表作成処理部20で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST251)。
【0053】
次からのステップST252〜ST256の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。
【0054】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST253)。ここまでの処理はブロック入力トレース処理部22において行われる。
【0055】
ステップST253においてトレースポイントが変化していない場合はそのままステップST252のループへ戻る。トレースポイントが変化していた場合は、そのトレースポイントの値とブロック入力−実行行対応表作成処理部20から得られたブロック入力−実行行対応表から実行行を抽出する(ST254)。この処理は実行行解析処理部23において行われる。
【0056】
次に、ステップST254で抽出された全ての実行行の実行行集計テーブルを+1する(ST255)。この処理は実行行集計処理部12において行われる。
次にシミュレーション実行処理が終了するまで、ステップST252の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0057】
図3(a)に示したRTL記述1と図3(b)に示したテストベクタ2とに対して上述の実行行カウント処理を行った場合のカバレッジ結果6は図33に示した従来のカバレッジ結果と同等である。しかし、図32に示した従来のシミュレーション装置ではシミュレーションの実行行をトレースする処理を実行行単位で行ってたのに対し、第2の実施形態ではブロック入力トレース処理22により記述ブロックの入力信号のみをトレースするため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じシミュレーション速度が低下するという問題を解決できる。すなわち、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することができる。
【0058】
(第3の実施形態)
図32に示した従来のシミュレーション装置では、シミュレーション実行処理部3が逐次処理であるため、機能上実行されていない行が瞬間的に実行されてしまい、実行行カウント処理部5において誤カウントが生じ、不当に網羅性の高いカバレッジ結果6が出力されるおそれがある。また、シミュレーションの実行行をトレースする処理を実行行単位で行っているため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じ、シミュレーション速度が低下する。第3の実施形態では、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐとともにオーバーヘッドを軽減することを目的とする。
【0059】
第3の実施形態によるシミュレーション装置の構成を図9に示す。このシミュレーション装置は、シミュレーション実行処理部3と、ブロック入力−実行行対応表作成処理部20と、実行行カウント処理部30とを備える。
【0060】
実行行カウント処理部30は、単位時間ブロック入力トレース処理部31と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0061】
単位時間ブロック入力トレース処理部31は、ブロック入力−実行行対応表作成処理部20により分解された記述ブロックの入力信号の変化を単位時間毎に入力信号情報としてシミュレーション実行処理部3から受け取る。
【0062】
実行行解析処理部23は、単位時間ブロック入力トレース処理部31が受け取った入力信号情報とブロック入力−実行行対応表作成処理部20が抽出したブロックの入力信号の組み合わせと実行行の対応情報から実行行を抽出する。
【0063】
次に、実行行カウント処理部30における処理について図10を参照しつつ説明する。
【0064】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST300)。
【0065】
次に、ブロック入力−実行行対応表作成処理部20で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST301)。
【0066】
続くステップST302〜ST310の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。また、ステップST303〜ST306の単位時間トレース処理ループはシミュレーション時刻が更新されるまで繰り返される。
【0067】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST304)。変化していない場合はそのままステップST303のループに戻る。トレースポイントが変化した場合、変化したトレースポイントが含まれる記述ブロックの単位時間変化テーブルを更新し、ステップST303のループに戻る(ST305)。単位時間変化テーブルとは、単位時間単位で各記述ブロックの入力信号の値を記憶するためのものである。
【0068】
シミュレーション時刻が更新された場合、各記述ブロックの単位時間変化テーブルが更新されたか調べる(ST307)。ここまでの処理は単位時間ブロック入力トレース処理部31において行われる。
【0069】
ステップST307において単位時間変化テーブル更新されていない場合は、ステップST302のループに戻る。単位時間変化テーブルが更新さた場合は、その更新された単位時間変化テーブルの値とブロック入力−実行行対応表作成処理部20から得られたブロック入力−実行行対応表から実行行を抽出する(ST308)。この処理は実行行解析処理部23において行われる。
【0070】
次に、ステップST308で抽出された全ての実行行の実行行集計テーブルを+1する(ST309)。この処理は実行行集計処理部12において行われる。
以後、シミュレーション実行処理が終了するまでステップST302の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0071】
図3(a)に示したRTL記述と図3(b)に示したテストベクタとに対して上述の実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0072】
以上のように第3の実施形態では、単位時間ブロック入力トレース処理部31により、単位時間単位に機能的に変化した記述ブロックの入力信号情報のみを抽出するため、誤カウントの無い正確なカバレッジ結果6を得ることができる。また、単位時間ブロック入力トレース処理部31により記述ブロックの入力信号のみをトレースするため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じシミュレーション速度が低下するという問題を解決できる。すなわち、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することができる。
【0073】
(第4の実施形態)
図32に示した従来のシミュレーション装置では、シミュレーション実行処理部3が逐次処理であるため、機能上実行されていない行が瞬間的に実行されてしまい、実行行カウント処理部5において誤カウントが生じ、不当に網羅性の高いカバレッジ結果6が出力されるおそれがある。また、シミュレーションの実行行をトレースする処理を実行行単位で行っているため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じ、シミュレーション速度が低下する。第4の実施形態では、設計する半導体素子の設計が完全同期設計である場合に、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐとともにオーバーヘッドを軽減することを目的とする。
【0074】
第4の実施形態によるシミュレーション装置の構成を図11に示す。このシミュレーション装置は、シミュレーション実行処理部3と、ブロック入力−実行行対応表作成処理部20と、実行行カウント処理部40とを備える。
【0075】
実行行カウント処理部40は、サイクル単位ブロック入力トレース処理部41と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0076】
サイクル単位ブロック入力トレース処理部41は、ブロック入力−実行行対応表作成処理部20により分解された記述ブロックの入力信号の変化をサイクル時間毎に入力信号情報としてシミュレーション実行処理部3から受け取る。
【0077】
実行行解析処理部23は、サイクル単位ブロック入力トレース処理部41が受け取った入力信号情報と、ブロック入力−実行行対応表作成処理部20が抽出したブロックの入力信号の組み合わせと実行行の対応情報から実行行を抽出する。
【0078】
次に、実行行カウント処理部40における処理について図12を参照しつつ説明する。
【0079】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST400)。
【0080】
次に、ブロック入力−実行行対応表作成処理部20で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST401)。
【0081】
次からのステップST402〜ST410の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。また、ステップST403〜ST406の単位時間トレース処理ループはシミュレーション時刻が次のサイクルに更新されるまで繰り返される。
【0082】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST404)。変化していない場合はそのままステップST403のループに戻る。トレースポイントが変化した場合は、変化したトレースポイントが含まれる記述ブロックのサイクル単位変化テーブルを更新し、ステップST403のループに戻る(ST405)。サイクル単位変化テーブルとは、サイクル単位で各記述ブロックの入力信号の値を記憶するためのものである。
【0083】
シミュレーション時刻が次のサイクルに更新された場合、各記述ブロックのサイクル単位変化テーブルが更新されたか調べる(ST407)。ここまでの処理はサイクル単位ブロック入力トレース処理部41において行われる。
【0084】
ステップST407においてサイクル単位変化テーブル更新されていない場合は、ステップST402のループに戻る。サイクル単位変化テーブルが更新さた場合は、その更新されたサイクル単位変化テーブルの値とブロック入力−実行行対応表作成処理部20から得られたブロック入力−実行行対応表から実行行を抽出する(ST408)。この処理は実行行解析処理部23において行われる。
【0085】
次に、ステップST408で抽出された全ての実行行の実行行集計テーブルを+1する(ST409)。この処理は実行行集計処理12において行われる。以後、シミュレーション実行処理が終了するまでステップST402の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0086】
図3(a)に示したRTL記述と図3(b)に示したテストベクタとに対して上述の実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0087】
以上のように第4の実施形態では、サイクル単位ブロック入力トレース処理部41により、サイクル単位に機能的に変化した記述ブロックの入力信号情報のみを抽出するため、誤カウントの無い正確なカバレッジ結果6を得ることができる。また、サイクル単位ブロック入力トレース処理部41により記述ブロックの入力信号のみをトレースするため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じシミュレーション速度が低下するという問題を解決できる。また、実行行解析処理部23と実行行集計処理部12がサイクル単位でのみ実行となることから、第3の実施形態のシミュレーション方法と比べ、さらに処理速度を向上させることができる。
【0088】
(第5の実施形態)
ハードウェア記述を用いた半導体素子の設計では、設計したハードウェア記述が半導体素子の仕様通りに動作するか検証するため、ソフトウェアベースのシミュレータの代わりにハードウェアエミュレータを用いる場合がある。ハードウェアエミュレータはソフトウェアベースのシミュレータと比べ、1万倍以上高速に検証することができる。次にハードウェアエミュレータの概要について説明する。ハードウェアエミュレータでは、検証対象のRTL記述を論理構成処理によりゲートレベルのデータに変換し、それをFPGA等の実際のハードウェアに置き換えることで高速にRTL記述の動作をエミュレートすることができる。図3(a)に示したRTL記述の場合、図13に示すゲートレベルネットリストに置き換えられることになる。図13のゲートレベルネットリストにおいて、I1〜I5はインスタンス名であり、個々の回路素子に付けられた固有の名称である。W1〜W7は回路素子間を繋ぐノードに対して付けられた固有の名称である。しかしながら、エミュレーション処理では行実行という概念が全く無いことから、カバレッジを測定することができなかった。
【0089】
第5の実施形態では、ハードウェア記述言語のハードウェアエミュレーションにおけるカバレッジ測定を可能とすることを目的とする。
【0090】
第5の実施形態によるエミュレーション装置の構成を図14に示す。このエミュレーション装置は、論理合成部51と、エミュレーション実行処理部54と、ゲートレベルブロック入力−実行行対応表作成処理部55と、実行行カウント処理部56とを備える。
【0091】
論理合成部51は、RTL記述1をハードウェアに置き換える為にゲートレベルネットリスト52に変換する。図3(a)に示したRTL記述の場合、図13のゲートレベルネットリストに変換される。また、ゲートレベルネットリスト変換時、RTL記述1とゲートレベルネットリスト52の対応を取るためのRTL−Gate対応情報53を出力する。図3(a)に示したRTL記述の場合のRTL−Gate対応情報を図15に示す。
【0092】
エミュレーション実行処理部54は、第1〜第4の実施形態におけるシミュレーション実行処理部3に相当する機能を有する。
【0093】
ゲートレベルブロック入力−実行行対応表作成処理部55は、RTL記述1を記述ブロック単位に分解し、各記述ブロックに対してRTL−Gate対応情報53を用いて、エミュレーション実行処理部54でのブロックの入力信号の組み合わせと実行行の対応を解析し、そのエミュレーション実行処理部54でのブロックの入力信号の組み合わせと実行行の対応情報を抽出する。
【0094】
実行行カウント処理部56は、ゲートレベルブロック入力トレース処理部57と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0095】
ゲートレベルブロック入力トレース処理部57は、ゲートレベルブロック入力−実行行対応表作成処理部55により分解された記述ブロックのエミュレーション実行処理部54での入力信号の変化情報をエミュレーション実行処理部54から受け取る。
【0096】
実行行解析処理部23は、ゲートレベルブロック入力トレース処理部57が受け取った入力信号情報と、ゲートレベルブロック入力−実行行対応表作成処理部55が抽出したエミュレーション実行処理部54でのブロックの入力信号の組み合わせと実行行との対応情報とから実行行を抽出する。
【0097】
実行行集計処理部12は、実行行解析処理部23より抽出した実行行情報を基に各行の実行回数をカウントし、エミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0098】
次に、ゲートレベルブロック入力−実行行対応表作成処理部55における処理について図16を参照しつつ説明する。
【0099】
まずRTL記述1を読み込む(ST501)。ここでは図3(a)に示したRTL記述が読み込まれるものとする。
【0100】
次に、RTL−Gate対応情報53を読み込む(ST502)。
【0101】
次に、ステップST501で読み込んだRTL記述を記述ブロック単位に分割する(ST503)。この処理により、100行から110行までの記述ブロックと113行から115行までの記述ブロックとに分割される(図3(a)参照)。続くステップST504〜ST511のブロック別対応表作成ループにおける処理は、ステップST503で分解された全ての記述ブロックに対して行われる。
【0102】
次に、処理対象の記述ブロックの入力信号を抽出する(ST505)。処理対象の記述ブロックが113行から115行までの記述ブロックの場合、そのブロックの入力信号は、a,b,cになる(図3(a)参照)。
【0103】
次に、ステップST505で抽出されたブロックの入力信号に対応するエミュレーション実行処理部54での信号を抽出する(ST506)。これ以降、ブロックの入力信号に対応するエミュレーション実行処理部54での信号のことを「ゲートレベルブロック入力」と呼ぶ。次からのステップST507〜ST510のブロック入力パターン生成ループにおける処理は、ステップST505で抽出されたブロックの入力信号の組み合わせ全てに対して行われる。113行から115行までの記述ブロックの場合、{a,b,c}={W1,W2,W4}={0,0,0}〜{1,1,1}の8通りの組み合わせに対して処理されることになる(図3(a)および図15参照)。
【0104】
次に、対象組み合わせパターンでの対象記述ブロックの実行行を解析する(ST508)。対象パターンが{a,b,c}={W1,W2,W4}={0,0,0}の場合、実行行は100,101,102行となる。
【0105】
次に、ステップST508で得られたブロック入力と実行行の関係をゲートレベルブロック入力−実行行対応表に追加する(ST509)。
【0106】
次に、ブロック入力の組み合わせを変えて、ステップST507〜ST510のループに戻る。全ての組み合わせの処理が終了後、次の記述ブロックに処理を移し、ステップST504〜ST511のループに戻る。
【0107】
以上の処理を図3(a)に示したRTL記述に対して行った場合のゲートレベルブロック入力−実行行対応表を図17に示す。
【0108】
次に、実行行カウント処理部56における処理について図18を参照しつつ説明する。
【0109】
エミュレーション実行処理部54によるエミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST550)。
【0110】
次に、ゲートレベルブロック入力−実行行対応表作成処理部55で得られた各ブロックのゲートレベルブロック入力をエミュレーション実行処理におけるトレースポイントとして登録する(ST551)。次からのステップST552〜ST556の実行行カウント処理ループはエミュレーション実行処理が終了するまで実行される。
【0111】
次に、エミュレーション実行処理においてトレースポイントが変化したか調べる(ST553)。ここまでの処理はゲートレベルブロック入力トレース処理部57において行われる。
【0112】
ステップST553においてトレースポイントが変化していない場合はそのままステップST552のループに戻る。変化した場合は、その変化したトレースポイントの値とゲートレベルブロック入力−実行行対応表作成処理部55から得られたゲートレベルブロック入力−実行行対応表から実行行を抽出する(ST554)。この処理は実行行解析処理部23において行われる。
【0113】
次に、ステップST554で抽出された全ての実行行の実行行集計テーブルを+1する(ST555)。この処理は実行行集計処理12において行われる。
【0114】
これ以降、エミュレーション実行処理が終了するまでステップST552の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0115】
図3(a)に示したRTL記述と図3(b)に示したテストベクタに対して実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0116】
以上のように第5の実施形態では、ゲートレベルブロック入力−実行行対応表作成処理部55から得られたゲートレベルブロック入力−実行行対応表とエミュレーション実行処理部54のブロック入力に対応する信号をトレースする処理により、RTL記述1の実行行を推定することができ、従来のエミュレーション方法では測定できなかったカバレッジ観測を実現することができる。また、エミュレーション実行処理はソフトウエアシミュレーション処理と異なり逐次処理では無いため、誤カウントの無い正確なカバレッジ結果6を得ることができる。
【0117】
(第6の実施形態)
図14に示したエミュレーション装置において、論理合成処理部51はRTL記述1をゲートレベルネットリスト52に変換する。この際、ハードウェアに置き換える回路素子を少なくするため論理の最適化を行う場合がある。図3(a)に示したRTL記述に対して最適化処理を行った場合のゲートレベルネットリストを図19に示す。この処理を行うことによりエミュレーション実行処理の対応回路規模を増加させることができ、エミュレーション処理速度も高速に行うことができる。しかしながら最適化処理を行うと、RTL記述1の記述ブロックの入力に対応するゲートレベルブロック入力が最適化処理により削除され、第5の実施形態で説明したエミュレーション方法を適用できない問題が生じる。第6の実施形態では、ハードウェア記述言語のハードウェアエミュレーションにおいて回路の最適化処理を実施した場合におけるカバレッジ測定を可能とすることを目的とする。
【0118】
第6の実施形態によるエミュレーション装置の構成を図20に示す。このエミュレーション装置は、論理合成部51と、エミュレーション実行処理部54と、ロジックコーン入力−実行行対応表作成処理部61と、実行行カウント処理部62とを備える。
【0119】
論理合成処理部51は、RTL記述1をゲートレベルネットリスト52に変換する際、ゲートレベルネットリスト52の各ロジックコーンの入力に対応するRTL記述の信号情報(ロジックコーンRTL−Gate対応情報)60を出力する。ロジックコーンとは、論理回路をフリップフロップなどの記憶素子と組み合わせ回路に分割した際、各記憶素子の入力または回路の出力端子を起点として、その起点に影響を与える組み合わせ回路を意味する。図3(a)に示したRTL記述に対して論理合成処理を行った際のロジックコーンRTL−Gate対応情報60を図21に示す。
【0120】
ロジックコーン入力−実行行対応表作成処理部61は、ロジックコーンRTL−Gate対応情報60を用いて、RTL記述1をロジックコーン単位に分解し、各ロジックコーン単位にエミュレーション実行処理部54でのロジックコーン入力信号の組み合わせとRTL記述1の実行行の対応情報を抽出する。
【0121】
実行行カウント処理部62は、ロジックコーン入力トレース処理部63と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0122】
ロジックコーン入力トレース処理部63は、エミュレーション実行処理部54でのロジックコーン入力の変化情報をエミュレーション実行処理部54から受け取る。
【0123】
実行行解析処理部23は、ロジックコーン入力トレース処理部63が受け取った入力信号情報と、ロジックコーン入力−実行行対応表作成処理部61が抽出したエミュレーション実行処理部54でのロジックコーンの入力信号の組み合わせと実行行との対応情報とから実行行を抽出する。
【0124】
実行行集計処理部12は、実行行解析処理部23より抽出した実行行情報を基に各行の実行回数をカウントし、エミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0125】
次に、ロジックコーン入力−実行行対応表作成処理部61における処理について図22を参照しつつ説明する。
【0126】
まずRTL記述1を読み込む(ST601)。ここでは図3(a)に示したRTL記述を読み込むものとする。
【0127】
次に、ロジックコーンRTL−Gate対応情報60を読み込む(ST602)。
【0128】
次に、ステップST601で読み込んだRTL記述1をロジックコーン単位に分割する(ST603)。図3(a)のRTL記述1の場合、100行から115行全てが1つのロジックコーンに相当する。
【0129】
次からのステップST604〜ST611のロジックコーン別対応表作成ループにおける処理は、ステップST603で分解された全てのロジックコーンに対して行われる。
【0130】
次に、処理対象のロジックコーンの入力信号を抽出する(ST605)。図3(a)のRTL記述1の場合、ロジックコーンの入力信号は、a,bになる。
【0131】
次に、ステップST605で抽出されたロジックコーンの入力信号に対応するエミュレーション実行処理部54での信号を抽出する(ST606)。これ以降、ロジックコーン入力信号に対応するエミュレーション実行処理部54での信号のことを「ゲートレベルロジックコーン入力」と呼ぶ。
【0132】
次からのステップST607〜ST610のロジックコーン入力パターン生成ループにおける処理は、ステップST605で抽出されたロジックコーンの入力信号の組み合わせ全てに対して行われる。図3(a)のRTL記述1の場合、{a,b}={W1,W2}={0,0}〜{1,1}の4通りの組み合わせに対して処理されることになる。
【0133】
次に、対象組み合わせパターンでの対象ロジックコーンの実行行を解析する(ST608)。対象パターンが{a,b}={W1,W2}={0,0}の場合、実行行は100,101,102,113,114行となる。
【0134】
次に、ステップST608で得られたゲートレベルロジックコーン入力と実行行の関係をロジックコーン入力−実行行対応表に追加する(ST609)。
【0135】
次に、ロジックコーンの入力の組み合わせを変えて、ステップST607〜ST610のループに戻る。全ての組み合わせの処理が終了後、次のロジックコーンに処理を移し、ステップST604〜ST611のループに戻る。以上の処理を図3(a)のRTL記述1に対して行った場合のロジックコーン入力−実行行対応表を図23に示す。
【0136】
次に、実行行カウント処理部62における処理について図24を参照しつつ説明する。
【0137】
エミュレーション実行処理開始と同時に実行行カウント処理を開始する(ST650)。
【0138】
次に、ロジックコーン入力−実行行対応表作成処理部61で得られた各ロジックコーンのゲートレベルロジックコーン入力をエミュレーション実行処理におけるトレースポイントとして登録する(ST651)。
【0139】
次からのステップST652〜ST656の実行行カウント処理ループはエミュレーション実行処理が終了するまで実行される。
【0140】
次に、エミュレーション実行処理においてトレースポイントが変化したか調べる(ST653)。ここまでの処理はロジックコーン入力トレース処理63において行われる。
【0141】
ステップST653においてトレースポイントが変化していない場合はそのままステップST652のループに戻る。変化した場合は、その変化したトレースポイントの値とロジックコーン入力−実行行対応表作成処理部61から得られたロジックコーン入力−実行行対応表から実行行を抽出する(ST654)。この処理は実行行解析処理部23において行われる。
【0142】
次に、ステップST654で抽出された全ての実行行の実行行集計テーブルを+1する(ST655)。この処理は実行行集計処理部12において行われる。
【0143】
これ以降、エミュレーション実行処理が終了するまでステップST652の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0144】
図3(a)のRTL記述1と図3(b)のテストベクタとに対して実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0145】
以上のように第6の実施形態では、ロジックコーンの入力は、論理合成処理部51による最適化処理を実行した場合でも必ずゲートレベルネットリスト52に存在するため、論理合成処理部51による最適化処理を実行した場合でもカバレッジを測定することができる。したがって、カバレッジを測定する場合でも最適化処理を実行でき、第5の実施形態のエミュレーション方法と比べ、大規模回路に対応することができる。また、エミュレーション処理速度も向上させることができる。
【0146】
(第7の実施形態)
第2〜第4の実施形態によるシミュレーション装置では、ブロック入力−実行行対応表作成処理部20は記述ブロック単位の各入力信号をbit単位で扱うため、記述ブロックの入力信号の数が多くなるとその入力信号全ての組み合わせが膨大な数になり処理できなくなるおそれがある。第7の実施形態では、ハードウェア記述言語のシミュレーションにおいて、入力信号の多い記述ブロックのカバレッジ測定を可能にすることを目的とする。
【0147】
第7の実施形態によるシミュレーション装置の構成を図25に示す。このシミュレーション装置は、シミュレーション実行処理部3と、条件別ブロック入力−実行行対応表作成処理部70と、実行行カウント処理部71とを備える。
【0148】
条件別ブロック入力−実行行対応表作成処理部70は、RTL記述1を記述ブロック単位に分解し、各記述ブロックに対してブロックの入力信号の条件と実行行の対応を解析し、そのブロックの入力信号の条件と実行行の対応情報を抽出する。第2〜第4の実施形態におけるブロック入力−実行行対応表作成処理部20ではそのブロックの入力をビット単位で扱っていたのに対し、条件別ブロック入力−実行行対応表作成処理部70では各行の実行条件を解析し、ブロックの入力をその条件単位で扱う点が異なる。
【0149】
実行行カウント処理部71は、ブロック入力トレース処理部22と、条件別実行行解析処理部72と、実行行集計処理部12とを含む。
【0150】
ブロック入力トレース処理部22は、条件別ブロック入力−実行行対応表作成処理部70により分解された記述ブロックの入力信号の変化毎に入力信号情報をシミュレーション実行処理部3から受け取る。
【0151】
条件別実行行解析処理部72は、ブロック入力トレース処理部22が受け取った入力信号情報と、条件別ブロック入力−実行行対応表作成処理部70が抽出したブロックの入力条件と実行行の対応情報とから実行行を抽出する。
【0152】
実行行集計処理部12は、実行行解析処理部23により抽出された実行行情報を基に各行の実行回数をカウントし、シミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0153】
次に、条件別ブロック入力−実行行対応表作成処理部70における処理について図26を参照しつつ説明する。
【0154】
まずRTL記述1を読みこむ(ST701)。ここでは図27に示すRTL記述1を読み込むものとする。
【0155】
次に、読みこんだRTL記述1を記述ブロック単位に分割する(ST702)。この処理により、300行から304行までの記述ブロックと306行から308行までの記述ブロックとに分割される(図27参照)。
【0156】
次からのステップST703〜ST710のブロック別対応表作成ループにおける処理は、ステップST702で分解された全ての記述ブロックに対して行われる。また、ステップST704〜ST709の実行条件解析ループは、処理対象の記述ブロックの各行に対して解析が終了するまで繰り返される。
【0157】
次に、処理対象行の実行条件を解析する(ST705)。
【0158】
次に、ステップST705で抽出した実行条件が、条件別ブロック入力−実行行対応表に存在するか調べる(ST706)。存在する場合は、条件別ブロック入力−実行行対応表の同条件に現在の処理対象行を実行行として追加する(ST707)。ステップST706において条件別ブロック入力−実行行対応表に存在しない場合は、条件別ブロック入力−実行行対応表に実行条件と実行行を追加する(ST708)。
【0159】
すべての記述ブロック内の行に対して処理を終了した後(ST709)、次の記述ブロックに対象ブロックを移し(ST710)、ブロック別対応表作成ループST703に戻る。
【0160】
以上の処理を図27のRTL記述1に対して行った場合の条件別ブロック入力−実行行対応表を図28に示す。
【0161】
次に、実行行カウント処理部71における処理について図29を参照しつつ説明する。
【0162】
シミュレーション実行処理開始と同時に実行行カウント処理を開始する(ST750)。
【0163】
次に、条件別ブロック入力−実行行対応表作成処理部70で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST751)。
【0164】
次からのステップST752〜ST756の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。
【0165】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST753)。ここまでの処理はブロック入力トレース処理部22において行われる。
【0166】
ステップST753においてトレースポイントが変化していない場合はそのままステップST752のループへ戻る。トレースポイントが変化していた場合は、そのトレースポイントの値と条件別ブロック入力−実行行対応表作成処理部70から得られた条件別ブロック入力−実行行対応表から該当条件の実行行を抽出する(ST754)。この処理は条件別実行行解析処理部72において行われる。
【0167】
次に、ステップST754で抽出された全ての実行行の実行行集計テーブルを+1する(ST755)。この処理は実行行集計処理12において行われる。
【0168】
これ以降、シミュレーション実行処理が終了するまで、ステップST752の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0169】
図28に示したRTL記述1と図30に示すテストベクタ2とに対して実行行カウント処理を行った場合のカバレッジ結果6を図31に示す。
【0170】
第7の実施形態ではカバレッジの誤カウントを防止する処理を実施していない。したがってカバレッジ結果(図31)は誤カウントの含まれる結果となっている。しかしながら、第3〜第4の実施形態において説明したカバレッジの誤カウントを防止する処理を適用すれば誤カウントの無い正確なカバレッジ結果を得ることができる。
【0171】
第2〜第4の実施形態では記述ブロック入力と実行行の対応をbit単位で扱っているのに対し、第7の実施形態では条件別ブロック入力実行行対応表作成処理部70が記述ブロックの各行の実行条件単位で入力条件と実行行の対応をとるため、入力信号の多い記述ブロックに対してカバレッジ測定が可能となる。
【0172】
【発明の効果】
この発明によるシミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐことができる。
【図面の簡単な説明】
【図1】第1の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図2】図1に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図3】(a)はRTL記述の一例を示す図であり、(b)はテストベクタの一例を示す図である。
【図4】カバレッジ結果を示す図である。
【図5】第2の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図6】図5に示したブロック入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図7】ブロック入力−実行行対応表の一例を示す図である。
【図8】図5に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図9】第3の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図10】図9に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図11】第4の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図12】図11に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図13】ゲートレベルネットリストの一例を示す図である。
【図14】第5の実施形態によるエミュレーション装置の構成を示すブロック図である。
【図15】RTL−Gate対応情報の一例を示す図である。
【図16】図14に示したゲートレベルブロック入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図17】ゲートレベルブロック入力−実行行対応表の一例を示す図である。
【図18】図14に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図19】ゲートレベルネットリストの一例を示す図である。
【図20】第6の実施形態によるエミュレーション装置の構成を示すブロック図である。
【図21】ロジックコーンRTL−Gate対応情報の一例を示す図である。
【図22】図20に示したロジックコーン入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図23】ロジックコーン入力−実行行対応表の一例を示す図である。
【図24】図20に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図25】第7の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図26】図25に示した条件別ブロック入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図27】RTL記述の一例を示す図である。
【図28】条件別ブロック入力−実行行対応表の一例を示す図である。
【図29】図25に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図30】テストベクタの一例を示す図である。
【図31】カバレッジ結果を示す図である。
【図32】従来のシミュレーション装置の構成を示すブロック図である。
【図33】カバレッジ結果を示す図である。
【符号の説明】
1 RTL記述、2 テストベクタ、3 シミュレーション実行処理部、4 シミュレーション結果、5,10,21,30,40,56,62,71 実行行カウント処理部、6 カバレッジ結果、11 単位時間実行行トレース処理部、12 実行行集計処理部、20 ブロック入力−実行行対応表作成処理部、22ブロック入力トレース処理部、23 実行行解析処理部、31 単位時間ブロック入力トレース処理部、41 サイクル単位ブロック入力トレース処理部、51 論理合成処理部、52 ゲートレベルネットリスト、53 RTL−Gate対応情報、54 エミュレーション実行処理部、55 ゲートレベルブロック入力−実行行対応表作成処理部、57 ゲートレベルブロック入力トレース処理部、60 ロジックコーンRTL−Gate対応情報、61 ロジックコーン入力−実行行対応表作成処理部、63 ロジックコーン入力トレース処理部、70条件別ブロック入力−実行行対応表作成処理部、72 条件別実行行解析処理部。
【発明の属する技術分野】
この発明はシミュレーション方法およびエミュレーション方法に関し、さらに詳しくは、半導体素子設計時のハードウェア記述言語の検証方法に関する。
【0002】
【従来の技術】
近年、半導体素子の大規模化に伴い、半導体素子設計の効率化が重要視されている。このような背景の中、半導体素子の動作をプログラミング言語と同等に表現したハードウェア記述言語を用いて半導体素子を設計している。
【0003】
ハードウェア記述を用いた半導体素子の設計では、設計したハードウェア記述が半導体素子の仕様通りに動作するか検証しなければならない。この検証を行う従来のシミュレーション装置の概略構成を図32に示す。この装置は、シミュレーション実行処理部3と、実行行カウント処理部5とを備える。シミュレーション実行処理部3は、RTL記述1をテストベクタ2に基づいてシミュレーションする。RTL記述1は、半導体素子の機能をハードウェア記述言語で記述したものである。RTLとは、レジスタトランスファーレベルの略で、記述の抽象度の一種である。テストベクタ2は、設計者が半導体素子の仕様に合わせて作成したものである。設計者は、実行処理部3によるシミュレーション結果4が仕様と一致しているか逐一確認しながら、RTL記述1が正しく設計されているか検証する。実行行カウント処理部5は、テストベクタ2の検証網羅性を測定するため、シミュレーション実行処理時のRTL記述1の実行行を逐一カウントし観測したカバレッジ結果6を出力する。設計者は、カバレッジ結果6からRTL記述1の未実行行を特定し、その未実行行が実行されるテストベクタ2を追加し再シミュレーションすることで検証漏れの無い品質の高い半導体素子を設計することができる。
【0004】
【特許文献1】
特許第2699377号公報
【0005】
【発明が解決しようとする課題】
図32に示したシミュレーション装置では、シミュレーション実行処理部3が逐次処理であるため、機能上実行されていない行が瞬間的に実行されてしまい、実行行カウント処理部5において誤カウントが生じ、不当に網羅性の高いカバレッジ結果6が出力されるという問題があった。その様子を図3(a)のRTL記述例と図3(b)のテストベクタ記述例を用いて説明する。
【0006】
図3(a)および(b)はハードウェア記述言語としてVerilog−HDLを用いた例であり、左端の番号は記述の行番号を意味する。図3(a)において、100行および113行のalways文は、定義されている信号が変化する度に実行される構文であり、100行の場合、a,b,cのどれかが変化する度に101〜110行が実行される。このような、ある信号変化に伴って一連の処理を行う記述のかたまりを記述ブロックと定義する。図3(a)の場合、100行から111行および113行から115行の2つの記述ブロックが存在する。
【0007】
時刻0において図3(b)の201行が実行され、aとbに0が代入される。
次にaとbの変化を受けて図3(a)の100行と113行が評価されることになるのが逐次処理なので仮に100行から実行されたとする。この時、a=0,b=0であるがcの値が確定されていないため、outへの代入は行われず、113行に処理が移りc=1が代入される。次にcの変化を受けて再び100行が評価され、101行のcase文によって{a,b,c}={0,0,1}の103行が実行され、outに0が代入される。次に時刻100において、図3(b)の202行が実行され、a=1が代入される。次にaの変化を受け、図3(a)の100行が評価され、101行のcase文によって{a,b,c}={1,0,1}の107行が実行され、outに1が代入される。次に113行に処理が移りc=0が代入される。次にこのcの変化を受け、再び100行が評価され、101行のcase文によって{a,b,c}={1,0,0}の106行が実行され、outに0が代入される。ここまでの処理におけるカバレッジ結果を図33に示す。図33は、図3(a)のRTL記述例の左端にカバレッジ結果として各行の実行回数を示したものである。上述のように逐次実行の度に実行行をカウントする場合には、機能的には実行されていない107行が実行されたことになり、不当に網羅性の高いカバレッジ結果になってしまう。
【0008】
この発明の目的は、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐシミュレーション方法を提供することである。
【0009】
【課題を解決するための手段】
この発明による第1のシミュレーション方法は、記述ブロック単位に実行行を記録し、同一時刻に同じ記述ブロックが実行された場合、同一時刻の前回の実行履歴を消去する工程を有する。
【0010】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐことができる。
【0011】
この発明による第2のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号のトレース結果から実行行を解析する工程を有する。
【0012】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することができる。
【0013】
この発明による第3のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号を単位時間単位にてトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号の単位時間単位のトレース結果から実行行を解析する工程を有する。
【0014】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐとともにオーバーヘッドを軽減することができる。
【0015】
この発明による第4のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をサイクル単位にてトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号のサイクル単位のトレース結果から実行行を解析する工程を有する。
【0016】
上記シミュレーション方法によれば、設計する半導体素子の設計が完全同期設計である場合、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐシミュレーション方法とオーバーヘッドを軽減することができる。
【0017】
この発明の第1のエミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロックの入力に対応するハードウェアエミュレーション処理での信号を抽出する工程を有し、記述ブロックの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報を解析する工程を有し、エミュレーション実行処理工程にて、各記述ブロックの入力に対応するハードウェアエミュレーション処理での信号をトレースする工程を有し、前記記述ブロックの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報と前記各記述ブロックの入力信号に対応するハードウェアエミュレーション処理での信号をトレースした結果から実行行を解析する工程を有する。
【0018】
上記エミュレーション方法によれば、ハードウェア記述言語のハードウェアエミュレーションにおけるカバレッジ測定を可能とすることができる。
【0019】
この発明による第2のエミュレーション方法は、ロジックコーン単位にハードウエア記述を分解し、各ロジックコーン単位にそのロジックコーンの入力に対応するハードウェアエミュレーション処理での信号を抽出する工程を有し、ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報を解析する工程を有し、エミュレーション実行処理工程にて、各ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号をトレースする工程を有し、前記ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報と前記ロジックコーンの入力信号に対応するハードウェアエミュレーション処理での信号をトレースした結果から実行行を解析する工程を有する。
【0020】
上記エミュレーション方法によれば、ハードウェア記述言語のハードウェアエミュレーションにおいて、回路の最適化処理を実施した場合におけるカバレッジ測定を可能とする。
【0021】
この発明による第5のシミュレーション方法は、記述ブロック単位にハードウエア記述を分解し、各記述ブロック単位にその記述ブロック内の各行が実行される入力条件を解析する工程を有し、前記入力条件と実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をトレースする工程を有し、前記入力条件と実行行の対応情報と前記記述ブロックの入力信号のトレース結果から、実行行を解析する工程を有する。
【0022】
上記シミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおいて、入力信号の多い記述ブロックのカバレッジ測定が可能となる。
【0023】
【発明の実施の形態】
以下、この発明の実施の形態を図面を参照して詳しく説明する。なお、図中同一または相当部分には同一の符号を付しその説明は繰り返さない。
【0024】
(第1の実施形態)
第1の実施形態によるシミュレーション装置の構成を図1に示す。このシミュレーション装置は、シミュレーション実行処理部3と、実行行カウント処理部10とを備える。
【0025】
シミュレーション実行処理部3は、RTL記述1をテストベクタ2に基づいてシミュレーションする。RTL記述1は、半導体素子の機能をハードウェア記述言語で記述したものである。RTLとは、レジスタトランスファーレベルの略で、記述の抽象度の一種である。テストベクタ2は、設計者が半導体素子の仕様に合わせて作成したものである。
【0026】
実行行カウント処理部10は、単位時間実行行トレース処理部11と、実行行集計処理部12とを含む。
【0027】
単位時間実行行トレース処理部11は、シミュレーション実行処理部3から実行行情報を受け取り、各記述ブロックについて単位時間ごとに実行行を抽出する。単位時間とは、設計者が指定できる最小時間を意味する。
【0028】
実行行集計処理部12は、単位時間実行行トレース処理部11により抽出された実行行情報に基づいて各行の実行回数をカウントし、シミュレーション実行処理終了後にカバレッジ結果6を出力する。
【0029】
次に、実行行カウント処理部10における処理について図2を参照しつつ説明する。
【0030】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理が開始される(ST101)。以後、シミュレーション実行処理が終了するまで実行行カウントループST102〜ST111が繰り返され、シミュレーション時刻が更新されるまで単位時間実行行トレースループST103〜ST108が繰り返される。
【0031】
ステップST104において、シミュレーション実行処理部3から現在の実行行情報を受け取り、シミュレータの実行行が変化したか調べる。変化していない場合はシミュレーション時刻が更新されるまで再びステップST103のループに戻る。ステップST104において実行行が変化していた場合、現在の実行行が記述ブロックの先頭行か調べる(ST105)。記述ブロックの先頭行である場合、現在の実行行が含まれる記述ブロックのカウントテーブルをクリアする(ST106)。カウントテーブルとは、各記述ブロック単位に単位時間ごとの実行履歴を記憶しておくものである。次に現在の実行行をカウントテーブルに登録する(ST107)。ステップST105において記述ブロックの先頭行ではない場合は、カウントテーブルをクリアせずに、現在の実行行をカウントテーブルに登録する(ST107)。次にシミュレーション時刻が更新されるまで再びステップST103のループに戻る。ここまでのステップST103〜ST108における処理は単位時間実行行トレース処理部11において行われる。
【0032】
シミュレーション時刻が更新された場合、カウントテーブルに登録されている全ての実行行の実行行集計テーブルを+1する(ST109)。この処理は実行行集計処理12において行われる。実行行集計テーブルとは、各行についてその行の実行回数を記録するものである。次にステップST110においてカウントテーブルをクリアする。シミュレーション実行処理が終了するまでステップST102の実行行カウント処理ループに戻り、実行行カウント処理を繰り返す。
【0033】
図3(a)に示すRTL記述1と図3(b)に示すテストベクタ2とに対して実行行カウント処理を行った場合のカバレッジ結果6を図4に示す。
【0034】
以上のように第1の実施形態では、単位時間実行行トレース処理部11により、単位時間単位に機能的に実行された行のみの実行行履歴を抽出するため、誤カウントの無い正確なカバレッジ結果6を得ることができる。
【0035】
(第2の実施形態)
図32に示した従来のシミュレーション装置ではシミュレーションの実行行をトレースする処理を実行行単位で行っているため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じ、シミュレーション速度が低下する。第2の実施形態では、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することを目的とする。
【0036】
第2の実施形態によるシミュレーション装置の構成を図5に示す。このシミュレーション装置は、シミュレーション実行処理部3と、ブロック入力−実行行対応表作成処理部20と、実行行カウント処理部21とを備える。
【0037】
ブロック入力−実行行対応表作成処理部20は、RTL記述1を記述ブロック単位に分解し、各記述ブロックに対してブロックの入力信号の組み合わせと実行行の対応を解析し、そのブロックの入力信号の組み合わせと実行行の対応情報を抽出する。
【0038】
実行行カウント処理部21は、ブロック入力トレース処理部22と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0039】
ブロック入力トレース処理部22は、ブロック入力−実行行対応表作成処理部20により分解された記述ブロックの入力信号の変化毎に入力信号情報をシミュレーション実行処理部3から受け取る。
【0040】
実行行解析処理部23は、ブロック入力トレース処理部22が受け取った入力信号情報と、ブロック入力−実行行対応表作成処理部20が抽出したブロックの入力信号の組み合わせと実行行との対応情報とから実行行を抽出する。
【0041】
実行行集計処理部12は、実行行解析処理部23により抽出された実行行情報を基に各行の実行回数をカウントし、シミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0042】
次に、ブロック入力−実行行対応表作成処理部20で行われる処理について図6を参照しつつ説明する。
【0043】
まず、RTL記述1を読み込む(ST201)。ここでは図3(a)に示したRTL記述が読み込まれるものとする。
【0044】
次に、読み込んだRTL記述1を記述ブロック単位に分割する(ST202)。この処理により、100行から110行までの記述ブロックと113行から115行までの記述ブロックとに分割される(図3(a)参照)。続くステップST203〜ST209のブロック別対応表作成ループにおける処理は、ステップST202で分解された全ての記述ブロックに対して行われる。
【0045】
次に、処理対象の記述ブロックの入力信号を抽出する(ST204)。処理対象の記述ブロックが113〜115行までの記述ブロックの場合、そのブロックの入力信号は、a,b,cになる(図3(a)参照)。次からのステップST205〜ST208のブロック入力パターン生成ループにおける処理は、ステップST204で抽出されたブロックの入力信号の組み合わせ全てに対して行われる。113〜115行までの記述ブロックの場合、{a,b,c}={0,0,0}〜{1,1,1}の8通りの組み合わせに対して処理されることになる。
【0046】
次に、対象組み合わせパターンでの対象記述ブロックの実行行を解析する(ST206)。対象パターンが{a,b,c}={0,0,0}の場合、実行行は100,101,102行となる(図3(a)参照)。
【0047】
次に、ステップST206で得られたブロック入力と実行行の関係をブロック入力−実行行対応表に追加する(ST207)。
【0048】
次に、ブロック入力の組み合わせを変えて、ステップST205〜ST208のループに戻る。全ての組み合わせの処理が終了後、次の記述ブロックに処理を移し、ステップST203〜ST209のループに戻る。
【0049】
以上の処理を図3(a)に示したRTL記述に対して行った場合のブロック入力−実行行対応表を図7に示す。
【0050】
次に、実行行カウント処理部21における実行行カウント処理について図8を参照しつつ説明する。
【0051】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST250)。
【0052】
次に、ブロック入力−実行行対応表作成処理部20で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST251)。
【0053】
次からのステップST252〜ST256の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。
【0054】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST253)。ここまでの処理はブロック入力トレース処理部22において行われる。
【0055】
ステップST253においてトレースポイントが変化していない場合はそのままステップST252のループへ戻る。トレースポイントが変化していた場合は、そのトレースポイントの値とブロック入力−実行行対応表作成処理部20から得られたブロック入力−実行行対応表から実行行を抽出する(ST254)。この処理は実行行解析処理部23において行われる。
【0056】
次に、ステップST254で抽出された全ての実行行の実行行集計テーブルを+1する(ST255)。この処理は実行行集計処理部12において行われる。
次にシミュレーション実行処理が終了するまで、ステップST252の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0057】
図3(a)に示したRTL記述1と図3(b)に示したテストベクタ2とに対して上述の実行行カウント処理を行った場合のカバレッジ結果6は図33に示した従来のカバレッジ結果と同等である。しかし、図32に示した従来のシミュレーション装置ではシミュレーションの実行行をトレースする処理を実行行単位で行ってたのに対し、第2の実施形態ではブロック入力トレース処理22により記述ブロックの入力信号のみをトレースするため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じシミュレーション速度が低下するという問題を解決できる。すなわち、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することができる。
【0058】
(第3の実施形態)
図32に示した従来のシミュレーション装置では、シミュレーション実行処理部3が逐次処理であるため、機能上実行されていない行が瞬間的に実行されてしまい、実行行カウント処理部5において誤カウントが生じ、不当に網羅性の高いカバレッジ結果6が出力されるおそれがある。また、シミュレーションの実行行をトレースする処理を実行行単位で行っているため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じ、シミュレーション速度が低下する。第3の実施形態では、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐとともにオーバーヘッドを軽減することを目的とする。
【0059】
第3の実施形態によるシミュレーション装置の構成を図9に示す。このシミュレーション装置は、シミュレーション実行処理部3と、ブロック入力−実行行対応表作成処理部20と、実行行カウント処理部30とを備える。
【0060】
実行行カウント処理部30は、単位時間ブロック入力トレース処理部31と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0061】
単位時間ブロック入力トレース処理部31は、ブロック入力−実行行対応表作成処理部20により分解された記述ブロックの入力信号の変化を単位時間毎に入力信号情報としてシミュレーション実行処理部3から受け取る。
【0062】
実行行解析処理部23は、単位時間ブロック入力トレース処理部31が受け取った入力信号情報とブロック入力−実行行対応表作成処理部20が抽出したブロックの入力信号の組み合わせと実行行の対応情報から実行行を抽出する。
【0063】
次に、実行行カウント処理部30における処理について図10を参照しつつ説明する。
【0064】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST300)。
【0065】
次に、ブロック入力−実行行対応表作成処理部20で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST301)。
【0066】
続くステップST302〜ST310の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。また、ステップST303〜ST306の単位時間トレース処理ループはシミュレーション時刻が更新されるまで繰り返される。
【0067】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST304)。変化していない場合はそのままステップST303のループに戻る。トレースポイントが変化した場合、変化したトレースポイントが含まれる記述ブロックの単位時間変化テーブルを更新し、ステップST303のループに戻る(ST305)。単位時間変化テーブルとは、単位時間単位で各記述ブロックの入力信号の値を記憶するためのものである。
【0068】
シミュレーション時刻が更新された場合、各記述ブロックの単位時間変化テーブルが更新されたか調べる(ST307)。ここまでの処理は単位時間ブロック入力トレース処理部31において行われる。
【0069】
ステップST307において単位時間変化テーブル更新されていない場合は、ステップST302のループに戻る。単位時間変化テーブルが更新さた場合は、その更新された単位時間変化テーブルの値とブロック入力−実行行対応表作成処理部20から得られたブロック入力−実行行対応表から実行行を抽出する(ST308)。この処理は実行行解析処理部23において行われる。
【0070】
次に、ステップST308で抽出された全ての実行行の実行行集計テーブルを+1する(ST309)。この処理は実行行集計処理部12において行われる。
以後、シミュレーション実行処理が終了するまでステップST302の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0071】
図3(a)に示したRTL記述と図3(b)に示したテストベクタとに対して上述の実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0072】
以上のように第3の実施形態では、単位時間ブロック入力トレース処理部31により、単位時間単位に機能的に変化した記述ブロックの入力信号情報のみを抽出するため、誤カウントの無い正確なカバレッジ結果6を得ることができる。また、単位時間ブロック入力トレース処理部31により記述ブロックの入力信号のみをトレースするため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じシミュレーション速度が低下するという問題を解決できる。すなわち、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定のオーバーヘッドを軽減することができる。
【0073】
(第4の実施形態)
図32に示した従来のシミュレーション装置では、シミュレーション実行処理部3が逐次処理であるため、機能上実行されていない行が瞬間的に実行されてしまい、実行行カウント処理部5において誤カウントが生じ、不当に網羅性の高いカバレッジ結果6が出力されるおそれがある。また、シミュレーションの実行行をトレースする処理を実行行単位で行っているため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じ、シミュレーション速度が低下する。第4の実施形態では、設計する半導体素子の設計が完全同期設計である場合に、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐとともにオーバーヘッドを軽減することを目的とする。
【0074】
第4の実施形態によるシミュレーション装置の構成を図11に示す。このシミュレーション装置は、シミュレーション実行処理部3と、ブロック入力−実行行対応表作成処理部20と、実行行カウント処理部40とを備える。
【0075】
実行行カウント処理部40は、サイクル単位ブロック入力トレース処理部41と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0076】
サイクル単位ブロック入力トレース処理部41は、ブロック入力−実行行対応表作成処理部20により分解された記述ブロックの入力信号の変化をサイクル時間毎に入力信号情報としてシミュレーション実行処理部3から受け取る。
【0077】
実行行解析処理部23は、サイクル単位ブロック入力トレース処理部41が受け取った入力信号情報と、ブロック入力−実行行対応表作成処理部20が抽出したブロックの入力信号の組み合わせと実行行の対応情報から実行行を抽出する。
【0078】
次に、実行行カウント処理部40における処理について図12を参照しつつ説明する。
【0079】
シミュレーション実行処理部3によるシミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST400)。
【0080】
次に、ブロック入力−実行行対応表作成処理部20で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST401)。
【0081】
次からのステップST402〜ST410の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。また、ステップST403〜ST406の単位時間トレース処理ループはシミュレーション時刻が次のサイクルに更新されるまで繰り返される。
【0082】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST404)。変化していない場合はそのままステップST403のループに戻る。トレースポイントが変化した場合は、変化したトレースポイントが含まれる記述ブロックのサイクル単位変化テーブルを更新し、ステップST403のループに戻る(ST405)。サイクル単位変化テーブルとは、サイクル単位で各記述ブロックの入力信号の値を記憶するためのものである。
【0083】
シミュレーション時刻が次のサイクルに更新された場合、各記述ブロックのサイクル単位変化テーブルが更新されたか調べる(ST407)。ここまでの処理はサイクル単位ブロック入力トレース処理部41において行われる。
【0084】
ステップST407においてサイクル単位変化テーブル更新されていない場合は、ステップST402のループに戻る。サイクル単位変化テーブルが更新さた場合は、その更新されたサイクル単位変化テーブルの値とブロック入力−実行行対応表作成処理部20から得られたブロック入力−実行行対応表から実行行を抽出する(ST408)。この処理は実行行解析処理部23において行われる。
【0085】
次に、ステップST408で抽出された全ての実行行の実行行集計テーブルを+1する(ST409)。この処理は実行行集計処理12において行われる。以後、シミュレーション実行処理が終了するまでステップST402の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0086】
図3(a)に示したRTL記述と図3(b)に示したテストベクタとに対して上述の実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0087】
以上のように第4の実施形態では、サイクル単位ブロック入力トレース処理部41により、サイクル単位に機能的に変化した記述ブロックの入力信号情報のみを抽出するため、誤カウントの無い正確なカバレッジ結果6を得ることができる。また、サイクル単位ブロック入力トレース処理部41により記述ブロックの入力信号のみをトレースするため、実行行が更新される度にシミュレーション処理に対してオーバーヘッドが生じシミュレーション速度が低下するという問題を解決できる。また、実行行解析処理部23と実行行集計処理部12がサイクル単位でのみ実行となることから、第3の実施形態のシミュレーション方法と比べ、さらに処理速度を向上させることができる。
【0088】
(第5の実施形態)
ハードウェア記述を用いた半導体素子の設計では、設計したハードウェア記述が半導体素子の仕様通りに動作するか検証するため、ソフトウェアベースのシミュレータの代わりにハードウェアエミュレータを用いる場合がある。ハードウェアエミュレータはソフトウェアベースのシミュレータと比べ、1万倍以上高速に検証することができる。次にハードウェアエミュレータの概要について説明する。ハードウェアエミュレータでは、検証対象のRTL記述を論理構成処理によりゲートレベルのデータに変換し、それをFPGA等の実際のハードウェアに置き換えることで高速にRTL記述の動作をエミュレートすることができる。図3(a)に示したRTL記述の場合、図13に示すゲートレベルネットリストに置き換えられることになる。図13のゲートレベルネットリストにおいて、I1〜I5はインスタンス名であり、個々の回路素子に付けられた固有の名称である。W1〜W7は回路素子間を繋ぐノードに対して付けられた固有の名称である。しかしながら、エミュレーション処理では行実行という概念が全く無いことから、カバレッジを測定することができなかった。
【0089】
第5の実施形態では、ハードウェア記述言語のハードウェアエミュレーションにおけるカバレッジ測定を可能とすることを目的とする。
【0090】
第5の実施形態によるエミュレーション装置の構成を図14に示す。このエミュレーション装置は、論理合成部51と、エミュレーション実行処理部54と、ゲートレベルブロック入力−実行行対応表作成処理部55と、実行行カウント処理部56とを備える。
【0091】
論理合成部51は、RTL記述1をハードウェアに置き換える為にゲートレベルネットリスト52に変換する。図3(a)に示したRTL記述の場合、図13のゲートレベルネットリストに変換される。また、ゲートレベルネットリスト変換時、RTL記述1とゲートレベルネットリスト52の対応を取るためのRTL−Gate対応情報53を出力する。図3(a)に示したRTL記述の場合のRTL−Gate対応情報を図15に示す。
【0092】
エミュレーション実行処理部54は、第1〜第4の実施形態におけるシミュレーション実行処理部3に相当する機能を有する。
【0093】
ゲートレベルブロック入力−実行行対応表作成処理部55は、RTL記述1を記述ブロック単位に分解し、各記述ブロックに対してRTL−Gate対応情報53を用いて、エミュレーション実行処理部54でのブロックの入力信号の組み合わせと実行行の対応を解析し、そのエミュレーション実行処理部54でのブロックの入力信号の組み合わせと実行行の対応情報を抽出する。
【0094】
実行行カウント処理部56は、ゲートレベルブロック入力トレース処理部57と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0095】
ゲートレベルブロック入力トレース処理部57は、ゲートレベルブロック入力−実行行対応表作成処理部55により分解された記述ブロックのエミュレーション実行処理部54での入力信号の変化情報をエミュレーション実行処理部54から受け取る。
【0096】
実行行解析処理部23は、ゲートレベルブロック入力トレース処理部57が受け取った入力信号情報と、ゲートレベルブロック入力−実行行対応表作成処理部55が抽出したエミュレーション実行処理部54でのブロックの入力信号の組み合わせと実行行との対応情報とから実行行を抽出する。
【0097】
実行行集計処理部12は、実行行解析処理部23より抽出した実行行情報を基に各行の実行回数をカウントし、エミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0098】
次に、ゲートレベルブロック入力−実行行対応表作成処理部55における処理について図16を参照しつつ説明する。
【0099】
まずRTL記述1を読み込む(ST501)。ここでは図3(a)に示したRTL記述が読み込まれるものとする。
【0100】
次に、RTL−Gate対応情報53を読み込む(ST502)。
【0101】
次に、ステップST501で読み込んだRTL記述を記述ブロック単位に分割する(ST503)。この処理により、100行から110行までの記述ブロックと113行から115行までの記述ブロックとに分割される(図3(a)参照)。続くステップST504〜ST511のブロック別対応表作成ループにおける処理は、ステップST503で分解された全ての記述ブロックに対して行われる。
【0102】
次に、処理対象の記述ブロックの入力信号を抽出する(ST505)。処理対象の記述ブロックが113行から115行までの記述ブロックの場合、そのブロックの入力信号は、a,b,cになる(図3(a)参照)。
【0103】
次に、ステップST505で抽出されたブロックの入力信号に対応するエミュレーション実行処理部54での信号を抽出する(ST506)。これ以降、ブロックの入力信号に対応するエミュレーション実行処理部54での信号のことを「ゲートレベルブロック入力」と呼ぶ。次からのステップST507〜ST510のブロック入力パターン生成ループにおける処理は、ステップST505で抽出されたブロックの入力信号の組み合わせ全てに対して行われる。113行から115行までの記述ブロックの場合、{a,b,c}={W1,W2,W4}={0,0,0}〜{1,1,1}の8通りの組み合わせに対して処理されることになる(図3(a)および図15参照)。
【0104】
次に、対象組み合わせパターンでの対象記述ブロックの実行行を解析する(ST508)。対象パターンが{a,b,c}={W1,W2,W4}={0,0,0}の場合、実行行は100,101,102行となる。
【0105】
次に、ステップST508で得られたブロック入力と実行行の関係をゲートレベルブロック入力−実行行対応表に追加する(ST509)。
【0106】
次に、ブロック入力の組み合わせを変えて、ステップST507〜ST510のループに戻る。全ての組み合わせの処理が終了後、次の記述ブロックに処理を移し、ステップST504〜ST511のループに戻る。
【0107】
以上の処理を図3(a)に示したRTL記述に対して行った場合のゲートレベルブロック入力−実行行対応表を図17に示す。
【0108】
次に、実行行カウント処理部56における処理について図18を参照しつつ説明する。
【0109】
エミュレーション実行処理部54によるエミュレーション実行処理の開始と同時に実行行カウント処理を開始する(ST550)。
【0110】
次に、ゲートレベルブロック入力−実行行対応表作成処理部55で得られた各ブロックのゲートレベルブロック入力をエミュレーション実行処理におけるトレースポイントとして登録する(ST551)。次からのステップST552〜ST556の実行行カウント処理ループはエミュレーション実行処理が終了するまで実行される。
【0111】
次に、エミュレーション実行処理においてトレースポイントが変化したか調べる(ST553)。ここまでの処理はゲートレベルブロック入力トレース処理部57において行われる。
【0112】
ステップST553においてトレースポイントが変化していない場合はそのままステップST552のループに戻る。変化した場合は、その変化したトレースポイントの値とゲートレベルブロック入力−実行行対応表作成処理部55から得られたゲートレベルブロック入力−実行行対応表から実行行を抽出する(ST554)。この処理は実行行解析処理部23において行われる。
【0113】
次に、ステップST554で抽出された全ての実行行の実行行集計テーブルを+1する(ST555)。この処理は実行行集計処理12において行われる。
【0114】
これ以降、エミュレーション実行処理が終了するまでステップST552の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0115】
図3(a)に示したRTL記述と図3(b)に示したテストベクタに対して実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0116】
以上のように第5の実施形態では、ゲートレベルブロック入力−実行行対応表作成処理部55から得られたゲートレベルブロック入力−実行行対応表とエミュレーション実行処理部54のブロック入力に対応する信号をトレースする処理により、RTL記述1の実行行を推定することができ、従来のエミュレーション方法では測定できなかったカバレッジ観測を実現することができる。また、エミュレーション実行処理はソフトウエアシミュレーション処理と異なり逐次処理では無いため、誤カウントの無い正確なカバレッジ結果6を得ることができる。
【0117】
(第6の実施形態)
図14に示したエミュレーション装置において、論理合成処理部51はRTL記述1をゲートレベルネットリスト52に変換する。この際、ハードウェアに置き換える回路素子を少なくするため論理の最適化を行う場合がある。図3(a)に示したRTL記述に対して最適化処理を行った場合のゲートレベルネットリストを図19に示す。この処理を行うことによりエミュレーション実行処理の対応回路規模を増加させることができ、エミュレーション処理速度も高速に行うことができる。しかしながら最適化処理を行うと、RTL記述1の記述ブロックの入力に対応するゲートレベルブロック入力が最適化処理により削除され、第5の実施形態で説明したエミュレーション方法を適用できない問題が生じる。第6の実施形態では、ハードウェア記述言語のハードウェアエミュレーションにおいて回路の最適化処理を実施した場合におけるカバレッジ測定を可能とすることを目的とする。
【0118】
第6の実施形態によるエミュレーション装置の構成を図20に示す。このエミュレーション装置は、論理合成部51と、エミュレーション実行処理部54と、ロジックコーン入力−実行行対応表作成処理部61と、実行行カウント処理部62とを備える。
【0119】
論理合成処理部51は、RTL記述1をゲートレベルネットリスト52に変換する際、ゲートレベルネットリスト52の各ロジックコーンの入力に対応するRTL記述の信号情報(ロジックコーンRTL−Gate対応情報)60を出力する。ロジックコーンとは、論理回路をフリップフロップなどの記憶素子と組み合わせ回路に分割した際、各記憶素子の入力または回路の出力端子を起点として、その起点に影響を与える組み合わせ回路を意味する。図3(a)に示したRTL記述に対して論理合成処理を行った際のロジックコーンRTL−Gate対応情報60を図21に示す。
【0120】
ロジックコーン入力−実行行対応表作成処理部61は、ロジックコーンRTL−Gate対応情報60を用いて、RTL記述1をロジックコーン単位に分解し、各ロジックコーン単位にエミュレーション実行処理部54でのロジックコーン入力信号の組み合わせとRTL記述1の実行行の対応情報を抽出する。
【0121】
実行行カウント処理部62は、ロジックコーン入力トレース処理部63と、実行行解析処理部23と、実行行集計処理部12とを含む。
【0122】
ロジックコーン入力トレース処理部63は、エミュレーション実行処理部54でのロジックコーン入力の変化情報をエミュレーション実行処理部54から受け取る。
【0123】
実行行解析処理部23は、ロジックコーン入力トレース処理部63が受け取った入力信号情報と、ロジックコーン入力−実行行対応表作成処理部61が抽出したエミュレーション実行処理部54でのロジックコーンの入力信号の組み合わせと実行行との対応情報とから実行行を抽出する。
【0124】
実行行集計処理部12は、実行行解析処理部23より抽出した実行行情報を基に各行の実行回数をカウントし、エミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0125】
次に、ロジックコーン入力−実行行対応表作成処理部61における処理について図22を参照しつつ説明する。
【0126】
まずRTL記述1を読み込む(ST601)。ここでは図3(a)に示したRTL記述を読み込むものとする。
【0127】
次に、ロジックコーンRTL−Gate対応情報60を読み込む(ST602)。
【0128】
次に、ステップST601で読み込んだRTL記述1をロジックコーン単位に分割する(ST603)。図3(a)のRTL記述1の場合、100行から115行全てが1つのロジックコーンに相当する。
【0129】
次からのステップST604〜ST611のロジックコーン別対応表作成ループにおける処理は、ステップST603で分解された全てのロジックコーンに対して行われる。
【0130】
次に、処理対象のロジックコーンの入力信号を抽出する(ST605)。図3(a)のRTL記述1の場合、ロジックコーンの入力信号は、a,bになる。
【0131】
次に、ステップST605で抽出されたロジックコーンの入力信号に対応するエミュレーション実行処理部54での信号を抽出する(ST606)。これ以降、ロジックコーン入力信号に対応するエミュレーション実行処理部54での信号のことを「ゲートレベルロジックコーン入力」と呼ぶ。
【0132】
次からのステップST607〜ST610のロジックコーン入力パターン生成ループにおける処理は、ステップST605で抽出されたロジックコーンの入力信号の組み合わせ全てに対して行われる。図3(a)のRTL記述1の場合、{a,b}={W1,W2}={0,0}〜{1,1}の4通りの組み合わせに対して処理されることになる。
【0133】
次に、対象組み合わせパターンでの対象ロジックコーンの実行行を解析する(ST608)。対象パターンが{a,b}={W1,W2}={0,0}の場合、実行行は100,101,102,113,114行となる。
【0134】
次に、ステップST608で得られたゲートレベルロジックコーン入力と実行行の関係をロジックコーン入力−実行行対応表に追加する(ST609)。
【0135】
次に、ロジックコーンの入力の組み合わせを変えて、ステップST607〜ST610のループに戻る。全ての組み合わせの処理が終了後、次のロジックコーンに処理を移し、ステップST604〜ST611のループに戻る。以上の処理を図3(a)のRTL記述1に対して行った場合のロジックコーン入力−実行行対応表を図23に示す。
【0136】
次に、実行行カウント処理部62における処理について図24を参照しつつ説明する。
【0137】
エミュレーション実行処理開始と同時に実行行カウント処理を開始する(ST650)。
【0138】
次に、ロジックコーン入力−実行行対応表作成処理部61で得られた各ロジックコーンのゲートレベルロジックコーン入力をエミュレーション実行処理におけるトレースポイントとして登録する(ST651)。
【0139】
次からのステップST652〜ST656の実行行カウント処理ループはエミュレーション実行処理が終了するまで実行される。
【0140】
次に、エミュレーション実行処理においてトレースポイントが変化したか調べる(ST653)。ここまでの処理はロジックコーン入力トレース処理63において行われる。
【0141】
ステップST653においてトレースポイントが変化していない場合はそのままステップST652のループに戻る。変化した場合は、その変化したトレースポイントの値とロジックコーン入力−実行行対応表作成処理部61から得られたロジックコーン入力−実行行対応表から実行行を抽出する(ST654)。この処理は実行行解析処理部23において行われる。
【0142】
次に、ステップST654で抽出された全ての実行行の実行行集計テーブルを+1する(ST655)。この処理は実行行集計処理部12において行われる。
【0143】
これ以降、エミュレーション実行処理が終了するまでステップST652の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0144】
図3(a)のRTL記述1と図3(b)のテストベクタとに対して実行行カウント処理を行った場合のカバレッジ結果6は図4に示したカバレッジ結果と同じである。
【0145】
以上のように第6の実施形態では、ロジックコーンの入力は、論理合成処理部51による最適化処理を実行した場合でも必ずゲートレベルネットリスト52に存在するため、論理合成処理部51による最適化処理を実行した場合でもカバレッジを測定することができる。したがって、カバレッジを測定する場合でも最適化処理を実行でき、第5の実施形態のエミュレーション方法と比べ、大規模回路に対応することができる。また、エミュレーション処理速度も向上させることができる。
【0146】
(第7の実施形態)
第2〜第4の実施形態によるシミュレーション装置では、ブロック入力−実行行対応表作成処理部20は記述ブロック単位の各入力信号をbit単位で扱うため、記述ブロックの入力信号の数が多くなるとその入力信号全ての組み合わせが膨大な数になり処理できなくなるおそれがある。第7の実施形態では、ハードウェア記述言語のシミュレーションにおいて、入力信号の多い記述ブロックのカバレッジ測定を可能にすることを目的とする。
【0147】
第7の実施形態によるシミュレーション装置の構成を図25に示す。このシミュレーション装置は、シミュレーション実行処理部3と、条件別ブロック入力−実行行対応表作成処理部70と、実行行カウント処理部71とを備える。
【0148】
条件別ブロック入力−実行行対応表作成処理部70は、RTL記述1を記述ブロック単位に分解し、各記述ブロックに対してブロックの入力信号の条件と実行行の対応を解析し、そのブロックの入力信号の条件と実行行の対応情報を抽出する。第2〜第4の実施形態におけるブロック入力−実行行対応表作成処理部20ではそのブロックの入力をビット単位で扱っていたのに対し、条件別ブロック入力−実行行対応表作成処理部70では各行の実行条件を解析し、ブロックの入力をその条件単位で扱う点が異なる。
【0149】
実行行カウント処理部71は、ブロック入力トレース処理部22と、条件別実行行解析処理部72と、実行行集計処理部12とを含む。
【0150】
ブロック入力トレース処理部22は、条件別ブロック入力−実行行対応表作成処理部70により分解された記述ブロックの入力信号の変化毎に入力信号情報をシミュレーション実行処理部3から受け取る。
【0151】
条件別実行行解析処理部72は、ブロック入力トレース処理部22が受け取った入力信号情報と、条件別ブロック入力−実行行対応表作成処理部70が抽出したブロックの入力条件と実行行の対応情報とから実行行を抽出する。
【0152】
実行行集計処理部12は、実行行解析処理部23により抽出された実行行情報を基に各行の実行回数をカウントし、シミュレーション実行処理終了後、カバレッジ結果6を出力する。
【0153】
次に、条件別ブロック入力−実行行対応表作成処理部70における処理について図26を参照しつつ説明する。
【0154】
まずRTL記述1を読みこむ(ST701)。ここでは図27に示すRTL記述1を読み込むものとする。
【0155】
次に、読みこんだRTL記述1を記述ブロック単位に分割する(ST702)。この処理により、300行から304行までの記述ブロックと306行から308行までの記述ブロックとに分割される(図27参照)。
【0156】
次からのステップST703〜ST710のブロック別対応表作成ループにおける処理は、ステップST702で分解された全ての記述ブロックに対して行われる。また、ステップST704〜ST709の実行条件解析ループは、処理対象の記述ブロックの各行に対して解析が終了するまで繰り返される。
【0157】
次に、処理対象行の実行条件を解析する(ST705)。
【0158】
次に、ステップST705で抽出した実行条件が、条件別ブロック入力−実行行対応表に存在するか調べる(ST706)。存在する場合は、条件別ブロック入力−実行行対応表の同条件に現在の処理対象行を実行行として追加する(ST707)。ステップST706において条件別ブロック入力−実行行対応表に存在しない場合は、条件別ブロック入力−実行行対応表に実行条件と実行行を追加する(ST708)。
【0159】
すべての記述ブロック内の行に対して処理を終了した後(ST709)、次の記述ブロックに対象ブロックを移し(ST710)、ブロック別対応表作成ループST703に戻る。
【0160】
以上の処理を図27のRTL記述1に対して行った場合の条件別ブロック入力−実行行対応表を図28に示す。
【0161】
次に、実行行カウント処理部71における処理について図29を参照しつつ説明する。
【0162】
シミュレーション実行処理開始と同時に実行行カウント処理を開始する(ST750)。
【0163】
次に、条件別ブロック入力−実行行対応表作成処理部70で得られた各ブロックの入力信号をシミュレーション実行処理におけるトレースポイントとして登録する(ST751)。
【0164】
次からのステップST752〜ST756の実行行カウント処理ループはシミュレーション実行処理が終了するまで実行される。
【0165】
次に、シミュレーション実行処理においてトレースポイントが変化したか調べる(ST753)。ここまでの処理はブロック入力トレース処理部22において行われる。
【0166】
ステップST753においてトレースポイントが変化していない場合はそのままステップST752のループへ戻る。トレースポイントが変化していた場合は、そのトレースポイントの値と条件別ブロック入力−実行行対応表作成処理部70から得られた条件別ブロック入力−実行行対応表から該当条件の実行行を抽出する(ST754)。この処理は条件別実行行解析処理部72において行われる。
【0167】
次に、ステップST754で抽出された全ての実行行の実行行集計テーブルを+1する(ST755)。この処理は実行行集計処理12において行われる。
【0168】
これ以降、シミュレーション実行処理が終了するまで、ステップST752の実行行カウント処理ループに戻って、実行行カウント処理を繰り返す。
【0169】
図28に示したRTL記述1と図30に示すテストベクタ2とに対して実行行カウント処理を行った場合のカバレッジ結果6を図31に示す。
【0170】
第7の実施形態ではカバレッジの誤カウントを防止する処理を実施していない。したがってカバレッジ結果(図31)は誤カウントの含まれる結果となっている。しかしながら、第3〜第4の実施形態において説明したカバレッジの誤カウントを防止する処理を適用すれば誤カウントの無い正確なカバレッジ結果を得ることができる。
【0171】
第2〜第4の実施形態では記述ブロック入力と実行行の対応をbit単位で扱っているのに対し、第7の実施形態では条件別ブロック入力実行行対応表作成処理部70が記述ブロックの各行の実行条件単位で入力条件と実行行の対応をとるため、入力信号の多い記述ブロックに対してカバレッジ測定が可能となる。
【0172】
【発明の効果】
この発明によるシミュレーション方法によれば、ハードウェア記述言語のシミュレーションにおけるカバレッジ測定の誤カウントを防ぐことができる。
【図面の簡単な説明】
【図1】第1の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図2】図1に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図3】(a)はRTL記述の一例を示す図であり、(b)はテストベクタの一例を示す図である。
【図4】カバレッジ結果を示す図である。
【図5】第2の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図6】図5に示したブロック入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図7】ブロック入力−実行行対応表の一例を示す図である。
【図8】図5に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図9】第3の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図10】図9に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図11】第4の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図12】図11に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図13】ゲートレベルネットリストの一例を示す図である。
【図14】第5の実施形態によるエミュレーション装置の構成を示すブロック図である。
【図15】RTL−Gate対応情報の一例を示す図である。
【図16】図14に示したゲートレベルブロック入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図17】ゲートレベルブロック入力−実行行対応表の一例を示す図である。
【図18】図14に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図19】ゲートレベルネットリストの一例を示す図である。
【図20】第6の実施形態によるエミュレーション装置の構成を示すブロック図である。
【図21】ロジックコーンRTL−Gate対応情報の一例を示す図である。
【図22】図20に示したロジックコーン入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図23】ロジックコーン入力−実行行対応表の一例を示す図である。
【図24】図20に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図25】第7の実施形態によるシミュレーション装置の構成を示すブロック図である。
【図26】図25に示した条件別ブロック入力−実行行対応表作成処理部における処理の流れを示すフローチャートである。
【図27】RTL記述の一例を示す図である。
【図28】条件別ブロック入力−実行行対応表の一例を示す図である。
【図29】図25に示した実行行カウント処理部における処理の流れを示すフローチャートである。
【図30】テストベクタの一例を示す図である。
【図31】カバレッジ結果を示す図である。
【図32】従来のシミュレーション装置の構成を示すブロック図である。
【図33】カバレッジ結果を示す図である。
【符号の説明】
1 RTL記述、2 テストベクタ、3 シミュレーション実行処理部、4 シミュレーション結果、5,10,21,30,40,56,62,71 実行行カウント処理部、6 カバレッジ結果、11 単位時間実行行トレース処理部、12 実行行集計処理部、20 ブロック入力−実行行対応表作成処理部、22ブロック入力トレース処理部、23 実行行解析処理部、31 単位時間ブロック入力トレース処理部、41 サイクル単位ブロック入力トレース処理部、51 論理合成処理部、52 ゲートレベルネットリスト、53 RTL−Gate対応情報、54 エミュレーション実行処理部、55 ゲートレベルブロック入力−実行行対応表作成処理部、57 ゲートレベルブロック入力トレース処理部、60 ロジックコーンRTL−Gate対応情報、61 ロジックコーン入力−実行行対応表作成処理部、63 ロジックコーン入力トレース処理部、70条件別ブロック入力−実行行対応表作成処理部、72 条件別実行行解析処理部。
Claims (7)
- 記述ブロック単位に実行行履歴を記録する工程を有し、同一時刻に同じ記述ブロックが実行された場合、同一時刻の前回の実行行履歴を消去する工程を有するシミュレーション方法。
- 記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号のトレース結果から実行行を解析する工程を有するシミュレーション方法。
- 記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号を単位時間単位にてトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号の単位時間単位のトレース結果から実行行を解析する工程を有するシミュレーション方法。
- 記述ブロック単位にその記述ブロックの入力の組み合わせと実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をサイクル単位にてトレースする工程を有し、前記記述ブロックの入力の組み合わせと実行行の対応情報の解析結果と前記記述ブロックの入力信号のサイクル単位のトレース結果から実行行を解析する工程を有するシミュレーション方法。
- 記述ブロック単位にその記述ブロックの入力に対応するハードウェアエミュレーション処理での信号を抽出する工程を有し、記述ブロックの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報を解析する工程を有し、エミュレーション実行処理工程にて、各記述ブロックの入力に対応するハードウェアエミュレーション処理での信号をトレースする工程を有し、前記記述ブロックの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報と前記記述ブロックの入力信号に対応するハードウェアエミュレーション処理での信号をトレースした結果から実行行を解析する工程を有するエミュレーション方法。
- ロジックコーン単位にそのロジックコーンの入力に対応するハードウェアエミュレーション処理での信号を抽出する工程を有し、ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報を解析する工程を有し、エミュレーション実行処理工程にて、各ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号をトレースする工程を有し、前記ロジックコーンの入力に対応するハードウェアエミュレーション処理での信号の組み合わせと実行行の対応情報と前記ロジックコーンの入力信号に対応するハードウェアエミュレーション処理での信号をトレースした結果から実行行を解析する工程を有するエミュレーション方法。
- 記述ブロック単位にその記述ブロック内の各行が実行される入力条件を解析する工程を有し、前記入力条件と実行行の対応情報を解析する工程を有し、シミュレーション実行処理工程にて、各記述ブロックの入力信号をトレースする工程を有し、前記入力条件と実行行の対応情報と前記記述ブロックの入力信号のトレース結果から、実行行を解析する工程を有するシミュレーション方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002355819A JP2004192062A (ja) | 2002-12-06 | 2002-12-06 | シミュレーション方法およびエミュレーション方法 |
US10/725,474 US20040111249A1 (en) | 2002-12-06 | 2003-12-03 | Simulation method and emulation method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002355819A JP2004192062A (ja) | 2002-12-06 | 2002-12-06 | シミュレーション方法およびエミュレーション方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004192062A true JP2004192062A (ja) | 2004-07-08 |
Family
ID=32463391
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002355819A Pending JP2004192062A (ja) | 2002-12-06 | 2002-12-06 | シミュレーション方法およびエミュレーション方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20040111249A1 (ja) |
JP (1) | JP2004192062A (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10469205B2 (en) | 2005-07-27 | 2019-11-05 | T-Mobile Usa, Inc. | Application-based multi-band transmission |
US10204365B2 (en) | 2010-07-07 | 2019-02-12 | T-Mobile Usa, Inc. | Managing service provider service options |
EP3954505A1 (en) * | 2011-07-24 | 2022-02-16 | Makita Corporation | Adapter for power tools |
US9824175B1 (en) * | 2014-10-01 | 2017-11-21 | Cadence Design Systems, Inc. | Method and system of evaluation of validity of a refinement rule for a hardware emulation |
US10409942B1 (en) * | 2017-11-02 | 2019-09-10 | Cadence Design Systems, Inc. | Electronic design mapping process |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6141630A (en) * | 1997-08-07 | 2000-10-31 | Verisity Design, Inc. | System and method for automated design verification |
US6240376B1 (en) * | 1998-07-24 | 2001-05-29 | Mentor Graphics Corporation | Method and apparatus for gate-level simulation of synthesized register transfer level designs with source-level debugging |
US6523151B2 (en) * | 2000-05-25 | 2003-02-18 | International Business Machines Corporation | Method for verifying the design of a microprocessor |
US6938249B2 (en) * | 2001-11-19 | 2005-08-30 | International Business Machines Corporation | Compiler apparatus and method for optimizing loops in a computer program |
-
2002
- 2002-12-06 JP JP2002355819A patent/JP2004192062A/ja active Pending
-
2003
- 2003-12-03 US US10/725,474 patent/US20040111249A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20040111249A1 (en) | 2004-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Benjamin et al. | A study in coverage-driven test generation | |
US7464015B2 (en) | Method and apparatus for supporting verification, and computer product | |
US8327302B2 (en) | Techniques for analysis of logic designs with transient logic | |
EP1913410B1 (en) | Method and system for debug and test using replicated logic | |
CN111221693B (zh) | 一种NOR flash配置模块验证方法、系统、装置和存储介质 | |
US7228262B2 (en) | Semiconductor integrated circuit verification system | |
US6993733B2 (en) | Apparatus and method for handling of multi-level circuit design data | |
Bartley et al. | A comparison of three verification techniques: directed testing, pseudo-random testing and property checking | |
CN115470748A (zh) | 一种芯片仿真加速方法、装置、电子设备及存储介质 | |
Syal et al. | A study of implication based pseudo functional testing | |
JP2005525660A (ja) | トランザクションレベルモデルにおける改善された性能分析のための方法及び機構 | |
JP4651620B2 (ja) | 電力算出装置、電力算出方法、耐タンパ性評価装置及び耐タンパ性評価方法 | |
JP2008047134A (ja) | エミュレーションシステム | |
JP2000207440A (ja) | 半導体集積回路の設計検証装置、方法及び記憶媒体 | |
JP2004192062A (ja) | シミュレーション方法およびエミュレーション方法 | |
CN104750608A (zh) | 一种程序中基于动态符号执行的自动错误定位方法 | |
CN116663467B (zh) | 断言等效硬件库的构建方法、装置、电子设备及存储介质 | |
Nalla et al. | The art of semi-formal bug hunting | |
Jiang et al. | PyH2: Using PyMTL3 to create productive and open-source hardware testing methodologies | |
Kumar et al. | Combining restorability and error detection ability for effective trace signal selection | |
Luo et al. | Grammar-based fuzz testing for microprocessor RTL design | |
Tong et al. | Defining and providing coverage for assertion-based dynamic verification | |
CN101794324B (zh) | 用于使用下界距离来执行抽象-精化的方法和装置 | |
Kumar et al. | A methodology to capture fine-grained internal visibility during multisession silicon debug | |
CN115422865A (zh) | 仿真方法及装置、计算设备、计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050622 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080129 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080205 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080603 |