Проверьте модуль HDL с испытательным стендом MATLAB

Учебный обзор

Этот пример проводит вас по основным шагам для подготовки приложения HDL Verifier™, которое использует MATLAB®, чтобы проверить простой проект HDL. В этом примере вы разрабатываете, моделируете и проверяете модель генератора псевдослучайного числа на основе последовательности Фибоначчи. Модель закодирована в VHDL®.

Примечание

Этот пример демонстрирует создание и выполнение испытательного стенда с помощью ModelSim® SE 6.5. Если вы не используете эту версию, сообщения и отображаемые изображения от ModelSim не могут появиться вам точно, как они делают в этом примере.

Этот пример требует MATLAB, программного обеспечения HDL Verifier и симулятора HDL ModelSim.

В этом примере вы выполните следующие шаги:

Настройте учебные файлы

Чтобы помочь другим иметь доступ к копиям учебных файлов, настройте папку для своей собственной учебной работы:

  1. Создайте папку вне осциллографа вашей папки установки MATLAB, в которую можно скопировать учебные файлы. Папка должна быть перезаписываема. Этот пример предполагает, что вы создаете папку под названием MyPlayArea.

  2. Скопируйте следующие файлы в папку, которую вы только создали:

    matlabroot\toolbox\edalink\extensions\modelsim\modelsimdemos\modsimrand_plot.m

    matlabroot\toolbox\edalink\extensions\modelsim\modelsimdemos\VHDL\modsimrand\modsimrand.vhd

Запустите сервер MATLAB

В этом разделе описываются стартовый MATLAB, настраивая текущую папку для завершения примера, запуска серверного компонента MATLAB и проверки клиентские связи, с помощью общей памяти или режима сокета TCP/IP. Эти инструкции принимают, что вы знакомы с интерфейсом пользователя MATLAB.

Выполните следующие шаги:

  1. StartMatlab.

  2. Установите свою текущую папку MATLAB на папку, которую вы создали в Настроенных Учебных Файлах.

  3. Проверьте, что сервер 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.

  4. Закройте сервер путем ввода

    hdldaemon('kill')

    Вы будете видеть следующее сообщение, которое подтверждает, что сервер был закрыт.

    HDLDaemon server was shutdown
  5. Запустите сервер в режиме сокета 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 и установленный для Cosimulation

В этом разделе описываются основную процедуру для запуска программного обеспечения ModelSim и подготовки библиотека проекта ModelSim. Эти инструкции принимают, что вы знакомы с пользовательским интерфейсом ModelSim.

Выполните следующие шаги:

  1. Запустите ModelSim со среды MATLAB путем вызова функционального vsim в Окне Команды MATLAB.

    vsim

    Эта функция запускает и конфигурирует ModelSim для использования с программным обеспечением HDL Verifier. Первая папка ModelSim совпадает с вашей текущей папкой MATLAB.

  2. Проверьте текущую папку 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....

  3. Создайте библиотеку проекта, чтобы содержать ваши результаты компиляции. Создать библиотеку и потребовало файла _info, введите vlib и команды vmap можно следующим образом:

    ModelSim> vlib work
    
    ModelSim> vmap work work

    Примечание

    Необходимо использовать меню ModelSim File или команду vlib, чтобы создать папку библиотеки так, чтобы необходимый файл _info был создан. Не создавайте библиотеку с командами операционной системы.

Разработайте код VHDL

После создания библиотеки проекта обычно вы использовали бы Редактор 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

После того, как вы создаете или редактируете свои исходные файлы VHDL, компилируете их. Как часть этого примера, скомпилируйте modsimrand.vhd. Один способ скомпилировать файл состоит в том, чтобы кликнуть по имени файла в рабочей области проекта и выбрать Compile> Compile All. Альтернатива должна задать modsimrand.vhd с командой vcom, можно следующим образом:

ModelSim> vcom modsimrand.vhd

Если компиляция успешно выполняется, сообщения появляются в командном окне, и компилятор заполняет библиотеку работы с результатами компиляции.

Разработайте функцию MATLAB

Программное обеспечение 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 для симуляции:

  1. Загрузите экземпляр modsimrand для верификации. Чтобы загрузить экземпляр, задайте команду vsimmatlab можно следующим образом:

    ModelSim> vsimmatlab modsimrand

    Команда vsimmatlab запускает средство моделирования ModelSim, vsim, специально для использования с MATLAB. ModelSim отображает ряд сообщений в командном окне, когда это загружает пакеты и архитектуру сущности.

  2. Инициализируйте средство моделирования для проверки 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.

  3. Инициализируйте часы и сбросьте входные сигналы. Можно управлять входными сигналами симуляции с помощью нескольких механизмов, включая команды 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.

Запустите симуляцию

Этот раздел объясняет, как запустить и контролировать эту симуляцию и повторно выполнить ее, если вы желаете. Когда вы завершили столько выполнений симуляции, сколько желаемый, закрывал симуляцию, как описано в следующем разделе.

Выполнение симуляции впервые

Прежде, чем запустить симуляцию впервые, необходимо проверить клиентскую связь. Можно также хотеть установить точки останова для отладки.

Выполните следующие шаги:

  1. Откройте окна ModelSim и MATLAB.

  2. В 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
  3. Откройте modsimrand_plot.m в редакторе MATLAB.

  4. Ищите oport.dout и установите точку останова в той строке путем нажатия рядом с номером строки. Появится красный маркер точки останова.

  5. Возвратитесь к ModelSim и введите следующую команду в командном окне:

     > run 80000
    

    Эта команда дает ModelSim команду совершенствовать симуляцию 80 000 временных шагов (80 000 наносекунд с помощью периода временного шага по умолчанию). Поскольку вы ранее устанавливаете точку останова в modsimrand_plot.m, однако, выполнениях симуляции в MATLAB, пока это не достигает точки останова.

    ModelSim теперь блокируется и остается блокированным, пока вы явным образом не разблокируете его. В то время как симуляция блокируется, обратите внимание, что MATLAB отображает данные, которые ModelSim передал функции MATLAB в окне Workspace.

    В ModelSim открывается пустое окно рисунка. Можно использовать это окно, чтобы отобразить на графике данные, сгенерированные симуляцией.

  6. Исследуйте oport, portinfo и tnow путем наведения на эти аргументы в редакторе MATLAB. Заметьте, что tnow, текущее время симуляции, установлен в 0. Также заметьте, что, потому что симуляция достигла точки останова во время первого вызова modsimrand_plot, аргумент portinfo видим в рабочем пространстве MATLAB.

  7. Нажмите Continue в редакторе MATLAB. В следующий раз точка останова достигнута, заметьте, что portinfo больше не появляется в рабочем пространстве MATLAB. Функция portinfo не показывает, потому что она передается в только на первом вызове функции. Также обратите внимание, что значение tnow совершенствуется от 0 до 5e-009.

  8. Очистите точку останова путем нажатия на красный маркер точки останова.

  9. Разблокируйте ModelSim и продолжите симуляцию путем нажатия на Continue в редакторе MATLAB.

    Симуляция выполнение до завершения. В то время как симуляция прогрессирует, она отображает сгенерированные данные на графике в окне рисунка. Когда симуляция завершается, окно рисунка появляется как показано здесь.

Симуляция запускается в MATLAB, пока это не достигает точки останова, которую вы только устанавливаете. Продолжите симуляцию/сеанс отладки, как желаемый.

Повторное выполнение симуляции

Если вы хотите запустить симуляцию снова, необходимо перезапустить симуляцию в ModelSim, повторно инициализировать часы и сбросить входные сигналы. Сделать так:

  1. Закройте окно рисунка.

  2. Перезапустите симуляцию со следующей командой:

    > restart

    Диалоговое окно Restart появляется. Уезжайте все опции включили, и нажмите Restart.

    Примечание

    Кнопка Restart очищает контекст симуляции, установленный командой matlabtb. Таким образом, после перезапуска ModelSim, необходимо переиздать предыдущую команду или дать новую команду.

  3. Переиздайте команду matlabtb в симуляторе HDL.

    > matlabtb modsimrand -mfunc modsimrand_plot -rising /modsimrand/clk -socket portnum

  4. Откройте modsimrand_plot.m в редакторе MATLAB.

  5. Установите точку останова в той же строке как в предыдущем выполнении.

  6. Возвратитесь к 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

  7. Введите команду, чтобы запустить симуляцию, например:

    > run 80000

Закройте симуляцию

Этот раздел объясняет, как закрыть симуляцию организованным способом.

В ModelSim выполните следующие шаги:

  1. Остановите симуляцию на клиентской стороне путем выбора Simulate> End Simulation или ввода команды quit.

  2. Выйдите из ModelSim.

В MATLAB можно только выйти из приложения, которое закроет симуляцию и также закроет MATLAB.

Чтобы закрыть сервер без заключительного MATLAB, у вас есть опция вызова hdldaemon с опцией 'kill':

hdldaemon('kill')

Следующее сообщение появляется, подтверждая, что сервер был закрыт:

HDLDaemon server was shutdown