В этом примере показов, как использовать испытательный стенд DPI SystemVerilog для верификации HDL-кода, где требуется большой набор данных.
В некоторых приложениях для проверки HDL-кода, сгенерированного HDL- выборок, для вашего алгоритма требуется симуляция большого количества Coder™. Например, эти приложения требуют большого количества выборок для верификации алгоритма:
а) Вычисление радиолокационных астрономических частотных каналов с помощью полифазы фильтров.
b) Получение частоты битовой ошибки (BER) от декодера Viterbi в коммуникационной системе.
c) Алгоритмы потоковой обработки видео на видео с высоким разрешением.
Генерация HDL- испытательного стенда для проверки такого проекта занимает много времени, потому что кодер должен симулировать модель в Simulink, чтобы получить испытательный стенд данные.
Более быстрой сгенерированной испытательным стендом альтернативой является HDL Verifier™ SystemVerilog DPI испытательного стенда. DPI- испытательного стенда SystemVerilog не требует симуляции Simulink, поэтому для больших наборов данных он генерирует испытательный стенд в более короткое время, чем HDL- испытательного стенда.
HDL Verifier™ SystemVerilog DPI испытательного стенда интегрируется с Simulink Coder™, чтобы экспортировать систему Simulink в качестве сгенерированного кода C внутри компонента SystemVerilog с интерфейсом прямого программирования (DPI). В компоненте DPI-C стимулы генерируются и применяются к подсистеме C, а также применяются к сгенерированному HDL-коду для системы Simulink. Испытательный стенд сравнивает выходы симуляции HDL с выходами компонента DPI-C для проверки проекта.
Полифаза фильтров является широко используемым методом для уменьшения неточности в БПФ из-за утечек и потерь гребешка. Полифаза фильтров создает более плоскую характеристику по сравнению с нормальной ДПФ, значительно подавляя внеполосные сигналы.
Модель является Polyphase Filter Bank, который состоит из фильтра и БПФ, который обрабатывает 16 выборок за раз. Для получения дополнительной информации о банке полифазных фильтров смотрите Высокопроизводительный Канализатор для FPGA.
modelname = 'hdlcoder_DPIC_testbench';
open_system(modelname);
Обратный коллбэк InitFcn (Свойства модели > Коллбэки > InitFcn) настраивает модель. В этом примере используется БПФ с 512 точками с четырьмя фильтрами отвода для каждой полосы. dsp. Объект Channelizer используется, чтобы сгенерировать коэффициенты.
Алгоритм требует 512 фильтров (по одному фильтру для каждой полосы). Для векторного входа из 16 выборок реализация фильтра разделяет 16 фильтров, 32 раза. Входные данные состоят из двух синусоид, 200KHz и 250 кГц.
Используйте временную директорию для сгенерированных файлов:
workingdir = tempname;
Проверьте совместимость генерации HDL-кода в подсистеме PolyphaseFilterBank:
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.
Также можно задать испытательный стенд DPI SystemVerilog опций на панели 'Генерация HDL-кода > Испытательный стенд' в параметрах конфигурации.
При запросе испытательного стенда SystemVerilog DPI кодер генерирует следующие программные продукты:
a.) PolyPhaseFilterBank_dpi_tb.sv - Это испытательный стенд SystemVerilog, который проверяет HDL-код.
б) PolyPhaseFilterBank_dpi_tb.do - Это файл макроса, который Mentor Graphics ModelSim ® использует для компиляции HDL-кода и запуска симуляции испытательного стенда.
На основе выбранного симулятора кодер генерирует другой файл для компиляции и симуляции испытательного стенда. Например, если вы выбираете 'Incisive', кодер генерирует 'PolyPhaseFilterBank _ dpi _ tb.sh' для компиляции и симуляции на Cadence Incisive ®.
Чтобы инструментализировать Симулятор HDL, чтобы сгенерировать отчет о покрытии HDL-кода и базу данных, также:
a.) На панели «Генерация HDL-кода > Испытательный Стенд» установите флажок «HDL code coverage».
б) При вызове 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- испытательного стенда очень эффективен для небольшого количества выборок, если ваш сценарий тестирования требует большого количества выборок, HDL Verifier™ SystemVerilog DPI испытательного стенда обеспечивает более быструю генерацию испытательного стенда.