Моделируйте конечный автомат для генерации HDL-кода

Следующий шаблон проекта показывает MATLAB® примеры машин состояний Мили и Мура, которые подходят для генерации HDL-кода.

Код MATLAB в этих моделях демонстрирует лучшие практики для написания моделей MATLAB для генерации HDL-кода.

  • С a switch блокировать, использовать otherwise оператор, чтобы убедиться, что модель учитывает все условия. Если модель не покрывает все условия, сгенерированный HDL-код может содержать ошибки.

  • Чтобы обозначить состояния в конечном автомате, используйте переменные с числовыми значениями.

Код MATLAB для конечной машины Мили

В конечном автомате Мили выход зависит от состояния и входа. В конечном автомате Мура выход зависит только от состояния.

Следующий код MATLAB определяет mlhdlc_fsm_mealy функция. Постоянная переменная представляет текущее состояние. A switch блок использует текущее состояние и вход, чтобы определить выход и новое состояние. В каждом case в switch блок, if-else оператор вычисляет новое состояние и выход.

%#codegen
function Z = mlhdlc_fsm_mealy(A)
% Mealy State Machine

% y = f(x,u) : 
% all actions are condition actions and 
% outputs are function of state and input 

% define states
S1 = 0;
S2 = 1;
S3 = 2;
S4 = 3;

persistent current_state;
if isempty(current_state)
    current_state = S1;   
end

% switch to new state based on the value state register
switch (current_state) 
    
    case S1,
        
        % value of output 'Z' depends both on state and inputs
        if (A)
            Z = true;
            current_state = S1;
        else
            Z = false;            
            current_state = S2;
        end
        
    case S2,
        
        if (A)
            Z = false;
            current_state = S3;
        else
            Z = true;
            current_state = S2;
        end
        
    case S3,
        
        if (A)
            Z = false;            
            current_state = S4;
        else
            Z = true;            
            current_state = S1;
        end
        
    case S4,
        
        if (A)
            Z = true;
            current_state = S1;
        else
            Z = false;            
            current_state = S3;
        end        
        
    otherwise,
        
        Z = false;
end

Код MATLAB для конечной машины Мура

Следующий код MATLAB определяет mlhdlc_fsm_moore функция. Постоянная переменная представляет текущее состояние, а switch блок использует текущее состояние, чтобы определить выход и новое состояние. В каждом case в switch блок, if-else оператор вычисляет новое состояние и выход. Значение состояния представлено числовыми переменными.

%#codegen
function Z = mlhdlc_fsm_moore(A)
% Moore State Machine

% y = f(x) : 
% all actions are state actions and 
% outputs are pure functions of state only 

% define states
S1 = 0;
S2 = 1;
S3 = 2;
S4 = 3;


% using persistent keyword to model state registers in hardware
persistent curr_state;
if isempty(curr_state)
    curr_state = S1;   
end

% switch to new state based on the value state register
switch (curr_state)
    
    case S1,
        
        % value of output 'Z' depends only on state and not on inputs
        Z = true;
        
        % decide next state value based on inputs
        if (~A)
            curr_state = S1;
        else
            curr_state = S2;
        end
        
    case S2,
        
        Z = false;
        
        if (~A)
            curr_state = S1;
        else
            curr_state = S3;
        end
        
    case S3,
        
        Z = false;
        
        if (~A)
            curr_state = S2;
        else
            curr_state = S4;
        end
        
    case S4,
        
        Z = true;
        if (~A)
            curr_state = S3;
        else
            curr_state = S1;
        end
        
    otherwise,
        Z = false;
end

См. также

|

Похожие темы