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

Обзор

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

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

  • Мучнистый

  • Мур

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Похожие темы