JP2009277135A - 検証装置、検証方法および検証プログラム - Google Patents

検証装置、検証方法および検証プログラム Download PDF

Info

Publication number
JP2009277135A
JP2009277135A JP2008129771A JP2008129771A JP2009277135A JP 2009277135 A JP2009277135 A JP 2009277135A JP 2008129771 A JP2008129771 A JP 2008129771A JP 2008129771 A JP2008129771 A JP 2008129771A JP 2009277135 A JP2009277135 A JP 2009277135A
Authority
JP
Japan
Prior art keywords
level
implication
trace
assertion
event
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
Application number
JP2008129771A
Other languages
English (en)
Inventor
Yusuke Endo
藤 侑 介 遠
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 JP2008129771A priority Critical patent/JP2009277135A/ja
Publication of JP2009277135A publication Critical patent/JP2009277135A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

【課題】高位レベルのイベントに関するアサーションを正確かつ簡単に記述できるようにする。
【解決手段】本発明の一態様としての検証方法は、複数の各イベントの開始および終了をそれぞれ時系列に記録したトレースの入力を受け付け、前記イベントの発生順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け付け、前記トレースに基づき前記複数のイベントの階層構造を解析し、階層レベル毎に前記イベントの発生順序を表した階層構造トレースを生成し、前記アサーションに含まれる前記含意の前件および後件の少なくとも一方に基づいて各前記階層レベルのうちの1つである選択階層レベルを選択し、前記階層構造トレースに基づき、前記アサーションの真偽を判定し、判定において、前記含意に含まれる前記時相演算子に対する処理を、前記階層構造トレースにおける前記選択階層レベルのトレースに基づいて行う。
【選択図】図1

Description

本発明は、検証装置、検証方法および検証プログラムに関し、たとえばデジタル回路を含む電子システムの設計、およびソフトウェアの設計開発に係わる技術に関する。
従来のデジタル回路を含む電子システムの設計は、VHDL や Verilog HDL などの HDL (Hardware Description Language; ハードウェア記述言語) と呼ばれる低位な設計記述 (信号線やラッチなどハードウェアに近い記述)によって行われていた。
HDL 設計においては、先行技術である 特開2007-11467号公報 や特開 2004-286042号公報のように、PSL (Property Specification Lanugage) や SVA (SystemVerilog Assertion) などのアサーション記述言語によって記述されたアサーションを用いた検証手法が使われている。アサーションは設計記述内で発生するイベントが起きる順序に関する性質や制約を記述したものである。アサーションを用いた検証では、アサーションと設計記述を受け取り、シミュレーションまたは静的解析によって、設計記述がアサーションを満たしているかどうかを検証する。
従来のアサーション記述言語は、イベントが回路内のいずれかのクロックと同期すると仮定していた。すなわち、シングルクロックの回路モジュールにおいては、イベントはすべて同じ時系列上 (フラットな時系列上) で起きることになる。従来は設計記述として HDL を用いていたため、これで十分であった。
しかし、近年のデジタル回路設計では、ESL (Electronic System Level) 設計と呼ばれる、C 言語など高位記述が可能な言語を用いて回路設計を行う手法が使われ始めている。ESLにおいては、通信状態などに相当する高位のイベントレベル、回路に直した場合にクロックに相当する中位のイベントレベル、C 言語の関数呼び出しや変数代入に相当する低位のイベントレベルなど、階層構造をなす複数のレベル(階層レベル)を持つイベントが発生する。
また、アサーション記述言語をソフトウェア開発に適用する場合にも、同様に階層構造をなす複数のレベルを持つイベントを扱う必要があった。
特開2007-11467号公報 特開 2004-286042号公報
階層構造をなす複数のレベルを持つイベントを従来のアサーション記述言語で扱うためには、複数のレベルのイベントを同じ時系列上に射影して扱う必要があった。しかしこの方法では、高位レベルのイベントの間に多数の低位レベルのイベントが挿入されるため、高位レベルのイベントに関するアサーションの記述が困難かつ不正確になる問題があった。また、低位レベルのイベントが連続時間上で発生するイベントとなっている場合、射影による方法は適用できないという問題があった。
本発明は、高位レベルのイベントに関するアサーションを正確かつ簡単に記述できるようにすることで、検証の精度と効率を向上し、デジタル回路やソフトウェアの品質の向上や開発期間の短縮を図ることを可能とした、検証装置、検証方法および検証プログラムを提供する。
本発明の一態様としての検証装置は、
複数の各イベントの開始および終了をそれぞれ時系列に記録したトレースの入力を受け付けるトレース入力受付部と、
前記イベントの発生順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け付けるアサーション入力受付部と、
前記トレースに基づき前記複数のイベントの階層構造を解析し、階層レベル毎に前記イベントの発生順序を表した階層構造トレースを生成する階層構造トレース生成部と、
前記アサーションに含まれる前記含意の前件および後件の少なくとも一方に基づいて各前記階層レベルのうちの1つである選択階層レベルを選択する階層レベル選択部と、
前記階層構造トレースに基づき、前記アサーションの真偽を判定する真偽判定部と
を具備し、
前記真偽判定部は、前記含意に含まれる前記時相演算子に対する処理を、前記階層構造トレースにおける前記選択階層レベルのトレースに基づいて行う
ことを特徴とする。
本発明の一態様としての検証方法は、
複数の各イベントの開始および終了をそれぞれ時系列に記録したトレースの入力を受け付けるトレース入力受付ステップと、
前記イベントの発生順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け付けるアサーション入力受付ステップと、
前記トレースに基づき前記複数のイベントの階層構造を解析し、階層レベル毎に前記イベントの発生順序を表した階層構造トレースを生成する階層構造トレース生成ステップと、
前記アサーションに含まれる前記含意の前件および後件の少なくとも一方に基づいて各前記階層レベルのうちの1つである選択階層レベルを選択する階層レベル選択ステップと、
前記階層構造トレースに基づき、前記アサーションの真偽を判定する真偽判定ステップと
を具備し、
前記真偽判定ステップは、前記含意に含まれる前記時相演算子に対する処理を、前記階層構造トレースにおける前記選択階層レベルのトレースに基づいて行う
ことを特徴とする。
本発明の一態様としての検証プログラムは、
コンピュータに実行させるための検証プログラムであって、
複数の各イベントの開始および終了をそれぞれ時系列に記録したトレースの入力を受け付けるトレース入力受付ステップと、
前記イベントの発生順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け付けるアサーション入力受付ステップと、
前記トレースに基づき前記複数のイベントの階層構造を解析し、階層レベル毎に前記イベントの発生順序を表した階層構造トレースを生成する階層構造トレース生成ステップと、
前記アサーションに含まれる前記含意の前件および後件の少なくとも一方に基づいて各前記階層レベルのうちの1つである選択階層レベルを選択する階層レベル選択ステップと、
前記階層構造トレースに基づき、前記アサーションの真偽を判定する真偽判定ステップと
を具備し、
前記真偽判定ステップは、前記含意に含まれる前記時相演算子に対する処理を、前記階層構造トレースにおける前記選択階層レベルのトレースに基づいて行う
ことを特徴とする。
本発明により、高位レベルのイベントに関するアサーションが正確に、かつ簡単に記述できるようになるため、検証の精度と効率が向上し、デジタル回路やソフトウェアの品質の向上や開発期間の短縮を図れる。
図1は、本発明の一実施の形態としての検証装置の構成を概略的に示すブロック図である。
図1のトレース入力部(トレース入力受付部)11は、イベントを順序づけして並べたトレースの入力を外部装置から受け付け、入力されたトレースを、本装置での処理に適した形にして出力する。トレースは、複数の各イベントの開始および終了をそれぞれ時系列に記録したものである。
図2は、上記外部装置の一例を示す。この外部装置は、本発明をデジタル回路を含む電子システムの設計に適用する場合に用いられる。この外部装置は、シミュレーションを行う回路の設計記述を入力する設計記述入力部31と、シミュレーションのテストベンチを入力するテストベンチ入力部32と、テストベンチに対して設計記述をシミュレーション実行しシミュレーション結果およびトレースを出力するシミュレーション部33と、シミュレーションの結果を記録するシミュレーション結果記録部34と、トレースを記録するトレース記録部35とを持つ。図1のトレース入力部11は、図2に示すトレース記録部からトレースを読み込む。
図3および図4は、外部装置の他の例を示す。これらの外部装置は、本発明をソフトウェア開発に適用する場合に用いられる。図3に示す外部装置は、ソースコードのコンパイルを行って実行ファイルを生成するコンパイラ部41と、実行ファイルを実行して実行結果及びトレースを出力する実行部42と、実行結果を記録する実行結果記録部43と、トレースを記録するトレース記録部44と、を持つ。図1のトレース入力部11は、図3に示すトレース記録部からトレースを読み出す。
図4に示す外部装置は、ソースコードの解釈実行を行い、実行結果及びトレースを出力するインタプリタ部51と、実行結果を記録する実行結果記録部52と、トレースを記録するトレース記録部53を持つ。図1のトレース入力部11は、図4に示すトレース記録部53からトレースを読み出す。
図2のシミュレーション部33が出力したトレース、または図3の実行ファイルの実行により実行部42が出力したトレースの一例を図8に示す。このトレースは高位レベルのイベントが A 、B 、Cの順に発生し、それぞれのイベントは低位のイベントとして a1 と a2 、b1 と b2 、c1 と c2 を持つ。“begin”はイベントの開始を示し、“end”はイベントの終了を表す。本実施形態ではレベルを自然数で表現する。ここでは、A など高位のイベントのレベルを 1 、a1 など低位のイベントのレベルを 2 とする。
イベントレベルデータベース部14は、イベントが属するレベル(階層レベルあるいはイベントレベル)の情報を保持するデータベースを管理する。イベントレベルデータベース部14は、イベントの入力を受け、そのイベントが属するレベル(階層レベル)をデータベースから特定して出力する。データベースの一例を図10に示す。
本発明をデジタル回路を含む電子システムの設計に適用する場合は、このデータベースは設計記述を静的解析することで構築できる。また、本発明をソフトウェア開発に適用する場合は、このデータベースはソースコードを静的解析することで構築できる。データベースの構築には任意の方法を用いることができ、本発明は、このデータベースを構築する方法の詳細を限定しない。
アサーション入力部(アサーション入力受付部)15はイベントが起こる順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け、アサーション記述の抽象構文木またはそれに準ずる表現であるアサーション内部表現を生成し出力する。
“含意”とは、計算機論理式等のアサーション記述言語において、「A が真ならば B が真である」という論理を表す式のことである。また、Aに相当する式を“前件”、Bに相当する式を“後件”という。含意は通常 A -> Bのように矢印で表現される。この矢印を“含意記号”という。
アサーションの一例を図9に示す。このアサーションは、A が発生し、次にb1 が発生し、次にb2 が発生した場合は、次に C が発生するという性質を表明している。“NEXT”が“次に”を表す時相演算子に相当する。図9のアサーションに対して生成されるアサーション内部表現を図11に示す。
イベント取捨選択部12は、トレース入力部11が出力したトレースと、アサーション入力部15が出力したアサーション内部表現を受け取り、トレースから、アサーション内部表現に含まれない不必要なイベントを除去する。不要なイベントとは、自分自身もしくは兄弟イベントもしくは子イベントのいずれもアサーション内部表現において指示されないイベント(すなわちアサーション内部表現に自分自身もしくは兄弟イベントもしくは子イベントのいずれも含まれないイベント)のことである。不要なイベントを削除することによってトレースの量を削減し、検証の高速化を図ることができる。たとえば図8のトレースから、図9のアサーション(図11のアサーション内部表現)に基づき不要なイベントを削除すると、図12のトレースが得られる。イベントa1, a2, c1, c2が不要なイベントとして削除されている。なおa1,a2同士、b2,b2同士、およびc1,c2同士は兄弟関係にある。またAと、a1,a2とは親子関係にあり、a1,a2はAの子である。同様に、Bとb1,b2の関係、およびCとc1,c2の関係も、親子関係である。
イベント階層構築部(階層構造トレース生成部)13は、イベント取捨選択部12が出力したトレースから、トレースの階層構造を復元・構築する。つまり、トレースに含まれる各イベントが属する階層レベルを特定し、階層レベル別にイベントの順序を表した階層構造トレースを生成する。イベント階層構築部13の処理の流れを図5のフローチャートに示す。
イベント階層構築部13は、まずトレースを読み込み(S11)、空トレース 1 つを用いて、スタックを初期化し(S12)、トレース内のイベントを順次判定する。そのイベントがイベントの開始を表す場合は(S13のYES)、それをスタック先頭のトレースに追加した上で(S14)、それをスタックに詰む(S15)。そうでなければ (つまりイベントの終了を表す場合は)(S13のNO)、スタックからイベントを 1 つ降ろす(S16)。順次判定が終了した後では、スタックには、階層構造トレースが 1 つだけ保持されているので、イベント階層構築部13は最後にこの階層構造トレースを取り出し(S17)、出力する(S18)。
上記図5のフローチャートの処理の具体例は後述する。図12の削除後のトレースに対し本フローチャートの処理を行うと図14の階層構造トレース(イベント階層構造)が得られる。
含意列挙部16は、アサーション内部表現を再帰的に探索し、含意に相当する部分式を列挙する。たとえば図9のアサーション(図11のアサーション内部表現)の場合、3つの部分式、すなわち、b2 -> next C と b1 -> next (b2 -> next C) と A -> next (b1 -> next (b2 -> next C))が列挙される。含意列挙部16の処理の流れを図6のフローチャートに示す。含意はその前件または後件において小さな含意を持つことがあるため、含意を発見した場合は、最初に前件の含意を列挙し、次に後件の含意を列挙し、最後にこの発見した含意を出力する。これによって、含意列挙部16はより小さい含意を先に列挙する。
より詳細には、含意列挙部16は、アサーション内部表現の入力を受け(S21)、アサーション内部表現をルートノードから辿り、含意を発見した場合は(S22のYES)、最初に前件について本フローチャートの再帰処理を行い(ノードを進め)(S23)、次に後件について再帰処理を行い(S24)、含意を出力し(S25)、処理(あるいは再帰処理)を終了する。イベントを発見したときは(S26のYES)、何も行うことなく、処理(あるいは再帰処理)を終了する。ノードのデータが含意でもイベントでもないときは(S26のNO)、再帰処理を行う(S27)。上記図6のフローチャートの処理の具体例は後述する。
含意列挙部16は、列挙した各含意を含意レベル判定部17および含意レベル注釈部18に出力する。この後、含意列挙部16は、含意レベル注釈部18により各含意にレベル(階層レベル)が注釈されたイベントレベル注釈済みアサーション内部表現(後述する図15参照)を、含意レベル注釈部18から取得し、これを真偽判定部19に出力する。
含意レベル判定部(階層レベル選択部)17は、含意列挙部16により列挙された各含意のレベルをそれぞれ判定して含意レベル注釈部18に出力する。判定の方法としては、
(1)前件のレベルを含意のレベルとする方法
(2)後件のレベルを含意のレベルとする方法
(3)前件のレベルと後件のレベルの高い方を含意のレベルとする方法
(4)前件のレベルと後件のレベルの低い方を含意のレベルとする方法
がある。各方法の詳細については、後述する各実施例において説明する。含意に対して設定されたレベルは、たとえば選択階層レベルに相当する。
含意レベル判定部17の処理の流れの一例を図7に示す。図7に示す処理は、含意のレベルを、当該含意の前件のレベルに合わせる方法を実行するものである。
まず含意から前件を取り出し(S31、S32)、前件がイベントである場合は(S33のNO、S34のYES)、イベントレベルデータベース部14に問い合わせてそのイベントに対応するレベルを取得して(S35)、出力する(S39)。前件が含意である場合は(S33のYES)、含意に注釈されているレベルを読み込んで(S38)、出力する(S39)。前件がイベントでも含意でもない場合は(S33のNO、S34のNO)、前件を再帰的に探索してレベルを判定する(S36)。この再帰によって複数のレベルの候補が得られた場合は、候補を選択して(S37)、出力する(S39)。S37での選択では、(A)最も高いレベルを採用する方法(後述する実施例6)と、(B)最も低いレベルを採用する方法(後述する実施例7)とがある。図7の処理の具体例については後述する。
含意レベル注釈部18は、含意列挙部16の出力した含意と、含意レベル判定部17の出力したレベルとを読み込み、含意にレベルを注釈し(割り当て)、イベントレベル注釈済みアサーション内部表現を含意列挙部16に返す。
真偽判定部19は、イベント階層構築部13が出力した階層構造トレースと、含意列挙部16が出力したイベントレベル注釈済みアサーション内部表現とを用いて真偽判定を行う。従来の時相論理式判定では、1レベルのトレースとアサーション内部表現とを受け取り、トレースがアサーションを満たすかどうかの真偽を判定するが、本実施の形態における真偽判定部19の動作は、含意記号を評価する際に、入力されるトレースを、含意記号に注釈されたレベルのトレースに切り替える。つまり真偽判定部19は、含意に含まれる時相演算子に対する処理を、含意に注釈された階層レベルのトレースに基づいて行う。真偽判定部19は、判定の結果(真または偽)を判定結果保持部20に格納する。真偽判定部19の処理の具体例は後述する。
本実施例では、図8のトレースが図9のアサーションを満たしていることを検証する場合の動作を解説する。
イベントレベルデータベース部14は、図10に示すイベントとレベルの対応を保持する。例えば、イベントレベルデータベース部14は、Aの問い合わせを受けた場合、問い合わせ元に 1 を返答する。a1の問い合わせを受けた場合、問い合わせ元に 2 を返答する。
アサーション入力部15は、図9に示したアサーション(A -> next (b1 -> next (b2 -> next C)))を読み込み、図11に示すアサーション内部表現を出力する。
イベント取捨選択部12は、図8に示したトレースと、図11に示すアサーション内部表現を読み込み、図8のトレースから不要なイベントを除去する。ここでは、a1 、a2 、c1 、c2 を除去し、図12に示すトレースを出力する。
イベント階層構築部13は、図12に示したトレースを読み込み、図14に示す階層構造トレースを出力する。イベント階層構築部13の動作を図5のフローチャートに従って詳細に説明する。
最初に図12に示したトレースを読み込み(S11)、スタックを空のトレース 1 つによって初期化し(S12)、トレースを順次読み込む。初期状態のスタックを { [] } と表記する。外の {} がスタックを、中の [] がトレースを表す。
まず begin A を読み込む。これは開始イベントであるため(S13のYES)、スタック先頭のトレースに A を挿入する(S14)。これによってスタックが { [A[]] } となる。
次にスタックに A を挿入する(S15)。これによってスタックが { [A[]], A[] } となる。
次に end A を読み込む。これは終了イベントであるため(S13のNO)、スタックを 1 つ降ろす(S16)。これによってスタックが { [A[]] } となる。
これを繰り返すことで、図13のようにスタックが遷移し、最終的にスタックは { [A[], B[b1[], b2[]], C[]] } となる。以上の手続きによって、イベント階層構築部13は、図14に示す階層構造トレースを取得し出力する。
含意列挙部16は、図11に示すアサーション内部表現を読み込み、含意を検出し出力する。含意列挙部16の動作を図6に示すフローチャートに従って説明する。
図11に示すアサーション内部表現を読み込む(S21)。これは全体として含意である(S22のYES)。
したがってまず前件 Aに対して再帰を行う(S23)。A はイベントであるため(S22のNO、S26のYES)、そのまま終了する。
次に後件に対して再帰を行う(S24)。next (b1 -> next (b2 -> next C)) は含意でもイベントでもないため(S22のNO、S26のNO)、さらに再帰を行う(S27)。
次の b1 -> next (b2 -> next C) は全体として含意であるため(S22のYES)、前件 b1に対して再帰を行う(S23)。
b1 はイベントであるため(S22のNO、S26のYES)、そのまま終了する。
次に後件に対して再帰を行う(S24)。next (b2 -> next C) は含意でもイベントでもないため(S22のNO、S26のNO)、さらに再帰を行う(S27)。
次の b2 -> next C は全体として含意であるため(S22のYES)、前件 b2に対して再帰を行う(S23)。
b2 はイベントであるため(S22のNO、S26のYES)、そのまま終了する。
次に後件に対して再帰を行う。next C は含意でもイベントでもないため(S22のNO、S26のNO)、さらに再帰を行う(S27)。
次の C はイベントであるため(S22のNO、S26のYES)、そのまま終了する。
この後、b2 -> next C を出力し(S25)、次に b1 -> next (b2 -> next C) を出力し(S25)、さらにA -> next (b1 -> next (b2 -> next C)) を出力する(S25)。
各出力された含意は含意レベル判定部17および含意レベル注釈部18に送られる。
含意レベル判定部17は、含意列挙部16が出力した含意を順次読み込み、含意のレベルを判定する。図7に示すフローチャートに従う場合(すなわち前件のイベントレベルに含意のレベルを合わせる場合)、b2 -> next C と b1 -> next (b2 -> next C) と A -> next (b1 -> next (b2 -> next C)) を入力し、それぞれ 2 、2 、1 を出力する。
b2 -> next Cに対する処理を例に含意レベル判定部17の動作を示すと、まず b2 -> next C を読み込み(S31)、b2 -> next Cの前件である b2 を取り出す(S32)。この前件はイベントであるため(S33のNO、S34のYES)、イベントレベルデータベース部14に b2のレベルを問い合わせる。その結果 2 を得て、含意のレベルとして出力する。他の含意に対しても同様である。
含意レベル注釈部18は、含意列挙部16が出力した含意と、含意レベル判定部17が出力したレベルとを受け取り、含意に注釈を行う。すなわち b2 -> next C と 2 とからb2 ->[2] next C を生成する。次に b1 -> next (b2 ->[2] next C) と 2とから、b1 ->[2] next (b2 ->[2] next C) を生成する。最後に A ->[ next (b1 ->[2] next (b2 ->[2] next C)) と 1とから、A ->[1] next (b1 ->[2] next (b2 ->[2] next C)) を生成する。A ->[1] next (b1 ->[2] next (b2 ->[2] next C))は図15に示すイベントレベル注釈済みアサーション内部表現に相当する。
真偽判定部19は、図14に示す階層構造トレースと、図15に示すイベントレベル注釈済みアサーション内部表現との入力を受け、トレースがアサーションを満たしているかどうかを判定する。含意記号を評価する際は、入力するトレースを、含意記号に注釈されたレベルのトレースへ切り替える。つまり、含意に含まれる時相演算子に対する処理を、含意記号に注釈されたレベルのトレースに基づいて行う。
より詳細に、A ->[1] next (b1 ->[2] next (b2 ->[2] next C)) を評価する場合は A および next (b1 ->[2] next (b2 ->[2] next C)) をレベル 1に基づいて評価する。図14に示す階層構造トレースは最初の時点で A が真であるため、次の Bの時点で b1 ->[2] next (b2 ->[2] next C) が成立するかどうか判定する。
b1 ->[2] next (b2 ->[2] next C) を評価する場合は、b1 および next (b2 ->[2] next C) をレベル 2に基づいて評価する。レベル2において、Aの次はb1である。したがってb1 が真であるため b2の時点で b2 ->[2] next C が成立するかどうか判定する。
b2 ->[2] next C を評価する場合は b2 および next C をレベル 2に基づいて評価する。b2 は真であるため、次の時点で C が成立するかどうかを判定する。ここではレベル 2のイベントが終端に到達するため、レベル 1に移動し、次の時点で C が成立するかどうかを判定する。これは成立するため、最終的に図8のトレースは、図9のアサーションを満たしていたことがわかり、真偽判定部19は真を出力する。
本実施例2では、図9の代わりに図16のアサーションを用い、図8のトレースが図16のアサーションを満たしていないことを検証する場合の動作を解説する。
本実施例2におけるイベントレベルデータベース部14、イベント取捨選択部12、イベント階層構築部13、含意列挙部16の動作は、実施例1と同じである。
アサーション入力部15は、図16に示すアサーションを読み込み、図17に示すアサーション内部表現を出力する。「C&&D」はCとDが同時に成立することを意味する。
含意レベル判定部17および含意レベル注釈部18は実施例1と同様に動作し、図18に示すイベントレベル注釈済みアサーション内部表現が得られる。
真偽判定部19は、図14に示す階層構造トレースと図18に示すイベントレベル注釈済みアサーション内部表現とを読み込み、トレースがアサーションを満たしているかどうかを判定する。
すなわち、A ->[1] next (b1 ->[2] next (b2 ->[2] next (C && D))) を評価する場合は A および next (b1 ->[2] next (b2 ->[2] next (C && D))) をレベル 1に基づいて評価する。図14に示す階層構造トレースは最初の時点で A が真であるため、次の Bの時点で b1 ->[2] next (b2 ->[2] next C) が成立するかどうか判定する。
b1 ->[2] next (b2 ->[2] next (C && D)) を評価する場合は、b1 および next (b2 ->[2] next (C && D)) をレベル 2に基づいて評価する。これは b1 および b2のトレースについて判定し、b1 が真であるため b2の時点で b2 ->[2] next (C && D) が成立するかどうか判定する。
b2 ->[2] next (C && D) を評価する場合は b2 および next (C && D) をレベル 2に基づいて評価する。b2 は真であるため、次の時点で (C && D) が成立するかどうかを判定する。ここではレベル 2のイベントが終端に到達するため、レベル 1に移動し、次の時点で (C && D) が成立するかどうかを判定する。これは成立しないため、最終的に図8のトレースは図16のアサーションを満たしていないことがわかり、真偽判定部19は偽を出力する。
本実施例3におけるイベントレベルデータベース部14、アサーション入力部15、イベント取捨選択部12、イベント階層構築部13、含意列挙部16の動作は、実施例1と同じである。
本実施例3における含意レベル判定部17は含意列挙部16が出力した含意を順次読み込み、含意のレベルとして、後件のレベルを割り当てる。
すなわち b2 -> next C と b1 -> next (b2 -> next C) と A -> next (b1 -> next (b2 -> next C)) の入力を受け、それぞれ 1 、1 、1 を出力する。ここでは b2 -> next Cに対する処理を説明する。
まず b2 -> next C を読み込み、b2 -> next Cの後件である next C を取り出す。この後件は含意でもイベントでもないため再帰を行う。次の C はイベントであるため、イベントレベルデータベース部14に Cのレベルを問い合わせる。その結果 1 を得て、含意のレベルとして出力する。他の含意に対しても同様である。
含意レベル注釈部18は、実施例1と同様に動作する。すなわち、b2 -> next C と 1とから、b2 ->[1] next C を生成する。次に b1 -> next (b2 ->[1] next C) と 1 とから、b1 ->[1] next (b2 ->[1] next C) を生成する。最後に A ->[ next (b1 ->[1] next (b2 ->[1] next C)) と 1 とからA ->[1] next (b1 ->[1] next (b2 ->[1] next C)) を生成する。A ->[1] next (b1 ->[1] next (b2 ->[1] next C))を含意列挙部16に返し、含意例列挙部16はこれを真偽判定部19に送る。
真偽判定部19は、A ->[1] next (b1 ->[1] next (b2 ->[1] next C)) を評価する場合は A および next (b1 ->[1] next (b2 ->[1] next C)) をレベル 1に基づいて評価する。図14に示す階層構造トレースは最初の時点で A が真であるため、次の Bの時点で b1 ->[1] next (b2 ->[1] next C) が成立するかどうか判定する。
b1 ->[1] next (b2 ->[1] next C) を評価する場合は、b1 および next (b2 ->[1] next C) をレベル 1に基づいて評価する。b1 が真であるため Cの時点で b2 ->[2] next C が成立するかどうか判定する。
b2 ->[2] next C を評価する場合は b2 および next C をレベル 1に基づいて評価する。b2 は偽であるため、この式は真である。したがって、最終的に図8のトレースは図9のアサーションを満たしていたことがわかり、真偽判定部19は真を出力する。
本実施例では、含意レベル判定部17の処理において、含意のレベルとして、前件および後件のレベルのうち、高い方のレベルを割り当てる例を説明する。
本実施例4におけるイベントレベルデータベース部14、アサーション入力部15、イベント取捨選択部12、イベント階層構築部13、含意列挙部16、含意レベル注釈部18、真偽判定部19の動作は、実施例3と同じである。
含意レベル判定部17は、含意列挙部16が出力した含意を順次読み込み、含意のレベルとして、前件および後件のレベルのうち、高い方のレベルを割り当てる。
すなわち b2 -> next C と b1 -> next (b2 -> next C) と A -> next (b1 -> next (b2 -> next C)) を入力し、それぞれ 1 、1 、1 を出力する。ここでは b2 -> next Cに対する処理を説明する。
まず b2 -> next C を読み込み、b2 -> next Cの前件である b2 を取り出す。この前件はイベントであるため、イベントレベルデータベース部14に b1のレベルを問い合わせる。その結果 2 を得る。次に b2 -> next Cの後件である next C を取り出す。この後件は含意でもイベントでもないため再帰を行う。次の C はイベントであるため、イベントレベルデータベース部14に Cのレベルを問い合わせる。その結果 1 を得る。得た 2 つのレベルのうち、より高いレベルである 1 を採用して出力する。他の含意に対しても同様である。
本実施例では、含意レベル判定部17の処理において、含意のレベルとして、前件および後件のレベルのうち、低い方のレベルを割り当てる例を説明する。
本実施例5におけるイベントレベルデータベース部14、アサーション入力部15、イベント取捨選択部12、イベント階層構築部13、含意列挙部16、含意レベル注釈部18、真偽判定部19の動作は、実施例1と同じである。
含意レベル判定部17は含意列挙部16が出力した含意を順次読み込み、含意のレベルとして、前件および後件のレベルのうち、低い方のレベルを割り当てる。すなわち b2 -> next C と b1 -> next (b2 -> next C) と A -> next (b1 -> next (b2 -> next C)) の入力を受け、それぞれ 1 、2 、2 を出力する。
ここでは b2 -> next Cに対する処理を説明する。
まず b2 -> next C を読み込み、b2 -> next Cの前件である b2 を取り出す。この前件はイベントであるため、イベントレベルデータベース部14に b1のレベルを問い合わせる。その結果 2 を得る。次に b2 -> next Cの後件である next C を取り出す。この後件は含意でもイベントでもないため再帰を行う。次の C はイベントであるため、イベントレベルデータベース部14に Cのレベルを問い合わせる。その結果 1 を得る。得た 2 つのレベルうち、より低いレベルである 2 を採用して出力する。他の含意に対しても同様である。
本実施例6では、図8のトレースと図19のアサーションを適用した場合の各部の挙動を説明する。
本実施例6におけるイベントレベルデータベース部14、アサーション入力部15の動作は、実施例1と同じである。
イベント取捨選択部12は、実施例1と同様に働き、図20のトレースを出力する。
イベント階層構築部13は、実施例1と同様に働き、図21の階層構造トレースを出力する。
含意列挙部16は、アサーション内部表現に含まれる含意は1つのみであるため、1 回だけ、含意 A && a1 -> next B を列挙する。
含意レベル判定部17は含意列挙部16が出力した含意を読み込み、含意のレベルとして、前件のレベルを割り当てる。ここで、前件のレベルとなる候補が複数存在するときは、最も高いレベルを選択する。以下、図7のフローチャートを参照してこの処理を詳細に説明する。
まず A && a1 -> next B を読み込み(図7のS31)、A && a1 -> next Bの前件である A && a1 を取り出す(S32)。この前件は含意でもイベントでないため(S33のNO、S34のNO)再帰を行う(図7のS36)。次の A はイベントであるため、イベントレベルデータベース部14に Aのレベルを問い合わせる(S35)。その結果 1 を得る。もう一つの a1 はイベントであるため、イベントレベルデータベース部14にa1のレベルを問い合わせる(S35)。この結果 2 を得る。レベルとなる候補が 2 つ得られたため、より高いレベルである1を選択し(S37)、出力する。
含意レベル注釈部18は、A && a1 -> next B と 1 を受け取り、A && a1 ->[1] next B を出力する。
真偽判定部19は、実施例1と同様に働き、図21に示す階層構造トレースと A && a1 ->[1] next B の入力を受け、トレースがアサーションを満たしているかどうかを判定する。
A && a1 ->[1] next B を評価する場合は A && a1 および next B をレベル 1に基づいて評価する。図21に示す階層構造トレースではこれらはともに成立する。よって図8のトレースは図19のアサーションを満たし、真偽判定部19は真を出力する。
本実施例では前件に複数のレベル候補が存在する場合を説明したが、後件のレベルを用いた、含意レベル判定を行う場合も本実施例と同様にして行うことができる。すなわち、後件に複数のレベル候補が存在するときは、複数の候補のうち最も高いレベルを選択すればよい。
本実施例7では、図8のトレースと図19のアサーションを適用した場合の各部の挙動を説明する。
本実施例7におけるイベントレベルデータベース部14、アサーション入力部15、イベント取捨選択部12、イベント階層構築部13、含意列挙部16の動作は、実施例6と同じである。
含意レベル判定部17は、含意列挙部16が出力した含意を順次読み込み、含意のレベルとして、前件のレベルを割り当てる。ここで、前件のレベルとなる候補が複数存在するときは、最も低いレベルを選択する。以下、図7のフローチャートを参照してこの処理を詳細に説明する。
まず A && a1 -> next B を読み込み(S31)、A && a1 -> next Bの前件である A && a1 を取り出す(S32)。この前件は含意でもイベントでないため(S33のNO、S34のNO)再帰を行う(図7のS36)。次の A はイベントであるため、イベントレベルデータベース部14に Aのレベルを問い合わせる(S35)。その結果 1 を得る。もう一つの a1 はイベントであるため、イベントレベルデータベース部14に a1のレベルを問い合わせる(S35)。この結果 2 を得る。レベルとなる候補が 2 つ得られたため、より低いレベルである2を採用して出力する。
含意レベル注釈部18は、A && a1 -> next B と 2 を受け取り、A && a1 ->[2] next B を出力する。
真偽判定部19は、実施例1 と同様に働き、図21に示す階層構造トレースと A && a1 ->[2] next B の入力を受け、トレースがアサーションを満たしているかどうかを判定する。
A && a1 ->[2] next B を評価する場合は A && a1 および next B をレベル 2に基づいて評価する。すなわち、a1 と a2 からなるトレースについてこれを評価する。A && a1 は真であるが、a1の次は a2 であり B は成り立たないため、next B は偽となる。最終的に図8のトレースは図19のアサーションを満たしていないことがわかり、真偽判定部19は偽を出力する。
本実施例では前件に複数のレベル候補が存在する場合を説明したが、後件のレベルを用いた、含意レベル判定を行う場合も本実施例と同様にして行うことができる。すなわち、後件に複数のレベル候補が存在するときは、複数の候補のうち最も低いレベルを選択すればよい。
これまで述べた本発明の実施例1〜7の説明では、アサーションは1つのみであったが、本発明は、同時に複数のアサーションを扱う場合にも当然に拡張可能である。この場合は、含意列挙部16、含意レベル判定部17、含意レベル注釈部18をアサーション毎に適用すればよい。
またこれまで述べた本発明の実施例1〜7の説明では、時相演算子としてNEXTを用いた例を示したが、本発明はこれに限定されず、たとえばALWAYS, EVENTUALLY, UNTIL、など他の種類の時相演算子を用いることも当然に可能である。たとえば「A->ALWAYS B」はAが成立したらその後は常にBが成り立つことを意味し、「A->EVENTUALLY B」はAが成立したらその後は必ずいつかBが成り立つことを意味し、「A-> C UNTIL B」は、Aが成立したらその後は、Bが成立するまでCが常に成り立つことを意味する。
以上のように、本発明の実施の形態によれば、アサーション記述言語における含意記号にイベントのレベル(階層レベル)を割り当てることによって、高位レベルのイベントに関するアサーションが正確に、かつ簡単に記述できるようになるため、検証の精度と効率が向上し、デジタル回路やソフトウェアの品質の向上や開発期間の短縮を図れる。
なお、以上に説明した本実施形態における検証装置は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、検証装置におけるトレース入力部、イベント取捨選択部、イベント階層構築部、アサーション入力部、含意列挙部、含意レベル判定部、含意レベル注釈部、真偽判定部は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、検証装置は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。
本発明の一実施の形態としての検証装置の構成を概略的に示すブロック図である。 トレースを生成する外部装置の一例を示す図。 トレースを生成する外部装置の他の例を示す図。 トレースを生成する外部装置のさらに他の例を示す図。 イベント階層構築部の処理の流れを示すフローチャート。 含意列挙部の処理の流れを示すフローチャート。 含意レベル判定部の処理の流れの一例を示すフローチャート。 トレースの一例を示す図。 アサーションの一例を示す図。 イベントレベルデータベース部の内容の一例を示す図。 図9のアサーションの内部表現を示す図。 削除後トレースの例を示す図。 イベント階層構築部の処理を説明する図。 階層構造トレースの一例を示す図。 イベントレベル注釈済みアサーション内部表現の一例を示す図。 アサーションの他の例を示す図。 図16のアサーションの内部表現を示す図。 イベントレベル注釈済みアサーション内部表現の他の例を示す図。 アサーションのさらに他の例を示す図。 削除後トレースの他の例を示す図。 階層構造トレースの他の例を示す図。
符号の説明
11:トレース入力部(トレース入力受付部)
12:イベント取捨選択部
13:イベント階層構築部
14:イベントレベルデータベース部
15:アサーション入力部(アサーション入力受付部)
16:含意列挙部
17:含意レベル判定部(階層レベル選択部)
18:含意レベル注釈部
19:真偽判定部
20:判定結果保持部

Claims (9)

  1. 複数の各イベントの開始および終了をそれぞれ時系列に記録したトレースの入力を受け付けるトレース入力受付部と、
    前記イベントの発生順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け付けるアサーション入力受付部と、
    前記トレースに基づき前記複数のイベントの階層構造を解析し、階層レベル毎に前記イベントの発生順序を表した階層構造トレースを生成する階層構造トレース生成部と、
    前記アサーションに含まれる前記含意の前件および後件の少なくとも一方に基づいて各前記階層レベルのうちの1つである選択階層レベルを選択する階層レベル選択部と、
    前記階層構造トレースに基づき、前記アサーションの真偽を判定する真偽判定部と
    を具備し、
    前記真偽判定部は、前記含意に含まれる前記時相演算子に対する処理を、前記階層構造トレースにおける前記選択階層レベルのトレースに基づいて行う
    ことを特徴とする検証装置。
  2. 前記含意の前件には1つ以上のイベントまたは第2の含意またはこれらの両方が含まれ、
    前記階層レベル選択部は、各イベントの階層レベルまたは前記第2の含意について選択された選択階層レベルのうち最も高いものを前記含意の前記選択階層レベルとして選択する
    ことを特徴とする請求項1に記載の検証装置。
  3. 前記含意の前件には1つ以上のイベントまたは第2の含意またはこれらの両方が含まれ、
    前記階層レベル選択部は、各イベントの階層レベルまたは前記第2の含意について選択された選択階層レベルのうち最も低いものを前記含意の前記選択階層レベルとして選択する
    ことを特徴とする請求項1に記載の検証装置。
  4. 前記含意の後件には1つ以上のイベントまたは第3の含意またはこれらの両方が含まれ、
    前記階層レベル選択部は、各イベントの階層レベルおよび前記第3の含意について選択された選択階層レベルのうち最も高いものを前記含意の前記選択階層レベルとして選択する
    ことを特徴とする請求項1に記載の検証装置。
  5. 前記含意の後件には1つ以上のイベントまたは第3の含意またはこれらの両方が含まれ、
    前記階層レベル選択部は、各イベントの階層レベルまたは前記第3の含意について選択された選択階層レベルのうち最も低いものを前記含意の前記選択階層レベルとして選択する
    ことを特徴とする請求項1に記載の検証装置。
  6. 前記含意の前件には1つ以上のイベントまたは第2の含意またはこれらの両方が含まれ、
    前記含意の後件には1つ以上のイベントまたは第3の含意またはこれらの両方が含まれ、
    前記階層レベル選択部は、
    前記含意の前件について各イベントの階層レベルまたは前記第2の含意について選択された選択階層レベルのうち最も高いものまたは最も低いものを第1の階層レベルとして選択し、
    前記含意の後件について、各イベントの階層レベルおよび前記第3の含意について選択された選択階層レベルのうち最も高いものまたは最も低いものを第2の階層レベルとして選択し、
    前記第1の階層レベルおよび前記第2の階層レベルのうち高い方または低い方を前記含意の前記選択階層レベルとして選択する
    ことを特徴とする請求項1に記載の検証装置。
  7. 前記アサーションを解析して構文木を生成する構文木生成部をさらに備え、
    前記アサーションに含まれず、かつ、前記アサーションに含まれるイベントを兄弟または子のいずれにもたないイベントに関する情報を前記トレースから削除するイベント削除部をさらに備え、
    前記階層構造トレース生成部は、削除後の前記トレースを用いる
    ことを特徴とする請求項1ないし6のいずれか一項に記載の検証装置。
  8. 複数の各イベントの開始および終了をそれぞれ時系列に記録したトレースの入力を受け付けるトレース入力受付ステップと、
    前記イベントの発生順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け付けるアサーション入力受付ステップと、
    前記トレースに基づき前記複数のイベントの階層構造を解析し、階層レベル毎に前記イベントの発生順序を表した階層構造トレースを生成する階層構造トレース生成ステップと、
    前記アサーションに含まれる前記含意の前件および後件の少なくとも一方に基づいて各前記階層レベルのうちの1つである選択階層レベルを選択する階層レベル選択ステップと、
    前記階層構造トレースに基づき、前記アサーションの真偽を判定する真偽判定ステップと
    を具備し、
    前記真偽判定ステップは、前記含意に含まれる前記時相演算子に対する処理を、前記階層構造トレースにおける前記選択階層レベルのトレースに基づいて行う
    ことを特徴とする検証方法。
  9. コンピュータに実行させるための検証プログラムであって、
    複数の各イベントの開始および終了をそれぞれ時系列に記録したトレースの入力を受け付けるトレース入力受付ステップと、
    前記イベントの発生順序に関する性質または制約を、時相演算子を含む含意により記述したアサーションの入力を受け付けるアサーション入力受付ステップと、
    前記トレースに基づき前記複数のイベントの階層構造を解析し、階層レベル毎に前記イベントの発生順序を表した階層構造トレースを生成する階層構造トレース生成ステップと、
    前記アサーションに含まれる前記含意の前件および後件の少なくとも一方に基づいて各前記階層レベルのうちの1つである選択階層レベルを選択する階層レベル選択ステップと、
    前記階層構造トレースに基づき、前記アサーションの真偽を判定する真偽判定ステップと
    を具備し、
    前記真偽判定ステップは、前記含意に含まれる前記時相演算子に対する処理を、前記階層構造トレースにおける前記選択階層レベルのトレースに基づいて行う
    ことを特徴とする検証プログラム。
JP2008129771A 2008-05-16 2008-05-16 検証装置、検証方法および検証プログラム Pending JP2009277135A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008129771A JP2009277135A (ja) 2008-05-16 2008-05-16 検証装置、検証方法および検証プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008129771A JP2009277135A (ja) 2008-05-16 2008-05-16 検証装置、検証方法および検証プログラム

Publications (1)

Publication Number Publication Date
JP2009277135A true JP2009277135A (ja) 2009-11-26

Family

ID=41442480

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008129771A Pending JP2009277135A (ja) 2008-05-16 2008-05-16 検証装置、検証方法および検証プログラム

Country Status (1)

Country Link
JP (1) JP2009277135A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6129444B1 (ja) * 2016-02-12 2017-05-17 三菱電機株式会社 エンジニアリングツール

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6129444B1 (ja) * 2016-02-12 2017-05-17 三菱電機株式会社 エンジニアリングツール
WO2017138156A1 (ja) * 2016-02-12 2017-08-17 三菱電機株式会社 エンジニアリングツール
CN107295810A (zh) * 2016-02-12 2017-10-24 三菱电机株式会社 工程设计工具
US10295981B2 (en) 2016-02-12 2019-05-21 Mitsubishi Electric Corporation Engineering tool
CN107295810B (zh) * 2016-02-12 2019-07-26 三菱电机株式会社 工程设计工具

Similar Documents

Publication Publication Date Title
van der Aalst Process mining and simulation: A match made in heaven!
Miles et al. Prime: A methodology for developing provenance-aware applications
Riva et al. Combining static and dynamic views for architecture reconstruction
JP4217220B2 (ja) 検証支援プログラムおよび検証支援装置
US8326778B1 (en) Systems and methods for generating predicates and assertions
del Mar Gallardo et al. Debugging UML designs with model checking
JP2007528059A (ja) ソフトウェアのモデル化、抽象、および分析のためのシステムと方法
US8732676B1 (en) System and method for generating unit test based on recorded execution paths
US8838559B1 (en) Data mining through property checks based upon string pattern determinations
CN109299530B (zh) 一种仿真测试案例生成方法、系统、存储介质和终端
US20070129925A1 (en) Logic circuit model conversion apparatus and method thereof; and logic circuit model conversion program
US8418119B2 (en) Logical circuit netlist reduction and model simplification using simulation results containing symbolic values
US8321825B2 (en) Method and system for synthesizing relative timing constraints on an integrated circuit design to facilitate timing verification
US6516306B1 (en) Model checking of message flow diagrams
US20120290282A1 (en) Reachability analysis by logical circuit simulation for providing output sets containing symbolic values
McInnes et al. Formalizing functional flow block diagrams using process algebra and metamodels
Bunker et al. Formal hardware specification languages for protocol compliance verification
US10073938B2 (en) Integrated circuit design verification
US8510693B2 (en) Changing abstraction level of portion of circuit design during verification
CN112416800A (zh) 智能合约的测试方法、装置、设备及存储介质
JP4370335B2 (ja) Lsi解析プログラム、該プログラムを記録した記録媒体、lsi解析装置、およびlsi解析方法
JP2009277135A (ja) 検証装置、検証方法および検証プログラム
CN114691491A (zh) 一种用于智慧屏的用例模板生成方法、系统及介质
Gupta et al. Property-specific testbench generation for guided simulation
WO2004068347A1 (en) Method and apparatus for categorising test scripts