Сгенерируйте HDL для конечных автоматов Мура и мучнистого

Обзор

Stateflow® строит диаграмму моделирования поддержки трех типов машины состояний:

  • Классика (значение по умолчанию)

  • Мучнистый

  • Мур

Для генерации HDL-кода используйте Мучнистый или машины типа Мура. Мучнистый и машина состояний Мура отличаются следующими способами:

  • Выходные параметры Мучнистого конечного автомата являются функцией текущего состояния и входных параметров.

  • Выходные параметры конечного автомата Мура являются функцией текущего состояния только.

Основные преимущества использования Мучнистого или графики Мура как альтернатива Классическим графикам:

  • Графики Мура генерируют более эффективный код, чем Классические графики.

  • Во время компиляции, Мучнистый и графики Мура подтверждены для соответствия к их формальным определениям и семантическим правилам, и о нарушениях сообщают.

Чтобы узнать больше об инструкциях по генерации HDL-кода для графиков, смотрите Chart (Stateflow).

Откройте hdlcoder_fsm_mealy_moore модель для примера, который показывает как графикам Мура и модели Mealy.

Генерация HDL-кода для конечного автомата Мура

При генерации HDL-кода для графика, который моделирует конечный автомат Мура:

  • График должен удовлетворить общие требования генерации кода как описано в Chart (Stateflow).

  • Действия должны произойти в состояниях только. Эти действия должны быть не помечены.

    Действия Мура должны быть сопоставлены с состояниями, потому что выведенный расчет должен зависеть только от состояний, не входа. Настройка активных состояний на временном шаге t определяет выход. Если S состояния активно, когда график будит во время t, это способствует выходу, остается ли это активным во время t+1.

  • Не вызывайте функции Simulink®.

    Это предотвращает выход от в зависимости от входа способами, которые затруднили бы для генератора HDL-кода, чтобы проверить.

  • Если вы отключаете Initialize Outputs Every Time Chart Wakes Up, сгенерированный HDL-код включает дополнительные регистры выходных значений конечного автомата.

Следующий рисунок показывает диаграмму Stateflow конечного автомата Мура, который использует MATLAB® в качестве языка действия.

Генерация HDL для мучнистого конечного автомата

При генерации 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-код включает дополнительные регистры для состояния вывода.

Ресурс
LUTs1820
Регистры13
DSPS00
Блокируйте RAM00

Смотрите также

(Stateflow)

Похожие темы