皆さんは RTL 設計に何の言語をお使いですか?
SystemVerilog は最近になって急激にユーザ数を増やしている言語です。

そこで、SystemVerilogをあまり知らない方へ、SystemVerilog の魅力を 基礎編と活用編の2回に分けて簡単にご紹介します。

 

今回の基礎編は、費用をかけずに SystemVerilog を導入するだけで得られるメリットを中心に説明します。

次回の活用編は、費用は発生しますが SystemVerilog のメリットを大きく生かす方法をご紹介します。

 

RTL 検証と実機検証

FPGA による実機検証は高速にシステム( FPGA でなく装置全体)検証できるのは大きな魅力の1つですが、不具合時に内部ノードの観測によるデバッグが不得意です。

そこで、デバッグ効率が高い(修正&検証が早い) RTL 段階で主要なバグを排除し、FPGA を使ったシステム検証でコーナバグを排除する検証スタイルをお勧めしています。

 

SystemVerilog の検証機能を利用すると、従来の論理シミュレーション手法と比べて RTL 段階での検証効率が向上するだけでなく、デザインの再利性が高まるので 設計工数と検証工数の両方を削減できます。

 

高度な検証手法で検証効率向上

検証工数は開発工数の60%以上を占めると言われています。
そんなに多くないと思われるかもしれませんが、検証は最後に行なうシステム検証だけではありません。設計作業は『小規模な設計&検証』の繰り返しなので、設計作業中にも多くの検証作業を行っています。SystemVerilog は 論理検証を同時に扱うことができる最先端の言語です。

 

SystemVerilog がサポートする主な検証機能(対応したEDA ツールが必要です)。

アサーション・ベース検証

制約付きランダム・テストベンチ自動生成

機能カバレッジ

 

(1) アサーション・ベース検証(ABV)

道路の検問所で飲酒運転者を取り締まるように、回路内部の要所要所で信号の動きを検証したり、回路内部にワナを仕掛けてバグの発生原因を特定する、そのようなイメージがアサーション・ベース検証です。

 

重要な動きを仕様(検証項目)として定義し、その仕様に違反したかどうかを自動で検証します。通常の論理シミュレーションは、バグによる誤信号が出力ピンまで届かないとバグの存在に気がつきませんが、アサーション・ベース検証は回路内部のバグの近くで不具合を発見できます。

 


図1.従来のシミュレーション方法


図2.アサーション・ベース検証

従来の手法では発見が困難だった内部バグを早期に発見できるだけでなく、不具合解析時にも便利です。不具合解析で有効だったワナを社内の設計ルールに追加していくと、社内の設計レベルがだんだん向上して行きます。

 

実は、ASIC 業界では数十年前から専用ツールと専用言語でアサーション・ベース検証を使っていました。IP ラインアップを充実させていた頃に 既に量産に使われている IP でも他のデザインで流用すると不具合が頻繁に発見され アサーション・ベース検証は IP のようなデザイン再利用での品質向上に役立ちました。効果が高いのでツール毎にバラバラだった検証言語を標準化して SystemVerilog に取り込みました。最近ではアサーション・ベース検証が常識になり、テストベンチを効率的に生成するツールや論理シミュレーションを実行せずに静的に解析するツールなど新しい製品が次々とリリースされています。

 

SystemVerilog なら 論理設計しながら危ない箇所や見通しが悪い箇所に 検証項目(仕様)を一緒に定義できるので非常に便利です。例えば、下記のような場所に制約(ワナ)を定義して、論理シミュレーション中に自動で検証できます。 

 

設計者が見て誤動作しやすい箇所 

    FIFO のオーバー/アンダーフロー、ステートマシンの割り込みなど

過去にバグを経験した箇所

   過去のバグ経験から早期に不具合を検出できるように制約を定義します。

各ブロックの入力条件

   各ブロックの入力信号条件を制約条件として定義します。

  前段ブロックのバグが原因で次段ブロックで発生するエラーを保護できます。

 

ツールではメンター・グラフィックス社の ModelSim®DE、Questa®Core/Prime/Ultra がこの機能に対応しています。

 

アサーション・ベース検証について詳細はコチラ 

 

(2)制約付きランダム・テストベンチ自動生成

(1)のアサーション・ベース検証を論理シミュレーションで行うにはテストベンチが必要です。回路設計者が作成するテストベンチは、バグを検出するよりも仕様通りに動く事を確認するためのテストベンチが多いので、設計者が意図しない動きによるバグに気づきません。“制約付きランダム・テストベンチ自動生成”機能なら、設計者が想定しないテストベンチを自動でランダムに生成&検証するのでコーナ・バグの検出に有効です。また、出力ピンの期待値を作成する必要もありません。完全にランダムなパターンでは擬似エラーが発生するので、制約を付けたテスト・パターンを生成できます。ツールではメンター・グラフィックス社の Questa Prime/Ultra がこの機能に対応しています。

 

また、カバー率が100%に近づくと、同じパターンが増えてきてカバー率の向上が鈍りシミュレーション時間が長くなるので、繰り返しの少ないテストベンチ(インテリジェント・テストベンチ)を生成する機能を Questa Ultra は搭載しています。

 

(3) 機能カバレッジ

アサーション制約を定義した箇所がシミュレーション中に何回実行されたのか、機能の達成率を調べる機能です。ランダム・テストベンチでアサーションがどの程度カバーしたのかを確認して検証終了の目安にします。メンター・グラフィックス社の Questa Prime/Ultra がこの機能カバレッジに対応していますが、更にカバー率が100%でも検証すべき点が漏れていると困るので、何を検証して何を検証から外して良いのか検証シナリオを立てるための便利な機能を搭載しています。

 

(4) 静的なアサーション・ベース検証

動的なアサーション・ベース検証は、論理シミュレーションを使うのでテストベンチ作成や論理シミュレーションの実行が必要になります。静的なアサーション・ベース検証(フォーマル検証)は、 RTLの論理とアサーション制約からエラーする入力信号の組合せを解析するので、テストベンチの作成や論理シミュレーションを実行する必要はありません。ツールではメンター・グラフィックス社の Questa CDC がこの機能に対応しています。

 

(5) UVM (Universal Verification Methodology)

アサーション・制約を自分で作っても良いのですが、大規模な回路になると作成が困難になります。そこで、検証のスペシャリストが作成した (1)の検証IPと(2)のテストベンチ、検証手法のユーザガイドなどを SystemVerilog 用に標準化して無料でソースを公開しています。詳細はコチラ 

 

SystemVerilog はオブジェクト指向を導入しクラスを扱えますので UVM を使って最先端の検証手法を自分のデザインに取り込めます。

 

UVM の前身 OVM では日本語ユーザガイドが公開されていますので、今後 UVM も日本語をサポートされると思います。

コードカバレッジが設計品質の1つの基準になったように、今後は UVM を使った検証を行ったかどうかが設計品質の基準の1つになると言われています。

ツールではメンター・グラフィックス社の Questa Prime/Ultra がこの機能に対応しています。

 

インタフェースの概念を導入!

SystemVerilog は SystemC で好評なインタフェースをサポートしています。 Verilog-HDL では、複数のモジュール間の接続は記述が面倒でミスが発生しやすい場所でしたが、SystemVerilog ではモジュール間の接続に関する部分は“interface”を使って、独立して定義できます。ブロック内部を変更せずにインタフェース部分の変更で対応できるので RTL を再利用する際に便利です。ツールでは 無償の ModelSim AEを含める全ての ModelSim製品とQuesta Core/Prime/Ultra 製品が対応しています。

 

C言語との I/F が簡単!

SystemVerilog は Verilog-HDL よりテストベンチの記述が楽になりましたが、それでも複雑な記述はC言語を使った方が便利です。

そこで、SystemVerilog ではC言語との I/F を簡単にした DPI(Direct Program Interface) をサポートしました。DPI を使うと、SystemVerilog からCプログラムの関数を読み出したり、逆にCプログラムから SystemVerilog の関数を簡単に呼び出すことができます。 Verilog-HDL でサポートしていた PLI と違って使い方が簡単でシミュレーション速度のオーバヘッドが少ないのが特徴です。ソフトウェアとハードウェアの協調検証に便利な機能です。ツールでは 無償の ModelSim AEを含める全ての ModelSim製品とQuesta Core/Prime/Ultra 製品が対応しています。

利用例を紹介すると、Nios®II を RTL でシミュレーションする代わりに、PC 上の CPU でアプリを処理させて Avalon®バスと I/F 、 RTL の未完成ブロックはCプログラムで動作させて既存の RTL ブロックと混在させた論理シミュレーションを実行、複雑なテストベンチをプログラムで生成させる、期待値とシミュレーション結果を自動照合させた結果のサマリを自分の携帯にメールしている方がいます。

 

多くの EDA ツールが SystemVerilog に対応!

いくら良い言語でも EDA ツールが SystemVerilog に対応していなければ使えません。その点、SystemVerilog は EDA ベンダが先導して標準化した言語なので、各 EDA ベンダが早くから対応しました。また、SystemC などはリントチェック、合成ツール、シミュレーションなどの全てのツールを買い直しになるだけでなく、エミュレータなどの対応できないツールが多いのですが、SystemVerilog は、多くのツールが Verilog-HDL ライセンスだけで SystemVerilog を扱えます。(ただし、Verilog-HDL が持っていない機能である アサーション・ベース検証、制約付きランダム・テストベンチ自動生成、機能カバレッジはそれをサポートしているツールでないと対応できません)

 

是非、皆さんも SystemVerilog を導入して、設計&検証工数の削減にお役立てください。

SystemVerilog の魅力 1 (基礎編)へ