В этом примере показано, как управлять параметрами проверки отклика в тестовом стенде UVM, сгенерированном Simulink ®. Такая параметризация помогает инженеру по верификации проекта повторно использовать табло при различных сценариях тестирования. Параметры Simulink в чекер приведут к объекту строения, значения которого могут быть установлены в производном тестовом классе (рандомизированном или нет) или непосредственно через командную строку плюс arg.
См. пример Generate Parameterized UVM Test Bench from Simulink
для описания проекта и фона на генерации UVM испытательного стенда. Чтобы сгенерировать испытательный стенд по умолчанию для этого примера, выполните:
% Generate a UVM test bench design = 'prm_uvmtb/PulseDetector' sequence = 'prm_uvmtb/GenPulse' scoreboard = 'prm_uvmtb/CheckDetection' uvmbuild(design, sequence, scoreboard)
В модели проверка отклика параметризована переменной порога ошибок, используемой в блоке проверки типа «assertion». Он обозначен как параметр для сохранения в SystemVerilog с помощью Simulink .Parameter, pErrorThreshold
. В этой спецификации задается значение по умолчанию 1,95 процента, что отражает допуск различия ошибок между золотой ссылкой и фактическим DUT. (В этом тестовом наборе расхождение связано с двойной точностью по сравнению с реализациями логики обнаружения с фиксированной точкой.)
В сгенерированном коде UVM параметр помещается в объект строения, mw_PulseDetector_scoreboard_cfg_obj
,
См. mw_PulseDetector_scoreboard_cfg_obj.sv.
который является экземпляром в build_phase теста, mw_PulseDetector_test
:
и установите через uvm_config_db
на табло, mw_PulseDetector_scoreboard
, по своей start_of_simulation_phase:
См. mw_PulseDetector_scoreboard.sv.
План тестирования первоначально предусматривал допуск в 1,95 процента. Если позже спецификация проекта была ужесточена, чтобы отразить более критическое требование безопасности до 0,50 процента, это можно сделать с помощью командной строки. В наших скриптах поддержки мы используем переменную окружения, чтобы повлиять на командную строку SystemVerilog плюс аргумент.
% Clear environment variables that influence the UVM simulation setenv EXTRA_UVM_SIM_ARGS setenv EXTRA_UVM_COMP_ARGS setenv UVM_TOP_MODULE
% Simulate the UVM test bench using plusarg overrides cd uvm_build/prm_uvmtb_uvm_testbench/top setenv EXTRA_UVM_SIM_ARGS '+SNR_default_inp_val=01000000 +RTWStructParam_pErrorThreshold=0.50' ! vsim -do run_tb_mq.do % ModelSim/QuestaSim (gui) ! vsim -c -do run_tb_mq.do % ModelSim/QuestaSim (console) ! ./run_tb_incisive.sh % Incisive (console) ! ./run_tb_xcelium.sh % Xcelium (console) ! ./run_tb_vcs.sh % VCS (console) cd ../../..
Заметьте, что при ОСШ 1,0 проект иногда нарушает порог ошибок 0,50 процента.
Можно сгенерировать и задать значения непосредственно из теста, поскольку объект строения табло является представителем. Здесь мы рандомизируем порог в области значений [0,050, 0,500] процентов. Заметьте, что порог имеет тип real
и поэтому не может быть рандомизирован непосредственно.
См. mw_PulseDetector_SCRPRM_param_overrides.sv.
Чтобы запустить симуляции UVM с использованием этих новых классов, мы можем использовать исходные скрипты с дополнительными аргументами, заданными через переменные окружения.
% Simulate the UVM test bench using randomized configuration object setting cd uvm_build/prm_uvmtb_uvm_testbench/top setenv EXTRA_UVM_COMP_ARGS '-f ../../../overrides_SCRPRM/extra_comp_args.f' setenv EXTRA_UVM_SIM_ARGS '+SNR_default_inp_val=01000000 +UVM_TESTNAME=mw_PulseDetector_test_SCRPRM' ! vsim -do run_tb_mq.do % ModelSim/QuestaSim (gui) ! vsim -c -do run_tb_mq.do % ModelSim/QuestaSim (console) ! ./run_tb_incisive.sh % Incisive (console) ! ./run_tb_xcelium.sh % Xcelium (console) ! ./run_tb_vcs.sh % VCS (console) cd ../../..
Обратите внимание, что в этом запуске выбирается порог 0,150 процента и что несколько системы координат в конечном счете нарушают этот порог.
Можно также создать более сложную рандомизацию настроек строения путем создания производного объекта строения табло. В этом примере план тестирования требует, чтобы порог падал в различных интересных областях значений, которые отражают различные рабочие окружения детектора.
См. mw_PulseDetector_SCRPRM_param_overrides.sv.
Чтобы достичь этой цели, производный объект строения имеет следующее дополнительное поведение:
добавить «threshold_bucket» представитель, объявленный как randc
используйте этот threshold_bucket представитель, чтобы подразумевать пороговые области значений
распечатать рандомизированные значения для проверки во время симуляции
Создается новый тест, который сообщает фабрике UVM использовать новый объект строения и рандомизировать его настройки во время build_phase.
Чтобы запустить симуляции UVM с использованием этих новых классов, мы можем использовать исходные скрипты с дополнительными аргументами, заданными через переменные окружения.
% Simulate the UVM test bench using randomized derived configuration object cd uvm_build/prm_uvmtb_uvm_testbench/top setenv EXTRA_UVM_COMP_ARGS '-f ../../../overrides_SCRPRM/extra_comp_args.f' setenv EXTRA_UVM_SIM_ARGS '+SNR_default_inp_val=01000000 +UVM_TESTNAME=mw_PulseDetector_test_SCRPRM2' ! vsim -do run_tb_mq.do % ModelSim/QuestaSim (gui) ! vsim -c -do run_tb_mq.do % ModelSim/QuestaSim (console) ! ./run_tb_incisive.sh % Incisive (console) ! ./run_tb_xcelium.sh % Xcelium (console) ! ./run_tb_vcs.sh % VCS (console) cd ../../..
Обратите внимание, что для этого запуска выбран порог в 1,01 процента и что все системы координат находятся под этим порогом.
В полном окружении UVM всякий раз, когда вводится рандомизация, обычно важно включать покрытие и обеспечивать, чтобы различные части окружения знали, какие случайные значения были сгенерированы. В этих примерах рандомизированные значения просто распечатываются. Добавление покрытия для сгенерированных порогов ошибок и анализ фактических ошибок сигнала во время грубого из многих запусков симуляции является упражнением, оставленным читателю.