Этот пример проводит вас по основным шагам для подготовки приложения HDL Verifier™, которое использует MATLAB®, чтобы проверить простой проект HDL. В этом примере вы разрабатываете, симулируете и проверяете модель генератора псевдослучайного числа на основе последовательности Фибоначчи. Модель закодирована в VHDL®.
Этот пример демонстрирует создание и выполнение испытательного стенда с помощью ModelSim® SE 6.5. Если вы не используете эту версию, сообщения и отображаемые изображения от ModelSim не могут появиться вам точно, как они делают в этом примере.
Этот пример требует MATLAB, программного обеспечения HDL Verifier и симулятора HDL ModelSim.
В этом примере вы выполните следующие шаги:
Чтобы помочь другим иметь доступ к копиям учебных файлов, настройте папку для своей собственной учебной работы:
Создайте папку вне осциллографа вашей папки установки MATLAB, в которую можно скопировать учебные файлы. Папка должна быть перезаписываема. Этот пример предполагает, что вы создаете папку под названием MyPlayArea
.
Скопируйте следующие файлы в папку, которую вы только создали:
matlabroot
\toolbox\edalink\extensions\modelsim\modelsimdemos\modsimrand_plot.m
matlabroot
\toolbox\edalink\extensions\modelsim\modelsimdemos\VHDL\modsimrand\modsimrand.vhd
В этом разделе описываются стартовый MATLAB, настраивая текущую папку для завершения примера, запуска серверного компонента MATLAB и проверки клиентские связи, с помощью общей памяти или режима сокета TCP/IP. Эти инструкции принимают, что вы знакомы с интерфейсом пользователя MATLAB.
Выполните следующие шаги:
StartMatlab.
Установите свою текущую папку MATLAB на папку, которую вы создали в Настроенных Учебных Файлах.
Проверьте, что сервер MATLAB запускается путем вызова функционального hdldaemon
с 'status'
опция в Окне Команды MATLAB как показано здесь:
hdldaemon('status')
Если сервер не запускается, функциональные отображения
HDLDaemon is NOT running
Если сервер запускается в режиме сокета TCP/IP, чтениях сообщения
HDLDaemon socket server is running on Port portnum with 0 connections
Если сервер запускается в режиме общей памяти, чтениях сообщения
HDLDaemon shared memory server is running with 0 connections
Если сервер в настоящее время не запускается, пропуск, чтобы продвинуться 5
.
Закройте сервер путем ввода
hdldaemon('kill')
Вы будете видеть следующее сообщение, которое подтверждает, что сервер был закрыт.
HDLDaemon server was shutdown
Запустите сервер в режиме сокета TCP/IP путем вызова hdldaemon
с именем свойства / пара значения свойства 'socket' 0
. Значение 0 указывает, что операционная система присваивает сервер порт сокета TCP/IP, который доступен в вашей системе. Например,
hdldaemon('socket', 0)
Сервер сообщает вам, что запустился путем отображения следующего сообщения. portnum
будет характерно для вашей системы:
HDLDaemon socket server is running on Port portnum with 0 connections
Сделайте примечание portnum
когда вам будет нужен он, когда вы выпустите matlabtb
команда в Симуляции Загрузки.
Можно альтернативно указать, что сервер MATLAB использует коммуникацию общей памяти вместо коммуникации сокета TCP/IP; однако, для этого примера мы будем использовать коммуникацию сокета в качестве средних значений демонстрации этого типа связи. Для получения дополнительной информации о том, как задать различные варианты, см. описание hdldaemon
.
В этом разделе описываются основную процедуру для запуска программного обеспечения ModelSim и подготовки библиотека проекта ModelSim. Эти инструкции принимают, что вы знакомы с пользовательским интерфейсом ModelSim.
Выполните следующие шаги:
Запустите ModelSim со среды MATLAB путем вызова функционального vsim
в окне Команды MATLAB.
vsim
Эта функция запускает и конфигурирует ModelSim для использования с программным обеспечением HDL Verifier. Первая папка ModelSim совпадает с вашей текущей папкой MATLAB.
Проверьте текущую папку ModelSim. Можно проверить, что текущая папка ModelSim совпадает с текущей папкой MATLAB путем ввода ls
команда в командном окне ModelSim.
Команда должна перечислить файлы modsimrand.vhd
, modsimrand_plot.m
, transcript
, и compile_and_launch.tcl
.
Если это не делает, изменяет вашу папку ModelSim в текущую папку MATLAB. Можно найти текущую папку MATLAB путем взгляда в Браузере текущей папки или путем просмотра панели навигации Текущей папки. В ModelSim можно изменить рабочую папку путем выдачи команды
cd directory
Где directory
папка, от которой вы хотите работать. Или можно также изменить директорию путем выбора File> Change Directory....
Создайте библиотеку проекта, чтобы содержать ваши результаты компиляции. Создать библиотеку и потребовало _info
файл, введите vlib
и vmap
команды можно следующим образом:
ModelSim> vlib work ModelSim> vmap work work
Необходимо использовать меню ModelSim File или vlib
команда, чтобы создать папку библиотеки так, чтобы необходимый _info
файл создается. Не создавайте библиотеку с командами операционной системы.
После создания библиотеки проекта обычно вы использовали бы Редактор ModelSim, чтобы создать и изменить ваш HDL-код. Для этого примера вы не должны создавать код VHDL сами. Вместо этого открытый и исследуют существующий файл modsimrand.vhd
. Этот раздел подсвечивает области кода в modsimrand.vhd
это является представляющим интерес для испытательного стенда ModelSim и MATLAB.
Если вы выбираете not to examine the HDL code at this time, пропускаете, чтобы Скомпилировать Код VHDL.
Можно открыть modsimrand.vhd
в окне редактирования с edit
команда, можно следующим образом:
ModelSim> edit modsimrand.vhd
ModelSim открывает свое окно edit и отображает код VHDL для modsimrand.vhd
.
В то время как вы просматриваете файл, отметьте следующее:
Линия ENTITY modsimrand
содержит определение для сущности VHDL modsimrand:
ENTITY modsimrand IS PORT ( clk : IN std_logic ; clk_en : IN std_logic ; reset : IN std_logic ; dout : OUT std_logic_vector (31 DOWNTO 0); END modsimrand;
Это - сущность, которая будет проверена в среде MATLAB во время примера. Отметьте следующее:
По умолчанию сервер MATLAB принимает, что имя функции MATLAB, которая проверяет сущность в среде MATLAB, совпадает с именем сущности. У вас есть опция именования функции MATLAB явным образом. Однако, если вы не зададите имя, сервер ожидает, что имя функции будет совпадать с именем сущности. В этом примере именем функции MATLAB является modsimrand_plot
и не соответствует.
Сущность должна быть задана с PORT
пункт, который включает по крайней мере одно определение порта. Каждое определение порта должно задать режим порта (IN
, OUT
, или INOUT
) и тип данных VHDL, который поддерживается программным обеспечением HDL Verifier.
Сущность modsimrand
в этом примере задан с тремя входными портами clk
, clk_en
, и reset
из типа STD_LOGIC
и выходной порт dout
из типа STD_LOGIC_VECTOR
. Выходной порт раздает выходные данные симуляции к функции MATLAB для верификации. Дополнительные входные порты получают часы и сбрасывают сигналы от функции. В качестве альтернативы входные порты могут получить сигналы от ModelSim force
команды.
Для получения дополнительной информации о кодировании сущностей порта для использования с MATLAB смотрите Модули HDL Кодирования для Верификации с MATLAB.
Остающийся код для modsimrand.vhd
задает поведенческую архитектуру для modsimrand
это пишет случайным образом сгенерированную последовательность Фибоначчи в выходной регистр, когда часы испытывают возрастающее ребро.
По окончании исследовав файл, закрываете окно ModelSim edit.
После того, как вы создаете или редактируете свои исходные файлы VHDL, компилируете их. Как часть этого примера, скомпилируйте modsimrand.vhd
. Один способ скомпилировать файл состоит в том, чтобы кликнуть по имени файла в рабочей области проекта и выбрать Compile> Compile All. Альтернатива должна задать modsimrand.vhd
с vcom
команда, можно следующим образом:
ModelSim> vcom modsimrand.vhd
Если компиляция успешно выполняется, сообщения появляются в командном окне, и компилятор заполняет библиотеку работы с результатами компиляции.
Программное обеспечение HDL Verifier проверяет оборудование HDL в MATLAB как функция. Как правило, в этой точке вы создали бы или отредактировали бы функцию MATLAB, которая удовлетворяет требования HDL Verifier. Для этого примера вы не должны разрабатывать функцию испытательного стенда MATLAB сами. Вместо этого открытый и исследуют существующий файл modsimrand_plot.m
.
Если вы выбираете not to examine the HDL code at this time, пропускаете, чтобы Загрузить Симуляцию.
modsimrand_plot.m
компонент низшего уровня примера Генератора случайных чисел MATLAB. Графический вывод кода в modsimrand_plot.m
не обсужден в следующем разделе. Этот пример фокусируется только на тех частях modsimrand_plot.m
это требуется для MATLAB проверить модель VHDL.
Можно открыть modsimrand_plot.m
в редакторе MATLAB. Например:
edit modsimrand_plot.m
В то время как вы просматриваете файл, отметьте следующее:
На линии 1, вы найдете имя функции MATLAB заданным наряду с его обязательными параметрами:
function [iport,tnext] = modsimrand_plot(oport,tnow,portinfo)
Это функциональное определение является значительным, потому что оно представляет канал связи между MATLAB и ModelSim. Примечание:
При кодировании функции необходимо задать функцию с двумя выходными параметрами, iport
и tnext
, и три входных параметра, oport
, tnow
, и portinfo
. См. определения синтаксиса и аргумента функции функции MATLAB.
Можно использовать iport
параметр, чтобы управлять входными сигналами вместо, или в дополнение к, с помощью других источников сигнала, таких как ModelSim force
команды. В зависимости от вашего приложения вы можете использовать любую комбинацию входных источников. Однако, если многочисленные источники управляют сигналами к одному iport
, вам будет нужна функция разрешения, чтобы обработать конкуренцию сигнала.
На линиях 22 и 23, вы найдете некоторую инициализацию параметра:
tnext = []; iport = struct();
В этом случае, функциональные выходные параметры iport
и tnext
инициализируются к пустым значениям.
При кодировании функции MATLAB для использования с HDL Verifier необходимо знать типы данных, из которых функция испытательного стенда получает и должна возвратить в ModelSim и как HDL Verifier обрабатывает эти данные; смотрите Поддерживаемые Типы данных. Эта функция включает следующие определения типа данных порта и преобразования:
Сущность, заданная для этого примера, состоит из трех входных портов типа STD_LOGIC
и выходной порт типа STD_LOGIC_VECTOR
.
Данные типа STD_LOGIC_VECTOR
состоит из вектор-столбца символов с одним битом за символ.
Интерфейс преобразует скалярные данные типа STD_LOGIC
к символу, который совпадает с символьным литералом для соответствующего перечислимого типа.
На линии 62, строка кода, содержащая oport.dout
показывает, как данные, которые функция MATLAB получает от ModelSim, могут должны быть быть преобразованы для использования в среде MATLAB:
ud.buffer(cyc) = mvl2dec(oport.dout)
В этом случае функция получает STD_LOGIC_VECTOR
данные по oport
. Функциональный mvl2dec
преобразует битовый вектор в десятичное значение, которое может использоваться в арифметических расчетах. Поддерживаемые Типы данных предоставляют сводные данные типов преобразований данных, чтобы рассмотреть при кодировании собственных функций MATLAB.
Не стесняйтесь просматривать остальную часть modsimrand_plot.m
. Когда вы будете закончены, пойдите, чтобы Загрузить Симуляцию.
После того, как вы скомпилируете исходный файл VHDL, вы готовы загрузить модель для симуляции. Этот раздел объясняет, как загрузить экземпляр сущности modsimrand
для симуляции:
Загрузите экземпляр modsimrand
для верификации. Чтобы загрузить экземпляр, задайте vsimmatlab
команда можно следующим образом:
ModelSim> vsimmatlab modsimrand
vsimmatlab
команда запускает средство моделирования ModelSim, vsim
, специально для использования с MATLAB. ModelSim отображает ряд сообщений в командном окне, когда это загружает пакеты и архитектуру сущности.
Инициализируйте средство моделирования для проверки modsimrand
с MATLAB. Вы инициализируете ModelSim при помощи HDL Verifier matlabtb
команда. Эта команда задает линию связи и коллбэк к функции MATLAB, которая выполняется в MATLAB от имени ModelSim. Кроме того, matlabtb
команда может задать параметры, которые управляют, когда функция MATLAB выполняется.
Для этого примера введите следующий matlabtb
команда:
> matlabtb modsimrand -mfunc modsimrand_plot -rising /modsimrand/clk -socket portnum
Аргументы в командной строке задают следующие условия:
modsimrand
— Задает модуль VHDL к cosimulate.
-mfunc modsimrand_plot
— Соединяет экземпляр сущности modsimrand
к функции MATLAB modsimrand_plot.m
. Аргумент требуется, потому что имя сущности не является тем же самым как именем функции испытательного стенда.
-rising /modsimrand/clk
— Указывает, что испытательный стенд функционирует быть названным каждый раз, когда /modsimrand/clk
сигнала испытывает возрастающее ребро.
-socket
portnum
— Задает номер порта, выпущенный с, или возвратился вызовом hdldaemon
в запуске сервер MATLAB.
Инициализируйте часы и сбросьте входные сигналы. Можно управлять входными сигналами симуляции с помощью нескольких механизмов, включая ModelSim force
команды и iport
параметр (см. Синтаксис Функции Испытательного стенда). На данный момент введите следующий force
команды:
> force /modsimrand/clk 0 0 ns, 1 5 ns -repeat 10 ns > force /modsimrand/clk_en 1 > force /modsimrand/reset 1 0, 0 50 ns
Первая команда обеспечивает clk
предупредите, чтобы оценить 0 в 0 наносекунд и к 1 в 5 наносекунд. После 10 наносекунд цикл начинает повторяться каждые 10 наносекунд. Второе и треть force
команды устанавливают clk_en
к 1 и reset
к 1 в 0 наносекунд и к 0 в 50 наносекунд.
Среда ModelSim готова запустить симуляцию. Теперь необходимо настроить функцию MATLAB.
Этот раздел объясняет, как запустить и контролировать эту симуляцию и повторно выполнить ее, если вы желаете. Когда вы завершили столько запусков симуляции, сколько желаемый, закрывал симуляцию как описано в следующем разделе.
Прежде, чем запустить симуляцию впервые, необходимо проверить клиентскую связь. Можно также хотеть установить точки останова для отладки.
Выполните следующие шаги:
Откройте окна ModelSim и MATLAB.
В MATLAB проверьте клиентскую связь путем вызова hdldaemon
с 'status'
опция:
hdldaemon('status')
Эта функция возвращает сообщение, указывающее, что связь существует:
HDLDaemon socket server is running on port 4795 with 1 connection
Или
HDLDaemon shared memory server is running with 1 connection
При попытке запустить симуляцию прежде, чем запустить hdldaemon
в MATLAB вы получите соблюдающее предупреждение:
#ML Warn - MATLAB server not available (yet), The entity 'modsimrand' will not be active
Открытый modsimrand_plot.m
в редакторе MATLAB.
Ищите oport.dout
и набор точка останова в той линии путем нажатия рядом с номером строки. Появится красный маркер точки останова.
Возвратитесь к ModelSim и введите следующую команду в командном окне:
> run 80000
Эта команда дает ModelSim команду совершенствовать симуляцию 80 000 временных шагов (80 000 наносекунд с помощью периода временного шага по умолчанию). Поскольку вы ранее устанавливаете точку останова в modsimrand_plot.m
, однако, симуляция запускается в MATLAB, пока это не достигает точки останова.
ModelSim теперь блокируется и остается блокированным, пока вы явным образом не разблокируете его. В то время как симуляция блокируется, обратите внимание, что MATLAB отображает данные, которые ModelSim передал функции MATLAB в окне Workspace.
В ModelSim открывается пустое окно рисунка. Можно использовать это окно, чтобы отобразить на графике данные, сгенерированные симуляцией.
Исследуйте oport
, portinfo
, и tnow
путем наведения на эти аргументы в редакторе MATLAB. Наблюдайте тот tnow
, текущее время симуляции, установлен в 0
. Также заметьте это, потому что симуляция достигла точки останова во время первого вызова modsimrand_plot
, portinfo
аргумент отображается в рабочем пространстве MATLAB.
Нажмите Continue в редакторе MATLAB. В следующий раз точка останова достигнута, заметьте тот portinfo
больше не появляется в рабочем пространстве MATLAB. portinfo
функция не показывает, потому что она передается в только на первом вызове функции. Также обратите внимание что значение tnow
усовершенствования от 0 до 5e-009.
Очистите точку останова путем нажатия на красный маркер точки останова.
Разблокируйте ModelSim и продолжите симуляцию путем нажатия на Continue в редакторе MATLAB.
Симуляция выполнение до завершения. В то время как симуляция прогрессирует, она отображает сгенерированные данные на графике в окне рисунка. Когда симуляция завершается, окно рисунка появляется как показано здесь.
Симуляция запускается в MATLAB, пока это не достигает точки останова, которую вы только устанавливаете. Продолжите симуляцию/сеанс отладки, как желаемый.
Если вы хотите запустить симуляцию снова, необходимо перезапустить симуляцию в ModelSim, повторно инициализировать часы и сбросить входные сигналы. Сделать так:
Закройте окно рисунка.
Перезапустите симуляцию со следующей командой:
> restart
Диалоговое окно Restart появляется. Уезжайте все опции включили, и нажмите Restart.
Кнопка Restart очищает контекст симуляции, установленный matlabtb
команда. Таким образом, после перезапуска ModelSim, необходимо переиздать предыдущую команду или дать новую команду.
Переиздайте matlabtb
команда в симуляторе HDL.
> matlabtb modsimrand -mfunc modsimrand_plot -rising /modsimrand/clk -socket portnum
Открытый modsimrand_plot.m
в редакторе MATLAB.
Установите точку останова в той же линии как в предыдущем запуске.
Возвратитесь к ModelSim и повторно войдите в следующие команды, чтобы повторно инициализировать часы и входные сигналы:
> force /modsimrand/clk 0 0,1 5 ns -repeat 10 ns > force /modsimrand/clk_en 1 > force /modsimrand/reset 1 0, 0 50 ns
Введите команду, чтобы запустить симуляцию, например:
> run 80000
Этот раздел объясняет, как закрыть симуляцию организованным способом.
В ModelSim выполните следующие шаги:
Остановите симуляцию на клиентской стороне путем выбора Simulate> End Simulation или ввода quit
команда.
Выйдите из ModelSim.
В MATLAB можно только выйти из приложения, которое закроет симуляцию и также закроет MATLAB.
Чтобы закрыть сервер без заключительного MATLAB, у вас есть опция вызова hdldaemon
с 'kill'
опция:
hdldaemon('kill')
Следующее сообщение появляется, подтверждая, что сервер был закрыт:
HDLDaemon server was shutdown