Stateflow® Графики поддержки моделирование трех типов машин состояний:
Классический (по умолчанию)
Мучнистый
Мур
Для генерации HDL-кода используйте машины типа Мили или Мура. Машины состояний Мили и Мура отличаются следующими способами:
Выходы конечного автомата Мили являются функцией текущего состояния и входов.
Выходы конечного автомата Мура являются функцией только текущего состояния.
Основными преимуществами использования графиков Мили или Мура в качестве альтернативы классическим графикам являются:
Moore графиков сгенерировать более эффективный код, чем Classic графиков.
Во время компиляции графиков Мили и Мура проверяются на соответствие их формальным определениям и семантическим правилам, и сообщаются о нарушениях.
Дополнительные сведения о руководствах по генерации HDL-кода для графиков см. в Chart (Stateflow).
Откройте hdlcoder_fsm_mealy_moore модель для примера, который показывает, как смоделировать графики Мили и Мура.
При генерации HDL-кода для графика, которая моделирует конечный автомат Мура:
График должен соответствовать общим требованиям к генерации кода, описанным в Chart (Stateflow).
Действия должны происходить только в состояниях. Эти действия должны быть немаркированы.
Действия Мура должны быть связаны с состояниями, потому что выходные расчеты должны быть зависимы только от состояний, а не от входа. Строение активных состояний во временной шаг t определяет выход. Если состояние S активен, когда график просыпается во время tоно способствует выходу независимо от того, остается ли оно активным во времени 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, выходное значение не возвращается к 4.
На этом изображении показан код Verilog, сгенерированный для этого графика Мура, с настройкой Initialize Outputs Every Time Chart Wakes Up и без нее.

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