MODSIMSPECDISP показывает, как MATLAB ® может использоваться для реализации VHDL-компонента, который используется для отображения спектра сигнала от проекта VHDL в ModelSim ®. Этот пример компилирует источник VHDL, содержащий скачкообразную перестройку частоты синусоиды подачи lowpass фильтра, и задает компонент отображения спектра в MATLAB. Компонент MATLAB буферизует свои входы в системы координат 128 выборок и отображает спектры нефильтрованных и фильтрованных сигналов во время симуляции. Этот пример требует временной рабочей директории, чтобы сгенерировать рабочий проект ModelSim VHDL. После создания проекта VHDL этот пример запускает ModelSim (для этого требуется доступ к ModelSim из командной строки). Этот пример использует общую память для завершения ссылки и поэтому требует, чтобы ModelSim находился на том же компьютере, что и MATLAB. После компиляции проекта симуляция может быть выполнено из ModelSim.
Файловая sine_waves.vhd содержит исходный сигнал, разработанный в VHDL.
Файловая lowpass_filter.vhd содержит lowpass, разработанный в MATLAB и сгенерированный с помощью Filter Design HDL Coder™.
Файловая spec_display.vhd содержит компонент MATLAB, который мы моделируем. Он содержит сущность с пустой архитектурой. Команда matlabcp проверяет VHDL- входов образца, созданной из этой сущности.
Файловая specdisp_top.vhd содержит проводку верхнего уровня между источником, lowpass и компонентом 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 = {};
The cd
команда изменяется во временной рабочей директории.
tclcmd = [tclcmd, ['cd ',unixprojdir]];
The vlib
команда создает библиотеку проекта work
.
tclcmd = [tclcmd, 'vlib work'];
The vcom
команда компилирует файл VHDL. The -performdefaultbinding
опция включает привязки по умолчанию в случае, если они были отключены в файле modelsim.ini.
tclcmd = [tclcmd, ['vcom -performdefaultbinding ' unixsrcfile1],... ['vcom -performdefaultbinding ' unixsrcfile2],... ['vcom -performdefaultbinding ' unixsrcfile3],... ['vcom -performdefaultbinding ' unixsrcfile4]];
The vsimmatlab
команда, вариант vsim
ModelSim команда загружает образец сущности VHDL для косимуляции с MATLAB. Эта команда является HDL Verifier™ расширением набора команд ModelSim.
tclcmd = [tclcmd, 'vsimmatlab work.specdisp_top'];
The matlabcp
команда инициирует компонент MATLAB для загруженного образца сущности spec_display
. Эта команда является расширением HDL Verifier для набора команд ModelSim. The -mfunc
опция задает specdisplay.m будет использоваться для реализации этого компонента.
tclcmd = [tclcmd, 'matlabcp u_spec_display -mfunc specdisplay'];
The 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. The '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