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