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