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

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

См. mw_PulseDetector_test.sv.

и установите через uvm_config_db на табло, mw_PulseDetector_scoreboard, по своей start_of_simulation_phase:

См. mw_PulseDetector_scoreboard.sv.

Обновление порога ошибок с помощью аргумента Plus

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