Stateflow® строит диаграмму моделирования поддержки трех типов машины состояний:
Классика (значение по умолчанию)
Мучнистый
Мур
Мучнистый и машина состояний Мура отличаются следующими способами:
Выходные параметры Мучнистого конечного автомата являются функцией текущего состояния и входных параметров.
Выходные параметры конечного автомата Мура являются функцией текущего состояния только.
Основные преимущества использования Мучнистого или графики Мура как альтернатива Классическим графикам:
Графики Мура генерируют более эффективный код, чем Классические графики.
Во время компиляции, Мучнистый и графики Мура подтверждены для соответствия к их формальным определениям и семантическим правилам, и о нарушениях сообщают.
Чтобы узнать больше об инструкциях по генерации HDL-кода для графиков, см. График.
Откройте модель hdlcoder_fsm_mealy_moore
для примера, который показывает как графикам Мура и модели Mealy.
При генерации HDL-кода для графика, который моделирует конечный автомат Мура:
График должен удовлетворить общие требования генерации кода, как описано в Графике.
Действия должны произойти в состояниях только. Эти действия должны быть не маркированы.
Действия Мура должны быть сопоставлены с состояниями, потому что выведенное вычисление должно зависеть только от состояний, не входа. Настройка активных состояний на временном шаге t
определяет вывод. Если S
состояния активен, когда график будит во время t
, это способствует выводу, остается ли это активным во время t+1
.
Не вызывайте функции Simulink®.
Это предотвращает вывод от в зависимости от входа способами, которые были бы трудными для генератора HDL-кода проверить.
Убедитесь, что вы включаете свойству диаграммы Initialize Outputs Every Time Chart Wakes Up как показано в фигуре.
Следующие данные показывают диаграмму Stateflow конечного автомата Мура, который использует MATLAB® в качестве языка действия.
Код Verilog® сгенерировал для графика Мура:
always @(posedge clk or posedge reset) begin : Moore_Chart_1_process if (reset == 1'b1) begin is_Moore_Chart <= is_Moore_Chart_IN_S0; end else begin if (enb) begin case ( is_Moore_Chart) is_Moore_Chart_IN_S0 : begin if (u == 8'sb00000001) begin is_Moore_Chart <= is_Moore_Chart_IN_S1; end end is_Moore_Chart_IN_S1 : begin if (u == 8'sb00000001) begin is_Moore_Chart <= is_Moore_Chart_IN_S2; end end is_Moore_Chart_IN_S2 : begin if (u == 8'sb00000001) begin is_Moore_Chart <= is_Moore_Chart_IN_S3; end end default : begin if (u == 8'sb00000001) begin is_Moore_Chart <= is_Moore_Chart_IN_S0; end end endcase end end end always @(is_Moore_Chart) begin y_1 = 2'b00; case ( is_Moore_Chart) is_Moore_Chart_IN_S0 : begin y_1 = 2'b00; end is_Moore_Chart_IN_S1 : begin y_1 = 2'b01; end is_Moore_Chart_IN_S2 : begin y_1 = 2'b10; end default : begin y_1 = 2'b11; end endcase end assign y = y_1;
Для примера, который показывает Мучнистый и машина состояний Мура, которая подходит для генерации HDL-кода, откройте модель hdlcoder_fsm_mealy_moore
.
При генерации HDL-кода для графика, который моделирует Мучнистый конечный автомат:
График должен удовлетворить общие требования генерации кода, как описано в Графике.
Действия должны быть сопоставлены с внутренними и внешними переходами только.
Поскольку лучший синтез заканчивается и больше читаемого HDL-кода, мы рекомендуем включить свойству диаграммы Initialize Outputs Every Time Chart Wakes Up, как показано в следующей фигуре. Если вы отключаете 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;
Для примера, который показывает Мучнистый и машина состояний Мура, которая подходит для генерации HDL-кода, откройте модель hdlcoder_fsm_mealy_moore
.