Stateflow® строит диаграмму моделирования поддержки трех типов машины состояний:
Классика (значение по умолчанию)
Мучнистый
Мур
Для генерации HDL-кода используйте Мучнистый или машины типа Мура. Мучнистый и машина состояний Мура отличаются следующими способами:
Выходные параметры Мучнистого конечного автомата являются функцией текущего состояния и входных параметров.
Выходные параметры конечного автомата Мура являются функцией текущего состояния только.
Основные преимущества использования Мучнистого или графики Мура как альтернатива Классическим графикам:
Графики Мура генерируют более эффективный код, чем Классические графики.
Во время компиляции, Мучнистый и графики Мура подтверждены для соответствия к их формальным определениям и семантическим правилам, и о нарушениях сообщают.
Чтобы узнать больше об инструкциях по генерации HDL-кода для графиков, смотрите Chart (Stateflow).
Откройте hdlcoder_fsm_mealy_moore
модель для примера, который показывает как графикам Мура и модели Mealy.
При генерации 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 |
Блокируйте RAM | 0 | 0 |
Chart (Stateflow)