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

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

CC BY
1
1
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЦИФРОВАЯ СИСТЕМА / ГРАММАТИКА / СИСТЕМА БУЛЕВЫХ ФУНКЦИЙ / ЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Могнонов П.Б., Чимитов В.В.

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

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Могнонов П.Б., Чимитов В.В.

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

BUILDING OF A LOGIC DESIGN SYSTEM OF DIGITAL DEVICES USING THE APPARATUS OF FUNCTIONAL GRAMMARS

When producing complex, high-tech digital devices, computer engineering, automation and communication devices, it is becoming increasingly important to design and model digital systems. The problem of improving the efficiency of design tools for digital systems is topical. This article is devoted to the problem of constructing an automated system of logic design, intended to convert the given Boolean functions into a structural description of the combination circuit. The system is constructed in accordance with the model described by means of the apparatus of functional grammars. Using this apparatus, the system performs a multi-block sequential decomposition of Boolean functions on various elementary bases. The model is implemented in Haskell, which has a wide range of possibilities for working with grammatical structures and belongs to the functional family of languages.

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

П.Б. Могнонов, канд. техн. наук, доц., e-mail: pmognonov@mail.ru В.В. Чимитов, аспирант, e-mail: cvh1304@yandex.ru Восточно-Сибирский государственный университет технологий и управления, г. Улан-Удэ

УДК 519.714.5

ПОСТРОЕНИЕ СИСТЕМЫ ЛОГИЧЕСКОГО ПРОЕКТИРОВАНИЯ ЦИФРОВЫХ УСТРОЙСТВ С ИСПОЛЬЗОВАНИЕМ АППАРАТА ФУНКЦИОНАЛЬНЫХ ГРАММАТИК

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

Ключевые слова: цифровая система, грамматика, система булевых функций, логическое проектирование, Haskell.

P.B. Mognonov, Cand. Sc. Engineering, Assoc. Prof.

V.V. Chimitov, P.G.

BUILDING OF A LOGIC DESIGN SYSTEM OF DIGITAL DEVICES USING THE APPARATUS

OF FUNCTIONAL GRAMMARS

When producing complex, high-tech digital devices, computer engineering, automation and communication devices, it is becoming increasingly important to design and model digital systems. The problem of improving the efficiency of design tools for digital systems is topical. This article is devoted to the problem of constructing an automated system of logic design, intended to convert the given Boolean functions into a structural description of the combination circuit. The system is constructed in accordance with the model described by means of the apparatus of functional grammars. Using this apparatus, the system performs a multi-block sequential decomposition of Boolean functions on various elementary bases. The model is implemented in Haskell, which has a wide range of possibilities for working with grammatical structures and belongs to the functional family of languages.

Key words: digital system, grammar, system of Boolean functions, logic design, Haskell.

Введение

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

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

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

Теоретические положения

В работах [1, 2] вводится тезис, что любая предметно-ориентированная теория является полиморфной программой, написанной на специализированном естественном языке. Таким образом, проектная информация, представленная в виде системы булевых функций, может рассматриваться как предложение специализированного языка, а процесс логического проектирования - как процесс перевода из исходного языка в целевой.

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

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

В работе [3] дается определение класса функциональных грамматик, в основании которого лежит представление, что любой язык является определенным образом организованной конечной системой функций Ц, f2,...,1п, а всякое предложение языка может быть представлено в виде суперпозиции функций I■, г = 1, п.

Известно, что функциональная грамматика представляется множеством формальных грамматик следующего вида:

G = (Ут ,Ун, Р, F, £),

где Уг - конечное множество терминальных символов; Ун - конечное множество нетерминальных символов; ¥ - конечное множество функций вывода; Р - конечное множество правил вывода, множество упорядоченных пар следующего вида: А f}, А е Ут ^Ун, а - цепочка символов из Ут ^ Ун; I - функция / е ¥ ; £ - начальный символ £ е Ун .

Такая грамматика получается благодаря сопоставлению функции I каждому правилу контекстно-свободной грамматики следующего вида:

Go = (Ун Ут, Р, £),

где Ун - конечный алфавит нетерминальных символов; Ут - конечный алфавит терминальных символов; Р - конечное множество правил вида: А ^ <, где А е Ун,<е (Ун ^Ут); £ -начальный нетерминальный символ, £ е Ун .

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

Структура системы

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

Лексический анализатор осуществляет сканирование исходного описания, подаваемого на вход системе, разбивая его на последовательности символов. Для обеспечения возможности программного распознавания булевы операции будут обозначаться следующим образом: отрицание - ' ~ '; конъюнкция - '&'; дизъюнкция - ' |'.

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

f = a ■ Ь + c. (1)

На вход программы функция будет подаваться в следующем виде:

f = а & Ь+ ~ е .

Результат работы лексического анализатора будет следующий: [ИДЕНТ" f" РАВНО ИДЕНТ" а" КОНЪЮНКЦИЯ

ИДЕНТ" Ь" ДИЗЪЮНКЦИЯ ОТРИЦАНИЕ ИДЕНТ" с"]

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

Ж /2(/б('/) /з( /4( /б('а ) /б('Ь')), /5( /б('е'))))).

Графическое отображение дерева синтаксического разбора функции (1) представлено на рисунке.

Рисунок - Пример дерева синтаксического разбора и суперпозиции функций

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

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

Программная реализация

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

Создание лексического анализатора производится с помощью программы «alex», включенной в пакет Haskell Platform. Данная программа позволяет ускорить процесс реализации анализатора благодаря работе с высокоуровневыми шаблонами, на основании которых был сформирован детальный код.

Данные шаблоны, также называемые шаблонами лексем, будут определены в типе данных Symbol.

data Symbol =

SIdent String | SEqual | SLeftBracket | SRightBracket | SAnd | SOr | SNot | SSemiColon | SColon | SStdBasis String | SEOF deriving (Eq)

В представленном выше участке кода объявлены имена шаблонов, объединенных в тип Symbol: SIdent - шаблон для распознавания идентификаторов; SEqual - шаблон для распознавания знака равно; SLeftBracket, SRightBracket - шаблоны для распознавания открывающейся, закрывающейся скобки, соответственно; SAnd, SOr, SNot - шаблоны для распознавания символов конъюнкции, дизъюнкции, операции отрицания соответственно; SColon, SSemiColon -шаблоны распознавания символов двоеточия, точки с запятой соответственно; SStdBasis -шаблон распознавания последовательности символов, обозначающей базис элементов; SEOF - символ для обозначения конца входного потока. Зададим каждому шаблону соответствующую последовательность символов, используя регулярные выражения. $letter = [a-zA-Z] $digit = [0-9] tokens :-

$white+ ;

("ANDORNOT") { \(p,_,_,s) len -> return $ SStdBasis $ take len s }

("ANDNOT") { \(p,_,_,s) len -> return $ SStdBasis $ take len s }

("ORNOT") { \(p,_,_,s) len -> return $ SStdBasis $ take len s }

[$letter] [$letter $digit]* { \(p,_,_,s) len -> return $ SIdent $ take len s }

"=" { \(P,_,_,s) len -> return $ SEqual }

"(" { \(P,_,_,s) len -> return $ SLeftBracket }

")" { \(p,_,_,s) len -> return $ SRightBracket }

"&" { \(P,_,_,s) len -> return $ SAnd }

"I" { \(P,_,_,s) len -> return $ SOr }

"~" { \(P,_,_,s) len -> return $ SNot }

":" { \(P,_,_,s) len -> return $ SColon }

";" { \(P,_,_,s) len -> return $ SSemiColon }

Так, для шаблона SIdent составлено правило, которое распознает последовательность, состоящую из одной или нескольких идущих подряд букв и цифр. Такими последовательностями являются идентификаторы, например «outl», «inl», «line12» и т.п.

Следующим шагом является создание синтаксического анализатора. Для этого используется вспомогательная программа «happy», включенная в пакет Haskell Platform. Данное программное средство позволяет работать на более высоком уровне абстракции. Благодаря этому исчезает необходимость детальной проработки кода, достаточно описать на языке Haskell необходимую грамматику в форме Бэкуса-Наура.

Description:

stdbasis ':' FuncList FuncList: Func ';' FuncList

{ F2 $1 $3 } { F3 }

{ F1 $1 $3 }

| 'EOF' Func:

ident '=' Expr Expr:

{ F4 $1 $3 }

'~' Expr | Expr '|' Expr | Expr '&' Expr | '(' Expr ')'

{ F5 $2} { F6 $1 $3}

{ F7 $1 $3 } { $2 }

ident

{ F8 $1 }

В данном фрагменте кода видно, какими символами представлен алфавит символов V = VT : < Description > - описание устройства; < stdbasis > - базис элементов;

< FuncList > - список булевых функций; < Func > - булева функция; < Expr > - выражение булевой алгебры; < ident > - идентификатор.

Также определены правила Р грамматики G, где в фигурных скобках указана функция, соответствующая данному правилу:

Поскольку язык Haskell является строго типизированным, необходимо определить типы для каждого символа алфавита грамматики: data Description = F1 String FuncList

deriving (Show, Eq) data FuncList = F2 Func FuncList | F3

deriving (Show, Eq) data Func = F4 String Expr

deriving (Show, Eq) data Expr = F5 Expr | F6 Expr Expr| F7 Expr Expr | F8 String deriving (Show, Eq)

Таким образом, был реализован синтаксический анализатор на языке Haskell с помощью специализированных программ, входящих в Haskell Platform.

Следующим шагом будет построение генератора промежуточного кода. Генератор выполняет принятую с выхода синтаксического анализатора суперпозицию функций. Таким образом, генератор реализовывает все функции f грамматики G.

V

< Description >, < TaskList >, < Task >

< Expr >, < EOF >, < stdbasis >, < ident >

< Description >^< stdbasis > ':' < FuncList > {/1} < FuncList >^< Func > ';' < FuncList > {/2 }

< FuncList >^< EOF > {/3}

< Func >^< ident > ' = ' < Expr > {/4 }

< Expr >^ ' ~ ' < Expr > {/5 } < Expr >^< Expr > ' | ' Expr{ /б }

< Expr >^< Expr > &' < Expr > {/7}

< Expr >^ '(' < Expr > ') ' {e} < Expr >^< ident > {/ }

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

f = (конт t, текст x, функт y) конт : (M, X, Y)' basis': X & M, eval(Y);

f = (текстx,у)текст: (X,Y)X,Y; f = знач: void;

/4 = (конт t, текст x, функт y)конт : (M, X, текст Y)X : Y & M;

f5 = (конт t, текст x)знач : (M' basis':' ANDORNOTX)f0 (X) |

(M' basis':' ANDNOT', X)f0 (X) | (M ' basis':' ORNOTX)f0 (X) |

(M ' basis':' NAND', X)/40 (X, X)|(M ' basis':' NOR', X)/50(X, X); /б = (конт t, текст x, текст y)знач :

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

(M' basis':' ANDORNOT', X, Y) /20 (X, Y) | (M' basis':' ANDNOT', X, Y)f0 (f0 (f0 (X), f0 (Y))) | (M' basis':' ORNOT', X, Y) f20 (X, Y) | (M' basis':' NAND', X, Y)f40 (f40 (X, X), f40 (Y, Y)) |

(M' basis':' NOR', X, Yf0 (f0 (X, Y), f0 (X, Y)); f = (конт t, текст x, текст y)знач :

(M' basis':' ANDORNOT', X, Y) f0 (X, Y) | (M' basis':' ANDNOT', X, Y)f0 (X, Y) | (M^basis': 'ORNOT', X, Y)/1°(/2°(/10(X), /0(Y))) | (M' basis':' NAND', X, Y)f0 (f0 (X, Y), f0 (X, Y)) |

(M^basis': 'NOR',X,YX/^/V,X),f0(Y, Y)); f8 = (текст x)текст: (X) X;

Функция fi производит запись в память M значение базиса элементов Х, а затем производит вычисление суперпозиции функций Y . Память описывается грамматикой:

M ^ БП &M | е;БП ^ X :< знач > &БП | г;

Функция /2 производит разбиение системы булевых функций. Функция f является пустой, она необходима для обработки символа конца потока данных. Ниже представлен программный код функций /1, /2, f :

fl :: Memory -> Description -> Either String Memory

fl mem (Fl basis list) = do

result <- setBasis mem basis

f2 :: Memory -> FuncList -> Either String Memory

f2 mem (F2 x xs) = do

mem' <- f4 mem x

f2 mem' xs

f2 mem F3 = return mem

Функция /4 реализует запись каждой булевой функции в память. На языке Haskell функция будет выглядеть следующим образом:

f4 :: Memory -> Func -> Either String Context f4 mem (F4 name expr) = do

val <- evalExprFunc mem expr

return $ Memory { impl = insert name val $ impl ctx }

Функции f5, fß,f предназначены для обработки булевых операций. Ниже представлена реализация функции f на языке Haskell:

evalExprFunc :: Memory -> Expr -> Either String String evalExprFunc mem ( F5 expr ) = do b <- getBasis mem x <- evalExprFunc mem expr f5 b x

f5 basis x = do return $ case basis of "ANDORNOT" -> f0_1 x "ANDNOT" -> f0_1 x "ORNOT" -> f0_1 x "NAND" -> f0_4 x x "NOR" -> f0_5 x x

Так же реализованы базисные функции f, в данном случае выполняющие составление

описания базисного элемента:

f0_1 x = "NOT ( " ++ x ++ " )" f0_2 x y = "OR ( " ++ x ++ " , " ++ y ++ " )" f0_3 x y = "AND ( " ++ x ++ " , " ++ y ++ " )" f0_4 x y = "NAND ( " ++ x ++ " , " ++ y ++ " )" f0_5 x y = "NOR ( " ++ x ++ " , " ++ y ++ " )"

На данном этапе программа выводит промежуточное описание схемы устройства в текстовом виде. В качестве примера подадим на вход следующие данные:

ORNOT : P =~ a & ~ b& ~ с a & b & с;

В качестве результата получим:

P = " OR ( NOT ( OR ( NOT ( NOT ( OR ( NOT ( NOT ( a ) ) , NOT ( NOT ( b ) ) ) ) ) , NOT ( NOT ( с ) ) ) ) , NOT ( OR ( NOT ( NOT ( OR ( NOT ( NOT ( a ) ) , NOT ( b ) ) ) ) , NOT ( с ) ) ) )" basis = " ORNOT"

Заключение

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

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

Библиография

1. Кравченко В.А., Могнонов П.Б., Чимитов Д.Н. Представление знаний в функциональных грамматиках // Вестник СибГАУ. - 2011. - № 5 (38). - С. 55-61.

2. Кравченко В.А., Ширапов Д.Ш. Построение баз знаний для решения задач методом функциональных грамматик // Вестник БГУ. - 2015. - № 9. - С. 96-102.

3. Тузов В.А. Математическая модель языка. - Л.: Изд-во Ленингр. ун-та, 1984. - 176 с.

Bibliography

1. Kravchenko V.A., Mognonov P.B., Chimitov D.N. Knowledge representation in functional grammars // Bulletin of SibSAU. - 2011. - N 5 (38). - P. 55-61.

2. Kravchenko V.A., Shirapov D.Sh. Creation of knowledge bases for solving problems using the method of functional grammars // Vestnik of BSU. - 2015. - N 9. - P. 96-102.

3. Tuzov V.A. The mathematical model of language. - L.: Leningrad University publ., 1984. - 176 p.

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