Создать пользовательскую Систему object™ и сгенерировать код:
Создайте класс, который разделяет на подклассы от matlab.System
.
Задайте один из следующих наборов методов:
setupImpl
и stepImpl
setupImpl
outputImpl
, и updateImpl
Использовать outputImpl
и updateImpl
методы, ваш Системный объект должен также наследоваться matlab.system.mixin.Nondirect
класс.
Опционально, если ваш Системный объект имеет частные свойства состояний, задайте resetImpl
метод, чтобы инициализировать их, чтобы обнулить.
Запишите функцию проекта верхнего уровня, которая создает экземпляр вашего Системного объекта и вызывает объект или вызывает output
и update
методы.
Примечание
resetImpl
метод запускается автоматически во время инициализации Системного объекта. Для генерации HDL-кода вы не можете вызвать общедоступный reset
метод.
Запишите функцию испытательного стенда, которая осуществляет функцию проекта верхнего уровня.
Сгенерируйте HDL-код.
В этом примере показано, как сгенерировать HDL-код для пользовательского Системного объекта, который реализует setupImpl
и stepImpl
методы.
В перезаписываемой папке создайте Системный объект, CounterSysObj
, который разделяет на подклассы от matlab.System
. Сохраните код как CounterSysObj.m
.
classdef CounterSysObj < matlab.System properties (Nontunable) Threshold = int32(1) end properties (Access=private) State Count end methods function obj = CounterSysObj(varargin) setProperties(obj,nargin,varargin{:}); end end methods (Access=protected) function setupImpl(obj, ~) % Initialize states obj.Count = int32(0); obj.State = int32(0); end function y = stepImpl(obj, u) if obj.Threshold > u(1) obj.Count(:) = obj.Count + int32(1); % Increment count end y = obj.State; % Delay output obj.State = obj.Count; % Put new value in state end end end
stepImpl
метод реализует функциональность Системного объекта. setupImpl
метод задает начальные значения для персистентных переменных в Системном объекте.Запишите функцию, которая использует этот Системный объект, и сохраните его как myDesign.m
. Эта функция является вашим DUT.
function y = myDesign(u) persistent obj if isempty(obj) obj = CounterSysObj('Threshold',5); end y = obj(u); end
Запишите испытательный стенд, который вызывает функцию DUT, и сохраните ее как myDesign_tb.m
.
clear myDesign for ii=1:10 y = myDesign(int32(ii)); end
Сгенерируйте HDL-код для функции DUT, как вы были бы для любого другого MATLAB® код, но преобразование фиксированной точки пропуска.