Косимуляция пакетного режима для проверки компонента фильтра

Этот пример иллюстрирует запуск ModelSim ® или Incisive ® Симулятор HDL в пакетном режиме для тестирования HDL-компонента с помощью испытательного стенда MATLAB ®. В этой демонстрации мы компилируем HDL-фильтр lowpass, разработанный и сгенерированный с помощью Coder™ Filter Design HDL, а затем тестируем его ответ с помощью функции HDL Verifier™ matlabtb. Вся косимуляция выполняется в пакетном режиме.

В этом примере:

  • Фильтр имеет шаг расчета 10 нс (скорость дискретизации 100 МГц) с полосой пропускания Fpass = 20 МГц и полосой остановки Fstop = 25 МГц.

  • Файл lowpass_filter.v содержит фильтр lowpass, сгенерированный Filter Design HDL Coder.

  • Мы создаем временную директорию для составленных и разработанных HDL- файлов.

В системном пути должны быть Симуляторы HDL исполняемые файлы. Обратите внимание, что во время этого примера мы не запускаем Filter Design HDL Coder.

Запуск симуляции всего пакетного режима

Этот пример разделен на несколько шагов, которые показывают, как написать скрипт, который выполняет косимуляцию между MATLAB и симулятор HDL. Однако для многих приложений пакетного режима вы запустите один скрипт, чтобы выполнить несколько запусков симуляции.

Создайте директорию проекта

Создайте временную рабочую директорию для компиляции проекта и скопируйте необходимые файлы.

  • ModelSim/QuestaSim

projdir = tempname;
mkdir(tempdir,strrep(projdir,tempdir,''));
unixprojdir = strrep(projdir,'\','/');
copyfile(fullfile(matlabroot,'toolbox','edalink','extensions','modelsim','modelsimdemos','Filter_batch','filtertb_modelsim.m'),pwd);
  • Резцовый/Xcelium

projdir = tempname;
mkdir(projdir);
copyfile(fullfile(matlabroot,'toolbox','edalink','extensions','incisive','incisivedemos','Filter_batch','filtertb_batch_in.m'),pwd);

Запуск сервера MATLAB

Запустите сервер MATLAB с помощью функции hdldaemon HDL Verifier. Установите свойство 'socket', чтобы задать связь с сокетом.

status = hdldaemon('socket',0);
socket_port = status.ipc_id; %Socket number to be used for cosimulation

Задайте команды TCL

Задайте команды Tcl, которые будут выполняться в Симулятор HDL. Эти команды скомпилируют проект, загрузят библиотеку косимуляции, запланируют функцию обратного вызова и управляют HDL-сигналами.

  • ModelSim/QuestaSim

srcfile= fullfile(matlabroot,'toolbox','edalink','extensions',...
       'modelsim','modelsimdemos','Filter_batch','lowpass_filter.v');
unixsrcfile = ['"' strrep(srcfile,'\','/') '"'];
tclcmd ={['cd ', unixprojdir],...
         'vlib work',...
        ['vlog ' unixsrcfile],...
         'vsimmatlab  lowpass_filter ', ...
        ['matlabtb lowpass_filter 10ns -repeat 10ns -mfunc filtertb_modelsim -socket ' socket_port],...
         'force clk_enable 1 0',...
         'force reset 1 0, 0 25',...
         'force clk 1 0, 0 5 -repeat 10'};
  • Резцовый/Xcelium

srcfile = fullfile(matlabroot,'toolbox','edalink','extensions',...
   'incisive','incisivedemos','Filter_batch','lowpass_filter.v');
unixsrcfile = ['"' strrep(srcfile,'\','/') '"'];
tclcmd = {  ['cd ',projdir],...
           ['exec ncvlog -64bit ' unixsrcfile],...
           'exec ncelab -64bit -access +wc lowpass_filter',...
           ['hdlsimmatlab lowpass_filter ', ...
           [' -input "{@matlabtb lowpass_filter 10ns -repeat 10ns -mfunc filtertb_batch_in -socket ' socket_port '}"'],...
            ' -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}"'...
           ]};

Добавьте команды 'run' и 'notifyMatlabServer'

Поскольку мы запускаем симулятор HDL в пакетном режиме, мы не можем выдать команду run в интерактивном режиме. Вместо этого мы предоставляем команду run в свойстве 'tclstart'. Когда косимуляция заканчивается в симуляторе HDL, мы отправляем ID события 1 в hdldaemon через команду notifyMatlabServer. В MATLAB команда waitForHdlClient ожидает получения этого идентификатора события. (Можно также использовать команды notifyMatlabServer и waitForHdlClient, когда косимуляция запускается в режимах CLI или GUI.)

  • ModelSim/QuestaSim

tclcmd = [tclcmd,...
   {'run 10000',...
   ['notifyMatlabServer 1 -socket ' socket_port]}];
  • Резцовый/Xcelium

tclcmd{end} = [tclcmd{end} ...
   ' -input "{@run 10000 ns}"' ...
   ' -input "{@notifyMatlabServer 1 -socket ' socket_port '}"'];

Подготовка Испытательного стенда данных

Объявите частоту входного сигнала глобальной, чтобы получить доступ к нему как внутри, так и вне функции обратного вызова. Для первого прогона косимуляции вход к фильтру составляет 1 МГц синусоиды.

global frequency;   % Frequency of input signal
global ticks;       % Number of callbacks executed
frequency = 1e6;    % 1 MHz
ticks     = 0;

Запустите Симулятор HDL в пакетном режиме для первого прогона косимуляции

Запустите симулятор HDL в пакетном режиме путем установки свойства 'runmode' в команду HDL Verifier vsim для ModelSim или команду nclaunch для Incisive. Процесс HDL-симулятора запускается в фоновом режиме, и в Windows ® открывается командное окно. Затем используйте команду waitForHdlClient, чтобы дождаться события ID 1, отправленного командой notifyMatlabServer в симуляторе HDL. Получение этого идентификатора указывает, что косимуляция окончена, и мы можем перейти к следующему шагу. Если этот идентификатор события не получен в течение 120 секунд, выдается сообщение об ошибке.

  • ModelSim/QuestaSim

vsim('tclstart',tclcmd, 'rundir',projdir,...
    'runmode','Batch'); % Start HDL simulator in batch mode
waitForHdlClient(120,1); % Waiting for cosimulation to finish
  • Резцовый/Xcelium

nclaunch('tclstart',tclcmd, 'rundir',projdir,...
    'runmode','Batch'); % Start HDL simulator in batch mode
waitForHdlClient(120,1); % Waiting for cosimulation to finish

Подготовка следующего запуска косимуляции

Во втором прогоне косимуляции входной сигнал составляет 25 МГц синусоиды.

frequency = 25e6; % 25 MHz
ticks = 0;

Запустите Симулятор HDL в пакетном режиме для второго Запуска косимуляции

Запустите симулятор HDL в пакетном режиме еще раз и дождитесь запуска косимуляции с помощью команды waitForHdlClient.

  • ModelSim/QuestaSim

vsim('tclstart',tclcmd, 'rundir', projdir,...
    'runmode','Batch'); % Start HDL simulator in batch mode
waitForHdlClient(120,1); % Waiting for cosimulation to finish
  • Резцовый/Xcelium

nclaunch('tclstart',tclcmd, 'rundir',projdir,...
    'runmode','Batch'); % Start HDL simulator in batch mode
waitForHdlClient(120,1); % Waiting for cosimulation to finish

Когда симуляция завершена, открываются две фигуры MATLAB. Первый график показывает входной сигнал 1 МГц и его выход. Второй график показывает входной сигнал 25 МГц и соответствующий выход.

На этом этот пример завершается.

Для просмотра документации необходимо авторизоваться на сайте