Товары в корзине: 0 шт Оформить заказ
Стр. 1
 

141 страница

821.00 ₽

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

Официально распространяем нормативную документацию с 1999 года. Пробиваем чеки, платим налоги, принимаем к оплате все законные формы платежей без дополнительных процентов. Наши клиенты защищены Законом. ООО "ЦНТИ Нормоконтроль".

Наши цены ниже, чем в других местах, потому что мы работаем напрямую с поставщиками документов.

Способы доставки

  • Срочная курьерская доставка (1-3 дня)
  • Курьерская доставка (7 дней)
  • Самовывоз из московского офиса
  • Почта РФ

Распространяется на программные и технические средства проектирования радиоэлектронной аппаратуры (РЭА) и больших интегральных схем (БИС).

Стандарт определяет синтаксис и семантику языка VHDL, который предназначен для формального представления цифровых систем (ЦС) различного уровня функциональной (вычислительный комплекс, ЭВМ, устройство, узел) и (или) конструктивной (шкаф, стойка, блок, плата, БИС) сложности на различных уровнях детализации (алгоритм функционирования, регистровые передачи, вентильная схема). VHDL-описание ЦС используется для функции представления ЦС в процессе ее проектирования, для изучения ЦС в процессе ее эксплуатации и ремонта.

Стандарт применяется в автоматизированных системах проектирования РЭА и БИС

Показать даты введения Admin

Страница 1

ГОСТ Р 50754-95

ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ

ЯЗЫК ОПИСАНИЯ АППАРАТУРЫ ЦИФРОВЫХ СИСТЕМ — VHDL

ОПИСАНИЕ ЯЗЫКА

МОСКВА

1995

Страница 2

ГОСТ И 50754—95

Предисловие

1    РАЗРАБОТАН И ВНЕСЕН Российским научно-исследовательским институтом информационных систем (РосНИИ ИС) и Всероссийской ассоциацией организаций, заинтересованных в применении языка VHDL (ВАЯПС).

2    ПРИНЯТ и ВВЕДЕН В ДЕЙСТВИЕ Постановлением Госстандарта России от 13.03.95. . . N 129.

3    Настоящий стандарт содержит полный аутентичный текст стандарта “IEEE Sid 1076—87. Hi.ЕЕ Standard VHDL Language Reference Manual” (IEEE Std J076—87. Стандарт Института инженеров по электротехнике и радиоэлектронике США на Язык Описания Аппаратуры Свсрхскоросшыу Интегральных Схем. Руководство пользователя языка). При обнаружении разночтений приоритет имеет IEfJ,E Std 1076-87.

4    ВВЕДЕН ВПЕРВЫЕ

© ИПК Издательство стандарте*, 1995

Настоящий стандарт не может быть полностью или частично воспроизведен, тиражяронак и распространен « качестве официального издания без разреи синя Госстандарта России

п

Страница 3

0-1 Область применении.................

0 2 Нормативные слом...............

ГОСТ I» 50754—95


СОДЕРЖАНИЕ


0    3 Введение.....................

0-4 Определения..................

1    Объекты проекта и конфигурации..........

1.1    Объявления объектов ................

1.1.1    Заголовок объекта.................

1.1.1.1    Параметры настройки..............

1.1.1.2    Порты ....................

1.1.2    Раздел объявлений объекта...........

1.1.3    Раздел оператор:» объекта........

1.2    Архитектурные тела................

12.1 Раздел объявлений архитектурного тела    . . . -

1.2.2 Раздел операторов архитектурного тела    . . . -

1    3 Объявления конфигурации .............

1.3.1    Конфигурация блоки ...............

1.3.2    Конфигурация компонента ............

2    11одпро1раммы и пакеты ...............

2.1    Объявления подпрограмм..............

2.1.1    Формальные параметры..............

2.1.1.1 Передача параметров класса constant и variable

2.1.1.2 Перелай параметров класса *ignal.......

2.2    Тела подпрограмм.................

2.3    Совмещение подпрограмм..............

23.1    Совмещение операций ............

2 4 Функции разрешения..............

2.5    Объявления пакетов................

2.6    Тела пакетов....................

2    7 Правила согласования................

3    Типы ..........................

3.1    Скалярные типы...................

3.1.1    Перечисляемые типы ....... ■    ......

3.1    1.1 Предопрелелениые перечисляемые шпы . . . .

3.1.2    Целые типы ................. . . .

3.1.2.1    Предопределенные целые типы.........

3.1.3    Физические типы...............

3.1.3.1    Предопределенные физические типы......

3.1.4    Плапающие типы .................

31.4-1 Предопределенные плапающие типы .    .    .    .    .

3.2    Составные типы............. ......

3 2.1 Индексируемые типы ...............

3 2,1.1 Ограничения индекса и дискретные диапазоны

3.2.1.2    Предопределенные индексируемые типы . . . .

3.2.2    Структурные тины.................

3.3 Ссылочные типы ..................

3.3.1    Неполные описания типов ............

3-3.2    Рпзмсшение и уничтожение обьекюн......

J.4 Файловые типы...................

3    4.1 Файловые операцт.................

4    Объявления ......................

4.1    Объявления типов..................

4.2    Обмеления подтипов ................

4.3    Объекты .......................

4-3.1    Объявления объемов ...............

4-3.1.1 Объявления констант ..............

4 3.1.2 Об1.яиления сигналои ..............

4.3.1-3 Объявления переменных ............

4.3.2    Объявления файлов................

4.3    3 Объявления интерфейсов.............

4.3 3.1 Списки интерфейсов ...........  . .

4.3.3.2 Списки сопоставлений  ..........  . .

III

Страница 4

ГОСТ Р 507S4—95

4    3 4 Объявление дополнительного имени......................................50

4.4    Объявление атрибутов................................................51

4.5    Объявления компонентов ..................................................52

5    Специфнкпцш.........................................................

5.1    Спецификация атрибута ............................................52

5.2    Спецификация конфигурации .............................................53

5.2.1    Связывающее указание............... ......................................54

5.2.1.1    Аспект объекта проекта................................................54

5-2.1.2 Аспект отображения    параметров настройки и аспект отображения портов......................................55

5-2.2 Неявное связывающее    указание ........................................55

5-3 Спецификация отключения.................................................................56

6    Имена ...........................................................57

6.1    Имена ...........................................................................57

6.2    Простые имена .....................................................58

6.3    Составные имена ................................................................58

6.4    Индексируемые имена .................................................59

6.5    Сечения .........................................................59

6.6    Атрибуты .......................................................59

7    Пмражения.........................................................Ы>

7.1    Выражения.......................................................60

7.2    Опсрагоры.......................................................60

7.2.1    Логические операторы.............. ...................... .    ............61

7.2.2    Операторы отношения..................................................61

7.2.3    Axvnimut операторы .................................................62

7-2.4 Мультипликативные операторы............................................63

7.2.5 Прочие опера .......................................................64

7.3    Операнды .......................................................65

7.3.1    Литералы.......................................................65

7.3.2    Агрегаты . . . .......................................................66

7.3.2.1    Агрегаты структур..................................................66

7.3.2.2    Агрегаты массивом..................................................66

7.3.3    Вызовы функций ...............................................................67

7.3.4    Квалифицированные выражения..........................................67

7.3.5    Преобразование типа .................................................68

7.3.6    Генераторы........................................................................................69

7.4    Статические выражения .................................................69

7.5    У ниве реальные выражения........................................................................71

8    Последовательные операторы . .................. .......................................................71

8.1    Оператор ожидания ........................................................................72

8.2    Оператор утверждения ...................................................72

8.3    Оператор назначение сип шла ..........................................................................................73

8.3.1    Изменение планируемой выходной формы сигнала................................74

8.4    Оператор присваивания переменной...........................................75

8.4.1    Присваивание индексируемой переменной....................................... 76

8.5    Оператор вызова процедуры .............................................76

8.6    Условный оператор .................................................... 76

8.7    Оператор выбора .....................................................76

8.8    Оператор цикла......................................................77

8.9    Оператор перехода ...................................................78

8.10    Оператор выхода......................................................78

8.11    Оператор возврата ................................................... .    78

8.12    Пустой оператор......................................................79

9    Параллельные операторы.................................................79

9.1    Оператор блока ...................................................................79

9.2    Оператор процесса ....................................................80

9.2.1    Драйверы.........................................................81

9.3    Параллельный вызов процедуры..........................................81

9.4    Параллельный оператор утверждения ...........................................82

9.5    Параллельный оператор назначения сигнала .................................... .    82

9.5.1    Условное назначение сигнала ..........................................84

9.5.2    Выборочное назначение сигнала ....................................................................................85

9.6    Оператор конкретизации компонента .........................................85

9-6.1 Конкретизация компонента.....................................................................................86

9.7    Оператор генерации............................................... .    .    88

10    Область действия н видимость ..............................................    88

10.1    Область объявлений ..................................................88

10.2    Область действия объявлений......................................................................................,    89

IV

Страница 5

ГОСТ Р 50754-95

10.3    Видимость........................................................89

10.4    Описания ИСПОЛЬЗОВАНИИ ................................................91

10.5    Контекст разрешения совмещения ............................................92

I! Модули проекта и их анализ.................................. - ............92

11.1    Модули проекта ......................................................92

11.2    библиотеки проекта ....................................................93

11.3    Описание контекста ...................................................93

11.4    Порядок пил.............................................................94

12    Предвыполиение и выполнение.............................................94

12.1    Предвыполиение иерархии проекта.................................................94

12.2    Иредвыполнеши: запхювка блока.............................................95

12.2.1    Описание параметров настройки ..........................................95

12.2.2    Описание отображения параметров    настройки...................................95

12.2.3    Описание портов....................................................95

12.2.4    Описание отображения нор юн ...........................................95

12.3    Предвыполиение раздела объявлений........................................95

12.3.1    Предвмполнение объявления..............................................95

12.3    1.1    Объявления    и тела подпрограмм ................................................96

12.3.1.2    Объявления    пни» ..................................................96

12.3.1.3    Объявления    подтипов . ..............................................96

12-3.1.4    Объявления    объектов................................................96

12.3.1.5    Объявления    дополнительных    имен .........................................97

12.3.1.6    Объявления    атрибутов...............................................97

12.3.1.7    Объявления    компонентов................................................97

12.3.2 Предвыполиение спецификации.............................................97

12.3.2.1    Спецификации    атрибутов ..............................................97

12.3.2.2    Спецификации    конфигураций............................................97

12.3.2.3    Спецификация    отключения .............................................97

12.4    Предвыполнсние раздела операторов..........................................97

12.4.1    Операторы блока........................................................97

12.4.2    Операторы генерации ..................................................98

12.4.3    Операторы конкретизации компонентов ........................................98

12.4.4    Другие параллельные операторы ............................................98

12.5    Динамическое Ирсдвьтолиенис .............................................99

12.6    Выполнение модели ..........................................................................99

12.6.1    Распространение знамений сигналов .........................................99

12.6.2 Изменение неявных сип тало*................................*..........101

12.6.3    Цикл моделирования..................................................102

13    Лексические элементы...................................................102

13.1    Набор символов ....................................................102

13.2    Лексические элементы, разделители и ограничители..................................104

13.3    Идентификаторы......................................................104

13 4    Абстрактные литералы..................................................105

13.4.1    Десятичные литералы . .................................................105

13.4.2    Казированныс литералы.................................................105

13.5    Символьные литералы................................................106

13    6    Строковые литералы................................................106

13.7    Ьитооо-строковые литералы................................................106

13.8    Комментарии....................................................107

13.9    Зарезервированные слова ...............................................107

13-10    Возможные замены символов ..............................................108

14    Предопределенное окружение языка ...........................................108

14.1    Предопределенные атрибуты .............................................108

14.2    Пакет STANDARD.....................................................114

14.3    Пакет TEXTIO......................................................115

Приложение А Сводка синтаксических правит .......................................118

1-2-1406

V

Страница 6

ГОСТ Р 50754-95

ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ

ЯЗЫК ОПИСАНИЯ АППАРАТУРЫ ЦИФРОВЫХ СИСТЕМ VHDL Описание языка

VIISIC Hardware Description Language.

Language reference manual

Дата МСЛСН1М 1996—01—01

0.1 ОБЛАСТЬ ПРИМЕНЕНИЯ

Настоящий стандарт распространяется на программные н технические средства проектирования радиоэлектронной аппаратуры (РЭА) и больших интегральных схем (БИС).

Стандарт определяет синтаксис и семантику языка VHDL (Very high speed integrated circuit Hardware Description Language), который предназначен для формального представления цифровых систем (ЦС) различного уровня функциональной (вычислительный комплекс, ЭВМ, устройство, узел) и (или) конструктивной (шкаф, стойка, блок, плата, БИС) сложности на различных уровнях детализации (алгоритм функционирования, регистровые передачи, вентильная схема). VHDL-описание ЦС используется для фиксации представления ЦС в процессе ее проектирования, для изучения ЦС в процессе ее эксплуатации и ремонта.

Стандарт применяется в автоматизированных системах проектирования РЭА и БИС.

0.2 НОРМАТИВНЫЕ ССЫЛКИ

В настоящем стандарте использованы ссылки на следующие стандарты:

ГОСТ 27463-87 Системы обработки информации. 7-битные кодированные наборы символов ГОСТ 27465-87 Системы обработки информации. Символы. Классификация, наименование и обозначение

ГОСТ Р 34.303-92 Системы обработки информации. 8-битные кодированные наборы символов

0.3 ВВЕДЕНИЕ

Описание языка VHDL дано при помощи контекстно-независимого синтаксис;» вместе с контекстнозависимыми синтаксическими и семантическими требованиями, представленными в повествовательной форме. Контекстно-независимое описание синтаксиса дано в упрощенном варианте форм Бэкуса-Наурп, а именно:

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

forma l_port_Jist.

Если имя категории используется не по назначению (то есть не для описания синтаксических правил), то символы подчеркивания заменяются пробелами. Для данного примера это будет formal port list;

б)    слова, выделенные жирным шрифтом, используются для обозначения служебных (зарезервированных) слов языка VHDL, например:

array;

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

letter_or_digit::- letter I digit choice :: - choice { I choice }

г)    квадратные скобки используются для выделения дополнительных (необязательных) употреблении, например два следующих правила являются эквивалентными:

return_statement :: - return (expression!; return_statcment :: - return;

Издание официальное

I

Страница 7

ГОСТ Р 50754-95

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

term :: = factor {mulliplying_opcraior factor}

term :: - factor I term mullipIying_ppcralor factor I

с) если имя какой-нибудь синтаксической категории частично слева выделено курсивом, то это эквивалентно невыделенной части имени категории и рассматривается как дополнительная семантическая информация. Например, fypejnamc и sublypc_namc для понятия пате являются эквивалентными;

ж)    выделение жирным шрифтом терминов в тексте указывает на определение этих терминов;

з)    термин simple_namc используется в каждом случае употребления идентификатора, который уже обозначает некоторое объявленное понятие.

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

0.4 ОПРЕДЕЛЕНИЯ

В настоящем стандарте применяются следующие термины:

—    Вычисление агрегата вырабатывает значение составного типа. Это значение задастся указанием значений каждого из элементов агрегата. Для указания сопоставления значения и элемента может быть использовано либо позиционное сопоставление, либо именованное сопоставление (7.3.2)

Агрегат

(Aggregate)

Активный драйвер (Active Driver)

Анализ

(Analysis)

Анонимный

(Anonymous)

Атрибут

(Attribute)

ASCII

Библиотека

(Library)

Библиотека проекта (Design Library)

Библиотека ресурсов (Resource Library)

—    Драйвер считается активным в течение цикла моделирования, в котором он принимает новое значение, независимо от того, отличается или нет это значение от предыдущих значений драйвера (12.6.1)

—    Анализ файла проекта, содержащего VHDL-описанис, подразумевает синтаксический и семантический анализ этого описания и добавление промежуточной формы представления модулей проекта в библиотеку проекта (11.1)

—    Ряд имен создается неявно; простое имя такого описания не всегда определено и в этом случае такое описание считается анонимным. Пазовый тип числового типа или индексируемого типа является анонимным типом; аналогично, объект, указываемый ссылочным значением, является анонимным (4.1)

—    Атрибут определяет некоторую характеристику именованного понятия. Некоторые атрибуты являются предопределенными атрибутами и могут быть одним из следующих видов: типом, диапазоном, значением, сигналом или функцией. Остальные атрибуты определяются пользователем и всегда являются константами (4.4)

—    Американский стандартный код обмена информацией. Пакет Standard содержит определение типа Character, представляющего набор символов ASCII (3.1.1, 14.2)

—    См. Библиотека проекта (design library).

—    Библиотека проекта представляет собой зависящее от реализации средство, позволяющее хранить промежуточные представления проанализированных описаний (11.2)

—    Библиотека ресурсов — библиотека, содержащая библиотечные модули, ссылка на которые имеется в анализируемом модуле (11.2)

2

Страница 8

ГОСТ Р 50754-95

—    Библиотечным модулем является промежуточная форма представления проанализированного модуля проекта (11.1)

—    Блок представляет часть иерархии проекта. Блоком является либо внешний блок, либо внутренний блок (1)

Библиотечный модуль (Library Unit)

Блок

(Block)

Бокс

(Box)

Верхняя граница (Upper Bound)

Вид

(Mode)

Видимый

(Visible)

Внешний блок (External Block)

Внутренний блок (Internal Block)

Возобновляться

(Resume)

Восходящий

(Ascending)

Входы

(Inputs)

Выполняться

(Executc)

Выражение

(Expression)

Выражение зашиты (Guard Expression)

Выражение начального значения (Initial Value Expression)

Генератор

(Allocator)

—    Символ < > (называемый боксом) в определении подтипа индски* указывает на неопределенный диапазон (различные объекты этою типа необязательно должны иметь одинаковые границы и направления)

(3.2.1)

—    Для диапазона L to R или L downto R наибольшая из величин L или R называется верхней границей диапазона (3.1)

—    Вид порта или параметра задаст направление прохождения информации через этот порт или параметр. Значениями вида являются in. out, inout. buffer или linkage (4.3.3)

—    Объявление идентификатора считается видимым в конкретном месте текста, если согласно правилам видимости объявление определяет возможный смысл появления этого идентификатор;!. Видимость объявления может достигаться косвенно (то есть при помощи расширенных имен) или непосредственно (то есть при помощи простых имен) (10.3)

—    Внешним блоком является блок, определяемый объектом проекта (1)

—    Вложенный блок в модуле проекта, определяемый оператором блока, является внутренним блоком (1)

—    Процесс, возобновляющийся в данном цикле моделирования, становится готовым для выполнения и выполнится в конце данного цикла моделирования (12.6.3)

—    Диапазон L to R называется восходящим диапазоном (3.1)

—    Сигналы, идентифицируемые самым длинным статическим префиксом каждого имени сигнала, входящего в качестве первичного в каждое выражение (отличное от выражения времени) внутри параллельного оператора назначения сигнала, являются входами этого оператора (9.5)

—    Считается, что процесс выполняется, если он выполняет действия, заданные алгоритмом, описанным в разделе операторов этого процесса (12.6)

—    Выражение определяет вычисление значения (7.1)

Выражение защиты представляет собой выражение, сопоставляемое с оператором блока, которое управляет назначением защищенных сигналов внутри этого блока (4.3.1.2., 9.1)

Выражение начального значения задаст начальное значение, присваиваемое переменной или константе (4.3.1.3)

Генератор является операцией, используемой для создания анонимных переменных объектов, доступных через ссылочные значения (3.3, 7.3.6)

3

Страница 9

ГОСТ Р 50754-95

—    Глобальное статическое выражение является выражением, которое может быть вычислено в процессе предвыполнения иерархии проекта, в которой оно находится. Локально статическое выражение также является глобально статическим (7.4)

—    Глобальным статическим первичным является локальное статическое первичное или одна из определенных групп первичных, являющихся глобально статическими (7.4)

Глобальное

статическое выражение (Globally Static Expression)

Глобальное статическое первичное (Globally Static Primary)

Диапазон

(Range)

Диапазон индекса (Index Range)

Дискретный диапазон (Discrete Range)

Дискретный массив (Discrete Array)

Дискретный тип (Discrete Type)

Дополнительное имя (Alias)

Драйвер

(Driver)

Зависеть от библиотечного модуля (Depend)

Зависеть от значения

сигнала

(Depend)

Задающее значение (Driving Value)

Зашита

(Guard)

Защищенное назначение (Guarded Assignment)

Защищенный сигнал (Guard Signal)

Защищенный целевой объект

(Guarded Target)

—    Диапазон задаст подмножество значений скалярного типа (3.1)

—    Диапазон значений, принадлежащих диапазону, соответствующему некоторому индексу, является диапазоном индекса (3.2.1)

—    Дискретным диапазоном является диапазон, границы которого имеют дискретный тип (3.2.1.1)

—    Дискретным массивом является одномерный массив, элементы которого имеют дискретный тип (7.2.2)

—    Дискретным типом является перечисляемый тип или целый тип (3.1)

—    Альтернативное имя объекта (4.3.4)

— Драйвер сигнала представляет собой вместилище проектируемой выходной формы этого сигнала. Значение сигнала является функцией текущих значений его драйверов. Каждый процесс, содержащий значение сигнала, неявно содержит драйвер этого сигнала. Оператор назначения сигнала оказывает влияние только на сопоставленный с ним драйвер

—    Модуль проекта, содержащий явно или неявно ссылку на другие библиотечные модули, зависит от этих модулей. Эта зависимость оказывает влияние на допустимый порядок анализа модулей проекта

— Текущее значение неявного сигнала R считается зависимым от текущего значения другого сигнала S, если R обозначает неявный сигнал S’STABLE(T), S'QUIET(T) или S’TRANSACTION, или, если R обозначает неявный сигнал GUARD, a S является любым другим нся'К>.м сигналом, имя которого задано внутри выражения защиты, определяющего текущее значение R (12.6.2)

—    Задающим значением сигнала является значение, которое этот сигнал поставляет в качестве источника другого сигнала (12.6.1)

См. выражение защиты (guard expression)

—    Защищенным назначс. *ем является параллельный оператор назначения сигнала, содержащий опцию guarded (9.5)

—    Сигнал, объявленный с использованием описателей register или bus является защищенным сигналом. Для таких сигналов назначение внутри оператора назначения защищенного сигнала имеет специальный смысл (4.3.1.2)

—    Целевой объект оператора назначения сигнала, состоящий исключительно из защищенных сигналов, является защищенным целевым объектом. Целевой объект, состоящий только из незащищенных сигналов, является незащищенным целевым объектом (9.5)

4

Страница 10

—    Считается, что имя в элементе сопоставления агрегата, используемого в назначении или присваивании целевого объекта, идентифицирует сигнал или переменную и каждый подэлемент этого сигнала или переменной (8.3., 8.4)

—    Иерархия проекта представляет собой иерархию объектов проекта, получаемую в результате успешной декомпозиции объекта проекта на подкомпоненты, которые, в свою очередь, также декомпозируются (I)

ГОСТ Р 50754-95

Идентифицировать

(Identify)

Иерархия проекта (Design Hierarchy)

Изменяться

(Updalc)

Именованное сопоставление (Named Association)

Имя

(Name)

Имя единицы (Unit Name)

Индексируемый тип (Array Туре)

Инерционная задержка (Inertial Delay)

Интервал времени блокировки (Timeout Interval)

Источник

(Source)

Константа

(Constant)

Конфигурация

(Configuration)

Локально статическое выражение (Locally Static Expression)

—    Считается, что значение сигнала изменяется или явно, если этот сигнал используется в качестве целевого объекта в операторе назначения сигнала; или косвенно, если этот сигнал сопоставлен с объектом интерфейса, вид которого out. buffer, inout или linkage, или один из подэлсмснтов сигнала изменяется (4.3.3)

—    Считается, что элемент сопоставления является именованным, ссли формальный указатель в нем задан явно (4.3.3.2. 7.3.2)

—    Каждая форма объявления сопоставляет с описываемым понятием идентификатор. Только внутри области действия этого объявления существуют места, в которых возможно использовать этот идентификатор для ссылки на сопоставленное с ним объявленное понятие; такие места определяются правилами видимости. В таких местах считается, что этот идентификатор является именем этого понятия (4, 6.1)

—    В объявлении физического типа каждое объявление -единицы (как базовой, так и вторичной) определяет имя единицы (3.1.3)

—    Значение индексируемого типа состоит из элементов, имеющих один и тот же подтип (а. следовательно, один и тот же тип). Каждый элемент однозначно отличается индексом (для одномерного массива) или последовательностью индексов (для многомерного массива). Каждый индекс должен быть значением дискретного типа и находиться в соответствующем диапазоне индекса (3.2.1)

—    Инерционная задержка представляет собой модель задержки, используемую при моделировании переключательных схсм; импульс, длительность которого меньше, чем время переключения схемы, не будет передан. Эта задержка является умалчиваемой для операторов назначения сигнала (8.3)

—    Интервал времени блокировки, задаваемый описанием времени блокировки оператора ожидания (until предложение), определяет максимальное время, на которое процесс приостанавливается этим оператором (8.1)

—    Источник сигнала поставляет значение сигнала. Источником может быть либо драйвер, либо порт экземпляра компонента, с которым этот сигнал сопоставлен, либо собрание источников (составной источник) (4.3.1.2)

—    Константой является объект, значение которого изменить нельзя (4.3.1.1)

—    Конфигурация описывает, каким образом экземпляры компонентов в конкретном блоке связываются с объектами проекта для того, чтобы определить компоновки объектов проекта при формировании полного проекта (1, 1.3)

—    Выражение, которое можем быть вычислено в течение анализа модуля проекта, в котором оно используется, является локально статическим выражением (7.4)

5

Страница 11

ГОСТ Р 50754-95

Считается, что имя является локально статическим, если каждое выражение в этом имени является локально статическим (6.1)

Локально статическое первичное — это одна из определенной группы первичных, включающая литералы, ряд констант и ряд атрибутов (7.4)

Локально статическое

ИМЯ

(Locally Static Name)

Локально статическое первичное (Locally Sialic Primary)

Множество чувствительности (Sensitivity Scl)

Модель

(Model)

Модуль проекта (Design Unit)

Нарушение утверждения (Assertion Violation)

Неограниченный подтип

(Unconstrained

Subtype)

Неполная константа (Deferred Constant)

Неполное описание типа (Incomplete Туре Declaration)

Непосредственная область действия (Immediate Scope)

Непосредственно внутри (Immediately Within)

Несопоставленный формальный параметр (Unassociated Formal)

Неявное выражение (Default Expression)

Неявный сигнал (Implicit Signal)

Множеством чувствительности оператора ожидания является множество сигналов, к которым этот оператор чувствителен. Явно множество чувствительности задастся описанием чувствительности (on предложение); или оно может подразумеваться описанием условия (until предложение) (8.1)

Результатом предвыполнения иерархии проекта является модель, которая может быть выполнена с целью моделирования проекта, представленного этой моделью (12.6)

Модуль проекта может быть независимо проанализирован и помещен в библиотеку проекта. Модулем проекта является объявление объекта, объявление архитектуры, объявление конфигурации, объявление пакета или объявление тела пакета (11.1)

Нарушение утверждения возникает в том случае, когда вычисление условия в операторе утверждения даст ложное значение (8.2)

Подтип считается неограниченным, если он связан с условием, которое не налагает никаких ограничений (4.3)

Неполной константой является константа, описанная (с помощью объявления неполной константы) в объявлении пакета и не имеющая значения; неполная константа имеет соответствующее полное описание в соответствующем теле пакета, определяющее значение этой константы (4.3.1.1)

Неполное описание типа используется для определения рекурсивных ссылочных типов (3.3.1)

Непосредственной областью действия объявления, стоящей непосредственно внутри данной области объявлений, является часть области действия, распространяющаяся от начала объявления до конца области объявлений (10.2)

Считается, что объявление стоит непосредственно внутри области объявлении, если область является самой внутренней областью, объемлющей это объявление, не учитывая при этом область объявлений (если она есть), сопоставленную с самим объявлением (10.1)

Формальный параметр, не имеющий сопоставленного с ним фактического параметра, является несопоставлснным (5.2.1.2)

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

(4.3.1.2, 4.3.3)

Любой из сигналов S’Stable(T) или S’Quiet(T), а также любой неявный сигнал GUARD является неявным сигналом (12.6.2)

I

Страница 12

ГОСТ Р 50754-95

Для диапазона L to R или L downto R наименьшее из значений L и R называется нижней границей диапазона (3.1)

Диапазон L (downto) R называется нисходящим диапазоном (3.1)

Нижняя граница (Lower Bound)

Нисходящий

(Descending)

Область действия (Scope)

Обозначать

(Denote)

Объект

(Object)

Объект проекта (Design Entity)

Объявление

(Declaration)

Объявление объекта (Entity Declaration)

Ограничение

(Constraint)

Ограничение диапазона (Range Constraint)

Ограничение индекса (Index Constraint)

Омограф

(Homograph)

Отдельное объявление объекта (Single Object Declaration)

Ошибка

(Error)

Областью действия объявления является часть текста, в которой объявление может быть видимо. Эта часть определяется правилами видимости и совмещения (10.2)

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

Понятие, содержащее значение конкретного типа, является объектом. Существуют три класса объектов: константы, сигналы и переменные (4.3)

Объявление объекта вместе с сопоставленным ему типом архитектуры определяет объект проекта. Различные объекты проекта могут использовать одно и то же объявление объекта, что позволяет описывать различные компоненты с одинаковым интервалом или различные представления одного и того же компонента (1)

Объявление определяет понятие и сопоставляет идентификатор (или другое обозначение) с этим понятием. Такое сопоставление имеет эффект внутри области текста, называемой областью действия объявления. Внутри области действия объявления существуют места, где можно использовать этот идентификатор для ссылки на сопоставленное с ним описанное понятие. В таких местах этот идентификатор является простым именем этого понятия; в свою очередь считается, что это имя обозначает сопоставленное с ним понятие

Объявление объекта устанавливает интерфейс между конкретным объектом проекта и средой, в которой он используется. Оно также содержит объявления и операторы, составляющие часть этого объекта. Конкретное объявление объекта может быть использовано множеством объектов проекта, имеющих различную архитектуру. Таким образом объявление объекта потенциально может представлять класс объектов проекта, имеющих одинаковый интерфейс (1, 1.1)

Ограничение определяет (необязательно собственное) подмножество значений типа. Существуют ограничения индекса, ограничения диапазона и ограничения размера (3)

Ограничение диапазона задаст диапазон значений в типе (3.1, 3.1.2)

Ограничение индекса устанавливает диапазон индекса для каждого индекса в индексируемом типе и, тем самым, границы массива (3.2.1.1)

Каждое из двух объявлений считается омографом другого, если оба они имеют один и тот же идентификатор, и совмещение разрешено для одного из двух. Если совмещение разрешено для обоих объявлений, то каждое из двух является омографом другого, если они имеют один и тот же идентификатор, символ оператора или символьный литерал, а также профиль параметров и типа результата (10.3)

Объявление объекта называется отдельным, если список идентификаторов в этом объявлении содержит один идентификатор (4.3.1)

Ошибка является условием, при котором исходное описание становится недействительным. Если ошибка обнаружена во время анализа модуля

Страница 13

ГОСТ Р 50734-95

проекта, то для этого исходного описания не будет создан соответствующий библиотечный модуль. Ошибка выполнения вызывает прекращение процесса моделирования (11.4)

—    Термин “ошибочный" используется в отношении ошибочного условия, которое не всегда может быть обнаружено (2.1.1.1)

Ошибочный

(Erroneous)

Параллельный оператор (Concurrent Statement)

Параметр

(Parameter)

Параметр генерации (Generate Parameter)

Параметр настройки (Generic)

Параметр цикла (l.oop Parameter)

Пассивный

(Quiet)

Пассивный процесс (Passive Process)

Первичный

(Primary)

Переменная

(Variable)

Перечисляемый тип (Enumeration Туре)

Плавающий тип (Floating Point Types)

Планируемая выходная форма сигнала (Projected Output Waveform)

Подключен

(Connected)

Подразумевать

(Imply)

Подтип

(Subtype)

—    Параллельные операторы выполняются асинхронно без определенной относительной последовательности. Параллельные операторы используются для описания потока данных и структуры (9)

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

—    Параметр генерации объявляется оператором генерации (9.7)

—    Параметр настройки является константой, описанной в объявлении компонента или в объявлении объекта. В отличие от констант, значение параметра настройки может быть задано извне либо в операторе конкретизации компонента, либо в спецификации конфигурации (1.1.1.1)

—    Параметр цикла объявляется самим оператором цикла (8.8)

—    В данном цикле моделирования сигнал, не являющийся активным, считается пассивным (12.6.1)

—    Считается, что оператор процесса является пассивным процессом, если ни сам процесс, ни какая-либо из процедур, для которых этот процесс является родителем, не содержат оператор назначения сигнала (9.2)

—    Один из элементов, составляющих выражение, называется первичным (7.1)

— Переменная — объект с единственным текущим значением (4.3.1.3)

— Перечисляемый тип представляет собой тип, значения которого определяются значением списка или перечислением этих значений. Значения представляются интервалами перечисления (3.1, 3.1.1)

—    Плавающие типы обеспечивают приближенное представление действительных чисел (3.1, 3.1.4)

—    Планируемая выходная форма сигнала состоит из последовательности, содержащей одну или более транзакций, представляющих текущее и планируемые будущие значения драйвера (9.2.1)

—    Формальный порт, сопоставленный с фактическим портом или сигналом, считается подключенным. Формальный порт, сопоставленный с зарезервированным словом open, считается неподключенным (1.1.1.2)

—    Считается, что связывающее указание в спецификации конфигурации подразумевает объект проекта, обозначаемый непосредственно, косвенно или по умолчанию (5.2.1.1)

—    Подтип — тип вместе с наложенным ограничением (3)

Страница 14

ГОСТ Р 50754-95

—    Подтипом индекса для конкретной позиции индекса в массиве является подтип, обозначаемый меткой типа в соответствующем определении подтипа индекса (3.2.1)

—    Подтипом результата функции является подтип значения, возвращаемого этой функцией (2.1)

Подтип индекса (Index Subtype)

Подтип результата (Result Subtype)

Подходить

(Appropriate)

Подэлемент

(Subelement)

Позиционное

сопоставление

(Positional

Association)

Полное объявление (Full Declaration)

Полностью связан (Fully Bound)

Полный контекст (Complete Context)

Порт

(Port)

Последовательный

оператор

(Sequential Statement)

Прсдвыиолнение

(Elaboration)

Преобразуемый

(Convertible)

Принадлежать диапазону (Belong)

Принадлежать подтипу (Belong)

Приостанавливать

(Suspend)

—    Считается, что префикс подходит для типа, если тип этого префикса является рассматриваемым типом или тип префикса является ссылочным типом, который указывает на рассматриваемый тип (6.1)

—    Термин “подэлемент" используется взамен термина "элемент”, когда необходимо обозначить либо элемент, либо элемент другого элемента. В тех местах, где подэлементы исключены, используется термин “элемент" (3)

—    Считается, что элемент сопоставления является позиционным, если он не содержит явного формального указателя; в этом случае фактический указатель в данной позиции списка сопоставления относится к элементу интерфейса, стоящему в той же позиции в списке интерфейса (4.3.3.2. 7.3.2)

—    Полное объявление константы представляет собой объявление константы, стоящее в теле пакета и имеющее тог же идентификатор, что и неполное объявление константы, стоящее в соответствующем объявлении пакета. Полным объявлением типа является объявление, соответствующее неполному объявлению типа (2.6)

—    Экземпляр компоненты является полностью связанным, если связывающее указание для этого экземпляра подразумевает и объект и архитектуру (5.2.1.1)

—    Полным контекстом является либо объявление, либо спецификация, либо оператор (10.5)

—    Портом является сигнал, описанный в списке интерфейса объявления объекта или в списке интерфейса объявления компонента. Кроме характеристик сигналов, порт имеет сопоставленный ему вид; этот вид ограничивает направления прохождения данных, допустимые для этого порта (1.1.1.2, 4.3.1.2)

—    Последовательные операторы выполняются последовательно один за другим. Они используются для алгоритмического описания (8)

—    Процесс, при помощи которого объявление достигает своего эффекта, называется предвыполнением объявления. После своего прсдвыполнения объявление считается прсдвыполненным. До окончания своего предвы-полнения объявление считается (а также и до прсдвыполнения) не прсдвыполненным (12)

—    Операнд является преобразуемым, если существует неявное преобразование типа операции в данный тип (7.3.5)

—    Считается, что значение V принадлежит диапазону, если отношсиит (нижняя граница диапазона < - V) и (V < - верхняя граница диапазона) оба являются истинными (3.1)

—    Считается, что значение принадлежит подтипу конкретного типа, если оно принадлежит этому типу и удовлетворяет наложенному ограничению (3)

—    Процесс, который прекратил свое выполнение и ожидает событие или истечение временного интервала, считается приостановленным (12.6.3)

9

Страница 15

ГОСТ Р 50754-95

Простое имя понятия — это либо идентификатор, сопоставленный этому понятию при его объявлении, либо другой идентификатор, сопоставленный этому понятию в объявлении дополнительного имени

(6.2)

Считается, что два списка этих параметров имеют один и тот же профиль типа параметров, если и только если они содержат одинаковое количество параметров и в каждой позиции списков соответствующие параметры имеют один и тот же базовый тип (2.3)

Простое имя (Simple Name)

Профиль типа параметров (Parameter Tvpe Profile)

Профиль типа параметров и результата

(Parameter and Result Type Profile

Пустая транзакция (Null Transaction)

Пустое сечение (Null Slice)

Пустой диапазон (Null Range)

Пустой массив (Null Array)

Пустой элемент формы сигнала

(Null Waveform Element)

Рабочая библиотека (Working Library)'

Разрешение

(Resolution)

Разрешенное значение (Resolved Value)

Разрешенный сигнал (Resolved Signal)

Распространяется

(Extend)

Регистр

(Register)

Регулярная структура (Regular Structure)

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

Транзакция, получаемая вычислением пустого элемента формы сигнала, является пустой транзакцией (8.3.1)

Сечение, дискретный диапазон которого есть пустой диапазон, является пустым сечением (6.5)

Пустой диапазон — это диапазон, задающий пустое подмножество значений; диапазон L to R является пустым диапазоном, если L>R; диапазон L downto R является пустым диапазоном, если l.<R (3.1)

Если в ограничении индекса массива какой-либо из дискретных диапазонов определяет пустой диапазон, то такой массив является пустым массивом, не имеющим компонентов (3.2.1.1)

Пустой элемент формы сигнала используется для отключения драйвера защищенного сигнала (8.3.1)

Библиотека Проекта, в которую помещается результат анализа (библиотечный модуль) модуля проекта, является рабочей библиотекой

(11.2)

Разрешение — процесс выявления разрешенною значения разрешенного сигнала, основанный на значениях множества источников этого сигнала (2.4, 4.3,1.2)

Разрешенным значением сигнала является результат функции разрешения, сопоставленной с этим сигналом, определяемый как функция от множества входов, представленных источниками этого сигнала (2.4, 4.3.1.2)

Разрешенный сигнал — сигнал, который имеет сопоставимую ему функцию разрешения (4.3.1.2)

Если считается, что часть текста в области объявлений с разобщенными частями распространяется от некоторой особой точки раздела объявлений до конца этой области, то эта часть является соответствующим подмножеством этой области объявлений (и не включает промежуточных сегментов объявлений, стоящих между объявлением интерфейса и соответствующим объявлением тела) (10.1)

Регистр — это один из видов защищенного сигнала. Регистр сохраняет свое последнее значение даже в том случае, если все его драйверы отключены (4.3.1.2)

Регулярная структур;! состоит из экземпляров одного или более компонентов, устроенных и взаимосвязанных (при помощи сигналов)

Страница 16

ГОСТ I» 50754—95

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

Считается, что процесс или подпрограмма являются родителем данной процедуры, если этот процесс или подпрограмма содержат оператор вызова процедуры этой процедуры или сс родителя (2.2 )

Родитель

(Parent)

Самый длинный статический префикс (Longest Static Prefix

Связанный

(Bound)

Сечение

(Slice)

Сигнал

(Signal)

Символьный тип (Character Type)

Скалярный тип (Scalar Type)

Скрытый

(Hidden)

Слева от (То the Left Of>

Событие

(Event)

Совместимый

(Compatible)

Совмещение

(Overloading)

Согласование

(Conform)

—    Самым длинным статическим префиксом имени сигнала ивлястся само имя, ссли оно является статическим именем сигнала; в прошеном случае им является самый длинный префикс имени, являющегося статическим именем сигнала (6.1)

Метка считается связанной, ссли ома идентифицирована в списке экземпляров спецификации конфигурации <$.2>

Сечением является одномерный массив, состоящий из последовательности следующих друг за другом элементов другого одномерного массива (6.5)

—    Сигнал — обьект, имеющий историю своих прошлых значений. Сигнал может иметь множество драйверов, каждый из которых имеет свое текущее значение и планируемые будущие значения. Термин "сигнал" относится к объектам, описанным либо при помощи объявлений Сигнала, либо при помощи объявлений порта (4.3.1.2)

—    Перечисляемый тип является символьным типом, ссли, по крайней мере, один из его литералов перечисления является символьным литералом (3.1.1)

—    Скалярный тип — тип, значения которого не имеют элементов. Скалярными типами являются: целые, плавающие, физические и перечисляемые типы (3, 3.1>

—    Объявление может быть скрыто в своей области действия, если последняя содержит омограф этого объявления. Скрытое объявление не является непосредственно видимым (10.3)

—    Считается, что значение VI находится слева от значения V2 внутри данного диапазона, ссли оба они принадлежат этому диапазону и V2 следует за VI (в случае восходящего диапазона) или V2 предшествует VI (в случае нисходящего диапазона) (3.1)

—    Считается, что на сигнале произошла событие, если текущее значение этого сигнала изменилось в результате замещения этого сигнала его эффективным значением (12.6.1)

—    Ограничение диапазона совместимо с подтипом, ссяи каждая граница этого диапазона принадлежит этому подтипу или если это ограничение

• диапазона определяет пустой диапазон. Ограничение индекса совместимо с индексируемым типом, ссли и только ссли ограничение, определяемое каждым дискретным диапазоном н этом ограничении индекса, совместимо с соответствующим подтипом индекса и этом

индексируемом типе (3.1, 3.2.1)

—    Идентификаторы или литералы перечисления, обозначающие два разных понятия, считаются совмещенными. Совмещенными также могуг б14ть литералы перечисления, подпрограммы и предопределенные операторы (2.3.1, 3.1.1)

—    Считается, что две спецификации программы согласуются, ссли (исключая ряд допустимых минимальных вариаций) они представлены одной и той же последовательностью лексических элементов, и

п

Страница 17

ГОСТ I» 50754—9;

соответствующим лексическим элементам лается правилами видимости одинаковое значение. Согласование аналогично определено для объявления неполных констант (2.7)

Соответствующими элементами являются элементы двух значений составного типа, определенных таким образом, что они подходят друг другу при использовании их в ряде логических операций и операциях отношения (7.2.2)

Соответствующий

элемент

(Matching Element)

Сопоставленный драйвер (Associated Driver)

Составной тип (Composite Туре)

Спецификация

(Specification)

Спецификация

подпрограммы

(Subprogram

Specification)

Список интерфейс;! (Interface List)

Список интерфейса настройки (Generic Interface List)

Список интерфейса параметров (Parameter Interface List)

Список интерфейса портов

(Port Interface List)

Список сопоставления (Association List)

Ссылочный тип (Acccss Type)

Статический

(Static)

Статический диапазон (Static Range)

Статическое имя (Static Name)

Статическое имя сигнала

(Static Signal Name)

Сопоставленный драйвер для оператора назначения сигнала — это отдельный драйвер этого сигнхта в (явном или эквивалентном) операторе процесса, содержащем этот оператор назначения (9.2.1)

Составной тип — тип, значения которого состоят из элементов. Имеются два класса составных типов: индексируемый и структурный типы (3, 3.2)

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

Спецификация подпрограммы задаст обозначение подпрограммы, все формальные параметры подпрограммы (если они есть) и тип результата (в случае, если подпрограмма является функцией) (2.1)

Список интерфейса описывает объекты интерфейса, требуемые подпрограммой, компонентом, объектом проекта или оператором блока (4.3.3.I)

Список интерфейса настройки определяет локальные или формальные константы настройки (1.1.1.1, 4.3.3.1)

Список интерфейса параметров описывает параметры для подпрограммы. Он может содержать объявления констант интерфейса, объявления переменных интерфейса, объявления сигналов интерфейса или комбинацию этих объявлений (4.3.3.1)

Список интерфейса портов описывает порты блока, компонента или объекта проекта. Он состоит только из объявлений сигналов интерфейса (1.1.1.2, 4.3.1.1)

Список сопоставления устанавливает соответствие между именами локальных или формальных портов или параметров и локальными или фактическими именами и выражениями (4.3.3.2)

Значение ссылочного типа может указывать на объект, созданный генератором (3.3)

См. локально статический и глобально статический

Статическим диапазоном является диапазон, границы которого представлены статическими выражениями (7.4)

Имя считается статическим, если каждое выражение, входящее в это имя как часть (например, выражение индекса), является статическим (6.1)

Статическое имя сигнала — это статическое имя, обозначающее сигнал (6.1)

Страница 18

ГОСТ Р 50754-95

Структурный тип является составным типом. Значения структурного типа состоят из именованных элементов (3.2.2, 7.3.2.1).

Текущим значением драйвера является компонент значения транзакции, компонент времени которой не превышает текущего времени моделирования (9.2.1)

Структурный тип (Record Туре)

Текущее значение (Current Value)

Тело архитектуры (Architecture Body)

Тип

(Туре)

Транзакция

(Transaction)

Транспортная задержка (Transport Delay)

Удовлетворять

(Satisfy)

Указываемый подтип (Designated Subtype)

Указываемый тип (Designated Туре)

Указывать

(Designate)

Укороченная операция

(Short_Circuit

Operation)

Универсальный

действительный

(Univcrsal_Real)

Универсальный целый (Universaljntcger)

Упорядоченный слева направо

(Lcft_to_Right Order)

Тело архитектуры описывает внутреннюю организацию или функционирование объекта проекта. Каждое тело архитектуры, сопоставленное с конкретным объявлением объекта проекта, определяет уникальный объект проекта. Архитектура может быть использована для описания поведения, данных или структуры объекта проекта (I, 1.2)

Тип — множество значений и операций над ними (3)

Транзакция представляет собой совокупность, состоящую из двух компонентов: значения и времени. Компонент значения представляет (текущее или) будущее значение драйвера; компонент времени представляет относительную задержку до того момента, когда это значение станет текущим (9.2.1)

транспортная задержка является дополнительной моделью задержки для назначения сигнала. Транспортная задержка является характеристикой устройств (таких как линии передачи), которые выставляют бесконечно малую частоту срабатывания: любой импульс передается независимо от того, насколько мала его длительность (Н.З)

Считается, что значение удовлетворяет ограничению, если это значение находится в подмножестве, определяемом этим ограничением (3, 3.2.1.1)

Указываемым подтипом ссылочного типа является подтип, определяемый указанием подтипа в описании этого ссылочного типа

(3.3)

Указываемым типом ссылочного типа является базовый тип подтипа, определяемого указанием подтипа в описании этого ссылочного типа

(3.3)

Считается, что непустое ссылочное значение указывает на объект

(3.3)

Укороченная операция — операция, для которой правый операнд вычисляется только в том случае, хогда левый имеет определенное значение. Укороченными операциями являются предопределенные логические операции aad. or. nand и nor. определенные для операндов типов BIT и BOOLEAN (7.2)

Плавающие литералы — литералы анонимного предопределенного типа, называемого универсалыый_(кйствительный в данном руководстве (3.1.4, 7.3.1)

Целые литералы — литералы анонимного предопределенного типа, называемого универсальный _-\елый в данном руководстве (3.1.2, 7.3.1)

Последовательность значений конкретного диапазона является упорядоченной слева направо, если каждое значение в этой последовательности стоит левее следующего значения в этой последовательности внутри этого диапазона (за исключением последнего значения) (3.1)

13

Страница 19

ГОСТ Р 50754-95

—    Файловые типы обеспечивают доступ к файлам, находящимся в среде главной системы (3, 3.4)

—    Файл проекта представляет собой последовательность, состоящую из одного или более модулей проекта (11.1)

Файловый тип (File Type)

Файл проекта (Design File)

Фактический параметр (Actual)

физический тип (Physical Туре)

Формальный параметр (Formal)

Форма сигнала (Waveform)

Функция разрешения (Resolution Function)

Целый тип (Integer Туре)

Числовой тип (Numcric Туре)

Читать

(Read)

Шина

(Bus)

Экземпляр

(Instance)

Элемент сопоставления (Association Element)

Эффективное значение (Effective Value)

Ядро модели (Kernel Process)

—    Фактический параметр зто либо выражение, либо порт, либо сигнал, либо переменная, сопоставленные с формальным портом, формальным параметром или формальным параметром настройки (1.1.1.2. 4.3.3.2, 5.2.1.2)

—    Физический тип используется для представления измерений некоторой величины (3.1, 3.1.3)

—    Формальным параметром является либо формальный порт или формальный параметр настройки объекта проекта, либо формальный параметр подпрограммы (2.1, 2.1.1, 4.3.3.2, 5.2.1.2)

—    Форма сигнала состоит из серий транзакций. Каждая транзакция представляет будущее значение драйвера сигнала. Все транзакции в форме сигнала упорядочены по времени.то есть одна транзакция возникает перед другой в том случае, если первая представляет значение, запланированное на более ранний срок, чем значение, представленное другой транзакцией (8.3)

—    Определяемая пользователем функция, вычисляющая разрешенное значение разрешенного сигнала, называется функцией разрешения (2.4, 4.3.1.2)

—    Значения целого типа представляют целые числа внутри заданного диапазона (3.1, 3.1.2)

—    Числовым типом является либо целый, либо плавающий, либо физический тип (3.1)

—    Считается, что значение объекта читается, если имеется ссылка на его значение или на его атрибут <4.3.3)

—    Шина является одним нз видов защищенного сигнала. Шина принимает задаваемые пользователем значения, когда все ее источники отключены (4.3.3, 4.3.1.2)

—    Оператор конкретизации компонента представляет экземпляр соответствующего компонента. Каждый экземпляр компонента может иметь различные фактические параметры, сопоставляемые с его локальными портами или параметрами настройки (9.6.1)

—    Элемент сопоставления связывает фактический или локальный параметр с локальным или формальным параметром (4.3.3.2)

—    Эффективное значение конкретного Сигнала представляет собой значение, получаемое вычислением ссылки на этот сигнал внутри выражения (12,6.1)

—    Ядро модели осуществляет выполнение операций ввода/вывода, распространение значений сигналов и изменение значений неявных сигналов (таких, как S’Stablc(N)); а также выявление происходящих событий, выполнение соответствующих процессов в ответ на эти события (12.6)

1 ОБЪЕКТЫ ПРОЕКТА И КОНФИГУРАЦИИ

Объект прискта (</csl$a entity) является первичной абстракцией аппаратных средств в VHDL. Он представляет собой часть аппаратного проекта, который имеет четко определенные входы и выходы и который выполняет четко определенную функцию. Объект проекта может представлять всю проектируемую систему, некоторую подсистему, плату, кристалл, макро-ячейку, логический элемент или любой другой

Страница 20

ГОСТ I» 50754—95

уровень абстракции, находящийся между перечисленными. Конфигурация (configuration) может быть использована для описания того, как объекты проекта должны быть соединены для создания полного проекта.

Объект проекта может быть описан в терминах иерархии йлокоа (Mocks), каждый из которых представляет часть всего проекта. Блоком верхнего уровня в такой иерархии является сам объект проекта; такой блок является <тсишим (external) блоком, который располагается в библиотеке и может быть использован в качестве компонента в других проектах. Вложенные блоки в этой иерархии являются внутренними (infernal) блоками, описанными с помощью операторов блока <см. 9.!>.

Объект проекта может также быть описан в терминах взаимосвязанных компонентов. Каждый компонент объекта проекта может быть связан с объектом проекта более низкого уровня для того, чтобы определить структуру или поведение этого компонента. Результатом успешной декомпозиции объекта проекта в компоненты и связывания этих компонентов с другими объектами проекта, которые в свою очередь могут быть декомпозированы таким же способом, является иерархия объектов проекта, представляющих весь проект в целом. Такая совокупность объектов проекта называется иерархией проекты (design hierarchy). Само связывание, необходимое для описания иерархии проекта, может быть задано в конфигурации объекта верхнего уровня в этой иерархии.

В данном разделе даны способы описания объектов проекта и конфигураций. Объект проекта описывается объявлением объекта (entity declaration) вместе с соответствующим архитектурным телом (architecture body). Конфигурация описывается объявлением конфигурации (configuration declaration).

1.1. Объявления объектов

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

Пример —

cntity^dcclnration :: * entity identifier is cnlily_hcadcr cntity_dcclarativc_pn ri ( begin entity_statenient_part ] end 1 entity_simple_name I;

Заголовок объекта (entity header) и раздел объявлений (entity declarative part) состоят из описательных элементов, присущих каждому объекту проекта, чей интерфейс описывается данным объявлением объекта. Раздел операторов объекта (entity statement part), сели он имеется, задает параллельные операторы, присутствующие в каждом объекте проекта такого класса.

Если в конце описания объекта используется простое имя (simple name), то оно должно совпадать с идентификатором (identifier) этого описания.

1.1.1 Заголовок объекта

Заголовок объекта содержит объявления объектов, используемых для связи между объектом проекта и окружающей средой.

cntity_header :: -

I /orm«/_generic_clause ]

[ form u/_port_cl a use |

gcncric_dausc :: -

generic (gcncricjlst);

port_clausc :: -port (portjist);

Список параметров настройки (generic list) в формальном описании настройки (formal gcncric clause) задает общие константы, значения которых определяются окружающей средой. Список портов (port list) в формальном описании порточ (formal port clause) задает нходныо/выходные порты объекта проекта.

15

Страница 21

ГОСТ Р 50754-95

В определенных случаях имена общих констант и портов, объявленных в заголовке объекта, становятся видимыми вне объекта проекта (см. 10.2 и 10.3).

Примеры

1    Объявление объекта, содержащее только объявление портов:

entity Full_Addcr is D

port (X, Y, Cin : in Bit; Сои I, Sum: out Bit);

end Full_Adder;

2    Объявление объекта, содержащее также объявления параметров настройки:

entity AndGate is generic <N: Natural : - 2); port

(Inputs: in Bil_Vcctor (1 to N);

Result: out Bit);

end AndGate;

3    Объявление объекта, ничего не содержащее:

entity TcstBcnch is

end TcstBcnch;

1.1.1.1    Параметры настройки

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

Пример —

gcnericjist :: - gen ericj n t с rfа с с _l i s t

Параметры настройки задаются при помощи списка интерфейса настройки (generic interface list); списки интерфейса описаны в 4.3.3.1.

Каждый элемент интерфейса в таком списке задаст формальный параметр настройки. Значение формального параметра настройки может быть задано соответствующим фактическим значением в списке соответствия параметров настройки. Если для данного формального параметр;» настройки не задано соответствующее фактическое значение, но задано выражение для неявного значения этого параметра, то значением параметра является значение этого выражения. Считается ошибкой, если для формального параметра настройки не задано фактическое значение, а в соответствующем элементе интерфейса отсутствует выражение для неявного значения.

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

1.1.1.2    Порты

Порты обеспечивают каналы для динамической связи между блоком и окружающей средой. Нижеследующее относится как к внешним блокам, описанным как объекты проекта, так и к внутренним блокам, описанным как операторы блока.

portjist :: - por/jntcrfacejisi

Порты блока задаются списком интерфейса портов (port interface list); списки интерфейса описаны в 4.3.3.1. Каждый элемент интерфейса в этом списке задаст формальный порт. Порты блока могут быть сопоставлены с сигналами из окружающей среды, в которой этот блок используется, с целью взаимодействия с другими блоками в этой среде. Сам порт является сигналом (см. 4.3.1.2), таким образом формальный порт некоторого блока может быть сопоставлен с портом объемлющего блока. Порт или сигнал, сопоставленный с конкретным формальным портом, называется фактическим {actual), соответствующим этому формальному порту (см. 4.3.3.2). Фактический порт или сигнал должен обозначаться статическим именем (см. 6.1).

2-2-1X06

16

Страница 22

ГОСТ Р 50754-95

Если после того, кок конкретное описание является пред вы полненным (см. раздел 12), формальный порт сопоставлен с фактическим портом, то в зависимости or вида формального порта (см. 4.3.3) накладываются следующие ограничения:

1)    Для формального порта вида in сопоставляемый фактический порт может быть только портом вида in, inout или buffer.

2)    Для формального порта вида out сопоставляемый фактический порт может быть только портом вида out или inout.

3)    Для формального порта вида inout сопоставляемый фактический порт может быть только портом вида inout.

4)    Для формального порта вида buffer сопоставляемый фактический порт может быть только портом вида buffer.

5)    Для формального порта вида linkage сопоставляемый фактический порт может быть портом любого вида.

Порт вида buffer может иметь по крайней мере один источник (см. 4.3.1.2). Более того, любой фактический порт, сопоставляемый с формальным портом вида buffer, может иметь по крайней мерс один источник.

Если формальный порт сопоставляется с фактическим портом или сигналом, то считается, что этот порт подключен <connected>. Если вместо отого формальный порт сопоставляется с зарезервированным словом open, то считается, что этот порт отключен (unconnected). Порт вида in может быть отключен только в том случае, если его объявление содержит неявное выражение (см. 4.3.3). Порт любого вида, отличного от in, можег быть отключенным, если его тип не является неограниченным индексируемым типом.

1.1.2 Раздел объявлений объекта

Раздел объявлений конкретного объекта содержит объявления, общие для всех объектов проекта, чей интерфейс определяется этим объявлением объекта.

entity_declarative_part :: »

{cntity_dcc!arativc_ilcm}

cntity_dcclarativc_itcm :: -subprogra m_decla ra t ion I subprogram_body I typc_dcclaration I subtype.dcclaraiion I cons tan (.declaration I signal_declaration I file_declaration I alias_declaration I attribute_declaration I atlribure_specificalion I disconnection_specification I use_clause

Имена, описанные в сегментах объявления (dcclarativejtcm) конкретного объявления объекта, видимы внутри тел соответствующих объектов проекта, а также внутри определенных частей соответствующего объявления конфигурации.

Пример

entity ROM is

port ( Addr : in Word;

Data : out Word;

Sel : in Bit); type Instruction is array (1 (o S) of Natural - ; type Program is array (Natural range < >) of Instruction;

use Work.OpCodes.all, Work.RcgistcrNames.all;

constant ROM Code : Program : =

(

(STM, R14, RI2, 12, R13),

(LD, R7, 32, 0. RJ),

(BAL, R14, 0, 0, R7),

17

Страница 23

ГОСТ Р 50754-95

И Т.Д.

):

end ROM;

1.1.3 Раздел операторов объекта

Раздел операторов объекта содержит параллельные операторы, общие для всех объектов проекта этого класса.

entity_staiement_pari :: =

{cniiiy_statcment}

entityjstatement :: -

concurrent_asscrlion_siatcmcnt I passiw_concurrent_procedure_caH I /><wsiw_proccss_slatcment

Раздел операторов объекта может содержать только три вида параллельных операторов: параллельный оператор утверждения, параллельный оператор вызова процедуры и оператор процесса. Причем последние два вида должны использоваться только в пассивной форме (см. 9.2). Указанные операторы могут быть использованы для контролирования рабочих режимов или характеристик объекта проекта.

Пример —

entity Latch is

port (Din: in Word:

Dout: out Word;

Load: in Bit;

Clk: in OBit); constant Setup: Time : ■ 12ns; constant PulscWidlh: Time : = 50ns;

use Work.TimingMonitors.all:

begin

assert Clk *» T or Clk’Delayed’Stable (PulseWidth);

ChcckTiming (Setup, Din, Load, Clk);

end;

1.2. Архитектурные тела

Архитектурное тело описывает тело объекта проекта. Оно задаст взаимосвязь между входами и выходами объекта проекта и может быть выражено в терминах структуры, потока данных или поведения. Спецификация тела может быть полной или частичной.

architccture_body :: -

architecture identifier of entiiy_namc is architccturc_dcclarativc_parl begin

architecturc_statcment_part end | arcrti7t*e/»r<*_simplc_namc 1;

Идентификатор описывает простое имя архитектурною тела. Это имя выделяет архитектурное тело из совокупности тел, сопоставленных с одним и тем же объявлением объекта.

Имя объекта описывает имя объявления объекта, определяющего интерфейс объекта проекта. Для конкретного объекта проекта объявление объекта и сопоставленное с ним архитектурное тело должны находиться в одной и той же библиотеке.

Если в конце архитектурного тела используется простое имя. то оно должно повторять идентификатор этого тела.

Для конкретного объявления объекта может существовать более чем одно соответствующее архитектурное тело, каждое из которых описывает отличное тело с одним и тем же интерфейсом, и таким образом представляет (вместе с этим объявлением) отдельный объект проекта с тем же интерфейсом.

Страница 24

ГОСТ Р 50754-95

Примечание — Дна apxwiecryptiux гели, сопоставленные с дош.гмн объявлениями объект, **огу« иметь одмакбиме простые имени, мже «ян в*;е они находится о одной и to же библиотеке.

1.2.1    Раздел объявлений архитектурного тела

Раздел объявлений архитектурного тела содержит объявления, доступные для применения внутри блока, определяемого объектом проекта.

arcbiteciure_declaralive_part :: =

{ blok_dcclarativcJtcni }

bIok_declarjtive_itcm :: -s ubprogra m_dccla га I ion I subprogram_body I type_declamtion I subiype_decl.iralion I consiant_dcclaraiion I signal_declaration I filo_dedaration I alias_dcclaration 1 component_dcclaralion I attribuie_dedaralion I attribuic_spcelfk'aik>n

I configuraiion_specification I diseonneclion_spccification I usc_clause

Все виды объявлений описаны в разделе 4, все виды спецификаций описаны я разделе 5. Описание использования, которое делает внешне описанные имена видимыми внутри блока, дано в разделе 10.

1.2.2    Раздел операторов архитектурного тела

Раздел операторов содержит операторы, описывающие внугреннюю организацию и/или функционирование блока, определяемого объектом проект.)

arch>ieeturc_siatemenLporl :: *

I concurent_siatement J

Все операторы, входящие в состав раздела операторов, являются параллельными, выполняющимися асинхронно по отношению друг к другу1. Описание параллельных операторов приведено в разделе 9.

Примеры

1    Тело объекта Full_Adder

architecture Dataflow of Full_Adder is signal А, B: Bit;

begin A<- X xor Y;

B<- A and Cin;

Sum<- A xor Cin;

Cout<» В or (X and Y);

end Data Flow;

2    Тело объекта TestBcnch

library Test; use Test.Coniponents.all

architecture Structure of TestBench is component Full_Adder port (X. Y, Cm: Bit; Cout, Sum: out Bit);

signal А, В, C, D, E, F, C: Bit;

signal OK: Boolean;

begin

UUT:

Full_Addcr port_map (А, В, C, D, E);

Страница 25

ГОСТ Р 50754-95

Generator:

AddcrTcst port_map (А, В, С, F, G);

Comparator:

AddcrCheck port_map (D, E, F, G, OK);

end Structure;

3 Тело объекта AndGate

architecture Behavior of AndGate is begin

process (Inputs)

variable Temp: Bit; begin

Temp : - ’Г; for i in Inputs’Rangc loop if Inputs(i) - 'O' then Temp : - ’O’; exit; end if; end loop;

Result <- Temp after 10ns; end process; end Behavior;

1.3 Объявления конфигурации

Связывание экземпляров компонентов с объектами проекта осуществляется спецификацией конфигурации (см. 5.2); указанные спецификации применяются в разделе объявлении блока, в котором создаются соответствующие экземпляры компонентов. В определенных случаях возникает потребность оставить связывание экземпляров не заданным в конкретном блоке и отложить его на более поздний срок. Механизм задания таких отложенных связываний обеспечивается объявлением конфигурации.

configuration_declaration :: -configuration identifier of entity_namc is configuration_dcclarative_part block_conf igu ra t ion end | с onfigu ra tion_s i m p 1 e_na m e |;

configuration_declarativc_part :: -{ configuration_dcclarativc_item } configuration_dcclarative_item :: -usc_clausc

I a7tribure_spccification

Имя объекта (entity name) задаст имя объявления объекта, определяющее объект проекта, стоящий на вершине иерархии проекта. Для конфигурации конкретного объекта проекта объявление конфигурации и соответствующее объявление объекта должны располагаться в одной и той же библиотеке.

Если в конце объявления конфигурации стоит идентификатор, то он должен повторять идентификатор, стоящий вначале этого объявления.

Примечание — Объявление конфигурации достигает своего :*ффектп пссисло в результате нредвыполнения (см. раздел 12). Для объявления конфигурации не существует никаких, связанных с ним, динамических семантик.

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

Пример

- - архитектура микропроцессора:

architecture Structurc_Vicw of Processor is component ALU port (...) end component: component MUX port (...) end component; component Latch port (...) end component; begin

Al: ALU port map (...);

20

Страница 26

ГОСТ Р 30754-95

MI: MUX port map (...);

М2: MUX port map (...);

М3: MUX port map (...);

LI: Latch port map (...);

L2: Latch port map end Structure_View;

- - конфигурация микропроцессор;»:

library TTL, Work;

configuration V2_27 87 of Processor is use Work.all; for StructurcVicw for Al: ALU use configuration TTL.SN74LS181; end for;

for MI, М2, М3: MUX use entity Multiplex4 (Behavior); end for; for all: Litch - - используется неявная конфигурация end for, end for; end V4_27_87;

1.3.1 Конфигурация блока

Описание конфигурации блока определяет конфигурацию некоторого блока. Таким блоком может быть либо внутренний блок, определяемый оператором блока, либо внешний блок, определяемый объектом проекта.

block_configuration :: ■ for block_spccification { usc_clausc }

{ configurationjtem } end fon

block_specification :: -archi leclurc_n a m e I block._statcm en f_la be I

I gcnerate_statement_label [(index_specification) 1

index_specification :: = discrctc_rangc I 5fcrf/c_cxprcssion

configurationjtem :: -block_configuration I component_configuration

Спецификация блока (block specification) идентифицирует внутренний или внешний блок, по отношению к которому употребляется данная конфигурация блока (block configuration).

Если конфигурация блока стоит непосредственно внутри объявления конфигурации (configuration declaration), то спецификация блока и этой конфигурации блока должна быть представлена в виде имени архитектуры, а имя архитектуры должно обозначать тело объекта проекта, интерфейс которого определяется объявлением объекта, обозначаемым именем объекта, стояшим и объемлющем объявлении конфигурации.

Если конфигурация блока стоит непосредственно внутри конфигурации компонента (component configuration), то соответствующий компонент должен быть полностью связан (см. 5.2.1.1), спецификация блока такой конфигурации блока должна быть представлена в виде имени архитектуры, а имя архитектуры должно обозначать то же архитектурное тело, с которым связываются соответствующие компоненты.

Если конфигурация блока стоит непосредственно внутри другой конфигурации блока, то спецификация блока первой должна быть представлена в виде метки оператора блока или оператора генерации, а метка

21

Страница 27

ГОСТ Р 50754—95

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

Для любого имени, являющегося меткой оператора блока (block statement label), стоящего внутри конкретного блока, соответствующая конфигурация блока может использоваться в виде элемента конфигурации (configuration item) внутри конфигурации блока, соответствующей этому блоку.

Для любого имени, являющегося меткой оператор;» генерации (generate statement label), стоящего внутри конкретного блока, одна или более соответствующих конфигураций блока могут использоваться в виде элементов конфигурации внутри конфигурации блока, соответствующей этому блоку. Такие конфигурации блока употребляются в отношении неявных блоков, генерируемых вышеуказанным оператором генерации. Если такая конфигурация блока содержит спецификацию индекса (index specification) в виде дискретного диапазона, то эта конфигурация блока употребляется в отношении тех неявных операторов блока, которые генерируются в соответствии с заданным диапазоном значений соответствующего индекса генерации. Если такая конфигурация блока содержит спецификацию индекса в виде статическою выражения, то эта конфигурация блока употребляется только для того неявного оператора блока, который генерируется в соответствии с заданным значением соответствующего индекс! генерации. Если в такой конфигурации отсутствует спецификация индекса, то она употребляется в отношении всех неявных блоков, генерируемых соответствующим оператором генерации.

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

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

Примечание — Исходя из правил, описанных выше и в разделе 10. простое им*, видимое косвенно ■ конце раздела объявлении конкретного блока, также видимо косвенно в прс.гхмх любого элемента конфигурации, заключенного в соответствующую конфигурацию блока. Если такое имя водимо непосредственно в конке конкретного раздела объявлений блока, то оно также будет пилимо непосредственно н соответствующих элементах конфигурации, за исключением того случая, когда в соответствующем объявлении конфигурации не пользуется описание использования (use clause) для другого объявления с таким же простым именем, и область ДСЙС1ВИЯ л того описания охватывает все или часть этих элементов конфигурации Если такое описание использования применяется, то это имя непосредственно видимо внутри соответствующих плече i нов конфигурации, за исключением тех мест, которые подпадают под облаем, действия дополнительного описания использования <тех мест, где никакое имя не будет непосредственно видимо).

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

Примеры

1    Конфигурация блока для объекта проекта

for Work.ShiftRcg    -    -    имя    архитектуры

-    -спецификации конфигурации

-    -для блоков и компонентов

-    -внутри ShiftRcg end for;

2    Конфигурация блока для оператора блока

for В1    -    -    метка    блока

-    -спецификации конфигурации

-    -для блоков и компонентов

-    -внутри блока В1

end for.

1.3.2 Конфигурация компонента

Конфигурация компонента определяет конфигурацию одного и более экземпляров компонент:! в соответствующем блоке.

component_configuration :: -for componcnt_spccification I use binding_indication; |

[ block_configuration ) end for;

Спецификация компонента (component specification) (cm. 5.2) идентифицирует экземпляры компонента, в отношении которых данная конфигурация компонента применяется. Конфигурация компонента, стоящая

22

Страница 28

ГОСТ Р 50754-95

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

Считается ошибкой, если и явная спецификация конфигурации (в архитектурном теле) и конфигурация компонента, содержащая связывающее указание (binding indication) (в объявлении конфигурации), применяются к одному и тому же экземпляру компонента.

Если конфигурация компонента содержит связывающее указание (см. 5.2.1), то эта конфигурация компонента предполагает спецификацию конфигурацию для экземпляров компонента, к которым она применяется. Неявная спецификация конфигурации имеет ту же самую спецификацию компонента н то же самое связывающее указание, что и сама конфигурация компонента.

Если конкретный экземпляр компонента является несвязанным с соответствующим блоком, то любая явная конфигурация компонента для этого экземпляра, не содержащая явного связывающего указания, будет содержать неявное умалчиваемое связывающее указание (см. 5.2.2). Аналогично, если конкретный экземпляр компонента является не связанным с соответствующим блоком, то любая неявная конфигурация компонента для этого экземпляра будет содержать неявное умалчиваемое связывающее указание.

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

Примеры

1    Конфигурация компонента с связывающим указанием

for all: lOPort use entity StdCcll5.PadTriSi3ie4 (StdCells.DataFIow)

-    - для блоков и компонентов

-    внутри блока BI end for;

port map (Pout->A, Pin->B, l(b>Dir, Vdd«>Pwr, Gnd->Gnd>;

end for;

2    Конфигурация компонента, содержащая конфигурации блоков

for Dl: DSP

-    - связывание, заданное в объекте проекта, или неявное for FiJterer

-    - спецификации конфигурации для компонентов end for;

for Processor

-    - спецификации конфигурации для компонентов end for;

end for;

2 ПОДПРОГРАММЫ И ПАКЕТЫ

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

Существуют две формы подпрограмм: процедуры и функции. Вызов процедуры является оператором; вызов функции является выражением и возвращает одно значение. Описание подпрограммы может быть задано двумя частями, объявлением подпрограммы, описывающим соглашение по ее вызову, и телом подпрограммы, описывающим ее выполнение.

Пакеты также могут быть описаны двумя частями: объявлением пакета, описывающим видимое содержимое пакета, и телом пакета, описывающим внутренние детали. В частности, тело пакета содержит тела подпрограмм, описанных в объявлении пакета.

2.1 Объявления подпрограмм

Объявление подпрограмм (subprogram dedacation) описывает процедуру или функцию в зависимости от начального зарезервированного слова.

subprogram_dedacation :: •

»obprogram_specification;

subprogram_specification :: -

procedure designator ((formal_jxiranieterJist) J

23

Страница 29

ГОСТ I» 50754—95

I function designator |(formal_parameter_lisi) 1 return typc_mark

designator :: - identifier I opcrator_symbol

opcrator_symbol :: - siringjitcral

Спецификация процедуры задает ее обозначение и ее формальные параметры, если они есть. Спецификация функции задаст се обозначение, ее формальные параметры (если они есть) и подтип возвращаемого значения (тип результата).

Обозначение процедуры (designator) — это всегда идентификатор. Обозначение функции - это либо идентификатор, либо символ оператора (operator symbol). Обозначение функции в виде символа оператор;! используется для совмещения оператора. Последовательность символов, представленных символом оператора, должна иметь вид оператора, принадлежащего к одному из шести классов операторов, определенных в 7.2. При этом пробелы недопустимы, а буквы могут быть прописными или строчными.

II р и м е ч а и и с — Всс подпрограммы могут пмэынаться рекурсивно.

2.1.1    Формальные параметры

Список формальных параметров (formal parameter list) в спецификации подпрограммы (subprogram specification) описывает формальные параметры этой подпрограммы.

formal_paramctcr_list :: = paramclcr_intcrfaccjist

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

Единственными допустимыми значениями вида формальных параметров процедуры являются in. out и inout. Если значением вида является in, и класс объекта не задан явно, то в качестве последнего подразумевается constant. Если значением вида является out или inout. и класс объекта явно не задан, то в качестве последнего принимается variable.

Единственным допустимым значением вида формальных параметров функции является in (независимо от того, задан ли он явно или неявно). В качестве класса объема можно использовать только constant или signal. Если класс объекта явно не задан, то подразумевается constant.

В вызове подпрограммы формальному параметру класса signal должен сопоставляться фактический параметр того же класса. Формальному параметру класса variable должен сопоставляться фактический параметр того же класса. Формальному параметру класса constant должно сопоставляться выражение.

Примечание — Атрибуты фактическою параметра * подпрограмму не передаются, поэтому ссылки на атрибут формального параметра допустимы только d том случае, если этот формальный параметр имеет такой атрибут и эти ссылки возвращают значение этого атрибута, сопсста пленного с этим формальным параметром.

2.1.1.1    Передача параметров класс с о п a I а п I и variable

Для параметров класса constant или variable в вызов подпрограммы (или из него) пересылаются только значения фактических или формальных параметров. В данном разделе описаны способ таких ~ пересылок, а также связанные с ним привилегии доступа, допускаемые для параметров вышеуказанных классов.

Для параметров скалярного типа или ссылочного типа значение передается копированием. В начале каждого вызова (если режим параметра in или inout) значение фактического параметра копируется в сопоставленный с ним формальный параметр. После завершения выполнения тела подпрограммы (если режим параметра out или inout) значение формального параметра копируется обратно в сопоставленный ему фактический параметр.

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

24

Страница 30

ГОСТ Г' 50754-95

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

11 р и м е ч и м и е — В пределах телл ikwpovpjmmm формальней параметр подчинен любому ограиичениго, *ы7еыи<ннсму из указание полита, зачашшт в спецификации этого нарлчегра. Для форчалы*зг\» параметре» неограниченного индексируемого типа дмапахжы *т« каждоЛ ноаицим индекса получйк>тtя из фактического параметра, и формальный параметр ограничен этими дшнтонами.

Дм napa*«eipoe индексируемое или стру*туриого тияо* прпыгла передачи качений прслшзллгаюг. что сои к фактическому игрзчетру такого пта сеть обращение тллмс. по сяиочу мшу. то эффект ьыаома нолироф^ммы не зависит о« т«о. используется или нет реализацией копирование для передачи параметром. Если теки* каналов много бмнфимер. если .трутому фирмядьийчу гтрачегру сопоставлен гот же фактический изрочогр). то значаще формального iи:растра «ючетс* неопределенным после модификации фактического нарпжтра .» счс> чоднфмхаини другою с{>|рмалы*ого параметра Пр01рамча, моюякзукхнаа тз».0С неопределенное значение. яиллски ошибочной

2.1.1.2    Передача пирометров класса signal

Для формального параметра класса signal в вызов подпрограммы передаются ссылки на сигнал, драйвер этого сигнала или все вместе.

Для параметра класса signal с режимом in или inout фактический сигнал сопоставляется с соответствующим формальным сигналом в начале каждого вызова. С этого момента на время выполнения тела подпрограммы ссылка на формальный сигнал в пределах выражения эквивалентна ссылке на фактический сигнал.

Считается ошибкой, если атрибуты STABLE, QUIET и DELAYED формального сигнала любого режима читаются в пределах подпрограммы.

Оператор процесса содержит лрайвер для каждого <|>актнческого сигнала, сопоставленного с формальным сигналом вида out и inout в вызове подпрограммы. Аналогично подпрограмма содержит драйвер для каждого формального сигнала режима out или inout. объявленного в спецификации этой подпрограммы.

Для параметра класса signal вида inout или out драйвер фактического сигнала сопоставляется соответствующему драйверу формального параметра в начале каждого вызова. С этого момента на время выполнения тела подпрограммы присваивание драйверу формального сигнала эквивалентно присваиванию драйверу фактического сигнала.

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

11 р и м е ч « и и с — В нре,челах тела подпрограммы фзрмлльмкй «тал подчинен любому ограничен»*», шлтскакмиему из указали» подтипа, »д*ик<>го в аюцифмкации параметре. Для формально™ сигнала нсофяни-^еипого индексируемо» tvitfi границы получоютса из фактическою сигнала м формальный параметр офяиичен этими тряпицами.

Из ныикуизаииыч прппкл Следует. что процедура с па рамс трюм классл signal и видом oui или inout. лылыилемпя процессом. злчерш»скя до того, как лкйсе приепаивдиис огому параметру пну три зтоЛ ггроиедурн имеет лфс|ч*г. Присваииаииа дрпйоеру формального сигнала жвнеалентиы присяаияашым непосредственно лрагикру фактического Сигнала. со,чержа1цсмуси и процессе, вызывающем эту процедуру.

2.2    Тела подпрограмм

Тело подпрограммы (subprogram body) задает выполнение подпрограммы.

subprogram_body :: -

subprog га гп jspcci fi са 1 ion is subprogram_declarativc _pari begin

subprogram_statemcnt _part end I designator ];

subprogram_decIarative_part :: =

{ subprogram_dec]araiive_iiem }

subprogram_declarative_ileni :: w subprogram_dedaration I subprogram_body I lvpe_declaration I subtype_declaratk>n

Страница 31

ГОСТ I’ 50754-95

I conslant_declaration I variable_dcclaration I file_declaration I alias_dcclaration I attribute.. dcclaralion I attributc_spccification I usc_clausc

subprogram_statement_part :: =

{ scquential_statcment }

Объявление подпрограммы необязательно. Г1рн его отсутствии н роли объявления выступает спецификация подпрограммы (subprogram specification) в теле подпрограммы. Для каждого объявления подпрограммы должно быть соответствующее тело. Если задано и объявление подпрограммы и тело подпрограммы, то спецификация подпрограммы в теле подпрограммы должна согласовываться (см. 2.7) со спецификацией подпрограммы в объявлении подпрограммы. Болес того, и объявление, и тело подпрограммы должно стоять непосредственно в пределах одной и той же области объявлений.

Если в конце тела подпрограммы стоит обозначение (designator), то оно должно повторять обозначение этой подпрограммы.

Алгоритм, реализуемый подпрограммой, определяется последовательностью операторов, стоящих в разделе операторов подпрограммы (subprogram statement part).

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

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

Если функция является родительской для конкретной процедуры и процедура содержит ссылку на объект класса signal или variable, то объект должен быть описан внутри области объявлений, связанной с этой функцией, или внутри области объявлений, связанной с указанной процедурой. Аналогично, если функция содержит ссылку на объект класса signal или variable, то объект должен быть описан внутри области объявлений, связанной с этой функцией.

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

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

2.3 Совмещение подпрограмм

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

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

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

26

Страница 32

ГОСТ l> 50754—95

Примеры

1    - - Объявления совмещенных подпрограмм:

procedure Write <F: inoul Texi; Value: Integer); procedure Write (F: inout Text; Value: String);

procedure Check (Setup: Time; signal D: Data;

signal C: Clock); procedure Check (Hold: Time; signal C: Clock; signal D: Data);

2    - - Вызовы совмещенных подпрограмм:

Write (Sys_Output. 12);

Write (Sys_Error, "Фактический выход не соответствует ожидаемому");

Check (Sctup->IOns, D*>Bus, C->Clkl);

Check (HoId->5ns, D=>Bus, C->Clk2);

Check (15ns, Bus, Clk); - - двусмысленно, если

- - Data’Base ■ Clock’Base

Примечание — П понятие профиля типа параметров и результата не вход*' имена параметров, классы параметров, вид параметров, подтипы параметров или неявные выражения (а также и* наличие или отсутствие).

Неоднозначности могут <ио необязательно) возникать. когда фактические параметры вызова совмещенной подпрограммы сами являются выловами совмещенных функций, литералами или агрегатами. Неоднозначность может (но пеобаытелым» также возникнуть, когда несколько совмещенных педпротра.мм, принадлежащих различным пакетам, оказываются видимыми. Такие неоднозначности могут Сыть разрешены двумя способами: для некоторых или всех фактических параметров и для результата (если он есть) может быть использовано квалифицированное выражение; или имя 1Юдпрогрпммы может быть выражено более точно как расширсшмс имя (см. 6.3).

2.3.1 Совмещение операций

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

Спецификация подпрограммы унарного оператора должна иметь единственный параметр. Спецификация подпрограммы бинарного оператор;! должна иметь два параметра; в каждом использовании этого оператора первый параметр выступает в роли левого операнда, а второй - в роли правого операнда.

Для операторов “+" и " допускается совмещение - как унарного, так и бинарного операторов.

Примечание — Совмещение оператора равенства не влияет на выборку альтернатив в операторе выбора или п операторе выборочного назначения сигнала.

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

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

Примеры

1    type MVL is (’O’, ’Г, ’Z\ ’X’)

2    function “and** (L, R: MVL) return MVL; function “or” (L, R: MVL) return MVL; function “not” (R: MVL) return MVL;

3    signal Q, R, S: MVL;

4    Q <- ’X’ or ’P;

R <- “or” <’0\ ’Z*);

S <- (Q and R) or not S;

2.4 Функции разрешения

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

27

Страница 33

ГОСТ Р 50754-95

разрешения в объявления этих сигналов или объявления их подтипов. Сигнал с сопоставленной ему функцией разрешения называется разрешенным сигналом (см. 4.3.1.2).

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

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

Функции разрешения активизируются неявно в течение каждого цикла моделирования, в котором соответствующие разрешенные сигналы активны (см. 12.6.1). Каждый раз, когда активизируется функция разрешения, ей передается значение индексируемого типа, каждый элемент которого определяется соответствующим источником разрешенного сигнала, за исключением тех источников, которые являются драйверами, значения которых определяются пустыми транзакциями <см. 8.3.1.). Такие драйверы называются отключенными. Для определенных активизаций (особенно для тех, которые влекут разрешение источников сигнала, объявленного как шина) функция разрешения может быть активизирована с входным параметром в виде пустого массива; такое случается, когда все источники шины являются драйверами и все они отключены. В этом случае функция разрешения должна возвращать значение, представляющее такое состояние шины.

Пример

function WFRED_OR (Inputs: BIT_VECTOR) return BIT is constant FloatValuc: Bit 'O’;

begin

if Inputs’Length - 0 then

- - случай, когда все драйверы шины являются отключенными return FloatValuc;

else

for I in Inputs'Rangc loop if Inputs (I) - 'P then return ’Г; end if; end loop; return '0*;

end if;

end;

2.5 Объяв леи и я пакетов

Объявление пакета (package declaration) определяет интерфейс для пакета. Область действия объявления внутри пакета может быть расширена на другие модули проекта.

package_declaration :: -package identifier is

package_declaralivc_part end (/>ac£a£<T_simplc_namel;

packagc_declarative_part :: -{packagc_dcclarativc_ilcm}

package_declarativc_itcm :: -subprogram_dcclaration I typc_dcclaration I subtypc_dcclaration I constant_declaration I signal_declaration I file_declaration I alias_dcclaralion I component_dcclaration I atlributc_dcclaration

3-1—1406

28

Страница 34

ГОСТ Р 50754-95

I attribute_specification I disconnectionjspccification I use_clausc

Если в конце объявления пакета стоит простое имя (simple name), то оно должно повторять идентификатор этого объявления.

Элементы, описанные внутри объявления пакета, становятся видимыми косвенно внутри конкретного модуля проекта везде, где имя этого пакета видимо в этом модуле. Указанные элементы могут также быть непосредственно видимыми при помощи соответствующего описания использовании (см. 10.4).

Примечание— Наличие тсяд пакета ли» кех пакетов необязательно. В •меткости, тело пакет пеобматешк;, седи в обьвядкими пакета не «хкрхптся описания годпросрамм иди жпалимх кем кто иг.

Подпрограмма. написанная па другом в!ике. может йьиь wxryniu заданием ес интерфейса и *иде описания подпрограммы внутри обьиаленнв пакета. i«e имеющего соот*етствукхиоо тело Теля такой подпрограммы должно бм*» сопоставлено «бмалепию ее интерфейса егкхх&м. аажезшим «г рс&лиаяцим. Например, встроенные функции, пбеспсчмыеммс конкретной модслируюмкй программой, могли бы быiv ебмвдены именно таким способом, преднолатаетсм, что подпрограммы па других «мхах, объявленные таким путем, реализуют семантику. подразумеваемую их описаниями ишерфсйсов.

Примеры

1 Объявление пакета, не требующее тела пакета:

package TimeConstonts is

constant

tPLH:

Time

; a

10ns;

constant

tPHU

Time

: “

12ns;

constant

tPLZ:

Time

>

7ns;

constant

tPZL:

Time

: -

8ns;

constant

tPHZ:

Time

: “

8 ns;

constant

tPZH:

Time

: -

9ns;

end TimeConsiants;

2 Объявление пакета, которое может иметь тело пакета

package TriSiate is

type Tri is (’O', Т. 'Z\ ’E’);

function BitVal (Value: Tri) return Bit; function TriVat (Value: Bit) return Tri; type TriVcctor is array (Natural range < >) of Tri; function Resolve (Sources: TriVcctor) return Tri;

end TriStatc;

2.6 Тела    пакетов

Тело пакета (package body) определяет тела подпрограмм или значения неполных констант, описанных в объявлении пакета.

package body :: -

package body packagc_simple_name is package_bod y_d ecla ra t ive_pa r t end [package_simple_namej;

package_body_dcclarative_part :: -{package_body_dcclarativc_itcm}

package_body_dcclarativeJiem :: -subprogram_dcclaration I subprogram_body • typc_dec)aration I subtype_dec!aration 1 constant_declaration 1 filc_deciaratk>n ! alias_dectaration

I use_clause

Страница 35

ГОСТ Р 50754-95

Простое имя (simple name), стоящее в начале тела пакета, должно повторять идентификатор пакета. Если в конце тела пакета стоит простое имя, то оно должно совпадать с идентификатором в объявлении пакет;!. Наряду с такими элементами как объявление константы тело пакета может содержать другое объявления, способствующие определению тел подпрограмм, описанных в объявлении пакета. Элементы, объявленные в теле пакета, не могут быть видимыми вне этого тела.

Если конкретное объявление пакета содержит описание неполной константы (см. 4.3.1.1), то в соответствующем теле пакета должно появиться описание константы с тем же идентификатором. Такое описание объекта называется полным описанием неполной константы. Указание подтипа в полном описании должно согласовываться с указанием подтипа в неполном описании константы.

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

Пример —

package body TriSlatc is

function BitVal (Value: Tri) return Bit Is constant Bits: Bil_Vcctor : - “0100"; begin

return Bits (Tri’Pos(Value));

end;

function TriVal (Value: Bit) return Tri is begin

return Tri'Val (Bit’Pos(Value));

end:

function Resolve (Sources: TriVcctor) return Tri is Variable V: Tri : - ’Z’;

begin

for i in Sources’Range loop if Sources(i) /- ’Z’ then if V - 'T then V : = Sources(i); else

return ’E’; end if; end if; end loop return V; end;

end TriStatc;

2.7 Правила согласования

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

1)    Числовой литерал может быть замещен другим числовым литералом, если и только если оба они имеют одинаковое значение.

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

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

Согласование также определено для указаний подтипа в объявлениях неполных констант.

Примечание — Простое имя может быть заменено расширенным именем, даже если это простое имя является префиксом составного имени. Например, ооаавнос имя Q.R может быть заменено на P.Q.R. если Q объявлено непосредственно внугри Р.

30

Страница 36

ГОСТ Р 50754-95

СлСяункчий пример содержит спецификации. «норме не согла<унжа hj-яп кто. что не представлены одной и той же поелс.чожатс.и-моегью лексических ллсчетов.

ргосе<Ыс Р <Х. Y: INTEGER);

procedure Р (X: INTEGER; Y: IVTEGERV.

procedure P (X. Y : in INTEGER):

3 ТИПЫ

В данной главе описаны различные категории типов, предусматриваемые языком, а также особые типы, которые являются предопределенными. Описание всех предопределенных типов содержится в пакете STANDARD, объявление которого содержится в раалслс 14.

Тип характеризуется множеством значений и множеством операций. Множество операции над типом подразумевает явно описанные подпрограммы, имеющие параметры или результат этого типа. В это множество входят также предопределенные операторы (см. 7.2). Операции, обусловленные этими операторами, становятся неявно объявленными для конкретного описания типа сразу после этого описания независимо от того, имеются ли за этим описанием другие явные описания.

Имеются четыре класса типов. Скалярные типы — это целые, плавающие, физические типы и типы, определяемые перечислением их значений; значения этих типов не имеют элементов. Составные типы

—    это индексируемые и структурные типы; значения этих типов состоят из значений эдсмешов. Ссылочные типы обеспечивают доступ к объектам конкретного типа. Файловые типы обеспечивают доступ к объектам, содержащим последоватсльность значений конкретного типа.

Множество возможных значений объекта конкретного типа может подчиняться условию, называемому ограничением (сюда также входит случай, когда ограничение не устанавливает никаких граннц); считается, что значение удскиетаоряет ограничению, если оно удовлетворяет соответствующему условию. Подтип

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

Множестпо операций, определенных для подтипа конкретного типа, включает в себя операции, определенные для этого типа; однако операции присваивания для объекта, имеющего конкретный подтип, действительны только для тех значений, которые принадлежат этому подтипу. Дополнительные операции, такие как квалнфицированис (в квалифицированном выражении), явно определяются описанием подтипа.

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

Конкретный тип не должен иметь подэлементы. тип которых это сам тип. Имя класса типов в данном руководстве используется как квалификатор для объектов и значений, имеющих тип усматриваемого класса. Например, термин ‘’индексируемый объект" используется для объектов, типом которых является индексируемый тип; аналогично, термин "ссылочное значение" используется для значения ссылочного типа.

Примечание — Множество значений подтип — это лодмножеоио значений баз<*юго типи. Подмл^жестио не г/чшно быть собственным подмножеством.

3.1 С к и л я р н ы е тилы

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

scalar_iype_definition :: -

ели m era t ion_ty pc_d efi n i t ion I integer_type definition I floating_type_definition I physical_iype_<3efinilion

range_constraint :: - range range

range :: - range_aUribute_namc

1 simplc_cxpressioii direction siniplc_cxpression

direction — to » down to

31

Страница 37

ГОСТ Р 50754-95

Диапазон (range) залает подмножество значений скалярного типа. Диапазон является пустым диапазоном, если заданное подмножество пусто.

Диапазон L to R называется восходящим диапазоном; если L > R. то этот диапазон пуст. Диапазон L downto К называется нисходящим диапазоном; если L < R, то этот диапазон пуст. Меньшая из величин L и R называется нижней границей, а большая — верхней границей диапазона.

Считается, что значение V принадлежит диапазону, если отношения (нижняя граница <- V) и верхняя граница) верны и сам диапазон не является пустым. Операторы >, < и <- в вышестоящих определениях являются предопределенными операторами применимою скалярного типа.

Считается, что значение VI стоит левее значения V2 внутри конкретного диапазона, если обе» они принадлежат этому диапазону и либо V2 следует за VI, если диапазон является восходящим; либо V2 предшествует VI, если диапазон является нисходящим. Последовательность значений конкретного диапазона является упорядоченной слева направо, сели каждое значение в этой последовательности стоит левее следующего значения в этой последовательности внутри этого диапазона (за исключением последнего значения).

Если ограничение диапазона (range constraint) используется в указании подтипа, то тип выражений (а также тип границ атрибута-диапазона) должен совпадать с базовым типом, задаваемым обозначением типа в этом указании подтипа. Ограничение диапазона совместимо с подтипом, если каждая граница этого диапазона принадлежит этому подтипу, или это ограничение диапазона определяет пустой диапазон. В противном случае ограничение диапазона несовместимо с подтипом.

Направление ограничения диапазона совпадает с направлением диапазона, используемого в этом ограничении.

II [> н м с ч а и и с — Пропила нплсксиропании и итерации исиадиуки значения лискрс гимх пиши.

3.1.1    Перечисляемые типы

Описание перечисляемого Tifna определяет перечисляемый тип.

cnunicration_typc_definilion :: =

(enumerationJilcral, {, enumerationJitcral})

cnuinemtionjiteral :: - Identifier I characterjiieral

Идентификаторы и символьные литералы, задаваемые описанием перечисляемого типа, не должны повторяться. Каждая спецификация литерала перечисления (anumerationjiteral) является объявлением соответствующего литерала перечисления.

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

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

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

Каждое описание перечисляемого типа определяет восходящий диапазон.

Примеры

1    type MULTI_LEVEL_LOGIC is (LOW, HIGT, RISING, FALLING, AMBIGUOUS);

2    type BIT is CP, ’O’);

3    type SWITCH LEVEL is (’O’, M\ ’X’); — совмещение

’0‘ и T

3.1.1.1    П p с д о n p с д елейные перечисляемые m и n ы

Предопределенными перечисляемыми типами являются CHARACTER. BIT, BOOLEAN и

SEVER ITY_LEVEL.

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

Объявления предопределенных типов CHARACTER. BIT, BOOLEAN и SEVERITY_LEVEL содержатся в пакете STANDARD, описанном в разделе 14.

32

5-2—1406

Страница 38

ГОСТ I* 50754—95

II р и м с ч а н и с — I ^графические якмсшы предопределен! к<о nuta CIIARACl l!R прс.и'тппломы аборсмшурЫ!, cooiwrrciiiyioiucfi auopciuuiiypc ik'uckiiiii.iv снчналоп ASCII 'и i щелочением icv. коюрмс указами imi.kmc 1 -4*

Tun BOOl.RAN можс! 6i.ni. исшллмоеан для описания лмнчеекия схем как с пмеокич, taK п с таким пыниним уроннем » лавмсимосш от коикрешых иыорлнных функции ммшсршроАани* н или ш шил 111 I

3.1.2    Целые типы

Описание целого типа определяет целый тип, множество значений которого включает множество из заданного диапазона.

inlcgcr_lypc_definilion :: = rangc_constrait

Описание целого типа (integer type definition) определяет как тип, так и подтип этого типа. Сам тип является анонимным типом, диапазон которого устанавливается реализацией нот диапазон должен полностью покрывать диапазон, заданный в описании целой» типа. Подтип — эго именованный подтип указанного анонимного базовою типа, при этом в качестве имени этого подтипа используется имя, заданное в соответствующем объявлении типа, а диапазон подтипа — это заданный диапазон.

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

Целые литералы — это литералы анонимного предопределенного типа, называемого в данном руководстве как универсальный целый. Другие целые типы не имеют литералов. Однако для каждого целого типа существует неявное преобразование, которое преобразует значение типа упиы/калышй целый в соответствующее значение (если оно есть) этого целого типа (см. 7.3.5).

Помер позиции целого значения — это соответствующее значение типа универсальный целый.

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

Пределы ограничения диапазона целых типов, отличных от универсального целого, зависят от реализации. Реализация должна допускать объявление любого целого типа, диапазон которого находится в пределах от минус 2147483647 до плюс 2147483647 включительно.

Примеры

1    type    TWOS.COMPLEMENTJNTEGER is range -32768 ю    32767;

2    type    BYTE_LENGTH_INTEGER is range 0 to 255;

3    type    WORD INDEX is range 31 downto 0;

4    subtype HIGTH_BIT_LOW is BYTE_LENTH.INTEGER range    0    to 127;

3.1.2.1 II p с д о n p с д e л e н it ы e целые in и n ы

Единственным предопределенным целым типом является тип INTEGER. Диапазон типа INTEGER зависит от реализации, но при этом гарантируется, что он имеет пределы от минус 2147483647 до плюс 2147483647. Тип определен с восходящим диапазоном.

Примечание — Лиапаэон тина INTKCI'R ■ «оикрешой рел.ишцим может Оми, пмяолеп при помощи афибутои I.OW и IIIGII.

3.1.3    Физические типы

Значения физического типа представляют измерения некоторой величины. Любое значение физического типа — это целочисленное значение, кратное базовой единице измерения для этого типа.

physical_lype_definition :: -rangc_constraint units

basc_unit_declaration { secondary_unit_declaralion } end units;

basc_unil_declaration :: = identifier;

physicaljiteral :: - | abstractjitcral 1 unil_namc

Описание физического типа (physical type definition) определяет как тип, так и подтип этого типа. Сам тип является анонимным типом, диапазон которого устанавливается реализацией; этот диапазон

33

Страница 39

ГОСТ I* 50754—95

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

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

Каждое объявление единицы (либо базовой, либо вторичной) определяет ими единицы. Имена единиц, стоящие в объявлениях вторичных единиц (secondary unit declaration), должны быть явно или неявно определены в терминах целочисленных, кратных базовой единице объявления типа, в котором они стоят.

Абстрактный литерал (если задан), являющийся составной частью физического литерала, стоящего в объявлении вторичной единицы, должен быть представлен в виде целого литерала.

Физический литерал, состоящий исключительно из имени единицы, эквивалентен I (целого типа), за которой следует это имя.

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

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

Пределы ограничения диапазона физических типов зависят от реализации. Реализация должна допускать объявление любого физического типа, диапазон которого находится в пределах от минус 2147483647 до плюс 21474S3647 включительно.

Примеры

1    type TIME is range — IE18 to iE18

units

fs;    -    -    фемтосекунда

ps = 1000 fs; - - пикосскунда ns = 1000 ps: - - наносекунда us e 1000 ns; - - микросекунда ms “ 1000 us; - - миллисекунда sec - 1000 ms; - - секунда min - 60 sec; - - минута

end units;

2    type DISTANCE is range 0 to 1EI6

units

- - базовая единица:

A;

- - ангстрем

меры длины:

nm - 10 A;

- - нанометр

um “ 1000 nm;

- - микрометр »

mm = 1000 mm;

- - миллиметр

cm - 10 mm;

- - сантиметр

m - 1000 mm;

- - метр

km - 1000 m;

- - километр

Английские меры

длины:

mil - 254000 A;

- - .миллидюйм

inch = 1000 mil;

- - дюйм

ft - 12 iuch;

- - фут

yd - 3 ft;

- - ярд

fm - 6 ft;

- - сажень

mi = 5280 ft;

- - МИЛЯ

Ig = 3 mi;

- - лига

end units;

34

Страница 40

ГОСТ I» 50754—95

3 х: distance; у: lime; г: integer; х : - 5A+13fl—27inch; у : - 3ns+5min г ; = ns/ps; x : - у/10;

II p и ч с I п н с — Слелсгакм пмик'сюиших определений hkiiucicv следующее: гели I не n\«v»n н диапазон, заданный описанием фиамчеемхо типа. то ими uaaoortti единицы, стоящее отдельно, не я властен допустимым лшералом физн'кекого пша.

Дяи iipcoiSpaMMiuni меж;|у aiki|KiKiHi>iMH jiuwiikxii и фмнчсскпми лпа'Юппями мртлг бмп. нспол'-юкшы :it|>i<ivii.i I’OS и VAL

3.1.3.1    Пред о п р с д с л е и н ы с ф и а и ч с с к и с т и п ы

Единственным предопределенным физическим типом является тип TIME. Диапазон этого типа зависит от реализации, но при этом гарантируется, что он находится и пределах от минус 2147483647 до плюс 2147483647. Тип определен с восходящим диапазоном. Все спецификации задержек должны быть типа TIME. Объявление типа TIME содержится в пакете STANDARD (см. раздел 14».

По умолчанию базовая единица типа TIME (I фемтосекунда) является пределом разрешения для типа TIME. Любое значение типа TIME меньшее, чем этот предел, усекается до 0 временных единиц. Реализация может допускать, чтобы при конкретном выполнении моделирования <см. 12.6) в качестве продела расширения была выбрана вторичная единица типа TIME. Более того, реализации может ограничивать точность представления значений типа TIME и результатов выражений типа TIME при условии, что значения, имеющие такую же малую величину, что и предел разрешении, могут быть представлены в рамках этого ограничения. Считается ошибкой, если конкретная единица типа TIME стоит в любом месте внутри иерархии проекта, определяющем модель для исполнения, и номер позиции этой единицы меньше, чем номер позиции вторичной единицы, выбранной н качестве предела разрешения для типа TIME в течение выполнения этой модели.

Примечание— Выбирая птрмчпую единицу типа TIMR и качестве предела ралренкмиш для тип типа, можно доспнн» более х'штелмшю периода времени модслирояання с мснмлеЛ точнооьм пли наоиодхн, более короткой* периода ьрсмсни модслиропаюм с (косе имсхж<я~| точное!ьи>-

3.1.4 Плавающие типы

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

floating_iype_definition :: = rangc_consiraint

Описание плавающего типа <fIoating_type_definition) определяет как тип. так и подтип этого типа. Сам тип является анонимным типом, диапазон которого определяется реализацией; этот диапазон должен полностью покрывать диапазон, заданный в описании плавающего типа. Подтип - это именованный подтип указанного анонимного базового типа, при этом в качестве имени этого подтипа используется имя. заданное в соответствующем описании типа, а диапазон подтипа — :гто заданный диапазон.

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

Плавающие литералы — это литералы анонимного предопределенного типа, называемого в данном руководстве как универсальный действительный. Другие плавающие типы не имеют литералов. Однако для каждого плавающего типа существует неявное преобразование, которое преобразует значение типа универсальный действительный в соответствующее значение (если оно есть) этого плавающего типа (см. 7.3.5).

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

Пределы ограничения диапазона плавающих типов, отличных от универсального действительного, зависят or реализации. Реализация должна допускать объявление любого плавающего типа, диапазон которого находится в пределах от минус 1Е38 до плюс 1Е38 включительно. Представление плавающего типа должно включать как минимум шесть десятичных цифр точности.

3.1.4.1    Предопределенные плаваю щ и с т и п ы

35

Страница 41

ГОСТ l> 50754—95

Единственным предопределенным плавающим типом является тип REAL Диапазон типа REAL зависит от применяемой машины, но при этом гарантируется, что он имеет пределы от минус IF.38 до плюс 1Е38 включительно. Тип определен с восходящим ' напазоном.

Примечание— Диапазон пиа КГ.Л1. я конкретной pcJuiiMium может ймн, ммклен мри момошп афибутоп ’I.OW и ‘IIICII.

3.2 С о с т а в н ы с типы

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

com posilc_type_defini lion :: -I array_lype_definilion ! reco rd _ I у pe_d e f i n i t i on

Объект составного типа представляет собой собрание объектов, каждый из которых представляет собой один элемент этого составного объекта. Составной тип может содержать элементы только скалярного, составного или ссылочною типов; элементы файловых типов » составном типе недопустимы. Таким образом, объект составного типа в конечном счете представляет собой собрание объектов скалярного или ссылочного типа, один для каждого несоставного подэлсментл этого составного объекта.

3.2.1 Индексируемые типы

Индексируемый объект является составным объектом, состоящим из элементов, имеющих один и тот же подтип. Имя элемента массива используется вместе с одним или более значениями индексов, принадлежащих к заданному дискретному типу. Значением индексируемого обл^кта является составное значение, состоящее из значений его элементов.

array_type_definition :: =

unconst га incd_a rrav_dcf i n i I ion I conslrained_ARRAY_dcfinition

unconsirai ncd_army_defi n i tion :: = array ( index_sublype_definition)

{ index_subtypc_definition } ) of clem en f_su b I у pe_i ndicalion

conslraincd_array_definilion :: =

array indcx_consirainl of e/<r/«e/r/_sublypc_

indication

index_sublvpe_dcfinition :: = lype_mark range < >

index_constraint :: = <discrete_range {,discretc_range)>

discrctc_range :: - <//«w/ejsubtypeJndicaiion I range

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

Одномерный массив имеет индивидуальный элемент для каждого возможного значения индекса. Многомерный массив имеет индивидуальный элемент для каждой возможной последовательности индексов, которая может быть составлена выборкой единственного значения для каждого индекса (в заданном порядке). Возможные значения XIя конкретного индекса — это все значения, принадлежащие соответствующему диапазону; этот диапазон значений называется диапазоном индекса.

Описание неограниченного индексируемого типа (unconstrained array definition) определяет индексируемый тип и имя, обозначающее этот тип. Для каждого объекта, имеющего такой тип, количество индексов, тип и позиция каждого индекса, а также подтип элементов такие же, как в описании типа. Подтип индекса для конкретной позиции индекса — это (по определению) подтип, обозначенный меткой типа (type mark) в соответствующем определении подтипа индекса (index subtype definition). Значения левой и правой границ каждого диапазона индекса не определены, но должны принадлежать к соответствующему подтипу индекса; аналогично, направленно каждого диапазона индекса не определено. Символ < > (называемый боксом), стоящий в описании подтипа индекса, указывает на неопределенный

Страница 42

ГОСТ I* 50754—95

диапазон «различные объекты этого типа необязательно должны иметь одинаковые границы и направление диапазона).

Описание ограниченного индексируемого тина (constrained array definition) определяет как индексируемый тип, так и подтип этого типа:

I) Индексируемый тип является неявно объявленным анонимным типом; этот тин определяется (неявным) описанием неограниченного индексируемого типа, в котором указание подтипа элементов (element subtype indication) копируется из описания ограниченного индексируемого типа, и в котором метка типа каждого описания подтипа индекса обозначает подтип, определенный соответствующим дискретным диапазоном «discrete range).

2> Индексируемый подтип — это подтип, полученный наложением ограничения индекса (index constraint) на этот индексируемый тип.

Если для объявления типа используется описание ограниченного индексируемого типа, то простое имя, описываемое этим объявлением, обозначает индексируемый подтип.

Направление дискретного диапазона совпадает < направлением диапазона (range) или указания дискретного подтипа (discrete subtype indication), которые определяют это! дискретный диапазон. Примеры

1    - - Примеры объявлений ограниченных массивов

а)    typo MY_WORD is array (0 (о 3!) of BIT:

-    - слово памяти с восходящим диапазоном

б)    type DATAJN is array (7 downio 0) of FIVE_LEVEL_LOGlC;

-    - входной порт с нисходящим диапазоном

2    - - Пример объявлений неограниченных массивов

type MEMORY is array (INTEGER range < » of MY_WORD;

- - массив памяти

3    - - Примеры объявлений индексируемых объектов

а)    signal DATAJ.INE : DATAJN;

-    - определяет входную шину данных

б)    variable MY_MEMORY : MEMORY (0 to 2**n — I);

I д

-    - определяет память из 2 n 32-разрядных слов

Примечание — Правила n отношении ofn.meiemirt ограниченных тшюп roiia'iatoi. что (мышление ограниченного индексируемого там» такое, кпк

type Т is array tl’OSI'IIVi; range MIN ю MAX) of r.I.EMENTl

лкпнмлепттю Следующей послс.тооателыюои обияаденнн:

sublypc lntitx_sublypc И POSITIVE range MIN lo MAX; type array fr/де is array Undexjiubtypc range < » of

ELKMEM’;

sublypc T is array Jypc (htdex_tubiype):

nc iiulex_subtypc it    array Jypc ■паяются анонимными. Скдйпапмыю. T — это имя подтипа    и    псе гйипм, оГгьяплснпые    с    .itoii

меткой типа, яьлякисв массивами, имеющими один и тот же лиапаэон индекса.

3.2.1.1 О г р    а п и ч с н и я и н д с к с а и д и с к р е т    и ы е    д    и а п a :t о к ы

Ограничение    индекса определяет диапазон индекса для каждого    индекса    в    индексируемом    типе    и    тем

самым границы соответствующего массива.

Для дискретного диапазона, границы которого заданы к виде числовых литералов или атрибутов, и используемого в описании ограниченного массива, подразумевается неявное преобразование значения каждой границы в предопределенный тип INTEGER, а типом обоих границ (до неявного преобразования) является тип универсальный целый. В противном случае обе границы должны быть одного и того же дискретного типа, отличного от типа универсальный целый; этот тип должен быть определяемым независимо от контекста, но с учетом того факта, что он должен быть дискретным и что обе границы должны иметь один и тот же тип. Этн правила применимы также к дискретному диапазону, используемому в схеме итерации или в схеме генерации.

зт

Страница 43

ГОСТ Р 54)754—95

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

Ограничение индекса совместимо с типом, обозначаемым меткой типа, если и только если ограничение, определяемое каждым дискретным диапазоном, совместимо с соответствующим полтипом индекса. Если какой-нибудь из дискретных диапазонов определяет пустой диапазон, то любой массив, ограниченный таким способом, является пустым массивом, не имеющим компонентов. Значение массив;» удовлетворяет ограничению индекса, если в каждой позиции индекса ото значение и это ограничение имеют один и ют же диапазон индекса. (Необходимо учесть, что присваивание и некоторые другие операции над массивами вызывают неявное преобразование типа).

Диапазон индекса для каждого индекса индексируемого объекта устанавливается следующим образом:

1)    Для переменной или сигнала, описанных объявлением объекта, указание подтипа в соответствующем объявлении объекта должно определить ограниченный индексируемый подтип <а следовательно, диапазон индекса хчя каждого индекса этого объекта). Те же требования верны для указания подтипа к объявлении элемента в описании индексируемого типа, если тип элемента структуры является индексируемым типом, и для указания подтипа элемента в описании индексируемого типа, если тип элемента является индексируемым типом.

2)    Для константы, описанной объявлением объекта, диапазоны индекса определяются инициализирующим значением, если подтип константы неограничен; в противном случае они определяются этим подтипом (в этом случае инициализирующее значение представляет собой результат неявного преобразования типа).

3)    Для атрибута, значение которого задано спецификацией атрибута, диапазоны индекса определяются выражением, заданным в спецификации, если подтип атрибута является неограниченным; в противном случае они определяются этим подтипом (в этом случае значение атрибута является результатом неявного преобразования подтипа).

4)    Для любого индексируемого объекта, на который имеется ссылочное значение, диапазоны индекса определяются оператором, создающим этот объект (см. 7.3.6).

5)    Для объекта интерфейса, объявленного с указанием подтипа, определяющим ограниченный индексируемый подтип, диапазоны индекса определяются этим подтипом.

6)    Для формального параметра подпрограммы, имеющего неограниченный индексируемый тип, диапазоны индекса получаются из соответствующего элемента сопоставления в применяемом вызове подпрограммы.

7)    Для формального параметра настройки объекта проекта, имеющего неограниченный индексируемый тип, диапазоны индекса получаются из соответствующего элемента сопоставления в описании соответствия параметров настройки применяемого (явно или неявно) связывающего указания.

8)    Для формального порта объекта проекта, имеющего неограниченный индексируемый тип, диапазоны индекса получаются из соответствующего элемента сопоставления в описании сопоставления портов применяемого (явно или неявно) связывающего указания.

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

10)    Для локального порта компонента, имеющего неограниченный индексируемый тип, диапазоны индекса получаются из соответствующего элемента сопоставления в описании соответствия портов применяемого оператора конкретизации компонента.

Если диапазоны индекса для объекта интерфейса получаются из соответствующего элемента сопоставления, то они устанавливаются либо фактической частью, либо формальной частью этого элемента сопоставления, в зависимости от вида этого объекта:

1)    Для объекта интерфейса вида in, inout или linkage, если фактическая часть содержит функцию преобразования типа, то тип результата этой функции должен быть ограниченным индексируемым типом, а диапазоны индекса получаются из эгого ограниченного подтипа; в противном случае диапазоны индекса получаются из объекта или значения, представленного фактическим обозначением.

2)    Для объекта интерфейса вида out, buffer, inout или linkage, если формальная часть содержит функцию преобразования типа, то подтип параметра этой функции должен быть ограниченным индексируемым типом, а диапазоны индекса получаются из этого ограниченного подтипа; в противном случае диапазоны индекса получаются из объекта, представленного фактическим обозначением.

Для объекта интерфейса вида inout или linkage диапазоны индекса, устанавливаемые по первому правилу, должны быть идентичны диапазонам индекса, устанавливаемым по второму правилу.

3.2.1.2 Н р е д о /I р с д е л с н и ы е и и д с к с и /> у е м ы е т и п ы

Страница 44

ГОСТ Р 50754-95

Предопределенными индексируемыми типами являются STRING и BIT_VF.CTOR, описанные в пакете STANDARD в разделе 14.

Значениями предопределенного типа STRING являются одномерные массивы предопределенного типа CHARACTER, индексируемые значениями предопределенного типа POSITIVE:

subtype POSITIVE is INTEGER range 1 to INTEGER’HIGH; type STRING is array (POSITIVE range < >> of CHARACTER:

Значениями предопределенного типа BlT_VfCTOR являются массивы предопределенного типа HIT, индексируемые значениями предопределенного типа NATURAL:

subtvpc NATURAL is INTEGER range 0 to INTEGER’HIGH: type' BIT.VF.CTOR is array (NATURAL range < » of BIT;

Примеры

1    varilable M ESS AG E:STR ING (I to 17) : = “THIS IS A MESSAGE":

2    signal LQW_BYTE : B1T_VECT0R (I to 7»;

3.2.2 Структурные типы

Структурный тип — это составной тип, объекты которого состоят из именованных Элементов. Значением структурного объекта является составное значение, состоящее из значений его элементов.

record_iype_definilion :: -record

clcmcnt_dcclaralion { elcment_dcclaration } end record

clemcnt_declatalion :: =

idenlifierjisl : clcmcni_sublypc_dcfiniiion;

idenlifierjist :: = identifier {.identifier}

elcnient_subiypc_definilion :: - subtypejndicaiion

Каждое объявление элемента (element definition) описывает элемент структурного типа. Идентификаторы всех элементов структурного типа должны быть уникальными. Использование имени, обозначающего элемент структуры, недопустимо внутри описания структурного типа, которое содержит объявление этого элемента.

Объявление элемента, содержащее несколько идентификаторов, эквивалентно последовательности отдельных объявлений элементов. Каждое отдельное объявление элемента описывает элемент структуры, подтип которого задается описанием подтипа элемента (element definition).

Описание структурного типа (record type definition) создает структурный тип; он состоит из объявлений элементов, стоящих в том же порядке, что и в описании этого типа.

Пример type DATE is record

DAY : INTEGER range I to 31;

MONTH : MONTH NAME;

YEAR : INTEGER range 0 to 4000; end record;

3.3 Ссылочные тип ы

Объект, описанный объявлением объекта, создается пред выполнением этого объявления и обозначается простым именем или какой-либо другой формой имени. В отличие от этого объекты, создаваемые вычислением генераторов (см. 7.3.6), не имеют простых имен. Доступ к такому объекту достигается ссылочным значением, формируемым генератором; в этом случае считается, что ссылочное значение указывает на этот объект.

acccss_type_dcfinition :: = access subtype_indication

Страница 45

ГОСТ Р 50754 -95

Для каждого ссылочного типа существует литерал null, имеющий пустое ссылочное значение, не указывающее ни на какой объект вообще. Пустое значение ссылочного типа является неявным начальным значением этого типа. Другие значения типа получаются вычислением специальной операции этого типа, называемой генератором. Каждое такое ссылочное значение указывает на объект, подтип которого определяется указанием подтипа (subtype indication) в описании этого ссылочного типа; этот подтип называется указываемым подтипом; базовый тип этого подтипа называется указываемым типом. Указываемый подтип не может быть файловым типом.

Объект, описанный с ссылочным типом, должен быть объектом класса переменная. Объект, указываемый ссылочным значением, всегда является объектом класса переменная.

Единственной формой ограничения, допускаемой после имени ссылочного типа, стоящего в указании подтипа, является ограничение индекс;!. Ссылочное значение принадлежит соответствующему подтипу ссылочного типа, если это значение является либо пустым значением, либо значение указываемого объекта удовлетворяет ограничению.

Примеры

1    type ADDRESS is access MEMORY;

2    type BUFFER_PTR is access BUFFER;

Примечание — Ссылочное значение. формируемое генератором, может быть присвоено разли'пшм переменным соответствующею ссылочного типа. Следовательно может существовать Солее одной переменной ссылочного там, указывающей на один и тот же объект, созданный генератором Ссылочное значение может указывать только на сбъскт. созданный генератором; в частности, оно не может указывать на объект, описанный объявлением объекта-

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

3.3.1 Неполные описания типов

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

incomplctc_type_declaration :: - type identifier;

Для каждого неполного описания типа (incomplete type definition) должно существовать соответствующее полное описание типа с тем же идентификатором. Это описание должно стоять после соответствующего неполного описания, но в том же разделе объявлений (при этом необязательно, чтобы неполное и полное описания типа следовали текстуально друг за другом).

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

Пример рекурсивного типа

type CELL;    -    -    описание неполного типа

type LINK is access CELL; type CELL is record

VALUE : INTEGER;

SUCC : LINK;

PR ED : LINK; end record;

variable HEAD : LINK : ■ new CELL’ (O.nul.nul); variable NEXT : LINK : - HEAD.SUCC;

Примеры взаимосвязи ссылочных типов

1    type PART; - - неполные описания типов type WIRE;

2    tvpe    PART PTR    is    access    PART;

type    WIRE.PTR    is    access    WIRE;

3    tvpe    PART_LIST    is    array    (POSITIVE    range    <    »    of    PART    PTR;

type    WIRE_LIST    is    array    (POSITIVE    range    <    »    of    W!RE_PTR;

40

Страница 46

[ОСТ V 50754—95

4    type PART UST PTR is access PART_UST: type WJRE_UST_PTR is access WIREJJST;

5    type PART is

record

PART NAME : STRING:

CONNECTIONS : WIREJ.IST_PTR; end record:

6    type WIRE is

record

WIRE NAME : STRING:

CONNECTS : PART_LIST_PTR: end record;

3.3.2 Размещение и уничтожение объектов

Объект, указываемый ссылочным значением, размешается генератором для этого типа. Генератор является первичным в выражении, Генераторы описаны и 7.3.6. Для каждого ссылочного типа операция уничтожения неявно объявляется непосредственно после полного описания типа для этого типа. Эта операция позволяет явно освободить намять, занимаемую указываемым объектом.

Если имеется следующее описание ссылочного типа:

type AT is access Т;

то этим подразумевается наличие операции, неявно объявленной после этого описания: procedure DEALLOCATE (Р: inout AT);

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

3.4 Ф а й л о в ы е типы

Описание файлового типа определяет файловый тип. Файловые типы используются для определения объектов, представляющих файлы в среде вычислительной системы. Значение файлового объекта - это последовательность значений, содержащихся в файле вычислительной системы.

fi!e_lype_definition :: - file of iype_mark

Метка типа в описании файлового типа определяет подтип значений, содержащихся в файле. Метка типа может обозначать либо ограниченный, либо неограниченный подтип. Базовым типом этого подтипа ие может быть файловый или ссылочный тип. Если базовый тип является составным типом, то он не должен содержать подэлемеиты ссылочного типа. Если базовым типом является индексируемый тип, то он должен быть одномерным индексируемым типом.

Примеры

1    file of STRING - - Описание файлового типа, который

-    - может содержать неограниченное

-    - количество строк

2    file of NATURAL * - Описание файлового типа, который

-    - может содержать только неотри-

-    - цатсльные целые значения

3.4.1 Файловые операции

Для объектов файолового типа обеспечиваются три операции. Если имеется следующее описание типа: type FT is file of TM;

в котором метка типа ТМ обозначает скалярный, именуемый или ограниченный индексируемый тип, то этим подразумевается наличие следующих операций, неявно объявленных после этого описания типа:

Страница 47

ГОСТ Р 50754-95

procedure READ (F: in FT; VALUE: out TM);

procedure WRITE (F: out FT; VALUE: in TM);

function ENDFILE (F: in FT) return BOOLEAN;

Процедура READ ищет следующее значение в файле. Процедура WRITE добавляет значение в коней файла. Функция ENDFILE возвращает значение FALSE, если последующая операция READ над входным файлом может отыскать следующее значение в этом файле; в противном случае она возвращает значение TRUE. Функция ENDFILE всегда возвращает значение TRUE для выводного файла.

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

procedure READ <F: in FT; VALUE: out TM; LENGTH: out

NATURAL);

Операция READ для такого типа выполняет то же действие, что и для других типов, но в дополнение они возвращают через параметр LENGTH значение, содержащее фактическую длину индексируемого значения, прочитанного этой операцией. Если объект, сопоставленный формальному параметру VALUE, короче этой длины, то читается только та порция индексируемого значения, которая может быть помещена в этот объект (эта порция является возвращаемым значением операции READ), остальная часть этого значения теряется. Если объект, сопоставляемый формальному параметру VALUE, длиннее, чем эта длина, то возвращаются все значения целиком, а оставшиеся элементы этого объекта остаются нсзадействованными в этой операции.

Ошибка возникает, когда операция READ выполняется над файлом F, а функция ENDFILE(F) в этоП точке возвращает значение TRUE.

Примечание — 11рсдопрсделенный пакет TEXTIO обеспечивает форматированный пвод/нынод кодов ASCII. Он содержит описание типа ТЕХ Г <фпйлотчо типа, представляющего файлы со строками символов ASCII переменной длины) и тина UNB (ссылочного типа, указывающего на такие ароки). Операции RRAD и WRITE, которые добавляют или шилекают данные и! отдельной строк», также описаны в пакете ТЕХПО. П шкете ТЁХТЮ содержатся описании дополнительных операций, обеспечивающих чтение и запись целых строк и определение состояние текущей строки иди самого файла. Описание пакета ТЕХТ10 содержится в разделе 14.

4 ОБЪЯВЛЕНИЯ

Язык определяет различные виды понятий, которые описываются явно или неявно с помощью объявлений.

declaration :: -

I type_declaration I subtypc_declaration I object_declaration I file_declaration I intcrfacc_declaration I alias.dcclaration I attribute_dcclaration I component_declaration I cntity_dcclaration I configuration_declaration I subprogram_declaration I package_declaration

Для каждой формы объявления (declaration) правила языка устанавливают конкретную текстуальную область, называемую областью действия этого объявления. Каждая форма объявления сопоставляет идентификатор с описываемым понятием. Только внутри области действия объявления существуют мест;», где можно использовать этот идентификатор для ссылки на сопоставленное с ним описанное понятие; такие места определяются правилами видимости. Считается, что в таких местах этот идентификатор является именем понятия; в свою очередь считается, что это имя обозначает сопоставленное с ним понятие.

Данный раздел содержит описание объявлений типов и подтипов, различных видов объявлений объектов, объявлений дополнительных имен, объявлений атрибутов и объявлений компонентов. Другие виды объявлений описаны в разделах I и 2.

Объявление имеет эффект в результате процесса предвыполнения. Предвыполненне объявлений описано в разделе 12.

42

Страница 48

ГОСТ Р 50754-95

4.1    Объявления ТИПОВ

Объявление типа (lypc declaration) описывает тип.

lypc_dcdaration :: -fiill_typc_declaration I incomplcle_type_declaralion full_typc_dcclaraiion :: -type identifier is lypc_definition;

typc_dcfinition :: ж

scalar_lypc_definition I composite_type_definition I acccss_type_definition I file_typc_definition

Типы, получаемые прсдвмполнснисм отдельных описаний типа (type definition), являются различными типами. Предвыполнснис описания скалярного или ограниченного индексируемого типа создает одновременно базовый тип и подтип этого базового типа.

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

Примечание— Два объявления типа всегда описывают два различных пт, лаже если оба они текстуально идентичны. Так например, два следующих объявления целого типа описывают различные типы;

1 type Л is range I to 10:

2 lypc В is range I to 10;

Это также верно для объявлений других классов типов.

Различные формы описаний типа представлены в разделе 3.

Примеры объявлений типов также содержатся в данном разделе.

4.2    Объявления подтипов

Объявление подтипа (subtype declaration) описывает подтип.

subtype_declaralion :: ■

subtype identifier is subtypejndication;

subtypejndication :: -

[resolutionJuncrion_namc) type_mark (constraint)

typc_mark :: -07>c_namc I subtype_name

constraint :: -

range_constrainl I index_consiraint

Метка типа (type mark) обозначает либо тип, либо подтип. Если метка типа является именем типа, то такая метка обозначает этот тип, а также соответствующий неограниченный подтип. Базовым типом метки типа является, по определению, базовый тип этого типа или подтипа, обозначаемого этой меткой.

Указание подтипа (subtype indication) определяет подтип базового типа метки типа.

Если указание подтипа содержит имя функции разрешении (resolution function name), то любой сигнал, объявленный с этим подтипом, будет разрешаться, по необходимости, заданной функцией (см. 2.4). Имя функции разрешения не имеет никакого эффекта в объявлениях файлов, дополнительных имен, атрибутов или других подтипов.

Если указание подтипа не содержит ограничения (constraint), то такой подтип эквивалентен подтипу, обозначаемому меткой типа. Условие, налагаемое ограничением, — это условие, получаемое вычислением выражений и диапазонов, составляющих это ограничение. В соответствующих разделах для каждой формы ограничения содержатся правила, устанавливающие совместимость. Эти правила таковы, что если ограничение совместимо с подтипом, то условие, налагаемое этим ограничением, не может противоречить

43

Страница 49

ГОСТ I» 50754—95

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

Направление указания дискретного подтипа совпадает с направлением ограничения диапазона (range constraint), используемого как ограничение в указании подтипа. Если ограничение не задано, и метка типа обозначает подтип, то направление указания подтипа совпадает с направлением обозначаемого подтипа. Если ограничение не задано и метка типа обозначает тип, то направление указания подтипа совпадает с направлением диапазона, используемого в описании обозначаемого типа. Направление дискретного подтипа совпадает с направлением соответствующего указания подтипа.

Указание подтипа, обозначающее ссылочный или файловый тип, не может содержать функцию разрешения. Единственным допустимым ограничением в указании подтипа, обозначающем ссылочный тип, является ограничение индекса (index constraint) (только в том случае, если указываемый тип является индексируемым типом).

П р п м о ч а и и е — Объявление подшил но <xmci.rn.iei тжый тип.

4.3 Объекты

Объект — это понятие, которое содержит (имеет) значение конкретного типа. Объектом может быть следующее:

1)    Объект, описанный объявлением объекта.

2)    Файл, описанный объявлением файла.

3)    Параметр оператора цикла или генерации.

4)    Формальный параметр подпрограммы.

5)    Формальный порг объекта проекта.

6)    Формальный параметр настройки.

7)    Локальный порт.

8)    Локальный параметр настройки.

9)    Элемент или сечение другого объекта.

10)    Значение объекта, указываемое значением ссылочного типа.

Имеются три класса объектов: константы, сигналы и переменные. Класс явно объявляемого объекта задастся зарезервированным словом, которое должно стоять в начале объявления этого объекта. Для конкретного объекта составного типа каждый подэлсмснт этого объекта сам является объектом того же класса, что и составной объект. Значением составного объекта является агрегат, составленный из значений его подэлсментов.

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

4.3.1    Объявлены» объектов

Объявление объекта описывает объект заданного типа.

object_declaralion :: = constant_decla ration I signal_dcclaration I variablc_dcclaration

Объявление объекта называется отдельным объявлением объекте, если стоящий в нем список идентификаторов содержит единственный идентификатор; объявление объекта называется множественным объявлением объекта, если стоящий в нем список идентификаторов содержит два или более идентификаторов. Множественное объявление объекта эквивалентно последовательности соответствующего числа отдельных объявлений объектов. Для каждого идентификатора в списке эта эквивалентная последовательность содержит отдельное объявление объекта, состоящее из самого идентификатора, за которым следует двоеточие и все то, что стоит справа от двоеточия в множественном объявлении объекта. Порядок в эквивалентной последовательности соответствует порядку в списке идентификаторов.

Аналогичная эквивалентная последовательность имеет место для объявлении объектов интерфейса (см. 4.3.3).

4.3.1.1    Объявления к о н с т а н т

Объявление константы описывает константу заданного типа.

constant_declaration :: = constant idenlificrjist :

subtype_indication |: “expression);

Страница 50

Г ОСТ I* 50754—95

Если в объявлении константы присутствует символ присваивания =>", за которым слелует выражение, то это выражение залает значение этой константы. Значение константы не может быть изменено после того, как произошло л род выполнение ее объявления.

Если в объявлении константы отсутствует символ присваивания и следующее за ним выражение, то такое объявление описывает неполную константу. Такое объявление константы может использоваться только в объявлении пакета. Соответствующее полное объявление константы должно стоять в теле этого пакета.

Формальные параметры подпрограмм вида in могут быть константами, а локальные и формальные параметры настройки всегда являются константами; объявления этих объектов описаны в 4.3.3. Параметр цикла является константой внутри соответствующего оператора цикла. Аналогично, параметр генерации является константой внутри соответствующего оператора генерации. Подэлемент или ссчснис константы является константой.

Считается ошибкой, если объявление константы описывает константу файлового или ссылочного типа.

Примеры

1    constant TOLERANCE : DISTANCE : - l.5nm;

2    constant PI : REAL : - 3.141592;

3    constant CYCLE_TIME : TIME : - 100ns;

4    constant Propagaiion_Delay;

4.3.1.2 Объявление сиги а л о a

Объявление сигнала описывает сигнал заданного типа.

signal_dcclaration :: =

signal identifierjisl : sublypejndication

|signal_kind II:- expression |:

signal_kind :: - register I bus

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

Если в объявлении сигнала используется вил сигнала (signal kind), то сигналы, описанные таким способом, являются защищенными сигналами указанного вида. Каждый подэлемент защищенного сигнала составного типа также является защищенным сигналом. Присваивание значений защищенному сигналу происходит под управлением выражений защиты (или защит), вырабатывающих логическое значение. Когда конкретная защита имеет значение FALSE, то драйверам соответствующих защищенных сигналов неявно присваивается пустая транзакция (см. 8.3.1) с целью отключения этих драйверов. Для задания времени, по прошествии которого происходит отключение этих драйверов, используется Спецификация отключения (см. 5.3).

Если объявление сигнала содержит символ присваивания, за которым следует выражение, то тип последнего должен совпадать с типом сигнала. Такое выражение считается неявным выражением. Неявное выражение определяет неявное значение, сопоставленное с сигналом или с каждым скалярным подэлементом составного сигнала. Для сигнала, описанного со скалярным подтипом, значение неявного выражения является неявным значением этого сигнала. Для сшналл, описанного с составным подтипом, каждый скалярный подэлемент значения неявноа^ выражения является неявным значением соответствующего подэлемента этого сигнала.

При отсутствии неявного выражения, неявное значение для скалярного сигнала некоторого скалярного подтипа Т или для каждого скалярного подэлемента составного сигнала, которые сами являются сигналами некоторого скалярного подтипа Т. определяется как T'LEFT.

Считается ошибкой, если объявление сигнала описывает сигнал файлового или ссылочного типа. Также считается ошибкой, если защищенный сигнал скалярного типа не является ни разрешенным сигналом, ни подэлементом разрешенного сигнала.

Сигнал может иметь один или более источников. Для сигнала скалярного типа источником может быть либо драйвер (см. 9.2.1), либо порт вида out. inout. buffer или linkage экземпляр.» компонента, с которым этот сигнал сопоставлен. Для сигнала составного типа каждый составной источник является совокупностью скалярных источников, по одному на каждый скалярный элемент этого сигнала. Считается ошибкой, если после предвыполнения описания сигнал имеет множество источников, не являясь при этом разрешенным сигналом.

Если подэлемент разрешенного сигнала составного типа сопоставлен как фактический параметр в описании определения портов (либо в операторе конкретизации компонента, либо в связывающем указании), а соответствующий формальный порт имеет вид out, inout, buffer или linkage, то каждый скалярный подэлемент этого сигнала должен быть сопоставлен точно один раз с подобным формальным

45

Страница 51

ГОСТ l> 50754-95

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

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

Неявное значение, сопоставленное со скалярным сигналом, определяет компонент значения транзакции, которая является начальным содержимым каждого драйвера (сои они есть) этого сигнала. Компонент времени этой транзакции не определен, но подразумевается, что эта транзакция уже имела место вследствие начала моделирования.

Примеры

1    signal S: STAN D AR D. ВI T_V ECTOR (I to 10);

2    signal CLKI, CLK2 : TIME;

3    signal OUTPUT : WIRED.OR MullivaluedLogic;

Прим c *i a ii и с — Порш любою вида также являются синодами. Термин айна.* m пользуется и данном руководстве для ссылки на объекты. описанные либо объявлениями сшналои. либо объявлениями портов; термин 1юр*ч используется дяя ссылки на о(»ьскты. описанные только объявлениями норн».

Сигналы подучают начальное лиачснпе инициализацией их лрай**ров. начальные значения лраипером да тем распространяются по соответствующей пени для установки начальных качений сигналов, составляющих эту цени сем. 12.6-3).

Значение сигнала может быть косвенно изменено оператором назначения еишала (см. Я 3>; такие назначеним оказывают плиянне на будущие значения зтол сигнала.

4.3.1.3 Объявления переменных Объявление переменной описывает переменную заданного типа.

variablc_dcclaraiion :: -

variable idenlifierjist : subtypcjndicallon

|: * expression);

Если объявление переменной содержит символ присваивания, за которым следует выражение, то это выражение задает начальное значение для описываемой переменной; тип выражения должен совпадать с типом переменной. Указанное выражение считается выражением начального значения.

Если выражение начального значения стоит в объявлении переменной, то начальное значение устанавливается этим выражением всякий раз, когда происходит предвмполнснис этот объявления. При отсутствии выражения начального значения используется неявное начальное значение. Неявное значение переменной скалярного подтипа Т определяется как значение, вырабатываемое атрибутом T'LEFT. Неявное начальное значение переменной составного типа определяется как агрегат, составленный из неявных начальных значении всех ее скалярных подэлементов, каждый из которых в свою очередь является переменной скалярного типа. Неявное начальное значение переменной ссылочного типа определяется как значение null для этого типа.

Считается ошибкой, если объявление переменной описывает переменную файлового типа.

Примечание — Значение переменной может бить изменено оператором присваивания (см. Я 4). эти присваивания имеют мгновенный эффск?. Параметры процедуры вида in могут 6i.hi. файловыми переменными; пирометры процедуры вида oul или Imnii могут Гнить переменными любого вила.

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

Примеры

1    variable INDEX : INTEGER range 0 ю 99 : - 0;

-    - начальное значение устанавливается выражением

-    - начального значения

2    variable COUNT : POSITIVE;

-    - начальное значение есть POSITIVE’LEFT или I

3    variable MEMORY:BIT_MATRIX (0 to 7, 0 to 1023);

-    - начальное значение есть агрегат из начальных

-    - значений каждого подэлсмента.

46

Страница 52

ГОСТ I» 50754—95

4.3.2    Объявления файлов

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

filc_declarnlion :: =

file identifier : subivpejndicalion is

(model filc_logical_namc;

filc_1ogical_name :: • string_cxpression

Указание подтипа (subiypc indication) в объявлении файла должно описывать подтип файла. Единственными допустимыми вилами файла являются виды in и out.

Логическое имя файла (file logical name) должно быть представлено выражением типа STRING. Значение этого выражения интерпретируется как логическое имя для файла в главной вычислительной системе. Реализация должна обеспечивать некоторый механизм для сопоставления логического имени файла с конкретным физическим файлом. Такой механизм языком не определяется.

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

Если в объявлении файла задан вид in. то содержимое такого внешнего файла может читаться в течение моделирования. В этом случаи файловый объект может читаться, но не модифицироваться, более чем одним процессом. Если в объявлении файла задан вид out, ix> содержимое такого внешнего файла может записываться в течение моделирования. В этом случае файловый объект может модифицироваться, но не читаться, одним или более процессами. Если вид не задан, то по умолчанию принимается in.

Если с одним и тем же логическим именем файла сопоставлено множество файловых обч-ектов и каждый файловый объект описывается объявлением файла е видом out, то значения, выводимые в каждый файловый объект, выводится во внешний файл, идентифицируемый этим логическим именем. Язык не определяет ни порядок, в котором эти значения выводятся во внешний файл, ни количество создаваемых при этом внешних файлов.

Если формальный параметр подпрограммы имеет файловый тип, то он должен сопоставляться с фактическим параметром, являющимся файловым объектом. Файловый объект конкретного вила может быть передан формальной файловой переменной только соответствующего вида.

Примечание — Вес писанию файловые объекты, сопоставляемые с одним и тем же внешним файлом, должны имсп. суши и гот же бозомдл ТИП.

4.3.3    Объявления интерфейсов

Объявление интерфейса (interface declaration) описывает объект интерфейса заданного типа. Объекты интерфейса включают в себя:

—    константы, используемые как параметры настройки .объекта проекта, компонента или блока или как константные параметры подпрограмм:

—    сигналы, используемые в качестве портов объекта проекта, компонента или блока или в качестве параметров-сигналов подпрограмм;

—    переменные, используемые в качестве параметров — переменных подпрограмм.

interface_deelaralion :: -

interface_conslani_dcclaralk>n I intcrfacc_signai_dcclaralkm I i n terface_va riablc_dcclaга t ion

intcrfacc_conslant_dcclaration :: *

[constant 1 idcntificrjist : |inl subivpejndicalion

|:-S/<i//c_cxprc55ion |

intcrfacc_signal_dcdaration :: =

[signal 1 idcntificrjist : [model subivpejndicalion

[bus | |:= static

_exprcssion |

47

Страница 53

ГОСТ Р 50754-95

intcrface_variablc_dcdaration :: =

[variable I identifierJisl : (mode) subtype

Jndicaiion static _cxpression)

mode = in I out I inout I buffer I linkage

Если в объявлении интерфейса вид (mode) явно не задан, то подразумевается in.

В объявлении константы интерфейса «interface constant declaration) или я объявлении сигнала интерфейса (interface signal declaration) указание подтипа (subtype indication) должно описывал, подтип, который не является ни файловым, ни ссылочным типом.

Если объявление сигнала интерфейса содержит зарезервированное слово bus. то сигнал, описываемый этим объявлением, является защищенным сигналом класса bus.

Если объявление интерфейса содержит символ за которым следует выражение, то это выражение считается неявным выражением для объекта интерфейса. Тип этого выражения должен совпадать с типом соответствующего объекта интерфейса. Считается ошибкой, если неявное выражение стоит в объявлении интерфейса, вид которого linkage, или соответствующая метка типа (type mark) обозначает файловый

ТИП.

В объявлении сигнала интерфейса неявное выражение определяет неявное значение (значения), сопоставляемое с сигналом интерфейса или его лодэлсмснтамн. При отсутствии неявного выражения для сигнала или каждого скалярного пол элемента подразумевается неявное значение, устанавливаемое в соответствии с правилами объявления сигналов (см. 4.3.12). Такое значение используется лля установки начального содержимого драйверов сигнала интерфейса, если они есть, как указано для объявлений сигналов.

Объект интерфейса обеспечивает канал для связи между окружающей средой и отдельной частью описания. Значение объекта интерфейса может быть установлено значением сопоставленного объекта или выражения, находящихся в этой среде; аналогично, значение объекта, находящегося в этой среде, может определяться значением сопоставленного с ним объекта интерфейса. Способы таких сопоставлений описаны в 4.3.3.2.

Считается, что значение объекта читается, если удовлетворяется одно из следующих условий:

1)    Объект вычисляется, а также (косвенно) объект сопоставлен с объектом интерфейса вида in. inout или linkage.

2)    Объект является сигналом и имя, обозначающее этот объект, используется в списке чувствительности оператора ожидания или оператор;! процесса.

3)    Объект является сигналом и значение любого из его предопределенных атрибутов, таких как STABLE, QUIET, DELAYED. TRANSACTION, EVENT, ACTIVE, LASTJiVENT, LAST_ACTIVE или LAST_VALUE. читается.

4> Один из подэлсмснтов объекта читается.

5) Объект является файлом и с этим файлом выполняется операция READ.

Считается, что значение объекта изменяемся, если удовлетворяется одно из следующих условий:

1)    Объект стоит в левой части оператора присваивания, а также (косвенно) седи объект сопоставлен с объектом интерфейса вида out. buffer, inout или linkage.

2)    Изменяется один из подэлсмснтов объекта.

3)    Объект является файлом и с этим файлом выполняется операция WRITE.

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

Объект интерфейса имеет следующие виды:

1)    in. Значение такого объекта интерфейса может только читаться. Любые атрибуты этого объекта интерфейса могут читаться, за исключением того, что значения атрибутов STABLE. QUIET, DELAYED и TRANSACTION параметра-сигнала не могут быть прочитаны внутри подпрограммы. Для файловых объектов допускается операция ENDFILE.

2)    out. Значение такого объекта интерфейса может быть изменено. Допускается чтение атрибутов элемента интерфейса, отличных от предопределенных атрибутов STABLE. QUIET. DELAYED, TRANSACTION, EVENT, ACTIVE, LASTJEVENT, IJ\ST_ACTIVE и LAST_VALUE. Для файлового объекта разрешена операция ENDFILE. Никакое другое чтение не допускается.

3)    inout. Значение такого объекта интерфейса может быть прочитано либо изменено. Также разрешено чтение атрибутов этого объекта. Для файлового объекта разрешена операция ENDFILE.

4)    buffer. Значение такого объекта интерфейса может быть прочитано либо изменено. Также разрешено чтение атрибутов этого объекта.

4- 2—WU6    48

Страница 54

ГОСТ Р 50754-95

5) linkage. Значение такого объекта интерфейса может быть прочитано или изменено только подстановкой этого объекта в качестве фактического параметра для другого объекта интерфейса вида linkage. Никакие другие виды чтении и изменения не разрешены.

Примечание — Хота сигналы г.пдуи inoul и buffer имеют оди.юкомис характеристики и отношении топ), могут ли они читаться или изменяться любым количеством источников. симки вида inoul может изменятся любим ко.ш'кччпом исимиикоп. п то времв как с и ma.i вида buffer .10.1 же и изменяться самое большее одним источником (см 1,1.1.2)

Параметр подпрограммы фаАлопосо типа ;цхгжен объявляться как паромер-переменная.

4.3.3.1    Списки и н т с р ф е й с о а

Список интерфейса (interface list) содержит объявления объектов интерфейса, требуемых подпрограммой, компонентом, объектом проекта или оператором блока.

inlerfacejisl :: =

inlerfacc_clcmeni {; inlerfacc_elcment}

interface_elemcni :: = interfacc_dedaration

Список интерфейса параметров настройки состоит исключительно из объявлений констант интерфейса. Список интерфейса портов состоит исключительно из объявлений сигналов интерфейса. Список интерфейса параметров может содержать объявления констант интерфейса, объявления сигналов интерфейса, объявления переменных интерфейса (interface variable declaration) либо комбинацию этих объявлений.

4.3.3.2    С п и с к и с опое т а а л с и и й

Список сопоставлений (associationjisi) устанавливает соответствие между формальными или локальными параметрами настройки, портами или именами параметров с одной стороны и локальными или фактическими именами или выражениями с другой стороны.

associationjisi :: “

association_clcmcnt { , association_clcmenl }

association_element :: -

I formal_pari = > | actual_part

forma l_part :: =

forma1_designator

I /i«of(<wi_name ( formal_designator )

formal_designator :: « generic^name I por/_name I parameterjnamc

actual_part :: -

aclual_dcsignator

I function_namc ( actual_designator )

aclual_designator :: -expression I .v/^na/_name variable_namc open

Каждый элемент сопоставления (association element) в списке сопоставлений сопоставляет один фактический указатель (actual designator) с соответствующим элементом интерфейса в списке интерфейса (intcrfacejist) объявления подпрограммы, объявления компонента, объявления объекта проекта или оператора блока. Соответствующий элемент интерфейса определяется либо по позиции, либо по имени.

Элемент сопоставления называется именованным, если формальный указатель (formal designator) используется явно; в противном случае имеет место позиционное сопоставление. Для позиционного сопоставления фактический указатель в конкретной позиции в списке сопоставлений относится к элементу интерфейса, стоящему и этой же позиции в списке интерфейса.

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

49

Страница 55

ГОСТ I» 50754—95

Формальная часть (formal part) именованного элемента сопоставления может быть в форме вызова функции, в котором единственным аргументом этой функции является сам формальный указатель. В этом случае имя функции должно обозначать функцию, единственный параметр которой имеет тот же тип, что и формальный указатель, и результат которой имеет тот же тип, что и соответствующий фактический указатель. Такая функция обеспечивает преобразование типа в случае, когда данные передаются от формального указателя фактическому указателю.

Аналогично, фактическая часть (actual pari) именованного (или позиционного) элемента сопоставления может быть в форме вызова функции, в котором единственным аргументом этой функции является сам фактический указатель. В этом случае имя функции должно обозначать функцию, единственный параметр которой имеет тот же тип, что и фактический указатель, и результат которой имеет тот же тип, что и соответствующий формальный указатель. Такая функция обеспечивает преобразование типа в случае, когда данные передаются от фактического указателя формальному указателю.

Если вид формального указателя есть in, inout или linkage и фактический указатель не задан как open, то тип фактического указателя (после применения функции преобразования типа, если последняя задана в фактической части) должен совпадать с типом соответствующего формального указателя. Анхтогично, если вид формального указателя есть out, inout. buffer или linkage, и фактический указатель не задан как open, то тип формального указателя (после применения функции преобразования типа, если последняя задана в формальной части) должен совпадать с типом соответствующего фактического указателя.

Для сопоставления сигналов с соответствующими формальными портами сопоставление формального указателя конкретного составного типа с фактическим указателем того же типа эквивалентно сопоставлению каждого скалярного    подэлемента формального    указателя с    соответствующим    подэлементом

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

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

Аналогично, для сопоставления фактических указателей с соответствующими <]к>рмальными параметрами подпрограммы сопоставление формального параметра конкретного составного типа с фактическим указателем того же типа эквивалентно сопоставлению каждого скалярного подэлемента формального параметра с соответствующим подэлементом фактического указателя. В каждом случае могут потребоваться различные механизмы передачи параметров, но в обоих случаях сопоставления будут иметь эквивалентный результат. Такой результат    имеет место при условии,    что ни один    актуальный указатель не имеет

доступ более чем по одному    пути (см. 2.1.1.1).

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

Если элемент интерфейса в списке интерфейса содержит неявное выражение для формального параметра настройки или для формального параметр;! вида in, то любой соответствующий список сопоставлений может не содержать элемент сопоставления для этого элемента интерфейса. Если этот элемент сопоставления не включается в список сопоставления, то в неявном элементе сопоставления для этого элемента интерфейса в качестве фактического выражения используется значение неявного выражения.

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

Хотя неяпное выражение можс» задаваться и элементе интерфстка. который описывает (довольный или формальный) порт, такое выражение i#е интерпретируется как значение неявного элемента сопоставления для этого порта, так как порты должны быть сопоставлены с сигналами в противоположность значениям. Вместо этосо значение выражения используется для определения эффективного значения эгосо порта с течет» моделирования, если пор! оставлен иесосдииенным (см. 12.6 1).

4.3.4 Объявление дополнительного имени

Объявление дополнительного имени описывает альтернативное имя для существующего объекта.

alias_dcclaration :: =

alias identifier : subtvpejndication is name;

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

4-2

50

Страница 56

ГОСТ Р 507S4—95

Имя (name) должно быгь статическим именем <см. 6.1), обозначающим объект. Базовый тип имени, заданного в объявлении дополнительного имени, должен совпадать с базовым типом метки типа в указании подтипа: этот тип не должен быть многомерным индексируемым типом. Когда на обьект, обозначаемый именем, имеется ссылка о виде дополнительного имени, описанного объявлением дополнительного имени, то объект рассматривается как объект, имеющий подтип, заданный указанием подтипа. То же самое имеет место для ссылок на атрибуты, в которых префикс обозначает дополнительное имя. Если указанный подтип является одномерным индексируемым пол типом, то лот подтип должен включать соответствующий элемент (ем. 7.2.2) для каждого элемента объекта, обозначаемого этим именем.

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

состоящее из элементов el, е2.....епт является неявно ссылкой на сечение объекта. обозначаемое этим

дополнительным именем, состоящее из соответствующих элементов для каждого из элементов от el до сп.

Примеры

1    variable REAL.„NUMBER: B1T_VECT0R (0 lo 31) ;

2    alias SION: BIT is R EAL_NUMBF.R (0) ;

-    - SIGN стал скалярным (BIT) значением

3    alias MANTISSA: BIT VECTOR (23 tkmnto 0> is

REAL_N UMBER (8 to 31) ;

-    - MANTISSA является 24~р;|зрядным значением

-    - с диапазоном индекса от 23 ло 0.

-    - необходимо отметить, что диапазоны индекса

-    - значений MANTISSA и REAL.NUMBER <8 ю 31)

-    - нмскгг противоположные направления.

-    - ссылка на значение MANTISSA <23 down to IS)

-    - эквивалентна ссылке на значение REAL.NUMBER

(8 to 13)

4    alias EXPONENT: BlT„VECTOR (I to 7) Is REAL_NUMBER

(I to 7) ;

-    - EXPONENT является 7-рэзрядным значением

-    - с диапазоном от I до 7

4.4 О б ъ я в л с н и с атрибутов

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

Атрибуты, определяемые пользователем, являются константами произвольного типа. Такие атрибуты описываются объявлением атрибута (attribute declaration).

atiributc_dcclarnlion =

attribute identifier: typc_mark;

Идентификатор, стоящий в объявлении атрибута, является указателем этого атрибута. Атрибут может быть сопоставлен    с объектом проекта, архитектурой,    конфигурацией,    процедурой, функцией, пакетом,

типом, подтипом,    константой, сигналом, переменной,    компонентом    или    мегкой.

Метка типа (type mark) в объявлении атрибута должна обозначать подтип, не являющийся ии ссылочным ни файловым типом. Подтип может быть неограниченным.

Примеры

1    type COORDINATE is record X, Y: INTEGER end    record;

2    type POSITIVE    is INTEGER range 1 to INTEGER    HIGH;

3    attribute LOCATION: COORDINATE;

4    attribute P5N_NO: POSITIVE;

Примечание— Конкретное пСнятие Е будет тследопатъ snpitfyr Л. если и тать ко если спецификация атрибута для пиачшшм агрпбута Л сопрозджшег ибышисиис li. При orcyicrmiii такой спецификации имя атрибута п фо,*ме К*Л является недопустимым-

51

Страница 57

ГОСТ I* 50754-95

Атрибут. определяемый нолмоиателем. сопоставляется с понятием, обозначаемым именем, заданным п пГл>яюснии. а не с самим именем. Слсдоммелыю, на агр*абут лГл^скы можно ссыла1ься при 1юмощн дополнительного имени этого обт-скта <и отличие от ссылки при помощи объявленного имени объекта*. иошЦ'йто в качестве префикса имени а)рнбута. Атрибут, на который есть такая ссылка, ничем не отличается от атрибута (a слсамателыю и зиа'к-нпя), ка который ссылаются с исподмоианием объявленного имени объекта и качество н|Х'фикса.

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

4.5 Объявления компонентов

Объявление компонент.! описывает виртуальный интерфейс объекта проекта, который может быть использован в операторе конкретизации компонента. Для сопоставления экземпляра компонента с объектом проекта, содержащимся в библиотеке, может быть использована конфигурация компонента или спецификация конфигурации.

contponcnl_dcclaration :: -component identifier ( /<KY//_gcneric_clause |

I /oeo/_pori-clause | end component;

Каждый элемент интерфейса в описании локальных параметров настройки (local generic clause) описывает локальный параметр настройки. Каждый элемент интерфейса в описании локальных портов (local port clause) описывает локальный порт.

5 СПЕЦИФИКАЦИИ

В данном разделе дано описание спецификаций. которые могут быть использованы для сопоставления дополнительной информации с VHDL-описанисм. Спецификация сопоставляет дополнительную информацию с ранее объявленным понятием. Имеются три вида спецификаций: спецификации атрибутов, спецификации конфигураций и спецификации отключения.

Спецификации всегда связаны с уже существующими понятиями; таким образом конкретная спецификация должна следовать за или <в определенных случаях) быть заключена внутри объявления понятия, с которым она связана. Болес того, спецификация должна всегда стоять либо непосредственно в том же разделе объявлений, в котором стоит объявление связанного с ним понятия, либо (в случаях, когда спецификации связаны с модулями проекта) непосредственно в разделе объявлений, сопоставленном с объявлением этого понятия.

5.1. С п с ц и ф и к а ц и я атрибута

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

attribulc_specification :: -

attribute atiribute_designator of cniity_spccificalion is expression;

cntity_spccification :: -

cntiiy_namcjisl : cniilv_class

cnlily_class :: = entity I procedure I type I signal I label

I    architecture I    configuration

I    function    I    package

I    subtype    I    constant

I    variable    I    component

cntity_manejist :: -

cntity_dcsignator {, entity_designator}

I others I all

cntity_dcsignator ;; ■ simple_name I opcratorjsymbol

52

Страница 58

ГОСТ I* 50754—95

Указатель атрибута (attribute designator) должен обозначать атрибут. Список имен понятий (entity name list) идентифицирует тс понятия, которые наследуют этот атрибут. Наследование определяется следующими правилами:

1)    Если задан список указателей понятий (entity designator), то спецификация атрибута применяется в отношении тех понятий, которые обозначены этими указателями.

2)    Если задано зарезервированное слово others, то спецификация атрибута применяется к понятиям указанного класса, которые описаны в непосредственно объемлющем разделе объявлений, при условии, что каждое такое понятие не задано явно в списке имен понятий предыдущей спецификации атрибута.

3)    Если задано зарезервированное слово all. то спецификация атрибута применяется ко всем понятиям указанного класса, которые описаны в непосредственно объемлющем разделе объявлений.

Спецификация атрибута для конкретного класса понятий, стоящая в разделе объявлений, и в которой список имен понятий задан в виде зарезервированного слова others или а», должна быть последней спецификацией атрибута для указанного класса понятий в этом разделе объявлений. Никакое понятие, относящееся в заданному классу понятий, не может быть описано в указанном разделе объявлений после такой спецификации атрибута.

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

Для конкретного понятия значением определяемого пользователем атрибута этого понятия является значение, заданное в спецификации атрибута для этого понятия.

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

Примеры

1    attribute    PIN_NO of    CIN : signal is 10;

2    attribute    PIN NO of    COUT : signal is 5;

3    attribute    LOCATION    of ADDER I : label    is    (10,15);

4    attribute    LOCATION    of others : label is    (25,77);

5    attribute CAPACITANCE of all : signal is 15pF:

Примечание — Указатель попиши (eniily designator) n виде символа оператора используется для сопоставления атрибута с совмещенным оператором.

Если спецификации атрибута исполмуск*. то она должна следовать за объявлением ион «тип. с которым этот атрибут сопоставляется, и нре;ш*е с топать кем ссылкам на этот атрибут этого понятия. Спецификация атрибута разрешена только для определяемых пользователем атрибутов, но не дм предопределенных атрибутов.

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

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

Определяемые пользователем атрибуты несут только локальную информацию и не могут быть ис пользоюим для передачи информации между описаниями. Например, сигнал X внутри архи1ект)ры и порт Y компонента, находящегося внутри этой же архитектуры, могут иметь один и тот же атрибут А. Однако значения атрибутов Х’Л it Y*A никаким образом между собой не связаны. В частности, сопоставление си тала X с портом Y и операторе конкретизации компонента не импортирует апчпнк Y'A и не экспортирует значение Х'Л.

5.2 С п е ц и ф и к а ц и я к о и ф и г у р а ц и и

Спецификация конфигурации сопоставляет связывающую информацию с метками компонентов, представляющими экземпляры конкретного компонента.

configuration_spccification :: -

for component_speeification use bindingjndication;

component_specification :: =

instantiationjist : component_mjme

53

Страница 59

ГОСТ I* 50754—95

instantiationJisf :: -

instantiation _\лbcl {, instantiation Jabe\)

I others I all

Список экземпляров (instantiation list) идентифицирует тс понятия, с которыми сопоставляется связывающая информация, Сопоставление выполняется по следующим правилам:

1) Если задан список меток экземпляров (instantiation label), то спецификация конфигурации применяется к соответствующим экземплярам компонента. Эти метки должны быть объявлены внутри непосредственно объемлющего раздела объявлений. Считается ошибкой, если эти экземпляры не являются экземплярами компонента, имя которого указано в спецификации компонентов (component specification).

2) Если задано зарезервированное слово others, то спецификация конфигурации применяется к экземплярам указанного компонента, метки которых объявлены в непосредственно объемлющем разделе объявлений при условии, что каждый такой экземпляр компонента уже не используется явно в списке экземпляров предыдущей спецификации конфигурации.

3)    Если задано зарезервированное слово all, то спецификация конфигурации применяется ко всем экземплярам указанного компонента, метки которых объявлены в непосредственно объемлющем разделе объявлений.

Спецификация конфигурации, стоящая в разделе объявлений, и список экземпляров которой для данного компонента задан в виде зарезервированного слова others или all. должна быть последней такой спецификацией для этого компонента в этом разделе объявлений.

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

5.2.1    Связывающее указание

Связывающее указание (binding indication) сопоставляет экземпляры компонента с конкретным объектом проекта. Оно также сопоставляет фактические параметры с формальными в интерфейсе объекта проекта.

binding_indication cntity_aspect Igencric_map_aspcct 1 Iport_map_aspcct |

Аспект объекта проекта (entity aspect) связывающего указания идентифицирует объект проекта, с которым сопоставляются экземпляры компонента. Аспект отображения параметров настройки (generic map aspect), если задан, идентифицирует выражения, сопоставляемые с формальными параметрами настройки в интерфейсе этого объекта проекта. Аналогично, аспект отображения портов (port map aspect) в связывающем указании идентифицирует сигналы, сопоставляемые с формальными портами в интерфейсе этого объекта проекта.

Если аспект отображения параметров настройки или аспект отображения портов не задан, то применяются правила умолчания (см. раздел 5.2.2).

5.2.1.1    Аспект объекта проекта

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

cntiiy_aspeci ::*»

entity entity_name KarcMec/oreJdcntificr) 1 I configuration configurationjnamc I open

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

54

Страница 60

ГОСТ Р 50754-95

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

Третья форма аспекта объекта проекта используется для задания отложенной идентификации объекта проекта. В этом случае считается, что непосредственно объемлющее связывающее указание не подразумевает никакого объекта проекта. Более того, это связывающее указание не должно содержат!» ни аспекта отображения параметров настройки, ни аспекта отображения портов.

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

5.2.1.2    Аспект tun о О ражен и я параметров настройки и аспект отображения п о р т о в

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

gencric_map_aspect

gcneric map <^e/ier/c_associaiion_lisl)

port_map_aspcci

рол map (/w«7_associalion_lisl)

В списке сопоставления портов (porl association list) или в списке сопоставления параметров настройки (generic association list) можно использовать как именованное, так и позиционное сопоставление.

Далее в тексте используются следующие определения:

1)    Термин фактический параметр используется для обозначения как фактического указателя, стоящего в элементе сопоставления портов, так и для фактического указателя, стоящего в элементе сопоставления списка сопоставления параметров настройки.

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

Смысл аспектов сопоставления портов и параметров настройки заключается в сопоставлении фактических параметров с формальными параметрами интер<|)сйса объекта проекта, подразумеваемого непосредственно объемлющем связывающим указанием. Каждый локальный порт или параметр настройки экземпляров компонента, к которым применяется объемлющая спецификация конфигурации, должен быть сопоставлен как фактический параметр с, по крайней мер.-, одним формальным параметром. Нельзя сопоставлять формальный параметр с более чем одним актуальным параметром.

Фактический параметр, сопоставляемый с формальным параметром настройки я аспекте отображения параметров настройки, должен быть выражением; фактический параметр, сопоставленный с формальным портом в аспекте отображения портов, должен быть сигналом.

На фактический параметр, сопоставляемый с формальным портом н аспекте сопоставления портов, налагается ряд ограничений; эти ограничения описаны в 1.1 12.

Формальный параметр для которого нет сопоставления с фактическим параметром, считается несопоставленным формальным параметром.

II р и м с ч а и и с — Локальный параметр настройки (из гбъяилении компонента; или формальным параметр настройки (m оператора блока или из объемлющего объекта проекта) может использования как фактический параметр я аспекте отображения nafMMCipon настройки. Аналогично, локальный порт (ид оимшлсипя компонента) или формальный порт (ю оператора блока иди ш объемлющего объекта проема) может мсполмкматьса как фэкиоюекми параметр и аспекте отображении nofrou

5.2.2    Неявное связывающее указание

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

Если нет ни одного видимого объявления объекта, простое имя которого совпадает с простым именем конкретизируемого компонента, то неявный аспект объекта проекта — это зарезервированное слово open. В противном случае, если такое объявление видимо, но не имеет сопоставленного с ним описания архитектуры, неявный аспект объекта проекта имеет вид

entity entllyjnante

55

Страница 61

ГОСТ I* 50754—95

в котором имя объекта — это простое имя конкретизированного компонента. В противном случае неявный аспект объекта проект:! имеет пил

cniity entityjnamс (architcctureJndcntiUcr)

в котором имя объекта — это простое имя конкретизируемого компонента, а идентификатор архитектуры совпадает с простым именем самого последнего проанализированного описания архитектуры, сопоставленного с этим объявлением объекта.

Неявное связывающее указание содержит неявный аспект отображения параметров настройки, если объект проекта, подразумеваемый аспектом объекта проекта, содержит формальные параметры настройки. Неявный аспект отображения параметров настройки сопоставляет каждый локальный параметр настройки в соответствующей конкретизации компонента <ссли он есть) с формальным параметром, имеющих! то же простое имя. Считается ошибкой, если такой формальный параметр отсутствует или если его вид и тип не подходят для такого сопоставления. Все оставшиеся несопостаелейные формальные параметры сопоставляются с фактическим указанием open.

Неявное связывающее указание содержит неявный аспект отображения портов, ест объект проекта, подразумеваемый аспектом объекта проекта, содержит формальные порты. Неявный аспект отображения портов сопоставляет каждый локальный порт в соответствующей конкретизации компонента (если он есть) с формальным поргом, имеющим то же простое имя. Считается ошибкой, если такой формальный порт отсутствует, или если его вид и тип не подходят хпя такого сопоставления. Все оставшиеся недопоставленные формальные порты сопоставляются с фактическим указанием open.

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

5.3. Спецификация отключения

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

dcsconneclion_spctification ::=

tlesconneci guarded_signal_spccification after //>w<*_cxprcssion;

guarded_signal_specification

£Har</«/_signalJisi : lypc_mark

signaljist

signal_name {, s/gna/_namc}

I others I all

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

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

2)    Если задано зарезервированное слово others, то спецификация отключения применяется к драйверам любого сигнала указанного типа, описанным в непосредственно объемлющем разделе объявлений, при условии, что каждый такой сигнал уже явно не задан в списке сигналов предыдущей спецификации отключения.

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

Спецификация отключения, список сигналов которой представлен зарезервированным словом others или all для конкретного типа и которая задана в разделе объявлений, должна быть последней такой спецификацией для этого типа в этой области объявлений. Ни одни защищенный сигнал не может быть описан в этом разделе объявлений после такой спецификации отключении.

Выражение времени (time expression) в спецификации отключения должно быть статическим и вырабатывать неотрицательное значение.

56

Страница 62

ГОСТ I» 50754—95

Считается ошибкой, если более чем одна спецификации отключения применяется к драйверам одного и того же сигнала.

При отсутствии спецификации отключения для конкретного скалярного сигнала S типа Т подразумевается неявная спецификация отключения следующего вида:

disconnect S : Т after Ons;

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

6 ИМЕНА

6.1 И мена

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

пате :: -simplc_namc loperalor_symbol lselccicd_name I indcxcd_name lslice_name latlribuie_name

prefix :: -name

I fimction_call

Некоторые формы имени (индексируемые или составные имена, сечения и имена атрибутов) содержат префикс, который может быть именем или вызовом функции. Если префикс имени является вызовом функции, 1ч) это имя обозначает элемент, сечение или атрибут, либо результат вызова функции, либо I, если результат есть ссылочное значение объекта, указываемого этим результатом. Вызовы функции описаны в 7.3.3.

Если типом префикса является ссылочный тип, то этот префикс не должен быть именем, обозначающим формальный параметр вида out или его подэдсмснт.

Считается, что префикс соответствует типу, если:

1) тип префикса — это рассматриваемый тип.

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

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

Имя считается статическим именем, если каждое выражение, входящее в состав этого имени (например, в качестве выражения индекса), является статическим выражением. Более топ», имя считается локально статическим именем, если каждое выражение, входящее в состав этого имени, является локально статическим выражением. Статическое ими сигнала — это статическое имя, обозначающее сигнал. Самый длинный статический префикс имени сигнала — это само имя, если это имя является статическим именем сигнала; в противном случае — это самый длинный префикс имени, являющегося статическим именем сигнала.

Примеры

1) S (С,2) - - статическое имя: С — статическая константа.

2) R (I to 16) - - нестатическое имя: 1 — сигнал.

-    - R — самый длинный статический префикс,

-    - сечение R (I to 16).

3) Т (п)    - - статическое имя: п — константа настройки.

4) Т (2)    - - локальное статическое имя.

57

Страница 63

ГОСТ Р 50754-95

6.2    Простые имена

Простое имя (simple name) понятия — это либо идентификатор, сопоставленный своим объявлением с этим понятием, либо другой идентификатор, сопоставленный объявлением дополнительного имени с этим понятием. В частности, простым именем объекта, конфигурации, пакета, процедуры или функции является идентификатор, стоящий в соответствующем объявлении объекта, объявлении конфигурации, объявлении пакета, объявлении процедуры или объявлении функции соответственно. Простым именем архитектуры является имя, определяемое идентификатором этого архитектурного тела.

simple_name :: - identifier

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

6.3    Составные имена

Составное имя (selected name) используется для обозначения понятия, объявление которого стоит либо внутри объявления другого понятия, либо внутри библиотеки проекта.

selected_namc :: - prefix.suffix

suffix :: - simplc_namc I character Jitcral I operator svmbol I all

Составное имя может быть использовано для обозначения элемента структуры, объекта, обозначаемого ссылочным значением, или понятия, объявление которого заключено внутри другого наименованного понятия, в частности, внутри библиотеки или пакета. Более того, составное имя может быт», использовано для обозначения всех понятий, объявления которых заключены внутри библиотеки или пакета.

Суффикс (suffix) составного имени, используемого для обозначения элемента структуры, должен быть простым именем, обозначающим элемент структурного объекта или значение. Префикс (prefix) должен соответствовать типу этого объекта или значения.

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

Остальные формы составного имени называются /нкшщкчтыми именами. Префиксом расширенного имени не может быть вызов функции.

Расширенное имя обозначает первичный модуль, заключенный в библиотеке проекта, если его префикс обозначает эту библиотеку, а суффикс является простым именем первичного модуля, объявление которого заключено в этой библиотеке. Расширенное имя обозначает все первичные модули, заключенные в библиотеке, если его префикс обозначает эту библиотеку, а суффикс является зарезервированным словом all. Для вторичных модулей, в частности, для архитектурного тела, расширенное имя недопустимо.

Расширенное имя обозначает понятие, объявленное в пакете, если его префикс обозначает этот пакет, а суффикс является простым именем, символьным литералом или символом оператора понятия, объявление которого встречается непосредственно в этом пакете. Расширенное имя обозначает все понятия, объявленные в пакете, если его префикс обозначает этот пакет, а суффикс является зарезервированным словом all.

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

Примеры

1    INSCRUCTION.OPCODE

-    - элемент OPCODE структуры

-    - INSTRUCTION

-    - объект, указываемый PTR

-    - модуль проекта, заключенный в библиотеке

-    - все модули проекта, заключенные в

-    - библиотеке CMOS

-    - понятие, объявленное в пакете

2    PTR.all

3    TTL.SN74LS22I

4    CMOS.all

5    MEASUREMENTS. VOLTAGE

ss

Страница 64

ГОСТ I* 50754—95

6    STANDARD.all    -    - все понятия, объявленные    в    пакете

-    - STANDARD

7    P.DATA    -    - понятие DATA, объявленное    в

-    - процессе Р

6.4    Индекс и рус м i.i с и м с н а Индексируемое имя (indexed name) обозначает элемент массива. indexed_name :: - prefix (expression { , expression } >

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

1    REG1STER_ARRAY(5)    -    -    элемент одномерного массива

2    MEMORY_CELL(I024,7)    -    -    элемент двумерного массива

6.5    Сечения

Сечение (slice name) обозначает одномерный массив, составленный из последовательности рядом стоящих элементов другого одномерного массива. Сечение сигнала является сигналом: сечение переменной является переменной; сечение константы является константой: сечение значения является значением.

slicc_name :: - prefix (discrclc_range>

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

Границы дискретного диапазона (discrete range) определяют границы сечения и должны принадлежать типу индексируемого массива. Сечение является пустим сечением, если дискретный диапазон является пустым, или, если направление дискретного диапазона не совпадает с направлением диапазона индекса обьекта, обозначаемого префиксом.

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

Примеры

1    signal R15: BIT_VECTOR(0 lo 31);

2    constant DATA: B!T_VECTOR (31 downto 0);

3 RI5(0 to 31)    - - сечение с восходящим диапазоном

4 DATA(24 downto I) - - сечение с нисходящим диапазоном

5    DATA (24 to 25)    -    - пустое сечение

II р им е ч л и it С — lion Л я ил чеки одномерным массивом, то ими Л<\ lo XI или A<N downio V) «пдиетсм ссченисм, содержащим один л*смснт; пиюм сечении япляется (хионыЛ тип массниа Л. С другой сгорбил. AIM инляется элементом массива Л и ИМСС1 COOI метопу кнцин тип Л'юмсшп.

6.6    Атрибуты

Атрибут (attribute name) обозначает значение, функцию, тип диапазон, сигнал или константу, сопоставленную с некоторым понятием.

attribute_namc :: =

prcfix’atlribule_dcsignator((static_cxprcssion)) attribute_designator :: - atirlbutejsimple_name

Применяемость обозначений атрибутов (attribute designator) зависит от префикса. Смысл префикса атрибута должен определяться независимо от обозначения атрибута и независимо от того факта, что этот префикс является префиксом атрибута.

Если обозначение атрибута определяет предопределенный атрибут, то статическое выражение (static expression) либо должно, либо может быть использовано, что зависит от описания этого атрибута (см. раздел 14); в противном случае оно не должно присутствовать.

Примеры

1    REGISTER'LEFT(I)    -    -    самая левая граница индекса массива

-    - REGISTER

2    OUTPUT'FANOUT    -    -    число сигналов, управляемых портом

-    - OUTPUT

3    CI.K'DELAYED(5ns)    -    -    сигнал CLK, задержанный на 5 не

59

Страница 65

ГОСТ I* 50754—95

7 ВЫРАЖЕНИЯ

7.1    Выражения

Выражение — это формула, определяющая вычисление некоторого значения.

expression :: -

relation { and relation }

I    relation    {    or relation }

I    relation    {    xor relation }

I    relation    I    nand relation ]

I    relation    |    nor relation |

relation :: =

simple_expression | rclational_opcrator simplc_expression |

simple_expression :: =

I sign J term { adding_operator term }

term :: =

factor { multiplying_opcrator factor }

factor :: -

primary I ** primary ) t abs primar>'

I not primary

primary :: -name I literal I aggregate I function_call I qualificd_cxpression I typc_conversion I allocator I ( expression )

Каждое первичное (primary) имеет значение и тип. Единственными допустимыми формами имени (name), используемыми в качестве первичного, являются атрибуты, вырабатывающие значение и имена, обозначающие объекты или значения. Если имя обозначает объект, то значением первичного является значение этого объекта.

Тип выражения (expression) зависит только от типов операндов и применяемых операторов; для совмещенного операнда или совмещенного оператор;! выявление типа операнда или идентификация совмещенного оператора зависят от контекста (см. 10.5). Для каждого предопределенного оператор:! типы операндов и результата описаны в 7.2.

II р и м с ч а и н с — Синтаксические пропила п отношении нырпженин, содержащего логические операторы, позволяют стропи» |юслсяош1тслм1ос1ь in операторон and. or iuii xof. гак как ооотистстпуюшне операции являются ассоциативными; для операторов nand и nor такая последовательность недопустима. так как охттнсгствуютие операции ш япяяюпгя ассоциативными.

7.2    Операторы

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

logical_operator    :    :    -    and

rclational_opcrator    ;    :    -

adding_opcrator    :    ;    -    +

sign    :    :    -    +

multiplying_operator    :    :    =    •

misccllancous_opcrator    :    :    =    **

or    I    nand    I    nor I xor

/—I    <    I    <—    I    >

—    I    &

—    I

/    I    mod    I    rem

abs    I    not


5-1 — 1406

«>

Страница 66

ГОСТ Р 50754-95

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

В общем случае операнды в выражении вычисляются до их сопоставления с операторами. Для некоторых операций операнд, стоящий справа, вычисляется в том случае, если и только если операнд, стоящий слева, имеет определенное значение. Такие операции называются укороченными операциями. Логические операции and, or. narnJ и nor, определенные для операндов типов BIT и BOOLEAN, все являются укороченными операциями. Более того, они являются единственными укороченными операциями.

7.2.1 Логические операторы

Логические операторы and, or, nand, nor, хот и not определены х™ предопределенных типов BIT и BOOLEAN. Они также определены для любого одномерного массива, тип элементов которого есть BIT или BOOLEAN. В последнем случае для бинарных операторов and. or, nand, nor, или xor операнды должны быть массивами одинаковой длины, операция выполняется над соответствующими элементами этих массивов, а результат являегся массивом, диапазон индекса которого совпадает с диапазоном индекса левого операнда. Для унарного оператора not операция выполняется над каждым элементом операнда, а результат является массивом, диапазон индекса которого совпадает с диапазоном индекса операнда.

В следующих таблицах определены результаты логических операций. Символ 'Г представляет значение TRUE для типа BOOLEAN и Т для типа BIT; символ F представляет значение FALSE для типа BOOLEAN и ’0’ для типа BIT;

А В

A and В

А В

A or В

А В

А хог В

Т Т

Т

т т

Т

Т Т

F

Т F

F

Т F

Т

Т F

Т

F Т

F

F Т

Т

F Т

Т

F F

F

F F

F

F F

F

А В

A nand В

А В

A nor В

А

not А

Т Т

F

Т Т

F

Т

F

Т F

Т

Т F

F

F

Т

F Т

Т

F Т

F

F F

Т

F F

Т

Для укороченных операций and, or, nand и nor над типами BIT и BOOLEAN правый операнд вычисляется только в том случае, если значения левого операнда не достаточно для определения результата операции. Для операции and и nand правый операнд вычисляется только в том случае, если значение левого операнда есть Т; для операции or и nor правый операнд вычисляется только в том случае, если значение левого операнда есть F.

Примечание — Все бинарные логические операторы принадлежат к классу онерагорю самого низкого уровня старшинегоа. Унарный лотчсский оператор пос принадлежит к классу операторов с самым высоким уровнем сгаршннетпа

7.2.2 Операторы отношения

Операторы отношения включают проверки на равенство, неравенство и упорядоченность операндов. Операнды каждого оператора отношения должны иметь одинаковый тип. Тип результата каждого оператора отношения есть предопределенный тип BOOLEAN.

Операция

Оператор

/-

<<->>■

равенство

неравенство

упорядоченность

Тип операндов

любой тип

любой тип

любой скалярный тип или дискретный индексируемый тин

Тип результата BOOLEAN BOOLEAN BOOLEAN


Операторы равенства    и неравенства (- и /=)    определены для    всех типов, отличных    от    файловых

типов. Оператор равенства возвращает значение    TRUE, если два    операнда    равны, или    в    противном

случае значение FALSE.    Оператор неравенства возвращает значение FALSE,    если два операнда равны,

или в противном случае    значение TRUE.

61

Страница 67

ГОСТ I* 50754—95

Два скалярных значения одного и того же типа равны, если и только если эти значения являются олним и тем же. Два составных значения одного и того же типа равны, если и только если для каждого элемента левого операнда имеется соответствующий элемент правого операнда <и наоборот) и значения соответствующих элементов равны (в соответствии с предопределенным оператором равенства для типа элемента). В частности, два пустых массива одного типа всегда равны. Два значения ссылочною типа равны, если и только если они оба указывают на один и тот же объект, или оба они равны пустому значению.

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

Операторы упорядоченности определены для любого скалярного типа и для любого дискретного индексируемого типа. Дискретный массив — это одномерный массив, элементы которого имеют дискретный тип. Каждый оператор возвращает значение TRUE, если соответствующее отношение удовлетворяется, или в противном случае значение FALSE.

Для скалярных типов упорядоченность определена в терминах относительных значений. Для дискретных индексируемых типов отношение < (меньше чем) определено таким образом, что левый операнд меньше чем правый операнд, если и только если:

1)    Левый операнд является пустым массивом, а правый операнд таковым не является:

2)    оба операнда не являются пустыми массивами и удовлетворяется одно из следующих условий:

а)    самый левый элемент левого операнда меньше чем самый левый элемент правого операнда,

б)    самый левый элемент левого операнда равен самому левому элементу правого операнда, а остаток левого операнда меньше чем остаток правого операнда (остаток состоит из оставшихся элементов, стоящих справа от самого левого элемента, и может быть пустым).

Отношение <■ (меньше или равно) для дискретных индексируемых типов определено как исключающая дизъюнкция результатов операторов < и = для тех же двух операндов. Отношения > (больше) и >“ (больше или равно) определены как дополнения операторов <= и < для тех же двух операндов соответственно.

7.2.3 Аддитивные операторы

Аддитивные операторы ♦ и — предопределены для любого числового типа и имеют обычный смысл. Оператор конкатенации & предопределен для любого одномерного индексируемого типа

Оператор

Операция

Тип левого операнда

Тип правого операнда

Тип

результата

+

сложение

любой числовой тип

тот же тип

тот же тип

вычитание

любой числовой тип

тот же тип

тот же тип

&

конкатенация

любой индексируемый ТИП

тот же индексируемый ТИП

тот же индексируемый тип

любой индексируемый тип

тип элемента

тог же индексируемый ТИП

тип элемента

любой индексируемый ТИП

тот же индексируемый ТИП

тип элемента

Для операции конкатенаций возможны три случая:

тип элемента

любой индексируемый ТИП

1) Если оба операнда являются одномерными массивами, то результатом конкатенации является одномерный массив, длина которого равна сумме длин операндов, состоящий из элементов левого операнда (в порядке слева направо), за которыми следуют элементы правого операнда «в том же порядке). Левой границей этого результата является левая граница левого операнда, если только он не является пустым массивом (в этом случае результатом операции является правый операнд). Направление результата совпадает с направлением левого операнда, если только он не является пустым массивом (в этом случае направление результата совпадает с направлением правого операнда).

5-1

62

Страница 68

ГОСТ Р 50754-95

2)    Если только одни из операндов является одномерным массивом, то результат конкатенации определяется правилами для случая (I), при условии, что вместо второго операнда используется неявный массив, единственным элементом которого является этот операнд. Левой границей такого массива является левая граница подтипа индекса этот массива, а его направление является восходящим (нисходящим), если подтип индекса является восходящим (нисходящим).

3)    Если ни один из операндов не является одномерным массивом, то тип результата должен быть известен из контекста. Этот тип должен быть таким, чтобы каждый операнд являлся элементом неявного массива, и тип этого массива совпадал с типом результата. Подтип неявного массива определяется по правилам для случая (2), а результат конкатенации по правилам для случая (I).

Операторы знака + и — предопределены для любого числового типа и имеют обычный смысл. Для каждого из этих унарных операторов операнд и результат имеют одинаковый тип.

II р и м с ч а н и с — П силу относительного предшествования знаков ♦ и — п граммашке выражений операнд со лиг ком не должен следовать та мультипликативным оператором, оператором иамедсипи я степень ** или операторами a!>s и nol. Например, синтаксические пропила не допускают написание следующих выражений:

1)    Л/+В    •    -    недопустимое    выражение

2)    Л**—В    -    -    недопустимое    выражение

Однако эти выражения мс«ут быть переписаны н допустимой форме tit lyionutM образом:

1)    Л/<+В>    -    - допустимое    выражение

2)    А**<—В)    -    - допустное    выражение

7.2.4 Мультипликшпианыс операторы

Операторы * и / предопределены для любрго целого и для любого плавающего типа и имеют обычный смысл; операторы mod и rem предопределены для любого целого типа. Для каждого из этих операторов операнды и результат имеют один и тот же тип.

Оператор


Операция

умножение


Тип левого операнда

любой целый тип


Тип правого операнда

тот же тип


Тип результата

тот же тип


тот же тип


тот же тип


деление


тот же тип


тот же тип


тот же тип


тот же тип


mod


модуль


ют же тип


тот же тип


остаток


rem


тот же тип


тот же тип


любой плавающий тип

любой целый тип

любой плавающий тип

любой целый тип

любой целый тип


Целочисленное деление и остаток определены следующим отношением:

А-(А/В)*В+(А rem В).

где (A rem В) имеет знак операнда А и абсолютное значение меньшее, чем абсолютное значение операнда В. Целочисленное значение удовлетворяет следующему равенству:

(—А)/В=—(А/В)=А/(—В).

Результат операции деления по модулю таков, что (A mod В) имеет знак операнда В и абсолютное значение меньшее, чем абсолютное значение операнда В. Для некоторого целого значения N этот результат должен удовлетворять отношению:

A=B*N+(A mod В).

В дополнение к вышесказанному операторы * и / предопределены для любого физического типа.

6 з

Страница 69

ГОСТ Р 50754-95

Тип левого

Тип правого

Тип

операнда

операнда

результата

любой физи

INTEGER

совпадает с типом

ческий тип

левого операнда

любой физи

REAL

совпадает с типом

ческий тип

левого операнда

INTEGER

любой физи

совпадает с типом

ческий тип

правого операнда

REAL

любой физи

совпадает с типом

ческий ТИП

правого операнда

любой физи

INTEGER

совпадает с типом

ческий тип

левого операнда

любой физи

REAL

совпадает с типом

ческий тип

левого операнда

любой физи

тот же тип

универсальный

ческий тип

целый

типа T\Sp\s на

значение I типа

INTEGER эквивалентно

Оператор

Операция

умножение

деление

следующему вычислению:

T\Sp\s’Val<T\Sp\s'Pos(P)*I)

Умножение значения Р физического типа T\Sp\s на значение F типа REAL эквивалентно следующему вычислению:

T\Sp\s’Val<lNTEGER(REAL(T\Sp\s*Pos(P))*F»

Деление значения Р физического типа T\Sp\s на значение типа INTEGER эквивалентно следующему вычислению:

T\Sp\s’Val(T\sp\s’Pos(P)/I)

Деление значения Р физического типа T\Sp\s на значение F типа REAL эквивалентно следующему вычислению:

T\Sp\s’Val(INTEGER(REAL<T\Sp\s’Pos(P»/F))

Деление значения Р физического типа T\Sp\s на значение Р2 того же физического типа эквивалентно следующему вычислению:

T\Sp\s’Pos(P)/T\Sp\s‘Pos(P2)

7.2.5 Прочие операторы

Унарный оператор abs предопределен для любого числового типа.

Оператор    Операция    Тип операндов

Тип результата

тот же числовой тип

abs    абсолютное    любой числовой

значение    тип

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

Оператор


Операция

возведение в степень


Тип правого

операнда

INTEGER


*•


INTEGER


Тип левого операнда

любой целый тип

любой плавающий тип


Тип результата

совпадает с типом левого операнда

совпадает с типом левого операнда


5-2-1406

64

Страница 70

ГОСТ Р 507S4—95

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

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

7.3 Операнды

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

Имена определены в 6.1; остальные виды операндов определены в 7.3.1—7.3.6.

7.3.1 Литералы

Литерки — это либо числовой литерал, либо литерал перечисления, либо строковый литерал, либо битовый литерал, либо литерал null.

literal :: ■ numcricjiteral I cnumerationjiieral I stringjiteral I bit_slringjiieral I null

numcricjiteral :: -abstractjitcral I physicaljiteral

Числовые литералы (numcricjiteral) включают литералы абстрактных типов универсальный^целый и униосрс<ьчьный_Оейстаительный, а также литералы физических типов. Абстрактные литералы определены в разделе 13; физические литералы определены в    3.13.

Литералы перечисления (enumeration literal) —    это литералы    перечисляемых типов. Они включают

как идентификаторы, так и символьные литералы. Перечисляемые литералы определены в 3.1.1.

Строковые (string literal) и битовые (bit siring literal) литералы являются представлениями одномерных символьных массивов. Тип строкового или битового литерала должен определятся исключительно из контекста, в котором этот литерал используется, не учитывая при этом сам литерал, но используя тот факт, что типом этого литерала должен быть одномерный массив символьного типа (для строковых литералов) или типа BIT (для битовых литералов). Лексическая структур;» строковых и битовых литералов определена в разделе 13.

Для строковых и битовых литералов, представляющих непустые индексируемые значения, направление и границы этого значения определяются согласно    правилам для    позиционных    агрегатов    массивов,    где

число элементов агрегата эквивалентно длине (см.    13.6 и 15.7) строкового или    битового    литерала.    Для

строкового литерала, представляющего пустой массив, направление и самая левая граница этого массива определяются так же, как и для других строковых литералов. Если направление является восходящим, то самая правая граница — это значение, предшествующее (как установлено атрибутом I’RED) значению левой границы; в противном случае самой правой границей является значение, следующее (как установлено атрибутом SUCC) за значением самой левой границы.

Символьные литералы, соответствующие графическим символам, содержащимся внутри строкового литерала или битового литерала, должны быть видимыми на месте строкового литерала.

Литерал null представляет пустое ссылочное значение для любого ссылочного типа.

Вычисление литерала производит соответствующее значение.

Примеры

1    3.14159_26536    -    -    литерал    типа    )нивереа.1ьный_дсйствитеяьннй

2    5280    -    -    литерал    типа    универсальный _и,елый

3    10.7ns    - - литерал физического типа

4    0*'4777~    -    -    литерал    типа    B1T_STRING

5    "54LS281"    -    -    литерал    типа    STRING

6    " ”    - - строковый литерал, представляющий пустой

7    - - массив

Страница 71

ГОСТ Р S0754—95

7.3.2 Агрегаты

Агрегат объединяет одно или несколько значений » составное значение структурного или индексируемого типа.

aggrcgaic :: =

( clemcnt_association { , clcment_association ) >

clcmeni_associa!ion :: -( choices «> | expression

choices :: = choice { I choice }

choice :: -simple_expression I dcscrcte_range I ciemcn ^_5 i m pi c_na m с I others

Каждое сопоставление элементов (clement association) сопоставляет выражение с элементами. Сопоставление элементов считается именованным, если элементы задаются явно при помощи выборов; в противном случае сопоставление считается позиционным. В позиционном сопоставлении каждый элемент неявно задастся позицией в соответствии с текстуальным порядком элементов в соответствующем объявлении типа.

В одном и том же агрегате (aggregate) могут быть использованы как именованные, так и позиционные сопоставления. При этом в начале должны задаваться все позиционные сопоставления (в текстуальном порядке), а затем все именованные сопоставления в любом порядке, за исключением того, что никакое сопоставление не может стоять после сопоставления others. Агрегаты, содержащие единственное сопоставление элементов, должны всегда задаваться с использованием именованного сопоставления для того, чтобы отличать их от выражений, заключенных в круглые скобки.

Сопоставление элементов, в котором выбор (choice) задан как простое имя (simple name), разрешен только в агрегате структуры. Сопоставление элементов, в котором выбор задан в виде простого выражения или дискретного диапазона, допустимо только в агрегате массива: простое выражение задаст элемент с соответствующим значением индекса; дискретный диапазон задаст элементы для каждого значения индекса в этом диапазоне. Сопоставление элементов с единственным выбором others допустимо в том случае, когда он задаст все оставшиеся элементы (если они есть).

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

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

7.3.2.1    Агрегаты с т р у к т у р

Если типом агрегата является структурный тип, то имена элементов, заданные как выборы, должны обозначат!, элементы этого структурного типа. Если в качестве выбора агрегата структуры задан выбор others структуры, то он должен представлять по крайней мере один элемент. Сопоставление элементов с более чем одним выбором или с выбором others допускается только в том случае, если заданные элементы имеют один и тот же тип. Выражение, используемое в сопоставлении элементов, должно иметь тип сопоставляемых с ним элементов структуры.

7.3.2.2    Агрегаты массивов

Для агрегата одномерного индексируемого типа каждый выбор должен задавать значения, принадлежащие к типу индекса, а выражение, стоящее в каждом сопоставлении элементов, должно иметь тип элементов. Агрегат п-мерного индексируемого типа, где п больше Г, записывается как одномерный агрегат, в котором подтип индекса этого агрегата задан первой позицией индекса индексируемого типа, а выражение, заданное для каждого сопоставления элементов, является (п — D-мсрным массивом или агрегатом массива. В многомерных агрегатах строковые и битовые литералы допускаются вместо одномерного массива символьного типа.

В противоположность последнему сопоставлению элементов с единственным выбором others, все остальные сопоставления элементов (если они сеть) агрегата массива должны быть либо позиционными, либо именованными. Именованное сопоставление агрегата массива может иметь выбор, который не является локально статическим, или выбор в виде пустого диапазона при условии, что этот агрегат содержит единственное сопоставление элементов, которое, в свою очередь, имеет единственный выбор. Выбор others является локально статическим, ест и применяемое ограничение индекса является локально статическим.

ы>

Страница 72

ГОСТ I* $0754—95

Подтип агрегата массива, имеющего выбор others, должен определяться из контекста. Это означает, что такой агрегат может использоваться только:

1)    Как фактический параметр, сопоставляемый с формальным параметром или формальным параметром настройки, объявленными с ограниченным индексируемым полти пом.

2)    Как неявное выражение, определяющее неявное начальное значение порта, объявленного с ограниченным индексируемым подтипом.

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

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

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

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

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

8) Как операнд в квалифицированном выражении, обозначение типа которого указывает на ограниченный индексируемый подтип.

9) Как пода г регат многомерного агрегата, при этом последний сам используется в одном из перечисленных контекстов.

Границы массива, который не имеет выбор others, определяются по следующим правилам. Ест и агрегат используется в одном из вышеуказанных контекстов, то направление подтипа индекса этого агрегата совпадает с направлением соответствующего ограниченного индексируемого подтипа: в противном случае направление подтипа индекса этого агрегата совпадает с подтипом индекса базового типа этого агрегата. Для агрегата, имеющего именованные сопоставления, самая левая и самая правая границы определяются направлением подтипа индекса этого aiperara и заданными наименьшим и наибольшим выборами. Для позиционного агрегата самая левая граница определяется применяемым ограничением индекса, если эгот агрегат используется в одном из вышеуказанных контекстов; в противном случае самая левая граница представлена атрибутом S’LEFT, где S является подтипом индекса базового типа массива; в любом случае самая правая границ;! определяется направлением подтипа индекса и количеством элементом.

7.3.3    Вызовы функций

Вызов функции (function call) активизирует выполнение тела функции. Вызов задаст имя активизируемой функции и фактические параметры, если они есть, сопоставляемые с формальными параметрами этой функции.

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

function_call :: = function _пдтс | ( actual_parameter_parl ) |

actual_parameter_part :: - parameter^associationJisi

Для каждого формального параметра функции вызов функции должен задавать точно один соответствующий фактический параметр. Этот фактический параметр задается либо явно .элементом сопоставления в списке сопоставлений (association list), либо (при отсутствии такого элемента сопоставления) неявным выражением (см. 4.3.3.).

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

7.3.4    Каалифици/нюакные выражения

Квалифицированное выражение испольузется для явного утверждения типа и, возможно, подтипа операнда, представленного в виде выражения или агрегата.

qualificd_cxpression :: -

typc_mark ’ ( expression )

I typc_mark * aggregate

Страница 73

ГОСТ Р 50754-95

Тип операнда и базовый тип обозначения типа (type mark) должны быть одним и тем же типом. Значением квалифицированного выражения является значение операнда. Вычисление квалифицированного выражения состоит из вычисления операнда и проверки на принадлежность его значения подтипу, заданному обозначением типа.

II р н м с '■ а II и с — Квалифицированное выражение может (ллп. иенплыпплно для явного утверждении пни в тех случаях, когда тип литерала перечисления или щрегаш нельзя установит* но юпексту.

7.3.5 Преобразование типа

Преобразование типа обеспечивает явное преобразование между родственными типами.

typc_convcrsion :: - ivpe_mark ( expression )

Целевой тип преобразования типа — это базовый тип обозначения типа (type mark). Тип операнда преобразования типа должен определяться независимо от контекста (в частности, независимо от целевого типа). Более того, операнд преобразования типа не может быть литералом null, генератором, агрегатом или строковым литералом. В качестве операнда преобразования типа может использоваться выражение, заключаемое в круглые скобки, при условии, что это выражение имеет допустимую форму и без скобок.

Если обозначение типа задает подтип, то сначала выполняется преобразование в целевой тип, а затем проверка результата преобразования на принадлежность этому подтипу.

Явное преобразование типа допускается между родственными типами. В частности, допускается преобразование операнда конкретного типа в сам тип. Ниже приведены другие допустимые явные преобразования типа:

а)    Абстрактные чистовые типы.

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

б)    Индексируемые типы.

Преобразование допустимо если и тип операнда и целевой тип являются индексируемыми типами, удовлетворяющими следующим условиям:

1)    оба типа имеют одинаковую размерность;

2)    в каждой позиции индексов типы индексов либо являются одним и тем же типом, либо взаимно преобразуемыми типами;

3)    типы элементов являются одним и тем же типом.

Если обозначение типа задаст неограниченный индексируемый тип, то для каждой позиции индекс! границы результата получаются преобразованием границ операнда в соответствующий тип индекса целевого типа. Если обозначение типа задаст ограниченный индексируемый подтип, то границы результата — это границы, налагаемые этим обозначением. В любом случае, значение каждого элемента результата — это значение соответствующего элемента операнда (см. 7.2.2).

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

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

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

Примечание— Два индоссируемых типа м(х>т бьль родственными. даже если соотяетггаукицис позиции индексов имеют разные направления.

Страница 74

ГОСТ Р 50754-95

7.3.6 Генераторы

Вычисление генератор:! создаст объект и вырабатывает ссылочное значение, которое указывает на этот объект.

allocator :: = new subtypc_indicaiion I new qualificd_expression

Типом объекта, создаваемого генератором (allocator), является базовый tun обозначения типа, заданного либо в указании подтипа (subtype indication), либо в квалифицированном выражении (subtype expression). Для генератор;!, в котором используется указание подтипа, начальным значением создаваемого объекта является то же значение, которое задастся неявно в объявлении переменной (неявное начальное значение) указанного подтипа. Для генератора, в котором используется квалифицированное выражение, начальное значение создаваемого объекта определяется этим выражением.

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

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

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

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

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

II р и м е ч а и и с — Для каждош ссылочного »иип неяаио объявлена процедуры Deallocate. Э»а пронелурп oCccuciniiaci механизм для «оного освобождения памяти, занимаемой оСжктом. созданным ири помощи генератора.

Реализаций может (но не обвзлгельно) обеспечивать освобождение начти, занимаемой объектом, созданным при помощи генератора, как галмсо нее ссылки на него аннулируются.

Примеры

1    new    NODE

-    - принимает неявное начальное

-    - значение

-    - начальное значение задано * - явно

-    - начальное значение задано

-    - явно

-    - ограничен начальным

-    - значением

-    - ограничен пределами индекса

-    - неправильно: должно быть

-    - задано ограничение

2    new    NODE’    (15ns,    null)

3    new    NODE’    (Delay    ■> 5ns,    Next -> Stack)

4    new    B1T_VECTOR’<"OOI 10110")

5    new    STRINGd to 10)

6    new    STRING

7.4 Статические выражения

Некоторые выражения называются статическими. Аналогично, статическими называются некоторые дискретные диапазоны, а обозначения типов для некоторых подтипов называют обозначающими статические подтипы.

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

Ь9

Страница 75

ГОСТ Р 50754-95

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

Считается, что выражение будет локально статическим, если и только если каждый оператор в этом выражении обозначает предопределенный оператор, операнды и результат которого являются скалярными, и каждое первичное в этом выражении является локально статическим первичным, которое может быть одним из приведенного ниже:

1)    литералом любого типа;

2)    константой (за исключением неполной константы), явно описанной объявлением константы с использованием локально статического подтипа и инициализированной при помощи локально статического выражения;

3)    вызовом функции, имя которой обозначает предопределенный оператор и фактические параметры которой представлены каждый локально статическим выражением;

4) предопределенным атрибутом локально статического поддтипа, являющимся значением;

5) предопределенным атрибутом локально статического подтипа, являющимся функцией, в которой фактические параметры представлены локально статическими выражениями;

6)    определяемым пользователем атрибутом, значение которого определяется локально статическим выражением;

7)    квалифицированным выражением, обозначение типа которого указывает на локально статический подтип и операнды которого представлены локально статическими выражениями;

8)    локально статическим выражением, заключенным в круглые скобки;

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

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

Локально статическим подтипом является либо локально статический скалярный подтип, либо локально статический индексируемый подтип.

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

1)    локально статическим первичным;

2)    константой настройки;

3)    параметром оператора генерации;

4)    константой (включая неполную константу) явно описанной объявлением константы с использованием глобально статического подтипа и инициализированной при помощи статического выражения;

5)    агрегатом глобально статического подтипа, сопоставления элементов которою содержат только глобально статические выражения;

6)    вызовом функции, имя которой обозначает предопределенный оператор и фактические параметры которой представлены каждый глобально статическим выражением;

7)    предопределенным атрибутом глобально статического подтипа, являющимся значением или диапазоном;

8)    предопределенным атрибутом глобально статического подтипа, являющимся функцией, в которой фактические параметры представлены глобально статическими выражениями;

9)    определяемым пользователем атрибутом, значение которого определяется глобально статическим выражением;

10)    квалифицированным выражением, обозначение типа которого указывает на глобально статический подтип и операнд которого представлен глобально статическим выражением;

11)    глобально статическим выражением, заключенным в круглые скобки.

Глобально статическим диапазоном является диапазон, границы которого представлены глобально статическими выражениями. Глобально статическим ограничением диапазона является ограничение

70

Страница 76

ГОСТ И 50754—95

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

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

Глобально статическим подтипом является либо глобально статический скалярный подтип, либо глобально статический индексируемый подтип.

Примечание — Выражение, от которот требуете* быть статическим, может быть либо локально статическим пырлжсиием. либо глобально статическим выражением. Аналогично, диапазон, ограничение лил ил юна, скалярный тмдшн, дискретный лилi.iioii. ограничение индекса или индексируемый подтип, от которых требуется быть статическими, могут быть либо локально статическими, либо глобально статическими.

7.5 Универсальные выражения

Универсальным выражением является либо выражение, производящее результат типа универсальный_це-лый, либо выражение, производящее результат типа универсальный ^действительный.

Для любого целого типа и для типа универсальный_целый предопределены одни и тс же операции. Для любого плавающего типа и для типа )пивс1калышй_действительный предопределены одни и те же операции. В дополнение к этим операциям существуют еще следующие операции умножения и деления:

Операция


Оператор


умножение

деление


Тип левого

Тип правого

Тип

операнда

операнда

результата

универсала

универсаль

универсаль

ный_действи-

ный _целый

ный _дсйстви-

тельный

тельный

универсаль

универсаль-

униве/каль-

ный _целый

ный_действи-

ный_действи-

тельный

тельный

универсаль

универсаль

универсаль

ный ^действи

ный_целый

ный _действи-

тельный

тельный


Точность вычисления универсального выражения типа универсальный ^действительный обязана быть не ниже точности самого точного предопределенного плавающего типа, обеспечиваемого реализацией, исключая сам униое/кильный_дсйстоительный тип. Болес того, если это выражение является статическим выражением, то вычисление должно быть точным.

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

8 ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ

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

scqucnce_of_statemcnts :: =

{ scqucnlial_s(atemcnl }

scqucntial_sialcment :: = wait_siatemcnt I asserlion_siatcmcnl I signal_assignment_statement I variabTe_assignmenl_slalement I procedurc_call_statcmcnt I if_slatement

71

Страница 77

ГОСТ Р 50754-95

I case_slatcmcnt I loop.statcment I next_siatcmcni I cxitjstatcmcnt I rcturn_slatement I null_siatcmcni

Некоторые последовательные операторы йогут быть помечены. Используемые при этом метки неявно описываются в начале раздела объявлений самого внутреннего объемлющего оператора процесса или тела подпрограммы.

8.1    Оператор ожидания

Оператор ожидания (wait statement) вызывает приостановку выполнения оператора процесса или процедуры.

wait_s(atcmcnl :: = wait | sensilivity_clausc |

| condition_clause II limcout.clausc |:

scnsitivity_clause :: = on sensitiviiyjist

sensitivityjist :: - stgnal_namc { , signal_name }

condition_dause :: - until condition

condition :: - boolean _cxpression

timcoui_clause :: - for rtme_cxpression

Описание чувствительности (sensitivity clause) определяет множество чувствительности оператор;! ожидания, т.с. множество сигналов, к которым этот оператор чувствителен. Каждое имя сигнала (signal name) в списке чувствительности (sensitivity list) идентифицирует конкретный сигнал как элемент этого множества. Каждое имя сигнала в списке чувствительности должно быть статическим именем и каждое имя должно обозначать сигнал, для которого чтение разрешено. Если описание чувствительности не задано, то множество чувствительности будет содержать сигналы, обозначаемые самым длинным статическим префиксом каждого имени сигнала, используемого как первичное в условии, заданном в описании условия (condition clause).

Если в списке чувствительности используется имя сигнала, обозначающее сигнал составного типа, то это эквивалентно тому, что в этом списке стоит имя каждого скалярного подэлемента этого сигнала.

Описание условия задает условие, которое должно удовлетворяться для продолжения выполнения процесса. Если описание условия не задано, то подразумевается описание until TRUE.

Описание времени блокировки (timeout clause) задает максимальное количество времени, в течение которого процесс будет оставаться приостановленным на данном операторе ожидания. Если описание времени блокировки не задано, то подразумевается описание for (STD.STANDARD.TIME’HIGH — STD.STANDARD.LOW). Считается ошибкой, если выражение времени в описании времени блокировки вырабатывает отрицательное значение.

Выполнение оператора ожидания влечет вычисление выражения времени (time expression) для выявления интервала времени блокировки. Оно также влечет приостановку выполнения соответствующего оператора процесса. При этом под последним подразумевается либо оператор процесса, содержащий этот оператор ожидания, либо родитель (см. 2.2) процедуры, содержащей этот оператор ожидания. Приостановленный процесс будет возобновлен сразу по истечении интервала времени блокировки.

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

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

8.2    Опер а тор утверждения

Оператор утверждения (assertion statement) проверяет истинность заданного условия и формирует сообщение об ошибке, ест и это условие ложно.

72

Страница 78

ГОСТ И 50754—95

asscrtion_staicment :: = assert condilion I report expression |

| severity expression |;

Если описание сообщения задано, то оно должно содержать выражение предопределенного типа STRING, задающее текст сообщения. Если описание серьезности задано, то оно должно содержать выражение предопределенного типа SEVERITY..LEVEL, задающее уровень серьезности утверждения.

Описание сообщения задаст строку сообщения, включает ю в сообщение об ошибке, генерируемое утверждением. При отсутствии описания сообщения в конкретном утверждении неявным значением строки сообщения является строка “Assertion violation'*. Описание серьезности задает уровень серьезности, сопоставляемый с утверждением. При отсутствии описания серьезности в конкретном утверждении неявным значением уровня серьезности является ERROR,

Вычисление оператора утверждения состоит из вычисления логического выражения, задающего условие. Если это выражение вырабатывает значение FALSE, то имеет место нарушение утверждении. Если это происходит, то вычисляются выражения в описании сообщения и в описании серьезности. Заданная строка сообщения и уровень серьезности (или соответствующие неявные значения) затем используются для формирования сообщения об ошибке.

Сообщение об ошибке состоит по крайней мере из:

1)    указания, что данное сообщение сгенерировано утверждением;

2)    значения уровня серьезности;

3)    значения строки сообщения;

4)    имени модуля проекта (см. раздел 11.1), содержащего это утверждение.

8.3 Оператор назначения сигнала

Оператор назначения сигнала (signal assignment statement) изменяет планируемые выходные формы сигнала, содержащиеся в драйверах одного или более сигналов (см. 9.2.1).

signal_assignmenl_staiemem :: = target <■ I transport J waveform;

target :: =

name

I aggregate

waveform :: = waveform_clcment { , wavcform_clement }

Если целевой объект (target) оператора назначения сигнала представлен именем, то это имя должно обозначать сигнал, а базовым типом компонента значения каждой транзакции, производимой элементом формы сигнала (waveform element), стоящим в правой части оператора, должен быть базовый тип сигнала, обозначаемого этим именем. Такая форма оператор;! используется для присваивания значений, стоящих в правой части оператора, драйверам, сопоставленным с отдельным (скалярным или составным) сигналом.

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

Если целевой объект опер;»тора назначения сигнала представлен в виде агрегата и выражение элемента сопоставления этого агрегата является именем сигнала, обозначающим конкретный сигнал, то этот сигнал и, следовательно, каждый подэлемент (если они есть) считаются идентпфнцн/мюанными этим сопоставлением элемента как объекты назначения этого оператора. Считается ошибкой, если конкретный сигнал или каждый подэлемент идентифицируется как объект назначения более чем одним сопоставлением элемента в таком агрегате. Более того, считается ошибкой, если элемент сопоставления в таком агрегате содержит выбор others или выбор в виде дискретного диапазона.

Правая часть оператора назначения сигнала может содержать зарезервированное слово transport. Это означает, что задержка, сопоставляемая с первым элементом формы сигнала, трактуется как трап спорит а и задержка. Транспортная задержка является характеристикой устройств (таких, как линии передачи), которые имеют бесконечно большую частоту срабатывания: любой импульс передается независимо от того, насколько мала его длительность. Если слово transport не задано, то задержка трактуется как 73

Страница 79

ГОСТ I* 50754-95

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

8.3.1 Изменение планируемой выходной формы сигнала

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

wavcform_clemeni :: = wv/wt^cxprcssion | after //subexpression )

I null ( after /m»e_cxpression 1

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

Базовым типом выражения времени (time expression) в каждом элементе формы сигнала должен быть предопределенный тип TIME, определенный в пакете STANDARD. Если описание задержки не задано в элементе формы сигнала, то подразумевается неявное описание after Ons. Считается ошибкой, если выражение времени в элементе формы сигнала вырабатывает отрицательное значение.

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

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

Эта последовательность транзакций затем используется для изменения планируемой выходной формы сигнала, представляющей текущее и будущие значения драйвера, сопоставленного с упомянутым оператором назначения сигнала. Изменение планируемой выходной формы сигнала состоит из уничтожения О или более ранее вычисленных транзакций (называемых старыми транзакциями) из планируемой выходной формы сигнала и добавления новых транзакций, при этом изменение подчиняется следующим правилам:

1)    Все старые транзакции, запланированные на время, равное или    более позднее,    чем время

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

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

Если в соответствующем операторе назначения сигнала не задано зарезервированное слово transport, то начальная задержка рассматривается как инерционная задержка, и    в этом случае    происходит

дальнейшее изменение планируемой выходной формы сигнала:

1)    Все новые транзакции помечаются.

2)    Старая транзакция помечается, если она непосредственно предшествует помеченной транзакции,

и    ее компонент значения такой же, как у этой помеченной транзакции.

3)    Транзакция, определяющая текущее значение драйвера, помечается.

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

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

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

74

Страница 80

ГОСТ Р 50754-95

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

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

Примечание — Ксяп выражение хочетм <valuc ехрпяйоп). сюмщсс сира пл. впляется либо числовым литералом, либо атрибутом, кырлбатиплнштнм результат тииа унивсрсалы!ый_це.1ый или утмереа.1ммй_()ейоааитс.1Ы1ый. то в этом случае выполняется неявное преобразование типа.

Пмшеонисанпые правила шрантируют, что лрайпер. на который поддсйсiпуст оператор назначения сигнала, всегда валяется статически определяемым, если :»тот оператор стоит внутри конкретного процесса (мелите случаи, кот-,ia on стоит инутри процедуры, объявленной внутри этого промесса). I» этом случае сам лраммер являете* .траппером, определенным этим процессом; и противном случае оператор назначении сигнала должен скип инутри процедуры, а u-м драйвер является драйвером, переданным в эту процедуру вместе с иараметрами-ситалами этой процедуры.

8.4 Оператор присваивания переменной

Оператор присваивания переменной (variable assignment statement) изменяет текущее значение переменной на новое значение, заданное выражением. Переменная, обозначаемая именем, и выражение, стоящее в правой части оператора, должны быть одного и того же типа.

variablc_assignment_statemcnt :: ■ target : - expression;

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

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

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

При пыполнении оператора присваивания, целевой объект которого представлен именем переменной, сначала вычисляются имя переменной и выражение. Затем делается проверка на соответствие типа значения выражения подтипу переменной, за исключением того случая, когда переменная является массивом (в этом случае присваивание вызывает преобразование подтипа). Наконец, значение этого выражения становится новым значением этой переменной.

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

Возникает ошибка, ест вышеупомянутая проверка подтипа не имеет успеха.

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

Примечание — Если правая часть оператора присваивании представлена числовым литералом либо атрибутом, вырабатывающим результат типа унив?рса.1ьныЛ_це.1ый или ymrtfep№b«ue_<Vi«cmeiimc.TwwA, то в этом случае выполняется неявное преобразование тииа.

75

Страница 81

ГОСТ Р 50754-95

11с допускаете* присваивание значения переменной файлового типа.

8.4.1 Присваивание индексируемой перемешан)

Если левая часть оператор;» присваивания представлена в виде имени, обозначающего индексируемую переменную (включая сечение), то значение, присваиваемое целевому объекту, неявно конвертируется в подтип этой индексируемой переменной; результат такого конвертирования подтипа становится новым значением этой индексируемой переменной.

Вышеуказанное означает, что новое значение каждого элемента индексируемой переменной задастся соответствующим элементом (см. 7.2.2) индексируемого значения, получаемого вычислением выражения. В процессе конвертирования подтипа делается проверка на наличие для каждого элемента индексируемой переменной соответствующего элемента в этом индексируемом значении. Возникает ошибка, если эта проверка не имеет успеха.

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

8.5    Оператор вызова процедуры

Вызов процедуры активизирует выполнение тела процедуры.

procedure_call_siaiemeni :: -proccdurcjname ((actual_par.imeter_pari) J;

Имя процедуры задаст активизируемое тело процедуры. Раздел фактических параметров, если задан, задаст сопоставление фактических параметров с формальными параметрами процедуры.

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

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

8.6    Условный оператор

Условный оператор (ifjsiaicmcni) выбирает для выполнения одну или ни одной из заключенных в него последовательностей операторов (sequence of slaiemcni), в зависимости от значения одного или более соотвстствующих условий.

if_sialcmeni :: -if condition then sequcncc_of_stalcmcnls { elsif condition then seqticncc_of_slatcmen(s )

I else

scqucncc_of_statemcnts | end if;

Выражение, задающее условие, должно иметь тип BOOLEAN.

Выполнение условного оператора состоит в последовательном вычислении условий, стоящих после слова if и посте всех слов elsif (при этом заключительное else рассматривается как elsif TRUE then) до тех пор, пока одно из них не возвратит значение TRUE или все условия не возвратят значение FALSE. Если одно условие возвращает значение TRUE, то соответствующая ему последовательность операторов выполняется; в противном стучас ни одна последовательность операторов не выполняется.

8.7    Оператор выбора

Оператор выбора (case statement) выбирает для выполнения одну последовательность операторов из чиста альтернативных последовательностей операторов; выбираемая альтернатива определяется значением выражения.

case_siaicment :: -case expression is

76

Страница 82

ГОСТ Р 50754-95

ca$c_siatcmcoi_alicmaiivc { casejHatcmentjil tentative } end case;

case_statement_aUernailve :: -when choices “ >

3cqucncc_pf_$ta tcmcn is

Выражение должно иметь дискретный тип или одномерный символьный индексируемый тип (значения которого могут быть представлены строковыми или битово-строковыми литералами). Этот тип должен определяться независимо от контекста, н котором это выражение используется, но используя тот факт, что выражение должно иметь дискретный тип или одномерный символьный индексируемый тип. Каждый выбор в альтернативе оператора выбора (ease statement alternative) должен иметь тот же тип, что и это выражение; список выборов задает значения выражения, при которых эта альтернатива будет выбрана.

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

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

Для других форм выражения каждое значение (базового) типа выражения должно быть представлено один и только один раз во множестве выборов и никакое другое значение не допускается.

Простое выражение и дискретные диапазоны, заданные п качестве выборов в операторе выбора, должны быть локально статическими. Выбор, определяемый дискретным диапазоном, символизирует все значения в соответствующем диапазоне. Выбор others допускается только в последней альтернативе, при этом он должен быть единственным выбором в этой альтернативе; этот выбор символизирует всс значения {возможно и ни одного), которые не заданы в выборах предыдущих альтернатив. Простое имя элемента не допускается в качестве выбора в альтернативе оператора выбор;!.

II [> и м с ч п н п с. — При ямюаисчнм оператора выбора для исполнения иминрасгси и только одна злыерна! ива, т*к как шборы являкжя вскрныпакппнмн и хмпкжеключаюищми. Км.чфшлция выражения онераюрп лм5о|к» локально статическим подтипом «исто бывает колени Дея огрвшвхиня числа выборок. М1ш]>м£ шздхоямчо адиап. неж»

Выбор others и операторе выбора требтсгся в сяутс. ест «ином «мрожоння является /по чпивгреолышИ_&чш <«и пример, «.та ;>го «ырожелис является целым литералом). та* как 'то авдвстс* счпюм-ппим способом покрми. псе значения тою пни.

Сокмсикнж enc;Rii<-v-i не влияет на семйшику пигютпепия оператора ьыбора.

8.S Оператор цикла

Оператор цикла (loop statement) содержит последовательность операторов, которая будет выполняться многократно 0 или более раз.

ioop_staicmcnt :: -I foqpjabcl : ]

| itCfalion_sdiemc j loop sequence_of_5ta tcmcn ts

end loop 1 AxyjJabcl I ;

itt:ration_scheme :: = white condition

i tor /oo*>_paramcier_spccification

parameler_specific<ition -identifier in dhcrete_range

Если н конце оператора цикла используется метка, то ома должна повторять метку в начале этого оператора.

Страница 83

ГОСТ Р 50754-95

Оператор цикла без схемы итерации (iteration scheme) задаст повторяющееся выполнение последовательности операторов. Выполнение оператора цикла завершается при выходе из него вследствие выполнения оператора перехода, оператора выхода или оператора возврата.

Для оператор;! цикла со схемой итерации while перед каждым выполнением последовательности операторов вычисляется условие; если значением этого условия является TRUE, то последовательность операторов выполняется, если FALSE, то выполнение оператора цикла завершается.

Для опера гора цикла со схемой итерации for спецификация параметра цикла (loop parameter specification) является объявлением параметра цикла с конкретным идентификатором. Параметр цикла является объектом, типом которого является базовый тип дискретного диапазона.

Внутри оператор;» цикла параметр цикла является константой. Следовательно, параметр цикла не может использоваться в качестве целевого объекта оператора присваивания. Аналогично, параметр цикла не может быть передан в качестве фактического параметра, соответствующего формальному параметру вида out или inout в списке сопоставления.

При выполнении оператора цикла со схемой итерации for сначала вычисляется дискретный диапазон (discrete range). Если этот диапазон является пустым диапазоном, то выполнение оператор;! цикла завершается; в противном случае последовательность оператора выполняется для каждого значения этого дискретного диапазона (при условии, что не был сделан выход из оператора цикла вследствие выполнения операторов перехода, выхода или возврата). Перед каждой такой итерацией параметру цикла присваивается соответствующее значение дискретного диапазона. Значения присваиваются в порядке слева направо.

8.9    Оператор перехода

Оператор перехода (next statement) используется для завершения выполнения одной из итераций объемлющего оператора цикла (далее — цикл). Завершение называется условным, если этот оператор содержит условие:

next_slatcment :: =

next | loopjabcl I I when condition |;

Оператор перехода, содержащий метку цикла, разрешен только внутри помеченного цикла и применяется именно к этому циклу; оператор перехода без метки цикла разрешен только внутри цикла и применяется к самому внутреннему объемлющему циклу (с меткой или без метки).

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

8.10 Оператор    выхода

Оператор выхода (exit statement) используется для завершения выполнения объемлющего оператора цикла (далее — цикл). Завершение является условным, если этот оператор содержит условие.

cxit_statcmcnt :: = exit | /<*>/>_label I I when condition J;

Оператор выхода, содержащий метку цикла, разрешен только внутри помеченного цикла и применяется именно к этому циклу; оператор выхода без метки цикла разрешен только внутри цикла и применяется к самому внутреннему объемлющему циклу (с меткой или без метки).

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

8.11 Оператор возврата

Оператор возврата (return statement) используется для завершения выполнения самого внутреннего объемлющего тела функции или процедуры.

rcturn_statemeni :: -return | expression |;

Оператор возврата разрешен только внутри тела функции или процедуры и применяется к самой внутренней объемлющей функции или процедуре.

Оператор возврата, стоящий в теле процедуры, не должен содержать выражение. Оператор возврата, стоящий в теле функции, должен содержать выражение.

Значение этого выражения определяет результат, возвращаемый этой функцией. Типом этого выражения должен быть базовый тип обозначения типа, заданного после зарезервированного слова return в спецификации этой функции. Считается ошибкой, если выполнение функции завершается средством, отличным от оператор;» возврата.

При выполнении оператора возврата сначала вычисляется выражение (если оно задано) и делается проверка на принадлежность значения выражения подтипу результата. Ест и проверка имеет успех, то

6-1*

75

Страница 84

ГОСТ I* 50754—95

на этом выполнение оператор;! возврата завершается;' также заканчивается выполнение объемлющей подпрограммы. Возникает ошибка на месте оператора возврата, если проверка не имеет успеха.

Прим с ч а н н с — Если выражение ЯМЯСТСЯ чиелмым литералом либо птрибуюм. произполищич результат тина уннаерсауьныйле.гш) или piuoeptaiwuiijileaetnmnhnbHbtit. то выполняется неявное преобразование результата.

8.12 Пустой оператор

Пустой оператор (null statement) не вызывает никаких действий.

null_statement :: = null:

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

Примечание— Пустой оператор может быть использован лы явного указания того, что никакие лс><ствня не выполняются п(Н1 удовлетворении некоторых условий. Эю. и частности, полезно uptt использовании оператора выбора, в котором псе возможные значения выражения лолжны быть покрыты выборами; для onpc.uvieiim.ix же выбором никаких .кисший не требуется.

9 ПАРАЛЛЕЛЬНЫЕ ОПЕРАТОРЫ

В данном разделе описаны различные формы параллельных операторов (concurrent statement). Параллельные операторы используются для определения взаимосвязанных блоков и процессов, которые совместно описывают полное поведение или структуру проекта. Параллельные операторы выполняются асинхронно в отношении друг друга.

concurrent_statcment    -    параллельный оператор

b!ock_statcmcnt    -    -    оператор блока

I proccss_statcment    - - оператор процесса

I concurrent_procedure_call - - параллельный вызов процедуры I concurreni_assrction_statemcnt    - - параллельный оператор    утверждения

I concurrent_signal_assignment_statement    - - параллельный оператор    назначения сигнала

I componcnt_instantiation_siatcmcnl - - оператор конкретизации компонента I gcneratc_statcment    -    -    оператор    генерации

Первичными параллельными операторами    являются оператор блока    (block statement),    который

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

Структурной декомпозиции и регулярных описаний.

Внутри конкретного цикла моделирования реализация может обеспечивать выполнение параллельных операторов в параллельном или каком-либо другом порядке. Язык не определяет этот порядок. Описание, которое зависит от конкретного порядка выполнения параллельных операторов, является ошибочным.

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

9.1 Оператор блока

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

block_statement :: » blockjabel:

block | ( guard_cxpression ) | block_hcadcr block_dcclarativc_part begin block_statcmcnt_parl end block [ blockjabel |;

block_header :: -I generic_clausc I generic_map_aspcct; ) J ( port_clausc I port_map_aspect; | 1

79

Страница 85

ГОСТ l> 50754—95

block_declarativc_part :: -{ block_declarative_itcm }

blockjstatcment_pari :: -{ concurrentjstatement }

Если после зарезервированного слом block стоит выражение защиты* (quard expression), то в начале области объявлений (block declarative pari) этого блока неявно описывается сигнал с простым именем GUARD предопределенного типа BOOLEAN, и это выражение определяет значение этого сигнала в любое конкретное время (см. 12.6.3). Типом выражения защиты должен быть тип BOOLEAN. Сигнал GUARD может быть использован для управления выполнением ряда операторов внутри блока (см. 9.5).

Неявный сигнал GUARD не должен иметь источник.

Если в операторе блока используется заголовок блока (block header), то он явно идентифицирует ряд значений или сигналов, которые должны быть импортированы из объемлющей среды в блок и сопоставлены формальным параметрам настройки или портам. Описание параметров настройки и описание портов определяют формальные параметры настройки и формальные порты блока (см. 1.1.1.1 и 1.1.1.2); аспекты отображения параметров настройки и портов определяют сопоставление фактических параметров настройки и портов формальным параметрам настройки и портам (см. 5.2.1.2). Такие фактические параметры настройки и порты вычисляются в контексте объемлющего раздела объявлений.

Если в конце оператора блока используется метка (block label), то она должна повторять метку этого блока.

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

Фактические параметры, стоящие к списке сопоставления портов конкретного блока, никогда не moot обозначать формальные ■юрты Утоп» блока.

9.2 Оператор процесса

Оператор процесса определяет независимый последовательный процесс, представляющий поведение некоторой части проекта.

process_statement :: -| processjabel: | process ( (sensitivityjist ) I process_decla ra livc_part begin

process_staicment_pari end process | processjabel ) ;

process_declarativc_pari :: =

{ process_dcclarative_itcm }

proccss_dcclaralivc_iicm :: -subprogram_declaration I subprogram_body I typc_dcclaration I subtypc_dcclaraiion I conslanl_declaralion I variable_declaraiion I filc_dcclaration I alias_declaration I attributc_dcclaration I attributc_spccification I use_clause

proccss_siaicmcnt_part :: =

{ suqucnlial_s(atcmcnt }

Если после зарезервированного слова process стоит список чувствительности (sensitivity list), то подразумевается, что последним оператором в разделе операторов (process statement part) этого процесса является неявный оператор ожидания; этот оператор имеет форму

КО

6-2—1*06

Страница 86

ГОСТ I* 50754—95

wait on scnsiliviiyjisi;

в которой список чувствительности — это тот же самый список, стоящий после слово process. Такой оператор процесса не может содержать явного оператора ожидания. Аналогично, если такой процесс является родителем процедуры, то эта процедура не может содержать оператора ожидания.

В списке чувствительности оператора процесса могут использоваться только статические имена сигналов <см. 6.1).

Если в конце оператора процесса стоит метка (proccss label), то она должна повторять метку этого оператора.

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

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

Примечание — Из вышеуказанных правил слыуст. «но пропел, имеющий явный список чупетшгтелыюетн, псе то имеет н себе ронно один (нсивнмй) онера top ожидания, и этот оператор Сшит и кош «с последовательности операторов и разделе операторов л ою процесса. Таким об ралом, процесс со списком чувствнтс-и-иостн всегда находится и ожачаннп к конце ewiero pa3.ie.va операторов; любое событие на сигналах. 1крсчис.«спнмх и этом списке, кясчег вмнолнение такою ii|Kiiiecca с начала раздела операторов до кошш. где процесс будет опять находиться в ожидании Указанный процесс выполняется однажды neci. и начале моделирования и ириостаначлнвастсв при выполнении неявного оператора ожплапия.

9.2.1 Драйверы

Каждый оператор назначения в операторе процесса определяет множество драйверов для ряда скалярных сигналов. Для конкретного скалярного сигнала S в операторе процесс;» существует отдельный драйвер при условии, что в этом операторе процесса имеется по крайней мере один оператор назначения сигнала и самый длинный статический префикс сигнала, стоящего в левой части этого оператор;! назначения, обозначает S или составной сигнал, в котором S является под элементом. Считается, что каждый такой оператор назначения сигнала сопоставляется с этим драйвером. Выполнение оператора назначения влияет только на сопоставленный ему драйвер (или драйверы).

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

Драйвер всегда содержит по крайней мерс одну транзакцию. Начальное содержимое драйвера, сопоставленного конкретному сигналу, определяется неявным значением, сопоставляемым этому сигналу (см. 4.3.1.2).

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

9.3 Параллельный вызов процедуры

Параллельный вызов процедуры (concurrent procedure call) представляет процесс, содержащий соответствующий последовательный вызов процедуры.

concurreni_procedure_call :: ■

( label : 1 proa'durc_call_statement

Для любого параллельного вызова процедуры существует эквивалентный оператор процесса. Этот оператор не имеет списка чувствительности и раздела объявлений, а раздел операторов этого процесса состоит из оператора вызова процедуры (procedure call statement), за которым следует оператор ожидания. Оператор вызов;» процедуры состоит из того же имени процедуры и из того же раздела фактических параметров, что и параллельный вызов процедуры. Каждый Зюрмальннй параметр процедуры, активизируемой параллельным вызовом процедуры, должен быть класса сигнал или константа.

Если в фактической части любого элемента сопоставления в параллельном вызове процедуры есть первичное, обозначающее сигнал, и этот сигнал сопоставляется формальному параметру вида in или inout, то эквивалентный оператор процесса включает к себя конечный оператор ожидания с описанием чувствительности, содержащим самый длинный статический префикс каждого имени сигнала, использу-

Страница 87

ГОСТ V 50754—95

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

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

Пример

-    - параллельный вызов процедуры

CheckTiming OPLH, iPHL, Clk, D, Q>;

-    - эквивалентный процесс

process

begin

CheckTiming (tPLH, tPHL, Clk, D, Q>;

wail on Clk, D, Q;

end process;

11 p и м с ч л и и с — Параллельные вызовы процедуры представляют возможность 061.fln.4m1. процедуры. выражающие обтеиспользусмыс процессы, и довольно просто создавать такие процессы обычным вызовом процедуры и виде параллельного оператора. Oneрлтор ожидание п конце раздела операторов эквивалентного оператора процесса позволяет вызывать процедуру бел сс бесконечного зацикливания. даже если лтл процедура необязательно предназначена для использования и качестве процесса <то есть она не СОьКржит оператора ожидания). Такая процедура может сохранять свое существование с течением времени (и таким образом значения сс посменных могут удерживать свое состояние с течением времени), если самый внешний оператор этой процедуры является оператором цикла, и :*тот цикл содержит оператор ожидания.

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

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

9.4    Параллельный оператор утверждения

Параллельный оператор утверждения (concurrent assertion statement) представляет пассивный оператор процесса, содержащий заданный оператор утверждения.

сопсu rren t_asscrt ion_sia temen I :: -( label: I asserlion-staiemeni

Для любого параллельного оператора утверждения существует эквивалентный оператор процесса. Этот эквивалентный процесс не имеет ни списка чувствительности, ни раздела объявлений. Раздел операторов этого процесс;! содержит оператор утверждения (assertion statement), за которым следует оператор ожидания. Оператор утверждения содержит то же условие, описание сообщения и описания серьезности, что и параллельный оператор утверждения.

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

Выполнение параллельного оператора утверждения эквивалентно выполнению эквивалентного оператора процесса.

Примечание — Параллельные вызовы процедуры представляют возможность объявлять процедуры, выражающие обсцсиспользуемыс процессы, и довольно просто создавать такие процессы обычным вызовом процедуры в виде параллельною оператора. Оператор ожидания в конце раздела операторов эквивалентною оператора процесса позволяет вызывать процедуру без сс бесконечного зацикливания, лаже если дта процедура необязательно предназначена дм использования ■ качество процесса <то есть она не содержит оператора ожидания). Такая процедура может сохранять свое существование с течением времени (и таким образом значения ее переменных могут удерживать свое состояние с течением времени), если самый внешний оператор лтой процедуры является оператором цикла, и этот цикл содержит итератор ожидания. Аналогично можно гарпнгиронлть. что такая процедура выполняется один раз в начале моделирования, если ее последний оператор является оператором ожидания, ис имеющим ни описания чувствительности, ни описания условия, ни описания времени блокировки.

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

9.5    Параллельный оператор назначения сигнала

Параллельный оператор назначения сигнала (concurrcnljsignal.assignment) представляет эквивалентный

оператор процесса, который присваивает значения сигналам.

6-2

Страница 88

ГОСТ I* 507S4—95

concurrent_signal_a$signment_statemcnt :: =

[labelf] condilional_signal_assignment I (label:) selecfed_signal_assignment

options :: = Iguarded ] [transport |

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

Каждая форма может содержать одну или обе из двух опций guarded и transport. Опция guarded указывает на то, что оператор назначения сигнала выполняется, когда сигнал GUARD изменяет свое значение с FALSE на TRUE, или когда этот сигнал имеет значение TRUE и на одном из его входов происходит событие. (Таким сигналом может быть один из неявно объявленных сигналов GUARD, сопоставленных с операторами блока, имеющими выражением зашиты; или им может быть явно объявленный сигнал типа BOOLEAN, видимый в точке параллельного оператора назначения сигнала). Опция transport указывает на то, что оператор назначения сигнала имеет транспортную задержку.

Если целевой объект параллельного назначения сигнала является именем, которое обозначает защитный сигнал (см. 4.3.1.2). или он представлен в форме агрегата, в котором выражение в каждом элементе сопоставления является статическим именем сигнала, обозначающим защищенный сигнал, то такой целевой объект называется защищенным целевым объектом. Если целевой объект параллельного назначения сигнала является именем, которое обозначает сшнал, не являющийся защищенным сигналом, или он представлен в виде агрегата, в котором выражение в каждом элементе сопоставления является статическим именем сигнала, не являющегося защитным сигналом, то такой целевой объект называется незащищенным целевым объектом. Считается ошибкой, если целевой объект параллельного назначения сигнала не является ни тем и ни другим.

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

1)    Если в параллельном операторе назначения сигнала задана метка, то такая же метка используется в операторе процесса.

2)    Если в параллельном операторе назначения сигнала задана опция transport, то зарезервированное слово transport используется в каждом операторе назначения сигнала в операторе процесса.

3)    Раздел операторов эквивалентного оператора процесс;» содержит преобразование сигнала, которое имеет вид: либо последовательного оператора назначения сигнала, либо условного оператор;! или оператора выбора, содержащего последовательные операторы назначения сигнала — один для каждой из альтернативных форм сигнала. Это преобразование сигнала определяет, какая из альтернативных форм сигнала должна быть присвоена выходным сигналам. При этом раздел операторов может содержать последовательность операторов отключения, которые предназначены для присвоения пустых транзакций целевому объекту параллельного назначения сигнала при выполнении определенных условий.

Если в параллельном операторе назначения сигнала используется опция guarded, то такое параллельное назначение сигнала называется защищенным назначением.

Если параллельный оператор назначения сигнала представляет собой защищенное назначение, и целевой объект параллельного назначения сигнала является защищенным целевым объектом, то раздел операторов эквивалентного оператора процесса имеет вид:

if GUARD then

преобразование сигнала

else

операторы отключения end if;

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

if GUARD then

преобразование сигнала end if;

Наконец, если параллельный оператор назначения сигнала не является защищенным назначением и целевой объект параллельного назначения сигнала не является защищенным целевым объектом, то раздел операторов эквивалентного оператор;! процесса имеет вид: преобразование сигнала

Страница 89

ГОСТ Р 50754-95

Считается ошибкой, если параллельное назначение сигнала является защищенным назначением, а целевой объект параллельного назначения сигнала является защищенным целевым объектом.

4) Если параллельный оператор назначения сигнала является защищенным назначением или если в каком-нибудь выражении (отличном от временного выражения) внутри параллельного оператора назначения сигнала имеется первичное, обозначающее сигнал, то оператор процесса содержит в качестве последнего оператор;» оператор ожидания с явным описанием чувствительности. Это описание чувствительности содержит самый длинный статический префикс каждого имени сигнала (если он есть), используемого как первичное в одном из вышеупомянутых выражений. Более того, если параллельный оператор назначения сигнала является защищенным назначением, то описание чувствительности также содержит простое имя GUARD. (Сигналы, идентифицированные этими именами, называются входами оператора назначения сигнала). В противном случае оператор процесса содержит в качестве последнего оператор ожидания без явного описания чувствительности, явного описания условия или явного описания времени блокировки.

Если в эквивалентном операторе процесса имеется последовательность операторов отключения, то эта последовательность содержит одно последовательное назначение сигнала для каждого скалярного подэлсмснта целевого объекта параллельного оператора назначения сигнала.

Для каждого такого последовательного назначения сигнала целевой объект этого назначения является соответствующим скалярным подэлсмснтом целевого объекта параллельного назначения сигнала, а форма сигнала этого назначения является пустым элементом <{юрмы сигнала, выражение времени которого заданно принимает спецификацию отключения (см. 5.3).

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

Считается ошибкой, если пустой элемент формы сигнала стоит в форме сигнала параллельного оператора назначения сигнала.

Выполнение параллельного оператора назначения сигнала эквивалентно выполнению эквивалентного оператора процесса.

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

9.5.1 Условное назначение сигналю

Усювное назначение сигихта (conditional signal assignmcm) представляет оператор процесса, в котором преобразование сигнала задано условным оператором.

conditional_signal_assignment :: =

target <= options condititonal_wavcforms;

conditional_waveforms :: -

{ waveform when condition else } waveform

Дня конкретного условного назначения сигнала существует соответствующий ему эквивалентный оператор процесса, как определено для любого параллельного оператор;» назначения сигнала. Если условное назначение сигнала имеет форму:

targcn о options waveforml when condition I else wavcform2 when condition2 else

wavcformN—I when conditionN—I else waveform N ;

то преобразование сигнала в соответствующем операторе процесса имеет вид

if condition! then

target о [ transport ) waveforml; elsif condition then

target <*» | transport ) waveform2;

84

Страница 90

ГОСТ Р 50754-95

target <■ ( transport 1 wavcformN—1;

else

target <= I transport | wavcformN; end if;

Если условные формы сигнала (conditional waveforms) представлены единственной формой сигнала, то преобразование сигнала в соответствующем операторе процесса имеет вид

target <” [ transport 1 waveform;

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

9.5.2 Выборочное назначение сигнала

Выборочное назначение сигнала (selected signal assignment) представляет оператор процесса, в котором преобразование сигнала задано оператором выбора.

sclcctcd_signal_assignment :: -with expression select target <- options sclccted_waveforms ;

selectcd_waveforms :: =

{ waveform when choices , } waveform when choices

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

with expression select

target<= options waveform! when choicejist I, waveform2 when choicc_list2,

waveformn— I when choicejistn—I, waveformn when choicejistn;

то преобразование сигнала в соответствующем операторе процесса имеет вид

case expression is

when choicejist I -> target <- (transport | waveform 1; when choiceJist2 -> target <- (transport | wavcform2;

when choiceJistN—1 -> target <- (transport | waveformn—I; when choicejist N ->

target <= (transport | waveformn; end case;

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

9.6 Оператор конкретизации компонента

Оператор конкретизации компонента (component instantiation statement) определяет подкомпонент объекта проекта, в котором он используется, и сопоставляет сигналы с портами этого подкомпонента.

Страница 91

ГОСТ Р 50754-95

Этот подкомпонент является одним экземпляром класса компонентов, определяемого соответствующим объявлением компонента.

componcnt_inslanliation_slatcmcnl :: = ins tan llation Ja be!: componcnl_name |generic_map_aspect |

|pori_map_aspccl |;

Имя компонента (componeni name) должно представлять имя компонента, описанное в объявлении компонента.

Аспект отображения параметров настройки (generic map aspect), если задан, сопоставляет каждому локальному параметру настройки (или его подэлсмснту) в соответствующем объявлении компонента отдельный фактический параметр настройки.

Для каждого локального параметра настройки (или его под элемента) должно быть задано точно одно сопоставление. Аналогично, аспект отображения портов (рог! map aspcct). если задан, сопоставляет каждому локальному порту (или под элементу) в соответствующем объявлении компонента отдельный фактический параметр. Для каждого локального порта (или его подхтеменга) должно быть задано точно одно сопоставление. Аспекты отображения параметров настройки и аспекты отображения портов описаны в 5.2.1.2.

Примечание — Для связывания конкретного акзомпляра компонент с объектом проекта и юноставления локальных параметров настройки и локальных порто* с формальными параметрами настройки и формальными портами этою объекте может Сын. использоплна спецификации конфигурации.

Оператор конкретизации компонента может быть нснатыопан дли представления структурное! организации проекта. Используя объявления компонентой, сигналю* и операторы конкретизации компонентов, конкретный (внутренний юн внешний) блок может быть описан и терминах подкомпонентов, взаимосвязанных при помшчи ennawn

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

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

9.6.1 Конкретизация компонента

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

Оператор конкретизации компонента эквивалентен паре вложенных операторов блока, сцепляющих иерархию блоков в модуле проекта, содержащем этот оператор конкретизации, с уникальной копией иерархии блоков, содержащейся в другом объекте проекта (то есть подкомпоненте). Внешний блок в этой парс представляет объявление компонента; внутренний блок представляет объект проекта, с которым этот компонент связывается. Каждый из этих блоков определяется оператором блока.

Заголовок оператор;) блока, соответствующего объявлению компонента, состоит из описания параметров настройки и описания портов (если они есть), заданных в этом объявлении компонента, за которыми следует аспект отображения параметров настройки и аспект отображения портов (если они есть), заданных в соответствующем операторе конкретизации компонента. Смысл любого идентификатор;!, стоящего в заголовке этого оператора блока, тот же, который придается соответствующему вхождению этого идентификатор;! в описание параметров настройки, описание портов, аспект отображения параметров настройки или аспект отображения портов соответственно.

Раздел операторов оператора блока, соответствующего объявлению компонента, состоит из вложенного оператор;» блока, соответствующего объекту проекта.

Заголовок оператора блока, соответствующего объекту проекта, состоит из описаний параметров настройки и портов (если они есть), заданных в объявлении объекта, определяющем интерфейс этого объекта проекта, за которым следуют аспекты отображения параметров настройки и портов (если они есть), используемых в связывающем указании, которое связывает экземпляр компонента с этим объектом. Раздел объявлений оператора блока, соответствующего объекту проекта, состоит из объявлений, стоящих в разделе объявлений объекта, за которым следуют объявления, стоящие в соответствующем архитектурном теле. Раздел операторов оператора блока, соответствующего объекту проекта, состоит из параллельных операторов, стоящих в разделе операторов объекта, за которыми следуют параллельные операторы, стоящие в разделе операторов соответствующего архитектурного тела.

Страница 92

ГОСТ l> 50754-95

Смысл любого идентификатор;!, стоящего в любом месте этого оператора блока, тот же, который придается соответствующему вхождению этого идентификатора в объявление объекта или архитектурное тело соответственно.

Пример — Пусть имеются следующие описания:

-    - объявление компонента component COMP port (А, В: inout BIT);

-    - спецификация конфигурации for С: COMP use

eniity X(Y)

port map (PI -> A2, P2 -> B);

-    - оператор конкретизации компонента С: COMP port map (Л => SI, В => S2);

-    - объявление объекта и архитектуры entity X is

port (PI, P2: inout BIT); constant Delay: Time: - I ms; begin

Check Timing (PI, P2, 2 * Delay); end X;

architecture Y of X is signal P3 : Bit; begin

P3 <- PI after Delay;

P2 <- P3 after Delay:

В : block

begin

end block;

end Y;

тогда следующие операторы блока реализуют сцепление иерархии блоков, в которой объявлен компонент С с иерархией блоков, заключенной в объекте проекта X(Y)

С: block    -    -    блок компонента

port (А, В: inout BIT);    - - локальные порты

port map (А -> SI. В -> S2); - - связывание

- - фактические/локальные

begin

X: block    -    -    блок объекта проекта

port (PI,    Р2 :    inout    BIT);    -    -    формальные порты

port map    (PI -> А, Р2 -> В);    -    -    связывание

- - локальных портов с формальными constant Delay    :    Time    :    = 1ms    - -    объявление из объекта

signal РЗ    : Bit    ;    — объявление из архитектуры

begin

Cheek Timing (PI, P2, 2 * Delay); - - оператор из объекта РЗ <- PI    after    Delay;    -    -    операторы из    архитектуры

Р2 <“ РЗ    after    Delay;

В: block    -    -    внутренняя    иерархия    блоков

begin

end block В; end block X ; end block С ;

Расширения иерархии блоков, предполагаемые операторами конкретизации компонентов, связанных с объектами проекта, реализуются в процессе предвыполнения иерархии проекта (см. раздел 12).

87

Страница 93

ГОСТ Р 50754-95

9.7 Оператор генерации

Оператор генерации (generate statement) обеспечивает механизм итеративного или условного прсдвы-полнения части описания.

generate_statemcnt :: -genere/e.tabcl : gencration_schemc generate {concurrcnt_statcmcnt} end generate [generateJabcl | ;

gcneratc_scheme :: -for £c/im//<>_panimetcr_spccification I if condition

label :: - identifier

Если в конце оператора генерации стоит метка, то она должна повторить метку оператора генерации (generate label).

Для оператор;! генерации со схемой генерации (generation scheme for) спецификация параметра генерации (generate parameter specification) является объявлением параметр;! генерации с заданным идентификатором. Параметр генерации является константой, типом которой является базовый тип дискретного диапазона, заданного в спецификации параметра генерации.

Предвыполнснис оператор;* генерации описано в 12.4.2.

Приме/) —

В: block begin

LI: CELL port map (Top. Bottom, A(0), B(0));

L2: for I in I to 3 generate L3: for J in I to 3 generate L4: if I+J >4 generate L5: CELL port map (A<I—1), B(J—I), A(l), B(J)>; end generate: end generate: end generate;

L6: for I in 1 to 3 generate L7: for J in I to 3 generate L8: if l+J < 4 generate L9: CELL port map <A(I+1), B(J+I), A(l), B(J>); end generate: end generate; end generate;

end block B;

to ОБЛАСТЬ ДЕЙСТВИЯ И ВИДИМОСТЬ

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

10.1 Область объявлений

Область объявления — это часть теста описания. Отдельная область объявления формируется (текстуально) следующими конструкциями:

1)    Объявление объекта, взятое вместе с соответствующим архитектурным телом.

2)    Объявление конфигурации.

3) Объявление подпрограммы, взятое вместе с соответствующим телом подпрограммы.

4) Объявление пакета, взятое вместе с соответствующим телом (если оно есть).

5)    Объявление структурного типа.

6)    Объявление компонента.

7)    Оператор блока.

8)    Оператор процесса.

9)    Оператор цикла.

Страница 94

ГОСТ I* 50754—95

10)    Конфигурация блока.

11)    Конфигурация компонента.

В каждом из вышеуказанных случаев считается, что область объявлений сопоставляется с соответствующим объявлением или оператором. Считается что объявление стоит непосредственно внутри области объявлений, если эта область является омой внутренней областью, объемлющей это объявление, не учитывая при этом область объявлений (если она есть), сопоставленную с самим объявлением.

Некоторые области объявлений состоят из раздельных частей. Каждая область объявлений, тем не менее, рассматривается как (логически) непрерывная часть текста описания. Следовательно, если какое-либо правило определяет часть текста как текст, расн/нктрапяющкйси от некоторой специфической точки области объявлений до конца этой области, то эта часть является соответствующим подмножеством этой области объявлений (и, следовательно, она не содержит промежуточных объявлений между объявлением интерфейса и соответствующим объявлением тела).

10.2    Область действия объявлений

Для каждой формы объявления правилами языка определяется некоторая часть текста описания, называемая областью действия объявления. Областью действия объявления также называется область действия любого понятия, описанного этим объявлением. Ьолсе того, если объявление сопоставляет некоторое обозначение «либо идентификатор, либо символьный литерал, либо символ оператора) с описываемым понятием, то эта часть текста также называется областью действия этого обозначения. Внутри области действия понятия и только там существуют места, в которых допускается использование сопоставленного обозначения в целях ссылки на описанное понятие. Такие места определяются правилами видимости и совмещения.

Область действия объявления, стоящего непосредственно внутри области объявлений, распространяется от начала этого объявления до конца области объявлений: эта часть области действия объявлений называется непосредственной областью действия. Более того, для каждого из объявлений, перечисленных ниже, область действия этого объявления распространяется за пределы непосредственной области действия.

1> Объявления, стоящие непосредственно внутри объявления пакета.

2)    Объявления элемента в описании структурного типа.

3)    Объявление формального параметра в объявлении подпрограммы.

4)    Объявление локального параметр;! настройки в объявлении компонента.

5)    Объявление локального порта в объявлении компонента.

6)    Объявление формального параметра настройки в объявлении объекта.

7)    Объявление формального порта в объявлении объекта.

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

В дополнение к вышеописанным правилам, область действия любого объявления, содержащего конец раздела объявлений конкретного блока (либо внешнего блока, определяемого объектом проекта, либо внутреннего блока, определяемого оператором блока) распространяется на объявление конфигурации, конфигурирующее этот блок.

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

Примечание — Вышеописанные правила * отношении обяаси действия примешаются ко всем формам объявления. В частости, они применяются также к неявным объяплсикям.

10.3    Видимость

Смысл появления идентификатора в конкретном месте текста определяется правилами видимости, а в случае совмещенных объявлений — правилами совмещения. Под термином идентификатор в данной главе понимается любой идентификатор, отличный от зарезервированного слова. Под термином “место" в данной главе понимаются те места, в которых может стоять лексический элемент (такой, как идентификатор). Под совмещенными объявлениями в данной главе понимают совмещенные объявления подпрограмм и литералов перечисления.

Страница 95

ГОСТ I* 50754—9$

Для каждого идентификатора и в каждом мсстс текста правилами видимости устанавливается множество объявлений <е этим идентификатором), которое определяет возможные смыслы появления этого идентификатора. Объявление считается видимым в конкретном месте текста, если согласно правилам видимости это объявление определяет возможный смысл этого появления. При установлении смысла такого объявления возможны два случая:

1    Правилами видимости установлен по крайней ме/к один возможный смысл. В этом случае правила видимости являются достаточными для установлении объявления, определяющего смысл появления идентификатора, или при отсутствии такого объявления — для установления того факта, что это появление недопустимо в этом месте.

2    Правилами видимости установлено более одного возможного смысла. В этом случае появление идентификатора допустимо в этом месте, если и только если точно одно видимое объявление приемлемо в этом контексте для правил совмещения.

Объявление видимо только в пределах определенной части действия; эта часть начинается сразу за этим объявлением, за исключением объявления модуля проекта, когда эта часть начинается непосредственно после зарезервированного слова is, стоящего после идентификатора этого модуля.

Видимость может быть либо косвенной, либо непосредственной. Объявление видимо косвенно в местах, определяемых следующим правилами:

1)    Для первичного модуля, содержащегося в библиотеке: на месте суффикса в составном имени, префикс которого обозначает эту библиотеку.

2) Для архитектурного тела, сопоставленного с конкретным объявлением объекта: на мсстс спецификации блока в конфигурации блока для внешнего блока, интерфейс которого определяется этим объявлением объект.

3)    Для объявления, заданного в объявлении пакета: на месте суффикса и составном имени, префикс которого обозначает этот пакет.

4)    Для объявления элемента, стоящего внутри объявления структурного типа: на месте суффикса в составном имени, префикс которого подходит для этого типа; также на месте выбора (перед составным разделителем =>) в именованном сопоставлении элемента, стоящем в агрегате этого типа.

5)    Д™ предопределенного атрибута, который применяется к конкретному диапазону определения: на месте обозначения атрибута (после разделителя ' ) в имени атрибута, префикс которого принадлежит к этому диапазону определения.

6)    Для определяемого пользователем атрибута: на месте обозначения атрибута (пекле разделителя ' ) в имени атрибута, префикс которого обозначает понятие, с которым этот атрибут сопоставлен.

7) Для объявления формального параметра в конкретном объявлении подпрограммы: на месте формального    указателя    (перед    составным    разделителем    =>)    в    списке    именованного    сопоставления

параметров в соответствующем вызове подпрограммы.

8)    Для объявления локальных параметров настройки в конкретном объявлении компонента: на мсстс

формального    указателя    (перед    составным    разделителем    =>>    в    списке    именованного    сопоставления

параметров настройки в соответствующем операторе конкретизации компонента; аналогично, на мсстс фактического указателя (после составного разделителя ->) в списке сопоставления параметров настройки в соответствующем связывающем указании.

9> Для объявления локального порта в конкретном объявлении компонента: на месте формального указателя (перед составным разделителем =>> в списке именованного сопоставления портов в соответствующем операторе конкретизации компонента; аналогично, на месте фактического указателя (посте составного разделителя ■>) в списке сопоставления портов в соответствующем связывающем указании.

10)    Для объявления формального параметр.! настройки в конкретном объявлении объекта: на мсстс

формального    указателя    (перед    составным    разделителем    =>)    в    списке    именованного    сопоставления

параметров настройки в соответствующем связывающем указании.

11)    Для объявления формального порта в конкретном объявлении объекта: на мсстс формального указателя (перед составным разделителем ■*>> в списке именованного сопоставления портов в соответствующем связывающем указании.

Наконец,    внутри области объявлений,    сопоставленной с    конструкцией, отличной    от объявления

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

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

Объявление считается скрытым ь рамках (всей или части) внутренней области объявлений, если эта внутренняя область объявлений содержит омограф этого объявления; внешнее объявление тогда является скрытым в рамках непосредственной области действия этого внутреннего омографа. Каждое из двух

Страница 96

ГОСТ Р 50754-95

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

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

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

Всякий раз, когда объявление с определенным идентификатором видимо из конкретной точки, этот идентификатор и описанное понятие (если оно есть) также считаются видимыми из этой точки. Непосредственная видимость и косвенная видимость также определены для символьных литералов и символов оператора. Оператор видим непосредственно, если и только если непосредственно видимо соответствующее объявление этого оператора.

Пример —

LI: block

signal Л. В: Bit; begin L2: block

-    - внутренний омограф В

-    - означает L1.A <- L2.B

-    - означает L2.B <- 1.1. В

-    - означает LI.B <= LI.A

signal В: Bit; begin A <- В after 5ns;

В <- LI.В after 10ns; end block;

В <- Л after 15 ns; end block;

10.4 Описания использования

Описание использования (use clause) делает объявления, которые являются видимыми косвенно, видимыми непосредственно.

use_clausc :: -

use sclectcd_namc {, selectcd_name}

Каждое составное имя (selected паше) в описании использования идентифицирует одно и более объявлений, которые станут потенциально непосредственно видимыми. Если суффикс составного имени является простым именем или символом оператора, то такое составное имя идентифицирует только объявление(я) этого простого имени или символа оператора, содержащегося в пакете или библиотеке, обозначаемой префиксом этого составного имени. Если суффиксом является зарезервированное слово all. то это составное имя идентифицирует все объявления, содержащиеся в пакете или библиотеке, обозначаемой префиксом этого составного имени.

Для каждого описания использования существует определенная область текста, называемая областью действия этого описания. Эта область начинается непосредственно за описанием использования. Если описание использования является элементом некоторой области объявлений, то область действия этого описания распространяется до конца этой области объявлений. Если описание использования стоит внутри описания контекста модуля проекта, то область действия этого описания использования распространяется до конца области объявлении, сопоставленной с этим модулем. Область действия описания использования может дополнительно быть распространена на объявление конфигурации (см. 10.2).

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

1) Потенциально видимое объявление не становится непосредственно видимым, если рассматриваемое место находится внутри непосредственной области действий омографа этого объявления.

91

Страница 97

ГОСТ I* 50754—95

2) Потенциально видимые объявления, имеющие одно и то же обозначение, не становятся непосредственно видимыми, если каждое из них не является либо литералом перечисления, либо объявлением подпрограммы.

Примечание — Вышеуказанные правила третируют, что обмеление, которое стоившие* непосредственно видимым при помощи описания использование, не может скрывать иеносредстоснпо видимое объявление. видимость которого установлена другим способом.

Если понятие X. объявленное в пакете Р. становится потенциалы» пилимым внутри пакета Q (то есть при помощи описания использования "мм; Р.Х;", вставленною в описание контекста пакета Q). з описание контекста модуля проекта R содержит описание использования "use Q-all:". то этим не подразумевается. что понятие X будет потенциально видимо и модуле R. Только те понятия, которые фактически объявлены п пакете Q. будут потенциально пилимыми я модуле R (при отсутствии какого-либо другого описания использования).

10.5 Контекст разрешения совмещения

Совмещение определено для подпрограмм и литералов перечисления.

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

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

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

1)    Любое правило, требующее, чтобы имя или выражение имело определенный тип, или имело тот же тип, что и другое имя или выражение.

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

3)    Любое правило, требующее, чтобы префикс соответствовал определенному типу.

4)    Правила, требующие, чтобы тип агрегата устанавливался исключительно из объемлющего полного контекста. Аналогично, правила, требующие, чтобы тип префикса атрибута, тип выражения оператора выбора или тип операнда преобразования типа устанавливались независимо от контекста.

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

II МОДУЛИ ПРОЕКТА И ИХ АНАЛИЗ

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

11.1 Модули проекта

Некоторые конструкции могут быть независимо проанализированы и помещены в библиотеку проекта; такие конструкции называются модулями проекта (design units). Один или более модулей проекта в свою очередь составляют файл проекта (design file).

design_filc :: = dcsign_unil { design_unit }

design_unii :: - contcx_dause library_unii

library_unit :: -primary_unil I secondary_unil

primary_unit :: -entiiy_decla ration I configuration_declaration I packagc_dcclaration

secondary_unil :: -architecture_body I packagc_body

7-1-1406

92

Страница 98

ГОСТ Р 50754-95

Модули проекта в фале проекта анализируются в текстуальном порядке их появления в этом файле. Результатом анализа является определение соответствующего библиотечного модуля в библиотеке проекта. Библиотечный модуль (library unit) — это либо первичный, либо вторичный модуль. Вторичный модуль — это отдельно анализируемое тело первичного модуля, полученного в результате предыдущего анализа.

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

Объявления объектов проекта, архитектурные тела и объявления конфигурации описаны в разделе I. Объявления пакетов и тела пакетов описаны в разделе 2.

11.2    Библиотеки проекта

Библиотека проекта (design library) представляет собой зависящее от реализации средство хранения модулей проекта, которые ранее подвергались анализу. Конкретная реализация может позволять любое число библиотек проекта.

library_clause :: - library Iogical_name_lisi ;

logical_namc_lisl :: - Iogical_name { , logical_namc}

logical_name :: - identifier

Описание библиотеки (library clause) задаст логические имена для библиотек проекта в главном окружении. Описание библиотеки появляется как часть описания контекста, стоящего в начале модуля проекта. Существует определенная область текста, называемая область/о видимости (scope) описания библиотеки; эта область начинается непосредственно посте описания библиотеки и простирается до конца области объявлений, ассоциированной с модулем проекта, в котором стоит это описание. Внутри этой области, за исключением тех мест, где оно скрыто, каждое логическое имя, заданное в описании библиотеки, обозначает библиотеку проекта в главном окружении.

Для конкретного логического имени библиотеки фактическое имя соответствующих библиотек проекта в главном окружении может быть (или нет) одинаковым. Конкретная рехтизация должна обеспечивать некоторый механизм для ассоциирования логического имени библиотеки с конкретной библиотекой. Такой механизм языком не определяется. Существуют два класса библиотек проекта: рабочие библиотеки и библиотеки ресурсов. Рабочая библиотека (working library) — это библиотека, куда помещается библиотечный модуль, полученный в результате анализа модуля проекта. Библиотека ресурсов (resource library) •— это библиотека, содержащая библиотечные модули, ссылка на которые имеется в анализируемом модуле проекта. В процессе анализа конкретного модуля проекта могут участвовать только одна рабочая библиотека и любое число библиотек ресурсов (включая саму рабочую библиотеку).

Подразумевается, что каждый модуль проекта содержит неявно следующие разделы описания контекст:

library STD. WORK; use STD.STANDARD.all:

Логическое имя библиотеки STD обозначает библиотеку проекта, в которой содержится пакет STANDARD и пакет ТЕХТЮ; оба они являются единственными стандартными пакетами, определяемыми языком (см. раздел 14). (Описание использования use делает все объявления, содержащиеся внутри пакета STANDARD, непосредственно видимыми в соответствующем модуле проекта; см. 10.4). Логическое имя библиотеки WORK обозначает текущую рабочую библиотеку, используемую в процессе анализа.

Вторичный модуль, соответствующий конкретному первичному модулю, может быть помешен только в ту библиотеку проекта, в которой расположен этот первичный модуль.

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

Рекомендуется, чтобы б>«блиотска STD содержала толыс» те библиотечные модули, которые соотвсгстиукм модулям проекта, описанным как часть руководства но «зыку. Эта совокупность модулей может меняться со временем но мере разлития деыка; однако портабильмость проектов будет улучшена, если для любо4< конкретной перши языка библ»ютека S'lD содержит иансстнмй набор библиотечных модулей,

11.3    Описание контекста

Описание контекста устанавливает начальную среду, в которой анализируется модуль проекта.

con!cxt_clausc :: и { contcxMicm }

93

Страница 99

ГОСТ I* 50754—95

conicxtjtcm :: = library_clausc I usc_clausc

Описание библиотеки залает логические имена библиотек, ссылка на которые может иметь место в любом модуле проекта. Описания библиотек даны в 11.2. Описание использования (use clause) делает определенные объявления непосредственно видимыми внутри модуля проекта. Описания использования даны в 10.4.

Зависимости между модулями проекта устанавливаются описаниями использования, то есть модуль проекта, который явно или неявно ссылается на другие библиотечные модули в описании использования, зависит (depends) от этих библиотечных модулей. Эти зависимости оказывают влияние на допустимый порядок анализа модулей проекта <см. 11.4).

Примечание — Пр.-шила использования описаний нснольлопашт таковы, чго независимо о» »о<о. используется имя библиотечного модуля одни или более рал п применяемых описаниях использования или даже п одном конкретном описании ■кнольяопания. .-и{х(х.'кг булет один и toi же,

11.4 Порядок анализа

Правила, устанавливающие порядок, в котором модули проекта могут анализироваться, вытекают непосредственно из правил видимости, а именно:

1)    Первичный модуль, на имя которого имеется ссылка внутри конкретного модуля проекта, должен анализироваться раньше этого модуля.

2)    Первичный модуль должен анализироваться ранее любого соответствующего вторичного модуля.

Порядок анализа проекта не должен противоречить порядку, определенному вышеуказанными

правилами.

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

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

12 ПРЕДВЫПОЛНЕНИС М ВЫПОЛНЕНИЕ

Процесс, при помощи которого объявление достигает своего эффекта, называется прсдвы полнен исм этого объявления. После своего пред вы пол ней и я объявление считается прсдвыполненным. До окончания своего предвыполнения (а также и до предвыполнения) объявление еще не считается прсдвыполненным.

Предвыполнение также определено для иерархий проектов, разделов объявлений, разделов операторов (содержащих параллельные операторы) и параллельных операторов. Предвыполнение таких конструкций необходимо, чтобы в конечном счете прсдвыполнить объявления, описанные внутри этих конструкций.

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

12.1 Предвыполнение иерархии проекта

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

Иерархия проекта может быть определена объектом проекта. Предвыполнение иерархии проекта, определенной этим способом, состоит из предвыполнения оператора блока, эквивалентного внешнему блоку, определяемому этим объектом проекта. Эквивалентный оператор блока определен в 9.6.1. Предвыполнение оператора блока определено в 12.4.1.

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

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

94

Страница 100

ГОСТ Р 50754-95

в объявлении пакета, за которым следует предвыполнение раздела объявлений, стоящего в соответствующем теле пакета, если око есть. Предвыполнение раздела объявлении определено в 12.3.

12.2 Предвыполнснис заголовка блока

Пред выполнение заголовка блока (Ыоск header) состоит из предвыполнения описания параметром настройки (generic clausc), описания отображения параметров настройки (gencric map davsc), описания портов (port clausc) и описания отображения портов (port map clausc) в указанном порядке.

12.2.1    Описание парамащюа настройки

Прсдвыполненне описания параметров настройки состоит из прсдвыполисиия каждого из эквивалентных отдельных объявлений параметров настройки, содержащихся в этом описании, в заданном порядке. Предвыполнснис объявления параметра настройки состоит из прсдвыполисиия указания подтипа (subiypc indication) и последующего создания константы настройки (generic constant) этого подтипа.

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

12.2.2    Описание отображения параметров настройки

Предвыполнснис описаиия отображения параметров настройки состоит из предвыполненин списка сопоставления параметров настройки (generic association list). Список сопоставления содержит неявный элемент сопоставления (association element) для каждой константы настройки, дли которой нет- явного сопоставления; фактическая часть {actual part) такого элемента сопоставления представляет собой неявное выражение (default cxprcvsion), состоящее в объявлении этой константы.

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

12.2.3    Описание портал

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

12.2.4    Описание o/noOfuixenu» портов

Прелвыполнснис описания отображения портов состоит из гцкгдвыполнения списка сопоставления портов (port association list).

Предвыполнение списка сопоставления портов состоит из предвыполнения каждого элемента сопоставления портов в этом списке. Предвыполнение элемента сопоставления портов состоит из предвыполнения формальной части; порт или его подэлемент, обозначаемый этой частъю.затсм сопоставляется с сигналом, обозначаемым фактической частью. Такое сопоставление влечет проверку ограничений, налагаемых на сопоставления портов <см. 1.1.1.2.). Возникает ошибка, если эта проверка не имеет успеха.

Если порт типа in в своем объявлении содержит неявное выражение, но для него не задан элемент сопоставления, то это выражение вычисляется и полученное значение становится значением этого порта.

12.3 Предвыполнение раздела объявлений

Предвыполнение раздела объявлений состоит из предвыполнения входящих в него элементов объявлений (declarative item), если они есть, в том порядке, в котором они расположены. В определенных случаях предвыполнение элемента объявлении влечет вычисление выражений, стоящих внутри этого элемента объявлений. Значение каждого объекта, обозначаемого перьичным в таком выражении, должно быть определено во время вычисления этого выражения.

Примечание — Из вмюсукпзоннмд храни;) с.»ел>сг, что uvj сигмила, объя&ж-жюс вмуфи блока, ice может бмгь MCOtVtWOeaiW В ЬЫРЛЖС»М111*, стоащих П -ЧДСМЙИТНХ объявшими BHVTpJI блок». ТДК КПК значение СИОГЗЛ* НС ОПреДвЛвНО до чох гор. пеки иерархии проекта не будет прслаыполно«а. Однако параметр-сигнал может быть исполкюван и оырч«етн»ч, стоящих и элементах кбт.вмеммй, которые it спою очередь используются в рпддел-. объявлений тнх триграммы. но при vcjOhhm, что .чгз подпрограмма нмаыпется только после качала моделировании, гак как значение каждого сигмажл булет вмрсделсмо только к этому комевп1.

12.3.1 Предвыполнснис объявления

Прелвыполнснис объявления создаст объявляемый элемент.

Для каждого объявления правила языка (в частности правила области действия и видимости) таковы, что либо невозможно, либо недопустимо использовать конкретный элемент до предвыполнения объявления, описывающего этот элемент. Например, невозможно использовать имя типа для объявления объекта до того, как соответствующее объявление типа не будет предшполпсно. Аналогично, недопустимо вызывать подпрограмму до предвыполнения се тела.

95

Страница 101

ГОСТ I* 50754-95

12.3.1.1 Объявления    и т ела    п о д п р о г р а иг м

Прслвыполнсиис объявления подпрограммы влечет пред выполнение списка интерфейса параметров (parameter interface list) этого объявления; это в свою очередь влечет лрсдпыполненис указания подтипа каждого элемента интерфейса с целью установить подтип каждого формального параметра этой подпрограммы. Прслвыполнсиис тела подпрограммы не имеет никакою другого эффекта, кроме утверждения того факта, что это тело может теперь использоваться для выполнения вызовов этой подпрограммы.

12.3.1.2 Объявления    типов

Прсдвыполнснис объявления типа в общем состоит из предвыполнения определения типа (type definition) и создания этого типа. Для ограниченного индексируемою типа прсдвыполнснис еще состоит из предвыполнения эквивалентного анонимною неограниченного индексируемого типа, за которым следует прсдвыполнснис именованного подтипа этою неограниченного типа.

Предвыполнснис определения перечисляемого типа (enumeration type dcfiniton) не имеет никакого другого эффекта, кроме создания соответствующего типа.

Прсдвыполнснис определения целого, плавающего или физическою типа (integer-type definition, floating-type definition, physical-type definition) состоит из предвыполнения соответствующего указания подтипа. Для определения физического типа каждое объявление единицы (unit declaration) в этом определении также пред выполняется. Прсдвыполнснис объявления физической единицы не имеет никакого другого эффекта, кроме создания единицы, определяемой объявлением единицы.

Предвыполнснис определения неограниченного индексируемого типа (unconstrained type definition) состоит из предвыполнения указания подтипа элементов (element subtype indication) этою индексируемого типа.

Прсдвыполнснис определения структурного типа (record type definition) состоит из предвыполнения эквивалентных отдельных объявлений элементов (element declaration) в заданном порядке. Прсдвыполнснис объявления элемента состоит из предвыполнения указания подтипа элемента (element subtype indication).

Предвыполнснис определения ссылочного типа (access type definition) состоит из предвыполнения соответствующего указания подтипа.

12.3.1.3    О б ъ и в л с и и я по д т и п о в

Предвыполнснис объявления подтипа (subtype declaration) состоит из предвыполнения указания подтипа. Прсдвыполнснис указания подтипа создаст подтип. Если этот подтип не содержит ограничение (constrain), то это тот же подтип, который обозначается меткой типа (type mark). Прсдвыполнснис указания подтипа, содержащего ограничение, состоит из следующего:

1)    Сначала предвыполнястся ограничение.

2)    Затем делается проверка на совместимость этого ораничения с типом или подтипом, означаемым меткой типа (см. 3.1 и 3.2.1.1).

Предвыполнснис ограничения диапазона (range constraint) состоит из вычисления этого диапазона. Вычисление диапазона определяет границы и направление этого диапазона. Прсдвыполнснис ограничения индекса (index constraint) состоит из предвыполнения каждого из дискретных диапазонов (discrete range) в этом ограничении индекса в порядке, не определяемом языком. Прсдвыполнснис ограничения размера (size constraint) состоит из вычисления выражения.

12.3.1.4    Объявления объектов

Предвыполнснис объявления объекта (object declaration), описывающего объект, отличный от файловою объекта, происходит в следующем порядке:

1)    Сначала предвыполнястся указание подтипа. Тем самым устанавливается подтип этого объекта.

2)    Если объявление обт>скта содержит явное инициализирующее выражение, то вычислением этого выражения получается начальное значение этого объекта. В противном случае устанавливается неявное начальное значение.

3)    Объект создается.

4)    Начальное значение присваивается объекту.

Инициализация такого объекта (либо всего объекта, либо его под элемента) влечет проверку на принадлежность начального значения подтипу этого объекта. Для индексируемого объекта, описанного объявлением объекта сигнала, применяется неявное преобразование подтипа, как в случае оператора присваивания, если только этот объект не является константой, подтипом которой является неограниченный индексируемый тип.

Прсдвыполнснис объявления файлового объекта состоит из предвыполнения указания подтипа, за которым следует создание этого объекта. Затем вычисляется логическое имя файла и файловому объекту сопоставляется соответствующий физический файл.

Примечание — Описанные правила применяются ко «сеч гЛьимснимм обмасгоп. « исключением оГп.яолсний кортом и параметроп настройки. прслвыполпеиис которых описано » 12.2.1—12.2.4.

Выражение, инициализирующее константу, не обязательно лолжно -1ып> статическим выражением

7-2-1406

96

Страница 102

ГОСТ l> 50754—95

12.3.1.5    Объявления дополни щ с л ь п ы х и м с п

Предвыполнекие объявления дополнительною имени (alias declaration) состоит из предвыпод нения указания подтипа для утверждения подтипа, сопоставляемою с этим именем. за которым следует создание дополнительного имени как альтернативного для имени объекта, заданного в этом объявлении. Создание дополнительного имени для индексируемого объекта влечет проверку того, что этот подтип включает соответствующий элемент для каждого элемента этого объекта. Возникает ошибка, если эта проверка не имеет успеха.

12.3.1.6    Объявления am р и О у т о о

Предвыполнение объявления атрибута (attribute declaration) не имеет никакого другого эффекта, кроме создания шаблона для определения атрибутов элементов.

12.3.1.7    Объявления ко м п о н с ч in о «

Предвыполнение объявления компонента (component declaration) не имеет никакого другого эффекта, кроме создании шаблона для конкретизации экземпляров компонента.

12.3.2 Предвыполиение спецификации

Предвыполнение спецификации (specification) не имеет никакого другого эффекта, кроме сопоставления дополнительной информации с ранее объявленным элементом.

12.3.2.1    С п е ц и ф и к а ц и я а триб у т о в

Прсдвыполнеине спецификации атрибута (attribute specification) происходит в следующем порядке:

1)    Для того, чтобы установить, какие элементы задейсгоухггся спецификацией атрибута, прелвыпол-няетсм спецификация понятия (entity specification).

2)    Для определения значения атрибута вычисляется    выражение.

3)    Создастся новый экземпляр указанного атрибута    и сопоставляется    с    каждым    из    задействованных

элементов.

4)    Каждому новому экземпляру атрибута присваивается полученное значение.

Присваивание значения экземпляру конкретною атрибута влечет проверку на принадлежность этого значения подтипу указанного атрибута. Дли атрибута ограниченного индексируемого типа сначала применяется неявное преобразопанис подтипа, как в операторе присваивания. Для атрибута неограниченного индексируемого типа в таком преобразовании нет необходимости; ограничении этого атрибута определяются ограничениями самого значения.

Примет п и с — Лырлжснис в спецификации атрибута «чч&штсчмго должно    быть    омическим    «мражешюм.

12.3.2.2    С /г е ц к ф и к а н и и к о н ф и г    у р а j* и и

Предвыполнение спецификаций конфигурации (configuration specification) происходит в следующем порядке:

1)    Предвыполняется спецификация компонента (component specification); тем самым определяется, какие экземпляры компонента задействуются этой спецификацией конфигурации.

2)    Предвыполняется связывающее указание (binding indication»; тем самым идентифицируется объект проекта, к которому задействованиыс экземпляры компонент будут привязаны.

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

Составной частью этого проекта прслвыполнсиия является проверка на существование в указанной библиотеке проекта как объявления объекта (entity declaration», так и соответствующего архитектурного тела (architecture body), подразумеваемых связывающим указанием. Возникает ошибка, если :>та проверка не имеет успеха.

12.3.2.3    С п е ц и ф и к а ц и я и т к л ю и v к и я

Предвыполнение спецификации отключения (disconnection specification) происходит в следующем порядке:

1> Предвыполняется спецификация защищенных сигналов (quarded signal specifications; тем самым идентифицируются сигналы, задействованные этой спецификацией.

2» Вычисляется выражение времени (time expression); тем самым определяется время отключения для драйверов задействованных сигналов.

3) Время отключения сопоставляется с каждым задействованным сигналом для последующего использования при построении операторов отключения в эквивалентных процессах для защищенных назначений (quarded assignment) задействованных сигналов.

12.4 Предвыполнение раздела операторов

Параллельные операторы (concurrent statement), стоящие в разделе оператором (statement part) блока, должны быть лредвьшолненм до начала моделирования. Предвыполнение раздела операторов -блока состоит из пред выполнения каждого параллельного оператора в заданном порядке.

12.4.1 Операторы Люки

97

Страница 103

ГОСТ Р 50754-95

Предвыполненис оператора блока (block statement) состоит из предвыполнения заголовка блока <Ыоск header), если он задан, за которым следует прсдвыполненис раздела объявлений блока (block declarative part) и, наконец, предвыполнения раздела операторов блока (block statement part).

Прсдвыполненис оператора блока может происходить под управлением объявления конфигурации (configuration declaration). В частности, конфигурация блока (block configuration) внутри объявления конфигурации может являться источником последовательности дополнительных неявных спецификаций конфигураций, которые применяются в течение предвыполнения соответствующего оператора блока. Если оператор блока предвыполняется под управлением объявления конфигурации, то такая последовательность неявных спецификаций конфигураций, источником которой является конфигурация блока, прсдвыполня-ется как часть раздела объявлений этого блока, стоящая после всех остальных элементов объявлений в этом разделе.

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

12.4.2    Операторы генерации

Прсдвыполненис оператора генерации (generate statement) состоит из замещения этою оператора множеством копий (возможно пустым) оператора блока, раздел операторов которого включает параллельные операторы, содержащиеся в этом операторе генерации.

Такие операторы блока считаются представленными этим оператором генерации. Затем каждый оператор блока предвыполняется.

Для оператора генерации со схемой генерации (generation scheme) for иредвыполненис состоит из предвыполнения дискретного диапазона (discrete range), за которым следует генерация одного оператора блока для каждого значения в этом диапазоне. Все операторы блока при этом имеют следующий вид:

1)    Метка оператора блока совпадает    с меткой    оператора генерации.

2)    Раздел объявлений блока содержит    единственное объявление    константы,    которое описывает    константу

с тем же простым именем, что и у применяемого параметра генерации (generate parameter); значением этой константы является значение параметра генерации, при котором произошла генерация этого конкретного блока. Тип этого объявления определяется базовым типом дискретного диапазона параметра генерации.

3)    Раздел операторов блока содержит копию параллельных операторов, стоящих внутри оператора генерации.

Для оператора генерации со схемой генерации if предвыполненис состоит из вычисления логического выражения (boolean expression), за которым следует генерация точно одного оператора блока, если это выражение вырабатывает значение TRUE, или ни одного блока — в противном случае. В случае генерации оператор блока имеет следующий вид:

1)    Метка блока совпадает с меткой    оператора    генерации.

2)    Раздел объявления блока пустой.

3)    Раздел операторов блока состоит    из копии    параллельных    операторов,    стоящих    внутри    оператора

генерации.

Примечание» Ионюрсиис меток блока ii|Hi испалмошишн схемы генерации for lie по;|разумепает многократное объявление эюП метки. Последом тслыюсп. оператором блока, прелопплениых ошераюроч генерации, сосгамчет послслова тел ы i осгь ссылок к одной и том же неявно обмтленпоп метке.

12.4.3    Операторы конкретизации компонентов

Предвыполненис оператора конкретизации компонента (component instantiation statement) не имеет никакого эффекта, если только экземпляр компонента не является либо полностью связанным (fully bound) с объектом проекта, определенным объявлением объекта и архитектурным телом, либо связанным с конфигурацией этого объекта проекта. Если это так, то предвыполненис соответствующего опсратор;| конкретизации компонент;! сосгоит из предвыполнения подразумеваемого оператора блока, представляющего экземпляр этого компонента, и (вместе с этим блоком) подразумеваемого оператора блока, представляющего объект проекта, к которому этот экземпляр привязан. Указанные от.1мторы блока определяются в 9.6.1.

12.4.4    Другие параллельные операторы

Все другие параллельные операторы — это либо операторы процесса (process statement), либо операторы, для которых существует эквивалентный оператор процесса.

Прсдвыполненис оператора процесса происходит в следующем порядке:

1)    Предвыполняется раздел объявлений процесса (process declarative part).

2)    Создаются драйверы, требуемые этим оператором процесса.

3)    Начальная транзакция, определяемая неявным значением, сопоставленным с каждым скалярным сигналом, управляемым этим оператором процесса, вставляется в соответствующий драйвер.

98

;.2*

Страница 104

ГОСТ I* 50754—95

Прсдвыполнение всех параллельных операторов назначения сигнала (concurrcnt signal assignment statement) и параллельных операторов утверждения (concurrent assertion statement) состоит из построения эквивалентного оператор;» процесса, за которым следует его предвыподнение.

12.5    Динамическое предвыполнеиис

Выполнение некоторых конструкций, содержащих в отличие от параллельных операторов последовательные операторы, также влечет прсдвыполнение. Такое предвыподнение происходит во время выполнения модели.

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

1)    Выполнение оператора цикла со схемой итерации (iteration scheme) for влечет прсдвыполнение спецификации параметр.! цикла (loop parameter specification) до того, как начнется выполнение операторов, содержащихся в этом цикле (см. 8.8.). Такое прсдвыполнение создает параметр цикла (loop parameter) и вычисляет дискретный диапазон.

2)    Выполнение вызова подпрограммы (subprogram call) влечет предвыподнение списка интерфейса параметров (parameter interface list) соответствующего объявления подпрограмм (subprogram declaration); это в свою очередь влечет предвыподнение каждого объявления интерфейса (interface declaration) с целью создания соответствующих формальных параметров. Затем фактические параметры сопоставляются с формальными параметрами. Наконец, прсдвыполняется раздел объявлений соответствующего тела подпрограммы (subprogram body) и происходит выполнение последовательности операторов, содержащихся в этом теле.

3)    Вычисление генератора (allocator), содержащего указание подтипа, влечет прсдвыполнение этого указания до генерации создаваемого объекта.

Примечание — И» вышеописанных правил следует, что .моменты объявлений <<lcclaraiive item», стоящие внутри ролдела объявлений тела иодпротра.ммы. предвыиолняются каждый раз. когда соответствующая подпрограмма вызывается; таким образом следующие одно за одним предвыполнення конкретною длсмситл оСп-явлений, стоящего и гаком месте, могут сох ид или. элементы с различными характеристиками. Например, следующие одно аа одним прсдамполиения одного и тоги же объявления 1ю.|тина. стоящего в теле подпрограммы, могут co.vum.nb |юлтимы с различными ограничениями.

12.6    Выполнение модели

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

Ядро модели (kernel process) — это концептуальное представление процесса, который координирует активность определенных пользователем процессов при выполнении моделирования. Этот процесс осуществляет распространение значений сигналов и изменение неявных сигналов (таких, как S’STABLE(T)). Более того, на этом процессе лежит ответственность за обнаружение происходящих событий и осуществление выполнения подходящих процессов в ответ на эти события.

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

Дополнительно ядро модели содержит переменную, представляющую текущее значение любого неявно объявленного сигнала GUARD, объявление которого появляется в результате использования защищающего выражения в конкретном операторе блока. Более того, ядро модели содержит драйвер и переменную, представляющие текущее значение любого сигнала вида S’Stablc(T), для каждого префикса S и для каждого времени Т, к которому есть ссылка в модели; то же самое верно для сигналов вида S’Quict(T) и S’Transaclion.

12.6.1 Распространение .точений сигна.чоа

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

1)    один    из его    источников является активным;

2)    один    из его    подэлемеитов является активным;

3)    этот    сигнал    используется в формальной части    (formal    part)    элемента    сопоставления    (association

element) в    списке    сопоставления портов (port association    list),    и    соогвстствующий    фактический    сигнал

является активным;

4)    этот сигнал является подэлсментом разрешенного cunixia, и последний является активным.

99

Страница 105

ГОСТ Р 50754-95

Если сигнал конкретного составного типа имеет источник другого типа (и. следовательно, в соответствующем элементе сопоставления задана функция преобразования типа), то каждый скалярный подэлемент этого сигнала рассматривается как активный, если этот источник сам является активным. Аналогично, если порт конкретного составного типа сопоставляется с сигналом другого типа (и, следовательно, в соответствующем элементе сопоставления задана функция преобразования типа), то каждый скалярный подэлемент этого порта считается активным, если фактический сигнал сам является активным.

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

Если сигнал не является активным в течение конкретного цикла моделирования, то этот сигнал считается пассивным (quiel) в течение этого цикла моделирования.

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

Для скалярного сигнала S задающее значение сигнала вычисляется следующим образом:

1)    Если S не имеет источников, то задающим значением S является неявное значение, сопоставленное с S (см. 4.3.1.2.).

2)    Если S имеет один источник в виде драйвер,! и S не является разрешенным сигналом (см. 4.3.1.2.), то задающим значением S является значение этого драйвера.

3)    Если S имеет один источник в виде порта и S не является разрешенным сигналом, то задающим значением S является задающее значение формальной части элемента сопоставления, сопоставляющего S с этим портом (см. 4.3.3.2.). Задающее значение формальной части получается вычислением формальной части с использованием задающего значения сигнала, обозначаемого формальным указателем на месте формального указателя.

4)    Если S является разрешенным сигналом, то задающее значение S совпадает с разрешенным значением S, полученным выполнением функции разрешения, сопоставленной с S; при этом эта функция вызывается с входным параметром, содержащим конкатенацию задающих значений источников S, за исключением значений драйверов S, текущее значение которых определяется пустой транзакцией (см. 8.3.1).

Для составного сигнала R задающее значение R эквивалентно агрегату из задающих значений каждого скалярного подэлемента сигнала R.

Для скалярного сигнала S эффективное значение S вычисляется следующим образом:

1)    Если S является сигналом, описанным объявлением сигнала, портом вида buffer или неподключенным портом вида inoul, то эффективное значение S совпадает с задающим значением S.

2)    Если S является подключенным портом вида in или inout, то эффективное значение S совпадает с эффективным значением фактической части элемента сопоставления, сопоставляющего фактический сигнал с S (см. 4.3.3.2). Эффективное значение фактической части получается вычислением фактической части с использованием эффективного значения сигнала, обозначаемого фактическим указателем на месте фактического указателя.

3)    Если S является неподключенным портом вида in. то эффективное значение S задается неявным значением, сопоставляемым с S (см. 4.3.1.2).

Для составного сигнала R эффективным значением R является агрегат, составленный из эффективных значений всех подэлементов сигнала R.

Для скалярного сигнала S и задающее, и эффективное значения должны принадлежать подтипу этого сигнала. Для составного сигнала R выполняется неявное преобразование подтипа в подтип сигнала R; для каждого элемента сигнала R должен существовать соответствующий элемент как в задающем, так и в эффективном значениях и наоборот.

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

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

2)    Если S является индексируемым сигналом (включая сечения массива), то эффективное значение S неявно преобразуется в подтип сигнала S. При этом делается проверка того, существует ли для каждого

100

7-3—1*06

Страница 106

ГОСТ Р 50754-95

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

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

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

Изменение неявных сигналом S’STABLE<T>. S:QUFET<T) и ^’TRANSACTION для любого префикса S и любого времени Т не подчиняется вышеописанным правилам; изменение этих сигналов подчинено правилам, описанным в 12.6.2.

П (I и м е ч a it и е — U цикле мцдолнроиаиии 1м>л»ж!меиг сосглшмкм ттллп щжст 6i.it»* пассиинмм. хоги СЛН СипЮл

МО^СГГ Смги Д «ТИШ! 144.

Правила а отношении сопосто анемия фок?и<ьхких парачс1рон с формальными (сч. 4.3.3.2. • подразумcmюг, что ссли состаюи СИП1ЛЛ ССПЛСТЛОЛЯСГГСЯ С COCTUМШМ портом КИДД ОЩ1. Inoul ИЛИ |шГГрГ И UM форналицм. И1» фиКТНЧССКН* част ЛГСМСЧИЛ CftlOCTHIUTCIVnt

iK содсржлг функцию прогфвдтання типа, то каждый солярный по.члкгчеяг формального (iap<a>«crpa яммею* источникам ссотвгтсткуютсго пояэлсмагтп фактического параметра. В этом случяс конкретный ютдапемеш факшческцпу параметра булег активным, если и тодмео ссли активен соошспгпуюший подячемент фирмильмого параметра.

Алгориш шчкедения сдающею значения С*ол*р«юто сигнала S ъюяыы регуреидшм. Например. если $ яяляетс* ясжал.пым сигналом, стоящим р списке сопоставления гюртов. то задающее значение сыпала S может бып» лоаучеип тоямго послс тою. глк будет вычислено аадаккцсс значение coorocTcrnyioirtdi флпичссной чпеги. 0*\> может повлечь многократное ьииолпйинс укддошкио алгоритма.

Аналогию, алтяретм вычисления зффектшюлр значения сигнала S яклисгся рскурсившдм. Напрмчер, ссл и фефмалзлнлй пору S вида in сопоставлен с фактическим складом А, то эффсктипмос значение \ должно Сыть емчисле»#> до тот, как жигст Сын. пыч1»^лс1*:) эффективное липчеииг тюртл $. Фактический сигнал А может сз* fan* испаоаоюиимм как формальный i»opi & списке сопоставления порки.

Для иортои лидд auf или linkage эффекьюиое значение ие жиаетСя. 7.к. Эти nopiu не moi>t читаться.

12.6.2 Изменение неявных сигналов

Ядро модели изменяет значение каждого неявного сигнала GUARD, сопоставленного с оператором блока, имеющим защищающее выражение. Аналогично, ядро модели изменяет значения каждого неявного сигнала S’STABLE(T), S’QUIET(T) или S’TRANSACTION для любого префикса S и любого времени Т; это также влечет изменение драйверов сигналов S’STABLE(Ti и S'QUIET(T).

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

Для любого неявного сигнала S’$TABLE<T) текущее значение этого сигнала (а также текущее состояние соответствующего драйвера) модифицируется, ссли и только сели истинно одно из следующих утверждений:

1)    в текущем цикле моделирования на S произошло событие,

2)    драйвер сигнала S'STABLE(T) является активным.

Если на сигнале S произошло событие, то сигнал S’STABLE<T) изменяется присваиванием значения FALSE переменной, представляющей текущее значение сигнала S'$TABLE<T), а драйверу сигнала S’STABLE(T) присваивается форма сигнала TRUE after Т. В противном случае, ссли драйвер сигнала S’STABLE(T) является активным, го S’STABLE(T) изменяется присваиванием текущего значения этого драйвера переменной, представляющей текущее значение сигнала S’STABLEST). Наконец, ссли оба утверждения ложны, то ни переменная, ни драйвер не модифицируются.

Аналогично, для любого неявного сигнала S'QUTETCT) текущее значение этого сигнала (а также текущее состояние соответствующего драйвера) модифицируется, если и только если истинно одно из следующих утверждений:

1)    сигнал S является активным,

2)    драйвер сигнала S’QUJET(T) является активным.

Если сигнал S является активным, то сигнал S‘QUFET(T) изменяется присваиванием значении FALSE переменной, представляющей текущее значение сигнала S'QUIET(T), а драйверу сигнала S’QUIET<T> присваивается форма сигнала TRUE after Т. В противном случае, ест драйвер сигнала S’QUIET(T> является активным, то сигнал S’QUIET(T) изменяется присваиванием текущего значения этого драйвера

101

Страница 107

ГОСТ Р 50754-95

переменно», представляющей текущее значение сигнала S’QUIET(T). Наконец, если оба утверждения ложны, то ни переменная, ни драйвер не модифицируются.

Для любого сигнала S’TRANSACTION текущее значение этого сигнала модифицируется, если и только если сигнал S является активным. Если это так, то сигнал S'TRANSACTION изменяется присваиванием значения выражения (not S'TRANSACTION) переменной, представляющей текущее значение сигнала S’TRANSACTION.

Текущее значение конкретного неявного сигнала R считается зависимым от текущего значения другого сигнала S, если верно одно из следующих утверждений:

1)    R обозначает неявный сигнал GUARD и S является любым другим неявным сигналом, имя которого

стоит    в    защищающем выражении, определяющем текущее значение сигнала R.

2)    R    обозначает    неявный    сигнал    S’STABLE(T).

3)    R    обозначает    неявный    сигнал    S’QUIET<T).

4)    R    обозначает    неявным    сигнал    S'TRANSACTION.

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

Примечание — Вышеописанные правила подразумевают, чш если драйвер сишш S'STABLIHT* япляется активным, то iioiuxm текущим значением этого драйвера а вд не гея дначешее TRUI-.. Ikuec тога, вышеописанные правила подразумевают, что сели * течение конкретного цикла моделирования на сшиале S произошло событие и драйвер сишала S'STABLEO-* eta.» активным в течение этого же цикла, то переменной, представляющей текущее значение сигнала S’STABLEfr*. будет присвоено значение FAI.SK и текущее значение драйвера сигнала S’STAHLECT* в течение лою цикла никогда не будет присвоено этому ситалу

12.6.3 Цикл моделщюашшя

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

Фаза инициализации состоит из следующих шагов:

1)    Вычисляются задающее значение и эффективное значение каждого явно объявленного сигнала и текущее значение сигнала устанавливается в эффективное значение. Это значение рассматривается как значение сигнала, которое он имеет постоянно до начала моделирования.

2)    Значение каждого неявного сигнала вида S’STABLE(T) или S’QUIET(T) устанавливается в значение TRUE.

3)    Значение каждого неявного сигнала GUARD устанавливается в значение, полученное вычислением соответствующего защищающего выражения.

4)    Каждый процесс в модели выполняется до тех пор, пока он не будет приостановлен.

В начале моделирования текущее время имеет значение 0 не.

Цикл моделирования состоит из следующих шагов:

1)    Если нет активных драйверов, то время моделирования продвигается к следующему времени, в которое драйверы станут активным или возобновится процесс. Моделирование завершается, если время моделирования достигло TIME’HIGH.

2)    Каждый активный явный сигнал в модели изменяется. (В результате на сигналах могут произойти события.)

3)    Каждый неявный сигнал в модели изменяется. (В результате на сигналах могут произойти события.)

4)    Каждый процесс Р, если Р в настоящий момент чувствителен к сигналу S, и на S произошло событие в этом цикле моделирования, то процесс Р возобновляется.

5)    Каждый возобновленный процесс выполняется до его приостановки.

11 р и м с ч.а и и с — Начальное значение любого неявною ситам вш S’TRANSACTION не определено.

Изменение явных сигналов описано в 12-6.1; изменение неявных сишплов описано в 12 6.2,

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

13 ЛЕКСИЧЕСКИЕ ЭЛЕМЕНТЫ

Текст описания состоит из одного или более файлов проекта. Каждый файл проекта представляет собой последовательность лексических элементов, каждый из которых составлен из символов; в настоящем разделе описаны правила построения лексических элементов.

13.1 Набор символов

7-г

102

Страница 108

ГОСТ Р 50754-95

В тексте VHDL-опиеания разрешено использовать только графические символы и символы управления форматом. Каждому графическому символу соответствует уникальный код из семиразрядного набора символов ISO (ГОСТ 27463) и знак визуального представления. Некоторые графические символы представлены различными знаками визуального представления в зависимости от национальной принадлежности набора символов ISO. Описание языка в настоящем стандарте использует графические символы набора ASCII (ANSI представления набор;! символов 1S0>.

graphic_characler :: - basic_graphic_character I lowcr_cascJctter I olhcr_spccial_charactcr

basic_graphic_character :: - uppcr_case_!etier

I digit I special_characicr I space_character

basic_charactcr :: = basic._graphic_character I forma i_effector

Базовый набор символов является достаточным для составления любою описания. Символы, входящие в каждую категорию базовых графических символов (basic graphic character), определены следующим образом:

а)    заглавные буквы (upper case letters) ABCDEFGHIJKLMNOPQRSTUVWXYZ

б)    цифры (digits)

0123456789

в)    специальные символы (special characters)

“#&’()* + , —

г)    символ пробела (space character)

К символам управления форматом (format effector) относятся символы из набора ISO (и ASCII), называемые: горизонтальная табуляция, вертикальная табуляция, возврат каретки, подача строки, подача страницы.

В остальные категории графических символов входят следующие символы:

д)    строчные буквы (lower case letters) abcdefghijklmnopqrstuvwxyz

с) прочие специальные символы (other special characters)

! $ % @ ? I \ 1Л‘{}~

Допустимая замена специальных символов: вертикальная черта (I), диез (#) и кавычки О — определена в 13.10 настоящего раздела.

Примечание — Символ из нобора ISO. соответствующий визуальному символу # в представлении ASCII, появляется как символ фунта стерлинга в фронцуэском, немецком и английском национальных стандартах В любом случае разработка набора шрифтов визуальных символов (например, курсивного или под'теркнутого* не является частью стандарта ISO.

Значения аббревиатур, используемых в данном разделе, следующие: ANSI — Американский Национальный Институт по Стандартам, ASCII — Американский Стандартный код обмена информацией. ISO — Международна» Организация но Стандартизации.

Для ссылки на специальные символы используются следующие имена:

символ имя    символ    имя

м

кавычки

>

больше

#

диез

_

подчеркивание

&

амперсанд

т

вертикальная черта

9

апостроф

1

восклицательный знак

(

левая круглая скобка

S

доллар

• »

Лравая круглая скобка

%

процент

звезда, умножить

т

понроеительиый знак

•f

плюс

<*

коммерческое а(

запятая

1

левая квадратная скобка

дефис, минус

\

обратный слэш

.

точка, период

1

правая квадратная скобка

/

слэш, разделитель

л

орфографический знак

:

двоеточие

тупое ударение

«

точка с запятой

<

левая фигурная скобкп

<

меньше

)

правая фигурная скобкп

равно

*•

тильда

103

Страница 109

ГОСТ Р 50754-95

13.2 Л с к с и ч с с к и с элементы, р а з л с л и т с л и и ограничители

Текст каждого модуля проекта является последовательностью отдельных лексических элементов. Каждый лексический элемент — эго либо ограничитель, либо идентификатор (может быть служебным словом), либо абстрактный литерал, либо символьный литерал, либо строковый литерал, либо битово-строковый литерал, либо комментарий.

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

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

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

&'<>* + , — ./:<->!

или один из составных ограничителей, составленный из рядом стоящих специальных символов:

= >*•; = /«>-<-<>

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

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

В отношении составных ограничителей используются следующие имена:

ограничитель

имя

->

стрелка

двойная лвеада. возведение в степень

присваивание переменной

/-

не ровно

>-

больше или равно

<-

меньше или равно, а также назначение сигнала

О

блок

13.3 И д с н т

ификаторы

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

identifier :: - letter { | underline I lcttcr_or_digit }

leticr_of_digit :: - letter I digit

letter :: = upper_casc_leitcr I lowcr_casc_lcttcr

Все символы в идентификаторе существенны, включая символ подчеркивания (underline), стоящий между буквой (letter) и цифрой (digit) или между двумя соседними буквами, или двумя соседними цифрами. Идентификаторы, различающиеся только по использованию соответствующих заглавных (upper case letter) и строчных (lower case letter) букв, считаются одинаковыми.

Примеры

1    COUNT    X    C_OUT    FFT Decoder

2    VHSIC    XI PageCount    STORE_NEXT_ITEM

Примечание— Так как пробел является разделителем, то нсполимшашк' сю недопустимо ипутрм идентификатора.

Страница 110

ГОСТ Р 50754-95

13.4 Абстрактные литералы

Имеются дна класса абстрактных литералов: действительные литералы и целые литералы. Действительным литералом является абстрактный литерал, содержащий точку; целым литералом является абстрактный литерал без точки. Действительными литералами являются литералы типа универсальный — действительный. Целыми литералами являются литералы типа универсальный целый.

abslractjiicral :: - decimalJiieral I basedjilcral

13.4.1    Десятичные литералы

Десятичным литералом (decimal literal) является абстрактный литерал, выраженный в десятичной системе счисления (то есть баз;! счисления — это точно 10).

decimaljiteral :: ■ integer | . integer | | exponent 1

integer :: » digit { | underline 1 digit }

exponent - E l+| integer I E — integer

Символ подчеркивания, стоящий между двумя соседними цифрами десятичного литерала, не оказывает влияния на значение этого абстрактного литерала. Буква Е в выражении экспоненты (если оно используется) может быть написана в любой форме (заглавной или строчной) — значение выражения от этого не меняется.

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

Примеры

1    12    0    IE6    123_456    - - целые литералы

2    12.0    0.0    0.456    3.14159_2б    - - действительные

-    - литералы

3    I.34E—12    I.0E+6    6.023Е+24    - - действительные литс-

—    ралы с экспонентой

Примечание— И пбетрштих» литералах допускаются нсиичащ!*: пули. Так лак пробел яшветсв рпгглитслсч. та <щ не разрешен в a&ifUKim.ix лтерллпх лаже между еосттмми ч«лями экстнкшы. Значение О скситснт репрапст ти*о п целых «перш,

13.4.2    Базщюваниые литералы

Базированный литерал (based literal) — это абстрактный литерал, выраженный в форме, которая явно содержит базу счисления. Пам счисления может находиться в пределах от 2 до 16.

basedjilcral :: -base # basedjntcgcr | . bascdjnteger | # | exponent |

base :: - integer

bascdjnteger :: = extendcd_digit { I underline 1 cxtcndcd_digii }

cxtended_digit :: - digit I letter

Символ подчеркивания, стоящий между двумя соседними цифрами в базированном литерале, не влияет на значение этого абстрактного литерала. База счисления (base) и экспонента должны быть выражены десятичным числом. Буквой, используемой в качестве расширенной цифры (extended digit), могут быть буквы от А до F, соответственно представляющие цифры от 10 до 15. Буква в базированном литерале (будь то буква Е в экспоненте или расширенная цифра) может быть написана как в заглавной так и в строчной форме, — значение литерала от этого не меняется.

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

Примеры

-    - целые литералы

-    - значения 255

Страница 111

ГОСТ l> 5075-4—95

2#llll_llll# I6#FF# Ol6jrOFF#

-    - целые литералы

-    - значении 224

16#Е#Е1    2#П10_0000#

-    - действительные

-    - литералы значения

-    - 4095.0

16#F.FF#E+2 2#I.II11_IIIIJII#EI1

13.5    Символьные литералы

Символьный литерал формируется включением одного из 95 графических символов (включая символ пробела) между двумя символами апостроф.!. Символьный литерал содержит значение символьного типа.

cliaractcr_litcr.il :: - ’ graphic_charactcr *

Примеры

1    ’А’

2

3

4    * ’

13.6    Строковые литералы

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

siringjitcral :: - “ { graphic_character } ”

Строковый литерал имеет значение, представляющее собой последовательность символьных значений, соответствующих графическим символам а го го строкового литерала, исключая сами кавычки. Если необходимо включить символ кавычки в состав строкового литерала, то этот символ надо повторить подряд два раза на соответствующем месте. (Это означает, чго строковый литерал, содержащим два рядом стоящих символа кавычки, никогда не интерпретируется как два рядом стоящих строковых литерала).

Длина строкового литерала равна количеству символьных значений в представленной последовательности. (Каждый удвоенный символ кавычки учитывается как один символ).

Примеры

1    "Setup lime    is too short" - - сообщение об ошибке

2    - - пустой строковый литерал

3    " “ "А"    — три строковых литерала длиной    I.

4    "Characters    such as S, % and } arc allowed in stringlitcrals”

Примечание - Стро*соиыЛ литерал должен быть написан на «миом строчке, т.к. от является лексическим элементом (см. 13.2». Полос длинные литералы могут быть соопилены при помощи операции конкатенации. Эта операции также может быть истюльэопана лля получения С1рокмпмх лшерало». содержащих не трофические символы. Спецификации псгрофн>кч:ких симнолон содержшея в объявлении типа CHARACTER в пакете STANDARD Ниже лапы примеры использовании операции конкатенации' I) “FIRST PART or A SEQUENCE 01 CHARACTERS" &

2> “THAT CONTINUES ON TUB NEXT LINE"

3) “sequence that includes (he* A ACK & “control character"

13.7    Битово-строковые литералы

Битово-строковые литералы (bit-siring literal) формируются из последовательности расширенных цифр, заключаемой между двумя символами кавычки, используемых как скобки строки битов, которой предшествует спецификатор базы (base specifier).

bit_string_liicral :: - base_specificr " bil_value”

bit_valuc :: • extended_digit { | underline | extcndcd_digit J

basc_spccificr - В I 0 I X

Символ подчеркивания, стоящий между двумя соседними цифрами в битово-строковом литерале, не влияет на значение этого литерала. Буквой, используемой в качестве расширенной цифры, могут быть буквы от А до F, представляющие соответственно цифры от 10 до 15. Буква в битово-строковом литерале

106

Страница 112

ГОСТ Р 50754-95

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

Если спецификатор базы счисления есть В. то в качестве расширенных цифр могут выступать только цифры 0 и 1; если 0, то цифры от 0 до 7; и если X, то цифры от 0 до 9 и от Л до F.

Битово-строковый литерал имеет значение, представляющее собой последовательность значений предопределенного типа BIT (то есть последовательность из '0’ и ’Г). Если указатель базы счисления есть В. то значение битово-строкового литерала есть ом литерал. Если указатель базы есть 0 (или X), то значением литерала является последовательность, полученная замещением каждой расширенной цифры последовательностью из трех (или четырех) значений предопределенного типа BIT.

Длина битово-строковою литерала равна числу значении типа BIT в представленной последовательности. Примеры

1    X"FFF" - - эквивалентно В'* 1111 1111 1111"

2    Ои777" - - эквивалентно rilljlljfl"

3    Х"777” - - эквивалентно В"011 Т_0111_0III’*

13.8    К о м м с н т а р и и

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

В комментарии допускаются любые символы любых алфавитов, реализуемых инструментальной ЭВМ. Примеры

1    the    last sentence above echoes the Algol 68 report end;

- -    processing of line is    complete

2    a long comment may be    split onto

3    two    or more consecutive    lines

4    ... — - - - - - — the first two hyphens start the comment

5    - -    это комментарий

Примечание— Горизонтальная табуляция может быть исиолыииана в комментарии после двойного еммполп дефиса н .что экннядлентио одному или более пробелов (см. 13.2).

13.9    Зарезервированные слова

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

ABS

ELSE

MOD

RETURN

ACCESS

ELSEIF

NAND

SELECT

AFTER

END

NEW

SEVERITY

ALIAS

ENTITY

NEXT

SIGNAL

ALL

EXIT

NOR

SUBTYPE

AND

FILE

NOT

THEN

ARCHITECTURE

FOR

NULL

TO

ARRAY

FUNCTION

OF

TRANSPORT

ASSERT

GENERATE

ON

TYPE

ATTRIBUTE

GENERIC

OPEN

UNITS

BEGIN

GUARDED

OR

UNTIL

BLOCK

IF

OTHERS

USE

BODY

IMPORT

OUT

VARIABLE

BUFFER

IN

PACKAGE

W АП-

BUS

INITIALIZE

PORT

WHEN

CASE

INOUT

PROCEDURE

WHILE

COMPONENT

IS

PROCESS

WITH

CONFIGURATION

LABEL

RANGE

XOR

CONSTANT

LIBRARY

RECORD

DISCONNECT

LINKAGE

REGISTER

DOWNTO

LOOP

REM

MAP

REPORT

Зарезервированное слово не должно использоваться как объявленный идентификатор.

107

Страница 113

Г ОСТ Р 50754-95

II р п меча и и с — Зарезервированные слона, различающиеся только и использовании соответствующих заглавных и строчных буке. рассматриваются как идентичные <см 133). Зарезервированное слово range также используется как имя предопределенною атрибута.

13.10 Возможные замены символов

Для базовых символов вертикальная черта, диез, кавычка разрешены следующие замены:

—    вертикальная черта (I) может быть заменена восклицательным знаком (!) при использовании в качестве ограничителя;

—    диез (#) в базированном литерале может быть заменен двоеточием (:), при этом заменить надо оба знака в этом литерале;

—    кавычки С), используемые как ограничители в строковом литерале с обеих сторон, могут быть заменены на проценты (%). При этом необходимо заменить обе строковые скобки, а из последовательности символов исключить все символы кавычки. Каждый символ процента внутри последовательности символов должен быть удвоен. Удвоенны»! символ процента интерпретируется в этом случае как один символ.

Такие замены не изменяет смысл описания.

Примечание — Рекомендуете* ограничивать замещение вышеуказанных символом для случае», когда соответствующий визуальный символ недоступен Необходимо иметь ввиду, что на некоторых устройствах вертикальная черта представлена как разорванная вертикальная черта и в :>гом случае замена не рекомендуется.

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

14 ПРЕДОПРЕДЕЛЕННОЕ ОКРУЖЕНИЕ ЯЗЫКА

В настоящем разделе описаны предопределенные атрибуты языка VHD1, и пакеты, которые должны обеспечиваться всеми реализациями языка.

14.1 Предопределенные атрибуты

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

—    Вид атрибута: значение,тип, диапазон, функция или сигнал.

—    Описание префиксов для каждого атрибута.

—    Описание параметра или аргумента, если он есть.

—    Результат вычисления атрибута и тип этого результата (если применяется).

—    Налагаемые ограничения или комментарии.

T’BASE

Тип.

Вид:

Префикс:

Результат:

Ограничения:

Любой тип или подтип Т.

Вазовый тип Т.

Этот атрибут допускается только в качестве префикса имени другого атрибута; например. T'BASE’LEFT.

T’LEFT

Вид:

Префикс:

Тип результата: Результат:

Значение.

Любой скалярный тип или подтип Т. Такой же тип, как Т.

Левая граница Т.

Т’RIGHT Вид:

Префикс:

Тип результата: Результат:

Значение.

Любой скалярный тип или подтип Т. Такой же тип, как Т.

Правая граница Т.

10Х

Страница 114

Значение.

Любой скалярный тип или подтип Т. Такой же тип, как Т.

Т’НЮН

Вид:

Префикс:

Тип результата: Результат:

T’LOW

Вид:

Префикс:

Тип результата: Результат:

TrPOS(X>

Вид:

Префикс:

Параметр:

Тип результата: Результат:

T’VAL(X)

Вид:

Префикс:

Параметр:

Тип результата: Результат:

T’SUCC(X)

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Ограничения:

T’PRED(X)

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Ограничения:

TLEFTOF(X)

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Ограничения:

T’RIGHTOFOC)

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Ограничения:

Верхняя граница Т.

Значение.

Любой скалярный тип или подтип Т. Такой же тип, как Т.

Нижняя граница Т.

Функция.

Любой дискретный или физический тип или подтип Т.

Выражение, типом которого является базовый тип Т. Уыиог{>сальиыа_целый.

Номер позиции значения параметра.

Функция.

Любой дискретный или физический тип или подтип Т.

Выражение, типом которого является базовый тип Т.

Базовый тип Т.

Значение, номер позиции которого является значением типа униоер'

сальный_целый, соответствующим X.

Функция.

Любой дискретный или физический пт или подтип Т.

Выражение, типом которого является базовый тип Т.

Базовый тип Т.

Значение, номер позиции которого на I больше, чем номер позиции значения параметра.

Возникает ошибка, если значение X эквивалентно T’BASE'HIGH. Функция.

Любой дискретный или физический Л5П или подтип Т.

Выражение, типом которого ивляется базовый тип Т.

Базовый тип Т.

Значение, номер позиции которого на 1 меньше. чем номер позиции значения параметра.

Возникает ошибка, если значение X эквивалентно T'BASE’LOW. Функция.

Любой дискретный или физический тип или подтип Т.

Выражение, типом которого является базовый тип Т.

Базовый тип Т.

Значение, находящееся слепа от значения параметра в диапазоне значений Т.

Возникает ошибка, если значение X эквивалентно T’BASE’LEFT. Функция.

Любой дискретный или физический тип или подтип Т.

Выражение, типом которого является базовый тип Т.

Базовый тип Т.

Значение, находящееся спрапа от значения параметра н диапазоне значений Т.

Возникает ошибка, если значение X эквивалентно T’BASE'RIGHT.

Страница 115

ГОСТ Р 5075*—95

A'LEFTKN) I Вид:

Префикс:

Параметр:

Тип результата: Результат:


Функция.

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

Локально статическое выражение типа униое/калы(Ый_целыЛ, значение которого не должно превышать размерности А. По умолчанию принимается 1.

Тип, левой границы N-ro диапазона индекса А.

Левая граннца N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого объекта, то результатом является левая граница N-ro диапазона индекса, взятого из объявления А,а не из объявления объекта).


A’RIGHTI(N) ] Вид:

Префикс:

Параметр:

Тип результата: Результат:


функция.

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

Локально статическое выражение типа уииос/к-альный^целый, значение которого не должно превышать размерности А. ~ Г1о умолчанию принимается I.

Тип правой границы N-ro диапазона индекса А.

Правая граница N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого обьекта.то результатом является правая граница N-ro диапазона индекса, взятого из объявления А, а не из объявления обьекта).


A’HIGHl(N) ] Вид:

Префикс:

Параметр:

Тип результата: Результат:


Функция.

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

Локально статическое выражение типа универсальиый_цслый, значение которого нс должно превышать размерности А. По умолчанию принимается 1.

Тип N-ro диапазона индекса А.

Верхняя граница N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого объекта, то результатом является верхняя граница N-ro диапазона индекса, взятого из объявления А, а нс из объявления объекта).


A’LOWKN))

Вил:

Префикс:

Параметр:

Тип результата: Результат:


Функция.

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

Локально статическое выражение тина универсалы/ый_целы£, значение которого не должно превышать размерности А. По умолчанию принимается 1.

Тип N-ro диапазона индекса А.

Нижняя граница N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого объекта,то результатом является нижняя граница N-ro диапазона индекса, взятого из объявления А, а нс из объявления объекта).


МО

Страница 116

ГОСТ Р 50754-95

Диапазон.

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

A’RANGE((N) I

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Локально статическое выражение типа упиосрсальныЛ_цслый. значение которого не должно превышать размерность А. По умолчанию принимается I.

Тип N-ro диапазона индекса А.

Диапазон A’LEFT(N> (о A’RIGHT(N), если N-й диапазон индекса является восходящим: или диапазон A*LEFT(N) downto A’RIGHT(N). если N-й диапазон индекса является нисходящим. Если А является дополнительным именем индексируемого объекта, то результат определяется N-м диапазоном индекса, взятым из объявления А. а но из объявления объекта.

AREVERSE RANGE[(N) J Вид:

Префикс:

Параметр:

Тип результата: Результат:

A’LENGTH ((N)) Вид:

Префикс:

Параметр:

Тип результата: Результат:

Диапазон:

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

Локально статическое выражение типа униоерс(аы1ый_цолый, значение которого не должно превышал» размерности А. По умолчанию пршшмасгся I.

Тип N-ro диапазона индекса А.

Диапазон A’RIGHT(N) downio A'LEPT(N), если N-й диапазон индекса является восходящим; или диапазон A’RIGHT(N) (о A’LEFT(N), если N-й диапазон индекса является нисходящим. Если А является дополнительным именем индексируемого оСлекта, то результат определяется N-м диапазоном индекса, взятым из объявления А, а не из объявления объекта.

Значение.

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

Локально статическое выражение типа универсальный._целый, значение которого не должно превышать размерности А. По умолчанию принимается I.

Униве1>сальный_целый.

Количество значений в N-м диапазоне индекса А, то есть значение A’HIGH(N)—A’L0W(N)+1.


Сигнал.

S’DELAYEDI(T)]

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Любой сигнал, обозначаемый статическим именем S.

Статическое выражение типа TIME, производящее отрицательное значение. По умолчанию принимается 0 ns.

Базовый тип сигнала S.

Сигнал, эквивалентный сигналу S, задержанному на Т единиц времени. Значение S’DELAYED(t) во время Тп всегда эквивалентно значению сигнала S во время Тп—(.

Конкретно: Пусть R имеет тот же подтип что и S, пусть Т >= 0 ns и пусть Р будет оператором процесса в форме:

Р: process (S) begin

R <- transport S after T; end process;

Предположим, что начальное значение R совпадает с начальным значением S, тогда атрибут ’DELAYED определен таким образом, что S’DELAYED(T)-R для любого Т.

Примечание — S'DELAYED(Ons) неэквивалентно S, когда S только что изменился.

Ill


Страница 117

ГОСТ Р 50754-95

Сигнал.

Любой сигнал, обозначаемый статическим именем S.

S'STABLEl(T)]

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Статическое выражение типа TIME, производящее неотрицательное значение. По умолчанию принимается 0 ns.

Тип Boolean.

Сигнал со значением TRUE при условии, что п течение Т елинкц времени на сигнале S не было события; или сигнал со значением FALSE в противном случае <см. 12.6.2).

Примечание — S’$TARLF.<Ons>-<S‘DEJ.\YnDK>iK>“S>. и SSTARM: (О и*» имеет значение FAISC5 та»ь*о в том слу'мс, когда S талию что H.v*iHiu.ve.

S’QUIET(<Т> |

Вид:

Префикс:

Параметр:

Тип результата: Результат:

Сигнал.

Любо*) сигнал, обозначаемый статическим именем S.

Статическое выражение типа TIME, производящее неотрицательное значение. По умолчанию принимается 0 ns.

Тип Boolean.

Сигнал со значением TRUE при у слонин, что сигнал S был пассивным в течение Т единиц времени; или сигнал со значением FALSE в противном случае (см. 12.6.2).

Для конкретного цикла моделирования SrQUIET<0r»s) имеет значение TRUE, если и только если сигнал S является пассивным в этом цикле.

S’TRANSACTION

Вид:

Префикс:

Тип результата: Результат:

Сигнал.

Любой сигнал, обозначаемый статическим именем S.

Тип Bil.

Сигнал, значение которого инвертируется по отношению к предыдущему значению этою сигнала в каждом цикле моделирования, в котором сигнал S становится активным.

S-EVENT

Вид.

Префикс:

Тип результата: Результат:

Функция.

Любой сигнал, обозначаемый статическим именем S.

Тип Boolean.

Значение, указывающее произошло или нет событие на сигнале S.

Конкретно: Для скалярного сигнала S S’EVENT возвращает значение TRUE, если в течение текущего цикла моделирования на сигнале S произошло событие; в противном случае возвращается значение FALSE.

Для составного сигнала S S’EVENT возвращает значение TRUE, если в течение текущего цикла моделирования на каком-либо скалярном пешлеметге сигнала S произошло событие; в противном случае" возвращает значение FALSE.

S'ACTIVE

Вил:

Префикс:

Тип результата: Результат:

Функция.

Любой сигнал, обозначаемый статическим именем S. Тип Boolean.

Значение, указывающее активен или нет сигнал S.

Конкретно: Для скалярного сигнала S S’ACTIVE возвращает значение TRUE, если в течение текущего цикла моделирования сигнал S является активным; в противном случае возвращается значение сигнала FALSE.    ->

Для составного сигнала S S'ACTIVE возвращает значение TRUE, если в течение текущего цикла моделирования какой-либо скалярный подэлемент сигнала S является активным; в противном случае возвращается значение FALSE.

8-1-1406

112

Страница 118

ГОСТ I» 50754—95

Функция.

Любой сигнал, обозначаемый статическим именем S.

S!LAST_EVENT

Вид:

Префикс:

Тип результата: Результат:

Тип Time.

Временной интервал, прошедший с момента последнего события на сигнале S.

Конкретно: Для скалярного сигнала S S’LAST_EVENT возвращает самое большое значение Т (если оно существует) типа TIME, для которого S’DELAYED(T)’STABLE вырабатывает значение TRUE, в противном случае возвращается значение 0 ns.

Для составного сигнала S S’l.AST_EVENT возвращает минимальное из значений R'LAST_EVENT для каждого скалярного подэлемента R сигнала S.

S’LAST_ACTIVE

Вид:

Префикс:

Тип результата: Результат:

Функция.

Любой сигнал, обозначаемый статическим именем S.

Тип Time.

Интервал времени, прошедший с момента, когда сигнал S был последний раз активным.

Конкретно: Для скалярного сигнала S S’LAST_ACTIVE возвращает наибольшее значение Т (если оно существует) типа TIME, для которого S'DELAYED(T)‘QUIET вырабатывает значение TRUE, в противном случае возвращается значение 0 ns.

Для составного сигнала S S’LAST_ACT1VE возвращает минимальное из значений R’LAST_ACTIVE для каждого скалярного подэлемента R сигнала S.

S’LAST_VALUE Вид:

Префикс:

Тип результата: Результат:

Функция.

Любой сигнал, обозначаемый статическим именем S.

Базовый тип S.

Предыдущее значение сигнала S, непосредственно имевшее место до последнего изменения S.

Конкретно: Для скалярного сигнала S S’LAST_VALUE“S'DELAYED(T), где Т >= 0 ns является наименьшем значением, при котором S‘STABLE(T) вырабатывает значение FALSE. Если такого Т не существует, то S’LAST_VALUE эквивалентно S.

Дня составного сигнала S S’LAST_VALUE эквивалентно агрегату из предыдущих значений каждого элемента сигнала S.

Примечания

1    Если S'STABl.E(T) имеет значение FALSE, то по определению для некоторого I. гас 0 ns <“ I <- Т. S’DELAYED(T)/-S.

2    Если Т* япляется минимальным значением, при котором S'STABUi(T*> яырябатмюст значение FALSE, то дли всех 1. где 0 ю <- t <- Ts. S DELAYKD(T>-S.

Значение.

B’BEHAVIOR

Вид:

Префикс:

Любой блок, обозначенный меткой, или любой объект проекта, обозначенный именем архитектуры.

Тип Boolean.

Тип результата: Результат:

B’STRUCTURE

Вид:

Префикс:

Тип результата: Результат:

Значение TRUE, если блок, определяемый оператором блока или объектом проекта, не содержит оператор конкретизации компонента. В противном случае возвращается значение FALSE.

Значение.

Любой блок, обозначенный меткой, или любой объект проекта, обозначенный именем архитектуры.

Тип Boolean.

Значение TRUE, если блок, определяемый оператором блока или объектом проекта, не содержит непассивный оператор процесса или параллельный оператор, эквивалентом которого является непассивный оператор процесса. В противном случае возвращается значение FALSE.

из

Страница 119

ГОСТ Р 50754-95

Примечание — Изаимосмл между значениями атрмйуп» IXFT, RIGHT. LOW, II1CH выражается следующей таблицей:

Иос.хояущий диапазон    Нисходящий    дшпалои

T*IJ5F1‘    -    TLOW    ГIHGH

Г RIGHT    -    THIGH    riOW

Тик как атрибут S'P.VF.NT, $’ACTIVE, S'LAST_EVb>n\ S’WSTACTIVE и S1LAST_VAI.L,E ямвюгеч фунхцмачм. а не сипйхш, n> они не могут пиэмпптъ выполнение процесса. хот ьачеиие. якх1чращие*>х: т.ткоЛ функцией. «ожет изменяться динамически.

В стали с лях и пдрддаелмпле контекстах, таких как выражении замены iuu нараллелмше операторы назначения сигналя, рекомендуется мспадиммать эк ««валентные Атрибуты S'STARLE и S'QLtET, являющиеся сигналами, или имрп жении, содержащие ли атрибуты. Аналогично, функция standard.now irkac не должна нспатоотьси u параллельных нроцсссш.

14.2 Пакет STANDARD

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

- - предопределенные перечисляемые типы: type BOOLEAN is (FALSE, TRUE); type BIT is CO’, T); type CHARACTER is (

NUL,

SOH,

STX,

ETX,

EOT,

ENQ.

ACK,

BEL.

BS,

HT,

LF,

VT,

FF,

CR.

SO.

SI,

DLE.

DC!,

DC2,

DC3,

DC4,

NAK.

SYN,

ETB,

CAN.

EM,

SUB,

ESC.

FSP,

GSP.

RSP.

USP,

t У

f

M’

« »

* H *

'*\

•$’,

•О/ }

/о *

■A\

i . »

*<\

’>4

*•*

>

V,

Э »

• t

“ t

» •

• 1

74

’04

T.

’24

’3’,

'<4

’5’,

’6',

’74

•8’,

•9\

1И • •

**•

♦ ?

’>4

>9*

• *

'@4

’A\

*B4

■C’,

'D\

*E\

F',

*G4

’H*.

T,

J4

*K\

’L4

*M4

•N*.

'04

P\

'<?■

•R\

’S’,

*T\

’U\

•v,

*W4

’X1,

’Y4

Z\

44

*\\

*14

•Л »

»

* t M *

t • »

*

’a’,

*Ь4

V,

’<14

V.

r,

*g4

’H\

V,

*j\

v.

V,

r.

*n»4

V,

V,

V>

V.

V,

V.

V,

V,

V4

V,

Y,

V,

44

4 4

У.

>_1

*

DEL);

type SEVERITY_LEVEL is (NOTE. WARNING, ERROR. FAILURE);

-    - предопределенные числовые типы:

type INTEGER is range опредслсн-рсализацней; type REAL is range определен-реализацией;

-    - предопределенный тип TIME;

type TIME is range опрсделен-реализацией; units

fs;

- - фемтосекунда

ps -

1000 fs;

- - пикосекунда

ns -

1000 ps;

- - наносекунда

us “

1000 ns;

- - микросекунда

ms =

1000 us;

- - миллисекунда

sec -

1000 ms;

- - секунда

min “

60 sec;

• - минута

hr “

60 min;

- - час

end units;

-    - функция, возвращающая текущее время моделирования; function NOW return TIME;

-    - предопределенные числовые подтипы:

114

Страница 120

ГОСТ Р 50754-95

subtype NATURAL is INTEGER range 0 to INTEGER HIGH; subtype POSITIVE is INTEGER range I to INTEGER HIGH;

-    - предопределенные индексируемые типы:

type STRING is array (POSITIVE range < » of CHARACTER; type BIT_VECTOR is array (NATURAL range < » of BIT; end STANDARD:

П p м м с ч л м м e — ASCII мнемоники ДЛЯ символом IS. OS. RS и L'S представлены н типе CHARACTER сштпетственно симнолами FSP. CSI'. RSI’. USP ih> избежание конфликта с единицами типа TIME.

14.3 Пакет TEXTIO

Пакет ТЕХТЮ содержит объявления типов и подпрограмм, обеспечивающих форматированные операции ввода-вывода с символами ASCII.

package ТЕХТЮ is

-    - описание типов для ввода/вывода текстов

type LINE is access STRING; - - LINE является указателем

-    - значения типа STRING

-    - файл из ASCII записс»'!

type TEXT is file of STRING type SIDE is (RIGHT, LEFT) subtype WIDHT is NATURAL

-    - переменной длины

-    - для выравнивания выходных

-    - данных внутри полей

-    - для задания ширины выход-

-    - ных полей

-    - стандартные текстовые файлы

file INPUT; TEXT is in “STDJNPUT"; file OUTPUT; TEXT is in “STD_OUTPUT";

-    - процедуры ввода для стандартных типов

procedure READLINE (F: in TEXT; L out LINE);

procedure READ    (I.:inout    LINE;    VALUE:out    BIT; GOOD:out BOOLEAN);

procedure READ    (L:inout    LINE;    VALUE:out    BIT);

procedure READ    (Linout    LINE;    VALUE:out    BIT VECTOR; GOOD:out BOOLEAN);

procedure READ    (Linout    LINE;    VALUE:out    BIT_VECTOR);

procedure READ    (Linout    LINE;    VALUE:out    BOOLEAN; GOODrout BOOLEAN);

procedure READ    (Linout    LINE;    VALUErout    BOOLEAN);

procedure READ    (Linout    LINE;    VALUE:out    CHARACTER; GOODiout BOOLEAN);

procedure READ    (L:inout    LINE;    VALUE:out    CHARACTER;

procedure READ    (Linout    LINE;    VALUE:out    INTEGER; GOOD:out BOOLEAN);

procedure READ    (Linout    LINE;    VALUE:out    INTEGER);

procedure READ    (L:inout    LINE;    VALUE:out    REAL GOOD:out BOOLEAN);

procedure READ    (L:inout    LINE;    VALUE:out    REAL);

procedure READ    (Linout    LINE;    VALUEiout    STRING; GOOD:out BOOLEAN);

procedure READ    (Linout    LINE;    VALUE:out    STRING):

procedure READ    (Linout    LINE;    VALUE:out    TIME; GOOD.out BOOLEAN);

procedure READ    (L:inout    LINE;    VALUE:out    TIME);

П5

Страница 121

ПК. Г    50754—9S

-    - процедуры вывода для стандартных типов procedure WRITELINE (F: out TEXT; L: in LINE);

procedure WRITE <L: inout LINE; VALUE: in BIT;

JUSTIFIED: in SIDE:-RIGHT; FIELD: in WIDHT: - 0);