Сгенерируйте модель Cosimulation

Требования

Что такое модель Cosimulation?

cosimulation модель является автоматически сгенерированной моделью Simulink®, сконфигурированной и для симуляции Simulink и для cosimulation вашего проекта с симулятором HDL. HDL Coder™ поддерживает автоматическую генерацию cosimulation модели как часть процесса генерации испытательного стенда.

cosimulation модель включает:

  • Поведенческая модель вашего проекта, понятого в Подсистеме Simulink.

  • Соответствующий блок HDL Cosimulation, сконфигурированный к cosimulate проект с помощью HDL Verifier. HDL Coder конфигурирует блок HDL Cosimulation для использования или с Mentor Graphics® ModelSim® или с Cadence Incisive®.

  • Данные о тестовом воздействии, вычисленные от стимула испытательного стенда, который вы задаете.

  • Определите объем блоков, которые позволяют вам наблюдать и сравнить DUT и HDL cosimulation выходные параметры и любая ошибка между этими сигналами.

  • Goto и От блоков, которые получают стимул и сигналы ответа от DUT и используют эти сигналы управлять cosimulation.

  • Механизм сравнения/утверждения, который сообщает о несоответствиях между исходным DUT выход и cosimulation выход.

В дополнение к сгенерированной модели HDL Coder генерирует скрипт TCL, который запускает и конфигурирует ваш cosimulation инструмент. Комментарии в часах документа файла скрипта, сбросе и другой синхронизации сигнализируют об информации, заданной кодером для cosimulation инструмента.

Генерация модели Cosimulation от графический интерфейса пользователя

Этот пример демонстрирует процесс для генерации cosimulation модели. Модель в качестве примера, hdl_cosim_demo1, реализует простое, умножают и накапливают (MAC) алгоритм. Откройте модель путем ввода имени в командной строке MATLAB®:

hdl_cosim_demo1

Следующий рисунок показывает модель верхнего уровня.

DUT является подсистемой MAC.

Генерация модели Cosimulation происходит во время генерации испытательного стенда. Как лучшая практика, сгенерируйте HDL-код прежде, чем сгенерировать испытательный стенд, можно следующим образом:

  1. В панели HDL Code Generation диалогового окна Configuration Parameters выберите DUT для генерации кода. В этом случае это - hdl_cosim_demo1/MAC.

  2. Нажмите Apply.

  3. Нажмите Generate. HDL Coder отображает сообщения о ходе выполнения, как показано в следующем листинге:

    ### Applying HDL Code Generation Control Statements
    ### Starting HDL Check.
    ### HDL Check Complete with 0 error, 0 warning and 0 message.
    
    ### Begin VHDL Code Generation
    ### Working on hdl_cosim_demo1/MAC as hdlsrc\MAC.vhd
    ### HDL Code Generation Complete.

Затем сконфигурируйте опции испытательного стенда, чтобы включать генерацию cosimulation модели:

  1. Выберите HDL Code Generation> панель Test Bench диалогового окна Configuration Parameters.

  2. Установите флажок Cosimulation model. Затем выберите свой Simulation tool в выпадающем меню.

  3. Сконфигурируйте требуемые опции испытательного стенда. HDL Coder записывает настройки опции в сгенерированном файле скрипта (см. Файл Скрипта Cosimulation).

  4. Нажмите Apply.

Затем сгенерируйте код испытательного стенда и cosimulation модель:

  1. В нижней части панели Test Bench нажмите Generate Test Bench. HDL Coder отображает сообщения о ходе выполнения как показано в следующем листинге:

    ### Begin TestBench Generation
    ### Generating new cosimulation model: gm_hdl_cosim_demo1_mq0.mdl
    ### Generating new cosimulation tcl script: hdlsrc/gm_hdl_cosim_demo1_mq0_tcl.m
    ### Cosimulation Model Generation Complete.
    
    ### Generating Test bench: hdlsrc\MAC_tb.vhd
    ### Please wait ...
    ### HDL TestBench Generation Complete.

    Когда генерация испытательного стенда завершается, HDL Coder открывает сгенерированную cosimulated модель. Следующий рисунок показывает сгенерированную модель.

  2. Сохраните сгенерированную модель. Сгенерированная модель существует только в памяти, если вы не сохраняете его.

Как обозначено сообщениями генерации кода, HDL Coder генерирует следующие файлы в дополнение к обычному файлу испытательного стенда HDL:

  • cosimulation модель (gm_hdl_cosim_demo1_mq)

  • Файл, который содержит TCL cosimulation скрипт и информация о настройках cosimulation модели (gm_hdl_cosim_demo1_mq_tcl.m)

Сгенерированные имена файлов выводят из имени модели, как описано в Соглашениях о присвоении имен для Сгенерированных Моделей Cosimulation и Скриптов.

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

Структура сгенерированной модели

Можно настроить и запустить cosimulation использующие средства управления, расположенные в сгенерированной модели. Этот раздел исследует модель, сгенерированную от подсистемы MAC в качестве примера.

Путь к симуляции

Модель включает два параллельных пути прохождения сигнала. simulation path, расположенный в верхней половине окна модели, почти идентичен исходному DUT. Цель пути к симуляции состоит в том, чтобы выполнить нормальную симуляцию Simulink и обеспечить опорный сигнал для сравнения с результатами cosimulation. Следующий рисунок показывает путь к симуляции.

Эти две подсистемы пометили ToCosimSrc и ToCosimSink не изменяйте эффективность пути к симуляции. Их цель состоит в том, чтобы получить стимул и сигналы ответа DUT и направить их к и от блока HDL cosimulation (см. Сигнал Направить Между Симуляцией и Путями Cosimulation).

Путь Cosimulation

cosimulation path, расположенный в более низкой половине окна модели, содержит сгенерированный блок HDL Cosimulation. Следующий рисунок показывает cosimulation путь.

FromCosimSrc подсистема получает те же входные сигналы, которые управляют DUT. В gm_hdl_cosim_demo1_mq0 модель, подсистема просто передает входные параметры на блок HDL Cosimulation. Сигналы некоторых других типов данных требуют последующей обработки на данном этапе (см. Сигнал Направить Между Симуляцией и Путями Cosimulation).

Compare подсистема в конце cosimulation пути сравнивает cosimulation выход со ссылочным выходом, произведенным путем к симуляции. Если сравнение обнаруживает несоответствие, блок Assertion в Compare подсистема отображает предупреждающее сообщение. При желании можно отключить утверждения и управлять другими операциями Compare подсистема. Смотрите Утверждения Управления и Отображения Осциллографа для деталей.

HDL Coder заполняет блок HDL Cosimulation со скомпилированным интерфейсом I/O DUT. Следующий рисунок показывает панель Ports Mac_mq Блок HDL Cosimulation.

HDL Coder устанавливает Full HDL Name, Sample Time, Data Type и другие поля как требуется моделью. HDL Coder также конфигурирует другие параметры блоков HDL Cosimulation под панелями Tcl и Timescales.

Совет

HDL Coder конфигурирует сгенерированный блок HDL Cosimulation для Shared Memory метод связи.

Запустите управление средством моделирования

Когда вы дважды кликаете управление Средством моделирования Запуска, оно запускает выбранный cosimulation инструмент и передает в команде запуска инструменту. Значок Средства моделирования Запуска отображает команду запуска как показано в следующем рисунке.

Команды выполнились, когда вы дважды кликаете запуск значка Средства моделирования Запуска и настраиваете cosimulation инструмент, но они не запускают фактический cosimulation. Запуск Cosimulation описывает, как запустить cosimulation со сгенерированной моделью.

Маршрутизация сигнала между симуляцией и путями Cosimulation

Сгенерированная модель направляет сигналы между симуляцией и cosimulation использованием путей Goto и От блоков. Например, Goto блокируется в ToCosimSrc маршрут подсистемы каждый входной сигнал DUT с соответствующим блоком From в FromCosimSrc подсистема. Следующие рисунки показывают Goto и От блоков в каждой подсистеме.

Предыдущие рисунки показывают простые скалярные входные параметры. Сигналы комплексных и векторных типов данных требуют последующей обработки. Смотрите Комплексные и Векторные Сигналы в Сгенерированной Модели Cosimulation для получения дополнительной информации.

Управление утверждениями и отображениями осциллографа

Compare подсистема позволяет вам управлять отображением сигналов на осциллографах и предупреждающими сообщениями от утверждений. Следующий рисунок показывает Compare подсистема для gm_hdl_cosim_demo1_mq0 модель.

Для каждого выхода DUT HDL Coder генерирует подсистему проверки утверждения (Assert_OutN ). Подсистема вычисляет различие (err) между исходным DUT выход (dut ref) и соответствующий cosimulation выход (cosim). Подсистема направляет результат сравнения с блоком Assertion. Если результатом сравнения не является нуль, блок Assertion сообщает о несоответствии.

Следующий рисунок показывает Assert_Out1 подсистема для gm_hdl_cosim_demo1_mq0 модель.

Эта подсистема также направляет dut ref, cosim, и err сигналы к Осциллографу для отображения в верхнем уровне модели.

По умолчанию сгенерированная cosimulation модель включает все утверждения и отображает все Осциллографы. Используйте кнопки на Compare подсистема, чтобы отключить утверждения или скрыть Осциллографы.

Совет

Сообщения утверждения являются предупреждениями и не останавливают симуляцию.

Запуск Cosimulation

Запускать cosimulation со сгенерированной моделью:

  1. Дважды кликните Compare подсистема, чтобы сконфигурировать Осциллографы и настройки утверждения.

    Если вы хотите отключить отображения Осциллографа или предупреждения утверждения прежде, чем запустить ваш cosimulation, используйте кнопки на Compare подсистема (показанный в следующем рисунке).

  2. Дважды кликните управление Средством моделирования Запуска.

    Управление Средством моделирования Запуска запускает ваш симулятор HDL (в этом случае, HDL Verifier для использования с Mentor Graphics ModelSim).

    Симулятор HDL в свою очередь выполняет скрипт запуска. В этом случае скрипт запуска состоит из команд TCL, расположенных в gm_hdl_cosim_demo1_mq0_tcl.m. Когда симулятор HDL закончил выполнять скрипт запуска, он отображает сообщение как следующее.

    # Ready for cosimulation...
  3. В Редакторе Simulink для сгенерированной модели запустите симуляцию.

    Как запуски cosimulation, симулятор HDL отображает сообщения как следующее.

    # Running Simulink Cosimulation block.
    # Chip Name: --> hdl_cosim_demo1/MAC
    # Target language: --> vhdl
    # Target directory: --> hdlsrc
    # Fri Jun 05 4:26:34 PM Eastern Daylight Time 2009
    # Simulation halt requested by foreign interface.
    # done

    В конце cosimulation, если вы включили отображения Осциллографа, сравнить осциллограф отображает следующие сигналы:

    • cosim: Сигнал результата выводится блоком HDL Cosimulation.

    • dut ref: Ссылочный выходной сигнал DUT.

    • err: Различие (ошибка) между этими двумя выходными параметрами.

    Следующий рисунок показывает эти сигналы.

Файл скрипта Cosimulation

Сгенерированный файл скрипта имеет два раздела:

  • Раздел комментария, что настройки модели документов, которые относятся к cosimulation.

  • Функция, которая хранит несколько линий кода TCL в переменную, tclCmds. cosimulation инструменты выполняют эти команды, когда вы запускаете cosimulation.

Раздел комментариев заголовка

Следующий листинг показывает раздел комментария файла скрипта, сгенерированного для hdl_cosim_demo1 модель:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Auto generated cosimulation 'tclstart' script 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Source Model         : hdl_cosim_demo1.mdl
%  Generated Model      : gm_hdl_cosim_demo1.mdl
%  Cosimulation Model   : gm_hdl_cosim_demo1_mq.mdl
%
%  Source DUT           : gm_hdl_cosim_demo1_mq/MAC
%  Cosimulation DUT     : gm_hdl_cosim_demo1_mq/MAC_mq
%
%  File Location        : hdlsrc/gm_hdl_cosim_demo1_mq_tcl.m
%  Created              : 2009-06-16 10:51:01
%
%  Generated by MATLAB 7.9 and HDL Coder 1.6
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ClockName           : clk
%  ResetName           : reset
%  ClockEnableName     : clk_enable
%
%  ClockLowTime        : 5ns
%  ClockHighTime       : 5ns
%  ClockPeriod         : 10ns
%
%  ResetLength         : 20ns
%  ClockEnableDelay    : 10ns
%  HoldTime            : 2ns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ModelBaseSampleTime   : 1
%  OverClockFactor     : 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Mapping of DutBaseSampleTime to ClockPeriod
%
%  N = (ClockPeriod / DutBaseSampleTime) * OverClockFactor
%  1 sec in Simulink corresponds to 10ns in the HDL 
%  Simulator(N = 10)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  ResetHighAt          : (ClockLowTime + ResetLength + HoldTime)
%  ResetRiseEdge        : 27ns
%  ResetType            : async
%  ResetAssertedLevel   : 1
%
%  ClockEnableHighAt    : (ClockLowTime + ResetLength + ClockEnableDelay + HoldTime)
%  ClockEnableRiseEdge  : 37ns
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Раздел комментариев включает следующие подразделы:

  • Комментарии заголовка: Этот раздел документирует имена файлов для источника и сгенерированных моделей и источника и сгенерированного DUT.

  • Настройки испытательного стенда: Этот раздел документирует makehdltb значения свойств, которые влияют на cosimulation генерацию модели. Сгенерированный скрипт TCL использует эти значения, чтобы инициализировать cosimulation инструмент.

  • Информация о шаге расчета: следующие два раздела документируют основной шаг расчета и фактор сверхдискретизации модели. HDL Coder использует ModelBaseSampleTime и OverClockFactor чтобы сопоставить период часов модели к HDL, cosimulation синхронизируют период.

  • Синхронизируйте, часы включают и сбрасывают формы волны: Этот раздел документирует расчеты рабочего цикла clk, clk_enable, и reset сигналы.

Раздел команд TCL

Следующий листинг показывает раздел команд TCL файла скрипта, сгенерированного для hdl_cosim_demo1 модель:

function tclCmds = gm_hdl_cosim_demo1_mq_tcl
tclCmds = {
    'do MAC_compile.do',...% Compile the generated code
    'vsimulink work.MAC',...% Initiate cosimulation
    'add wave  /MAC/clk',...% Add wave commands for chip input signals
    'add wave  /MAC/reset',...
    'add wave  /MAC/clk_enable',...
    'add wave  /MAC/In1',...
    'add wave  /MAC/In2',...
    'add wave  /MAC/ce_out',...% Add wave commands for chip output signals
    'add wave  /MAC/Out1',...
    'set UserTimeUnit ns',...% Set simulation time unit
    'puts ""',...
    'puts "Ready for cosimulation..."',...
};
end

Комплексные и векторные сигналы в сгенерированной модели Cosimulation

Входные сигналы комплексных или векторных типов данных требуют вставки дополнительных элементов в cosimulation путь. этот раздел описывает эти элементы.

Комплексные сигналы

Сгенерированная cosimulation модель автоматически повреждает комплексные входные параметры в действительные и мнимые части. Следующий рисунок показывает FromCosimSrc подсистема, которая получает два комплексных входных сигнала. Подсистема повреждает входные параметры в действительные и мнимые части прежде, чем передать их подсистеме выходные параметры.

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

Векторные сигналы

Сгенерированная cosimulation модель сглаживает векторные входные параметры. Следующий рисунок показывает FromCosimSrc подсистема, которая получает два векторных входных сигнала размерности 2. Подсистема сглаживает входные параметры в скаляры прежде, чем передать их подсистеме выходные параметры.

Генерация модели Cosimulation из командной строки

Чтобы сгенерировать cosimulation модель из командной строки, передайте GenerateCosimModel свойство к makehdltb функция. GenerateCosimModel берет одни из следующих значений свойств:

  • 'ModelSim' : сгенерируйте cosimulation модель, сконфигурированную для HDL Verifier для использования с Mentor Graphics ModelSim.

  • 'Incisive': сгенерируйте cosimulation модель, сконфигурированную для HDL Verifier для использования с Острым Тактовым сигналом.

В следующей команде, makehdltb генерирует cosimulation модель, сконфигурированную для HDL Verifier для использования с Mentor Graphics ModelSim.

makehdltb('hdl_cosim_demo1/MAC','GenerateCosimModel','ModelSim');

Соглашения о присвоении имен для сгенерированных моделей Cosimulation и скриптов

Соглашение о присвоении имен для сгенерированных cosimulation моделей

prefix_modelname_toolid_suffix, где:

  • prefix строка gm.

  • modelname имя генерирующейся модели.

  • toolid идентификатор, указывающий на симулятор HDL, выбранный опцией Cosimulation model for use with:. Допустимый toolid строками является 'mq' и 'in'.

  • suffix является целым числом, которое предоставляет каждой сгенерированной модели уникальное имя. Суффикс постепенно увеличивается с каждой последовательной генерацией испытательного стенда для данной модели. Например, если исходным именем модели является test, затем последовательностью сгенерированных cosimulation имен модели является gm_test_toolid_0, gm_test_toolid_1, и так далее.

Соглашение о присвоении имен для сгенерированных cosimulation скриптов совпадает с этим для моделей, за исключением того, что расширением файла является .m.

Ограничения для генерации модели Cosimulation

Когда вы конфигурируете модель для cosimulation генерации модели, наблюдаете нижеследующие ограничения:

  • Явным образом задайте шаги расчета исходных блоков к DUT в пути к симуляции. Использование шага расчета по умолчанию (-1) в исходных блоках может вызвать проблемы распространения шага расчета в cosimulation пути сгенерированной модели.

  • Программное обеспечение HDL Coder не поддерживает времена непрерывной выборки для cosimulation генерации модели. Не используйте шаги расчета 0 или Inf в исходных блоках в пути к симуляции.

  • Если вы устанавливаете Clock Inputs на Multiple, HDL Coder не поддерживает генерацию cosimulation модели.

  • Комбинаторные выходные пути (вызванный отсутствием регистров в сгенерированном коде) имеют задержку одного дополнительного цикла в cosimulation. Чтобы избежать несоответствия в сравнении между симуляцией и cosimulation выходными параметрами, опция Allow direct feedthrough на панели Ports блока HDL Cosimulation автоматически выбрана.

    В качестве альтернативы можно избежать задержки путем определения выходной конвейеризации (см. OutputPipeline). Это полностью укажет выходные параметры во время генерации кода.

  • Двойные типы данных не поддерживаются для блока HDL Cosimulation. Избегайте использования двойных типов данных в пути к симуляции при генерации HDL-кода и cosimulation модели.