Riviera-PROでデザインの再利用とランダム化テストのためにCocotbを利用

はじめに

このアプリケーションノートでは、pythonベースの検証環境であるcocotbを使用しRiviera-PROでランダム化検証を実行する方法について説明します。始めるにあたって、まず基本を理解しましょう:

CocotbはPythonを使用して、VHDL/Verilog RTLを検証するためのCO-routine based CO-simulation Testbench環境です。オープンソースの環境であり、Githubでホストされています。CocotbはRTLのシミュレーションにRiviera-PROシミュレータを使用することができます。基本的にはテスト工程を支援し、特にHDLの概念にあまり慣れていない人でも快適に検証できるようにします。UVMと同じデザインリユースと機能検証のコンセプトを使用していますが、Pythonで実装されています。VHDL、Verilog、SystemVerilogなどのハードウェア記述言語は、合成可能なデザインにのみ使用されます。Cocotbは、Jenkinsの継続的インテグレーション・システムとの統合をサポートしています。

CocotbはRTLのコードを追加する必要がありません。テスト対象のデザインはシミュレータのトップレベルとしてインスタンス化されます。DUTの入力に刺激を与え、出力はPythonを使用してモニタします。HDLの知識が必要ないことを考えると、HDLに不慣れな人にとってはありがたい存在かもしれません。また、Pythonはオブジェクト指向のスクリプト言語です。さらに、Pythonにはガベージコレクションというメモリシステムがあり、プログラムの実行が非常に速く理解しやすくなっています。Pythonが理解しやすいため、開発のスピードアップとオーバーヘッドの低減につながります。このように、CocotbはHDLのテスト手法と比較して、いくつかの重大な利点があるのです。

Cocotbを使い始めるには、以下の条件を満たしている必要があります:-


オペレーティング・システムに依存するダウンロード関連情報については、以下のリンクを参照してください:-
http://cocotb.readthedocs.io/en/latest/quickstart.html

Cocotbとの連携:

Cocotbのテストベンチは、通常VerilogやSystemVerilogを使用して行うRTLコードを一切必要としません。テスト対象デザインは、シミュレータのトップレベルのモジュールファイルとしてインスタンス化されます。さらに、DUTの入力に刺激を与え、出力を直接監視します。

Cocotbテストの作成:-

CocotbのテストはPythonで書かれています。一般的にテストベンチの一部として、クロックやリセットのような入力を提供する必要があります。clkとrstというトップレベルのポートがあると仮定すると、次のようなファイルを作ることが出来ます:-
import cocotb
from cocotb.triggers import Timer

@cocotb.test()
def practice_test(my_design):
  my_design._log.info("Creating test")
  for cycle in range(100):
    my_design.clk = 0 yield Timer(1000)
    my_design.clk = 1 yield Timer(1000)

上記の例では、トップレベルのclkポートにクロック信号をドライブしています。
rst = my_design.rst # referencing to the rst signal at top level.
rst.value = 1       # Assigns value 1 to signal rst.
上記の例は、特定のシグナルをトップレベルで参照する方法と、シグナルに値を割り当てる方法を示しています。これとは別に、テストベンチはコルーチンを使って構築されます。コルーチンが実行されている間、シミュレーションは一時停止されます。Cocotbがどのように動くかについては、次のリンクからクイックスタートガイドを参照してください: http://cocotb.readthedocs.io/en/latest/quickstart.html 次に、Riviera-PROでCocotbを動かすところを見ていきます。

CocotbとRiviera-PROの連携 :-

上記のリンクからCocotbをダウンロードしたら、あなたのコンピュータに必要なPythonのバージョンがあることを確認してください。もしなければ、Pythonは https://www.python.org からダウンロードすることができます。Pythonのインストール先がシステムのPATH変数に追加されていることを確認してください。次に、インストーラを実行します。Cocotbのインストールにはサンプルが含まれています。このアプリケーションノートでは、そのうちの1つのサンプルに基づいた情報を提供します。エンディアン スワッパの例では、VHDLとVerilog RTLの両方の実装が含まれています。使用しようとしているexampleディレクトリに移動していることを確認してください。Cocotbテストベンチは以下のコマンドを使用してVHDL実装に対して実行することができます。

Linuxシェルターミナル

上記のコマンドを実行すると、インストーラはendian_swapperサンプルディレクトリにあるmakeファイルを呼び出しシミュレーションがバッチ モードで実行されます。

バッチモードでのシミュレーション実行

Riviera-PROの波形ビューワ

上記のようにコマンドラインにRiviera-PRO GUIを起動するコマンドが含まれている場合、Riviera-PRO GUIが起動されます。

GUIモードでのスクリプト

GUIが起動するので正しいディレクトリにいることを確認し、スクリプトを実行します。バッチモードで確認した際と同様の結果が、GUIモードの助けによっても確認できます。

Script in GUI mode

As the GUI invokes, make sure you are in the right directory and execute the script. Similar results as found using batch mode could be seen with the help of GUI mode as well.

Cocotbの利点 :-

参考文献 :-

[1] Cocotbドキュメンテーション http://cocotb.readthedocs.io/en/latest/index.html

[2] ポテンシャルベンチャーズ公式サイト http://potential.ventures/cocotb/

免責事項 :-

このアプリケーションノートのテキストの多くは、オープンソースツールのサポートに関して参照されたソースから抽出されたものです。このアプリケーションノートの意図は、アルデックのユーザのためにデータを統合および整理し、簡略化したツール・フローを提示することです。



Printed version of site: support.aldec.com/jp/support/resources/documentation/articles/1905