В этом учебном пособии описаны основные шаги по настройке приложения Verifier™ HDL, использующего MATLAB ® для проверки простого дизайна HDL. В этом учебном пособии описывается разработка, моделирование и проверка модели генератора псевдослучайных чисел на основе последовательности Фибоначчи. Модель кодируется в VHDL ®.
Примечание
В этом учебном пособии показано создание и запуск тестового стенда с использованием ModelSim ® SE 6.5. Если эта версия не используется, сообщения и изображения экрана из ModelSim могут отображаться не так, как в данном учебном пособии .
Для этого учебного пособия требуются MATLAB, программное обеспечение HDL Verifier и симулятор ModelSim HDL.
В этом учебном пособии будут выполнены следующие действия.
Чтобы другие пользователи имели доступ к копиям файлов учебного пособия, настройте папку для собственной работы с учебным пособием:
Создайте папку за пределами установочной папки 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.
Выполните следующие шаги:
Запустите MATLAB.
Установите текущую папку 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 - это папка, с которой вы хотите работать. Или вы также можете изменить каталог, выбрав Файл > Изменить каталог....
Создайте библиотеку конструкций для хранения результатов компиляции. Для создания библиотеки и требуется _info , введите vlib и vmap команды следующим образом:
ModelSim> vlib work ModelSim> vmap work work

Примечание
Необходимо использовать меню Файл ModelSim или vlib для создания папки библиотеки таким образом, чтобы _info файл создан. Не создавайте библиотеку с помощью команд операционной системы.
После настройки библиотеки конструкций обычно для создания и изменения кода HDL используется редактор ModelSim Editor. Для этого учебного пособия нет необходимости создавать код VHDL самостоятельно. Вместо этого откройте и проверьте существующий файл modsimrand.vhd. В этом разделе освещаются области кода в modsimrand.vhd которые представляют интерес для испытательного стенда ModelSim и MATLAB.
Если вы решили не проверять код HDL в данный момент, перейдите к разделу Компиляция кода VHDL.
Вы можете открыть modsimrand.vhd в окне редактирования с помощью edit , следующим образом:
ModelSim> edit modsimrand.vhd

ModelSim открывает окно правки и отображает код 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).
После создания или редактирования исходных файлов VHDL скомпилируйте их. В рамках данного учебного пособия выполните компиляцию modsimrand.vhd. Один из способов компиляции файла - щелкнуть имя файла в рабочей области проекта и выбрать «Компиляция» > «Скомпилировать все». Альтернативой является определение modsimrand.vhd с vcom , следующим образом:
ModelSim> vcom modsimrand.vhd
Если компиляция выполняется успешно, сообщения появляются в окне команд, и компилятор заполняет рабочую библиотеку результатами компиляции.

Программное обеспечение HDL Verifier проверяет аппаратное обеспечение HDL в MATLAB как функцию. Как правило, на этом этапе создается или редактируется функция MATLAB, отвечающая требованиям HDL Verifier. Для этого учебного пособия нет необходимости разрабатывать тестовую функцию MATLAB самостоятельно. Вместо этого откройте и проверьте существующий файл modsimrand_plot.m.
Если в данный момент не требуется проверять код HDL, перейдите к разделу Моделирование нагрузки.
Примечание
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 matlabtb команда. Эта команда определяет канал связи и обратный вызов функции MATLAB, которая выполняется в MATLAB от имени ModelSim. Кроме того, matlabtb команда может задавать параметры, управляющие при выполнении функции MATLAB.
Для этого учебного пособия введите следующее: matlabtb команда:
> matlabtb modsimrand -mfunc modsimrand_plot -rising /modsimrand/clk -socket portnumАргументы в командной строке задают следующие условия:
modsimrand- определяет модуль VHDL для косимуляции.
-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 отображается аргумент.
Нажмите Продолжить в редакторе MATLAB. При следующем достижении точки останова обратите внимание, что portinfo больше не отображается в рабочей области MATLAB. portinfo функция не отображается, поскольку передается только при первом вызове функции. Также следует отметить, что значение tnow переходит с 0 на 5e-009.
Очистите точку останова, щелкнув красный маркер точки останова.
Разблокируйте ModelSim и продолжите моделирование, щелкнув Продолжить (Continue) в редакторе MATLAB.
Моделирование завершается. По мере выполнения моделирования в окне рисунка отображаются сгенерированные данные. После завершения моделирования появится окно рисунка, показанное здесь.

Моделирование выполняется в MATLAB до тех пор, пока не достигнет только что установленной точки останова. При необходимости продолжите сеанс моделирования/отладки.
Если необходимо снова запустить моделирование, необходимо перезапустить моделирование в ModelSim, повторно инициализировать часы и сбросить входные сигналы. Для этого:
Закройте окно рисунка.
Перезапустите моделирование с помощью следующей команды:
> restart
Появится диалоговое окно Перезапуск. Оставьте все параметры включенными и нажмите кнопку Перезапустить.
Примечание
Кнопка Restart удаляет контекст моделирования, установленный matlabtb команда. Таким образом, после перезапуска ModelSim необходимо повторно выполнить предыдущую команду или ввести новую команду.
Переиздание matlabtb в имитаторе ЛПВП.
> 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