Эта глава проводит вас по основным шагам для подготовки сеанса HDL Verifier™, который использует Simulink® и блок HDL Cosimulation, чтобы проверить модель HDL. Блок HDL Cosimulation cosimulates аппаратный компонент путем применения входных сигналов к и чтения выходных сигналов модели HDL при симуляции в ModelSim®/Questa®Sim. Блок HDL Cosimulation поддерживает симуляцию или VHDL® или моделей Verilog®. В примере в этом разделе вы будете cosimulate простая модель VHDL.
Примечание
Этот пример характерен для пользователей средства моделирования Mentor Graphics®; однако, большая часть процесса будет тем же самым для пользователей Incisive®.
Типичный сценарий Simulink и ModelSim должен создать модель для определенного аппаратного компонента в ModelSim, который позже необходимо интегрировать в большую модель Simulink. Первый шаг должен спроектировать и разработать модель VHDL в ModelSim. В этом примере вы используете ModelSim и VHDL, чтобы разработать модель, которая представляет следующий инвертор:
Сущность VHDL для этой модели будет представлять 8-битные потоки значений сигналов ввода и вывода с IN
порт и OUT
порт типа STD_LOGIC_VECTOR
. Входной сигнал часов типа STD_LOGIC
инициирует битный процесс инверсии, когда установлено.
Выполните следующие шаги:
Запустите ModelSim
Превратитесь в перезаписываемую папку MyPlayArea
, который вы, возможно, создали для другого примера. Если вы не создали папку, создайте ее теперь. Папка должна быть перезаписываема.
ModelSim>cd C:/MyPlayArea
Откройте новое исходное окно редактирования VHDL.
Добавьте следующий код VHDL:
--------------------------------------------------- -- Simulink and ModelSim Inverter Tutorial -- -- Copyright 2003-2004 The MathWorks, Inc. -- --------------------------------------------------- LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY inverter IS PORT ( sin : IN std_logic_vector(7 DOWNTO 0); sout: OUT std_logic_vector(7 DOWNTO 0); clk : IN std_logic ); END inverter; LIBRARY ieee; USE ieee.std_logic_1164.ALL; ARCHITECTURE behavioral OF inverter IS BEGIN PROCESS(clk) BEGIN IF (clk'EVENT AND clk = '1') THEN sout <= NOT sin; END IF; END PROCESS; END behavioral;
Сохраните файл к inverter.vhd
.
Этот раздел объясняет, как создать библиотеку проекта и скомпилировать inverter.vhd
, можно следующим образом:
Проверьте что файл inverter.vhd
находится в текущей папке путем ввода ls
команда в командной строке ModelSim.
Создайте библиотеку проекта, чтобы содержать ваши результаты компиляции. Создать библиотеку и потребовало _info
файл, введите vlib
и vmap
команды можно следующим образом:
ModelSim> vlib work ModelSim> vmap work work
Если библиотека проекта работает, уже существует, ModelSim не перезаписывает текущую библиотеку, но выводит следующее предупреждение:
# ** Warning: (vlib-34) Library already exists at "work".
Примечание
Необходимо использовать меню ModelSim File или vlib
команда, чтобы создать папку библиотеки так, чтобы необходимый _info
файл создается. Не создавайте библиотеку с командами операционной системы.
Скомпилируйте файл VHDL. Один способ скомпилировать файл состоит в том, чтобы кликнуть по имени файла в рабочей области проекта и выбрать Compile> Compile All. Другая альтернатива должна задать имя файла VHDL с vcom
команда, можно следующим образом:
ModelSim> vcom inverter.vhd
Если компиляции успешно выполняются, информационные сообщения появляются в командном окне, и компилятор заполняет библиотеку работы результатами компиляции.
Теперь создайте свою модель Simulink. Для этого примера вы создаете простую модель Simulink, которая управляет входом в блок, представляющий инвертор VHDL, в котором вы закодировали, Разрабатывают Код VHDL, и отображает инвертированный вывод.
Запустите путем создания модели, можно следующим образом:
Запустите MATLAB®, если он уже не запускается. Откройте новое окно модели. Затем откройте Library Browser Simulink.
Перетащите следующие блоки от Library Browser Simulink до вашего окна модели:
Блок Constant из библиотеки Simulink Sources
Блок HDL Cosimulation из библиотеки блоков HDL Verifier
Блок Display из библиотеки Simulink Sinks
Расположите три блока в порядке, показанном в следующем рисунке.
Затем сконфигурируйте блок Constant, который является входным источником модели путем выполнения следующих действий:
Дважды кликните значок блока Constant, чтобы открыть диалоговое окно параметров блоков Constant. Введите следующие значения параметров в панель Main:
Constant value: 0
Размер шага: 10
Позже можно изменить эти начальные значения, чтобы видеть влияние, которое различные шаги расчета оказывают на различные запуски симуляции.
Диалоговое окно должно теперь появиться следующим.
Кликните по вкладке Signal Attributes. Диалоговое окно теперь отображается меню Output data type.
Выберите uint8
в меню Output data type. Эта спецификация типа данных поддерживается программным обеспечением HDL Verifier без потребности в преобразовании типов. Это сопоставляет непосредственно с типом VHDL для порта VHDL sin
, STD_LOGIC_VECTOR(7 DOWNTO 0)
.
Диалоговое окно должно теперь появиться следующим.
Нажмите OK. Диалоговое окно параметров блоков Constant закрывается и значение в изменениях значка блока Constant в 0.
Затем сконфигурируйте блок HDL Cosimulation, который представляет модель инвертора, написанную в VHDL. Начните с панели Ports путем выполнения следующих действий:
Дважды кликните значок блока HDL Cosimulation. Диалоговое окно Block Parameters для блока HDL Cosimulation появляется. Кликните по вкладке Ports.
В панели Ports выберите демонстрационный /top/sig1
сигнала из списка сигнала в центре панели путем двойного клика на нем.
Замените демонстрационное имя пути прохождения сигнала /top/sig1
с /inverter/sin
. Затем нажмите Apply. Имя сигнала на изменениях блока HDL Cosimulation.
Точно так же выберите демонстрационный /top/sig2
сигнала. Измените Full HDL Name в
/inverter/sout
. Выберите Output
из списка I/O Mode. Измените the Sample Time параметр в 10
. Затем нажмите Apply, чтобы обновить список.
Выберите демонстрационный /top/sig3
сигнала. Нажмите кнопку Delete. Сигнал теперь удален из списка.
Панель Ports должна появиться следующей.
Теперь сконфигурируйте параметры панели Connection путем выполнения следующих действий:
Кликните по вкладке Connection.
Оставьте Connection Mode как Full Simulation.
Выберите сокет из списка Connection method . Эта опция указывает, что Simulink и ModelSim свяжутся через обозначенный порт сокета TCP/IP. Заметьте, что два дополнительных поля, Port number or service и Host name, теперь отображаются.
Обратите внимание на то, что, потому что The HDL simulator is running on this computer выбран по умолчанию, поле Host name отключено. В этой настройке и Simulink и ModelSim выполняются на том же компьютере, таким образом, вы не должны вводить удаленное имя хост-системы.
В текстовом поле Port number or service введите номер порта сокета 4449
или, если этот порт не доступен в вашей системе, другом номере действительного порта или сервисном имени. Модель будет использовать коммуникацию сокета TCP/IP, чтобы соединиться с ModelSim. Отметьте то, что вы вводите для этого параметра. Вы зададите ту же информацию порта сокета, когда вы создадите ModelSim для соединения с Simulink.
Панель Connection должна появиться следующей.
Нажмите Apply.
Теперь сконфигурируйте панель Clocks путем выполнения следующих действий:
Кликните по вкладке Clocks.
Нажмите кнопку New. Новый сигнал часов с пустым именем сигнала добавляется к списку сигнала.
Дважды кликните на новом имени сигнала к редактированию. Введите путь прохождения сигнала /inverter/clk
. Затем выберите Rising
из списка Edge. Установите параметр Period на 10
.
Панель Clocks должна появиться следующей.
Нажмите Apply.
Затем введите некоторые простые команды Tcl, которые будут выполняться до и после симуляции, можно следующим образом:
Кликните по вкладке Simulation.
В текстовом поле Pre-simulation Tcl commands отредактируйте команду Tcl по умолчанию:
puts "Running inverter in Simulink!"
В текстовом поле Post-simulation Tcl commands отредактируйте команду Tcl по умолчанию:
puts "Inverter Done"
Панель Simulation должна появиться следующей.
Нажмите Apply.
Затем просмотрите панель Timescales, чтобы убедиться, что она установлена в свои параметры по умолчанию, можно следующим образом:
Кликните по вкладке Timescales.
Настройки по умолчанию панели Timescales показывают в следующем рисунке. Эти настройки требуются для операции этого примера. Смотрите Масштабы времени Симуляции для получения дополнительной информации.
Нажмите OK, чтобы закрыть диалоговое окно Block Parameters.
Последний шаг должен соединить блоки, сконфигурировать параметры всей модели и сохранить модель. Выполните следующие действия:
Соедините блоки как показано в следующем рисунке.
На данном этапе вы можете также хотеть рассмотреть настраивающие аннотации блока.
Сконфигурируйте выбор решателя Simulink для фиксированного шага, дискретную симуляцию; это требуется для cosimulation операции. Выполните следующие действия:
В Modeling tab нажмите Model Settings. Диалоговое окно Model Configuration Parameters открывается, отображая панель Solver selection.
Выберите Fixed-step
в меню Type.
Выберите discrete (no continuous states)
в меню Solver.
Нажмите Apply.
Нажмите OK, чтобы закрыть диалоговое окно Model Configuration Parameters.
Смотрите Набор Параметры конфигурации Модели Simulink для получения дополнительной информации о настройках Simulink, которые оптимальны для использования с программным обеспечением HDL Verifier.
Сохраните модель.
У вас теперь есть представление VHDL инвертора и модели Simulink, которая применяет инвертор. Чтобы запустить ModelSim, таким образом, что это готово к употреблению с Simulink, введите следующую командную строку в командное окно MATLAB:
vsim('socketsimulink', 4449)
Примечание
Если вы ввели различную спецификацию порта сокета, когда вы сконфигурировали блок HDL Cosimulation в Simulink, замените номер порта 4449 в предыдущей командной строке с применимой информацией порта сокета для вашей модели. vsim
функция сообщает ModelSim сокета TCP/IP, чтобы использовать для установления линии связи с вашей моделью Simulink.
Этот раздел объясняет, как использовать vsimulink
команда, чтобы загрузить экземпляр вашей сущности VHDL для cosimulation с Simulink. vsimulink
команда является вариантом HDL Verifier ModelSim vsim
команда. Это сделано доступным как часть настройки ModelSim.
Загружать экземпляр inverter
сущность, выполните следующие действия:
Измените свой фокус ввода в окно ModelSim.
Если ваш файл VHD не находится в текущей папке, измените свою папку в местоположение вашего inverter.vhd
файл. Например:
ModelSim> cd C:/MyPlayArea
Введите следующее vsimulink
команда:
ModelSim> vsimulink work.inverter
ModelSim запускает vsim
средство моделирования, таким образом, что это готово симулировать сущность inverter
в контексте вашей модели Simulink. Отображение командного окна ModelSim должно быть похоже на следующее.
Этот раздел проводит вас по сценарию выполнения и контроля cosimulation сеанса.
Выполните следующие действия:
Откройте и добавьте сигналы инвертора в окно wave путем ввода следующей команды ModelSim:
VSIM n> add wave /inverter/*
Следующее окно wave появляется.
Измените свой фокус ввода в ваше окно модели Simulink.
Запустите симуляцию Simulink. Значение в блоке Display превращается в 255
. Также обратите внимание на изменения, которые происходят в окне ModelSim wave. Вы можете должны быть увеличить масштаб, чтобы получить лучшее представление данных сигнала.
В модели Simulink измените Constant value в 255
, сохраните модель и запустите другую симуляцию. Значение в блоке Display превращается в 0
и окно ModelSim wave обновляется можно следующим образом.
В модели Simulink измените Constant value в 2
и Sample time к 20 и запускает другую симуляцию. На этот раз значение в блоке Display превращается в 253
и окно ModelSim wave появляется как показано в следующем рисунке.
Обратите внимание на изменения в шаге расчета в окне wave.
Этот раздел объясняет, как закрыть симуляцию организованным способом, можно следующим образом:
В ModelSim остановите симуляцию путем выбора Simulate> End Simulation.
Выйдите из ModelSim.
Закройте окно модели Simulink.