Чтобы создать пользовательскую Системную object™ и сгенерировать код:
Создайте класс, который подклассифицирует из matlab.System.
Задайте один из следующих наборов методов:
setupImpl и stepImpl
setupImpl, outputImpl, и updateImpl
Как использовать outputImpl и updateImpl методы, ваш Системный объект должен также наследовать от matlab.system.mixin.Nondirect класс.
Если ваш системный объект имеет частные свойства состояний, задайте resetImpl метод для их инициализации в нуль.
Написание функции проекта верхнего уровня, которая создает образец вашего системного объекта и вызывает step метод, или output и update методы.
Примечание
The 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 метод реализует функциональность системного объекта. The 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® код, но пропустите преобразование с фиксированной точкой.