いまさら聞けない!電気回路設計者向け EDA基礎知識 アサーションとは

LSI/FPGAの設計において機能検証は必須で重要なものです。
そのため開発において検証にかける時間の割合は大きく、中でもデバッグには大きな時間を要します。
デバッグ時において時間がかかる1つの原因としてバグの特定があります。
従来のデバッグ方法ではシミュレーションした結果を波形で観測し、意図しない動作を見つけて、そこからバグのトレースを行います。しかし、デザインが大規模化してくると、この作業だけでも大変な工数が必要となります。 下記は、これらの工数を削減するためのアサーションの説明になります。

近年のLSI/FPGAは製造技術の進歩により大規模化、多機能化が急速に進んでいます。
これに伴い回路を検証するポイントが増加する傾向ですが、検証ポイントが増えても開発工数は増えることはなく、激しい競争により開発期間は短くなっているのが現状です。
この限られた期間内に回路品質を向上させるために、沢山の検証ポイントを効率良くかつ精度良く行うことが非常に重要な課題になっています。最近では制約付きランダムテスト、カバレッジ、アサーション検証といった検証手法が採用されており、今回は『アサーション検証』について説明したいと思います。

アサーションとは

設計物が仕様通りに動作しているかをチェックするものであり、仕様が満たされていない(仕様通りに 動作していない)場合はエラーメッセージを表示して、バグがあることを通知します。

従来検証の課題

従来の検証では波形の目視確認やC/C++などのリファレンスモデルを使用した出力端子での結果比較を行う方法がとられています。
目視確認の場合、見落とす可能性があることやチェックポイントが多いと時間を費やす必要があります。
また、回路の修正が発生した場合は同じ時間を費やして再度チェックしなければなりません。
リファレンスモデルを使用した結果比較では、出力端子で結果を確認しているため、回路内部のバグが回路構造により出力端子まで出力されなければ、バグを見落としてしまいます。
出力端子にバグが出力されたとしても、バグの発生した時間やタイミング、発生回路を特定するのに多くの時間を費やすことになります。
この他よくある例として、バグが有ることを設計者に伝えると設計者はまず、他人が設計したモジュールや検証者が作成した検証環境/テストパターンを疑う傾向があり、結果、バグの特定に時間を費やすことにもなります。

アサーションでできること

アサーションを回路内部や入出力端子(例えば、目視確認していた箇所など)に挿入することで、論理シミュレーションを実行した際にツールの方でエラーのメッセージ出力やパス/エラーの回数をレポートします。

この様にアサーションを挿入することで観測ポイントが増え、回路の動作を自動的に監視してくれるので、バグの特定や解析時間が短縮される可能性があります。
アサーションには数サイクルにわたって動作する仕様を表現するための文法が用意されており、例えばマスタモジュールがREQ信号を出力後、スレーブモジュールは5サイクル以内にACK信号を出力するといったプロトコル動作のチェックやステートマシンの状態遷移チェックなどを行うことが可能です。

以上の様にアサーションを導入することによって従来検証での課題を補い、回路品質の向上に役立ちます。
ただし、アサーションは回路と同じ様に言語で記述する必要がありますので、ある程度記述する時間が必要です。
しかし、一度記述して回路に挿入することで論理シミュレーションを実行するたびに自動的に監視し、設計資産を流用した場合でもアサーションを再利用できるためトータル的に検証工数は短縮されます。 まだ、アサーションを導入されていない方は今後、積極的に導入してみては如何でしょうか。
今回ご紹介した内容については、以下の講座、書籍で詳しく解説しています。

転載元:Copyright© 2016 hdLab, Inc. All Rights Reserved.
※転載許可を得て掲載しています。

イメージを含めた具体的な記事については以下↓「アサーション・ベース検証」を参照ください。