В этом примере показано, как использовать испытательный стенд SystemVerilog DPI для верификации HDL-кода, где большой набор данных требуется.
В определенных приложениях симуляция большого количества выборок требуется, чтобы проверять HDL-код, сгенерированный HDL Coder™ для вашего алгоритма. Например, эти приложения требуют большого количества выборок для верификации алгоритма:
a) Вычисление радарных каналов частоты астрономии с помощью многофазного набора фильтров.
b) Получение Частоты ошибок по битам (BER) от Декодера Витерби в системе связи.
c) Алгоритмы обработки пиксельного потокового видео на видео с высоким разрешением.
Генерация испытательного стенда HDL, чтобы проверить такой проект является трудоемкой, потому что кодер должен симулировать модель в Simulink, чтобы собрать данные об испытательном стенде.
Более быстрая сгенерированная альтернатива испытательного стенда является испытательным стендом DPI HDL Verifier™ SystemVerilog. Испытательный стенд SystemVerilog DPI не требует симуляции Simulink, таким образом, для больших наборов данных он генерирует испытательный стенд в более короткое время, чем испытательный стенд HDL.
Испытательный стенд DPI HDL Verifier™ SystemVerilog объединяется с Simulink Coder™, чтобы экспортировать систему Simulink как сгенерированный код C в компоненте SystemVerilog с Интерфейсом программирования на машинном языке (DPI). В компоненте DPI-C стимулы сгенерирован и применен подсистема C и также применен сгенерированный HDL-код за систему Simulink. Испытательный стенд сравнивает выход симуляции HDL с выходом компонента DPI-C, чтобы проверить проект HDL.
Многофазный набор фильтров является широко используемым методом, чтобы уменьшать погрешность в БПФ из-за утечки и scalloping потерь. Многофазный набор фильтров производит более плоский ответ по сравнению с нормальным ДПФ путем подавления внеполосных сигналов значительно.
Модель является Многофазным Набором фильтров, который состоит из фильтра и БПФ что процессы 16 выборок за один раз. Для получения дополнительной информации о многофазном наборе фильтров смотрите Высокую Пропускную способность Channelizer для FPGA.
modelname = 'hdlcoder_DPIC_testbench';
open_system(modelname);
Коллбэк InitFcn (Свойства Модели> Коллбэки> InitFcn) настраивает модель. В этом примере используется БПФ с 512 точками с четырьмя фильтрами касания для каждой полосы. dsp.Channelizer object используется, чтобы сгенерировать коэффициенты.
Алгоритм требует 512 фильтров (один фильтр для каждой полосы). Для векторного входа 16 выборок реализация фильтра совместно использует 16 фильтров, 32 раза. Входные данные состоят из двух синусоид, 200 кГц и 250 кГц.
Используйте временную директорию для сгенерированных файлов:
workingdir = tempname;
Проверяйте подсистему PolyphaseFilterBank на совместимость генерации HDL-кода:
checkhdl('hdlcoder_DPIC_testbench/PolyPhaseFilterBank','TargetDirectory',workingdir);
Запустите следующую команду, чтобы сгенерировать HDL-код:
makehdl('hdlcoder_DPIC_testbench/PolyPhaseFilterBank','TargetDirectory',workingdir);
Запустите следующую команду, чтобы сгенерировать испытательный стенд:
makehdltb('hdlcoder_DPIC_testbench/PolyPhaseFilterBank','TargetDirectory',workingdir);
Это сгенерирует испытательный стенд HDL путем симуляции модели в Simulink и затем собирания данных об испытательном стенде.
Запустите следующую команду, чтобы сгенерировать испытательный стенд SystemVerilog DPI:
HDLSimulator = 'ModelSim'; % Supported Simulator Options = 'ModelSim', 'Incisive', 'VCS', 'Vivado'
makehdltb('hdlcoder_DPIC_testbench/PolyPhaseFilterBank','TargetDirectory',workingdir, 'GenerateSVDPITestBench', HDLSimulator, 'GenerateHDLTestBench', 'Off');
Эта команда генерирует испытательный стенд SystemVerilog, не запуская симуляцию Simulink. Вместо симуляции код экспортирует систему Simulink как сгенерированный код C в компоненте SystemVerilog. Испытательный стенд проверяет выходные данные путем сравнения его с выходом проекта HDL. Функция makehdltb также генерирует специфичные для средства моделирования скрипты для компиляции и симуляции.
Испытательный стенд SystemVerilog DPI может использоваться, чтобы проверить проекты HDL обоих выходных языков - VHDL и Verilog.
В качестве альтернативы можно установить опции SystemVerilog DPI испытательного стенда на 'генерации HDL-кода> Испытательный стенд' панель в Параметрах конфигурации.
Когда вы запрашиваете испытательный стенд SystemVerilog DPI, кодер генерирует следующие артефакты:
a.) PolyPhaseFilterBank_dpi_tb.sv - Это - испытательный стенд SystemVerilog, который проверяет HDL-код.
b.) PolyPhaseFilterBank_dpi_tb.do - Это - макро-файл что использование Mentor Graphics ModelSim®, чтобы скомпилировать HDL-код и запустить симуляцию испытательного стенда.
На основе выбранного средства моделирования кодер генерирует различный файл для симуляции испытательного стенда и компиляции. Например, если вы выбираете 'Incisive', кодер генерирует 'PolyPhaseFilterBank_dpi_tb.sh' для компиляции и симуляции на Cadence Incisive®.
Оснастить симулятор HDL, чтобы сгенерировать отчет покрытия HDL-кода и базу данных, также:
a.) На 'генерации HDL-кода> Испытательный стенд' панель, установите флажок, пометил 'HDL code coverage'.
b.) Когда вы вызываете 'makehdltb', устанавливаете 'HDLCodeCoverage' на 'on'. Например:
makehdltb('hdlcoder_DPIC_testbench/PolyPhaseFilterBank','TargetDirectory',workingdir, 'GenerateSVDPITestBench', HDLSimulator, 'GenerateHDLTestBench', 'Off', 'HDLCodeCoverage', 'On');
Артефакты покрытия HDL-кода сгенерированы в исходной директории после того, как испытательный стенд будет симулирован.
Время симуляции модели установлено в коллбэке предварительной нагрузки (Свойства Модели> Коллбэки> PreLoadFcn)
simTime = 1000;
Частота дискретизации 2e+6 Гц, что означает, что симуляция, чтобы сгенерировать испытательный стенд HDL собирается 2e+9 выборки.
Для определенных приложений требуется больше выборок, чтобы получить правильную частоту из многофазного фильтра. Увеличение необходимого simTime также увеличило бы время, требуемое сгенерировать испытательный стенд HDL.
Решение для таких приложений состоит в том, чтобы использовать испытательный стенд SystemVerilog DPI. Время генерации для испытательного стенда остается то же самое, неважно, какого количества выборок ваш сценарий тестирования требует.
Можно увеличить Время симуляции путем заменения 'simTime' переменной. Например, чтобы сгенерировать испытательный стенд HDL для 2e+12 выборки, установите:
simTime = 1000000;
Таблица показывает сравнение потраченного времени (в секундах) для генерации испытательного стенда HDL и испытательного стенда SystemVerilog DPI для растущих чисел выборок (от 2e+9 до 2e+15):
columns = {'NumberOfSamples';'GenerationTimeHDLTestBench';'GenerationTimeSystemVerilogDPITestbench'}; numSamples = [2e9;2e10;2e11;2e12;2e13;2e14;2e15]; HDLTBtime= [10;12;59;504;4994;52200;505506]; DPICTBtime=[47;47;47;47;47;47;47]; CompareTestBenchTimes = table(numSamples,HDLTBtime,DPICTBtime,'VariableNames',columns); disp(CompareTestBenchTimes);
NumberOfSamples GenerationTimeHDLTestBench GenerationTimeSystemVerilogDPITestbench _______________ __________________________ _______________________________________ 2e+09 10 47 2e+10 12 47 2e+11 59 47 2e+12 504 47 2e+13 4994 47 2e+14 52200 47 2e+15 5.0551e+05 47
Логарифмический график времени генерации для обоих этих типов испытательного стенда относительно Количества отсчетов, показывает, что, в то время как испытательный стенд HDL требует большего количества времени генерации с увеличением количества отсчетов, время генерации для испытательного стенда SystemVerilog DPI остается постоянным независимо от количества отсчетов.
loglog(numSamples,HDLTBtime,'b-o', numSamples,DPICTBtime, 'r-o' ); xlim([2e09 2e15]); legend('HDL Test Bench','SystemVerilog DPI Test Bench','Location','northwest'); xlabel('Number Of Samples'); ylabel('Generation time (in seconds)'); close_system(modelname,0);
В то время как испытательный стенд HDL очень эффективен для маленького количества отсчетов, если ваш сценарий тестирования требует большого количества выборок, испытательный стенд DPI HDL Verifier™ SystemVerilog обеспечивает более быструю генерацию испытательного стенда.