Этот раздел объясняет, как вы используете аргумент 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