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

Обзор

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

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

  • Мучнистый

  • Мур

Мучнистый и машина состояний Мура отличаются следующими способами:

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

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

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

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

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

Чтобы узнать больше об инструкциях по генерации 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 как показано на рисунке.

Следующий рисунок показывает диаграмму 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-кода для графика, который моделирует Мучнистый конечный автомат:

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

  • Действия должны быть сопоставлены с внутренними и внешними переходами только.

  • Поскольку лучший синтез заканчивается и больше читаемого 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 модель.

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

(Stateflow)

Похожие темы