Научная статья на тему 'ПРОГРАММНАЯ РЕАЛИЗАЦИЯ КОНЕЧНОГО АВТОМАТА НА ЯЗЫКЕ СИ'

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ КОНЕЧНОГО АВТОМАТА НА ЯЗЫКЕ СИ Текст научной статьи по специальности «Математика»

CC BY
543
49
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОНЕЧНЫЙ АВТОМАТ / ФУНКЦИЯ ПЕРЕХОДОВ / ФУНКЦИЯ ВЫХОДОВ / ПРОГРАММА НА ЯЗЫКЕ СИ / FINITE STATE MACHINE / TRANSITION FUNCTION / OUTPUT FUNCTION / C PROGRAM

Аннотация научной статьи по математике, автор научной работы — Тюрин С.Ф., Гончаровский О.В.

Конечный автомат описывается множествами входных, выходных символов и символов внутренних состояний. Кроме того, задаются функции переходов и выходов. Наиболее "быстрая" реализация этих функций выполняется аппаратно. Так, например, строятся устройства управления процессоров на основе так называемых программируемых логических матриц (ПЛМ). Однако часто необходима и "медленная", программная реализация, например при распознавании кодовых последовательностей (пин-код), проверке синтаксиса программ и пр. В статье рассматривается программная реализация автомата на языке СИ методом ПЛМ.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SOFTWARE IMPLEMENTATION OF THE FINITE STATE MACHINE IN C

A finite state machine is described by sets of input and output symbols and symbols of internal states. In addition, transition and output functions are set. The most "fast" implementation of these functions is performed in hardware. Therefore, for example, processor control devices are built based on the so-called programmable logic array (PLA). However, a "slow" software implementation is often necessary, for example, when recognizing code sequences ("pin"), checking the syntax of programs, etc. The article discusses the software implementation of the state machine by the C language using the PLA algorithm.

Текст научной работы на тему «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ КОНЕЧНОГО АВТОМАТА НА ЯЗЫКЕ СИ»

2019

ВЕСТНИК ПЕРМСКОГО УНИВЕРСИТЕТА

Математика. Механика. Информатика

Вып. 3(46)

ИНФОРМАТИКА ИНФОРМАЦИОННЫЕ СИСТЕМЫ

УДК 51:33(075.8)

Программная реализация конечного автомата на языке СИ

С. Ф. Тюрин

Пермский национальный исследовательский политехнический университет Россия, 614990, г. Пермь, ул. Комсомольский пр., 29 tyurinsergfeo@yandex.ru; +7-952-32-02-510

Пермский государственный национальный исследовательский университет Россия, 614990, г. Пермь, ул. Букирева, 15

О. В. Гончаровский

Пермский национальный исследовательский политехнический университет Россия, 614990, г. Пермь, ул. Комсомольский пр., 29 35911953@mail.ru; +7-919-45-91-258

Конечный автомат описывается множествами входных, выходных символов и символов внутренних состояний. Кроме того, задаются функции переходов и выходов. Наиболее "быстрая" реализация этих функций выполняется аппаратно. Так, например, строятся устройства управления процессоров на основе так называемых программируемых логических матриц (ПЛМ). Однако часто необходима и "медленная", программная реализация, например при распознавании кодовых последовательностей (пин-код), проверке синтаксиса программ и пр. В статье рассматривается программная реализация автомата на языке СИ методом ПЛМ.

Ключевые слова: конечный автомат; функция переходов; функция выходов; программа на языке СИ.

БОТ: 10.17072/1993-0550-2019-3-86-90

Введение

Реализация (вычисление) логических функций и автоматов [1, 2] - одна из важных областей информатики, которая развивается с 1930-х гг. ХХ в., если не учитывать релейно-контактные схемы, впервые использованные еще в XIX в. Аппаратные решения дали старт эре ЭВМ (компьютеров) с 1940-х гг. прошлого века. Команды логических операций, в том числе и битовые, являются одним из подклассов системы команд процессоров и микроконтроллеров, а также имеются в языках программирования высокого уровня, например, СИ [3]. Однако как таковых команд (операций) реализации автоматных отображений нет до сих пор.

© Тюрин С. Ф., Гончаровский О. В., 2019

Программную реализацию автоматов (не будем выделять реализацию логических функций, ибо она является частью реализации автоматов) можно разделить на неуниверсальную и универсальную [4]. Неуниверсальная реализует только данный автомат, а универсальная - некоторый класс автоматов в рамках некоторой размерности. Например, можно построить реализацию автомата путем использования таблицы переходов-выходов [4], но для больших размерностей такая таблица будет весьма громоздка.

Неуниверсальная реализация представляет собой программу вычисления нового состояния и выходных функций только для данного автомата.

Универсальная реализация использует отдельно задаваемую таблицу, которая меняется в зависимости от заданного автомата.

То есть, для нового автомата необходимо задать только размер таблицы и саму таблицу. Более экономный подход использует минимизированные логические функции в дизъюнктивной нормальной форме (ДНФ), в отличие от табличного, использующего совершенную дизъюнктивную нормальную форму (СДНФ). Например, используется алгоритм реализации программируемой логической матрицы (ПЛМ), в которой функции заданы в ДНФ, в отличие от реализации на постоянной (оперативной) памяти (ПЗУ, ОЗУ), использующей СДНФ представление.

Такой алгоритм приведен в [5, 6] и примеры его использования на языке Ассемблер описаны в [7, 8]. Реализуем этот алгоритм на языке СИ, пользуясь ресурсом [9].

1. Подготовка исходных данных

Рассмотрим пример реализации автомата-распознавателя последовательности.

Пусть это последовательность на двух бинарных входах аЬ: 0,1,3,2. После получения правильной последовательности на выходе z1 формируется единица. Если последовательность нарушается, на выходе z2 формируется единица. Одновременное изменение сразу двух входов исключим из рассмотрения.

Состояния автомата обозначим у(^) -текущее, у^+1) - следующее. Граф переходов автомата с дугами, обозначенными в

формате изображен на рис. 1.

Рис. 1. Граф переходов автомата-распознавателя бинарной последовательности 00,01,11,10

По графу переходов получим таблицу переходов-выходов [7] (рис. 2).

У,УЛ0 ah

00 »1 il 10

»0 (ЮН 00 00 01H 01 0« юн 02H 00 10

01 мн 01 10 05Н 01 00 07 H 11 (Ht 06H

il осн 0DH 11 10 0FH 11 (Ht 0ЕН 11 01 r,y,(H 1)

Таким образом, получаем систему логических функций:

У2(1 + 1)У2У1аЬ = 4,7,12,13,15,14[0,1,2,5], У^ + 1)у2у1аЬ = 1,4,5,7,12,13,15,14[0,2], (1)

2y2yiab

ly2yiab

= 2,4,12,13[0,1,5,7,15,14], = 14[0,1,2,4,5,7,12,13,15].

Системе (1) соответствует массив масок-констант [7, 8]:

FH,01H,04H,0FH,02H,02H,0FH,04H,06H,0FH,0 5H,04H,0FH,07H,0CH,0FH,0DH,0EH,0FH,0FH, 0CH,0FH,0EH,0DH,00H.

В данном случае используем СДНФ, поскольку минимизация приводит к большему числу масок (9 вместо 8):

У 2( + 1) у2У1аЬ = У 2 V У а V у ХЪ;

У^ + 1)ууааЪ = У1 V Ъ;

У2У' - (2) 21 у^аЪ = У1аЪ;

22У^аЪ = У2 а V У1 аЪ V У 2аЪ-

2. Разработка программы

Программа на языке СИ содержит блок задания констант для вычисления системы логических функций:

#include <stdio.h> Служебная

#include <stdlib.h> информация

//#define

_CRT_SECURE_NO_WARNINGS

typedef struct {

unsigned char A1;

unsigned char A2; Задание

unsigned char A3; массива

} A_type; констант

A type A[24]= для кода

{ 0132

{0x0f,0x01,0x04},

{0x0f,0x02,0x02},

{0x0f,0x04,0x06},

{0x0f,0x05,0x04},

{0x0f,0x07,0x0c},

{0x0f,0x0d,0x0E},

{0x0f,0x0f,0x0c},

{0x0f,0x0e,0x0d}, Длина масси-

{0,0,0}}; ва (24) услов-

unsigned int x=0x0;//Input Vector ная, рассчи-

unsigned char y=0x0;//Memory тана на максимальное количество

unsigned char z=0x0;//Output Vector

констант.

unsigned char T=0x0;//Temporal

Рис. 2. Таблица переходов-выходов

В основном блоке вводится символ с клавиатуры, вычисляются функции переходов и выходов и автомат переводится в новое состояние:

int main() {

do

{scanf("%x",&x);//input console symbol printf ("x=%0x\n",x);//print

of the console symbol

{

//y=0xc;

x=y|x;//get new input vector with memory

printf ("x=0x%x\n",x); int idx = 0;

for (idx=0;idx<24;idx++) {

if(A[idx].A1==0)//condition of the massive end break;

T=x&A[idx].A1;//masc of variables T=TAA[idx].A2;//masc of not inverse variables if(T==0)//condition of the

product term truth

{

z=z| A[idx]. A3 ;//output vector

printf ("z (%d)=0x%x\n",idx,z);//print output vector

//y=z&0xc;// set new state //printf ("y (%d)=0x%x\n",idx,y);//print new state //break;

} }

y=z&0xc;// set new state printf ("y

(%d)=0x%x\n",idx,y);//print

new state }

}

while (1);//infinity cicle }_

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

Принцип вычисления системы логических функций следующий. Входной вектор маскируется первой константой данной конъюнкции - существенных переменных (выделяются существенные переменные) Т=х&Л^х].Л1.

Далее результат складывается по модулю два со второй константой Т=ТАА^х].Л2.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Если результат нулевой, это свидетельствует об истинности конъюнкции, поэтому выполняется поразрядная дизъюнкция выходного вектора z с третьей маской (маской функций выходов) 2=2|А^х].А3.

Иначе выбирается следующая группа констант, если это не последняя константа, что фиксируется маркером окончания массива {0,0,0}.

3. Тестирование программы

В начале проведем тестирование одно-тактного эквивалента автомата по таблице, изображенной на рис. 3.

Рис. 3. Таблица тестирования однотактного эквивалента автомата

При этом код состояния y указываем вручную. Тестирование показывает, что таблица (рис. 3, соответствующий рис. 2) реализуется правильно.

Далее "включаем" перевод в новое внутренне состояние. Проверяем также правильность ввода входного сигнала x, формирование внутреннего состояния y и выходного вектора z. Вводим последовательность 0132 -рис. 4. Видим, что формируется 0xd, это клетка 0EH в таблице, изображенной на рис. 2. То есть, формируется двоичный вектор 1101 (содержимое клетки 0EH). Это означает, что автомат находится в состоянии 11 (y2(t+1)=1, y1(t+1)=1), при этом z2=0, z1=1. Таким образом, последовательность "распознана".

C:\Prcjectf\Prcjeci01\ ProjectC'l .ехе

V (8).0X0 1

х-1 Х = 0*1 Z (0)-0х4 у (8).0X4

х-3 Х=0Х7 г (4)=0хс у (8)=0хс

2

х-2

х=0хе z (7)=0xd у (8>-®хс

Рис. 4. Тестирование автомата на последовательности 0132

Тестирование на последовательности 02 приводит к получению z=0x2 (рис. 5).

C:\Projects\Project01\Project01.exe

Х-0Х0 у <8)=0Х0

г

х-2

Х- 0X2

z (1)-0х2 У (S)-0X0

Рис. 5. Тестирование автомата на последовательности 02

Это означает формирование /2=1, /1=0. То есть последовательность нарушена. Аналогично выявляется нарушение последовательности при подаче 010 (рис. 6.).

C:\ProjectsVProject01\Projtct01.exe

х = 0х@ у (S)=0X0 1

Х = 1 х = 9х1 I (0>=0Х4 у (8>-0х4

Х-ЭХ4 Г <2}=0х6 у ( S } = 0 Х4

Рис. 6. Тестирование автомата на последовательности 010

Получаем формирование z2=1, z1=0. При этом у2^+1)=0, y1(t+1)=1. Тестирование на последовательности 0131 (рис. 7).

х=0 x=0xß у (8)=0Х0 1

х-1

X=0Xl

г (0>-0х4 у {8).0X4

3

х=3 Х = 0Х7 I (Д)-0ХС

{S).0xc

Х = 1

x=0xd

г (5)=0хе у (8>=0хс

Рис. 7. Тестирование автомата на последовательности 0131

Получаем у2^+1)=1, у10+1)=Ь2=1, z1=0. Таким образом, автомат работает правильно на всех возможных последовательностях, если учитывать возможные изменения только одного бита. Аналогично можно убедиться в правильности реакции на остальные варианты последовательностей.

Выводы

Таким образом, разработана универсальная программа реализации конечного автомата методом ПЛМ на языке СИ. Для реализации нового автомата в общем случае необходимо изменить только массив констант. Проведено тестирование программы на примере реализации автомата-распознавателя последовательности (пин-кода). В представленной программной реализации в явном виде код не указан, что может в какой-то мере повысить информационную безопасность.

В дальнейшем целесообразно разработать программу подготовки массива констант по заданному высокоуровневому описанию автомата.

Список литературы

1.

2.

5.

6.

Кузнецов О.П. Дискретная математика для инженера. 3-е изд., перераб. и доп. СПб: Лань, 2005. 395 с.

Новиков Ф.А. Дискретная математика для программиста. СПб.: Питер, 2008. 501 с.

3. Б. Керниган, Д. Ритчи. Язык программиро-

вания C. URL:

https://nsu.ru/xmlui/bitstream/handle/nsu/905 8/kr.pdf?sequence=1&isAllowed=y (дата обращения: 09.08.19).

4. Лазарев В.Г., Пийль Е.И. Синтез управля-

ющих автоматов. 3-е изд., перераб. и доп. М.: Энергоатомиздат, 1989. 328 с. Gutman F. 8080 Routine Emulates PLA Hardware. EDN. 1979. Vol. 24, № 18. P. 8182.

Алексенко А.Г., Галицин А.А., Иванников А.Д. Проектирование радиоэлектронной аппаратуры на микропроцессорах: Программирование, типовые решения, методы отладки. М.: Радио и связь, 1984. 272 с. Тюрин С.Ф. Вычислительная техника и информационные технологии. Руководство к лабораторным работам в системе Proteus 7.2. Пермь: Изд-во Перм. гос. техн. ун-та, 2010. 135 с.

Тюрин С.Ф., Гончаровский О.В., Громов О.А. Вычислительная техника и информационные технологии. Аппаратные средства вычислительной техники: конспект лекций. Пермь: Изд-во Перм. гос. техн. ун-та, 2011. 324 с.

Кавалеров М.В. Методические материалы по программированию. URL: http://file.at.pstu.ru/materials/courses/pz/

7.

8.

9.

(дата обращения: 26.03.19).

Software implementation of the finite state machine in C

S. F. Tyurin

Perm National Research Polytechnic University; 29, Komsomolsky Av., Perm, 614990, Russia Perm State University; 15, Bukireva st., Perm, 614990, Russia tyurinsergfeo@yandex.ru; +7 952-320-02-510

O. V. Goncharovskij

Perm National Research Polytechnic University; 29, Komsomolsky Av., Perm, 614990, Russia 35911953@mail.ru; +7-919-45-91-258

A finite state machine is described by sets of input and output symbols and symbols of internal states. In addition, transition and output functions are set. The most "fast" implementation of these functions is performed in hardware. Therefore, for example, processor control devices are built based on the so-called programmable logic array (PLA). However, a "slow" software implementation is often necessary, for example, when recognizing code sequences ("pin"), checking the syntax of programs, etc. The article discusses the software implementation of the state machine by the C language using the PLA algorithm.

Keywords: Finite state machine; Transition function; Output function; C program.

i Надоели баннеры? Вы всегда можете отключить рекламу.