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

®

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

Сначала запускаем сервер 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 = {};

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

®

Теперь запускаем 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
Для просмотра документации необходимо авторизоваться на сайте