В этом примере показано, как MATLAB ® может использоваться в качестве тестового стенда для HDL-компонента. Мы скомпилируем HDL фильтр нижних частот, а затем протестируем его с помощью matlabtb.
Временная директория используется для составленных и разработанных файлов HDL. Когда снимок готов, мы начинаем сеанс симулятора Cadence ® Incisive ®. (Вы должны иметь исполняемые файлы Incisive simulator на вашем ПУТЬ.) Мы используем соединение общей памяти между MATLAB симулятором HDL, поэтому оба должны быть на одном компьютере.
В этом примере фильтр нижних частот Verilog был разработан и сгенерирован с помощью продукта MathWorks™ Filter Design HDL Coder™, и наша задача - протестировать его путем сравнения с фильтром MATLAB. Мы не будем запускать filter designer в этом примере. Фильтр имеет шаг расчета 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 ns часами
инициализируйте вход фильтра в 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. The 'tclstart'
свойство приводит к выполнению заданных команд Tcl при запуске. После запуска Симулятора HDL начните симуляцию с помощью команды run в ncsim
консоль, задающая соответствующее время симуляции. Для примера типа run 100000
.
nclaunch('tclstart',tclcmd);
На данной точке откроется фигура MATLAB с двумя подграфиками. Верхний график показывает спектр входного сигнала. Нижний график показывает спектр выходного сигнала HDL-фильтра, наложенного на спектр выходного сигнала MATLAB. Вам придется увеличить масштаб, чтобы увидеть различие между выходными спектрами. Среднее выполнение и максимум абсолютной ошибки во временном интервале также показаны ниже графиков. Рисунок будет обновляться каждые 1024 выборки.
На этом этот пример завершается.
Обязательно закройте Симулятор HDL, когда вы сделаете это с помощью этого примера, так как каждый раз, когда пример запускается, запускается новый сеанс симулятора. Также имейте в виду, что этот пример создал некоторые временные файлы во временной директории.