Следующий шаблон проекта показывает MATLAB® примеры машин состояний Мили и Мура, которые подходят для генерации HDL-кода.
Код MATLAB в этих моделях демонстрирует лучшие практики для написания моделей MATLAB для генерации HDL-кода.
С a switch
блокировать, использовать otherwise
оператор, чтобы убедиться, что модель учитывает все условия. Если модель не покрывает все условия, сгенерированный HDL-код может содержать ошибки.
Чтобы обозначить состояния в конечном автомате, используйте переменные с числовыми значениями.
В конечном автомате Мили выход зависит от состояния и входа. В конечном автомате Мура выход зависит только от состояния.
Следующий код 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 определяет 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