Настройте компонент Cosimulation

Поместите функцию компонента в путь поиска файлов MATLAB

Используйте MATLAB который Функция Найти Функцию Компонента

Функция MATLAB®, которую вы сопоставляете с компонентом HDL, должна быть на пути поиска файлов MATLAB или находиться в текущей рабочей папке (см., что cd MATLAB функционирует). Чтобы проверить, доступна ли функция, используйте функцию which MATLAB. Следующий вызов which проверяет, является ли функциональный MyVhdlFunction на пути поиска файлов MATLAB, например:

which MyVhdlFunction
/work/incisive/MySym/MyVhdlFunction.m

Если заданная функция находится на пути поиска файлов, which отображает полный путь к функции. Если функция не находится на пути поиска файлов, which сообщает вам, что файл не был найден.

Добавьте функцию компонента в путь поиска файлов MATLAB

Чтобы добавить функцию MATLAB в путь поиска файлов MATLAB, откройте окно Set Path путем нажатия на File> Set Path или используйте команду addpath. Также для временного доступа, можно изменить MATLAB рабочая папка на желаемое местоположение с командой cd.

Свяжите Вызовы функции Компонента С matlabcp

Вызовите MATLAB Component Function Command matlabcp

Вы вызываете matlabcp путем выдачи команды в симуляторе HDL. Смотрите раздел Examples страницы с описанием matlabcp для нескольких примеров вызова matlabcp.

Обязательно следуйте за спецификациями пути для компонента MATLAB, функциональные сеансы при вызове matlabcp, как объяснено в Задают Пути к Сигналу/Порту и Модулю HDL для Функции Компонента MATLAB Cosimulation.

Для инструкций в выдаче команды matlabcp смотрите HDL MATLAB Выполнения Cosimulation.

Задайте Пути к Сигналу/Порту и Модулю HDL для Функции Компонента MATLAB Cosimulation

Программное обеспечение HDL Verifier™ имеет конкретные требования для определения иерархии проекта HDL, синтаксис которой описан в следующих разделах: один для Verilog® в верхнем уровне, и один для VHDL® в верхнем уровне. Не используйте иерархию имени файла вместо имени иерархии проекта.

Правила, утвержденные в этом разделе, применяют к сигналу/порту и спецификациям пути к модулю для MATLAB cosimulation сеансы. Другие спецификации могут работать, но программное обеспечение HDL Verifier официально не распознает, ни поддерживает их.

В следующем примере:

matlabtb u_osc_filter -mfunc oscfilter

u_osc_filter является компонентом верхнего уровня. Если вы задаете субкомпонент, необходимо следовать за допустимыми спецификациями пути к модулю для MATLAB cosimulation сеансы.

Спецификации пути для сеансов ссылки MATLAB с верхним уровнем Verilog

  • Спецификация пути должна запуститься с имени модуля верхнего уровня.

  • Спецификация пути может включать "." или "/" разделители пути, но она не может включать смешанные разделители.

  • Листовой модуль или сигнал должны совпадать с языком HDL модуля верхнего уровня.

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

top.port_or_sig
/top/sub/port_or_sig
top
top/sub
top.sub1.sub2

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

  • top.sub/port_or_sig

    Почему эта спецификация недопустима: Вы не можете использовать смешанные разделители.

  • :sub:port_or_sig

    :

    :sub

    Почему эта спецификация недопустима: Когда вы используете специфичные для VHDL разделители, вы ограничиваете функциональную совместимость с путями при перемещении между симуляторами HDL и между VHDL и Verilog.

Спецификации пути для сеансов ссылки MATLAB с верхним уровнем VHDL

  • Спецификация пути может включать имя модуля верхнего уровня, но вы не должны включать его.

  • Спецификация пути может включать "." или "/" разделители пути, но она не может включать смешанные разделители.

  • Листовой модуль или сигнал должны совпадать с языком HDL модуля верхнего уровня.

 Примеры для ModelSim и острых пользователей

Свяжите компонент модуля HDL с функцией компонента MATLAB

По умолчанию программное обеспечение HDL Verifier принимает, что имя для функции MATLAB совпадает с именем модуля HDL, который проверяет функция. Когда вы создаете испытательный стенд или функцию компонента, которая имеет другое имя, чем проект под тестом, необходимо сопоставить проект с функцией MATLAB с помощью аргумента -mfunc для matlabtb. Этот аргумент сопоставляет экземпляр модуля HDL к функции MATLAB, которая имеет другое имя от экземпляра HDL.

Для получения дополнительной информации об аргументе -mfunc и для полного списка параметров matlabtb, смотрите ссылку на функцию matlabtb.

Для получения дополнительной информации на рекомендациях по именованию функции MATLAB, см., "что MATLAB Программирует Советы" на файлах и именах файлов в документации MATLAB.

Пример Привязки Испытательного стенда и Вызовов функции Компонента.  В этом первом примере вы формируете ассоциацию между компонентом inverter_vl и функцией испытательного стенда MATLAB inverter_tb путем вызова функционального matlabtb с аргументом -mfunc, когда вы настраиваете симуляцию.

matlabtb inverter_vl -mfunc inverter_tb

Команда matlabtb дает симулятору HDL команду отзывать функцию inverter_tb, когда inverter_vl выполняется в симуляции.

В этом втором примере вы связываете модель osc_top.u_osc_filter с функциональным oscfilter компонента:

matlabcp osc_top.u_osc_filter -mfunc oscfilter

Когда симулятор HDL вызывает коллбэк oscfilter, функция знает, чтобы работать с моделью osc_top.u_osc_filter.

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

О планировании опций для сеансов компонента

Существует два способа запланировать вызов функции MATLAB:

  • Используя аргументы к HDL Verifier функционируют matlabtb или matlabcp

  • В функции MATLAB с помощью параметра tnext

Два типа планирования не являются взаимоисключающими. Можно объединить matlabtb или аргументы синхронизации matlabcp и параметр tnext функции MATLAB, чтобы запланировать испытательный стенд или коллбэки сеанса компонента.

Запланируйте сеанс компонента Используя аргументы matlabcp

По умолчанию программное обеспечение HDL Verifier вызывает испытательный стенд MATLAB или функцию компонента однажды (в то время, когда вы выполняете вызов к matlabtb или matlabcp). Если вы хотите применить больше управления и выполнить функцию MATLAB несколько раз, используйте опции планирования команды. С этими опциями можно задать, когда и как часто программное обеспечение HDL Verifier вызывает соответствующую функцию MATLAB. Если применимо измените функцию или задайте аргументы синхронизации, когда вы начнете испытательный стенд MATLAB или функциональный сеанс компонента с функцией matlabcp или matlabtb.

Можно запланировать испытательный стенд MATLAB или функцию компонента, чтобы выполнить использование аргументов команды при любом из следующих условий:

  • Значения дискретного времени — На основе спецификаций времени, которые могут также включать повторные интервалы и время остановки

  • Возрастающее ребро — Когда заданный сигнал испытывает возрастающее ребро

    • VHDL: Возрастающее ребро {0 или L} к {1 или H}.

    • Verilog: Возрастающее ребро является переходом от 0 до x, z, или 1, и от x или z к 1.

  • Падающее ребро — Когда заданный сигнал испытывает падающее ребро

    • VHDL: Падающее ребро {1 или H} к {0 или L}.

    • Verilog: Падающее ребро является переходом от 1 до x, z, или 0, и от x или z к 0.

  • Изменение состояния сигнала — Когда заданный сигнал изменяет состояние, на основе списка с помощью аргумента -sensitivity для matlabtb.

Запланируйте функции компонента Используя параметр tnext

Можно управлять синхронизацией коллбэка функции MATLAB при помощи параметра tnext этой функции. Этот параметр передает временную стоимость симулятору HDL, и значение добавляется к расписанию симуляции для этой функции. Если функция возвращает нулевое значение ([]), программное обеспечение не добавляет новых записей в расписание.

Можно установить значение tnext к значению типа double или int64. Задайте double, чтобы выразить время коллбэка в секундах. Например, чтобы запланировать коллбэк в 1 нс, задайте:

 tnext = 1e-9

Задайте int64, чтобы преобразовать в целочисленное кратное текущий предел разрешения времени симулятора HDL. Например: если точность времени симулятора HDL составляет 1 нс, чтобы запланировать коллбэк на уровне 100 нс, задайте:

tnext=int64(100)

Примечание

Параметр tnext представляет время от запуска симуляции. Поэтому tnext должен всегда быть больше, чем tnow. Если это будет меньше, программное обеспечение не планирует коллбэк.

Для получения дополнительной информации о tnext и прототипе функции, см. Определения Синтаксиса и Аргумента функции функции MATLAB.

Примеры Планирования с tnext.  В этом первом примере каждый раз симулятор HDL вызывает функцию испытательного стенда (через HDL Verifier), tnext планирует следующий коллбэк к функции MATLAB для 1 нс позже относительно текущего времени симуляции:

tnext = [];
.
.
.
tnext = tnow+1e-9;

Используя tnext можно динамически решить планирование коллбэка на основе критериев, характерных для операции испытательного стенда. Например, можно решить прекратить планировать коллбэки, когда сигнал данных имеет определенное значение:

    if qsum == 17,
        qsum = 0;
        disp('done');
        tnext = [];  % suspend callbacks
        testisdone = 1;
        return;
    end

Этот следующий пример демонстрирует планирование сеанса компонента с помощью tnext. В примере Осциллятора функция oscfilter вычисляет временной интервал, в котором симулятор HDL вызывает коллбэки. Функция компонента вычисляет этот интервал на первый вызов oscfilter и хранит результат в переменной fastestrate. Переменная fastestrate представляет демонстрационный период самого быстрого уровня сверхдискретизации, поддержанного фильтром. Функция выводит этот уровень с базового периода выборки 80 нс.

Следующий оператор присваивания устанавливает параметр синхронизации tnext. Этот параметр планирует следующий коллбэк к функции компонента MATLAB относительно текущего времени симуляции (tnow).

tnext = tnow + fastestrate;

Функция возвращает новое значение для tnext каждый раз, когда симулятор HDL вызывает функцию.