exponenta event banner

Стенд испытаний и запись функций компонентов

Запись функций с помощью объекта экземпляра HDL

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

Используется для планирования обратного вызова в течение заданного значения времени. Это поле совпадает с полем tnext в старом portinfo структура. Например:

hdl_instance_obj.tnext = hdl_instance_obj.tnow + 5e-9

Эта строка кода планирует обратный вызов в момент времени = 5 наносекунд от tnow.

userdataЧтение/записьСохраняет переменные состояния текущего matlabcp экземпляр. Переменные можно извлечь при следующем планировании обратного вызова этого экземпляра.
simstatusТолько для чтения

Сохраняет состояние имитатора ЛПВП. Программное обеспечение HDL Verifier устанавливает для этого поля значение 'Init' во время первого обратного вызова для этого конкретного экземпляра и 'Running' после этого. Это значение поля доступно только для чтения.

>> 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Только для чтения

Сохраняет аргумент, заданный -argument вариант matlabcp. Например:

matlabtb osc_top -mfunc oscfilter -use_instance_obj -argument foo
Проверочное программное обеспечение поддерживает -argument параметр, только если вы используете его с -use_instance_obj, в противном случае аргумент игнорируется. аргумент является свойством только для чтения.
>> hdl_instance_obj.argument

ans= 
    	foo

portinfoТолько для чтения

Сохраняет информацию о портах VHDL и Verilog, связанных с этим экземпляром. Это значение поля является свойством только для чтения, которое имеет структуру поля, описывающую порты, определенные для связанного модуля HDL. Для каждого порта, portinfo структура передает такую информацию, как тип, направление и размер порта. Дополнительные сведения о данных порта см. в разделе Получение доступа к информации о порте и ее применение.

hdl_instance_obj.portinfo.field1.field2.field3

Примечание

При использовании use_instance_obj, вы получаете доступ tscale через объект экземпляра HDL. Если вы не используете use_instance_obj, вы по-прежнему можете получить доступ tscale через portinfo.

tscaleТолько для чтения

Сохраняет предел разрешения (отметку) в секундах имитатора ЛПВП. Это значение поля доступно только для чтения.

>> hdl_instance_obj.tscale

ans=
	1.0000e-009

Примечание

При использовании use_instance_obj, вы получаете доступ tscale через объект экземпляра HDL. Если вы не используете use_instance_obj, вы по-прежнему можете получить доступ tscale через portinfo.

tnowТолько для чтения

Сохраняет текущее время. Это значение поля доступно только для чтения.

hdl_instance_obj.tnext = hld_instance_obj.tnow + fastestrate;

portvaluesЧтение/запись

Сохраняет текущие значения и устанавливает новые значения для выходного и входного портов для matlabcp экземпляр. Например:

>> hdl_instance_obj.portvalues

ans =
Read Only Input ports:
	clk_enable: []
	clk: []
	reset: []
Read/Write Output ports:
	sine_out: [22x1 char]

linkmodeТолько для чтения

Сохраняет состояние обратного вызова. Программное обеспечение HDL Verifier устанавливает для этого поля значение 'testbench' если обратный вызов связан с matlabtb и 'component' если обратный вызов связан с matlabcp. Это значение поля доступно только для чтения.

>> 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 и определения аргументов функции

Синтаксис функции компонента 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

Следующий код дает определение 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

Поле...Может содержать...Который...И относится к...
field1inУказывает, что порт является портом вводаВсе типы портов
outУказывает, что порт является портом выводаВсе типы портов
inoutУказывает, что порт является двунаправленным Все типы портов
tscaleУказывает предел разрешения симулятора в секундах, как указано в симуляторе HDLВсе типы
field2portnameИмя портаВсе типы портов
field3type

Определяет тип порта

Для VHDL: integer, real, time, или enum

Для Verilog: 'verilog_logic' идентифицирует типы портов reg, wire, integer

Все типы портов

right (только VHDL)

VHDL RIGHT признак

VHDL integer, natural, или positive типы портов

left (только VHDL)

VHDL LEFT признак

VHDL integer, natural, или positive типы портов

 size

VHDL: размер матрицы, содержащей данные

Verilog: Размер битового вектора, содержащего данные

Все типы портов
label

VHDL: символьный литерал или метка

Verilog: вектор символов '01ZX'

VHDL: перечислимые типы, включая предопределенные типы BIT, STD_LOGIC, STD_ULOGIC, BIT_VECTOR, и STD_LOGIC_VECTOR

Verilog: Все типы портов

Первый вызов функции ModelSim имеет три аргумента, включая portinfo структура. Проверка количества аргументов является одним из способов проверки того, что portinfo был пройден. Например:

if(nargin ==3)
 tscale  = portinfo.tscale;
end