цифровая электроника
вычислительная техника
встраиваемые системы

 


Как создать конечный автомат в Verilog

Автор: Mike(admin) от 11-01-2021, 05:55

Конечные автоматы являются одной из наиболее распространенных моделей работы как в аппаратных, так и в программных системах. Практически любую полезную цифровую систему можно определить как конечный автомат, поэтому неплохо узнать как можно больше об этом полезном системном шаблоне.


Как создать конечный автомат в Verilog

В этой статье описаны основы конечных автоматов и показан практический способ их реализации на языке Verilog.


Конечный автомат описывается множеством способов, но два самых популярных – это диаграммы состояний и таблицы состояний. Пример обоих представлений показан на следующем рисунке.


Как создать конечный автомат в Verilog

Обратите внимание, что этот автомат имеет входной сигнал x и выходной сигнал y, что делает его конечным автоматом Мили. Этот конечный автомат может быть реализован традиционным методом, преподаваемым на курсах цифрового проектирования, который предусматривает создание логики стимулов для триггеров, реализующих переменные состояния. Эта логика разработана с таблицей возбуждений выбранного типа триггера, а именно SR, D, JK или T. Когда мы применяем этот метод к автомату на вышеприведенном рисунке, мы получаем некоторую версию следующей реализации.


Как создать конечный автомат в Verilog

Итак, что делать, если вы хотите реализовать в Verilog конечный автомат, подобный показанному на вышеприведенном рисунке? На каком этапе процесса проектирования Verilog должен вступить в свои права?


Хотя можно спроектировать всю систему вручную, вплоть до схематической диаграммы второго рисунка, а затем написать ее код на Verilog, это не самый популярный подход к решению задачи. Еще хуже было бы описать все вентили на схеме, включая вентили, из которых состоят триггеры! Если вы описываете все на уровне вентилей, ваша система может каким-то образом работать, но это не оставляет возможности компилятору оптимизировать ваш проект в соответствии с вашими реальными потребностями, которые, вероятно, больше ориентированы на время и мощность, а не только на правильность.


Помните: причина использования языка описания оборудования состоит в том, чтобы воспользоваться преимуществами компилятора, который вы будете использовать, и, как и любому компилятору, чем больше свободы вы ему дадите, тем больше у вас будет шансов создать оптимальную реализацию. Так что хорошей отправной точкой является таблица состояний. Вам просто нужно будет указать Verilog, что автомат должен делать в каждом состоянии, а не какие вентили или триггеры использовать. Отличной конструкцией для конечного автомата в Verilog является оператор Case. В теле каждого Case следует исследовать переменную состояния и ее желаемое поведение. Следующий фрагмент кода показывает эту структуру.



case (state)

    STATE_0:

    STATE_1:

             //      ...

    STATE_N:

endcase

Итак, учитывая наш пример, приведем реализацию конечного автомата, показанного на первом рисунке. Обратите внимание, что выход y является комбинационной функцией.



module MyFSM(

        input clk,

        input x,

        output y);

    reg [1:0] state;

    assign y = state[1] & state[0] & x;

    always @ (negedge clk)

        case (state)

            2'b00: state <= x?2'b01:2'b00;

            2'b01: state <= x?2'b10:2'b00;

            2'b10: state <= x?2'b11:2'b00;

            2'b11: state <= 2'b00;

        endcase

endmodule

Вот так достаточно просто можно реализовать конечный автомат на Verilog.




© digitrode.ru


Теги: Verilog, конечный автомат




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий