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