exponenta event banner

Реализация компонента отображения спектра в MATLAB

®

MODIMSPECDISP показывает, как MATLAB ® может использоваться для реализации компонента VHDL, который используется для отображения спектра сигнала из проекта VHDL в ModelSim ®. Этот пример компилирует источник VHDL, содержащий синусоидальный сигнал скачкообразной перестройки частоты, питающий фильтр нижних частот, и определяет компонент отображения спектра в MATLAB. Компонент MATLAB буферизирует свои входы в кадры 128 выборок и отображает спектры нефильтрованных и отфильтрованных сигналов во время выполнения моделирования. В этом примере требуется временная рабочая папка для создания рабочего проекта ModelSim VHDL. После создания проекта VHDL в этом примере запускается ModelSim (для этого требуется доступ к ModelSim из командной строки). Этот пример использует общую память для завершения связи и поэтому требует, чтобы ModelSim находился на том же компьютере, что и MATLAB. После компиляции проекта моделирование можно запустить в ModelSim.

Указать используемые файлы

Файл sine_waves.vhd содержащий исходный сигнал, разработанный в VHDL.

Файл lowpass_filter.vhd содержащий фильтр нижних частот, разработанный в MATLAB и созданный с помощью Coder™ HDL конструкции фильтра.

Файл spec_display.vhd содержащий моделируемый компонент MATLAB. Он содержит сущность с пустой архитектурой. Команда matlabcp проверяет входы VHDL экземпляра, созданного из этого объекта.

Файл specdisp_top.vhd содержащий проводку верхнего уровня между источником, фильтром нижних частот и компонентом MATLAB.

можно также определить переменные UsrTclCmds и RunMode с помощью команд tcl и runmode модуля Modelsim. Примеры:

UsrTclCmds = {'run 100000'}; RunMode = «Batch» или «CLI» или «GUI»;

srcfile1 = fullfile(matlabroot,'toolbox','edalink','extensions','modelsim','modelsimdemos',...
    'vhdl','specdisp','sine_waves.vhd');
srcfile2 = fullfile(matlabroot,'toolbox','edalink','extensions','modelsim','modelsimdemos',...
    'vhdl','specdisp','lowpass_filter.vhd');
srcfile3 = fullfile(matlabroot,'toolbox','edalink','extensions','modelsim','modelsimdemos',...
    'vhdl','specdisp','spec_display.vhd');
srcfile4 = fullfile(matlabroot,'toolbox','edalink','extensions','modelsim','modelsimdemos',...
    'vhdl','specdisp','specdisp_top.vhd');

ModelSim использует формат каталога стиля UNIX ®, который использует косую черту («/») вместо обратной косой черты («\»).

unixsrcfile1 = ['"' strrep(srcfile1,'\','/') '"'];
unixsrcfile2 = ['"' strrep(srcfile2,'\','/') '"'];
unixsrcfile3 = ['"' strrep(srcfile3,'\','/') '"'];
unixsrcfile4 = ['"' strrep(srcfile4,'\','/') '"'];

Создать каталог проекта

Создается временный рабочий каталог, в котором будет создан проект.

if ispc
    projdir = tempdir;
else
    projdir = tempname;
end
warnstatus = warning('off','MATLAB:MKDIR:DirectoryExists');
mkdir(projdir);
warning(warnstatus);
unixprojdir =  strrep(projdir,'\','/');

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

Сначала мы запускаем сервер MATLAB, hdldaemon, так что он использует обмен общей памятью. Сначала проверьте, работает ли сервер с общей памятью. Если hdldaemon не запущен, он запускается. Или, если он работает с использованием связи с сокетом TCP/IP, он отключается и перезапускается с помощью связи с общей памятью.

dstatus = hdldaemon('status');
if isempty(dstatus)
    % hdldaemon is not running
    % start it - default is shared memory communication
    dstatus = hdldaemon;
elseif strcmp(dstatus.comm,'shared memory')
    % hdldaemon is already running with shared memory
elseif strcmp(dstatus.comm,'sockets')
    % hdldaemon is running with socket communication
    % shut it down and restart it
    disp('Shutting down HDLDaemon to restart it with shared memory');
    hdldaemon('kill');
    dstatus = hdldaemon;
else
    error('unexpected return value from hdldaemon(''status'')');
end
HDLDaemon is NOT running
HDLDaemon shared memory server is running with 0 connections

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

Затем зададим команды Tcl для выполнения в ModelSim перед запуском моделирования.

tclcmd = {};

cd изменение команды во временную рабочую папку.

tclcmd = [tclcmd, ['cd ',unixprojdir]];

vlib команда создает библиотеку проектов work.

tclcmd = [tclcmd, 'vlib work'];

vcom компилирует файл VHDL. -performdefaultbinding включает привязки по умолчанию в случае, если они были отключены в файле modelsim.ini.

tclcmd = [tclcmd, ['vcom -performdefaultbinding ' unixsrcfile1],...
                  ['vcom -performdefaultbinding ' unixsrcfile2],...
                  ['vcom -performdefaultbinding ' unixsrcfile3],...
                  ['vcom -performdefaultbinding ' unixsrcfile4]];

vsimmatlab команда, вариант ModelSim vsim загружает экземпляр объекта VHDL для косимуляции с помощью MATLAB. Эта команда является расширением Verifier™ HDL для набора команд ModelSim.

tclcmd = [tclcmd, 'vsimmatlab work.specdisp_top'];

matlabcp инициирует компонент MATLAB для загруженного экземпляра объекта spec_display. Эта команда является расширением HDL Verifier для набора команд ModelSim. -mfunc указывает specdisplay.m будет использоваться для реализации этого компонента.

tclcmd = [tclcmd, 'matlabcp u_spec_display -mfunc specdisplay'];

force команда применяет стимул к синхросигналам и сигналам сброса.

tclcmd = [tclcmd, 'force sim:/specdisp_top/clk_enable 1 0',...
                  'force sim:/specdisp_top/reset 1 0, 0 20 ns',...
                  'force sim:/specdisp_top/clk 1 0 ns, 0 40 ns -r 80ns'];


% Add "if any" user tcl commands at the end.
if exist('UsrTclCmds','var')
    tclcmd(end+1)=UsrTclCmds;
end

Запуск ModelSim

®

Теперь запустите ModelSim с помощью команды vsim. 'tclstart' приводит к выполнению указанных команд Tcl при запуске. Чтобы выполнить моделирование, используйте команду run в ModelSim, указав соответствующее время моделирования. Например, тип run 100000 в ModelSim. Мы видим обновление фигуры по мере моделирования. Обязательно выйдите из ModelSim и завершите работу сервера MATLAB с помощью hdldaemon kill по завершении работы с этим примером при каждом запуске примера запускается новый ModelSim. перед выполнением этого примера можно также указать RunMode = «Batch» или «CLI» или «GUI». Если не указан режим выполнения по умолчанию - GUI.

if exist('RunMode','var')
    vsim('tclstart',tclcmd,'runmode',RunMode);
else
    vsim('tclstart',tclcmd);
end