Министерство образования Российской Федерации
Томский политехнический университет
Факультет автоматики и вычислительной техники
Кафедра ВТ
РЕФЕРАТ
по дисциплине "Теория автоматов"на тему:
" Микропрограммирование операций ЭВМ "
Выполнила студентка Погребная М.В.
Руководитель Триханов А.В.
Томск 2008
Оглавление
Современные персональные компьютеры работают по принципу микропрограммного управления и к настоящему времени большинство операций над дискретными объектами уже алгоритмизированы (с использованием языка микропрограммирования).
Данный реферат посвящен основам языка микропрограммирования (Ф-языка) и языка описания цифровой аппаратуры VHDL, средства которых используются при алгоритмизации и микропрограммировании операций над дискретными объектами. Приведенные средства описания цифровых автоматов (ГСА, матричные схемы алгоритмов (МСА), системы формул переходов (СФП)), к средствам Ф-языка не относятся, однако рассмотрение микропрограммирования сопровождается использованием указанных способов описания алгоритмов.
В соответствие с принципом микропрограммного управления каждая операция (действие) разбивается на элементарные действия (микрооперации). К таким микрооперациям относятся инверсия, конъюнкция, дизъюнкция, передачи и др.
Для преобразования информации в компьютере предназначено устройство обработки цифровой информации, в настоящее время его принято называть процессором.
В.М.Глушков [1] предложил его изображать так, как показано на рис.1. Как видно, процессор включает в себя операционный (ОА) и управляющий (УА) автоматы.
D R
Y Х
F
Рис.1. Структурная схема процессора по В.М.Глушкову
ОА предназначен для преобразования операндов D в результат R. Этот автомат работает под действием управляющих сигналов, множество которых обозначено через Y.
УА предназначен для формирования подмножеств управляющих сигналов для операций Fi, множество которых обозначено через F. Указанные подмножества управляющих сигналов формируются на основе кодов операций Fi и осведомительных сигналов, множество которых обозначено через X.
Осведомительные сигналы характеризуют получаемые результаты с качественной стороны. Любое действие в компьютере выполняется на основе функциональной микропрограммы, которая представляет собой программу, составленную в терминах микроопераций и осведомительных сигналов.
Таким образом, принцип микропрограммного управления можно сформулировать следующим образом:
любое действие делится на совокупность элементарных действий (микроопераций);
ни одно действие не является элементарным;
для изменения порядка следования микроопераций вводятся осведомительные сигналы;
для каждого действия составляется микропрограмма в терминах микроопераций (МО) и осведомительных сигналов.
Микропрограммы всех операций хранятся в специальном (управляющем) запоминающем устройстве.
1. Язык микропрограммирования (Ф-язык)
Для составления микропрограмм используется какой-либо язык микропрограммирования, в учебном процессе вузов нашел наибольшее применение язык микропрограммирования, предложенный Г.И.Новиковым [2]. Этот язык называется Ф-языком в соответствие с тем, что он предназначен для описания работы функционирования схем, выполняющих операции по преобразованию дискретных объектов. Для составления программ решения математических, физических, экономических и других задач его применять нецелесообразно из-за элементарности его действий.
Особенностями Ф-языка являются двоичный характер операндов, результатов и наличие средств описания работы типовых узлов (регистров, счетчиков, сумматоров и др.) и памяти.
Ф-язык включает в свой состав разнообразные, как сейчас принято говорить, конструкции. Все они делятся на элементарные конструкции, конструкции средней сложности и сложные конструкции.
К элементарным конструкциям относятся константы, слова, массивы и поля.
Как в любом современном языке, в Ф-языке имеется возможность работы со словами переменной длины. Микрооперации и двоичные выражения составляют группу конструкций средней сложности. Наконец, сложными конструкциями являются функциональные микропрограммы (ФМП).
Выше было указано, что к элементарным конструкциям относятся константы, слова, массивы и поля.
Константы в Ф-языке используются в качестве сомножителей, слагаемых, составных частей слов, параметров сдвига. Константа является базовой единицей языка.
Константы задаются в двоичной системе как положительные числа; допускается задавать константу в десятичной и восьмеричной системах счисления. В этих случаях правее значения константы приписывается строчная буква Д или В.
Пусть, например, требуется константа со значением 1010, в восьмеричной системе счисления это будет соответствовать записи 12В, в десятичной - 10Д.
Слово является основной информационной единицей языка, оно представляет собой упорядоченное сочетание двоичных разрядов. Слово вводится в употребление своим описанием, которое начинается с имени. После имени в круглых скобках указываются номера разрядов. Левый (старший) разряд обычно имеет номер 1. Между номерами разрядов ставится разделитель типа «:». Имя должно начинаться с прописной буквы латинского или русского алфавитов.
Например, записи А(1:32), В1(1:16) вводят в употребление 32-разрядное слово А и 16-разрядное слово В1.
Если в скобках будет стоять только один номер, то это будет соответствовать разряду с используемым номером. Например, записи А(1), В1(16) вводят в употребление 1-ый разряд слова А и 16-ый разряд слова В1.
Массив представляет собой упорядоченную совокупность слов равной длины, имеющих одинаковый смысл.
Массив вводится в употребление своим описанием, которое начинается также с имени, далее следуют квадратные скобки с номерами крайних слов и круглые скобки с номерами разрядов слов.
Например, запись ЗУ[1:1024](1:37) вводит в употребление массив из 1024 37-разрядных слов. Очевидно, что речь идет о запоминающем устройстве.
Поле является каким - либо “срезом” массива. Например, полем кодов операций команд, хранящихся в памяти компьютера будет, видимо, “срез” ЗУ[1:1024](1:7).
Как замечено выше, микрооперации и двоичные выражения составляют группу конструкций средней сложности.
В Ф-языке используется десять типов микроопераций. К первому типу
относится микрооперация установки, она предназначена для задания начального значения слову, части слова, отдельному разряду.
Структура этой и всех других операций включает в себя три части: левую (ЛЧ), среднюю и правую (ПЧ) части. Структуру можно показать следующим образом:
ЛЧ : = ПЧ.
Средняя часть является знаком присваивания, левая часть есть та информационная единица (слово, фрагмент слова, отдельный разряд), которой и надлежит присвоить первоначальное значение.
Естественно, что правая часть должна представлять собой какую-либо константу.
Особенностью рассматриваемой операции является то, что правая часть есть константа.
Например, записи
А(1: 3):=000,
В1(1:32):=10101010101010101010101010101010,
В(5):=1
являются выражениями микроопераций установки в 1, 2 и 3 разрядах слова А нулевых значений, во всех разрядах слова В1 значения 1010…1010, в 5-м разряде слова В единичного значения.
Если установка касается какого-либо типового узла с памятью, то нулевая константа в правой части означает обнуление или "сброс" содержимого узла.
Не следует путать запись микрооперации с записью того, что слово, часть слова, разряд слова имеют конкретное значение.
Например, запись А (1:3) = 101 не является микрооперацией, она означает, что у первых трех разрядов слова А имеется значение 101.
На первоначальных этапах освоения микроопераций следует отражать первоначальное значение (до выполнения микрооперации) и значение после выполнения микрооперации. Применительно к слову А выполнение микрооперации установки можно отразить следующим образом:
до: А (1:3) = 101, после: А (1:3) = 000.
Ко второму типу относится микрооперация передачи, особенностью этой микрооперации является то, что и правая часть есть слово. Данная микрооперация обеспечивает замену значения левого слова на значение правого слова.
Левое и правое слова могут иметь разные длины (nl ,np), через nl ,np обозначены количества разрядов в левом и правом словах соответственно.
Возможны три случая отношения между nl, np :
nl = np,
nl < np,
3) nl > np.
В первом случае проблем по согласованию длин нет, значение правого слова оказывается в левом слове.
Во втором случае у правого слова имеются лишние разряды, требуется
отбрасывание определенных разрядов правого слова, в Ф-языке установлено, что отбрасывать нужно с левой стороны.
Пусть, например, имеются микрооперация А(1:3):= В(1:6), а также А(1:3) = 110, В(1:6) = 101001, тогда после выполнения данной микрооперации будет А(1:3) = 001. Значение 101 в старших разрядах слова В отброшено.
В третьем случае у левого слова имеются лишние разряды, требуется доопределить лишние разряды указанного слова. Доопределяются левые лишние разряды нулями.
Пусть, например, имеются микрооперация В(1:6):= А(1:3), а также А(1:3) = 110, В(1:6) = 101001, тогда после выполнения данной микрооперации будет В(1:6) = 000110. Видно, что левые три разряда левого слова имеют значение 0.
Микрооперация передачи описывает работу цепей связи между узлами компьютера.
Микрооперация третьего типа - это микрооперация инверсии, особенностью этой микрооперации является то, что в обеих частях используется одно и тоже слово. Данная микрооперация обеспечивает замену значения левого слова на инверсное значение этого слова.
При рассматриваемой микрооперации проблем по согласованию длин нет.
Пусть, например, имеются микрооперация В (1:6):= В (1:6), кстати, при записи микрооперации инверсии необязательно указывать разряды слова. Также пусть В (1:6) = 101001, тогда после выполнения данной микрооперации будет В (1:6) = 010110. Видно, что все первоначальные значения разрядов слова В приняли инверсные значения.
Важность использования данной микрооперации очевидна, без нее не обойтись при получении машинных кодов, машинной реализации операций над двоичными числами.
К четвертому типу микроопераций относится группа микроопераций, включающая в себя конъюнкцию и дизъюнкцию. Данные микрооперации требуют одинаковой длины всех слов, задействованных в микрооперациях.
Пусть, например, имеются микрооперации
С(1:6):= А(1:6) / В (1:6),
D(1:6):= А(1:6) / В(1:6)
и А = 100110, В = 000111, С = 010101, D = 101010, тогда после выполнения данных микроопераций будет C(1:6) = 000110, D = 100111.
Поскольку в компьютерах арифметические операции выполняются на основе логических микроопераций, то важность использования рассматриваемых микроопераций очевидна, без них практически ничего реализовать не удается.
Микрооперация пятого типа - микрооперация составления, она предназначена для формирования так называемого составного слова на основе других слов, их фрагментов и констант.
Например, результирующее слово, соответствующее результату любой операции с "плавающей" точкой, как раз и получается на основе составления слова из слов, представляющих мантиссу и порядок.
Знаком микрооперации составления является знак ".".
Очевидно, что при составлении возникает проблема согласования длин левой и правой частей микрооперации. Разрешается она точно также, как и при передачах.
Пусть, например, имеются микрооперации
С(1:6):= А(1:3) . В (1:3),
D(1:6):= А(1:3) . Е(1:4),
F(1:8):= B(1:3) . A(1:3),
G(1:5):= А(1:3) . 010,
и А = 100, В = 011, E = 1101, С = 010101, D = 101010, F =00110011, G = 10001, тогда после выполнения данных микроопераций будет C(1:6) = 100011, D = 001101, F = 00011100 и G = 00010.
К шестому типу относятся группа микроопераций счета, они описывают работу счетчиков прямого и обратного счета. При прямом счете содержимое счетчика увеличивается на единицу, а при обратном - уменьшается на единицу.
Особенностью этой микрооперации является то, что в обеих частях используется одно и тоже слово. Обычно его имя начинается с ключевого слова СТ. Кроме того, в правой части применяется константа, равная 1.
Никаких проблем при счете не возникает, так как счетчик прямого счета после достижения максимального значения и подачи единицы переходит в нулевое состояние, а счетчик обратного счета при достижении нулевого состояния и подачи единицы - в максимальное состояние.
Пусть, например, имеются микрооперации
СТА(1 : 6):= СТА(1 : 6) + 1,
СТВ(1 : 6):= СТВ(1 : 6) - 1
и СТА = 100100, СТВ = 011011, тогда после выполнения данных микроопераций будет CТА(1 : 6) = 100101, СТВ = 011010.
Особой необходимости при микрооперации счета указывать длину слова нет.
Седьмую группу микроопераций составляют микрооперации сдвигов. Особенностью этих микроопераций является то, что в обеих частях используется одно и тоже слово.
Сдвиги делятся на логические и арифметические.
Логический сдвиг выполняется над логической комбинацией, в которой нет знака. Значения всех разрядов комбинации перемещаются вправо либо влево на указанное количество разрядов. "Выталкиваемые" разряды теряются, а оказавшиеся свободными разряды доопределяются. При отсутствии особых указаний доопределение осуществляется нулями. Возможен так называемый циклический сдвиг, когда "выталкиваемые" значения разрядов фиксируются в освобождающихся разрядах.
При арифметическом сдвиге знак остается на своем месте, перемещаются значения только значащих разрядов.
Вид сдвига оформляется нужной записью микрооперации.
Ключевое слово R(k) соответствует сдвигу вправо на k разрядов, ключевое слово L(k) - сдвигу влево на k разрядов.
Пусть, например, имеются микрооперации
А(1 : 6):= R(2)А(1 : 6),
В(1 : 6):= L(2)В(1 : 6)
и А = 100101, В = 011011, тогда после выполнения данных микроопераций сдвига на два разряда слова А вправо и слова В влево будет А(1 : 6) = 001001, В = 101100. Видно, что освобождающиеся разряды доопределены нулями.
Циклический сдвиг дополнительно оформляется на основе составления, "выталкиваемые" разряды слева добавляются справа, а "выталкиваемые" разряды справа добавляются слева.
Выше рассмотренные примеры сдвигов слов А и В при циклических сдвигах будут записаны следующим образом:
А(1 : 6):= А(5 : 6). (R(2)А(1 : 6)),
В(1 : 6):= (L(2)В(1 : 6)).В(1 : 2).
Пусть, как и прежде А = 100101, В = 011011, тогда после выполнения микроопераций циклического сдвига будет А(1 : 6) = 011001, В = 101101. Видно, что освобождающиеся разряды доопределены значениями "вытолкнутых " разрядов.
Арифметические сдвиги имеют определенные особенности в зависимости от применяемых специальных машинных кодов. При сдвиге вправо свободные разряды слева доопределяются значениями знакового разряда независимо от применяемого кода, при сдвиге влево - нулями для дополнительного кода и значениями знакового разряда для обратного кода. Это рассматривается в курсе "Дискретная математика".
Например, арифметический сдвиг слова С(1 : 8) = 10011001 вправо на 3 разряда в любом коде должен быть записан так:
С(1 : 8):= С(1). С(1). С(1). С(1). (R(3)С(2 : 8)).
Видно, что знак у слова является отрицательным. После сдвига слова С будет С = 11110011.
При сдвиге влево на один разряд для обратного кода микрооперация будет иметь вид:
С(1 : 8):= С(1).((L(1)С(3 : 8)).С(1)).
Если как и прежде С = 10011001, то после сдвига будет С = 10110011.
При сдвиге влево на один разряд для дополнительного кода микрооперация будет иметь вид:
С(1 : 8):= С(1).((L(1)С(3 : 8)).0).
В дополнительном коде С = 10011010 (имеется лишняя единица для младшего разряда), тогда после указанного сдвига будет С =10110100. Видно, что дополнительный код отличается от обратного кода лишней единицей для младшего разряда.
К восьмому типу микроопераций относится микрооперация сравнения (на самом деле эта микрооперация является микрооперацией несравнения). В отличие от всех предыдущих микроопераций она имеет два вида результата.
Первый из них представляет собой сложение по модулю два исходных слов. Поскольку микрооперация сравнения - логическая микрооперация, то длины слов должны быть одинаковыми. Если хотя бы в одном разряде получится единица, то тогда это будет означать несравнение слов, в противном случае исходные слова совпадают.
Пусть, например, имеется микрооперация
С(1:6):= А(1:6) В (1:6)
и А = 100110, В = 000111, С= 010101, тогда после выполнения данной микрооперации будет C(1:6) = 100001, это говорит о несравнении слов А и В.
Если будет А = 100110, В = 100110, С= 010101, тогда после выполнения
данной микрооперации будет C(1:6) = 000000, что говорит о сравнении слов А и В.
Второй вид результата является однобитовым, он представляет собой логическую сумму разрядов результата первого вида. Ясно, что при нулевом результате первого вида однобитовый результат также будет равен 0, в противном случае - 1.
Для ранее получающегося результата C(1:6) = 100001 однобитовый результат С(1) = 1 (не путать с первым разрядом слова С), а для - результата C(1:6) = 000000 однобитовый результат С(1) = 0.
Девятый тип микроопераций составляет группу микроопераций сложения (сложения, вычитания и циклического сложения).
Микрооперации данной группы предназначены для описания работы сумматора при сложении, вычитании и циклическом сложении.
Последняя микрооперация требует равенства исходных слов. Единица переноса из старшего разряда передается для сложения в младший разряд. Вне Ф-языка такая микрооперация называется операцией контрольного сложения. Для контроля правильности записи и считывания слов файла применительно к дискам все слова складываются по правилу контрольного сложения, получающаяся контрольная сумма добавляется в конце файла. При считывании снова подсчитывается контрольная сумма, которая сравнивается с имеющейся такой суммой в конце файла. Если суммы совпадают, то ошибок при считывании нет, в противном случае считывание повторяется установленное число раз до совпадения сумм.
Пусть, например, имеется микрооперация
G(1:6):= А(1:6) + В(1:6)
и А = 100110, В = 100111, G= 010101, тогда после выполнения данной микро-операции будет G(1:6) = 001110.
Для первых двух микроопераций левое слово должно иметь лишний разряд по сравнению с наиболее длинным словом правой части.
В Ф-языке принято применять дополнительные коды для сложения и вычитания.
При получении кода слова слева у слова добавляется знаковый разряд, коды выравниваются по длине за счет доопределения значениями знаковых разрядов.
Пусть, например, имеются микрооперации
С(1:7):= А(1:6) + В (1:6),
D(1:7):= А(1:6) - В(1:6),
E(1:7):= В(1:6) - А(1:6)
и А = 100110, В = 100111, С= 010101, D= 101010, E= 1010101, тогда после выполнения данных микроопераций будет C(1:7) = 1001101, D(1:7) = 1111111, E(1:7)= 0000001.
Наконец, к десятой группе относятся так называемые комбинированные микрооперации. В правой части таких микроопераций разрешается иметь две, три обычные микрооперации.
Например, получение обратного кода отрицательного слова В описывается именно комбинированной микрооперацией:
В (1:6):= В(1). В (2:6),
Видно, что знаковый разряд слова остается без изменения, а значащая часть проинвертирована.
Нетрудно заметить, что выше уже имелись комбинированные микрооперации.
В Ф-языке имеются двоичные выражения, которые относятся к конструкциям средней сложности.
Двоичные выражения отличаются от микроопераций тем, что в правой части у них задействовано более трех микроопераций и могут использоваться так называемые условные выражения, основанные чаще всего на проверке отношений.
Двоичные выражения делятся на двоичные простые (неусловные) и двоичные условные выражения. Из последующего будет ясно, что двоичные условные выражения не следует отождествлять с чисто условными выражениями.
Двоичное простое выражение имеет такую же структуру, что и микрооперация. Обычно правая часть данного выражения является словом, которому надлежит передать значение, полученное при вычислении правой части. В последней задаются микрооперации, количество которых должно быть больше трех.
Применительно к двоичным простым выражениям установлена очередность выполнения микроопераций, в определенной степени совпадающая с очередностью выполнения логических операций:
инверсия,
составление,
логическое умножение,
логическое сложение,
сложение по модулю два,
микрооперации группы сложения.
Естественно, что при наличии скобок вычисления должны вначале выполняться в них.
Что касается микроопераций группы сложения, то надо иметь в виду их однотипность. Подобные микрооперации (в других алгебрах операций) должны выполняться в той последовательности, в которой они записываются в выражениях.
Запомнить указанную очередность нелегко, этому может помочь искусственное ключевое слово, составленное из начальных букв микроопераций, ИСУС2С.
Из очередности видно, что в двоичное простое выражение можно включать не все микрооперации. Запрещается включать микрооперации передачи, счета, сравнения и сдвига.
В качестве примера двоичного простого выражения рассматривается следующее выражение:
А := В.С ) + D.Е / F / F1 - G H + D.
Для В =11, С = 1101, D = 01, E = 1001, F = 111001, F1 = 010101, G = 110, H = 101, А = 010000 будет новое А = 010001.
Первой выполняется инверсия, получается С = 0010. Далее имеется две микрооперации составления, получаются значения 110010 и 011001.
Конъюнкция дает значение 011001, дизъюнкция - 011101, сложение по модулю два - 011.
Остались микрооперации группы сложения. Первой должна выполняться микрооперация циклического сложения. Она дает значение 010000.
Вычитание характеризуется значением 001101. Наконец, сложение приводит к значению 001110.
Следовательно, после вычисления микроопераций правой части указанного двоичного простого выражения и передачи его слову правой части получится А = 001110.
Рекомендуется под выражением с помощью фигурных скобок, развернутых острой частью вниз и размещаемых сверху вниз на разных уровнях, записывать получающиеся значения результатов микроопераций.
Для рассматриваемого примера это будет выглядеть следующим образом:
А := В.С D.Е / F / F1 - G H + D.
Значение последней микрооперации и есть значение слова левой части.
Если выполнять микрооперации в сторонке и записывать значения в виде столбика, то практика показывает, что почти всегда допускаются неверные результаты каких либо микроопераций из-за ошибок списывания предыдущих результатов и др.
Правая часть двоичных условных выражений включает в свой состав несколько двоичных простых выражений. Расчеты производятся по одному из них в зависимости от значения логического выражения.
При двух простых выражениях V1, V2 и логическом выражении B структура двоичного условного выражения для слова V имеет следующий вид:
V:= ЕСЛИ В ТО V1 ИНАЧЕ V2.
Расчеты производятся по выражению V1 при В = 1 и по выражению V2 при В = 0.
В качестве выражения V2 может использоваться двоичное условное выражение. Тогда будет три варианта расчетов.
Что касается условного выражения В, то оно похоже на двоичное простое выражение. Однако при вычислении оно может быть равно 0 или 1. Это достигается за счет включения отношений, в том числе равенства. В отличие от простого выражения дополнительно не разрешается использовать микрооперации группы сложения и составления.
Для условного выражения установлена следующая очередность выполнения отношений и микроопераций:
отношение за исключением равенства
инверсия,
логическое умножение,
логическое сложение,
сложение по модулю два,
равенство.
Естественно, что при наличии скобок вычисления должны вначале выполняться в них.
Запомнить указанную очередность также нелегко, этому может помочь искусственное ключевое слово, составленное из начальных букв отношений и микроопераций, ОИУС2Р.
В качестве примера двоичного условного выражения рассматривается следующее выражение:
В := D / Е / F = G > H I.
Для В =1, D = 0101, E = 1100, F = 0110, G = 0101, H = 111, I = 1 будет новое B = 0.
Следовательно, расчеты требуется проводить по выражению V2.
При расчетах условного выражения первой выполняется проверка отношения ">", результату проверки присваивается значение 0, так как отношение неверно.
Второй по очереди выполняется микрооперация инверсии, получается значение 1010.
Третьей реализуется микрооперация конъюнкции, имеет место значение 1000.
Четвертая очередь касается микрооперации дизъюнкции, она дает значение 1110.
Пятой выполняется микрооперация сложения по модулю два, получается значение 1.
Наконец, последняя проверка равенства дает В = 0. Следовательно, расчеты требуется проводить по выражению V2.
После вычисления микроопераций правой части указанного двоичного простого выражения (пусть V2 = А) и передачи его слову правой части получится А = 001110.
Рекомендуется под выражением с помощью фигурных скобок, развернутых острой частью вниз и размещаемых сверху вниз на разных уровнях, записывать получающиеся значения результатов микроопераций, отношений.
Для рассматриваемого примера это будет выглядеть следующим образом:
В:= D / Е / F = G > H I.
Значение последней проверки (проверки равенства) и есть значение слова В левой части.
Если выполнять проверки отношений и микрооперации в сторонке и записывать значения в виде столбика, то эта практика также показывает, что почти всегда допускаются неверные результаты каких, либо микроопераций из-за ошибок списывания предыдущих результатов и др.
Сложными конструкциями Ф-языка являются функциональные микропрограммы (ФМП). Их рассмотрение не обходится без использования схем алгоритмов (СА), графических схем алгоритма (ГСА), матричных схем алгоритма (МСА), систем формул перехода (СФП), которые к средствам Ф-языка не относятся и СА, ГСА, МСА, ФМП и СФП подробно описаны в [3].
Графическая схема алгоритма или граф-схема алгоритма является аналогом схемы алгоритма, отличается от последней большей формализацией, несколько другим изображением блоков начала и конца.
Поскольку ГСА предложена для алгоритмов операций ЭВМ, то в ней нет средств для отражения ввода-вывода.
Вместо блоков в ГСА используются вершины: начальные Y0 , конечные Yк, операторные вершины Y1,Y2, … , условные вершины X1,X2, … .На рис.2 показана СА классического алгоритма нахождения наибольшего общего делителя (ННОД),
где: А и С - исходные числа,
НОД - наибольший общий делитель.
Видно, что заданные числа при А<С меняются местами (блоки 57). Поскольку после этого получается А >С, то число А заменяется на значение
А - С. Подобные циклы повторяются до получения А= С (блоки 38), число А и будет требуемым результатом (блок 9).
Имеются отличия применительно к условным вершинам. Прежде всего,
условие (чаще всего отношение) записывается в закодированном виде.
Если оно выполняется, то результату присваивается единичное значение, в противном случае - нулевое значение. С учетом этого выходы вершины отмечаются указанными значениями вместо “да” и “нет”.
Содержательная и закодированная граф-схемы алгоритмов представлены на рис. 2 и 3 соответственно, коды микроопераций уi, микрокоманд Yi и условий XI - в табл.1.
1
2
8
3
=
9
4 >
10
5 >
11
6
7
Рис. 2. СА ННОД чисел A и С
Условия корректности ГСА похожи на условия корректности схемы алгоритма [4]:
у ГСА должна быть одна начальная и одна конечная вершины;
каждый выход соединен только с одним входом операторных вершин;
каждый вход соединен, по крайней мере, с одним выходом;
выходы условных вершин помечаются с помощью цифр “0” и “1”;
из начальной вершины должен быть путь к любой вершине;
из любой вершины должен быть путь в конечную вершину;
для любых наборов логических условий должен быть путь из начальной вершины в конечную вершину.
Матричная схема алгоритма представляет собой квадратную матрицу,
строки которой соответствуют вершинам с выходами, столбцы - вершинам с входами. На пересечениях строк и столбцов записываются функции перехода. Такая функция представляет собой конъюнкцию кодов логических условий (логических переменных), переменная пишется без инверсии, если выход осуществляется по 1, в противном случае переменная пишется с инверсией. Функция перехода, равная 1, соответствует безусловному переходу.
Для указанного выше алгоритма МСА (МСА ННОД) представлена в табл.2
Таблица 1
Коды микроопераций, микрокоманд и условий
Коды |
Микрооперация, условие |
Коды |
Микро- операция, условие |
|||
микро- операции, условия |
микро- команды |
микро- операции, условия |
микро- команды |
|||
y1 y2 y3 |
Y1 Y2 Y3 |
НОД:=А А:=С С:=НОД |
y4 X1 X2 |
Y4 |
A:=A-C A=C A>C |
|
Таблица 2
МСА ННОД |
Y1 |
Y2 |
Y3 |
Y4 |
Y5 |
YK |
|
Y0, 4 |
__ __ Х1Х2 |
__ Х1Х2 |
Х1 |
||||
Y1 |
1 |
||||||
Y2 |
1 |
||||||
Y3 |
1 |
||||||
Y5 |
1 |
||||||
Y3
Y0
1 1 Y4
0 0
Y5
1 1
0 0
Y1 YK
Y2
Для МСА можно сформировать условия корректности:
в МСА не должно быть строки Yk;
в МСА не должно быть столбца Y0;
должны быть столбец Yk и строка Y0;
не должно быть пустых строк и столбцов;
на строке не должно быть одинаковых функций перехода;
на строке не должно быть сочетаний 1 и функций перехода через логические переменные;
в столбце могут быть одинаковые функции перехода;
на строке может быть только одна 1;
дизъюнкция всех функций переходов на строке должна быть равна единице;
10) разные строки с одинаковыми функциями переходов разрешается оформлять в одной строке с указанием всех индексов вершин старта.
По МСА можно упрощать алгоритмы и, следовательно, автоматы.
Все переходы, соответствующие строке МСА, можно отразить в формуле переходов. Формул будет столько, сколько имеется строк в МСА. Получается система формул перехода (СФП).
Каждая формула переходов начинается с вершины, из которой рассматриваются переходы, в правой части формулы пишется дизъюнкция логических произведений вершин захода с соответствующими функциями перехода.
Между левой и правой частями формулы ставиться стрелка , которая отражает переходы от вершины левой части к одной из вершин правой части.
Переход совершается к той вершине, соответствующая функция перехода которой становится равной единице.
Для рассматриваемого алгоритма СФП включает в себя:
Y0,4 Х1Х2Y1+Х1Х2Y4+Х1Y5;
Y1 Y2;
Y2 Y3;
Y3 Y4;
Y5 YK.
Применительно к СФП можно сформулировать условия корректности:
не должно быть формулы перехода для Yк;
в правой части любой формулы не должно быть вершины Y0;
логическая сумма всех функций перехода любой формулы должна быть равна единице;
конъюнкция любой пары функций перехода формулы должна быть равна нулю;
в формуле не может быть одинаковых функций перехода;
у данной операторной вершины формул переходов может быть одинаковая функция перехода.
СФП позволяет производить формальные преобразования, упрощать алгоритм, следовательно, и автомат.
Функциональная микропрограмма операции представляет собой программу в терминах микроопераций и осведомительных сигналов.
Применительно к Ф - языку [1] ФМП имеет следующую структуру:
заголовок с ключевым словом “АЛГОРИТМ”;
совокупность описаний с ключевыми словами “ВХОДНЫЕ”, ”ВНУТРЕННИЕ”, ”ВЫХОДНЫЕ”;
НАЧАЛО;
тело;
окончание с ключевым словом “КОНЕЦ”.
ФМП алгоритма ННОД можно представить в следующем виде:
АЛГОРИТМ ННОД;
ВХОДНЫЕ А(1:32),С(1:32);
ВНУТРЕННИЕ: А(1:32),С(1:32),НОД(1:32);
ВЫХОДНЫЕ: НОД(1:32);
НАЧАЛО
М3: ПЕРЕЙТИ ЕСЛИ Х1 ТО М1;
ПЕРЕЙТИ ЕСЛИ Х2 ТО М2;
Y1;
Y2;
Y3;
М2: Y4;
ПЕРЕЙТИ М3;
М1: Y5;
КОНЕЦ.
Для ФМП существуют и условия корректности:
должен быть заголовок;
данной меткой может быть помечен только один оператор (одна строка);
в операторах перехода могут использоваться одинаковые метки;
строка после оператора безусловного перехода должна иметь метку;
на строке может быть записана только одна микрокоманда или один оператор перехода.
С начала 70-х годов стала актуальной проблема создания стандартного средства документации схем и алгоритмов цифровой аппаратуры (ЦА), одинаково пригодного как для восприятия человеком, так и для обработки в ЭВМ.
Этим средством явился язык VHDL [5,6,7]. Он был разработан в рамках программы создания суперскоростных интегральных схем (VHSIC) в 1970-х -1980-х годах.
Первоначально язык разрабатывался в качестве стандарта для обеспечения возможности передачи документации, описывающей сложную систему, разработанную одним подрядчиком другим подрядчикам. Этот язык был также предназначен для использования в качестве языка моделирования.
Концепция стандартного языка описания аппаратуры для проектирования в электронике была определена на семинаре по языкам описания аппаратуры, который проходил в июне 1981 года. На этом семинаре примерно 20 человек из промышленности и академических кругов собрались вместе, чтобы разработать требования к языку описания аппаратуры для использования в программе по сверхбольшим и высокоскоростным БИС министерства обороны США.
После рассмотрения различных существующих языков, включая Аdа, группа специалистов пришла к выводу, что ни один из существующих языков описания аппаратуры или языков программирования не подходит для этой программы, потому что ни один из них не удовлетворяет всем предъявленным требованиям.
Вместо этого группа рекомендовала создать новый язык. В течение 1981 года требования были объединены с требованиями документа Аdа Steelman, полученный в результате документ получил название "Требования министерства обороны к языкам описания аппаратуры". Этот документ с требованиями стал основой для первоначальной разработки языка VHDL.
Разработка первоначальной версии языка заняла почти год и началась с октября 1983 года. В августе 1984 года первоначальная разработка была представлена на смотре проектов в г. Ороно, штат Мэн.
Представители промышленности, академических кругов и министерства обороны сделали много замечаний команде разработчиков, для доработки версии с учетом этих замечаний потребовалось дополнительных 4 месяца работы, после окончания которых была разработана версия VHDL 7.2.
Для доказательства правильности определения языка были разработаны инструментальные средства, чтобы обеспечить анализ и моделирование описаний на языке VHDL. Был также создан набор тестов, чтобы помочь оценить возможности языка для документирования аппаратуры.
Кроме того, министерство потребовало использовать VHDL 7.2 для документирования нескольких проектов, разработанных в рамках программы VHSIС.
Второй цикл в разработке VHDL начался в 1986 году с создания группы анализа и стандартизации VHDL (VASC) в рамках подкомитета по стандартам САПР технического комитета IЕЕЕ по автоматизации проектирования.
Эта группа отвечала за разработку языка VHDL 7.2, определенного в такой форме, которая была бы приемлема для промышленности, коммерческих приложений, а также для использования в военных заказах.
И снова работа с приложениями VHDL 7.2 выявила ряд дополнительных требований, и его доработка с их учетом заняла примерно год.
Исправленное описание языка было выпущено в нескольких черновых вариантах и рассматривалось в качестве стандарта IЕЕЕ летом 1987 года.
Окончательное признание как стандартного языка пришло с положительным голосованием на коллегии по стандартам 10 декабря 1987 года. Таким образом, был создан стандарт IЕЕЕ VHDL 1076-1987.
В 1993-м году стандарт IЕЕЕ 1076 модифицировался и был принят дополнительный стандарт IЕЕЕ 1164.
В 1996-м году принят VHDL стандарт синтеза IЕЕЕ 1076.3.
Работу над усовершенствованием стандарта ведет группа VASC. Срок регулярного пересмотра стандарта - пять лет.
Ведутся также работы по расширению языка VHDL в область описания аналоговой аппаратуры - VHDL -А, стандартизации внутренней формы представления VHDL - описаний в ЭВМ и формы задания тестов для VHDL -моделей.
В нашей стране создана Российская ассоциация пользователей (РАЯПС) языка VHDL, призванная координировать работы в области стандартизации САПР на его базе, разработки VHDL - анализаторов, верификаторов, систем синтеза, систем моделирования, библиотек моделей интегральных микросхем, учебных курсов, пособий и т.п.
Разработчик цифровой аппаратуры может уточнить в VHDL-описаниях интересующие его детали поведения используемых микросхем или, имея их на машинном носителе, приложенном к справочнику по электро-радиоэлементам, проверить модель на ЭВМ и изучить ее работу.
Проектировщик БИС может составить формализованное задание на проектирование кристалла, включив в него описание алгоритма и внешних характеристик БИС с тем, чтобы конструкторы и технологи могли использовать верифицированное VHDL-описание для получения масок и фотошаблонов.
Эксплуатанционщик радиоэлектронной аппаратуры, имея в комплекте документации VHDL-описание устройства, на его базе может осуществлять модернизацию схем, может использовать VHDL-модели при поиске неисправностей в схеме и доработке контрольных тестов.
С помощью VHDL - приложений к учебникам и автоматизированным обучающим курсам более эффективно решаются задачи обучения и тренинга в сфере проектирования и эксплуатации радиоэлектронной аппаратуры.
Стандартизация входных языков и внутренних интерфейсов подсистем САПР, в том числе и на базе VHDL, создает общую коммуникационную среду для САПР , позволяет упростить стыковку продуктов различных фирм, обмен библиотеками моделей компонент и проектов, модернизацию отдельных подсистем САПР.
Язык VHDL особенно хорошо подходит для проектирования с программируемыми логическими устройствами, и это получает распространение.
При проектировании логических программируемых приборов (ПЛИС) и (программируемых пользователем вентильных матриц с большей емкостью от 500 до более 100000 вентилей, для быстрого и эффективного завершения проекта инженеры не могут использовать булевы уравнения или описания на уровне вентилей. Язык VHDL обеспечивает конструкции языка высокого уровня, которые дают возможность разработчикам описывать большие схемы и быстро готовить изделия для реализации.
Этот язык поддерживает создание библиотек проектов, чтобы сохранить компоненты для многократного использования в последующих проектах. Так как язык VHDL является стандартным языком, он обеспечивает переносимость кода между инструментальными средствами синтеза и моделирования и машинонезависимое проектирование.
Язык VHDL также облегчает преобразование проекта от программируемой логики к реализации специализированных интегральных схем.
Программируемые логические устройства высокой плотности, включая логические программируемые приборы и программируемые пользователем вентильные матрицы, могут использоваться для интеграции большого количества логики в одной интегральной схеме.
Заказные и полузаказные специализированные интегральные схемы устройства также используются для интегрирования большого количества цифровой логики, но и обеспечивают дополнительную гибкость: они могут использоваться с более жесткими календарными планами, для изделий с малым тиражом и для опытных экземпляров серийных изделий. Они также привлекательны для проектов, требующих низкие издержки для неповторяемого проектирования.
Языки описания аппаратуры (Hardware Description Language) обеспечивают формальную запись, которая может быть использована на всех этапах разработки цифровых электронных систем. Это становится возможным вследствие того, что язык легко воспринимается как машиной, так и человеком. Он может использоваться на этапах проектирования, верификации, синтеза и тестирования аппаратуры также, как и для передачи данных о проекте, для модификации и сопровождения.
Существует несколько разновидностей этих языков: AHDL, VHDL, VerilogHDL, Abel и др. Известны также случаи использования стандартных языков программирования, например Си, для описания структуры БИС.
Ряд языков описания аппаратуры (AHDL, Abel) предназначены для описания систем на ПЛИС, другие появились изначально как средство моделирования цифровых систем, а затем стали применяться для их описания.
На языке VHDL возможны как поведенческое, так и структурное, а также потоковое описания цифровых схем. Это означает, что язык VHDL поддерживает три различных стиля описания аппаратных архитектур.
Первый стиль из них - структурное описание, в котором архитектура представляется в виде иерархии связанных компонентов.
Второй стиль - потоковое описание (описание данных), в котором архитектура представляется в виде множества параллельных регистровых операций, каждая из которых управляется вентильными сигналами. Потоковое описание соответствует стилю описания, используемому в языках регистровых передач.
И, наконец, третий стиль - поведенческое описание, в котором преобразование описывается последовательными программными предложениями, похожими на имеющиеся в любом современном языке программирования высокого уровня предложениями. Все три стиля могут совместно использоваться в одной архитектуре.
Структурное и потоковое описания используются в основном для проектирования цифровых схем, поведенческое - только для моделирования этих схем, так как содержит конструкции, которые невозможно реализовать в виде схемы.
Наиболее важными в языке VHDL являются понятия параллелизма и иерархии.
Поведение (алгоритм)
команды
алгоритм устройства
микрооперации
булевы функции Структура
вентили регистры устройства
переключатели базовые элементы микросхемы ЭВМ и ВС
фронты сигналов
микротакты
такты
Время
Рис. 5. Возможности VHDL в области отображений характеристик (аспектов) аппаратуры
Степень детализации аспектов, отображаемых в описаниях аппаратуры, определяется конкретными задачами. Например, описание некоторой микропроцессорной системы может строиться как описание структуры, состоящей из микросхем БИС и СИС, а описание самих микросхем строиться как поведенческое, так как их описание на вентильном уровне либо отсутствует, либо слишком громоздко.
Любой язык базируется на разнообразных конструкциях (словах, массивах, переменных, константах, выражениях и т.д.).
В языке VHDL в качестве конструкций выступают объекты, проекты, иерархии, архитектурные тела, пакеты, тела пакетов и др.
Объект проекта представляет собой описание компоненты проекта, имеющей чётко заданные входы и выходы и выполняющей чётко определённую функцию.
Объект проекта может представлять всю проектируемую систему, некоторую подсистему, устройство, узел, стойку, плату, кристалл, макроячейку, логический элемент и т. п.
В описании объекта проекта можно использовать компоненты, которые, в свою очередь, могут быть описаны как самостоятельные объекты проекта более низкого уровня.
Таким образом, каждый компонент объекта проекта может быть связан с объектом проекта более низкого уровня. В результате такой декомпозиции пользователь строит иерархию объектов проекта, представляющих весь проект в целом. Естественно, что вся иерархия будет состоять из нескольких уровней абстракций. Такая совокупность объектов проекта называется иерархией проекта.
Каждый объект проекта состоит, как минимум, из двух различных типов описаний: описания интерфейса и описания одного или более архитектурных тел.
Интерфейс описывается в объявлении объекта проекта и определяет только входы и выходы объекта проекта.
Для описания поведения объекта или его структуры служит архитектурное тело.
Чтобы задать, какие объекты проекта использованы для создания полного проекта, используется объявление конфигурации.
В языке VHDL предусмотрен механизм пакетов для часто используемых описаний, констант, типов, сигналов. Эти описания помещаются в объявлении пакета.
Если пользователь использует нестандартные операции или функции, их интерфейсы описываются в объявлении пакета, а тела содержатся в теле пакета.
Таким образом, при описании цифровых схем на языке VHDL возможно использование пяти различных типов описаний:
1) объявление объекта проекта,
2) объявление архитектурного тела,
3) объявление конфигурации,
4) объявление пакета и
5) объявление тела пакета.
Каждое из описаний является самостоятельной конструкцией языка VHDL, любая конструкция может быть независимо проанализирована анализатором и поэтому получило название “модуль проекта”.
Модули проекта, в свою очередь, можно разбить на две категории:
1) первичные модули и
2) вторичные модули.
К первичным модулям относятся различного типа объявления, к вторичным - отдельно анализируемые тела первичных модулей.
Один или несколько модулей проекта могут быть помещены в один файл, называемый файлом проекта.
Каждый проанализированный модуль проекта помещается в библиотеку проекта и становится библиотечным модулем.
Данная реализация позволяет создать любое число библиотек проекта. Каждая библиотека проекта в языке VHDL имеет логическое имя (идентификатор). Фактическое имя файла, содержащего эту библиотеку, может совпадать или не совпадать с логическим именем библиотеки проекта.
Для ассоциирования логического имени библиотеки с соответствующим ей фактическим именем предусмотрен специальный механизм установки внешних ссылок.
Объекты данных являются хранилищами для значений определённого типа. Следует заметить, что все типы в языке VHDL конструируются из элементов, представляющих собой скалярные типы.
Значения всех объектов в создаваемой модели, взятые все вместе, отражают текущее состояние моделирования. Описание на языке VHDL содержит объявления, которые создают объекты данных четырёх классов: константы, переменные, сигналы и файлы.
Константы и переменные содержат одно значение данного типа. Значения переменных могут быть изменены назначением нового значения в предложении назначения переменной.
Значение константы устанавливается до начала моделирования и не может после этого изменяться.
Сигнал имеет текущее значение подобно переменной. Он также имеет прошлую историю значений, на которые разработчик может пожелать сослаться, а также множество будущих значений, которые будут получены от формирователей сигналов.
Новые значения для сигналов создаются предложениями назначения сигналов. Каждый объект в описании должен ассоциироваться с одним и только одним типом. Тип состоит из множества возможных значений и множества операций.
Имеются операции двух видов. Некоторые операции являются предопределёнными, к ним , например, относятся операторы “+”, “-“ для значений типа integer.
Другие операции явно кодируются в языке VHDL; например, может быть написана функция-подпрограмма Max, которая возвращает наибольший из двух целых аргументов.
Тип объекта представляет информацию, которая окончательно определяется в момент записи модели. Эта информация способствует обнаружению несоответствий в тексте без обращения к моделированию. Например, легко обнаружить и отметить попытку назначения булевого значения (true или false) целой переменной.
Новое значение, которое должно быть создано предложением назначения, определяется выражением в правой части. Выражения используются также и в других контекстах: например, как условие в предложении if. В состав выражения могут входить константы, переменные, сигналы, операторы и указатели функций.
Когда имя объекта используется в выражении, при расчёте значения выражения учитывается его текущее значение.
Примером описания цифрового автомата является преобразователь параллельного кода в последовательный.
Преобразователь кода представляет собой устройство, на вход которого подается n-битное число в параллельном коде “d”, сигнал загрузки “load” и синхроимпульсы “clk”. По сигналу загрузки происходит запись входного слова во внутренний регистр и последовательная выдача в течении n тактов этого входного слова в последовательном коде на выходе “о” синхроимпульсами “oclk”.
После окончания преобразования на выходе “e” появляется высокий уровень сигнала в течение одного такта.
Известно большое число отечественных и зарубежных языков описания цифровой аппаратуры: МОДИС. МОДИС-В78, Автокод-М, МРL, ОСС-2, Форос, Алгоритм, СDL, DDL, VЕRILОG, ISPS, CONLAN, HILО, АВЕL, AHDL, РП8 и др.
В настоящее время только два языка удовлетворяют требованиям для цифрового логического проектирования: VHDL и VerilogНDL.
Язык VHDL отлично подходит для различных целей - для документации, синтеза и моделирования устройств и систем. Он отличается более мощной общеалгоритмической базой, более развитыми средствами отображений временных соотношений и используемых алфавитов моделирования, большим диапазоном охватываемых систем и уровней их описаний, а главное - стандартностью (т. е признаваемостью мировым сообществом).
Если посмотреть на язык VHDL глазами программиста, то можно сказать, что он состоит как бы из двух компонент - общеалгоритмической и проблемно-ориентированной (рис.6).
Рис.6. Две компоненты языка VHDL
Общеалгоритмическая компонента языка VHDL - это язык, близкий по синтаксису и семантике к современным языкам программирования типа Паскаль, Си, МОДУЛА-2, АДА.
Язык VHDL относится к классу строго типизированных, что означает, например, переменной типа целый (integег) нельзя присвоить значение вещественной (геа1) переменной:
variable Х integег; Y variable геа1;
Х : = Y; - ошибочная запись.
Помимо встроенных (пакет STANDARD) простых (скалярных) типов данных: целый (integег), вещественный (геа1), булевский (bоо1еаn), битовый (bit), данных физического типа - время (time), данных типа ссылка (указатель), пользователь может вводить и использовать свои типы данных (перечислимые, физические, целые и плавающие).
Например:
type temp is range 0 to 42;-- объявлен диапазонный целый тип temp;
type let is (`i, `j, `k); - перечислимый тип lеt; принимающий три значения;
variable Z, Х: temр; variable Y: let:
Х : = 10; -- присваивание верно;
Х: = 1000; -- неверно, выход из допустимого для Х диапазона;
Y : = i; - - верно;
Y:=0; -- неверно.
Помимо скалярных типов данных можно объявлять и использовать агрегаты - составные типы данных: массивы (аггау), в том числе битовые векторы (bit vector) и символьные строки (string), а также записи (гесогd) и файлы (file).
Например:
tуре МЕМОRY is аггау (0 to 1000) оf bit; - массив из 1001 бита;
variable М: МЕМОRY;
М(i.):=М(j+1); - присваивание в элемент массива.
В языке VHDL имеются три класса объектов: константы, переменные и сигналы.
Примеры описаний констант:
соnstant Рi: геаl: = 3.14; - вещественная константа Pi;
соnstant D1: let: = k;
соnstant ALL1: bit vector (0 to 2): = 111.
Последовательно выполняемые (последовательные) операторы языка VHDL могут использоваться в описаниях процессов, процедур и функций.
Их состав включает:
оператор ожидания wait;
оператор присваивания переменной (: =);
последовательный оператор утверждения (аssert);
условный оператор (if);
оператор выбора (саsе);
оператор цикла (1оор):
пустой оператор (null);
оператор возврата из процедуры-функции (геturn);
оператор выхода (ехit);
оператор перехода (nехt).
Язык поддерживает концепции модульного и структурного программирования.
Сложные операторы заключены в операторные скобки: if-end if; ргоcеss - end ргосеss; саsе - еnd саsе, 1оор - еnd 1оор и т. д. Поэтому отпадает необходимость в специальных операторных скобках для отображения составных операторов и, например, запись
if Х>Y thеn А : = В, С : == D; еnd if;
означает совместное выполнение двух присваивании при истинности условия Х>Y.
Пакеты, как и в обычных алгоритмических языках - это средство выделения из ряда программ и подпрограмм общих типов данных, переменных, процедур и функций, позволяющее упростить, в частности, процесс их замены. В языке VHDL у пакета разделяются описание интерфейса пакета (рас-kаgе) и описание тела пакета (расkаgе bоdy).
По умолчанию предусмотрено подключение стандартного пакета
SТАNDАRD. Этот пакет, в частности, содержит, как уже отмечалось, описание стандартных типов данных - integer, геа1, bоо1еаn, bit и др.
Пакет ТЕХТIO содержит стандартные операторы ввода-вывода. Нестандартные пакеты реализуются пользователями, желающими более точно отобразить свойства описываемых ими объектов. Например, можно в пользовательском пакете переопределить стандартные логические операции И (аnd), ИЛИ (ог) и НЕ (nоt) и перейти от булевского (0,1) к многозначному (1, О, X, ,Z) алфавиту моделирования.
Пример пользовательского пакета:
расkаgе РА is - интерфейс пакета РА.;
tуре Т1 is (М,N); - объявлен тип T1; - функция F;
еnd;
расkаgе bоdу РА is- тело пакета;
function F (Х:= Т1) return Т1 is;
bеgin
if Х= М then геturn N; - функция F;
еlse геturn М; - заменяет M на N;
еnd;
еnd;
Контрольная работа | Концепция информатизации Российской Федерации |
Контрольная работа | Причины агрессивного поведения. Методы работы с агрессивными детьми |
Контрольная работа | Алгоритм выбора и реализации предпринимательской идеи |
Контрольная работа | Системы управления взаимоотношения с клиентами |
Контрольная работа | Учет материальных затрат в бухгалтерском учете |
Контрольная работа | Геополитическое положение России |
Контрольная работа | Особенности вознаграждения работников в организации |
Контрольная работа | Виды запасов |
Контрольная работа | Психоанализ |
Контрольная работа | Экономико-географическая характеристика Печорского угольного бассейна 2 |
Контрольная работа | Проведение процедуры оценки воздействия на окружающую среду (ОВОС) в России |
Контрольная работа | Население и трудовые ресурсы России |
Контрольная работа | Чрезвычайные ситуации природного характера |
Контрольная работа | Страхование гражданской ответственности |
Контрольная работа | Ишемическая болезнь сердца |