Проверьте модуль HDL с помощью Испытательного стенда MATLAB

Обзор руководства

В этом руководстве приведены основные шаги для настройки приложения HDL- Verifier™, которое использует MATLAB® для проверки простого проекта. В этом руководстве вы разрабатываете, моделируете и проверяете модель генератора псевдослучайных чисел на основе последовательности Фибоначчи. Модель закодирована в 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\расширения\modelsim\modelsimdemos\VHDL\modsimrand\modsimrand.vhd

Запуск сервера MATLAB

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

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

  1. Запустите MATLAB.

  2. Установите текущую папку MATLAB в папку, которую вы создали в Set Up Tutorial Files.

  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 с парой имя свойства/property значение 'socket' 0. Значение 0 указывает, что операционная система назначает серверу порт сокета TCP/IP, доступный в вашей системе. Для примера

    hdldaemon('socket', 0)

    Сервер сообщает вам, что он начал, отобразив следующее сообщение. The portnum будет характерен для вашей системы:

    HDLDaemon socket server is running on Port portnum with 0 connections

    Обратите внимание на portnum как вам понадобится, когда вы выдаете matlabtb команда в окне Load Simulation.

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

Запустите симулятор ModelSim и настройте для косимуляции

В этом разделе описывается основная процедура запуска программного обеспечения 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

    Примечание

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

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

После настройки библиотеки проекта обычно для создания и изменения HDL-кода используется Редактор ModelSim. Для этого руководства вам не нужно создавать VHDL-код самостоятельно. Вместо этого откройте и исследуйте существующий файл modsimrand.vhd. В этом разделе освещаются области кода в modsimrand.vhd которые представляют интерес для испытательного стенда ModelSim и MATLAB.

Если вы решили не изучать HDL-код в это время, пропустите, чтобы Скомпилировать 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 который записывает случайным образом сгенерированную последовательность Фибоначчи в регистр выхода, когда часы испытывают увеличение ребра.

Когда вы закончите изучение файла, закройте окно edit ModelSim.

Компиляция кода 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.

Если вы решили не изучать HDL-код в это время, перейдите к Загрузке Симуляции.

Примечание

modsimrand_plot.m является компонентом более низкого уровня в примере генератора случайных чисел MATLAB. Построение графика кода в modsimrand_plot.m не обсуждается в следующем разделе. Это руководство фокусируется только на тех частях modsimrand_plot.m которые требуются для проверки модели VHDL в MATLAB.

Можно открыть 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 для косимуляции.

    • -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 команды set 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. The 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