В этом разделе описывается, как вы используете use_instance_obj
аргумент для MATLAB® функции matlabcp
и matlabtb
. Эта функция заменяет iport
, oport
, tnext
, tnow
, и portinfo
аргументы определения функции MATLAB. Вместо этого в качестве аргумента в функцию передается объект образца HDL. С этой функцией, matlabcp
и matlabtb
коллбэки функций передают объект образца HDL: для состояния удержания, обеспечения защиты доступа для чтения/записи сигналов и позволяют добавить состояние по желанию.
С помощью этой функции вы получаете следующие преимущества:
Использование той же функции MATLAB для представления поведения различных образцов одного и того же модуля в HDL без необходимости создания одноразовых функций-оболочек.
Нет необходимости в специальных portinfo
аргумент при первом вызове.
Не нужно использовать постоянные или глобальные переменные.
Лучшая обратная связь и защита от чтения/записи сигналов.
Использование полей объекта для определения пути образца и того, поступает ли вызов от функции компонента или испытательного стенда.
Использование аргумента поля для передачи пользовательских аргументов из matlabcp
или matlabtb
экземпляр на стороне HDL для коллбэков функции.
The 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 | Только для чтения | Хранит полный путь Верилога®/ 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 являются противоположными аргументам порта для функции испытательного стенда 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 | Получает значения сигналов от входного порта сущности, osc_in . |
tnow | Получает текущее время симуляции. |
portinfo | Для первого вызова функции получает структуру, которая описывает порты, определенные для сущности. |
Следующий рисунок показывает связь между портами сущности и функцией MATLAB iport
и oport
параметры (пример показан для использования с ModelSim®).
Программное обеспечение HDL Verifier передает информацию о тестируемой сущности или модуле в portinfo
структура. The 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