« Prev | Next » Riviera-PROでデザインの再利用とランダム化テストのためにCocotbを利用 はじめに このアプリケーションノートでは、pythonベースの検証環境であるcocotbを使用しRiviera-PROでランダム化検証を実行する方法について説明します。始めるにあたって、まず基本を理解しましょう: Cocotbとは何ですか? 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なのか? CocotbはRTLのコードを追加する必要がありません。テスト対象のデザインはシミュレータのトップレベルとしてインスタンス化されます。DUTの入力に刺激を与え、出力はPythonを使用してモニタします。HDLの知識が必要ないことを考えると、HDLに不慣れな人にとってはありがたい存在かもしれません。また、Pythonはオブジェクト指向のスクリプト言語です。さらに、Pythonにはガベージコレクションというメモリシステムがあり、プログラムの実行が非常に速く理解しやすくなっています。Pythonが理解しやすいため、開発のスピードアップとオーバーヘッドの低減につながります。このように、CocotbはHDLのテスト手法と比較して、いくつかの重大な利点があるのです。 Cocotbを使い始めるには、以下の条件を満たしている必要があります:- Python 2.6+ Pythonの開発パッケージ GCCと関連する開発パッケージ GNU make Riviera-PRO シミュレータ オペレーティング・システムに依存するダウンロード関連情報については、以下のリンクを参照してください:-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実装に対して実行することができます。 make SIM=aldec TOPLEVEL_LANG=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の利点 :- CocotbはJenkinsという継続的インテグレーションシステムと統合するためのビルトインサポート Cocotbを作った主な動機は、テストを作るオーバーヘッドを減らすこと テストを自動的に検出するので、リグレッションにテストを追加するための追加のステップは不要 検証言語はPythonで、System Verilog/VerilogやUVMと比較していくつかの利点がある Pythonには数多くのフレームワークがあり、プログラミングが非常に柔軟 Pythonはフレームワークが豊富で、プログラミングの自由度が高く、少ないコードで素早く開発可能 学習が容易で、デコードが速い オブジェクト指向プログラミング駆動型フレームワーク 複数のシステムとプラットフォームをサポート 参考文献 :- [1] Cocotbドキュメンテーション http://cocotb.readthedocs.io/en/latest/index.html [2] ポテンシャルベンチャーズ公式サイト http://potential.ventures/cocotb/ 免責事項 :- このアプリケーションノートのテキストの多くは、オープンソースツールのサポートに関して参照されたソースから抽出されたものです。このアプリケーションノートの意図は、アルデックのユーザのためにデータを統合および整理し、簡略化したツール・フローを提示することです。 Previous article Next article