exponenta event banner

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

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

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

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

  • Файл lowpass_filter.v содержащий фильтр нижних частот, созданный кодером HDL конструкции фильтра.

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

Необходимо иметь исполняемые файлы имитатора HDL на системном пути. Обратите внимание, что в этом примере не выполняется кодер HDL конструкции фильтра.

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

Этот пример разделен на несколько шагов, которые показывают, как написать сценарий, который выполняет косимуляцию между 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);
  • Резак/Кселий

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

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

Запустите сервер MATLAB с помощью функции hdldaemon HDL Verifier. Задайте свойство «» сокет «» для указания связи сокета.

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

Задание команд TCL

Укажите команды Tcl для выполнения в имитаторе ЛПВП. Эти команды компилируют конструкцию ЛПВП, загружают библиотеку косимуляции, планируют функцию обратного вызова и управляют сигналами ЛПВП.

  • 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'};
  • Резак/Кселий

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». Когда cosimulation завершается в имитаторе HDL, мы отправляем событие ID 1 hdldaemon через команду notifyMatlabServer. В MATLAB команда waitForHdlClient ожидает получения этого идентификатора события. (Можно также использовать команды notifyMatlabServer и waitForHdlClient при запуске косимуляции в режимах CLI или GUI.)

  • ModelSim/QuestaSim

tclcmd = [tclcmd,...
   {'run 10000',...
   ['notifyMatlabServer 1 -socket ' socket_port]}];
  • Резак/Кселий

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;

Запуск имитатора ЛПВП в пакетном режиме для первого запуска косимуляции

Запустите имитатор ЛПВП в пакетном режиме, установив для свойства «runmode» команду HDL Verifier vsim для ModelSim или команду nclaunch для Insisive. Процесс имитатора HDL запускается в фоновом режиме, и в Windows ® открывается окно команд. Затем используйте команду waitForHdlClient для ожидания события с идентификатором 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
  • Резак/Кселий

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 в пакетном режиме и дождитесь завершения запуска косимуляции с помощью команды waitForHdlClient.

  • ModelSim/QuestaSim

vsim('tclstart',tclcmd, 'rundir', projdir,...
    'runmode','Batch'); % Start HDL simulator in batch mode
waitForHdlClient(120,1); % Waiting for cosimulation to finish
  • Резак/Кселий

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

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

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