Создать пользовательскую Систему 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®, но преобразования фиксированной точки пропуска.