Функция MATLAB®, которую вы сопоставляете с компонентом HDL, должна быть на пути поиска файлов MATLAB или находиться в текущей рабочей папке (см., что cd
MATLAB функционирует). Чтобы проверить, доступна ли функция, используйте функцию which
MATLAB. Следующий вызов which
проверяет, является ли функциональный MyVhdlFunction
на пути поиска файлов MATLAB, например:
which MyVhdlFunction /work/incisive/MySym/MyVhdlFunction.m
Если заданная функция находится на пути поиска файлов, which
отображает полный путь к функции. Если функция не находится на пути поиска файлов, which
сообщает вам, что файл не был найден.
Чтобы добавить функцию MATLAB в путь поиска файлов MATLAB, откройте окно Set Path путем нажатия на File> Set Path или используйте команду addpath
. Также для временного доступа, можно изменить MATLAB рабочая папка на желаемое местоположение с командой cd
.
matlabcp
Вы вызываете matlabcp
путем выдачи команды в симуляторе HDL. Смотрите раздел Examples страницы с описанием matlabcp
для нескольких примеров вызова matlabcp
.
Обязательно следуйте за спецификациями пути для компонента MATLAB, функциональные сеансы при вызове matlabcp
, как объяснено в Задают Пути к Сигналу/Порту и Модулю HDL для Функции Компонента MATLAB Cosimulation.
Для инструкций в выдаче команды matlabcp
смотрите 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 модуля верхнего уровня.
По умолчанию программное обеспечение 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 вызывает функцию.