このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
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 モジュールの場合:
「initialize」DPI 呼び出しは、「initial」コード ブロックによってトリガーされます。
「終了」DPI 呼び出しは、「最終」コード ブロックによってトリガーされます。
「出力」および「更新」DPI 呼び出しは、クロック イネーブルがアクティブな立ち上がりクロック エッジによってトリガーされます。
UVMテストベンチを実行する
uvmbuild
プロセスは、UVM テストのシミュレーションを実行するスクリプトも生成します。次のシミュレータ用のスクリプトが生成されます。
Mentor Graphics® Modelsim® および Questa®: run_tb_mq.do
ケイデンス® Xcelium™: run_tb_xcelium.sh
シノプシス® VCS®: run_tb_vcs.sh
ModelSim 用に生成されたスクリプトが表示されます。
生成されたスクリプトを実行して、UVM 実行が Simulink 実行と一致することを確認します。シーケンスは SNR 入力ポートでパラメータ化されるため、UVM ではデフォルト値は 0.0 になります。シミュレーション実行を適切に比較するには、デフォルト値を 2.0 (ビット値は 0b10_000000) に変更して、Simulink と一致させます。これは、環境変数を介してスクリプトに渡す 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 インターフェース信号のタイミングを示します。カーソルはフレーム境界に配置され、一致したフィルタ係数の瞬間的な更新を示します。