В этом примере показано, как управлять параметрами средства проверки ответа в испытательном стенде UVM, сгенерированном от Simulink. Такая параметризация помогает инженеру верификации проекта снова использовать табло в соответствии с различными сценариями тестирования. Параметры Simulink к средству проверки приведут к объекту настройки, значения которого могут быть установлены в выведенном тестовом классе (рандомизированный или не) или непосредственно через командную строку плюс аргумент.
Смотрите пример 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)
В модели проверка ответа параметрируется переменной порога ошибок, используемой в блоке проверки утверждения. Это определяется в качестве параметра, чтобы сохранить в SystemVerilog при помощи Simulink. Параметр, 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 prm_uvmtb_uvmbuild/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 prm_uvmtb_uvmbuild/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 prm_uvmtb_uvmbuild/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, каждый раз, когда рандомизация введена, обычно важно включать покрытие и гарантировать, что различные части среды знают, какие случайные значения были сгенерированы. В рандомизированных значениях этих примеров просто распечатываются. Добавление покрытия для сгенерированных порогов ошибок и анализ фактических ошибок сигнала по крупным из многих запусков симуляции являются осуществлением, оставленным читателю.