Измените параметры табло в испытательном стенде UVM

В этом примере показано, как управлять параметрами средства проверки ответа в испытательном стенде 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:

См. mw_PulseDetector_test.sv.

и установленный через 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, каждый раз, когда рандомизация введена, обычно важно включать покрытие и гарантировать, что различные части среды знают, какие случайные значения были сгенерированы. В рандомизированных значениях этих примеров просто распечатываются. Добавление покрытия для сгенерированных порогов ошибок и анализ фактических ошибок сигнала по крупным из многих запусков симуляции являются осуществлением, оставленным читателю.