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

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

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

Используется для планирования коллбэка в течение установленного значения времени. Это поле то же, что и 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Только для чтения

Хранит полный путь Верилога®/ 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 являются противоположными аргументам порта для функции испытательного стенда 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-портах

Поле...Может содержать...Который...И применяется к...
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
Для просмотра документации необходимо авторизоваться на сайте