RTL設計・検証  
 


RTL検証

Mentor/Cadence/Synopsys/JEDA

RTL設計は、VerilogあるいはVHDLで記述されています。SystemCでRTL検証環境を構築する場合は、SystemCとVerilogあるいはVHDLとの混在シミュレーション環境が必要となります。Mentor社、Cadence社、Synopsys社のRTLシミュレータは、混在シミュレーションをサポートしており、SystemCでRTLを検証することができます。SystemCは、C++で構成されたC++ライブラリーです。C++は、もっともプログラムの世界でもっとも汎用的に使われています。C/C++には、豊富なソフトウエアライブラリが存在するとで、様々な記述を容易に記述することができます。。

図1 SystemCによるRTL検証環境

図1は、標準的なRTL検証環境の構造図です。RTL検証の王道は、CリファレンスモデルとRTL記述の出力結果を照合する方法です。Cのリファレンスは、高速で動作しますのでCの段階で様々なテストが可能です。また、Cリファレンスは回路設計に存在するクロックタイミングがありませんので、簡単に精度よく仕様を記述することができます。一致性を検証する為には様々な入力パターンが必要となります。設計者が作成する画一的なパターンだけではなく、値をランダムに与えることにより、人間では作り出しにくいコーナーケースを半自動的に作成することで検証精度を向上させます。検証では、ランダムと 言っても実際に存在しない変数と変数の値の組み合わせなどは発生させないよう制約する必要があります。また、よりコーナーケースを効率的に発生させるため、値によって発生確率を変化させたりします。SystemCでは、このような制約付きランダムを与えるSCVと呼ばれるライブラリがあります。SCVは、SystemCと同じくOSCIのホームページからダウンロードします。

RTL検証では、CリファレンスとRTLの一致性を調べるだけでは不十分です。RTL回路には、タイミングが存在します。RTL検証では、このようなタイミング部分と機能部分を分離することが求められます。機能のタイミングを分離することで、より判り易く検証を進めることができます。機能部分と多民具発生部分は、fifoで接続します。fifoの先には、タイミングを生成するアダプタ部が存在にRTLに入力するタイミングを作りだします。RTLには様々な条件をあたえなけらなりません。アダプタには、様々なタイミングをランダムで自動的に発生できる仕組みを内蔵し、さらに様々なエラータイミングを発生するモードを設定します。タイミング部分の検証は、アサーション記述ではありとあらゆるタイミング問題をチェックします。

このようなRTL検証環境は、動作合成を用いた回路設計でさらに威力を発揮します。動作合成前後の記述とCリファレンスモデルを全く同じ方法、環境で検証することができます。

図2 バスを含むVerilog(VHDL)検証環境

RTLで作成された回路は、通常CPUを含むバスに接続され、CPUからソフトウエア制御されます。バスには、設計したRTL回路だけでなく、他の設計物も存在します。従来のRTL検証環境では、このようなCPU,メモリ、他のIPをピン接続していました。しかしながら、大規模な環境になると、検証用のためにピン接続をするだけでも多大な労力がかかります。また、他のRTLで設計された回路を接続しても、画一的な動作しかせず、様々な条件を検証することができないかもしれません。

図3 バスを含むVerilog(VHDL)検証環境

このようなCPUやバスを含む検証環境は、SystemC/TLM環境を作成すると簡単に高速に動作させることができます。様々な入力条件を発生させるモデルは、Verilog/VHDLで作成するよりも、SystemCで記述する方が安易に作成できます。アーキテクチャー探索からTLMモデルを作成していくと、最終RTL検証も効率よく行なうことができます。アーキテクチャー探索からRTL検証まで、シームレスな環境を簡単作成できるのがSystemCの魅力です。