JP5109143B2 - 検証装置および検証方法 - Google Patents

検証装置および検証方法 Download PDF

Info

Publication number
JP5109143B2
JP5109143B2 JP2007171113A JP2007171113A JP5109143B2 JP 5109143 B2 JP5109143 B2 JP 5109143B2 JP 2007171113 A JP2007171113 A JP 2007171113A JP 2007171113 A JP2007171113 A JP 2007171113A JP 5109143 B2 JP5109143 B2 JP 5109143B2
Authority
JP
Japan
Prior art keywords
syntax
variable
verification
assertion
description
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.)
Expired - Fee Related
Application number
JP2007171113A
Other languages
English (en)
Other versions
JP2009009418A (ja
Inventor
侑介 遠藤
健男 今井
秀司 川田
則孝 川勝
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2007171113A priority Critical patent/JP5109143B2/ja
Priority to EP08011516A priority patent/EP2009564A1/en
Priority to US12/163,486 priority patent/US8578308B2/en
Publication of JP2009009418A publication Critical patent/JP2009009418A/ja
Application granted granted Critical
Publication of JP5109143B2 publication Critical patent/JP5109143B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • G06F30/3312Timing analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3323Design verification, e.g. functional simulation or model checking using formal methods, e.g. equivalence checking or property checking

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Description

本発明は、デジタル回路を含む電子システムの設計において、プロパティ記述言語を用いて検証を行う装置および方法に関する。
従来のデジタル回路を含む電子システムの設計は、HDL(Hardware Description Language; ハードウェア記述言語)とよばれる低位記述(信号線やラッチなどハードウェアに近い記述)によって行われていた。この方法では、IP(Intellectual Property; 知識資産、回路部品)間の通信やIPの状態管理をすべて、信号線によって表現する。しかしこの方法は、設計の期間やコストがかかるという問題があった。
近年、ESL設計と呼ばれる、C言語など高位記述が可能な設計記述言語を用いて回路設計を行う方法が使われ始めている。ESL(Electronic System Level)設計では、IP間の通信を、信号線ではなく、関数呼び出しを使った抽象度の高い記述で表現することができる。これにより回路設計の期間やコストの効率化を図ることができる。
一方、HDLベースの設計において「アサーション」と呼ばれる表明記述を用いた手法が使われはじめている。アサーションはプロパティ記述言語と呼ばれる言語によって形式的に記述される。PSL(Property Specification Language; プロパティ記述言語、IEEE 1850)はその一例である。アサーションによれば、IPの性質を、抽象度の高い記述で厳密かつ部分的に表現することができる。シミュレーションや静的検証を用いて、アサーションが表現する事象とIPの設計記述が表現する事象とが一致することを判定することにより、IPの検証を行うこともできる。
離散的な時相を考慮したプロパティ記述では、IP内で発生すべきイベントの発生順序や発生間隔を指示する。従来のプロパティ記述言語はHDLに適用することを意図していたため、信号線の変化しかイベントとして指示できなかった。ESL言語ではIP間での通信を、信号線の変化ではなく、抽象度の高い記述である関数呼び出しとして表現することがある。従来のプロパティ記述言語では、関数呼び出しに関するイベントを指示できないため、関数呼び出しを利用した通信に関する性質が表現できなかった。
以下、実際の公知例を挙げて説明する。
HDLで記述されたIPの設計記述に対して記述されたアサーションを扱う公知例(下記特許文献1,2を参照)は、ESL設計に特有の関数呼び出しに関するイベントを指示できないという問題は解決しない。
ESL設計で使用されるC言語等の言語ではアサーションが古くから多数研究されているが、これらは通常のソフトウェアに対するアサーションを扱うものである。したがって、ESL設計を含むハードウェアに特有のクロックなどの検証単位時刻に基づいたアサーションを扱う用途には適さない。
ESL設計に対してアサーションを適用することに関し、JEDAのNSCa(US2006/0277534)が公知である。この公知例は汎用プログラミング言語に対するアサーションを当該プログラミング言語に変換して検証を行う手法である。しかし、アサーションから当該プログラミング言語の関数の呼び出しを行い、返り値を参照して性質を記述することはできるものの、関数呼び出しに関するイベントの順序を指示できないという問題は解決されない。
特開2007−94891号公報 特開2007−94591号公報
本発明は上記事情を考慮してなされたものであり、アサーションをESL設計に適用するために、ESL設計に特有のイベントを指示する構文を追加したプロパティ記述言語を用いて、IPの設計記述を検証する装置および方法を提供することを目的とする。
本発明の一観点に係る検証装置は、連続的な時系列上で信号値が変化する回路部品間の通信が、関数呼び出しを用いて記述可能な設計記述言語で記述された回路記述を、離散的な時系列上の各時刻に検証する検証装置である。プロパティ記述言語で記述されたアサーション中の、関数呼び出しに関するイベントを指示する構文に対して割当部が変数を割り当てる。次に、値代入部は、前記連続的な時系列上の任意の時刻に前記イベントが発生したことを検知し、前記構文の意味に対応する値を前記変数に代入する。そして、判定部は、前記離散的な時系列上の各時刻における前記変数の値に基づいて、前記構文の意味に対応する条件が満たされるか否かを判定する。
本発明によれば、ESL設計でアサーションを使用可能になり、抽象度の高い記述能力とアサーションによる検証能力を備えた開発環境を提供できる。
関数呼び出しに関するイベントを指示する構文が導入されたプロパティ記述言語を扱う検証装置および検証方法の実施形態を説明する。以下では、関数呼び出しに関するイベントを指示する構文の各々に対して新規変数を割り当てること、各構文が指示する関数呼び出しに関するイベントを検知すること、そして、イベントを検知した結果にしたがって各構文が表現する真偽値を解釈することについて説明する。
具体的には、関数呼び出しに関するイベントを指示する構文の各々に対して特別な新規変数を割り当て、各構文を「この変数がある値になる」というイベントの指示に置き換える。IPの設計記述上で指示されたイベントが発生する箇所に、この変数への代入を行う代入文を挿入する。さらに、プロパティ記述言語の検証時に、各クロックにおいてプロパティが満たされるかどうかを検証した後、挿入された全ての変数の値を初期化する処理を行う。
(用語の定義)
各プロパティ記述(以下、「アサーション」)が表す論理式の真偽を判定すべきタイミングを「検証単位時刻」と称する。通常は、クロックが立ったタイミングを検証単位時刻として指示することが多い。
関数呼び出しに関するイベントを指示する構文を「拡張構文」と称する。本実施形態では、関数の呼び出しが発生したイベントを指示する構文「enter」、関数の呼び出しが終了したイベントを指示する構文「leave」、関数の呼び出し中に発生した任意のイベントを指示する構文「around」という3種の構文を導入する。これらenter、leave、aroundの名称はあくまで一例であり、別の名称を使ってもよい。
enterは指定した関数呼び出しが開始した直後の検証単位時刻で真になる構文である。例えば、enter(func)は関数funcの呼び出しが開始した直後の検証単位時刻で真になる。leaveは指定した関数呼び出しが終了した直後の検証単位時刻で真になる。例えば、leave(func)は関数funcの呼び出しが終了した直後の検証単位時刻で真になる。aroundは指定した関数が呼び出されてからその処理が終了するまでの任意の検証単位時刻で真になる。例えば、around(func)は関数funcが呼び出されてからその処理が終了するまでの任意の検証単位時刻で真になる。
拡張構文を含むアサーションを「拡張アサーション」と称する。本実施形態では拡張構文を通常の変数比較に置き換えることで通常のアサーションに変換するが、この通常のアサーションを「変換済アサーション」と称する。
本実施形態では、入力された拡張アサーション中の全ての拡張構文に対し、変数を割り当てる。ここで割り当てる変数を「新規変数」と称する。また、拡張構文とそれに割り当てられた新規変数の組を「変数割当」と称する。
ESL言語で記述されたソースコードを「ESL記述」と称する。本実施形態では代入文をESL記述に挿入するが、挿入処理を終えたESL記述を「挿入済ESL記述」と称する。
(システムの基本構成)
図1は本発明に係る検証装置を示すブロック図である。本装置は、拡張アサーション付ESL記述0121を入力し、ESL記述0222と拡張アサーション0223とに分離して出力する入力部0221と、拡張アサーション0223中の拡張構文に新規変数を割り当てる新規変数割当部0321と、変数割当を元に拡張構文を変数比較に変換することにより拡張アサーション0223を変換済アサーション0422に変換する拡張構文変換部0421と、全ての拡張構文が指示する箇所に、拡張構文に割り当てられた変数に代入を行う代入文を挿入する変数代入挿入部0521と、挿入済ESL記述0522をテストベンチ0621に対して実行するESL記述シミュレート部0721と、ESL記述シミュレート部0721の信号変化履歴0722に対して変換済アサーション0422の論理式の真偽を判定し、偽の時はエラー出力や統計計上など指示された動作を行うアサーション判定部0821と、新規変数の初期化を行う新規変数初期化部1021と、シミュレート結果0723を表示・記録するシミュレート結果表示・記録部1121と、アサーションの判定結果0822を表示・記録する検証結果表示・記録部1221とを有する。
図2は、図1に示した検証装置の動作手順を示すフローチャートである。図2に示すように、
先ず、入力部0221が拡張アサーション付ESL記述を入力し(ステップ0100)、拡張アサーション付ESL記述から拡張アサーションとESL記述とを分離して抽出し、それぞれを出力する(ステップ0200)。
次に、新規変数割当部0321が、拡張アサーションに含まれる拡張構文に新規変数を割り当てる(ステップ0300)。これにより得られた変数割当を元に、拡張構文変換部0421は拡張構文を変数比較に変換する(ステップ0400)。一方、変数代入挿入部0521は、変数割当を元に、ESL記述に変数代入を挿入する(ステップ0500)。
次に、テストベンチがステップ0600において入力され、ESL記述シミュレート部0721はESL記述を次の検証単位時刻までシミュレートする(ステップ0700)。これによりESL記述のシミュレート結果が得られる。
一方、アサーション判定部0821は、変換済アサーションを元に、アサーション判定を行う(ステップ0800)。これによりアサーションの判定結果(すなわち検証結果)が得られる。
次に、シミュレートを終了するかがステップ0900において判定される。シミュレートを終了せず続行する場合は新規変数初期化部1021が新規変数を初期化し(ステップ1000)、ステップ0700に戻る。シミュレートの終了時には、シミュレート結果表示・記録部1121がシミュレート結果を出力し(ステップ1100)、検証結果表示・記録部1221が検証結果を出力する(ステップ1200)。
尚、入出力データに依存関係のないステップの順序は入れ替えたり並列実行したりしてよい。具体的には、以下の3点の変更がありうる。
・ステップ0400とステップ0500は入れ替えたり並列実行したりしてもよい。
・ステップ0600はステップ0100の前、ステップ0200の前、ステップ0300の前、ステップ0400の前、ステップ0500の前のいずれかに順序を変えてもよいし、それらと並列実行してもよい。
・ステップ1100とステップ1200は入れ替えたり並列実行したりしてもよい。
(新規変数割当ステップ0300の詳細)
新規変数割当ステップ0300は、拡張アサーション中の全ての拡張構文に対し新規変数を割り当てるステップであって、図3に示すように、拡張アサーションを入力するステップ0311と、新規変数を割り当てていない拡張構文を探すステップ(0312と0313)と、新規変数を生成し拡張構文に割り当てるステップ0314と、変数割当を出力するステップ0315とを有する。上述したように、拡張構文とそれに割り当てられた新規変数の組は「変数割当」である。変数割当は、メモリやハードディスク等の記憶手段に一時的に記憶される(図示しないが「変数割当記憶部」という)。
(拡張構文変換ステップ0400の詳細)
拡張構文変換ステップ0400は、拡張アサーションを変換済アサーションに変換するステップであって、図4に示すように、拡張アサーションを入力するステップ0411と、変換していない拡張構文を探すステップ(0412と0413)と、拡張構文に対応する変数割当を入力するステップ0414と、拡張構文を、割り当てられた変数の比較に変換するステップ0415と、全ての拡張構文を変換した変換済アサーションを出力するステップ0416とを有する。出力された変換済アサーションは、メモリやハードディスク等の記憶手段に一時的に格納される(図示しないが「変換済アサーション記憶部」という)。
(変数代入挿入ステップ0500の詳細)
変数代入挿入ステップ0500は、ESL記述に必要な代入文を挿入するステップであって、図5に示すように、ESL記述を入力するステップ(0511)と、全ての変数割当を入力するステップ(0512)と、変数割当ごとに処理を繰り返すステップ(0513と0517)と、変数割当の拡張構文に対応するイベントを発生させる箇所で、挿入処理を行っていない箇所を探すステップ(0514と0515)と、その箇所に、変数割当に対応する変数に代入処理を行う代入文を挿入するステップ(0516)と、全ての変数割当に対して挿入処理を終えた挿入済ESL記述を出力するステップ(0518)とを有する。
(拡張構文の意味)
図6は、3種類の拡張構文「enter」、「leave」、「around」の表す意味を図示したものである。図中では白い円が偽、黒い円が真を表す。enter(func)はfuncの呼び出しがあった直後の検証単位時刻でのみ真となる。leave(func)はfuncの実行が終了した直後の検証単位時刻でのみ真となる。around(func)はfuncの呼び出し中の全ての検証単位時刻で真となる。
(第1の実施形態)
以下、拡張アサーション付ESL記述をシミュレート・検証する第1の実施形態を説明する。
図7は、二つのIP AとIP Bを組み合わせた回路を表現した、SpecCを元にした言語で書かれたESL記述である。尚、ESL言語としてはSpecCに限定されないことは言うまでもない。1行目から6行目までのbehavior Aで始まるブロックがIP Aを表し、8行目から15行目までのbehavior Bで始まるブロックがIP Bを表す。IP AからIP Bの関数funcを呼び出すことで、IP AはIP Bに値を伝達する。さらに、関数funcの実行の終了によって、IP BはIP Aに値を受け取ったことを通知する。
ここで、0クロック目にIP Bが値を受け取り、1クロック目に通知を返すという拡張アサーションは、既存のプロパティ記述言語であるPSL言語(Property Specification Language)に拡張構文を追加した言語によって{enter(func); leave(func)}と記述される。以下、このアサーションを検証する処理手順を説明する。
(第1の実施形態における新規変数割当ステップ0300の動作)
新規変数割当ステップ0300では、拡張アサーション{enter(func); leave(func)}を入力し、この中の二つの拡張構文enter(func)及びleave(func)のそれぞれに対して新規変数を割り当てる。ここでは、enter(func)に対して_enter_func_という新規変数を割り当て、leave(func)に対して_leave_func_という新規変数を割り当てることとする。これら新規変数は、falseで初期化されているものとする。尚、初期値がfalseであるのはあくまで一例であり、本発明を限定する事項ではない。また、これら新規変数の変数名についても一例であり、他の名前でもよい。また、他の新規変数や元からESL記述内にある変数と実体を区別できれば、実際に名前を割り当てなくてもよい。
(第1の実施形態における拡張構文変換ステップ0400の動作)
拡張構文変換ステップ0400では、拡張アサーション{enter(func); leave(func)}を入力し、この中の二つの拡張構文enter(func)及びleave(func)のそれぞれを、変数比較の記述に変換する。ここでは、enter(func)を_enter_func_ == trueという比較の記述に変換し、leave(func)を_leave_func_ == trueという比較の記述に変換する。比較する値がtrueであるのはあくまで一例であり、本発明を限定する事項ではない。初期値であるfalseと区別できる値であればどのような値としてもよい。上記変数比較の記述は、変数とリテラル(直定数)との比較の記述、変数と変数との値の比較の記述を含む。拡張構文変換ステップ0400により、拡張アサーション{enter(func); leave(func)}は変換済アサーション{_enter_func_ == true; _leave_func_ == true}に変換される。
(第1の実施形態における変数代入挿入ステップ0500の動作)
変数代入挿入ステップ0500において、図7に示すESL記述を入力し、ステップ0300において生成された二つの変数割当を元に変数代入の記述を挿入する。具体的には、一つ目の変数割当enter(func)と_enter_func_を元に、ESL記述中の関数funcの呼び出しの直前に_enter_func_ = true;という代入文を挿入する。また、二つ目の変数割当leave(func)と_leave_func_を元に、ESL記述中の関数funcの呼び出しの直後に_enter_func_ = false;という代入文を挿入する。以上により、図8に示すような挿入済ESL記述を得る。ここで、変数代入の記述を挿入する処理は、連続的な時系列上の任意の時刻に、関数呼び出しに関するイベントが発生したことを検知し、そのイベント発生を拡張構文の意味に対応して反映することと等価的である。「反映する」とは、変数代入挿入部0521に相当する値代入部が、拡張構文の意味に対応して新規変数に値を代入することである。
(第1の実施形態におけるESL記述シミュレートステップ0700、アサーション判定ステップ0800、シミュレートを終了するか判定するステップ0900、新規変数初期化ステップ1000の動作)
ESL記述シミュレートステップ0700では、図8に示した挿入済ESL記述をシミュレートし、拡張構文変換ステップ0400において生成された変換済アサーション{_enter_func_ == true; _leave_func_ == true}が満たされることを判定する。第1の実施形態では回路はテストベンチを一切入力しないため、テストベンチは存在しない。最初のESL記述シミュレートステップ0700では、IP Aの関数mainの実行が開始され、_enter_func_ = true;により_enter_func_がtrueになり、b.func(1);によりIP Bの関数funcが呼ばれ、waitfor(1)が呼ばれるところまでシミュレートが行われる。次にアサーション判定ステップ0800では、0クロック目で満たされるべき条件_enter_func_ == trueが満たされていることを確認する。シミュレーションを終了すべきか判定するステップ0900では、現在、次のクロックを待っている処理が存在するためシミュレート続行を判断する。新規変数初期化ステップ1000において、新規変数_enter_func_と_leave_func_の両者にfalseを代入することで初期化を行う。これにより、各新規変数は、対応するイベントが発生した次の検証単位時刻でのみ真になる。
ESL記述シミュレートステップ0700では、waitfor(1)から実行が帰り、IP Aから受け取った値をIP B内の変数valueに保存した後、関数funcから帰り、_leave_func_ = true;により_leave_func_がtrueになり、IP Aの関数mainの実行を終えるところまでシミュレートが行われる。
アサーション判定ステップ0800では、1クロック目で満たされるべき条件_leave_func_ == true が満たされていることを確認する。シミュレーションを終了すべきか判定するステップ0900において、もはや実行中の関数が存在しないため、シミュレートを終了する。シミュレート結果出力ステップ1100により、シミュレート結果が出力されるが、第1の実施形態に係るESL記述は外部に一切出力を行わない回路であるため、何も出力せず、シミュレーションを終了する。また、検証結果出力ステップ1200によりアサーションの検証結果が出力される。ここでは、全てのアサーションが満たされたことを出力する。
以上説明したステップにより、図7のESL記述は拡張アサーション{enter(func); leave(func)}を満たしていることが検証された。
(第1の実施形態における新規変数の値の変動)
図9は、第1の実施形態において新規変数がどのような値を取るかを連続的な時系列上の図に表したものである。シミュレート開始から0クロック目の検証ステップに至るまでの間に_enter_func_=true;が実行され、0クロック目の検証ステップ時では_enter_func_がtrue、_leave_func_がfalseを取っている。すなわち、プロパティ記述言語において定められた離散的な時系列上の0クロック目の検証においては、enter(func)が成立、leave(func)が非成立であることを示している。0クロック目の検証が終わった後、新規変数の初期化が行われ、1クロック目の検証ステップまでの間に_leave_func_=true;が実行され、1クロック目の検証ステップ時では_enter_func_がfalse、_leave_func_がtrueを取っている。すなわち、プロパティ記述言語において定められた離散的な時系列上の1クロック目の検証においては、enter(func)が非成立、leave(func)が成立であることを示している。
(第1の実施形態に係る検証装置の動作)
入力部0221は図7に示すESL記述を入力し、ESL記述と拡張アサーションとに分離して両者の抽出を行う。
新規変数割当部0322は拡張アサーション{enter(func); leave(func)}に記述されている各拡張構文に新規変数_enter_func_と_leave_func_を割り当てる。拡張構文と新規変数の組、すなわち変数割当をメモリやハードディスク等の記憶手段に一時的に格納する。この変数割当を元に、拡張構文変換部0421は拡張アサーション{enter(func); leave(func)}を変換済アサーション{_enter_func_ == true; _leave_func_ == true}に変換する。変数代入挿入部0521は変数割当を元に、図7のESL記述を図8に示す挿入済ESL記述に変換する。ESL記述シミュレート部0721は図8に示す挿入済ESL記述を対象にしてシミュレートを行う。0クロック目のシミュレートでIP Aの関数mainの実行開始からIP Bの関数func内のwaitfor(1)の呼び出しまでシミュレートされ、この状態の信号変化履歴0722をアサーション判定部0821に伝える。信号変化履歴0722は、上記_enter_func_や_leave_func_の値がどのように変化したかを表している。アサーション判定部0821は現状(すなわち検証単位時刻)で変換済アサーション{_enter_func_ == true; _leave_func_ == true}が満たされていることを信号変化履歴0722に基づいて判定する。
次に、新規変数初期化部1021が_enter_func_と_leave_func_をfalseに初期化する。ESL記述シミュレート部0721は1クロック目のシミュレートでwaitfor(1)の呼び出しから帰り、IP Aの関数mainの終了までがシミュレートされ、この状態の信号変化履歴0722をアサーション判定部0821に伝える。アサーション判定部0821は現状で変換済アサーション{_enter_func_ == true; _leave_func_ == true}が満たされていることを信号変化履歴0722に基づいて判定する。
次に、新規変数初期化部1021が_enter_func_と_leave_func_をfalseに初期化する。ここでシミュレーションが終了し、シミュレート結果表示・記録部1121によってシミュレート結果が出力・表示・記憶され、検証結果表示・記録部1221によってアサーションの検証結果の出力・表示・記憶が行われる。
(第2の実施形態)
以下、拡張アサーション付ESL記述をシミュレート・検証する第2の実施形態を説明する。
図10は、二つのIP AとBを組み合わせた回路を表現したESL記述である。IP AからIP Bの関数func2や関数funcを呼び出すことで、IP AはIP Bに値を伝達する。IP B内の関数func2は自身の関数funcを呼び出す。関数funcは伝達された値が1の場合は1クロック後に、2の場合は2クロック後に処理を帰す。
このとき、二つの拡張アサーションalways (enter(func) -> next leave(func))と{around(func2) && enter(func); leave(func)}を検証する第2の実施形態を、第1の実施形態との相違点を中心に説明する。一つ目のアサーションは、関数funcが呼ばれたクロックの次のクロックで必ず関数funcの実行が終了することを表している。このアサーションは、IP Bの関数func2を経由して関数funcが呼ばれた場合は成立するが、IP Aの関数mainから直接b.func(2)として呼ばれた場合は2クロック後に関数の実行が終了するため、成立しない。二つ目のアサーションは、0クロック目にIP Aの関数mainが呼ばれている間に関数funcが呼び出され、1クロック目に関数funcの実行が終了することを表している。このアサーションは成立する。
(第2の実施形態における新規変数割当ステップ0300の動作)
新規変数割当ステップ0300では、enter(func)に対して_enter_func_を割り当て、leave(func)に対して_leave_func_を割り当て、around(func2)に対して_around_func2_を割り当てる。
(第2の実施形態における拡張構文変換ステップ0400の動作)
拡張構文変換ステップ0400では、一つ目の拡張アサーションalways (enter(func) -> next leave(func))をalways (_enter_func_ == true -> next _leave_func_ == true)に変換し、さらに二つ目のアサーション{around(func2) && enter(func); leave(func)}を{_around_func2_ == true && _enter_func_ == true; _leave_func_ == true}に変換する。第1の実施形態と同様に、ここでは拡張構文を変数比較の記述に変換している。
(第2の実施形態における変数代入挿入ステップ0500の動作)
変数代入挿入ステップ0500では、図10に示すESL記述を、図11に示すような挿入済ESL記述に変換する。ここでaround(func2)に対しては、関数の呼び出し開始時に_around_func2_ = true;を挿入し、呼び出し終了時に_around_func2_ = false;を挿入する。
(第2の実施形態におけるESL記述シミュレートステップ0700、アサーション判定ステップ0800、シミュレートを終了するか判定するステップ0900、新規変数初期化ステップ1000の動作)
ESL記述シミュレートステップ0700では、図11に示す挿入済ESL記述をシミュレートする。ここで、enterやleaveに対しては、アサーションの判定後に対応する新規変数を初期化するが、aroundに対してはこの初期化を行わない。これにより、aroundで指示されている関数が実行中は常に新規変数が真になる。
0クロック目のシミュレートが終了した後、enter(func)とaround(func2)が真になっている。一つ目の拡張アサーションalways (enter(func) -> next leave(func))は、次のクロックでleave(func)になることを検証する。二つ目の拡張アサーション{around(func2) && enter(func); leave(func)}は、0クロック目で成立すべき事象が成立していることを検証する。1クロック目のシミュレートが終了した後、leave(func)が真になっている。一つ目の拡張アサーションは、leave(func)が成立しているため、この時点では偽にならない。二つ目のアサーションは1クロック目で成立すべき事象が成立していることを検証し、このアサーションが成立することが確定する。2クロック目ではenter(func)が真になる。一つ目の拡張アサーションにより、次のクロックでleave(func)になることを検証する。3クロック目で、このとき関数funcに渡されている値は2であるため、2クロック目の待ち状態になる。このため、関数funcはまだ帰らず、真になる拡張構文は存在しない。これにより一つ目の拡張アサーションalways (enter(func) -> next leave(func))が偽になる。当該アサーションの偽時動作であるassertはエラーを出力するという意味であり、エラー出力が実行される。
(第2の実施形態における新規変数の値の変動)
図12は、第2の実施形態において新規変数がどのような値を取るかを連続的な時系列上の図に表したものである。
以上説明した本発明の実施形態によれば、ESL設計でアサーションを使用可能になり、抽象度の高い記述能力とアサーションによる検証能力を備えた開発環境を提供できる。
上述した本発明の実施形態は、次のように変形することできる。
(変形例)
・拡張アサーションとESL記述をあらかじめ個別に記述してもよい。この場合、拡張アサーション抽出ステップ0200が不要になる。
・ESL記述上、全く同じタイミングを指示する複数の拡張構文に対しては、新規変数をそれぞれに割り当てる必要はない。例えば、関数func1と関数func2が必ず連続して呼び出される場合、拡張アサーション中にleave(func1)とenter(func2)が出現しても、それぞれに新規変数を割り当てる必要はない。このような状況を検知し、leave(func1)とenter(func2)に同じ新規変数を割り当てるように機能拡張すれば、ESL記述中に挿入する代入の数が減り、シミュレーションを高速化できる。
・図2では新規変数割当ステップ0300、拡張構文変換ステップ0400、変数代入挿入ステップ0500をESL記述シミュレートステップ0700の前処理として行っているが、シミュレートを行いながら必要に応じて変換・判定するように処理手順を変更してもよい。例えば、関数呼び出しの意味を、通常の呼び出しの前に、その関数に対応する新規変数にtrueを代入する処理を追加するように拡張すれば、これによってシミュレートステップにおいて関数funcが呼び出されたとき、_enter_func_にtrueが代入されるため、変数代入挿入ステップ0500を省略することができる。ただしこの方法はESLシミュレート部0721がESL記述を逐次解釈実行する方式で実装されているときにだけ使用できる。
・新規変数初期化ステップ1000をESL記述シミュレートステップ0700、アサーション判定ステップ0800、シミュレートを終了すべきかどうかの判定ステップ0900のループの中で行うものとして説明したが、ESL記述シミュレートステップ0700の前に、ESL記述中で検証単位時刻直後に相当する位置を検出し、そこに新規変数を初期化する代入文を挿入するステップを行ってもよい。
・変数代入挿入ステップ0500はESL記述に対して変数代入を挿入するものとして説明したが、ESL記述をオブジェクトコードにコンパイルした後で実行する方式でシミュレータが実装されている場合には、コンパイルと同時、またはコンパイル後のオブジェクトコードに対して変数代入に相当するオブジェクトコード断片を挿入してもよい。ただしコンパイラの最適化によって関数がインライン展開されている可能性があることに注意する必要がある。
指定した関数が呼び出されてからその処理が終了するまでの任意の検証単位時刻を表す拡張構文aroundの解釈には、明示的に新規変数を与えなくても、実行時の関数呼び出しスタックに同等の情報が記録されているので、これを利用してもよい。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
本発明に係る検証装置を示すブロック図 図1に示した検証装置の動作手順を示すフローチャート 新規変数割当ステップの詳細を示すフローチャート 拡張構文変換ステップの詳細を示すフローチャート 変数代入挿入ステップの詳細を示すフローチャート 拡張構文の意味を説明するための図 第1の実施形態に係る拡張アサーション付ESL記述の一例を示す図 第1の実施形態に係る挿入済ESL記述の一例を示す図 第1の実施形態に係る新規変数の値の変化を示すタイミングチャート 第2の実施形態に係る拡張アサーション付ESL記述の一例を示す図 第2の実施形態に係る挿入済ESL記述の一例を示す図 第2の実施形態に係る新規変数の値の変化を示すタイミングチャート
符号の説明
0221…入力部、0321…新規変数割当部、0421…拡張構文変換部、0521…変数代入挿入部、0721…ESL記述シミュレート部、0821…アサーション判定部、1121…シミュレート結果表示・記録部、1221…検証結果表示・記録部

Claims (18)

  1. 連続的な時系列上で信号値が変化する回路部品間の通信が、関数呼び出しを用いて記述可能な高位の設計記述言語で記述された回路記述を、離散的な時系列上の各時刻に検証する検証装置であって、
    低位のプロパティ記述言語で記述された拡張アサーションが分離可能に挿入された前記回路記述を入力する入力部と、
    前記拡張アサーション中の、関数呼び出しに関するイベントを指示する構文に対して変数を割り当てる割当部と、
    前記変数の割り当てを元に前記構文を変数の比較に変換することにより前記拡張アサーションを変換済アサーションに変換する変換部と、
    前記連続的な時系列上の任意の時刻に前記イベントが発生したことを検知し、前記構文の意味に対応する値を前記変数に代入する値代入部と、
    前記離散的な時系列上の各時刻における前記変数の値に基づいて、前記構文の意味に対応する条件が満たされるか否かを判定する判定部と、を具備することを特徴とする検証装置。
  2. 前記値代入部は、
    前記変数に前記構文の意味に対応する値を代入する記述を前記回路記述に挿入する挿入部と、
    前記条件の判定が行われた直後に、前記変数の値を初期化する初期化部とを含むことを特徴とする請求項1に記載の検証装置。
  3. 前記記述は、前記回路記述中の、前記イベントが発生する命令の箇所に挿入されることを特徴とする請求項2に記載の検証装置。
  4. 前記変数を用いて前記条件を表す式に、前記構文を変換する変換部をさらに具備することを特徴とする請求項1に記載の検証装置。
  5. 前記構文は、関数呼び出しの開始を指示する構文を含むことを特徴とする請求項1に記載の検証装置。
  6. 前記構文は、関数呼び出しの終了を指示する構文を含むことを特徴とする請求項1に記載の検証装置。
  7. 前記構文は、関数呼び出し中であることを指示する構文を含むことを特徴とする請求項1に記載の検証装置。
  8. 前記回路記述をシミュレートし、前記変数の値の変化を表す信号変化履歴を出力するシミュレート部をさらに具備し、
    前記条件は、前記信号変化履歴に基づいて判定されることを特徴とする請求項1に記載の検証装置。
  9. 連続的な時系列上で信号値が変化する回路部品間の通信が、関数呼び出しを用いて記述可能な高位の設計記述言語で記述された回路記述を、離散的な時系列上の各時刻に検証する検証装置の検証方法であって、
    低位のプロパティ記述言語で記述された拡張アサーションが分離可能に挿入された前記回路記述を前記検証装置の入力部が入力する入力ステップと、
    前記拡張アサーション中の、関数呼び出しに関するイベントを指示する構文に対して前記検証装置の割当部が変数を割り当てる割当ステップと、
    前記変数の割り当てを元に前記構文を変数の比較に変換することにより、前記検証装置の変換部が前記拡張アサーションを変換済アサーションに変換する変換ステップと、
    前記連続的な時系列上の任意の時刻に前記イベントが発生したことを検知し、前記構文の意味に対応する値を前記検証装置の値代入部が前記変数に代入する代入ステップと、
    前記離散的な時系列上の各時刻における前記変数の値に基づいて、前記構文の意味に対応する条件が満たされるか否かを前記検証装置の判定部が判定する判定ステップと、を具備することを特徴とする検証方法。
  10. 前記代入ステップは、
    前記変数に前記構文の意味に対応する値を代入する記述を前記検証装置の挿入部が前記回路記述に挿入するステップと、
    前記条件の判定が行われた直後に、前記変数の値を前記検証装置の初期化部が初期化するステップとを含むことを特徴とする請求項9に記載の検証方法。
  11. 前記記述は、前記回路記述中の、前記イベントが発生する命令の箇所に挿入されることを特徴とする請求項10に記載の検証方法。
  12. 前記変数を用いて前記条件を表す式に、前記検証装置の変換部が前記構文を変換するステップをさらに具備することを特徴とする請求項9に記載の検証方法。
  13. 前記構文は、関数呼び出しの開始を指示する構文を含むことを特徴とする請求項9に記載の検証方法。
  14. 前記構文は、関数呼び出しの終了を指示する構文を含むことを特徴とする請求項9に記載の検証方法。
  15. 前記構文は、関数呼び出し中であることを指示する構文を含むことを特徴とする請求項9に記載の検証方法。
  16. 前記回路記述を前記検証装置のシミュレート部がシミュレートし、前記変数の値の変化を表す信号変化履歴を出力するステップをさらに具備し、
    前記条件は、前記信号変化履歴に基づいて判定されることを特徴とする請求項9に記載の検証方法。
  17. 前記離散的な時系列上の各時刻は、前記アサーションが表す論理式の真偽を判定すべきタイミングに相当する検証単位時刻であることを特徴とする請求項9に記載の検証方法。
  18. 連続的な時系列上で信号値が変化する回路部品間の通信が、関数呼び出しを用いて記述可能な高位の設計記述言語で記述された回路記述を、離散的な時系列上の各時刻に検証するプログラムであって、
    コンピュータを、
    低位のプロパティ記述言語で記述された拡張アサーションが分離可能に挿入された前記回路記述を入力する入力手段、
    前記拡張アサーション中の、関数呼び出しに関するイベントを指示する構文に対して変数を割り当てる割当手段、
    前記変数の割り当てを元に前記構文を変数の比較に変換することにより前記拡張アサーションを変換済アサーションに変換する変換手段、
    連続的な時系列上の任意の時刻に前記イベントが発生したことを検知し、前記構文の意味に対応する値を前記変数に代入する値代入手段、
    離散的な時系列上の各時刻における前記変数の値に基づいて、前記構文の意味に対応する条件が満たされるか否かを判定する判定手段、として機能させるためのプログラム。
JP2007171113A 2007-06-28 2007-06-28 検証装置および検証方法 Expired - Fee Related JP5109143B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007171113A JP5109143B2 (ja) 2007-06-28 2007-06-28 検証装置および検証方法
EP08011516A EP2009564A1 (en) 2007-06-28 2008-06-25 Verification apparatus and verification method
US12/163,486 US8578308B2 (en) 2007-06-28 2008-06-27 Verification apparatus and verification method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007171113A JP5109143B2 (ja) 2007-06-28 2007-06-28 検証装置および検証方法

Publications (2)

Publication Number Publication Date
JP2009009418A JP2009009418A (ja) 2009-01-15
JP5109143B2 true JP5109143B2 (ja) 2012-12-26

Family

ID=39857080

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007171113A Expired - Fee Related JP5109143B2 (ja) 2007-06-28 2007-06-28 検証装置および検証方法

Country Status (3)

Country Link
US (1) US8578308B2 (ja)
EP (1) EP2009564A1 (ja)
JP (1) JP5109143B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8554530B1 (en) * 2009-01-20 2013-10-08 Cadence Design Systems, Inc. Methods and systems for property assertion in circuit simulation
JP5515815B2 (ja) * 2010-02-08 2014-06-11 富士通株式会社 検証装置及び検証プログラム
KR101565840B1 (ko) 2011-10-20 2015-11-13 엔에이치엔엔터테인먼트 주식회사 서버에 자동화 테스트를 제공하는 방법 및 시스템
EP2720149A3 (en) * 2012-09-07 2018-01-24 Samsung Electronics Co., Ltd Apparatus and method for generating assertion based on user program code, and apparatus and method for verifying processor using assertion
US9032347B1 (en) * 2013-03-15 2015-05-12 Cadence Design Systems, Inc. System and method for automated simulator assertion synthesis and digital equivalence checking
JP6145356B2 (ja) * 2013-08-07 2017-06-07 矢崎総業株式会社 電線保護部材
US9892025B2 (en) * 2015-02-19 2018-02-13 Red Hat, Inc. Using script description to encode conditional statements

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6067639A (en) * 1995-11-09 2000-05-23 Microsoft Corporation Method for integrating automated software testing with software development
US6421808B1 (en) * 1998-04-24 2002-07-16 Cadance Design Systems, Inc. Hardware design language for the design of integrated circuits
US6263302B1 (en) * 1999-10-29 2001-07-17 Vast Systems Technology Corporation Hardware and software co-simulation including simulating the cache of a target processor
US6230114B1 (en) * 1999-10-29 2001-05-08 Vast Systems Technology Corporation Hardware and software co-simulation including executing an analyzed user program
US6591403B1 (en) * 2000-10-02 2003-07-08 Hewlett-Packard Development Company, L.P. System and method for specifying hardware description language assertions targeting a diverse set of verification tools
US7000213B2 (en) * 2001-01-26 2006-02-14 Northwestern University Method and apparatus for automatically generating hardware from algorithms described in MATLAB
US7328195B2 (en) * 2001-11-21 2008-02-05 Ftl Systems, Inc. Semi-automatic generation of behavior models continuous value using iterative probing of a device or existing component model
US7055116B2 (en) * 2002-05-28 2006-05-30 Cadence Design Systems, Inc. Assertion-based transaction recording
US6848088B1 (en) * 2002-06-17 2005-01-25 Mentor Graphics Corporation Measure of analysis performed in property checking
JP2005108007A (ja) * 2003-09-30 2005-04-21 Matsushita Electric Ind Co Ltd Lsi設計検証装置及びlsi設計検証方法
US7076753B2 (en) * 2003-12-18 2006-07-11 Synopsys, Inc. Method and apparatus for solving sequential constraints
JP4255079B2 (ja) * 2004-09-30 2009-04-15 株式会社リコー アサーション生成システムと回路検証システムおよびプログラムならびにアサーション生成方法
US7143373B2 (en) * 2004-10-14 2006-11-28 Synopsys, Inc. Method and apparatus for evaluating and debugging assertions
JP2006172113A (ja) * 2004-12-15 2006-06-29 Toshiba Corp 高位合成装置、自動高位合成方法及び高位合成プログラム
JP4492803B2 (ja) * 2005-03-31 2010-06-30 日本電気株式会社 動作合成装置及びプログラム
US20060247907A1 (en) * 2005-04-29 2006-11-02 Microsoft Corporation Deciding assertions in programs with references
US20060277534A1 (en) 2005-06-07 2006-12-07 Atsushi Kasuya Evaluation of a temporal description within a general purpose programming language
JP4599266B2 (ja) * 2005-09-27 2010-12-15 株式会社東芝 シミュレーション装置及びシミュレーション方法
JP2007094891A (ja) 2005-09-29 2007-04-12 Matsushita Electric Ind Co Ltd データベースおよびこれを用いたlsi機能検証方法
US7926020B1 (en) * 2006-02-09 2011-04-12 Yuan Lu Methods for automatically generating assertions
JP4480737B2 (ja) * 2007-03-29 2010-06-16 富士通株式会社 論理検証支援プログラム、該プログラムを記録した記録媒体、論理検証支援装置、および論理検証支援方法
US7725851B2 (en) * 2007-08-27 2010-05-25 International Business Machines Corporation Device, system and method for formal verification
US8219376B2 (en) * 2008-02-27 2012-07-10 International Business Machines Corporation Verification using directives having local variables
JP5025542B2 (ja) * 2008-03-27 2012-09-12 株式会社東芝 プロパティ抽出装置及び方法
US9021409B2 (en) * 2011-07-11 2015-04-28 The Board Of Trustees Of The University Of Illinois Integration of data mining and static analysis for hardware design verification

Also Published As

Publication number Publication date
JP2009009418A (ja) 2009-01-15
US20090019406A1 (en) 2009-01-15
US8578308B2 (en) 2013-11-05
EP2009564A1 (en) 2008-12-31

Similar Documents

Publication Publication Date Title
JP5109143B2 (ja) 検証装置および検証方法
JP5350428B2 (ja) 自動プログラム生成装置、方法及びコンピュータプログラム
EP2850529A2 (en) System and methods for generating and managing a virtual device
JP2001142937A (ja) 回路のスケジューリング正当性チェック方法及びスケジュール検証方法
US20070061641A1 (en) Apparatus and method for generating test driver
US9342439B2 (en) Command coverage analyzer
US10592703B1 (en) Method and system for processing verification tests for testing a design under test
CN113835945A (zh) 芯片的测试方法、装置、设备及系统
TWI309384B (ja)
JP4147842B2 (ja) 論理検証システム及び方法、論理コーン抽出装置及び方法、論理検証及び論理コーン抽出プログラム
CN115952758A (zh) 芯片验证方法、装置、电子设备及存储介质
Tiwari et al. Reuse: reducing test effort
US8140315B2 (en) Test bench, method, and computer program product for performing a test case on an integrated circuit
JP5233355B2 (ja) プロパティ生成システムおよびプロパティ検証システム
CN117435483A (zh) 基于Formal工具的仿真验证激励生成方法、装置、介质及终端
KR20150128711A (ko) 컴퓨터 시스템 활동의 트레이스 타임라인을 분석하기 위한 방법 및 시스템
US8332201B1 (en) Innovative verification methodology for deeply embedded computational element
JP2009211622A (ja) 契約定義関数検証装置、その方法及びそのプログラム
Hofer et al. Gui savvy end-to-end testing with smart monkeys
JPWO2012049816A1 (ja) モデル検査装置、方法及びプログラム
WO2004068347A1 (en) Method and apparatus for categorising test scripts
JP5233354B2 (ja) プロパティ検証システム、プロパティ検証方法、及びプログラム
JP2007018313A (ja) 回路設計プログラム、回路設計装置、回路設計方法
CN112445528A (zh) 基于流水线约束的结果自校验指令序列填充方法
JP5034867B2 (ja) ソフトウェア検証支援プログラム、該プログラムを記録した記録媒体、ソフトウェア検証支援装置、およびソフトウェア検証支援方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100628

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120409

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120529

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120605

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120802

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120821

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20120907

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120914

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120907

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151019

Year of fee payment: 3

R151 Written notification of patent or utility model registration

Ref document number: 5109143

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151019

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

Free format text: JAPANESE INTERMEDIATE CODE: R313114

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees