アサーションとは

結論書いちゃうと、デカイ回路を作る上でアサーションを記述して検証したほうが多分効率が上がるんじゃないかなって感じです。

HDLを用いたハードウェア開発では、simulationがとても大事です。それは、プログラムとは違い、回路を書いているわけであってプログラムのようにデバッガ任せとかにできないわけです。ましてや、大規模なハードウェアとなると、論理合成に数時間とか数日とか普通です。シミュレーションも時間かかるんですが、実機でいきなりデバッグするより(というかそんなことしちゃダメ)検証効率はすごく高いです。

従来のシミュレーションといえば、テストベンチによって、擬似的にターゲットに対して入力を与えてやり、その出力を見たり、入力と比較して正しく回路が記述できているかを検証する、ブラックボックステストが行われていました。

だけど、ブラックボックステストには限界があって、モジュール内の個々の回路の検証が行えないため、設計者のpropertyに違反しているが、それはそのモジュールからoutputされていない等で、バグが表に出て来なかったり、そのバグの要因を検証するためにトレースが大変という問題があります。

そこで、アサーションを用いる検証が登場したらしいです。例えば、このFIFOは絶対にOverflowしないとか、Reqを送ったら○○cycle以内にAckが来るとか、カウンタは常にこの値に収まる回路とか、それに違反していたらエラーを出力してくれます。便利ですね。

アサーション検証に使われる言語はいくつかあります。有名ドコロでSVA, OVL, PSLとかですかね。でも別にこれらの特殊なものを用いないでも、VerilogとかVHDLでも普通にかけますけどね。

アサーションを導入すべき例

カウンタ

常にXX~○○の範囲しか取らないカウンタ

XXの次は○○になるカウンタ

SVA <code verilog>

<code>

インターフェース

FIFO

ステートマシン