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)