Aldec Design and Verification Blog

Trending Articles
スケーラブルなクラウドベースのCI/CD HDL検証環境
Azure、VUnit、Riviera-PROによる検証ワークフローの強化

検証はデジタル設計の基盤であり、FPGAおよびSoC設計の高い信頼性と機能的正確性を確保します。Azureのスケーラブルなクラウドコンピューティング、オープンソースのユニットテスト機能であるVUnit、そして高性能シミュレーションエンジンであるRiviera-PROを統合することで、開発者はシミュレーションのワークフローと環境に革命を起こすことができます。この強力な3つを組み合わせることで、昨今の複雑なプロジェクト要求に合わせてカスタマイズされた、最新かつ効率的で協調的なユニットテストアプローチが実現します。この強力な3つのツールは、現代の複雑なプロジェクト要求に応えるために設計された、モダンで効率的かつ協業的なユニットテストのアプローチを提供します。 このブログでは、これらのツールを連携させることで得られる主なメリットについて説明します。このテーマをより深く理解するために、デモンストレーションの詳細を解説していきます。まず、私たちが扱っている内容を確認しましょう。   ツールを理解しよう Azure: スケーラブルなクラウドコンピューティング Azureクラウドプラットフォームは業界をリードするデータ機能を備え、開発者がクラウド、ハイブリッド、エッジ環境を強化し、新しいソリューションを実現できるよう設計されています。お好みのツールとフレームワークを使用して、アプリケーションの構築、実行、テスト、管理を行うことができます。 Azureの主要なメリット グローバルなスケーラビリティ: Azureの広範なデータセンターネットワークは、あらゆる規模のワークロードをサポートします。 強化されたセキュリティ: 多層的な保護により、コンプライアンスとデータ整合性を確保します。 コスト効率: 従量課金制と自動スケーリングにより、運用コストを削減します。 ハイブリッド環境のシームレスな運用: ハイブリッドクラウド向けに設計されたサービスによる統合と管理環境を提供します。 フレキシビリティ: Azureは多様な言語、ツール、フレームワークをサポートします。 リビジョン管理: Azureはソースコードのリビジョン管理を提供します。   VUnit: オープンソース検証フレームワーク VUnitは、VHDLおよびSystemVerilog向けのオープンソースのユニットテストフレームワークです。自動化と継続的インテグレーション(CI)機能によりHDL検証を簡素化し、「早期かつ頻繁なテスト」アプローチを実現します。   VUnitの主要なメリット 費用対効果: 無料で利用できるため、あらゆる規模のチームやプロジェクトで利用可能です。 コミュニティ主導: 世界中のコントリビューターが定期的なアップデートを通じて機能強化に貢献しています。 シームレスな統合: CI/CDパイプラインやRiviera-PROなどのシミュレーションツールとスムーズに連携します。 豊富な機能: 並列テスト実行、アサーションライブラリ、ロギングフレームワーク、カスタマイズ可能なワークフローなどが含まれています。 詳細については、アルデックのウェブサイトにあるVUnitに関するブログをご参照ください。   Riviera-PRO: 高度なシミュレーションとデバッグ アルデックのRiviera-PROは、以下によりVUnitの機能を強化します: 高性能シミュレーション: VHDL/SystemVerilog/SystemCの混合言語対応 高度なデバッグ: 直感的なGUI、波形ビューア/解析、マクロスクリプト機能 インクリメントコンパイル: 更新されたファイルのみを再コンパイルすることで時間を節約します。 スケーラブルな実行: 複数のインスタンスで並列にVUnitテストケースを実行します。 カバレッジ: 直感的なカバレッジ結果ビューアでHDL構造およびファンクショナルカバレッジを実現します。 Riviera-PROの詳細については、ウェブサイトをご覧ください。   点と点をつなぐ:Azure、VUnitおよびRiviera-PRO なぜこれらのツールを組み合わせるのか? Azureのクラウドコンピューティングリソース、VUnitのテスト機能およびRiviera-PROの高度なシミュレーション機能を組み合わせることで、以下のことが可能になります: スケーラビリティ: Azureを活用して複数のコンピューティングインスタンスでVUnitのテストベンチを実行し、手動による介入なしでより迅速な結果を得ることができます。 自動化: VUnitはテスト実行を自動化します。YAMLベースの構成でテストと成果物を管理できます。 正確性: Riviera-PROは高度なデバッグとシミュレーション機能を提供します。 より速い結果: コストを増やすことなく、結果を得ることができます。20個のコンピューティングインスタンスを1日稼働させるコストは、1台のローカルマシンを20日間稼働させるコストと同じです。   サンプルプロジェクト:Azure、VUnitおよびRiviera-PROの実践デモ この実践的なデモンストレーションでは、Azure、VUnitおよびRiviera-PROがテスト実行の効率化、カバレッジ解析の改善、スケーラブルなクラウドベースのワークフローの活用することで、検証ワークフローをどのように強化するかを示します。トピックスの理解を深めるため、プロジェクトフローを図1に示します。   図 1. プロジェクトフロー   このフローチャートは、Azure DevOps、VUnitおよびRiviera-PROの統合して、自動テストとカバレッジ解析を行うプロセスを要約したものです。 Azure DevOpsリポジトリ: ソースファイル、テストベンチファイル、スクリプト(例:run.py)、構成を記述するYAMLファイルおよびパイプラインの記述が含まれています。 パイプライン実行: YAML構成に基づいてワークフローを実行します。 テストとカバレッジ解析: run.pyスクリプトがVUnitテストを実行し、acdb.doがacdbファイルをマージしてカバレッジレポートを生成します。 コンバージョンプロセス: The coverage report is imported and converted to Cobertura format. 出力物: VUnitテストの結果とカバレッジレポートを生成します。   環境設定 このデモプロジェクトファイルは、アルデックのGitHubリポジトリにホストされています。これらのファイルはアルデックのVUnitブログシリーズを基に作成されており、追加機能を紹介するための機能強化が行われています。重要な更新点として、run.pyスクリプト内でCONTRIBUTION環境変数を宣言したことで、ユーザーはユーザー定義のグループにテスト作業を集中させることができます。   # Ask for contribution tests or all testsCONTRIBUTION='0'if "CONTRIBUTION" in os.environ: CONTRIBUTION=os.environ["CONTRIBUTION"]if CONTRIBUTION=='1': print("Following contribution tests will be conducted:") Azureでは、環境変数はYAMLファイル(後述)で設定できます。この例では、環境変数「CONTRIBUTION」により、開発者は特定のテストのみを実行できます。パイプライン実行時に各ジョブに対して異なる環境変数を設定する可能性があります。GUI経由でパイプラインを実行する際、パイプライン内のジョブごとに環境変数に任意の値を割り当てることができます。   図 2. パイプライン実行中に環境変数の値を選択する   Azure Pipelines Agentをインストールした仮想マシン (VM) の設定とDockerイメージのアップロード デモを実行するには、Azure用にDockerイメージを設定する必要があります。このプロセスはRiviera-PROでDockerコンテナを準備する手順と類似していますが、Python、VUnit_HDLおよびCoberturaのアドオンのインストールことも含まれています。DockerイメージがビルドされたらAzure Container Registryにアップロードします。   その後、Azure Pipelines AgentをインストールしたVMを設定します。エージェントの設定は手動または自動のいずれかを選択できます。設定が完了すると、図3に示されたものと類似した構成になります。   図 3. エージェントをインストールしたVMの設定とDockerイメージのアップロード後の画面   Azure DevOpsへのファイルのアップロード Azure DevOpsのリポジトリにファイルをアップロードするには、まずコンテナレジストリとエージェントをインストールしたVMが準備されていることを確認します。既存のGitHubリポジトリをインポートするか、Azure DevOpsで新しいリポジトリを作成することができます。ファイルがアップロードされると、プロジェクトは図4に示されているレイアウトのようになります。   図 4. Azure DevOpsリポジトリにアップロードされたファイル   YAMLを使用したAzure Pipelinesの構成 Azure Pipelinesは、継続的インテグレーション (CI) と継続的デリバリー (CD) を組み合わせ、コードをテスト、ビルド、および任意の宛先にデリバリーします。Azure DevOpsパイプラインは、コードコミット、プルリクエストまたはスケジュールされたトリガーなど、さまざまな種類のトリガーをサポートしています。 パイプラインを管理するには、構成用のYAMLファイルが必要です。サンプルプロジェクトのGitHubリポジトリにYAMLファイルサンプルが格納されており、以下のスニペットにはYAMLサンプルファイルが含まれています。   trigger:- master parameters:- name: CONTRIBUTIONdisplayName: "Run only contribution tests"type: stringdefault: 0values:- 0- 1- name: VUNIT_PdisplayName: "VUNIT parallel jobs"type: stringdefault: 1- name: tests_jobstype: objectdefault:- job_name: 'run_tests_1'tests: 'lib.tb_enc_generics.*'- job_name: 'run_tests_2'tests: 'lib.tb_enc_hardcoded.*' jobs:- ${{ each tests_job in parameters.tests_jobs }} :- template: templates/run_tests_jobs.ymlparameters:job_name: ${{ tests_job.job_name }}tests: ${{ tests_job.tests }}contribution: ${{ parameters.CONTRIBUTION }}vunit_p: ${{ parameters.VUNIT_P }} - job: publish_coveragepool:name: Default container:image: aldecdemo.azurecr.io/aldec/riviera-pro:vunitendpoint: aldec-demo-acr-connection dependsOn:- ${{ each tests_job in parameters.tests_jobs }} :- ${{ tests_job.job_name }} steps:- ${{ each tests_job in parameters.tests_jobs }} :- task: DownloadPipelineArtifact@2displayName: 'Download artifact ${{ tests_job.job_name }}_acdb'inputs:buildType: currentartifactName: ${{ tests_job.job_name }}_acdbtargetPath: '$(Build.SourcesDirectory)' - script: vsim -c -do acdb.dodisplayName: 'Merge acdb and generate coverage report'workingDirectory: 'vunit/aes-encryption' - script: |acdb2xml -i acdb/results.acdb -o acdb/results.xmlpython3 ucdb2cobertura.py --units -i acdb/results.xml -o acdb/cobertura.xmldisplayName: 'Convert coverage to cobertura format'workingDirectory: 'vunit/aes-encryption' - task: PublishPipelineArtifact@1inputs:targetPath: 'vunit/aes-encryption/acdb'artifactName: Coverage - task: UseDotNet@2displayName: 'Use .NET Core sdk 7.0.x'inputs:version: 7.0.x - task: PublishCodeCoverageResults@1inputs:codeCoverageTool: 'Cobertura'summaryFileLocation: 'vunit/aes-encryption/acdb/cobertura.xml'pathToSources: 'vunit/aes-encryption/vunit_out/test_output'   説明のため、ここでは主要な機能の一部のみを取り上げて紹介します。完全な仕様については、こちらを参照してください。このデモプロジェクトで使用されている定義済みのazure-pipelines.ymlは、以下のセクションで構成されています: trigger - commit/push時にパイプラインを実行するトリガーとなるブランチを指定します。 parameters - このセクションでは、パイプラインの実行をパラメーター化するために使用できる変数のリストを作成できます。この例では、2つの値を持つ文字列型のパラメーターが1つだけあります。これは「Pipeline Run」ページでコンボボックスとしてレンダリングされ、選択された値は環境変数として保存されます。 jobsagentによって実行されるステップのコレクションです。この例では3つのジョブが作成されています。そのうち2つはrun_tests_jobs.ymlファイルで宣言されたテンプレートに基づいており、特定のVUnitテストケースを並列実行する役割を担います。3つ目のジョブ「publish_coverage」は、他の2つのジョブからアーティファクトをダウンロードし、ラインカバレッジを実施し、カバレッジ結果をCobertura形式で公開します。 poolキーワードは、パイプラインのジョブで使用するプールを指定します。プール仕様には、ジョブの実行戦略に関する情報も保持されています。 container - Dockerコンテナの設定(イメージ名やサービスエンドポイントなど)が含まれています。 dependsOn - 異なるステージやジョブ間の依存関係を指定します。 steps - OSシェルで順次実行される定義済みtaskscriptコマンドのリストです。 パイプラインの実行 パイプラインを作成した後、それを実行してデモを実行します。AzureとRiviera-PROの統合により、カバレッジメトリクスの生成とテストプランのランキングが可能になり、Riviera-PROのグラフィカルユーザーインターフェースまたはウェブブラウザで詳細な結果が表示されます。図5は、これらの結果の一例を示しています。特別なacdb.doマクロファイルを使用することで、ランダムなVUnitテスト名が定義済みの名前に変換され、ユーザーが実行したテストを正確に識別できるようにします。   図 5. VUnitテストからのテストプランランキングとカバレッジメトリクスの結果   ワークフローはクラウドのコンピューティングパワーを活用するために簡単にスケールアップ可能できます。Azureのインフラストラクチャは、2つのレベルでスケーラビリティを実現します。まず、ジョブレベルでのスケーラビリティが実現され、ジョブを並列実行することが可能になります。第二に単一の仮想マシン内で複数のスレッドでVUnitテストケースを同時に実行することでスケーラビリティが実現されます。このプロセスによりテスト時間とコストが削減されます。この機能を有効にするにはAzure DevOpsで並列テストを実行のため、複数のRiviera-PROライセンスシートとジョブを設定する必要があります。少なくとも1回実行されたパイプラインにアクセスすると、結果を表示する特定のタブが表示されます。「Test」タブには、VUnitテストの結果が表示されます。AzureとVUnitの統合によって達成され改善された結果を図6に示します。この特定のケースでは、すべてのテストに合格しました。各テストの名前をクリックすると詳細を確認できます。   図 6. VUnit テストの結果   「Code Coverage」タブでは、ユーザーは事前にCobertura形式でエクスポートされたカバレッジデータにアクセスできます。これにより、結果を標準化して視覚的に表示できるようになります。この機能はアルデックのRiviera-PROシミュレータのカバレッジ機能を利用して、それらをCobertura形式に変換することで実現されています。この機能は図7に示されています。ユーザーは、各ファイルのコードカバレッジ結果を詳細に確認することができます。この例では、詳細なラインカバレッジ結果を示しています。   図 7. カバレッジ結果をCobertura形式で表示   このサンプルデザインにおける成果 このサンプルでは、Azure、VUnitおよびRiviera-PROの統合により、検証ワークフローがどのように大幅な改善されるかを示しています。具体的には以下の点が挙げられます: 統合されたカバレッジ: 堅牢な検証を保証する包括的なカバレッジメトリクスを、アルデックのCobertura形式で視覚化します。 テストプランとランキング: Riviera-PROにより、コード変更への影響に基づいてテストの優先順位付けとランキングが可能です。 VUnitによる迅速なフィードバック: VUnitの自動化機能を活用して、迅速な実行と結果の取得を実現します。 スケーラブルなクラウドワークフロー: Azureを活用した並列処理と費用対効果の高いリソース管理を実現します。   既知の制約 メリットは大きいですが、既存の制約事項を認識しておくことは重要です: シミュレーターライセンス: Azureの各ジョブ毎にRiviera-PRO専用ライセンスが必要です。 ジョブ数の制限: Azureはアカウントあたり並列ジョブが20個までに制限されています。 結論 Azure、VUnitおよびRiviera-PROの統合は、クラウドコンピューティング、オープンソースのイノベーション、高度なシミュレーションの最高の組み合わせであり検証ワークフローの未来を象徴しています。この強力な3つの組み合わせは、最新かつ自動化されスケーラブルな検証プロセスを実現し、テスト時間を大幅に短縮し、リソース管理を最適化します。   この構成を採用することで、チームは検証ワークフローの品質を向上させながら、協調的ででグローバルにアクセス可能な環境をサポートできます。Azureは比類ないスケーラビリティを提供し、VUnitのオープンソースフレームワークはイノベーション、自動化、カスタマイズを促進します。Riviera-PROは、これらのツールを高度なシミュレーションとデバッグ機能で補完し、詳細で信頼性の高い検証プロセスを保証します。   この構成を採用することで、チームは検証ワークフローの品質を向上させながら、協調的ででグローバルにアクセス可能な環境をサポートできます。Azureは比類ないスケーラビリティを提供し、VUnitのオープンソースフレームワークはイノベーション、自動化、カスタマイズを促進します。Riviera-PROは、これらのツールを高度なシミュレーションとデバッグ機能で補完し、詳細で信頼性の高い検証プロセスを保証します。.   参考文献 Introduction to VUnit Project Repository on Aldec’s GitHub VUnit Official Website ...

Like(0) Comments (0) Read more
Navigating VUnit: A Practical Guide to Modifying Testing Approaches

In the two previous blogs, we introduced you to the world of VUnit, guided you through creating a project from scratch, and demonstrated how to run multi-threaded unit testing of multiple independent tests....

Like(0) Comments (0) Read more
Development of real-time SDR systems with Aldec HES

As telecommunication technologies evolve there is an on-going drive for the development of high-performance systems for radio communications. Part of that evolution involves implementing components in software functions that had traditionally been implemented in hardware....

Like(8) Comments (7) Read more
HW/SW Co-Simulation for SoC FPGA designs
Aldec’s Co-Simulation Solution using QEMU and Riviera-PRO

Heterogeneous System on Chip (SoC) devices like the Xilinx Zynq 7000 and Zynq UltraScale+ MPSoC combine a high-performance processing system (PS) with state-of-the-art programmable logic (PL)....

Like(2) Comments (0) Read more
The Power of PCIe in Performance-based FPGA World
Understanding High speed serial data transfer

In today's world, when the entire computing industry is talking about high-performance and high-speed applications using FPGAs, just what are the factors that can assure such performance and speed?...

Like(3) Comments (0) Read more
Problems Accessing Registers? – See how UVM RAL can help

As a digital design or verification engineer you know that certain features or configurations of the device can be achieved by programming some registers to set values.For example, a 32-bit register can have several fields within it...

Like(2) Comments (0) Read more
Verification Effectiveness with Riviera-PRO: SystemVerilog Randomized Layered Testbench
Understanding SystemVerilog Layered Testbench

In this blog, I will discuss randomized layered testbenches used in SystemVerilog. We need to understand why we need it,...

Like(4) Comments (0) Read more
Do I really need a commercial simulator?
A quick view of the benefits of a commercial simulator

As an Applications Engineer I visit lots of potential customers, or talk to them at trade shows, who are doing FPGA designs but don’t own a commercial simulator. I ask them why that is. Most of the time it is budgetary restrictions. They don’t...

Like(1) Comments (0) Read more
SystemVerilog Functional Coverage in a Nutshell
Use native SystemVerilog constructs as metrics for verification closure in Riviera-PRO

Let’s say you have a block you need to verify. How do you know that the stimulus you are about to use is exhaustive enough and that you have covered the necessary scenarios/situations to prove it is working correctly?...

Like(1) Comments (0) Read more
Trace Your Assertions

When I enter the word “assertions” into a search engine I get lots of results, including articles, books, courses, and tools. Nothing unusual there, as assertions have been present in the EDA industry for many years. They considerably increase...

Like(3) Comments (0) Read more
Ask Us a Question
x
Ask Us a Question
x
Captcha ImageReload Captcha
Incorrect data entered.
Thank you! Your question has been submitted. Please allow 1-3 business days for someone to respond to your question.
Internal error occurred. Your question was not submitted. Please contact us using Feedback form.
We use cookies to ensure we give you the best user experience and to provide you with content we believe will be of relevance to you. If you continue to use our site, you consent to our use of cookies. A detailed overview on the use of cookies and other website information is located in our Privacy Policy.