このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
Simulinkからパラメーター化された UVM テストベンチを生成
この例では、 Simulink®で設計とテストベンチを開発し、 uvmbuild
を使用してユニバーサル検証手法 (UVM) 環境用の同等のシミュレーションを生成する方法を示します。その後、このテストベンチを拡張して、プロトコル固有のドライバー、制約付きランダム シーケンス、パラメーター化されたスコアボードを使用して検証を改良できます。
はじめに
この例では、HDL 実装のトップダウン設計開発プロセスを順を追って説明します。このようなワークフローでは、 Simulinkで動作アルゴリズムを設計し、刺激の生成と結果のチェックに周囲のブロックを使用してテストします。シミュレーションによって設計が要件を満たしていることが確認されたら、必要な資料を下流の HDL 実装チームに提供します。HDL 実装がSimulinkでシミュレートされた要件、およびSimulinkでモデル化されていないプロトコル インターフェイスなどの設計のその他の固有の側面を満たしていることを再確認する必要があります。
通常、引き継ぎプロセスは退屈で、多くのエラーの原因となる可能性があります。HDL 実装および HDL 設計検証 (DV) エンジニアは、次のことを行う必要があります。
書かれた仕様を HDL およびテスト環境に翻訳します。
スティミュラスがどのように作成、処理、チェックされるかなど、 Simulinkシミュレーション環境の実行時の動作を理解します。
実行時の動作を SystemVerilog 実装に変換します。
刺激、設計、および応答のチェックを実行可能な SystemVerilog モデルに統合して、変換された動作が元のSimulinkシミュレーションと同じように動作することを確認します。
これらの主要な SystemVerilog コンポーネントを UVM コンテキストに統合して、DV で作成された検証を使用してSimulinkテストを拡張できるようにします。この拡張テストには、ランダム化テスト、SystemVerilog アサーション、機能カバレッジ、およびコード カバレッジが含まれる場合があります。
HDL Verifier™ UVM 生成機能は、この引き継ぎプロセスを自動化します。DV エンジニアは、 Simulinkで実行されるテストと一致する検証済み UVM テスト環境を取得し、その環境を簡単に更新してダウンストリーム検証のニーズを満たすことができます。
Simulinkでの設計とテスト
アルゴリズムを作成し、それにテストベンチを追加します。このモデルは、スティミュラス生成、テスト対象デザイン (DUT)、応答チェックなどのテストベンチの典型的なサブシステムで構成されています。
この設計では、ソース サブシステムは、5000 サンプルのノイズ フレーム内のランダムな位置に埋め込まれた 64 サンプルの情報のランダム パルスを作成します。また、パルスの検出に最適な 64 個の整合フィルター係数のセットも生成します。入力はデザインと応答チェッカーの両方に供給されます。応答チェッカーは、ノイズの多い波形の正しい位置でパルスが検出されたことを検証します。コンソール出力により正常に動作していることが確認されます。検出された信号の予想されるパワーが特定の制限内にない場合、アサーションが起動されます。
openProject('pulsedetector_proj'); model = 'pulsedetector_tb'; open_system(model);
モデルをシミュレーションすると、生成された 5 つのパルスのうち 5 つが検出されることが確認されます。3 つのパネルに分かれた図は、Tx 信号 (元のパルス)、Rx 信号 (ノイズに埋め込まれたパルス)、およびピークが検出された場所を示すリファレンス実装のフィルター処理された出力を示しています。出力信号は 1 フレーム遅延します。
sim(model);
[FrameNum= 0] No peak found in Ref or Impl. [FrameNum= 1] PREDICTED: Peak location=2163.000000, mag-squared=0.280 using global max [FrameNum= 1] ACTUAL : Peak location=2170.000000, mag-squared=0.285 using global max [FrameNum= 1] DIFF : Peak location=7, mag-squared=0.004 (1.551%) [FrameNum= 2] PREDICTED: Peak location=2163.000000, mag-squared=0.200 using global max [FrameNum= 2] ACTUAL : Peak location=2170.000000, mag-squared=0.194 using global max [FrameNum= 2] DIFF : Peak location=7, mag-squared=0.006 (2.881%) [FrameNum= 3] PREDICTED: Peak location=2163.000000, mag-squared=0.224 using global max [FrameNum= 3] ACTUAL : Peak location=2170.000000, mag-squared=0.234 using global max [FrameNum= 3] DIFF : Peak location=7, mag-squared=0.010 (4.623%) [FrameNum= 4] PREDICTED: Peak location=2163.000000, mag-squared=0.200 using global max [FrameNum= 4] ACTUAL : Peak location=2170.000000, mag-squared=0.209 using global max [FrameNum= 4] DIFF : Peak location=7, mag-squared=0.009 (4.346%) [FrameNum= 5] PREDICTED: Peak location=2163.000000, mag-squared=0.255 using global max [FrameNum= 5] ACTUAL : Peak location=2170.000000, mag-squared=0.257 using global max [FrameNum= 5] DIFF : Peak location=7, mag-squared=0.002 (0.735%) [FrameNum= 6] PREDICTED: Peak location=2163.000000, mag-squared=0.241 using global max [FrameNum= 6] ACTUAL : Peak location=2170.000000, mag-squared=0.250 using global max [FrameNum= 6] DIFF : Peak location=7, mag-squared=0.009 (3.660%) [FrameNum= 7] PREDICTED: Peak location=2163.000000, mag-squared=0.241 using global max [FrameNum= 7] ACTUAL : Peak location=2170.000000, mag-squared=0.243 using global max [FrameNum= 7] DIFF : Peak location=7, mag-squared=0.002 (0.790%) [FrameNum= 8] PREDICTED: Peak location=2163.000000, mag-squared=0.225 using global max [FrameNum= 8] ACTUAL : Peak location=2170.000000, mag-squared=0.231 using global max [FrameNum= 8] DIFF : Peak location=7, mag-squared=0.007 (3.076%) [FrameNum= 9] PREDICTED: Peak location=2163.000000, mag-squared=0.239 using global max [FrameNum= 9] ACTUAL : Peak location=2170.000000, mag-squared=0.254 using global max [FrameNum= 9] DIFF : Peak location=7, mag-squared=0.015 (6.083%)
Warning: Assertion detected in '<a href="matlab:open_and_hilite_hyperlink ('pulsedetector_tb/CheckDetection/Check Static Upper Bound','error')">pulsedetector_tb/CheckDetection/Check Static Upper Bound</a>' at time 9
[FrameNum= 10] PREDICTED: Peak location=2163.000000, mag-squared=0.225 using global max [FrameNum= 10] ACTUAL : Peak location=2170.000000, mag-squared=0.230 using global max [FrameNum= 10] DIFF : Peak location=7, mag-squared=0.005 (2.242%)
実行可能な UVM テストベンチを生成する
uvmbuild
関数を使用して、デザインを UVM 環境にエクスポートします。UVM テストベンチは HDL 検証プロセスに構造を提供し、実装検証チームがすべてのSimulinkテストベンチ コンポーネントとテスト ケースを再利用できるようにします。標準コンポーネント定義は、シミュレーションにおける役割ごとに環境の部分を分離します。この例の場合:
PulseDetector
サブシステムは DUT SystemVerilog モジュールにマップされます。GenPulse
サブシステムは、シーケンサー UVM コンポーネントのsequence_item
作成にマップされます。CheckDetection
サブシステムは、スコアボード UVM コンポーネントにマップされます。PulseDetectorRef
サブシステムは、Predictor UVM コンポーネントにマップされます。
これらのコマンドを実行してデザインをビルドします。
% Generate a UVM testbench design = [model '/PulseDetector']; sequence = [model '/GenPulse']; scoreboard = [model '/CheckDetection']; predictor = [model '/PulseDetectorRef']; driver = [model '/InputDriver']; monitor = [model '/OutputMonitor']; uvmbuild(design, sequence, scoreboard, Predictor=predictor, Driver=driver, Monitor=monitor)
### Starting DPI subsystem generation for UVM test bench ### Starting build procedure for model: PulseDetector ### Starting SystemVerilog DPI Component Generation ### Generating DPI H Wrapper PulseDetector_dpi.h ### Generating DPI C Wrapper PulseDetector_dpi.c ### Generating UVM module package PulseDetector_dpi_pkg.sv ### Generating SystemVerilog module PulseDetector_dpi.sv ### Generating makefiles for: PulseDetector_dpi ### Invoking make to build the DPI Shared Library ### Successful completion of build procedure for model: PulseDetector Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================================== PulseDetector Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 27.054s ### Starting build procedure for model: GenPulse ### Starting SystemVerilog DPI Component Generation ### Generating DPI H Wrapper GenPulse_dpi.h ### Generating DPI C Wrapper GenPulse_dpi.c ### Generating UVM module package GenPulse_dpi_pkg.sv ### Generating SystemVerilog module GenPulse_dpi.sv ### Generating makefiles for: GenPulse_dpi ### Invoking make to build the DPI Shared Library ### Successful completion of build procedure for model: GenPulse Build Summary Top model targets built: Model Action Rebuild Reason ========================================================================================== GenPulse Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 26.194s ### Starting build procedure for model: InputDriver ### Starting SystemVerilog DPI Component Generation ### Generating DPI H Wrapper InputDriver_dpi.h ### Generating DPI C Wrapper InputDriver_dpi.c ### Generating UVM module package InputDriver_dpi_pkg.sv ### Generating SystemVerilog module InputDriver_dpi.sv ### Generating makefiles for: InputDriver_dpi ### Invoking make to build the DPI Shared Library ### Successful completion of build procedure for model: InputDriver Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================================= InputDriver Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 19.836s ### Starting build procedure for model: OutputMonitor ### Starting SystemVerilog DPI Component Generation ### Generating DPI H Wrapper OutputMonitor_dpi.h ### Generating DPI C Wrapper OutputMonitor_dpi.c ### Generating UVM module package OutputMonitor_dpi_pkg.sv ### Generating SystemVerilog module OutputMonitor_dpi.sv ### Generating makefiles for: OutputMonitor_dpi ### Invoking make to build the DPI Shared Library ### Successful completion of build procedure for model: OutputMonitor Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================================== OutputMonitor Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 20.681s ### Starting build procedure for model: CheckDetection ### Starting SystemVerilog DPI Component Generation ### Generating DPI H Wrapper CheckDetection_dpi.h ### Generating DPI C Wrapper CheckDetection_dpi.c ### Generating UVM module package CheckDetection_dpi_pkg.sv ### Generating SystemVerilog module CheckDetection_dpi.sv ### Generating makefiles for: CheckDetection_dpi ### Invoking make to build the DPI Shared Library ### Successful completion of build procedure for model: CheckDetection Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================ CheckDetection Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 30.258s ### Starting build procedure for model: PulseDetectorRef ### Starting SystemVerilog DPI Component Generation ### Generating DPI H Wrapper PulseDetectorRef_dpi.h ### Generating DPI C Wrapper PulseDetectorRef_dpi.c ### Generating UVM module package PulseDetectorRef_dpi_pkg.sv ### Generating SystemVerilog module PulseDetectorRef_dpi.sv ### Generating makefiles for: PulseDetectorRef_dpi ### Invoking make to build the DPI Shared Library ### Successful completion of build procedure for model: PulseDetectorRef Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================== PulseDetectorRef Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 23.697s ### Starting UVM test bench generation for model: pulsedetector_tb ### Generating UVM transaction object ./uvm_build/pulsedetector_tb_uvm_testbench/scoreboard/mw_PulseDetector_scoreboard_trans.sv ### Generating UVM interface ./uvm_build/pulsedetector_tb_uvm_testbench/uvm_artifacts/mw_PulseDetector_if.sv ### Generating UVM sequence ./uvm_build/pulsedetector_tb_uvm_testbench/sequence/mw_PulseDetector_sequence.sv ### Generating UVM sequencer ./uvm_build/pulsedetector_tb_uvm_testbench/sequence/mw_PulseDetector_sequencer.sv ### Generating UVM sequence transaction ./uvm_build/pulsedetector_tb_uvm_testbench/sequence/mw_PulseDetector_sequence_trans.sv ### Generating UVM driver ./uvm_build/pulsedetector_tb_uvm_testbench/driver/mw_PulseDetector_driver.sv ### Generating UVM monitor ./uvm_build/pulsedetector_tb_uvm_testbench/monitor/mw_PulseDetector_monitor.sv ### Generating UVM input monitor ./uvm_build/pulsedetector_tb_uvm_testbench/uvm_artifacts/mw_PulseDetector_monitor_input.sv ### Generating UVM Reference Model ./uvm_build/pulsedetector_tb_uvm_testbench/predictor/mw_PulseDetector_predictor.sv ### Generating UVM transaction object ./uvm_build/pulsedetector_tb_uvm_testbench/predictor/mw_PulseDetector_predictor_trans.sv ### Generating UVM agent ./uvm_build/pulsedetector_tb_uvm_testbench/uvm_artifacts/mw_PulseDetector_agent.sv ### Generating UVM scoreboard ./uvm_build/pulsedetector_tb_uvm_testbench/scoreboard/mw_PulseDetector_scoreboard.sv ### Generating UVM scoreboard configuration object ./uvm_build/pulsedetector_tb_uvm_testbench/scoreboard/mw_PulseDetector_scoreboard_cfg_obj.sv ### Generating UVM environment ./uvm_build/pulsedetector_tb_uvm_testbench/uvm_artifacts/mw_PulseDetector_environment.sv ### Generating UVM test ./uvm_build/pulsedetector_tb_uvm_testbench/uvm_artifacts/mw_PulseDetector_test.sv ### Generating UVM top ./uvm_build/pulsedetector_tb_uvm_testbench/top/mw_PulseDetector_top.sv ### Generating UVM test package ./uvm_build/pulsedetector_tb_uvm_testbench/top/pulsedetector_tb_pkg.sv ### Generating UVM test bench simulation script for Mentor Graphics QuestaSim/Modelsim ./uvm_build/pulsedetector_tb_uvm_testbench/top/run_tb_mq.do ### Generating UVM test bench simulation script for Cadence Xcelium ./uvm_build/pulsedetector_tb_uvm_testbench/top/run_tb_xcelium.sh ### Generating UVM test bench simulation script for Synopsys VCS ./uvm_build/pulsedetector_tb_uvm_testbench/top/run_tb_vcs.sh
生成された UVM テストベンチのアーキテクチャを以下に示します。このモデルの DUT は PulseDetector です。
UVM テストベンチの強調表示された各部分は、 Simulinkサブシステムから生成された C コードをラップし、DPI を使用してそのエントリ ポイントを呼び出すことによって実装されます。次の図は、PulseDetector サブシステムの関数宣言のいくつかを示しています。
SystemVerilog UVM コードは、DPI 呼び出しのタイミングを決定します。たとえば、PulseDetector SystemVerilog モジュールでは次のようになります。
「初期化」DPI 呼び出しは、「初期」コード ブロックによってトリガーされます。
「終了」DPI 呼び出しは、「最終」コード ブロックによってトリガーされます。
「出力」および「更新」DPI 呼び出しは、クロック イネーブルがアクティブな立ち上がりクロック エッジによってトリガーされます。
UVM テストベンチを実行する
uvmbuild
プロセスは、UVM テストのシミュレーションを実行するスクリプトも生成します。スクリプトは次のシミュレータ用に生成されます。
Mentor Graphics® Modelsim® および Questa®: run_tb_mq.do
Cadence® Xcelium™: run_tb_xcelium.sh
Synopsys® VCS®: run_tb_vcs.sh
ModelSim 用に生成されたスクリプトが表示されます。
生成されたスクリプトを実行して、UVM の実行がSimulinkの実行と一致することを確認します。シーケンスは SNR 入力ポートでパラメータ化されるため、UVM のデフォルト値は 0.0 です。シミュレーションの実行を適切に比較するには、 Simulink と一致するように、デフォルト値を 2.0 (ビット値 0b10_000000) に変更します。これは、環境変数を介してスクリプトに渡す plusarg を介して行うことができます。
まず、Questa を実行するために必要な環境をセットアップします。提供されているスクリプトはMathWorks固有です。インストールに一致するようにコマンドを調整するか、別のシミュレーターの使用を選択します。
setup_questa();
次に、HDL シミュレーション スクリプトに影響を与える変数を設定し、UVM シミュレーションを実行します。Simulinkで見たのと同じ診断メッセージがシミュレーション ログにどのように表示されるかに注目してください。
% Clear environment variables that influence the UVM simulation' setenv EXTRA_UVM_SIM_ARGS setenv EXTRA_UVM_COMP_ARGS setenv UVM_TOP_MODULE % Choose a simulator current_simulator = 'Questa'; % Simulate the UVM testbench using an SNR of 2.0 cd uvm_build/pulsedetector_tb_uvm_testbench/top setenv EXTRA_UVM_SIM_ARGS +SNR_default_inp_val=10000000 switch current_simulator case 'Questa', ! vsim -c -do run_tb_mq.do case 'Questa_gui', ! vsim -do run_tb_mq.do case 'Xcelium', ! ./run_tb_xcelium.sh case 'VCS', ! ./run_tb_vcs.sh end
Reading pref.tcl # 2022.2 # do run_tb_mq.do # +SNR_default_inp_val=10000000 # mw_PulseDetector_top.sv # QuestaSim-64 vlog 2022.2 Compiler 2022.04 Apr 25 2022 # Start time: 14:56:58 on May 24,2023 # vlog -timescale 1ns/1ns ../DPI_dut/PulseDetector_dpi_pkg.sv ../sequence/GenPulse_dpi_pkg.sv ../scoreboard/CheckDetection_dpi_pkg.sv ../driver/InputDriver_dpi_pkg.sv ../monitor/OutputMonitor_dpi_pkg.sv ../predictor/PulseDetectorRef_dpi_pkg.sv pulsedetector_tb_pkg.sv mw_PulseDetector_top.sv "+define+MG_SIM" # -- Compiling package PulseDetector_dpi_pkg # -- Compiling package GenPulse_dpi_pkg # -- Compiling package CheckDetection_dpi_pkg # -- Compiling package InputDriver_dpi_pkg # -- Compiling package OutputMonitor_dpi_pkg # -- Compiling package PulseDetectorRef_dpi_pkg # ** Note: (vlog-2286) pulsedetector_tb_pkg.sv(5): Using implicit +incdir+/mathworks/hub/3rdparty/R2023a/8709182/share/Questasim/Lin/uvm-1.1d/../verilog_src/uvm-1.1d/src from import uvm_pkg # -- Compiling package pulsedetector_tb_pkg # -- Importing package mtiUvm.uvm_pkg (uvm-1.1d Built-in) # -- Importing package GenPulse_dpi_pkg # -- Importing package CheckDetection_dpi_pkg # -- Importing package PulseDetectorRef_dpi_pkg # -- Importing package InputDriver_dpi_pkg # -- Importing package OutputMonitor_dpi_pkg # ** Warning: ** while parsing file included at mw_PulseDetector_top.sv(5) # ** at ../DPI_dut/PulseDetector_dpi.sv(15): (vlog-13314) Defaulting port 'coeff_in' kind to 'var' rather than 'wire' due to default compile option setting of -svinputport=relaxed. # -- Compiling package mw_PulseDetector_top_sv_unit # -- Importing package PulseDetector_dpi_pkg # -- Importing package pulsedetector_tb_pkg # -- Compiling module PulseDetector_dpi # ** Warning: ../DPI_dut/PulseDetector_dpi.sv(15): (vlog-13314) Defaulting port 'coeff_in' kind to 'var' rather than 'wire' due to default compile option setting of -svinputport=relaxed. # -- Compiling interface mw_PulseDetector_if # -- Compiling module mw_PulseDetector_top # # Top level modules: # mw_PulseDetector_top # End time: 14:56:59 on May 24,2023, Elapsed time: 0:00:01 # Errors: 0, Warnings: 2 # vsim "+SNR_default_inp_val=10000000" -L work -voptargs="+acc" -sv_lib ../DPI_dut/PulseDetector -sv_lib ../sequence/GenPulse -sv_lib ../scoreboard/CheckDetection -sv_lib ../driver/InputDriver -sv_lib ../monitor/OutputMonitor -sv_lib ../predictor/PulseDetectorRef "+UVM_TESTNAME=mw_PulseDetector_test" mw_PulseDetector_top "+define+MG_SIM" # Start time: 14:56:59 on May 24,2023 # ** Note: (vsim-3812) Design is being optimized... # ** Warning: (vopt-10587) Some optimizations are turned off because the +acc switch is in effect. This will cause your simulation to run slowly. Please use -access/-debug to maintain needed visibility. # ** Warning: ../DPI_dut/PulseDetector_dpi.sv(15): (vopt-13314) Defaulting port 'coeff_in' kind to 'var' rather than 'wire' due to default compile option setting of -svinputport=relaxed. # ** Note: (vsim-12126) Error and warning message counts have been restored: Errors=0, Warnings=2. # // Questa Sim-64 # // Version 2022.2 linux_x86_64 Apr 25 2022 # // # // Copyright 1991-2022 Mentor Graphics Corporation # // All Rights Reserved. # // # // QuestaSim and its associated documentation contain trade # // secrets and commercial or financial information that are the property of # // Mentor Graphics Corporation and are privileged, confidential, # // and exempt from disclosure under the Freedom of Information Act, # // 5 U.S.C. Section 552. Furthermore, this information # // is prohibited from disclosure under the Trade Secrets Act, # // 18 U.S.C. Section 1905. # // # Loading sv_std.std # Loading work.mw_PulseDetector_if(fast) # Loading work.OutputMonitor_dpi_pkg(fast) # Loading work.InputDriver_dpi_pkg(fast) # Loading work.PulseDetectorRef_dpi_pkg(fast) # Loading work.CheckDetection_dpi_pkg(fast) # Loading work.GenPulse_dpi_pkg(fast) # Loading mtiUvm.uvm_pkg(fast) # Loading work.pulsedetector_tb_pkg(fast) # Loading work.PulseDetector_dpi_pkg(fast) # Loading work.mw_PulseDetector_top_sv_unit(fast) # Loading mtiUvm.questa_uvm_pkg(fast) # Loading work.mw_PulseDetector_top(fast) # Loading work.mw_PulseDetector_if(fast__2) # Loading work.PulseDetector_dpi(fast) # Loading ./../DPI_dut/PulseDetector.so # Loading ./../sequence/GenPulse.so # Loading ./../scoreboard/CheckDetection.so # Loading ./../driver/InputDriver.so # Loading ./../monitor/OutputMonitor.so # Loading ./../predictor/PulseDetectorRef.so # Loading /mathworks/hub/3rdparty/R2023a/8709182/share/Questasim/Lin/uvm-1.1d/linux_x86_64/uvm_dpi.so # ---------------------------------------------------------------- # UVM-1.1d # (C) 2007-2013 Mentor Graphics Corporation # (C) 2007-2013 Cadence Design Systems, Inc. # (C) 2006-2013 Synopsys, Inc. # (C) 2011-2013 Cypress Semiconductor Corp. # ---------------------------------------------------------------- # # *********** IMPORTANT RELEASE NOTES ************ # # You are using a version of the UVM library that has been compiled # with `UVM_NO_DEPRECATED undefined. # See http://www.eda.org/svdb/view.php?id=3313 for more details. # # You are using a version of the UVM library that has been compiled # with `UVM_OBJECT_MUST_HAVE_CONSTRUCTOR undefined. # See http://www.eda.org/svdb/view.php?id=3770 for more details. # # (Specify +UVM_NO_RELNOTES to turn off this notice) # # UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa_uvm_pkg.sv(277) @ 0: reporter [Questa UVM] QUESTA_UVM-1.2.3 # UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa_uvm_pkg.sv(278) @ 0: reporter [Questa UVM] questa_uvm::init(+struct) # UVM_INFO @ 0: reporter [RNTST] Running test mw_PulseDetector_test... # ** Info: Gathering coverage for 2 Simulink verify() calls. # Time: 0 ns Scope: CheckDetection_dpi_pkg.VerifyInterfaceT.initVerifyInfo File: ../scoreboard/CheckDetection_dpi_pkg.sv Line: 251 # # [FrameNum= 0] No peak found in Ref or Impl. # # [FrameNum= 1] PREDICTED: Peak location=2163.000000, mag-squared=0.280 using global max # # [FrameNum= 1] ACTUAL : Peak location=2170.000000, mag-squared=0.285 using global max # # [FrameNum= 1] DIFF : Peak location=7, mag-squared=0.004 (1.551%) # # [FrameNum= 2] PREDICTED: Peak location=2163.000000, mag-squared=0.200 using global max # # [FrameNum= 2] ACTUAL : Peak location=2170.000000, mag-squared=0.194 using global max # # [FrameNum= 2] DIFF : Peak location=7, mag-squared=0.006 (2.881%) # # [FrameNum= 3] PREDICTED: Peak location=2163.000000, mag-squared=0.224 using global max # # [FrameNum= 3] ACTUAL : Peak location=2170.000000, mag-squared=0.234 using global max # # [FrameNum= 3] DIFF : Peak location=7, mag-squared=0.010 (4.623%) # # [FrameNum= 4] PREDICTED: Peak location=2163.000000, mag-squared=0.200 using global max # # [FrameNum= 4] ACTUAL : Peak location=2170.000000, mag-squared=0.209 using global max # # [FrameNum= 4] DIFF : Peak location=7, mag-squared=0.009 (4.346%) # # [FrameNum= 5] PREDICTED: Peak location=2163.000000, mag-squared=0.255 using global max # # [FrameNum= 5] ACTUAL : Peak location=2170.000000, mag-squared=0.257 using global max # # [FrameNum= 5] DIFF : Peak location=7, mag-squared=0.002 (0.735%) # # [FrameNum= 6] PREDICTED: Peak location=2163.000000, mag-squared=0.241 using global max # # [FrameNum= 6] ACTUAL : Peak location=2170.000000, mag-squared=0.250 using global max # # [FrameNum= 6] DIFF : Peak location=7, mag-squared=0.009 (3.660%) # # [FrameNum= 7] PREDICTED: Peak location=2163.000000, mag-squared=0.241 using global max # # [FrameNum= 7] ACTUAL : Peak location=2170.000000, mag-squared=0.243 using global max # # [FrameNum= 7] DIFF : Peak location=7, mag-squared=0.002 (0.790%) # # [FrameNum= 8] PREDICTED: Peak location=2163.000000, mag-squared=0.225 using global max # # [FrameNum= 8] ACTUAL : Peak location=2170.000000, mag-squared=0.231 using global max # # [FrameNum= 8] DIFF : Peak location=7, mag-squared=0.007 (3.076%) # # [FrameNum= 9] PREDICTED: Peak location=2163.000000, mag-squared=0.239 using global max # # [FrameNum= 9] ACTUAL : Peak location=2170.000000, mag-squared=0.254 using global max # # [FrameNum= 9] DIFF : Peak location=7, mag-squared=0.015 (6.083%) # ** Error: pulsedetector_tb:744: # Time: 450020 ns Scope: pulsedetector_tb_pkg.mw_PulseDetector_scoreboard.run_phase File: ../scoreboard/mw_PulseDetector_scoreboard.sv Line: 84 # ** Error: pulsedetector_tb:744: At step 'inferred verify call' verify id 'CheckDetection/CheckDetection/Check Static # Upper Bound' Failed # Time: 450020 ns Scope: CheckDetection_dpi_pkg.VerifyInterfaceT.checkVerifyStatus File: ../scoreboard/CheckDetection_dpi_pkg.sv Line: 347 # # [FrameNum= 10] PREDICTED: Peak location=2163.000000, mag-squared=0.225 using global max # # [FrameNum= 10] ACTUAL : Peak location=2170.000000, mag-squared=0.230 using global max # # [FrameNum= 10] DIFF : Peak location=7, mag-squared=0.005 (2.242%) # # [FrameNum= 11] PREDICTED: Peak location=2163.000000, mag-squared=0.207 using global max # # [FrameNum= 11] ACTUAL : Peak location=2170.000000, mag-squared=0.221 using global max # # [FrameNum= 11] DIFF : Peak location=7, mag-squared=0.014 (6.697%) # ** Error: pulsedetector_tb:744: # Time: 550020 ns Scope: pulsedetector_tb_pkg.mw_PulseDetector_scoreboard.run_phase File: ../scoreboard/mw_PulseDetector_scoreboard.sv Line: 84 # ** Error: pulsedetector_tb:744: At step 'inferred verify call' verify id 'CheckDetection/CheckDetection/Check Static # Upper Bound' Failed # Time: 550020 ns Scope: CheckDetection_dpi_pkg.VerifyInterfaceT.checkVerifyStatus File: ../scoreboard/CheckDetection_dpi_pkg.sv Line: 347 # # [FrameNum= 12] PREDICTED: Peak location=2163.000000, mag-squared=0.265 using global max # # [FrameNum= 12] ACTUAL : Peak location=2170.000000, mag-squared=0.260 using global max # # [FrameNum= 12] DIFF : Peak location=7, mag-squared=0.005 (2.014%) # UVM_INFO verilog_src/uvm-1.1d/src/base/uvm_objection.svh(1267) @ 650000: reporter [TEST_DONE] 'run' phase is ready to proceed to the 'extract' phase # ** Info: Instance coverage for verify 'pulsedetector_tb:757', coverpoint 'pass_cp': metric=100.00, at_least= 1 ( COVERED) # Time: 650 us Scope: CheckDetection_dpi_pkg.VerifyInterfaceT.reportVerifyCoverage File: ../scoreboard/CheckDetection_dpi_pkg.sv Line: 369 # ** Info: Instance coverage for verify 'pulsedetector_tb:744', coverpoint 'pass_cp': metric=100.00, at_least= 1 ( COVERED) # Time: 650 us Scope: CheckDetection_dpi_pkg.VerifyInterfaceT.reportVerifyCoverage File: ../scoreboard/CheckDetection_dpi_pkg.sv Line: 369 # ** Info: Overall coverage for CheckDetection_dpi_verify_calls: metric=100.00 ( COVERED) # Time: 650 us Scope: CheckDetection_dpi_pkg.VerifyInterfaceT.reportVerifyCoverage File: ../scoreboard/CheckDetection_dpi_pkg.sv Line: 376 # # --- UVM Report Summary --- # # ** Report counts by severity # UVM_INFO : 4 # UVM_WARNING : 0 # UVM_ERROR : 0 # UVM_FATAL : 0 # ** Report counts by id # [Questa UVM] 2 # [RNTST] 1 # [TEST_DONE] 1 # ** Note: $finish : /mathworks/hub/3rdparty/R2023a/8709182/share/Questasim/Lin/linux_x86_64/../verilog_src/uvm-1.1d/src/base/uvm_root.svh(430) # Time: 650 us Iteration: 61 Instance: /mw_PulseDetector_top # End time: 14:57:21 on May 24,2023, Elapsed time: 0:00:22 # Errors: 4, Warnings: 2
cd ../../..
HDL シミュレータの波形は、DUT インターフェイス信号のタイミングを示します。カーソルはフレーム境界に配置され、一致したフィルター係数の瞬時の更新を示します。