Следующий шаблон разработки показывает примеры 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-код может содержать ошибки.
Чтобы определять состояния в конечном автомате, используйте переменные с численными значениями.