Создать пользовательскую Систему object™ и сгенерировать код:
Создайте класс, который разделяет на подклассы от matlab.System.
Задайте один из следующих наборов методов:
setupImpl и stepImpl
setupImpl, outputImpl и updateImpl
Чтобы использовать outputImpl и методы updateImpl, ваш Системный объект должен также наследоваться классу matlab.system.mixin.Nondirect.
Опционально, если ваш Системный объект имеет частную государственную собственность, задайте метод resetImpl, чтобы инициализировать их, чтобы обнулить.
Запишите функцию проекта верхнего уровня, которая создает экземпляр вашего Системного объекта и вызывает метод step, или методы update и output.
Метод resetImpl запускается автоматически во время инициализации Системного объекта. Для генерации HDL-кода вы не можете вызвать общедоступный метод reset.
Запишите функцию испытательного стенда, которая осуществляет функцию проекта верхнего уровня.
Сгенерируйте HDL-код.
Этот пример показывает, как сгенерировать HDL-код для пользовательского Системного объекта, который реализует методы stepImpl и setupImpl.
В перезаписываемой папке создайте Системный объект, 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 = step(obj, u);
endЗапишите испытательный стенд, который вызывает функцию DUT, и сохраните ее как myDesign_tb.m.
clear myDesign
for ii=1:10
y = myDesign(int32(ii));
end
Сгенерируйте HDL-код для функции DUT, как вы были бы для любого другого кода MATLAB®, но преобразования фиксированной точки пропуска.