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