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, 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 для выполнения в 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 с помощью команды 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