exponenta event banner

Создание кода для пользовательских системных объектов

Создание определяемого пользователем системного объекта

Для создания пользовательского системного object™ и создания кода:

  1. Создание класса, из которого происходит вставка подклассов matlab.System.

  2. Определите один из следующих наборов методов.

    • setupImpl и stepImpl

    • setupImpl, outputImpl, и updateImpl

      Для использования outputImpl и updateImpl методы, системный объект также должен наследовать от matlab.system.mixin.Nondirect класс.

  3. При необходимости, если объект System имеет свойства private state, определите resetImpl метод инициализации их до нуля.

  4. Напишите конструкторскую функцию верхнего уровня, которая создает экземпляр объекта System и вызывает step метод или output и update методы.

    Примечание

    resetImpl выполняется автоматически во время инициализации объекта System. Для генерации кода HDL нельзя вызывать public reset способ.

  5. Напишите функцию тестового стенда, выполняющую функцию проектирования верхнего уровня.

  6. Создание кода HDL.

Пример определяемого пользователем системного объекта

В этом примере показано, как создать код HDL для определяемого пользователем объекта System, реализующего setupImpl и stepImpl методы.

  1. В папке с возможностью записи создайте объект System, 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 реализует функциональные возможности объекта System. setupImpl определяет начальные значения для постоянных переменных в объекте System.

  2. Записать функцию, использующую этот объект System, и сохранить его как myDesign.m. Эта функция является вашим DUT.

    function y = myDesign(u)
    
    persistent obj
    if isempty(obj)
        obj = CounterSysObj('Threshold',5);
    end
    
    y = step(obj, u);
    
    end

  3. Запишите тестовый стенд, вызывающий функцию DUT, и сохраните его как myDesign_tb.m.

    clear myDesign
    for ii=1:10
        y = myDesign(int32(ii));
    end
    

  4. Создайте код HDL для функции DUT, как и для любого другого кода MATLAB ®, но пропустите преобразование с фиксированной точкой.

Связанные темы