В этом примере показано, как MATLAB® может использоваться в качестве испытательного стенда для компонента HDL. Мы компилируем фильтр нижних частот HDL и затем тестируем его с помощью matlabtb.
Временная директория используется в скомпилированных и разработанных файлах HDL. Если снимок состояния готов, мы запускаем сеанс средства моделирования Cadence® Incisive®. (У вас должны быть Острые исполняемые файлы средства моделирования на вашем ПУТИ.) Мы используем сопряжение с общей памятью между MATLAB симулятор HDL, таким образом, оба должны быть на том же компьютере.
В этом примере фильтр нижних частот Verilog был спроектирован и сгенерирован с продуктом Filter Design HDL Coder™ MathWorks™, и наше задание должно протестировать его путем сравнения его с фильтром MATLAB. Мы не будем запускать разработчика фильтра в этом примере. Фильтр имеет шаг расчета 10 нс (частота дискретизации 100 МГц) с полосой пропускания Fpass = 20 МГц и полоса задерживания Fstop = 25 МГц. Фильтр Verilog имеет задержку двух выборок.
Файл lowpass_filter.v содержит фильтр нижних частот, сгенерированный Filter Design HDL Coder.
Файл filter_tb_incisive.m содержит испытательный стенд MATLAB.
srcfile = fullfile(matlabroot,'toolbox','edalink','extensions','incisive','incisivedemos','Filter','lowpass_filter.v');
Мы создаем временную рабочую директорию, в которой будет скомпилирован проект.
projdir = tempname; warnstatus = warning('off','MATLAB:MKDIR:DirectoryExists'); mkdir(projdir); warning(warnstatus);
Мы запускаем сервер MATLAB, hdldaemon, такой, что он использует коммуникацию общей памяти.
hdldaemon;
HDLDaemon shared memory server is running with 0 connections
Затем мы задаем команды Tcl, чтобы выполниться в симуляторе HDL, прежде чем симуляция будет запущена. Следующие списки команд выполнятся в интерпретаторе Tcl. Команды скомпилируют и разработают проект и затем запустят ncsim посредством hdlsimmatlab команды Tcl. Все команды предшествовали с - вход передается ncsim и выполняется в ncsim интерпретаторе Tcl. Эти команды будут:
превратитесь в рабочую директорию
скомпилируйте фильтр verilog
разработайте фильтр и включите доступ для записи чтения к портам
запустите ncsim с поддержки испытательного стенда MATLAB путем вызова hdlsimmatlab, остающиеся команды выполняются в ncsim
запланируйте функцию MATLAB filter_tb_incisive, чтобы быть названными каждыми 10 нс
включите часы
сбросьте модуль после 22 нс
управляйте часами на 10 нс
инициализируйте вход фильтра к 0
tclcmd = { ['cd ',projdir],... ['exec ncvlog -64bit ' srcfile],... 'exec ncelab -64bit -access +wc lowpass_filter',... ['hdlsimmatlab -gui lowpass_filter ', ... ' -input "{@matlabtb lowpass_filter 10ns -repeat 10ns -mfunc filter_tb_incisive}"',... ' -input "{@force lowpass_filter.clk_enable 1 -after 0ns}"',... ' -input "{@force lowpass_filter.reset 1 -after 0ns 0 -after 22ns}"',... ' -input "{@force lowpass_filter.clk 1 -after 0ns 0 -after 5ns -repeat 10ns}"',... ' -input "{@deposit lowpass_filter.filter_in 0}"',... ]};
Теперь мы запускаем симулятор HDL через nclaunch команду. 'tclstart'
свойство заставляет заданные команды Tcl быть запущенными при запуске. Если симулятор HDL запускается, начните симуляцию с помощью команды выполнения в ncsim
консоль, задавая соответствующее время симуляции. Например, введите run 100000
.
nclaunch('tclstart',tclcmd);
В этой точке откроется фигура MATLAB с двумя подграфиками. Верхний график показывает спектр входного сигнала. Более низкий график показывает, что спектр фильтра HDL вывел overlayed со спектром фильтра MATLAB выход. Необходимо будет увеличить масштаб, чтобы видеть различие между выходными спектрами. Рабочее среднее значение и максимум абсолютной погрешности во временном интервале также показывают ниже графиков. Фигура будет обновлена каждые 1 024 выборки.
Это завершает этот пример.
Обязательно выйдите из симулятора HDL, если вы сделаны с этим примером как каждый раз, когда пример запущен, новый сеанс средства моделирования запускается. Также имейте в виду, что этот пример создал некоторые временные файлы во временной директории.