Этот раздел объясняет, как вы используете use_instance_obj
аргумент для MATLAB® функционирует matlabcp
и matlabtb
. Эта функция заменяет iport
, oport
, tnext
, tnow
, и portinfo
аргументы определения функции MATLAB. Вместо этого объект экземпляра HDL передается функции в качестве аргумента. С этой функцией, matlabcp
и matlabtb
функциональные коллбэки передали объект экземпляра HDL в: к состоянию удержания обеспечьте защиту доступа для чтения-записи для сигналов и позвольте вам добавлять состояние, как желаемый.
С этой функцией вы получаете следующие преимущества:
Использование той же функции MATLAB, чтобы представлять поведение для различных экземпляров того же модуля в HDL без потребности создать одноразовые функции обертки.
Никакая потребность в специальном portinfo
аргумент на первом вызове.
Никакая потребность использовать персистентные или глобальные переменные.
Лучшая обратная связь и меры защиты при чтении/записи сигналов.
Использование полей объекта, чтобы идентифицировать путь к экземпляру и прибывает ли вызов из функции или испытательного стенда компонента.
Использование полевого аргумента, чтобы передать пользовательские аргументы от matlabcp
или matlabtb
инстанцирование на стороне HDL к функциональным коллбэкам.
use_instance_obj
аргумент идентичен для обоих matlabcp
и matlabtb
. Вы включаете -use_instance_obj
аргумент с matlabcp
или matlabtb
в следующем формате:
matlabcp modelname -mfunc funcname -use_instance_obj
Когда вы используете use_instance_obj
, HDL Verifier™ передает объект экземпляра HDL функции, заданной с -mfunc
аргумент. Вызванная функция имеет следующую подпись:
function MyFunctionName(hdl_instance_obj)
Объект экземпляра HDL, hdl_instance_obj
, показали поля в следующей таблице.
Поле | Доступ для чтения-записи | Описание |
---|---|---|
tnext | Только для записи | Используемый, чтобы запланировать коллбэк во время временной стоимости набора. Это поле совпадает с hdl_instance_obj.tnext = hdl_instance_obj.tnow + 5e-9 Эта линия кода планирует коллбэк во время = 5 наносекунд от |
userdata | Чтение-запись | Переменные состояния хранилищ текущего matlabcp экземпляр. Можно получить переменные в следующий раз, когда коллбэк этого экземпляра планируется. |
simstatus | Только для чтения | Хранит состояние симулятора HDL. Программное обеспечение HDL Verifier устанавливает это поле на >> hdl_instance_obj.simstatus ans= Init |
instance | Только для чтения | Хранит полный путь экземпляра Verilog®/VHDL®, сопоставленного с коллбэком. экземпляр является свойством только для чтения. Значение этого поля равняется значению экземпляра модуля, заданного с вызовом функции. Например: В симуляторе HDL: hdlsim> matlabcp osc_top -mfunc oscfilter use_instance_obj В MATLAB: >> hdl_instance_obj.instance ans= osc_top |
argument | Только для чтения |
Хранит аргумент, установленный matlabtb osc_top -mfunc oscfilter -use_instance_obj -argument foo -argument опция только, когда вы используете его с -use_instance_obj , в противном случае аргумент проигнорирован. аргумент является свойством только для чтения. >> hdl_instance_obj.argument ans= foo |
portinfo | Только для чтения |
Хранит информацию о портах VHDL и Verilog, сопоставленных с этим экземпляром. Это значение поля является свойством только для чтения, которое имеет полевую структуру, которая описывает порты, заданные для связанного модуля HDL. Для каждого порта, hdl_instance_obj.portinfo.field1.field2.field3
ПримечаниеКогда вы используете
|
tscale | Только для чтения |
Хранит предел разрешения (метка деления) в секундах симулятора HDL. Это значение поля является свойством только для чтения. >> hdl_instance_obj.tscale ans= 1.0000e-009 ПримечаниеКогда вы используете
|
tnow | Только для чтения |
Хранит текущее время. Это значение поля является свойством только для чтения. hdl_instance_obj.tnext = hld_instance_obj.tnow + fastestrate; |
portvalues | Чтение-запись |
Хранит текущие значения и устанавливает новые значения для выходных и входных портов для >> hdl_instance_obj.portvalues ans = Read Only Input ports: clk_enable: [] clk: [] reset: [] Read/Write Output ports: sine_out: [22x1 char] |
linkmode | Только для чтения |
Хранит состояние коллбэка. Программное обеспечение HDL Verifier устанавливает это поле на >> hdl_instance_obj.linkmode ans= component |
matlabcp
и объект экземпляра HDLВ этом примере симулятор HDL выполняет повторенные вызовы к matlabcp
связывать несколько экземпляров HDL с той же функцией MATLAB. Каждый вызов содержит -argument
как параметр конструктора, чтобы дифференцировать поведение.
> matlabcp u1_filter1x -mfunc osc_filter -use_instance_obj -argument "oversample=1" > matlabcp u1_filter8x -mfunc osc_filter -use_instance_obj -argument "oversample=8" > matlabcp u2_filter8x -mfunc osc_filter -use_instance_obj -argument "oversample=8"
Коллбэк функции MATLAB, osc_filter.m
, настраивает пользователя основанное на экземпляре состояние с помощью obj.userdata
, порт запросов и контекст симуляции с помощью другого obj
поля и использование переданный в obj.argument
дифференцировать поведение.
function osc_filter(obj) if (strcmp(obj.simstatus,'Init')) ud = struct('Nbits', 22, 'Norder', 31, 'clockperiod', 80e-9, 'phase', 1)); eval(obj.argument); if (~exist('oversample','var')) error('HdlLinkDemo:UseInstanceObj:BadCtorArg', ... 'Bad constructor arg to osc_filter callback. Expecting ''oversample=value''.'); end ud.oversample = oversample; ud.oversampleperiod = ud.clockperiod/ud.oversample; ud.InDelayLine = zeros(1,ud.Norder+1); centerfreq = 70/256; passband = [centerfreq-0.01, centerfreq+0.01]; b = fir1((ud.Norder+1)*ud.oversample-1, passband./ud.oversample); ud.Hresp = ud.oversample .* b; obj.userdata = ud; end ...
Синтаксис функции компонента MATLAB
function [oport, tnext] = MyFunctionName(iport, tnow, portinfo)
Синтаксис функции испытательного стенда MATLAB
function [iport, tnext] = MyFunctionName(oport, tnow, portinfo)
Аргументы ввода/вывода (iport
и oport
) для MATLAB функция компонента реверс аргументов port для функции испытательного стенда MATLAB. Таким образом, функция компонента MATLAB возвращает данные сигнала в выходные параметры и получает данные из входных параметров связанного модуля HDL.
Для получения дополнительной информации об использовании tnext
и tnow
для планирования симуляции смотрите, что Функции Компонента Расписания Используют tnext Параметр.
Следующая таблица описывает каждый испытательный стенд и параметры функции компонента и роли, которые они играют в каждой из функций.
Параметр | Испытательный стенд | Компонент |
---|---|---|
iport | Вывод Структура, которая обеспечивает (депозитом) значения на сигналы, соединенные с входными портами связанного модуля HDL. | Входной параметр Структура, которая получает значения сигналов от входных портов, заданных для связанного модуля HDL, в то время, когда задано tnow . |
tnext | Выведите, дополнительный Задает время, в которое симулятор HDL планирует следующий коллбэк к MATLAB. tnext должен быть инициализирован к пустому значению ([]). Если tnext позже не обновляется, никакие новые записи не добавляются к расписанию симуляции. | Выведите, дополнительный То же самое как испытательный стенд. |
oport | Входной параметр Структура, которая получает значения сигналов от выходных портов, заданных для связанного модуля HDL, в то время, когда задано tnow . | Вывод Структура, которая обеспечивает (депозитом) значения на сигналы, соединенные с выходными портами связанного модуля HDL. |
tnow | Входной параметр Получает время симуляции, в котором называется функция MATLAB. По умолчанию время представлено в секундах. Для получения дополнительной информации смотрите, что Функции Компонента Расписания Используют tnext Параметр. | То же самое как испытательный стенд. |
portinfo | Входной параметр Для первого вызова функции только (в начале симуляции), portinfo получает структуру, поля которой описывают порты, заданные для связанного модуля HDL. Для каждого порта, portinfo структура передает информацию, такую как тип порта, направление и размер. | То же самое как испытательный стенд. |
Если вы используете matlabcp
, инициализируйте функциональные выходные параметры к пустым значениям в начале функции как в следующем примере:
tnext = []; oport = struct();
Когда вы импортируете сигналы VHDL, имена сигнала в iport
, oport
, и portinfo
возвращены во всех прописных буквах.
Можно использовать информацию порта, чтобы создать типовую функцию MATLAB, которая действует по-другому в зависимости от информации порта, предоставленной при запуске. Для получения дополнительной информации о данных порта смотрите Получающий доступ к и Применение Информации порта.
Следующий код дает определение oscfilter
Функция компонента MATLAB.
function [oport,tnext] = oscfilter(iport, tnow, portinfo)
Имя функции oscfilter
, отличается от имени сущности u_osc_filter
. Поэтому имя функции компонента должно быть передано в явным образом matlabcp
команда, которая соединяет функцию со связанным экземпляром HDL с помощью -mfunc
параметр.
Функциональное определение задает все необходимые параметры ввода и вывода, как перечислено здесь:
oport | Силы (депозитом) значения на сигналы, соединенные с выходными портами сущности, filter1x_out , filter4x_out и filter8x_out . |
tnext | Задает временную стоимость, которая указывает, когда симулятор HDL выполнит следующий коллбэк к функции MATLAB. |
iport | Получает значения сигналов HDL от входного порта сущности, osc_in . |
tnow | Получает текущее время симуляции. |
portinfo | Для первого вызова функции, получает структуру, которая описывает порты, заданные для сущности. |
Следующий рисунок показывает отношение между портами сущности HDL и iport
функции MATLAB и
oport
параметры (показанный пример для использования с ModelSim®).
Программное обеспечение HDL Verifier передает информацию о сущности или модуле под тестом в portinfo
структура. portinfo
структура передается в качестве третьего аргумента функции. Это передается только в первом вызове вашей функции ModelSim. Можно использовать информацию, переданную в portinfo
структура, чтобы подтвердить сущность или модуль при симуляции. Три поля предоставляют информацию, как обозначено в следующей выборке.. Содержимое этих полей зависит от типа портов, заданных для модуля сущности или Verilog VHDL.
portinfo.field1.field2.field3
В следующей таблице перечислены возможные значения для каждого поля и идентифицирует типы порта, для которых применяются значения.
Информация порта HDL
Поле ... | Может содержать... | Который... | И применяется... |
---|---|---|---|
field1 | in | Указывает, что порт является входным портом | Все типы порта |
out | Указывает, что порт является выходным портом | Все типы порта | |
inout | Указывает, что порт является двунаправленным портом | Все типы порта | |
tscale | Указывает на предел разрешения средства моделирования в секундах, как задано в симуляторе HDL | Все типы | |
field2 | portname | Имя порта | Все типы порта |
field3 | type | Идентифицирует тип порта Для VHDL: Для Verilog: | Все типы порта |
| VHDL | VHDL | |
| VHDL | VHDL | |
size | VHDL: размер матрицы, содержащей данные Verilog: размер битового вектора, содержащего данные | Все типы порта | |
label | VHDL: символьный литерал или метка Verilog: вектор символов | VHDL: Перечислимые типы, включая предварительно определенные типы Verilog: Все типы порта |
Первый вызов функции ModelSim имеет три аргумента включая portinfo
структура. Проверка количества аргументов является одним способом, которым можно проверить тот portinfo
был передан. Например:
if(nargin ==3) tscale = portinfo.tscale; end