Stateflow® моделирование поддержки графиков трех типов машины состояний:
Классика (значение по умолчанию)
Мучнистый
Мур
Для генерации HDL-кода используйте Мучнистый, или Мур вводят машину состояний. Мучнистый и машина состояний Мура отличаются этими способами.
Выход Мучнистого конечного автомата является функцией текущего состояния и входных параметров.
Выход конечного автомата Мура является функцией текущего состояния только.
Основные преимущества использования Мучнистого или графики Мура как альтернатива Классическим графикам:
Графики Мура могут сгенерировать более эффективный код, чем Классические графики.
Во время компиляции, Мучнистый и графики Мура подтверждены для соответствия к их формальным определениям и семантическим правилам, и о нарушениях сообщают.
Чтобы узнать больше об инструкциях по генерации HDL-кода для графиков, смотрите блок Chart (Stateflow).
Откройте hdlcoder_fsm_mealy_moore модель для примера, который показывает как графикам Мура и модели Mealy.
При генерации HDL-кода для графика, который моделирует конечный автомат Мура, применяются эти условия.
График должен удовлетворить общие требования генерации кода как описано в блоке Chart (Stateflow).
Действия должны произойти в состояниях только. Эти действия должны быть не помечены.
Действия Мура должны быть сопоставлены с состояниями, потому что выходной расчет зависит только от состояний, не входа. Настройка активных состояний на временном шаге t определяет выход. Если S состояния активно, когда график будит во время t, затем S состояния способствует выходу, остается ли состояние активным во время t+1.
Не вызывайте Simulink® функции.
Это ограничение предотвращает выход от в зависимости от входа способами, которые затрудняют для генератора HDL-кода, чтобы проверить.
Если вы отключаете параметр Initialize Outputs Every Time Chart Wakes Up, сгенерированный HDL-код включает дополнительные регистры выходных значений конечного автомата.
Этот рисунок показывает диаграмму Stateflow конечного автомата Мура, который использует MATLAB® как язык действия.

При генерации HDL-кода для графика, который моделирует Мучнистый конечный автомат, применяются эти условия.
График должен удовлетворить общие требования генерации кода как описано в блоке Chart (Stateflow).
Действия должны быть сопоставлены с внутренними и внешними переходами только.
Если вы отключаете параметр Initialize Outputs Every Time Chart Wakes Up, сгенерированный HDL-код включает дополнительные регистры выходных значений конечного автомата.
Мучнистые действия сопоставлены с переходами. В Мучнистых машинах выходной расчет управляется изменением входных значений. Зависимость выхода на входе является фундаментальным фактором различения между формальными определениями машин Мили и Мура. Требование, чтобы результат действий переходов был до некоторой степени стилистическим, а не требуемый, чтобы осуществить Мучнистую семантику. Поскольку условиями перехода являются, в основном, входные условия в любом типе машины, выходной расчет в конечном счете следует за входными условиями в любом типе.
Этот рисунок показывает пример графика что модели Мучнистый конечный автомат с помощью MATLAB в качестве языка действия.

Этим кодом является Verilog® код сгенерирован для диаграммы Мили.
always @(posedge clk or posedge reset)
begin : Mealy_Chart_1_process
if (reset == 1'b1) begin
is_Mealy_Chart <= is_Mealy_Chart_IN_S0;
end
else begin
if (enb) begin
is_Mealy_Chart <= is_Mealy_Chart_next;
end
end
end
always @(is_Mealy_Chart, u) begin
is_Mealy_Chart_next = is_Mealy_Chart;
y_1 = 2'b00;
case ( is_Mealy_Chart)
is_Mealy_Chart_IN_S0 :
begin
if (u == 8'sb00000001) begin
y_1 = 2'b00;
is_Mealy_Chart_next = is_Mealy_Chart_IN_S1;
end
end
is_Mealy_Chart_IN_S1 :
begin
if (u == 8'sb00000001) begin
y_1 = 2'b01;
is_Mealy_Chart_next = is_Mealy_Chart_IN_S2;
end
end
is_Mealy_Chart_IN_S2 :
begin
if (u == 8'sb00000001) begin
y_1 = 2'b10;
is_Mealy_Chart_next = is_Mealy_Chart_IN_S3;
end
end
default :
begin
if (u == 8'sb00000001) begin
y_1 = 2'b11;
is_Mealy_Chart_next = is_Mealy_Chart_IN_S0;
end
end
endcase
end
assign y = y_1;
Мучнистый и графики Мура имеют опцию, чтобы возвратить выходные сигналы в их начальные значения, когда сигналы не управляются состоянием или переходом. Выберите параметр Initialize Outputs Every Time Chart Wakes Up, чтобы включить это поведение. Если вы очищаете этот параметр, сгенерированный HDL-код включает дополнительные регистры, чтобы сохранить выходные значения конечного автомата.
Этот рисунок показывает простой график Мура с двумя состояниями и одним выходом. Выход установлен в 1 в A состояния, и начальным значением выхода является 4.

Когда вы выбираете параметр Initialize Outputs Every Time Chart Wakes Up, выходное значение возвращается к 4 если конечный автомат не находится в A состояния. A состояния устанавливает выход на 1. Когда вы очищаете параметр Initialize Outputs Every Time Chart Wakes Up, выходное значение остается в 1 после того, как машина проходит через A состояния, и не возвращается к 4.
Этот рисунок показывает код Verilog, сгенерированный для этого графика Мура с выбранным Initialize Outputs Every Time Chart Wakes Up и затем с очищенным.

Эта таблица показывает использование ресурсов этих двух машин Мура, синтезируемых для Xilinx® Vivado® Устройство Virtex 7. Когда вы очищаете Initialize Outputs Every Time Chart Wakes Up, сгенерированный HDL-код включает дополнительные регистры для состояния вывода.
| Ресурс | Выбранный Initialize Outputs Every Time Chart Wakes Up | Очищенный Initialize Outputs Every Time Chart Wakes Up |
|---|---|---|
| LUTs | 18 | 20 |
| Регистры | 1 | 3 |
| DSPS | 0 | 0 |
| Блокируйте RAM | 0 | 0 |
Chart (Stateflow)