Проверьте модуль 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