В этом разделе объясняется, как вы используете 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 Verifier устанавливает для этого поля значение >> hdl_instance_obj.simstatus
ans=
Init |
instance | Только для чтения | Сохраняет полный путь экземпляра Verilog ®/VHDL ®, связанного с обратным вызовом. экземпляр является свойством, доступным только для чтения. Значение этого поля равно значению экземпляра модуля, указанного при вызове функции. Например: В имитаторе ЛПВП: 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_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 являются обратными аргументами порта для функции тестового стенда MATLAB. То есть функция компонента MATLAB возвращает данные сигнала на выходы и принимает данные с входов связанного модуля HDL.
Дополнительные сведения об использовании tnext и tnow для получения информации о планировании моделирования см. раздел Планирование функций компонентов с использованием параметра tnext.
В следующей таблице описаны все параметры тестового стенда и функции компонентов, а также роли, которые они играют в каждой из функций.
| Параметр | Испытательный стенд | Компонент |
|---|---|---|
iport | Продукция Структура, которая форсирует (путем депонирования) значения на сигналы, подключенные к входным портам соответствующего модуля ЛПВП. | Вход Структура, принимающая значения сигналов от входных портов, определенных для соответствующего модуля HDL в момент времени, указанный в tnow. |
tnext | Вывод, опционально Указывает время, в которое имитатор HDL планирует следующий обратный вызов MATLAB. tnext должно быть инициализировано пустым значением ([]). Если tnext не обновляется, новые записи не добавляются в расписание моделирования. | Вывод, опционально То же, что и испытательный стенд. |
oport | Вход Структура, принимающая значения сигналов от выходных портов, определенных для соответствующего модуля HDL в момент времени, указанный в tnow. | Продукция Структура, которая направляет (путем депонирования) значения на сигналы, подключенные к выходным портам соответствующего модуля ЛПВП. |
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 и функциями MATLAB. iport и oport (пример показан для использования с ModelSim ®).

Программное обеспечение HDL Verifier передает информацию о тестируемом объекте или модуле в portinfo структура. portinfo структура передается в качестве третьего аргумента функции. Он передается только при первом вызове функции ModelSim. Можно использовать информацию, переданную в portinfo для проверки объекта или модуля в процессе моделирования. Три поля предоставляют информацию, как указано в следующем примере.. Содержимое этих полей зависит от типа портов, определенных для объекта VHDL или модуля Verilog.
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