3. Создание схемы автомата по шаблону в LabVIEW
Введение
Как было заявлено, наша окончательная цель состоит в создании системы синтеза конечных автоматов средствами системы LabVIEW. Входом для этой системы является блок-схема алгоритма функционирования. Выходом должна быть схема, реализованная средствами LabVIEW. При этом комбинационные схемы должны быть описаны средствами VHDL или другого языка, для передачи в САПР с целью синтеза микросхемы.
В LabVIEW существуют определенные средства, которые позволяют упростить синтез. В частности, наиболее распространенные архитектуры обычно сгруппированы в шаблоны проектирования. В этой работе мы используем шаблон проектирования под названием конечный автомат- , который представлен в LabVIEW. Данный шаблон можно использовать для реализации любого алгоритма, который можно описать автоматной диаграммой состояний. Мы будем использовать шаблон проектирования конечных автоматов в LabVIEW для создания схемы автомата Мили.
3.1. Инфраструктура конечного автомата
Для создания схемы автомата по шаблону в LabVIEW используем следующие составляющие:
• WhileLoop— непрерывное выполнение различных состояний
• CaseStructure — содержит фрейм с исполняемым кодом для каждого состояния
• ShiftRegister — содержит информацию о переходах между состояниями
• StateFunctionalityCode — реализует функциональность состояния
• TransitionCode — определяет следующее состояние в последовательности
На рисунке показана базовая структура реализованного в LabVIEW конечного автомата.

Рис. 3.1.1. Базовая инфраструктура конечного автомата LabVIEW
Переходы, описываемые диаграммой переходов, реализованы циклом While. Отдельные состояния представлены фреймами структуры Case. Сдвиговый регистр в цикле While хранит текущее состояния и передает его на вход структуры Case.
3.2. Управление конечными автоматами
Лучший способ управления инициализацией и переходами конечного автомата - использование элемента управления типа enumerated. Enums широко используются как селекторы выбора в конечном автомате. Однако, если пользователь предпринимает попытку добавить или удалить состояние из элемента управления типа enumerated, оставшиеся проводники, подключенные к копиям этого элемента управления, рвутся. Это одно из наиболее распространенных затруднений при реализации конечных автоматов на основе элементов управления типа enumerated. Одно из решений этой проблемы – использовать переменные типа integer, так как нам достаточно показать только номер состояния.
3.3. Переходы в конечных автоматах
Из всех способов реализации переходов в конечном автомате наиболее простой и распространенный – использование структуры Case, для переходов между любым количеством состояний. Этот способ обеспечивает масштабируемую, легко читаемую и развиваемую архитектуру конечного автомата. Другие методы могут оказаться полезными в определенных ситуациях, поэтому познакомиться и с ними.
Переход по умолчанию
Для перехода по умолчанию не требуется кода для определения следующего состояния, поскольку далее возможно только одно состояние. На рисунке показан шаблон разработки, в котором реализован переход по умолчанию для системы измерения температуры.

Рис.3.3.1. Единственный переход по умолчанию
Переход между двумя состояниями
Данный метод включает принятие решения о переходе между двумя состояниями. На рис. 3.3.2 показана функция Select, используемая для перехода между двумя состояниями.
Этот метод хорошо работает, если вы точно знаете, что в определенном состоянии всегда выполняется переход в два других состояния.

Рис.3.3.2. Код перехода с функцией Select
Переходы между двумя и более состояниями.
Для создания более масштабируемой архитектуры используется структура Case вместо функции Select для реализации кода перехода. На рис. 3.3.3 показан переход с использованием структуры Case.

Рис. 3.3.3. Переходы с использованием структуры Case
Далее мы покажем, как применить описанный метод построения схемы автомата по шаблону для построения автомата с десятью состояниями.
3.4. Автомат, реализованный с помощью шаблона
Разработанная по шаблону схема для рассмотренного ранее автомата с 10 состояниями представлена на рис. 3.4.1.

Рис. 3.4.1. Построенная по шаблону схема автомата с 10 состояниями.
Внутри структуры Case создаём схему, в которой по условиям определяется следующее состояние автомата, но не определяется выход. Но выход зависит от следующего состояния. Для определения выходов автомата создаём вторую структуру Case. Заметим, что схема выглядит довольно громоздко. Внутри структуры Case для определения выходов мы видим одинаковые схемы для некоторых состояний.
С целью исключения повторяющихся схем вынесем внутренний Case из внешнего (см. рис. 3.4.2).

Рис. 3.4.2. Оптимизированная схема автомата с 10 состояниями.
В этом случае в схеме внутри первого Case по условиям должно определяться, не только следующее состояние автомата, но и выходы. Для этого используем для кодирования состояния и выходов одно число. По этому числу с помощью деления на модуль, получаем частное и остаток. Частное является новым состоянием, а остаток представляет собой выходы.
Для вычисления таких чисел применим формулу:
П=(С-1)*М+В,
где П – число для кодирования состояния и выхода;
С – номер состояния автомата;
В – номер варианта выхода;
М - количество вариантов выходов. Варианты выхода представлены последовательностями.
Если номер варианта 0, то все Y в последовательности равны 0; Если номер варианта 1, то первый Y в последовательности равен 1, а остальные Y – 0; если номер варианта 2, то второй Y в последовательности равен 1, а остальные Y – 0.
В нашем случае М = 11.
Мы можем задать любое следующее состояние и выход с помощью этой формулы.
Так как, в компьютере вся информация представлена двоичным кодом, для обозначения количества вариантов выхода, лучше использовать числа, найденные по формуле 2n. Для нашего случая находим следующим образом: log211 = 3,4594. Округляем до целого в большую сторону. Получаем 24 = 16. Число, найденное по формуле П=(С-1)*16+В представляет с собой двоичное число из 8 знаков: 4 знака отводится на номер состояния и 4 на номер варианта выхода.
Итак, мы рассмотрели построение автомата по шаблону, который имеется в системе LabVIEW. Такой метод синтеза удобен для моделирования автомата, но представляет существенную трудность для дальнейшего получения схемы автомата на VHDL. Последняя необходима, если мы хотим средствами САПР осуществить окончательный синтез автомата в виде микросхемы.


