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)