Сгенерируйте HDL для Мили и Мура Фините Машин состояний

Обзор

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

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

  • Мучнистый

  • Мур

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

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

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

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

  • Moore графиков сгенерировать более эффективный код, чем Classic графиков.

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

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

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

Генерация 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
Блокируйте ОЗУ00

См. также

(Stateflow)

Похожие темы