水曜日, 1月 23, 2008

アサーションを使いましょう

と言いつつ、私も実際の業務で積極的に使っているわけではないので自分にも向けて。

アサーションとは、デザインが実行されている間、常に成立すると期待されている条件や動作を宣言することです。

たとえば、

このデザインでは仕様上、入力よりも出力のほうがスループットが高いので
デザイン中のFIFOのFullフラグが立つことは決して無い。


という場合は、「Fullフラグは常に偽である」と宣言します。
これがアサーション。

もちろん、コード中にこのコメントを挿入しても何の効力もないので
(コードを読んだ人間が設計者の意図を読み取れるというメリットはあるが)
何かしら効力のある方法でアサーションを使わなければなりません。

アサーションを記述する方法としては、PSLやSVA(SystemVerilog Assertion)などがあると思いますが、シンプルなアサーションであれば普通のVerilog HDLでも記述できます。

先の例だと、コード中にこんな具合に記述してやるだけです。

`ifdef SIMULATION

always @(posedge CLK) begin
if (FIFO_FULL!=0)
$display("Assertion failed! FIFO full flag should be always 0.");
end

`endif


それほど手間ではないでしょう?

一度記述しておけば、シミュレーションを行うたびにいつもアサーションがデザインを監視してくれるのです。

また、アサーションはデザインの内部で監視しているので、デザインの外で出力をチェックするよりも、バグの原因に近い場所で問題を発見できます。

さらにアサーションの後段の部分に対しては、アサーションでチェックされている部分については常に保障されていることになります。
アサーションを用いず、出力をチェックする場合は、問題が発生した時にデザイン全てを疑わなければならないかもしれませんが、アサーションを記述しておくことで、少なくともそのアサーション周辺やそれらに関連する部分は正しく動作しているということがわかります。

少しの手間が必要ですが、アサーションがあなたのデザインを守ってくれるんです。

シミュレーションだけでなく、アサーションはフォーマル検証にも使用されます。
この場合、フォーマル検証が使えるEDAが必要ですが
テストベンチを書かずにバグを発見することができます。
数学的な手法を用いて、あるデザインにおいて宣言したアサーションが常に成立するかどうかを検証するのです。
あまり大きなデザインには不向きかもしれませんが、動的な検証手法では見つけにくいバグを発見することができるようです。

いきなりOVLなどの検証ライブラリを使用したり、高価なEDAを購入することは難しいという方は、まずは簡単なVerilog HDLでの記述からはじめてはいかがでしょうか?

検証環境を評価するツール

米Certessの検証環境評価ツール「Certitude」、欧米市場に続き日本でも本格的な利用が始まる~ベルギーのVCから100万ドルを追加調達

EDA EXPRESSより。

デザインを検証する環境を作っているときに、
「さて、この検証環境自体はどう検証するべきか?」
と思ったことはないでしょうか?

そういったことが心配な場合にこのツールは役に立つかもしれませんね。

個人的にはデザインと検証環境ともにバグがあるばあいでも
通常結果はNGになり、結果がOKになるのは仕様を誤認している場合ぐらいだと思うので
今までこういったものに必要性を感じたことはあまりありません。

ただ、意図的にバグを組み込んでそれを検証できるかどうかを確認するという発想は面白いですね。

費用対効果のほうがどれほどあるかはわかりませんが。。。

木曜日, 1月 10, 2008

「OVM」、オープンソースとして一般配布を開始

ケイデンスとメンターによるOVMの一般配布が開始されました。

ケイデンスとメンターによるSystemVerilogベースの検証メソドロジ「OVM」、オープンソースとして一般配布を開始


次のサイトからダウンロードできます。

OVM World

AVMと違って、OVMはSystemVerilogのみのようです。

検証メソトロジー関係は興味があるので本やドキュメントなどは少し目を通していますが、まだ実際に現場で使ったことがないので、このようなものをどうやって使えばより検証の効率が上がるのかということはまだ具体的にイメージできていません。

メンターは『AVM Cookbook』のようなものを出してくれないのかな。
クラスのリファレンスやExampleコードなどはありましたが、それだけではまだ自分にとっては厳しいところです。

日本でもすでにVMMやAVMなどを使われているところはいくつかあるんですかね?

ちなみに↓こちらの記事によると
XSTでSystemVerilogサポート(たーぼ のハードウェア設計記録)

FPGAの設計環境も今年からSystemVerilogがサポートされるようになりそうです。

今年から本格的にSystemVerilogを採用するところが増えてきそうですね。

自分も勉強しなきゃ。

月曜日, 1月 07, 2008

DWM JAN.2008 特集1 アルゴリズムのハードウェア化手法

あけましておめでとうございます。

せっかくなので久しぶりに少し書いてみます。
といっても、記事の感想程度ですが。

デザインウェーブマガジン 2008年1月号の特集1
『アルゴリズムのハードウェア化手法』

結構良い内容でした。

現在のシステムLSI設計を上流工程の視点からこのように具体的に書かれているものは珍しい。
ソフトをハード化する上でのメリット・デメリットも詳しく載っていて、ソフト・ハード協調設計をやる上でも有益な情報が多いと思う。

調べてみると記事を書いた森岡澄夫さんは
↓こちらの本の著者でもあるようだ。
HDLによる高性能ディジタル回路設計

実はこれ、自分が就職してから2年目ぐらいのころに結構お世話になった本。
特にモジュール間のインタフェース設計などはこの本で勉強しました。

LSI設計・検証関係の本は日本人の著者のものではあまりおすすめな物が少ないのですが、
この本はLSI設計エンジニア2・3年目ぐらいで初心者から中級者へのステップアップにはちょうど良いのでは思います。