Испытательный стенд и функциональная запись компонента

Запись функций Используя объект экземпляра 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. Программное обеспечение HDL Verifier устанавливает это поле на 'Init' во время первого коллбэка для этого конкретного экземпляра и к 'Running' после этого. Это значение поля является свойством только для чтения.

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

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

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

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

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

Идентифицирует тип порта

Для VHDL: integerдействительныйВремя, или enum

Для Verilog: 'verilog_logic' идентифицирует типы порта reg, wireЦелое число

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

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