allgosts.ru35.060 Языки, используемые в информационных технологиях35 ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ

ГОСТ Р 50754-95 Язык описания аппаратуры цифровых систем VНDL. Описание языка

Обозначение:
ГОСТ Р 50754-95
Наименование:
Язык описания аппаратуры цифровых систем VНDL. Описание языка
Статус:
Действует
Дата введения:
01.01.1996
Дата отмены:
-
Заменен на:
-
Код ОКС:
35.060

Текст ГОСТ Р 50754-95 Язык описания аппаратуры цифровых систем VНDL. Описание языка

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

ГОСТ Р 50754—95

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

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

МОСКВА

1995

ГОСТ I» 50754—95

Прслис.ю«не

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

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

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

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

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

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

ГОСТ P 50754—95

СОДЕРЖАНИЕ

01 Область применения..................................................... I

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

03 Введение.......... 1

04 Определения................................................... 2

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

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

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

1.1.1.1 Параметры настрой»:»......................................... 16

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

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

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

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

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

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

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

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

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

2 ПодпрО1раммы и пакеты ...................................................23

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

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

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

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

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

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

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

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

2 5 Объявления пакетов.....................................................28

2 6 Тела пакетов.........................................................29

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

3 Тины.......................................... 31

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

3-1-1 Перечисляемые типы ..... 32

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

3.1 2 Целые типы ..........................................................

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

3.1.3 физические типы ....................................................33

3.1 3-1 Предопределенные физические типы......................... 35

3.1.4 Плапливдие типы ..................... 35

3-1.4-1 Предопределенные плавающие типы..........................................35

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

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

3.2.1.1 Ограничения индекса и дискетные диапазоны...................................37

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

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

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

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

3 3 2 Размещение и уничтожение объектов......................... 41

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

3-4.1 Файловые операции . . ................... .... 41

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

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

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

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

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

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

4 3.1-2 Объявления сигналов ................................................

4-3.1-3 Объявления переменных ............................................. . , 46

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

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

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

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

г-н

III

ГОСТ Р 50754—95

4 3.4 Объявление допалнителымхо имени..........................................50

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

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

5 Спецификации........................................................52

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 Имена .............................................................5?

61 Имена .................................. 57

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

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

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

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

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

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

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

7.2 Операторы......................................................... 60

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

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

7.2.3 А.тцпивныс операторы ........................................ 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

92.1 Драйверы..........................................................$1

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

ГОСТ Р 50754—95

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

!0.4 Описания иснолытоштния ................................................91

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

11 Модули проекта и их диализ................................................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 Описание отображения nopton .............................................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.) Спецификации атрибутов ............................................... 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

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

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

13.8 Комментарии......... Ю7

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

13.10 Возможные замены символов ..............................................108

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

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

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

14.3 Пакет ТЕХНО.......................................................115

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

1-2—1496

V

ГОСТ Р 50754—95

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

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

Описание языка

VHSIC Hardware Description Language.

Language reference manual

Дато пяслсния 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-битные кодированные наборы символов

О.З ВВЕДЕНИЕ

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

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

formal_port_list.

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

formal port list;

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

array;

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

lcttcr_or_digit::= letter I digit

choice :: - choice { I choice }

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

rcturn_statenient :: - return [expression];

return_statement :: - return;

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

ГОСТ I’ 50754—95

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

term :: = factor {mulliplying_opcrator factor}

term :: - factor I term mulliplying_opcrator factor I

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

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

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

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

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

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

Агрегат (Aggregate)

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

Анализ (Analysis)

Анонимный (Anonymous)

Атрибут (Attribute)

ASCII

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

Библиотека проекта

(Design Library)

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

1-2'

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

— Драйвер считается активным в течение цикла моделирования, в котором он принимает новое значение, независимо от того, отличается или нет это значение от предыдущих значений драйвера (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

ГОСТ Р 50754—95

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

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

Блок (Block)

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

Бокс (Box)

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

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

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

Вид (Mode)

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

Видимый (Visible)

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

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

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

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

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

Возобновляться (Resume)

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

Восходящий (Ascending)

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

Входы (Inputs)

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

Выполняться (Execute)

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

Выражение (Expression)

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

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

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

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

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

Генератор (Allocator)

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

3

ГОСТ Р 50754-95

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

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

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

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

Диапазон (Range)

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

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

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

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

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

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

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

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

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

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

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

Драйвер (Driver)

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

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

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

Зависеть от значения сигнала (Depend)

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

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

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

Защита

(Guard)

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

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

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

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

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

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

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

4

ГОСТ Р 50754—95

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

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

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

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

Изменяться (Update)

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

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

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

Имя (Name)

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

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

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

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

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

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

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

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

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

Источник (Source)

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

Константа (Constant)

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

Конфигурация (Configuration)

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

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

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

5

ГОСТ Р 50754-95

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

ИМЯ

(Locally Static Name)

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

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

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

(Locally Static Primary)

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

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

Модель (Model)

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

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

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

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

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

Нсограничснный подтип (Unconstrained

Subtype)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6

ГОСТ Р 50754—95

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

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

Нисходящий (Descending)

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

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

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

Обозначать (Denote)

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

Объект (Object)

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

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

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

Объявление (Declaration)

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

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

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

Ограничение (Constraint)

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

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

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

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

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

Омограф (Homograph)

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

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

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

Ошибка (Error)

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

7

ГОСТ Р 50754-95

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

Ошибочный (Erroneous)

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

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

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

Параметр (Parameter)

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

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

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

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

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

Параметр цикла (Loop Parameter)

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

Пассивный (Quiet)

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

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

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

Первичный (Primary)

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

(7.1)

Переменная (Variable)

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

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

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

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

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

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

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

Подключен (Connected)

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

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

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

Подтип (Subtype)

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

ГОСТ Р 50754—95

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

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

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

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

Подходить (Appropriate)

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

Подэлемент (Subclement)

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

Позиционное сопоставление (Positional Association)

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

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

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

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

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

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

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

Порт (Port)

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

Г1 осл едо ватсл ьный оператор (Sequential Statement)

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

Прсдвынолнение (Elaboration)

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

Преобразуемый (Convertible)

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

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

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

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

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

Приостанавливать (Suspend)

9

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

ГОСТ Р 50754—95

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

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

Профиль типа параметров и результата (Parameter and Result 'Гуре Profile

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

Ilvcroe сечение (Null Slice)

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

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

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

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

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

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

Пустой массив

(Null Array)

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

(Null Waveform

Element)

Рабочая библиотека

(Working Library)'

Разрешение (Resolution)

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

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

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

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

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

Распространяется (Extend)

Регистр (Register)

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

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

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

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

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

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

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

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

10

ГОСТ Р 50754—95

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

Родитель (Parent)

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

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

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

Связанный (Bound)

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

Сечение (Slice)

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

Сигнал (Signal)

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

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

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

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

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

Скрытый (Hidden)

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

Слева от

(То the Left Of)

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

Событие (Event)

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

Совместимый (Compatible)

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

Совмещение (Overloading)

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

Согласование (Conform)

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

и

одной и той же последовательностью лексических элементов, и

ГОСТ Р 50754—9)

Соответствующий элемент (Malching Element)

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

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

Спецификация (Specification)

Спецификация подпрограммы (Subprogram Specification)

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

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

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

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

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

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

Статический (Static)

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

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

Статическое имя сигнала (Static Signal Name)

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

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

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

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

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

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

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

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

2-1 — 1406

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

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

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

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

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

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

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

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

12

ГОСТ Р 50754—95

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

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

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

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

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

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

Тин (Туре)

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

Транзакция (Transaction)

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

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

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

Удовлетворять (Satisfy)

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

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

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

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

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

Указывать (Designate)

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

(3.3)

Укороченная операция (Short_Circuit Operation)

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

Универсальный действительный (Universal_Real>

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

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

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

Упорядоченный слева направо (Lcft_to_Right Order)

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

13

(3.1)

ГОСТ Р 50754—95

Файловый тип (File Туре)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать (Read)

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

Шина (Bus)

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

Экземпляр (Instance)

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

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

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

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

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

Ядро модели (Kerne! Process)

Ядро модели осуществляет выполнение операций ввода/вывода, распространение значений сигналов и изменение значений неявных

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

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

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

14

ГОСТ I» 50754-95

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

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

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

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

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

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

Пример —

cntity„dcclnruHon :: -

entity identifier is cnlily_hader cn tity_dcclara t ivc_pa rt [ begin entityjtatementjMrt ] end 1 eniity_sinip!e_name I:

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

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

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

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

cntity_header :: -

( formaljeneric.clause ]

( /wma/jxirtjlause 1

gcncric_clausc :: ■

generic (gcncric_lisl);

port_clausc :: -port (portjisi);

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

15

ГОСТ Р 50754—95

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

Примеры

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

entity Full_Addcr is D

port (X, Y, Cin : in Bit; Cout, Sum: out Bit);

end Full_Addcr;

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

entity AndGatc is

generic

<N: Natural : ■ 2);

port

(Inputs: in Bit_Vcctor (I to N);

Result: out Bit);

end AndGatc;

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

entity TcstBcnch is

end TcstBcnch;

\AAA П a p а м c nt p ы пае nt p о й к и

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

Пример —

generiejist :: - gt’HewJntcrfaccJist

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

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

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

1.1.1.2 Порты

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

porijist :: - por/_intcrfacejisl

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

2-2-1406

16

ГОСТ Р 50754—95

Если после того, как конкретное описание является предвыполненным (см. раздел 12), формальный порт сопоставлен с фактическим портом, то в зависимости от вида формального порта (см. 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, то считается, что этот порт отключен (инсон/цс/е^). Порт вида in может быть отключен только в том случае, если его объявление содержит неявное выражение (см. 4.3.3). Порт любого вида, отличного от in, может быть отключенным, если его тин не является неограниченным индексируемым типом.

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

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

entity_declaralive_part :: ■= {cntity.dcclarativcjtcm}

cntity_dcclaralivcjtcm :: -subprogram-declaration I subprogram-body 1 type-declaration I subtypc_dcclaration I constant-declaration I signal-declaration I file_declaration I alias_dcclaration I attribute-declaration I aUriburC—specification I disconnection-Specification I use_clause

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

Пример

entity ROM is port ( Addr : in Word; Data : out Word; Sei : in Bit);

type Instruction is array (1 to 5) of Natural “ ;

type Program is array (Natural range < >) of Instruction;

use Work.OpCodcs.all, Work.RcgistcrNamcs.all;

constant ROM_Code : Program : °

(STM, RI4, R12, 12, R13), (LD, R7, 32, 0. RI), (BAL, R14. 0, 0, R7>,

17

ГОСТ Р 50754-95

И Т.Д.

);

end ROM;

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

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

entity_statcment_pari :: =

{entiiy_statcment}

cntity_statement :: -

concurrent_asscriion_statemcnt

I рйи/уе_сопсиггсп i_proccdure_cal I

I p«sstve_proccss_staicmcnt

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

Пример —

entity Latch is

port (Din: in Word:

Dout: out Word;

Load: in Bit;

Clk: in OBil);

constant Setup: Time : = 12ns;

constant PulscWidlh: Time : = 50ns;

use Work.TimingMonitors.all:

begin

assert Clk = T or Clk’Delaycd’Siable (PulscWidlh);

CheckTiming (Setup, Din, Load, Clk);

end:

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

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

architccture_body :: -

architecture identifier of «Ш7у_пате is architcciurc_dcclarativc_part

begin

archiieciure_statcment_part end ( orc/uzec/nr^simplc^amc I;

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

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

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

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

is 3-2"

ГОСТ Р 50754—95

Примем а и и с — Два архицетурных тели, сопоставленные с рапными объявлениамп объект, могут иметь одкнаксмыс простые имена, мае если все они наколется с одной и то же библиотеке.

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

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

architecture_declarativc_pari :: =

{ blok_dcclarativc_itctn }

blok_dcdarative_itcm :: -

subprogram.dccla radon

I subprogram_body

1 type-declaration

I subiype_declaralion

I constant-declaration

I signal-declaration

I filo_dedaration

I alias-declaration

< component-declaration

1 attribute-declaration

I attribute-Specification

I configuration-Specification

I disconnection, specification

I usc_clause

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

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

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

architecturc_siatemenl-pari :: *

I cancurcnt_siatemeni ]

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

Примеры

1 Тело объекта Ful!_Adder

architecture Dataflow of Full-Adder is

signal A, B: Bit;

begin

A<- X xor Y;

B<“ A and Cin;

Sum<“ A xor Cin;

Cout<» В or (X and Y);

end Dataflow;

2 Тело объекта Test Bench

library Test;

use Test.Componcnts.all

architecture Structure of TestBench is

component Full_Addcr

port (X. Y, Cm: Bit; Cout, Sura: out Bit);

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

signa! OK: Boolean;

begin

UUT:

Full_Addcr pon map (А. В, C, D, E>;

19

ГОСТ I» 50754—95

Generator:

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

Comparator:

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

end Structure;

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

architecture Behavior of AndGatc is

begin

process (inputs)

variable Temp: Bit;

begin

Temp : - 'i';

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_dcdaraiion ;: «

configuration identifier of entity_namc is

configuration_declarativc_part

block_configuration

end | c<wi/(gwrafZon_simplc_namc |;

configuration_deelarative_part :: =

{ configuration_dcclarativc_item }

configuration_dcclarative_itcm :: -usc_clausc

I attriburc_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

ГОСТ Р 50754—95

Ml: MUX port map (...);

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

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

LI: Latch port map (...);

L2: Latch port map (...);

end Stmcturc_View;

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

library TTL. Work;

configuration V2_27_87 of Processor is

use Work.all;

for StruciurcVicw

for Al: ALU

use configuration TTL.SN74LS181;

end for:

for Ml, М2, М3: MUX

use entity Mulliplcx4 (Behavior);

end for:

for all: Latch

- - используется неявная конфигурация

end for;

end for;

end V4_27_87;

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

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

block_configuration :: =

for block_spccification

{ usc_clausc }

{ configuraiionjtcm } end for;

block_spccificalion :: =

architecture_n a m e

I block_statement_kibc\

I generafe_sfa!erHent_labcl [(index_specification) ]

index_spccification :: =

discrclc_rangc

I static_cxprc$$ion

configurationjtem :: -

block_configura(ion

I componcnLconfiguraiion

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

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

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

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

2J

ГОСТ Р 50754—95

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

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

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

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

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

(I р и м с ч п и и с — Исходя из правил. описанных выше и в разделе 10. простое имя, пилимое косвенно п конце раздела объявлений конкретного блока, также видимо косвенно в пределах любого элемента конфигурации, заключенного в соответствующую конфигурацию блока. Если такое имя видимо непосредственна в конце конкретного раздела объявлений блока, то оно также будет видимо непосредственно п соответствующих моментах конфигурации, за исключением того случая, когда и «хцветепптошем объявлении конфигурации используется описание использования (use clause) для другого объявления с таким же простым именем, и область действия этого описания охватывает нее или часть этих элементом конфигурации Если такое описание использования применяется, го эго имя непосредственно пилимо внутри соответствующих элементов конфшуриции. за исключением тех мест, которые подпадают под область действия ДОПОИЮПСЛМЮЦ' «писания испапкюшшии (тех мал. где иикмое имя не будет ПСПОСРСЗСТВСГПЮ видимо).

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

Примеры

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

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

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

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

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

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

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

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

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

component_confTguration :: -

for componcnt_specification

[ use bindingjndication; |

| block_configuration | end for;

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

22

ГОСТ Р 50754—95

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

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

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

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

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

Примеры

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

for all: lOPorl

use entity StdCclis.PadTriState4 (StdCells.Dataflow)

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

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

end for;

port map (PoutoA, Pin->B, 30->В!г, Vdd->Pwr, GndoGnd);

end for;

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

for Pl; D$p

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

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

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

end for;

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

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

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

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

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

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

subprogram_declacation :: ■

subprogram_$pccification;

subprograni_specification :: =

procedure designator ((formal—parameter—list))

23

ГОСТ Р 50754—95

[function designator |(formal_parametcrji$t) ] return typc_mark

designator :: = identifier I opera tor_symbol

opcrator_symbol :: = siringjiicral

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

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

Примечание — Ike подпрограммы могут вызываться рскурсиших

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

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

formal_paramctcrjist :: = paramctcrjntcrfacejist

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

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

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

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

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

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

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

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

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

24

ГОСТ Р $0754-95

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

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

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

2ЛЛ .2 П е р е Я а ч а параметров класса signal

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

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

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

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

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

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

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

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

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

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

subprogram_body :: -

subprogram-Specification is

subprogram_declarativc_part

begin

$ubprogram_statcmcnt_parl

end I designator ];

subprogram_declarative_pari :: =

{ subprogram_declarativcjiem }

subprogram_dcclarative_i(eni :: ”

subprogram-declaration

I subprogram_body

I type-declaration

I subtype_declaration

25

ГОСТ I’ 50754—95

I constant-declaration

I variable-declaration

I file-declaration

I alias_dcclaration

I attribute, declaration

I altributc.spccification

I use_clausc

subprogram_statcmcnt_parl :: =

{ sequential-Statement }

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

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

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

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

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

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

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

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

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

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

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

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

26

ГОСТ Р 50754—95

Примеры

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

procedure Write (F: inout Text: Value: Integer);

procedure Write (F: inout Text; Value: String);

procedure Cheek (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, “Фактический выход нс соответствует ожидаемому”);

Cheek (Sctup->10ns. D=>Bus, O>Clkl);

Check (Hold->5ns, D=>Bus, O>Clk2);

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

- - Data’Basc = Clock'Basc

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

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

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

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

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

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

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

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

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

Примеры

1 type MVL is (’О’, ’Г, 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 ’I’;

R <- “or” (’O’, ’Z’);

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

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

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

27

( OCT P 50754-95

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

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

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

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

Пример

function WIRED_OR (Inputs: BIT_VECTOR) return BIT

is constant FloatValuc: Bit :- 'O’;

begin

if Inputs’Lcngth - 0 then

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

else

for I in Inputs'Rangc loop

if Inputs (I) - ’1’ then return ’Г;

end if;

end loop;

return 'O’;

end if;

end;

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

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

package_declaration :: =

package identifier is

package_decla га t i vc_pa п

end (pacAage-Simplc-name J;

packagc_dcclarativc_part :: =

{packagc_dcclarative_item}

package_dedarativc_itcm :: -subprogram_dcclaration 1 typc_dcc)aration I subtypc_declaration I constant_declaration I signal_declaration I file_declaration I alias_dcclaration I component-declaration I attribute-declaration

3.1 — 1406

2B

ГОСТ Р 50754—?$

t attribute_specificaiion

I disconnection-Specification

I usc_clauso

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

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

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

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

Примеры

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

package TimeConstants is

constant tPLH: constant tPHU

Time : = 10ns;

Time : - 12ns;

constant tPLZ;

Time ; - 7ns;

constant tPZk

Time : - 8ns;

constant tPHZ:

Time : - 8 ns;

constant tPZH:

Time : - 9ns;

end TimeConstants;

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

package TriSlate к

type Tri is (’O’, ’Г, ’Z’, ’E’);

function BitVal (Value: Tri) return Bit;

function TriVat (Value: Bit) return Tri;

type TriVcclor is array (Natural range < » of Tri;

function Resolve (Sources: TriVcclor) return Tri;

end TriStatc;

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

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

package body :: -

package body package_simple_name is

package_bod.v_dcclaralive_.part

end [packagejiniplejwme);

package_body_declarativc_part :: -

{packagc_body_dcclarativc_itcm}

package_body_declarative_item :: -

subprogram declaration

I subprogram-body

• typc_dcda ration

I subtype-declaration

I constant-declaration

1 fiic_dcclaration

I alias_declaration

I usc.eiausc

29

ГОСТ Р 50754-95

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

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

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

Пример —

package body TriSlatc is

function Bit Vai (Value: Tri) return Bit is

constant Bits: Bit_Vcctor : - “0100'';

begin

return Bits (Tri'Pos(Value));

end:

function Tri Vai (Value: Bit) return Tri is

begin

return Tri’Val (Bit’Pos(Valuc));

end:

function Resolve (Sources: Tri Vector) return Tri is

Variable V: Tri : - ’Z’;

begin

for i in Sourccs’Rangc loop

if Sources(i) /- ’Z’ then

if V - ’Z’ then

V : = Sources(i);

else

return ’E';

end if:

end if;

end loop

return V;

end:

end TriStatc;

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

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

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

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

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

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

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

30

ГОСТ Р 50754—95

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

procedure Р «X. Y: INTEGER:

procedure Р (X: INTEGER; Y: INTEGER?;

procedure P (X. Y : in INTEGER);

3 ТИПЫ

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

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

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

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

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

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

Конкретный тип не должен иметь подэлементы. тип которых это сам тип. Имя класса типов п данном руководстве используется как квалификатор для объектов и значений, имеющих тип рассматриваемого класса. Например, термин ''индексируемый объект" используется для объектов, типом которых является индексируемый тип; аналогично, термин “ссылочное значение" используется для значения ссылочного типа.

Примечание — Множество значения подпит — эго подмножество значений базового типи. Иодмнэжсспю пг обязано быть собственным подмножеством.

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

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

scatarjype_definition :: -

enumeration_typc_dcfiniUon

I integer_type definition

I floatlng_type_definition

I physical_iype_definhion

range_constraint :: - range range

range :: “ range_a(tribute_nanic

1 5>mplc_cxpression direction 5iniplc„cxpression

direction :: - to I downto

31

ГОСТ I» 50754—95

Диапазон (range) задаст подмножество значений скалярного типа. Диапазон является пустым диапазоном, сели заданное подмножество пусто.

Диапазон L to R называется восходящим диапазоном; если L > R, то этот диапазон пуст. Диапазон I. downto R называется нисходящим диапазоном; если L < R, то этот диапазон пуст. Меньшая из величин L и R называется нижней границей, а большая — верхней границей диапазона.

Считается, что значение V принадлежит диапалону, если отношения (нижняя граница <- V) и (Уч-* верхняя граница) верны и сам диапазон нс является пустым. Операторы >, < и <- в вышестоящих определениях являются предопределенными операторами применимого скалярного типа.

Считается, что значение VI стоит левее значения V2 внутри конкретного диапазона, если оба они принадлежат этому диапазону и либо V2 следует за VI, если диапазон является восходящим: либо V2 предшествует VI, если диапазон является нисходящим. Последовательность значений конкретного диапазона является упорядоченной слева направо, если каждое значение в этой последовательности стоит левее следующего значения в этой последовательности внутри этого диапазона «за исключением последнего значения).

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

Направление ограничения диапазона совпадает с направлением диапазона, используемого в этом ограничении.

Примечание — Правила ннлекенроганин и терапии испондуки зилчеты лискрг ruux шпон.

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

Описание перечисляемого тг(па определяет перечисляемый тип.

enuineratioH_lypc_definilion :: =

(enumerationJilcnil, {, enumerationJilcral))

cnumerationjiteral :: - identifier t characterjiteral

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

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

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

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

Каждое описание перечисляемого типа определяет восходящий диапазон.

Примеры

I type MULTI_LEVEL_LOGIC is (LOW. HIGT, RISING, FALLING. AMBIGUOUS):

2 type BIT is (’Г, ’O');

3 type SWITCH-LEVEL is ('O', ’I’, 'X'); — совмещение

'O' и ’Г

3.1.1.1 П p e д о n p e д с л e н н ы e перечисляемые n>. и н ы

Предопределенными перечисляемыми типами являются CHARACTER. BIT, BOOLEAN и SEVERITY, LEVEL.

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

Объявления предопределенных типов CHARACTER, BIT. BOOLEAN и SEVERITY-LEVEL содержатся в пакете STANDARD, описанном в разделе 14.

3-2-1406

32

ГОСТ I’ 50754—95

Примем ii и и с — 11егрп<|и1чсскис элементы п|Кмй11рС;1елеши"П» типа CHARACTER ирсжтпн.'ичы аббреииатур*’’’-«хнрстсшуюшся абирешииурс uciic'iniiii.iK chmwiou ASCII <м шключеинсм тех. которые указаны :■ paw-u’ 141.

Тип BOOLEAN может ишь иеиплииюан для описании логических схем как с высоким, так и е шикни лкшпчим чхишем •• Зависимости <п конкретных иыб|)«нных функций xo«wp<iipo«(iin» и или ил шил ВИ

3.1.2 Целые тины

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

inlcgcr_lype_dcfinilion :: = range_constraii

Описание целого типа (integer lypc definition) определяет как тип, так и подтип этого типа. Сам тип является анонимным типом, диапазон которого устанавливается реализацией >гот диапазон должен полностью покрывать диапазон, заданный в описании целого типа. Подтип — эго именованный подтип указанного анонимного базового типа, при этом в качестве имени этого подтипа используется имя, заданное в соответствующем объявлении типа, а диапазон подтипа — это заданный диапазон.

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

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

Номер позиции целого значения — это соответствующее значение типа универсальный целый.

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

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

Примеры

I type TWOS.COM PI.EM ENT INTEGER is range -32768 ю 32767;

2 type BYTE.LENGTHJNTEGER 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 И p e д о a p e 0 e л e к н ы e ц e л ы с т а » ы

Единственным предопределенным целым типом является тип INTEGER. Диапазон типа INTEGER зависит от реализации, но при этом гарантируется, что он имеет пределы от минус 2147483647 до плюс 2147483647. Тип определен с восходящим диапазоном.

Примечание — Диппам*! шип INTEGER в коикрешой реализации может быгь выявлен при намемпи aip>i6vron LOW и •HIGH.

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

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

physical_type_dcfinition :: -

rangc.constraint

units

basc.unit_dedaration

{ secondary_unii_dcclaraiion } end units;

basc_unit_decla ration :: = identifier;

physical-literal :: - I absiractjitcral I unil_namc

Описание физического типа (physical lypc definition) определяет как тип, так и подтип этого типа. Сам тип является анонимным типом, диапазон которого устанавливается реализацией; этот диапазон 33

ГОСТ l> 50754—95

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

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

Каждое объявление единицы (либо базовой, либо вторичной) определяет имя е^ишцы. Имена единиц, стоящие в объявлениях вторичных единиц (secondary unit declaration), должны быть явно или неявно определены в терминах целочисленных, кратных базовой единице объявления типа, в котором они стоят.

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

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

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

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

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

Примеры

I type TIME is range — IEI8 to I EIS units

fs; - - фемтосекунда

ps = 1000 fs; - - пикосекунда ns = 1000 ps; - - наносекунда us = 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 fl; Ig = 3 mi;

end units;

- - ангстрем

- - нанометр

- - микрометр или микрон

- - миллиметр

- - сантиметр

- - метр

- - километр длины:

- • миллидюйм

- - дюйм

- - фут

- - ярд

- - сажень

- - миля

- - лига

34

ГОСТ Р 50754—95

3 х: distance; у: time; г: integer;

х : - 5A+13ft—27inch;

у : - 3ns+5min

z ; = ns/ps;

x : - у/10;

II p и м с ч а и и с — Слелегипем uwiucciouiunx определений mviwuu саилуияцсс: если I не пхачит u дипвапон, заданным описанием физически, типа, ю пня бальной единицы, стоящее отдельно, не является допустимым ли i оралом салической» пта.

Дим преобразований межде а&<ракич,1ми злаченными и физическими значениями могут йып, иснадмонаны атрибут POS к VAL.

3.1.3.1 /7 р е 0 о п р с д с л с л и ы с ф и и и ч е с к и е т и п ы

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

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

Примечание — Выбирая шоричпук» единицу типа ТЫК в качестве пределл разрешении для .пшн гнил, можно доении, более jvBiTCuiMiura периода времени моделирования с меньшей то'ныеиио млн иаои«>|хя. более короткого иерита времени молслигюшитя с (кисе высикой тшшесгыо.

3.1.4 Плавающие тины

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

floating-typc_<icfinilion :: = rangc_consirainl

Описание плавающего типа (floalingjypc-dcfinilion) определяет как тип. так и подтип этого типа. Сам тип является анонимным типом, диапазон которого определяется реализацией; этот диапазон должен полностью покрывать диапазон, заданный в описании плавающего типа. Подтип - это именованный подтип указанного анонимного базового типа, при этом в качестве имени этого подтипа используется имя, заданное в соответствующем описании типа, а диапазон подтипа — это заданный диапазон.

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

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

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

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

3.1.4.1 /7 р с д о п р е д е л е н п ы е н л а в а ю щ и е т и п ы

35

ГОСТ I- 50754—95

Единственным предопределенным плавающим типом является тип REAL Диапазон типа REAL зависит от применяемой машины, но при этом гарантируется, что он имеет пределы от минус IE38 до плюс 1Е38 включительно. Тип определен с восходящим • иапазоном.

Примечание — Диапахш пит ЙЕЛ1. я конкретней (ччиикщни может бан. моплен при помочен аркбутан I.OW и 'HIGH

3.2 С о с т а в и ы с типы

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

composilc_lypc_dcfinil>on :: -

I аггау_(уpc_dcfinition

I record_iype_dcfiniiion

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

3.2.1 Индексируемые типы

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

array_type_dcfinition :: =

unconslraincd_array_dcfinition

I conslraincd_ARRAY_defini1ion

unconstraincd_array_definilion :: =

array ( index_sublype_dcfiniiion)

{ indcx_sub(ypc_definiiion ) ) of <'kvw<'//f_sub lype_i nd ica lion

constrained_array_definilion :: =

array indcx_cons(rainl of e/ewn/jsublypc.

indication

indcx_subtypc_definilion :: = type_mark range < >

index_constraint :: = (discrctc_rangc {,discrete_rangc))

di5crc(c_rangc :: “ <A.wc(e_sublypc_indication I range

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

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

Описание неограниченного индексируемого типа (unconstrained array definition) определяет индексируемый тип и имя, обозначающее этот тип. Для каждого объекта, имеющего такой тип, количество индексов, тип и позиция каждого индекса, а также подтип элементов такие же, как в описании типа. Подтип индекса для конкретной позиции индекса — это (по определению) подтип, обозначенный меткой типа (type mark) в соответствующем определении подтипа индекса (index subtype definition). Значения левой и правой границ каждого диапазона индекса нс определены, но должны принадлежать к соответствующему подтипу индекса; аналогично, направление каждого диапазона индекса не определено. Символ < > (называемый боксом), стоящий в описании подтипа индекса, указывает на неопределенный

36

I OCT I» 50754—95

диапазон «различные объекты итого типа необязательно должны иметь одинаковые границы и направление диапазона).

Описание ограни чей нога индексируемого типа (constrained array definition) определяет как индексируемый тип, так и подтип этого типа:

I) Индексируемый тип является неявно out.я пленным анонимным типом; этот тип определяется (неявным) описанием неограниченного индексируемого типа, в капором указание подтипа элементов (element subtype indication) копируется из описания ограниченного индексируемого типа, и и котором метка типа каждого описании подтипа индекса обозначает подтип, определенный соответствующим дискретным диапазоном «discrete range).

2) Индексируемый подтип — это подтип. полеченный наложением ограничения индекса (index constraint) на этот индексируемый тип.

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

Направление дискретного диапазона совпадает < направлением диапазона (range) или указания дискретного подтипа «discrete subtype indication}, которые определяют лог дискретный диапазон.

Примеры

I - - Примеры объявлений ограниченных массивов

a) type MY_WORD is array «0 to 31) of BIT;

- - слово памяти с восходящим диапазоном

б) type DATAJN is array (7 down to 0) of FIVE_LCVEL_LOGlC;

- - входной порт с нисходящим диапазоном

2 - - Пример объявлений неограниченных массивов

type MEMORY is array (INTEGER range < » of MY.WORD;

- - массив памяти

3 - - Примеры объявлений индексируемых объектов

a) signal DATAJ.INE : DATAJN;

- - определяет входную шину данных

б) variable MY.MEMORY : MEMORY (0 to 2**n — 1):

• - определяет память из 2**п 32-разрядных слон

II р и и с ч а н и с — Прилила п йивхиенни объявлений ог|МШ1-1сн>1мх пикш «мнлчаки. что ।мышление отрппинениого индексируемого типа такое, кок

type Т is array il’OSIIIVI- range MIX to MAX) of Г.1.1ЛП XT.

эквивалентно следующей иос.тсл1Я1лгелыих»и cvi.eiwuiiii:

Subtype Index „subtype is POSITIVE range MIX' to MAX;

type way type is iirr.iv tiiuiex„subtype range •: » of

ELEMENT:

subtype T is arrayjypc (btdcX-Mibiypei-,

где index_subtype и arrayjype валяются анонимными. С«сдои;пе.1ыю. I — это имя надпит и лее оГгьския. обьяшенпые с дня) меткой типа, являются масеипами, имеющими один и ген же липпахш ии влиа.

3.2.1.1 О г р а и и ч е и и и и и д е к с а и г) и с к р е гн и ы е О и а и а :: о и ы

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

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

37

ГОСТ Р 50754—95

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

Ограничение индекса совмссннкио с типом, обозначаемым меткой типа, если и только если ограничение, определяемое каждым дискретным диапазоном, совместимо с соответствующим подтипом индекса. Если какой-нибудь из дискретных диапазонов определяет пустой диапазон, то любой массив, ограниченный таким способом, является нужным .часси<1(>м. не имеющим компонентов. Значение массива у&млетвормт ограничению индекса, если в каждой позиции индекса это значение и это ограничение имеют один и тот же диапазон индекса. (Необходимо учесть, что присваивание и некоторые другие операции над массивами вызывают неявное преобразование типа).

Диапазон индекса для каждого индекса индексируемого объекта устанавливается следующим образом:

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

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

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

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

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

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

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

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

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

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

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

I) Для объекта интерфейса вида in. inout или linkage, если фактическая часть содержит функцию преобразования типа, то тип результата этой функции должен быть ограниченным индексируемым типом, а диапазоны индекса получаются из лого ограниченного подтипа; в противном случае диапазоны индекса получаются из объекта иди значения, представленного фактическим обозначением.

2} Для объекта интерфейса вида out. buffer, inout или linkage, если г]юрмалык1я часть содержит функцию преобразования типа, то подтип параметра этой функции должен быть ограниченным индексируемым типом, а диапазоны индекса получаются из этого ограниченного подтипа; в противном случае диапазоны индекса получаются из объекта, представленного фактическим обозначением.

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

3.2.1.2 /7 р <’ д о п р с д е л е к л w <’ « и д с к с и р у с лг ы е in и н ы

38

ГОСТ Р 50754—95

Предопределенными индексируемыми типами являются STRING и BIT_VECTOR, описанные в пакете STANDARD в разделе 14.

Значениями предопределенного типа STRING являются одномерные массивы предопределенного типа CHARACTER, индексируемые значениями предопределенного типа POSITIVE:

subtype POSITIVE is INTEGER range 1 to INTEGER HIGH;

type STRING is array (POSITIVE range < >) of CHARACTER;

Значениями предопределенного типа BIT_VECTOR являются массивы предопределенного типа BIT, индексируемые значениями предопределенного типа NATURAL:

subtype NATURAL is INTEGER range 0 to INTEGER-HIGH;

type BlT.VECTOR is array (NATURAL range < >) of BIT;

Примеры

I varitable MESSAGESTRING <1 <0 17) : = “THIS IS A MESSAGE";

2 signal LOW_BYTE : B1T_VECTOR (I to 7);

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

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

rccord_1ypc_definilion :: -record

element-declaration

{ clement-declaration }

end record

clcmcnt_dccl:ir;iiion :: =

idcn1ificr_list : ckmenl_Subtype_defini1ion;

idcnlificrjisi :: = identifier (.identifier}

clcmcnt_5ubtypc_definition :: - subiypcjndicaiion

Каждое объявление элемента (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), нс имеют простых имен. Доступ к такому объекту достигается ссылочным значением, формируемым генератором; в этом случае считается, что ссылочное значение указывает на этот объект.

access_typc_dcfinition :: = access subtype_indication

39

ГОСТ Р 50754-95

Для каждого ссылочного типа существует литерал null, имеющий пустое ссылочное значение, не указывающее ни на какой объект вообще. Пустое значение ссылочного типа является неявным начальным значением этого типа. Другие значения типа получаются вычислением специальной операции этого типа, называемой генератором. Каждое такое ссылочное значение указывает на объект, подтип которого определяется указанием подтипа (subtype indication) в описании этого ссылочного типа; этот подтип называется указываемым подтипом: базовый тип этого подтипа называется указываемым типом. Указываемый подтип нс может быть файловым типом.

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

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

Примеры

I tvpe ADDRESS is access MEMORY;

2 type BUFFER_PTR is access BUFFER;

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

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

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

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

incomplctc_type_declaralion :: = type identifier;

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

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

Пример рекурсивного типа

type CELL; - - описание неполного типа

type LINK is access CELL;

type CELL is

record

VALUE : INTEGER;

SUCC : LINK;

PRED : LINK;

end record;

variable HEAD : LINK : = new CELL' (0,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 WIREJ’TR;

40

ГОСТ Р 50754—95

4 type PART LIST PTR Is access PART LIST;

type WIRE.UST.PTR is access WIRE_UST;

5 type PART is

record

PART NAME : STRING:

CONNECTIONS : WiRE.LIST.PTR;

end record;

6 type WIRE is record

WIRE NAME : STRING:

CONNECTS : PART.L1ST_PTR:

end record;

3.3.2 Размещении и уничтожение объекты

Объект, указываем wit ссылочным значением, размешается генератором для этого типа. Генератор является первичным в выражении. Генераторы описаны к 7.3.6. Для каждого ссылочного типа операция уничтожения неявно объявляется непосредственно после пашою описания типа для этого типа. Эта операция позволяет явно освободить память, занимаемую указываемым объектом.

Если имеется следующее описание ссылочного типа:

type AT is access Т:

то этим подразумевается наличие операции, неявно объявленном после этого описания:

procedure DEALLOCATE (Р: inout AT);

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

3.4 Ф а й л о в ы е типы

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

file_type_definition :: - file of typc_mark

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

Примеры

1 file of STRING - - Описание файлового типа, который - - может содержать неограниченное - - количество строк

2 file of NATURAL - - Описание файлового типа, который - - может содержать только нсотри-- - нательные целые значения

3.4.1 Файловые операции

Для объектов файолового типа обеспечиваются три операции. Если имеется следующее описание типа:

type FT is file of TM;

в котором метка типа ТМ обозначает скалярный, именуемый или ограниченный индексируемый тип, то этим подразумевается наличие следующих операций, неявно объявленных после этого описания типа:

41

ГОСТ Р 50754—95

procedure READ (F: in FT; VALUE: out TM);

procedure WRITE (F: out FT; VALUE: in TM);

function ENDFILE (Ft 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.

II р и м е ч а п и е — Предопределенный пакет ТЕХТЮ обеспечивает фйрм.тг>гроши1|(ый пвод/вывещ колов ASCII. Он содержит описание типа TEXT (файлового типа, предетаЕляюикго файлы со строками символов ASCII переменной длины) и типа UNE (ссылочного тмил, указывающего на такие строки). Операции READ и WRITE, которые добавляют или извлекают данные из отдельной строки, также описаны в пакете ТЕХТЮ. В пакете ТЕХТЮ содержатся «писания досшлиитслытых операций, обеспечивающих чтение и запись целых строк и определение состояния текущей строки или самого файла. Описание пакета ТЕХТЮ содержится и разделе 14.

4 ОБЪЯВЛЕНИЯ

Язык определяет различные виды понятий, которые описываются явно или неявно с помощью объявлений.

declaration :: =

I type_declaration

I subtype_declaralion

I objeet_declaration

I file_declaration

I intcrfacc.dcclaration

I alias.dcclaration

I aitributc_dcclaration

I component_declaration

I cntily_declaration

I configuration_declaration

I subprogram_declaration

I package_dedaration

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

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

Объявление имеет эффект в результате процесса предвыполнения. Предвыполненис объявлений описано в разделе 12.

42

ГОСТ Р 50754—95

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

Объявление типа (type declaration) описывает тип.

typc_dccla ration :: =

full_type_declaration

I incomplete Jype_deckiralion

fu)l_type_dcclaration :: =

type identifier is type_dcfinition;

lypc_dcfinition :: =

scalar_type_dcfinition

I composite_type_definition

I acccss_type_dcfinition

I file_type_definition

Типы, получаемые предвыполненисм отдельных описаний типа (type definition), являются различными типами. Предвыполнсннс описания скалярного или ограниченного индексируемого типа создаст одновременно базовый тип и подтип этого базового типа.

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

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

I type Л is range I to 10:

2 type В is range I to 10;

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

Различные формы описаний типа представлены в разделе 3.

Примеры объявлений типол также содержатся в данном разделе.

4.2 0 б ъ я в л с н и я подтипов

Объявление подтипа (subtype declaration) описывает подтип.

subtype_declaration :: =

subtype identifier is subtypejndication;

subtypejndication :: -

[resolution_/unction_namc] type_mark [constraint)

lypc_mark :: -

fW>e_namc

I subtypej\^me

constraint :: -

range_constraint

I index_constraint

Метка типа (type mark) обозначает либо тип, либо подтип. Если метка типа является именем типа, то такая метка обозначает этот тип, а также соответствующий неограниченный подтип. Базовым типом метки типа является, по определению, базовый тип этого типа или подтипа, обозначаемого этой меткой.

Указание подтипа (subtype indication) определяет подтип базового типа метки типа.

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

Если указание подтипа нс содержит ограничения (constraint), то такой подтип эквивалентен подтипу, обозначаемому меткой типа. Условие, налагаемое ограничением, — это условие, получаемое вычислением выражений и диапазонов, составляющих это ограничение. В соответствующих разделах для каждой формы ограничения содержатся правила, устанавливающие совместимость. Эти правила таковы, что если ограничение совместимо с подтипом, то условие, налагаемое этим ограничением, нс может противоречить 43

ГОСТ I» 50754—95

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

Направление указания дискретною подтипа совпадает с направлением ограничения диапазона (range constraint), используемого как ограничение в указании подтипа. Если ограничение нс задано, и метка типа обозначает подтип, то направление указания подтипа совпадает с направлением обозначаемого подтипа. Если ограничение не задано и метка типа обозначает тип, то направление указания подтипа совпадает с направлением диапазона, используемого в описании обозначаемого типа. Направление дискретного подтипа совпадает с направлением соответствующего указания подтипа.

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

П р и м с ч а и и с — Объявление iHUiunn не «мтсынаег новый tint.

4.3 Объекты

Объект — это понятие, которое содержит (имеет) значение конкретного типа. Объектом может быть следующее:

I) Объект, описанный объявлением объекта.

2) Файл, описанный объявлением файла.

3) Параметр оператора цикла или генерации.

4» Формальный параметр подпрограммы.

5) Формальный порт объекта проекта.

6) Формальный параметр настройки.

7) Локальный порт.

8) Локальный параметр настройки.

9) Элемент или сечение другого объекта.

10) Значение объекта, указываемое значением ссылочного типа.

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

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

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

Объявление объекта описывает объект заданного типа.

object_declaraiion :: =

constant-declaration I signal-declaration I variable-declaration

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

Аналогичная эквивалентная последовательность имеет место для объявлении объектов интерфейса (см. 4.3.3).

4.3.1.1 Объявления констан т

Объявление константы описывает константу заданного типа.

constant-declaration :: =

constant idcntificr_list :

subtype-indication |: “expression);

4-1—1406

44

ГОСТ I’ 50754—95

Если я объявлении константы присутствует символ присваивания “: =", за которым следует выражение, то ото выражение залает значение этой константы. Значение константы нс может быть изменено после того, как произошло предвыполненнс ее объявления.

Если в объявлении константы отсутствует символ присваивания и следующее за ним выражение, то такое объявление описывает неполную константу. Такое объявление константы может использоваться только в объявлении пакета. Соответствующее полное объявление константы должно стоять в теле этого пакета.

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

Считается ошибкой, если объявление константы описывает константу файлового или ссылочного типа.

Примеры

I constant TOLERANCE : DISTANCE : - l.5nm;

2 constant PI : REAL : - 3.141592;

3 constant CYCLE_TIME : TIME : - 100ns;

4 constant Propagation_Dclay:

4.3.1.2 Объявлен н e с н г и а л о а

Объявление сигнала описывает сигнал заданного типа.

signal_dcclaration :: =

signal identifierjist : subtypcjndication

[signal_kind II:- expression j;

signaLkind :: = register I bus

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

Если в объявлении сигнала используется вид сигнала (signal kind), то сигналы, описанные таким способом, являются защищенными сигналами указанного вида. Каждый подэлсмент защищенного сигнала составного типа также является защищенным сигналом. Присваивание значении защищенному сигналу происходит под управлением выражений защиты (или защит), вырабатывающих логическое значение. Когда конкретная зашита имеет значение FALSE, то драйверам соответствующих защищенных сигналов неявно присваивается пустая транзакция (см. 8.3.1) с целью отключения этих драйверов. Для задания времени, по прошествии которого происходит отключение этих драйверов, используется спецификация отключения (см. 5.3).

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

При отсутствии неявного выражения, неявное значение для скалярного сигнала некоторого скалярного подтипа Т или для каждого скалярного подэлемента составного сигнала, которые сами являются сигналами некоторого скалярного подтипа Т. определяется как T'LEFT.

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

Сигнал может иметь один пли более источников. Для сигнала скалярного типа источником может быть либо драйвер (см. 9.2.1), либо порт вида out. inout. buffer или linkage экземпляр;» компонента, с которым этот сигнал сопоставлен. Для сигнала составного типа каждый составной источник является совокупностью скалярных источников, по одному на каждый скалярный элемент этого сигнала. Считается ошибкой, если после предвыполнения описания сигнал имеет множество источников, не являясь при этом разрешенным сигналом.

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

ГОСТ Р 50754—95

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

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

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

Примеры

I signal S: STA N DAR D. Bl T_V ECTOR (I to IO>:

2 signal CLK1, CLK2 : TIME;

3 signal OUTPUT : WIRED_OR Multivalued Logic;

Приме 4 :i и и c — Порты люЛли шей также являются сигналами. Термин еиг/иы исиолклускя и .типом руководстве для ссылки па объемы, описанные либо объявлениями Силйлси1. либо объявлениями портов: термин чир/и используется доя ссылки на объекты, описанные только объявлениями нори».

Сигналы получают начальное значение ннициллилацией их .-грайнеров: начальные значения Дрэйперов затем распространяются по С1хппетстпую1цей цепи для установки начальных значений сигналов, С1Хтаиляпяцих ату цепь (ем 12.6.3).

Значение сигнала может быть косвенно изменено оператором назначения сигнала (см. X 3); такие назначения окалывают влияние на булушнс значения итоги сигнала.

4.3.1.3 Объявления пере м е и к ы х

Объявление переменной описывает переменную заданного типа.

variablc_dcclara(ion :: "

variable identifierjist : sublypcjndicalion

|: = expression!;

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

Если выражение начального значения стоит в объявлении переменной, то начальное значение устанавливается этим выражением всякий раз, когда происходит предвыполиснис этого объявления. При отсутствии выражения начального значения используется неявное начальное значение. Неявное значение переменной скалярного подтипа Т определяется как значение, вырабатываемое атрибутом T’LEFT. Неявное начальное значение переменной составного типа определяется как агрегат, составленный из неявных начальных значений всех ее скалярных подэлсмснтов, каждый из которых в свою очередь является переменной скалярного типа. Неявное начальное значение переменной ссылочного типа определяется как значение null для этого типа.

Считается ошибкой, если объявление переменной описывает переменную файлового типа.

II I» И М С ч II II II С — Зипчекпе переменной может был. изменено <Я1С]1ЯТОрОМ Tip»Cli;iHIIBIIHB <СЧ. 8 4); ЭТИ Г|рНСЫ1ИЖ)1111Я имеют мпюкикый эффект. Параметры процедуры kivu» in могут быть файловыми переменными; параметры процедуры айда out или incur могут быть переменными любит пила.

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

Примеры

I variable INDEX : INTEGER range 0 to 99 : “ 0;

- - начальное значение устанавливается выражением - - начального значения

2 variable COUNT : POSITIVE:

- - начальное значение сеть POSITIVE'LEFT или I

3 variable MEMORY:BIT_MATRIX (0 to 7. 0 to 1023);

- - начальное значение есть агрегат из начальных

- - значений каждого подэлсмента.

46

ГОСТ Р 50754—95

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

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

filcjicclarniion :: =

file identifier : sublypcjndicaiion is

[model filcJogicaljKime;

filcjogical_name :: - string_cxprcssion

Указание подтипа (subtype indication) в объявлении ([мила должно описывать подтип фа^да. Единственными допустимыми видами ездила являются виды in и out.

Логическое имя файла (file logical name) должно быть представлено выражением типа STRING. Значение этого выражения интерпретируется как логическое имя для файла и главной вычислительной системе. Реализация должна обеспечивать некоторый механизм для сопоставления логического имени файла с конкретным физическим файлом. Такой механизм языком не определяется.

Логическое имя файла идентифицирует внешний файл в главной файловой системе, сопоставляемый с файловым объектом. Это сопоставление обеспечивает механизм либо для импортирования данных, содержащихся во внешнем 4>айлс в течение моделировании, либо экспортирования данных, полученных в течение моделирования во внешний файл.

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

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

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

Примечание — Псе пнеикше файловые объекты, сопоставляемые с одним и тем же нисишим файлам, должны имел. ОДИН И ТОТ же Оплошай ТИП.

4.3.3 Объявления интерфейсов

Объявление интерфейса (interface declaration) описывает объект интерфейса заданною типа. Обтюкты интерфейса включают в себя:

— константы, используемые как параметры настройки объекта проекта, компонента или блока или как константные параметры подпрограмм:

— сигналы, используемые в качестве портов объекта проекта, компонента или блока или в качестве параметров-сигналов подпрограмм;

— переменные, используемые в качестве параметров — переменных подпрограмм.

intcrfaee_deelaration :: -

interface_cons<ant_dcclaralion

I inierfacc_signai_dcclaralion

I i n terfacc_v.T ria blc.dccla га I ion

intcrfacc_constant_declaration :: »

[constant | idcnlificrjist : |in| sublypcjndicaiion

|:“.w«/TC_cxprcssion |

intcrfacc_signa1_dcclaraiion :: =

[signal] idcnlificrjist : [model sublypcjndicaiion

[bus | |:= static

-expression |

47

ГОСТ Р 50754-95

intcrfacc_variablc_dcclaration :: =

[variable I identifierjist : [mode] subtype

.indication [:- static

-expression |

mode :: = in I out I inout I buffer I linkage

Eciit в объявлении интерфейса вил (mode) явно не задан, то подразумевается in.

В объявлении константы интерфейса (interface constant declaration) или в объявлении сигнала интерфейса (interface signal declaration) указание подтипа (subtype indication) должно описывать подтип, который не является ни файловым, НИ ССЫЛОЧНЫМ типом.

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

Если объявление интерфейса содержит символ ":=". за которым следует выражение, то это выражение считается неявным выражением для объекта интерфейса. Гил этого выражения должен совпадать с типом соответствующего объекта интерфейса. Считается ошибкой, если неявное выражение стоит к объявлении интерфейса, вид которого linkage, или соответствующая метка типа (type mark) обозначает файловый тип.

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

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

Считается, что значение объекта читается, если удовлетворяется одно из Следующих условий:

I) Объект вычисляется, а также (косвенно) объект сопоставлен с обтюктом интерфейса вида in. inout или linkage.

2) Объект является сигналом и имя. обозначающее этот объект, используется в списке чувствительности оператора ожидания или оператора процесса.

3) Объект является сигналом и значение любого из его предопределенных атрибутов, таких как STABLE, QUIET, DELAYED. TRANSACTION. EVENT. ACTIVE, LAST-EVENT. LAST-ACTIVE или LAST_VALUE. читается.

4) Один из полэлсмснтов объекта читается.

5> Объект является «^тайлом и с этим файлом выполняется операция READ.

Считается, что значение объекта ипмспчется. если удовлетворяется одно из следующих условий:

I) Объект стоит в левой част оператора присваивания, а также (косвенно) если объект сопоставлен с объектом интерфейса вида out. buffer, inout или linkage.

2) Изменяется один из полэлсмснтов объекта.

3) Объект является файлом и с этим файлам выполняется операция WRITE.

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

Объект интерфейса имеет следующие виды:

1) in. Значение такого объекта интерфейса может только читаться. Любые атрибуты этого объекта интерфейса могут читаться, за исключением того, что значения атрибутов STABLE. QUIET. DELAYED и TRANSACTION параметра-сигнала нс могут быть прочитаны внутри подпрограммы. Для файловых объектов допускается операция ENDFILE.

2) out. Значение такого объекта интерфейс.'! может быть изменено. Допускается чтение атрибутов элемента интерфейса, отличных от предопределенных атрибутов STABLE, QUIET. DELAYED, TRANSACTION, EVENT, ACTIVE, LAST.EVENT, I^ST.ACTIVE и LAST.VALUE. Для файлового объекта разрешена операция ENDFILE. Никакое другое чтение нс допускается.

3) inout. Значение такого объекта интерфейса может быть прочитано либо изменено. Также разрешено чтение атрибутов этого объекта. Для файлового объекта разрешена операция ENDFILE.

4) buffer. Значение такого объекта интерфейса может быть прочитано либо изменено. Также разрешено чтение атрибутов этого объекта.

48

4-2—1406

ГОСТ Р 50754—95

5) linkage. Значение такого объекта интерфейс;! может быть прочитано или изменено только подстановкой этого объекта в качестве фактического параметра для другого объекта интерфейса вида linkage. Никакие другие виды чтения и изменения нс разрешены.

П р » м е ч а и и с — Хотя сигналы видов inout и buffer имеют оли>!ак<ж-1с хпрактсриспши к ппкящчи'н топ), могут ли очи читаться или изменяться любым колччестпом иСтОчникси. сигнал пила inout может изменятся .любым солпчегиым источппкоп. в то время как Сипил вида buffer должен изменяться самсе большее одним источником тем 1.1.1.21

Параметр подпрограммы файлового типа должен объявлятки как 1111рамс1р псрсмеинпя.

4.3.3.1 С л и с к и и >i т е р ф е й с о в

Список интерфейса (interface list) содержит объявления объектов интерфейса, требуемых подпрограммой, компонентом, объектом проекта или оператором блока.

inierfaccjist :: =

intcrfacc_elemcnt {: interface_clcmcni}

interfacc_clcmcnl :: = intcrface_dedaraiion

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

4.3.3.2 С п it с к и с о п о с т аале к и й

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

associationjist :: -

association-Clement { , associntion_element }

association_clcment :: -

I formal_part = > | actual_pan

formal^pan :: = formal-designator I function _namc ( formal-designator >

formal-designator :: = generic_pamc I pw/_namc I parameter_плте.

actual_parl :: =

actual-designator

I functionjtamc ( actual_designator >

actual-designator :: -

expression

I srgna/_namc

kwr«W<'_namc open

Каждый элемент сопоставления (association clement) в списке сопоставлений сопоставляет один фактический указатель (actual designator) с соответствующим элементом интерфейса в списке интерфейса (interface_list) объявления подпрограммы, объявления компонента, объявления объекта проекта или оператора блока. Соответствующий элемент интерфейса определяется либо по позиции, либо по имени.

Элемент сопоставления называется именованным, если формальный указатель (formal designator) используется явно; в противном случае имеет место позиционное сопоставление. Для позиционного сопоставления фактический указатель в конкретной позиции в списке сопоставлений относится к элементу интерфейса, стоящему в этой же позиции в списке интерфейса.

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

49

ГОСТ Р 50754—95

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

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

Если вид формального указателя есть in. inout или linkage и фактический указатель нс задан как open, то тип фактического указателя (после применения функции преобразования типа, если последняя задана в фактической части) должен совпадать с типом соответствующего формального указателя. Аналогично, если вид формального указателя сеть out, inout. buffer или linkage, и фактический указатель не задан как open, то тип формального указателя (после применения функции преобразования типа, если последняя задана в формальной части) должен совпадать с типом соответствующего фактического указателя.

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

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

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

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

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

Хотя неявное выражение может задаваться п элементе интерфейса, который описывает (локальный или формальный) порт, такое выражение не интерпретируется как значение ггсяшюго элемента сопоставления для этого портя, так как порты должны быть сопоставлены с сигналами я противоположность значениям. Вместо этого значение выражения используется для определении эффективного значения этого порта с течение моделирования, если пор» оставлен иссоелияспным (ем. 12.6 I).

4.3.4 Объявление дополнительного имени

Объявление дополнительного имени описывает альтернативное имя для существующего объекта.

alias_dccla ration :: =

alias identifier : subtype_indication is name;

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

4-2’

50

ГОСТ Р 50754—95

Имя (name) должно быть статическим именем (см. 6.1), обозначающим объект. Базовый тип имени, заданного в объявлении дополнительного имени, должен совпадать с базовым типом метки типа в указании подтипа: этот тип нс должен быть многомерным индексируемым типом. Когда на объект, обозначаемый именем, имеется ссылка с виде дополнительного имени, описанного объявлением дополнительного имени, то объект рассматривается как объект, имеющий подтип, заданный указанием подтипа. То же самое имеет место для ссылок на атрибуты, в которых префикс Означает дополнительное имя. Если указанный подтип является одномерным индексируемым подтипом, то зют подтип должен включать соответствующий элемент (см. 7.2.2) для каждого элемента объекта, обозначаемого этим именем.

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

Примеры

I variable REAL.NUMBER: BiT_VECTOR <0 lo 31) ;

2 alias SIGN: BIT is REALJWMBER (0) :

- - SIGN стал скалярным (BIT) значением

3 alias MANTISSA: BIT VECTOR (23 downto 0) is

REAL.NUMBER (8 to 31 > ;

- - MANTISSA является 24-разрядным знамением

- - с диапазоном индекса от 23 до 0.

- - необходимо отметить, что диапазоны индекса

- - значений MANTISSA и REAL.NUMBER (X to 31)

- - имеют противоположные направления.

- - ссылка на значение MANTISSA (23 downto 18)

- ■ эквивалентна ссылке на значение REAL-NUMBER (8 to 13)

4 alias EXPONENT: BITJTCTOR (I io 7) is REAL-NUMBER (I Io 7) ;

- - EXPONENT является 7-разрядным значением

- - с диапазоном от 1 до 7

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

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

Атрибуты, определяемые пользователем, являются константами произвольного типа. Такие атрибуты описываются объявлением атрибута (attribute declaration).

allributc_dcclaralion :: =

attribute identifier: lypc_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 PIN-NO: POSITIVE;

Причем a nue — Конкретное пемягие E будет наследаап. атрибут л. «ли и только если спецификация атрибута для гии-лимши атрибута Л сопровождает обьяплекие И. При отсутствии такой специфика ими имя атрибута и фтщме Е’Л является недопустимым.

51

ГОСТ I’ 50754-95

Атрибут, определяемый 1кмьЭииПтс.хм. «нюстамяется с понятием, тхклначлсмым именем, заданных п объявлении. а нс с самим именем, C.^wcaiелыю. на атрибут объекта можно ссылаться при гюмити жх1олпигслыкчо имени этол» обт-скта (и отличие от ссылки ирн помощи объявленного имени объекта), используемого в кпче-пю префикса имени атрибута. Атрибут, на который есть такая ссылка, ничем не отличатся от атрибута In слезокиельно и значения), па который ссылаются с испоамоипинем объявленной» имени объекта и качестве префикса.

Определяемый 1ЮЛ1>аоги1гелем атрибут порти, сигнала, переменной тын константы некоторого соспниюти типа, является атрибутом ноликом порта, сигнала, переменной или каиетипты. л не их элементов Если необходимо «мюствлит». атрибут с каждым элементом некоторого составного типа, то сам атрибут может был. сбъявлен с октавным типом таким обратом, 'по для каждого элемента сбъскта будет существовать соответствующий элемент итого атрибута.

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

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

componcnt_dcdaraiion :: -component identifier I /(nW-gcncric .clause | I /oc«/_port-clause | end component:

Каждый элемент интерфейса н описании локальных параметров настройки (local generic clause) описывает локальный параметр настройки. Каждый элемент интерфейса в описании локальных портов (local port clause) описывает локальный порг.

5 СПЕЦИФИКАЦИИ

В данном разделе дано описание спецификации. которые могут быть использованы для сопоставления дополнительной информации с VHDL-описанием. Спецификация сопоставляет дополнительную информацию с ранее объявленным понятием. Имеются три вида спецификаций: спецификации атрибутов, спецификации конфигураций и спецификации отключения.

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

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

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

attribulc_spccification :: "

attribute atliibute_designator of

cntily_specificalion is expression;

entity_spccificalion :: = cntiiy_namcjisl : cntity_dass

cntily_class :: = entity

I procedure

I «Урс

I signal

I label

I architecture

I function

I subtype

I variable

I configuration

I package I constant

I component

cntity_mancjist :: -

cntity_designator {. eniity_dcsignalor}

I others

I all

cnthy_dcsignator :: = simplc_name I opcra!or_symbol

52

( OCT I' 50754—95

Указатель атрибута (attribute designator) должен обозначать атрибут. Список имен понятий (entity name list) идентифицирует те понятия, которые наследуют этот атрибут. Наследование определяется следующими правилами:

I) Если задан список указателей понятий (entity designator», то спецификация атрибута применяется в отношении тех понятий, которые обозначены этими указателями.

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

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

Спецификация атрибута для конкретного класса понятий, стоящая в разделе объявлений, и в которой список имен понятий задан в виде зарезервированного слова others или all. должна быт», последней спецификацией атрибута для указанного класса понятий в этом разделе объявлений. Никакое понятие, относящееся в заданному классу понятий, нс может быть описано в указанном разделе объявлений после такой спецификации атрибута.

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

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

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

Примеры

I attribute PIN_.NO of CIN : signal is 10;

2 attribute PIN NO of COUT : signal is 5;

3 attribute LOCATION of ADDER! : label is (10,15);

■1 attribute LOCATION of others : label is (25,77);

5 attribute CAPACITANCE of all : signal is !5pF:

Примечание — Указатель понятия (entity designator) n пиле символа оператора используется для с<м1остпп.теи1ы атрибута с совмещенным операторам.

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

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

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

Определяемые пользователем атрибуты несут только локальную информацию к нс могут быть использованы для нереллчи информации между описаниями. Например, сигнал X внутри архи i смуры >т порт Y компонент, находящеюся внутри этой же архитектуры, могут иметь одни и тот же атрибут А. Однако значения атрибутов Х'А и Y’A никаким образом между собой не связаны. II частности, сопоставление сигнала X с портом Y в операторе конкретизации компонента не и мт юрт и руст значение Y’A и нс экспортирует значение Х’А.

5.2 Специфик л ц и я кои ф и г у р а ц и и

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

configuration_spccificalion :: -

for componcnt_specification use bindingjndication;

component_specification :: =

instantiationjist : coniix>nent_n:ime

53

ГОСТ J- 50754—95

instantiationjist :: =

instantiationJabcl {, instanfia/ionJaM}

I others I all

Список экземпляров (instantiation list) идентифицирует те понятия, с которыми сопоставляется связывающая информация. Сопоставление выполняется по следующим правилам:

1) Если задан список меток экземпляров (instantiation label), то спецификация конфигурации применяется к соответствующим экземплярам компонента. Эти метки должны быть объявлены внутри непосредственно объемлющего раздела объявлений. Считается ошибкой, если эти экземпляры нс являются экземплярами компонента, имя которого указано в спецификации компонентов (component specification).

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

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

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

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

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

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

bindingjndicalion :—

cntiTyjwpeci

[gencric_map_aspcct I [port_map_aspect ]

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

Если аспект отображения параметров настройки или аспект отображения портов нс задан, то применяются правила умолчания (см. раздел 5.2.2).

5.2.1.1 Л с п е к т о 6 ъ е к /п а п р о е к m а

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

cntity_aspect_ ::“

entity entity_namc |(wcMec7nrejdcntificr) ]

I configuration con/iguralion_namc I open

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

54

ГОСТ Р 50754—95

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

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

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

5.2.1.2 Л сп е км отображении на раме»/ров настройки и аспект от об ри же-и а я п о р т о в

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

gcncric_map_aspcci ::=

generic map <44vKw<_association_list)

port_map_aspcci ::-

port map (por/_association_lisi)

В списке сопоставления портов (port association list) или в списке сопоставления параметров настройки (generic association list) можно использовать как именованное, так и позиционное сопоставление-

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

1) Термин фактической параметр используется для обозначения как фактического указателя, стоящего в элементе сопоставления портов, так и для фактического указателя, стоящего в элементе сопоставления списка сопоставления параметров настройки.

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

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

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

На фактический параметр, сопоставляемый с формальным портом в аспекте сопоставления портов, налагается ряд ограничений; эти ограничения описаны в 1.1-1.2.

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

При м с ч л кие— Л<жплы1ый параметр настройки (ил объявлении компонент) или формальный пирометр настройки (из оператора блока или ил объемлющего объекта проекта» может 1К1ю;н.зсей1ься как (фактический параметр л аспекте «нображенпи параметрон настройки. Лиалопыно. локальный порт Иц объявления кочнею-эма) или формальщин nopi (ил «щелатора блока или на сбъемлющего объекта проекта) mowci иснальммапагя как факти'юскнй тцмметр и пенек го omojKixemw иарон

5.2.2 Неявное связывающее указание

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

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

entity enZ/fy^name

55

ГОСТ I' 50754—95

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

entity елц^пате (or</n/<4Ywe_indentificr)

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

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

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

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

5.3. С п с ц и ф икания о т к л ю ч с и и я

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

desconnection_spccificaiion ::=

desconnect guarded_s«gnal-Spccificalion after r wk'_cx pression;

guardcd_signal_spccifica tion ::“

gMrtrr/<’<.signal_list : typc_mark

signaljist ::=

signal nume {, sfgwa/_namc}

I others

I all

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

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

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

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

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

Выражение времени (time expression) в спецификации отключения должно быть статическим и вырабатывать неотрицательное значение.

56

ГОСТ I» 50754—95

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

При отсутствии спецификации отключения для конкретного скалярного сигнала S типа Т подразумевается неявная спецификация отключения следующего вида:

disconnect S : Т after 0ns;

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

6 ИМЕНА

6.1 И м с н а

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

пате :: -

simplejiamc

I opera tor_sym bo!

i$c!ccted_namc

lindcxcd_namc

ls!icc_namc

lattributc_name

prefix :: = name I ftinction_call

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

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

Считается, что префикс соответствует типу, если:

1) тип префикса — это рассматриваемый тип.

2) тип префикса — это ссылочный тип, указываемый тип которого есть рассматриваемый тип.

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

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

Примеры

1) S (С,2) - - статическое имя: С — статическая константа.

2> R (I to 16) - - нестатическос имя: 1 — сигнал.

- - R — самый длинный статический префикс, - - сечение R (1 to 16).

3) Т (п) - - статическое имя: п — константа настройки.

4) Т (2) - - локальное статическое имя.

57

ГОСТ Р 50754-95

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

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

simple_namc :: “ identifier

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

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

Составное имя (selected name) используется для обозначения понятия, объявление которого стоит либо внутри объявления другого понятия, либо внутри библиотеки проекта.

sclectcd_namc :: “ prefix.suffix suffix :: “ simplc_name

lcliaracter_liter.il loperator_svmM tail

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

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

Суффикс составного имени, используемого для обозначения объекта, указываемого ссылочным значением, должен быть зарезервированным словом а»- Префикс должен принадлежать к ссылочному типу.

Остальные формы составного имени называются расширенными именами. Префиксом расширенного имени нс может быть вызов функции.

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

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

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

Примеры

1 INSCRUCTION.OPCODE - - элемент OPCODE структуры

- - INSTRUCTION

2 PTR.all - - объект, указываемый PTR

3 TTL.SN74LS22I - - модуль проекта, заключенный в библиотеке

4 CMOS.all - - все модули проекта, заключенные в

- - библиотеке CMOS

5 MEASUREMENTS.VOLTAGE - - понятие, объявленное в пакете

58

( OCT I’ 50754—95

6 STANDARD.;»!! - - все понятия, объявленные в пакете

- - STANDARD

7 P.DATA - - понятие DATA, объявленное в

- - процессе Р

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

Индексируемое имя (indexed name) обозначает элемент массива.

indexed name :: - prefix (expression { , expression } >

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

Примеры

1 REGISTER_ARRAY(5) - - элемент одномерного массива

2 MEMORY_CELL(1024,7) - - элемент двумерного массива

6.5 Сече н и я

Сечение (slice name) обозначает одномерный массив, составленный из последовательности рядом стоящих элементов другого одномерного массива. Сечение сигнала является сигналом: сечение переменной является переменной; сечение константы является константой: сечение значения является значением.

slicc_nanie :: - prefix (discrete-range)

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

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

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

Примеры

1 signal RI5: BIT VECTOR(0 to 31);

2 constant DATA: BIT_VECTOR(31 downto 0);

3 RI5(0 to 3I> - - сечение с восходящим диапазоном

4 DATA(24 downto I) - - сечение с нисходящим диапазоном

5 DATA(24 to 25) - - пустое сечение

It p и м e 4 а и и c — lion Л «веются одномерным массивом. to имя A<X to X) или Л(Х downto X) шитлся сечением, содержащим олив элемент; типом сечения является базовый тип mbwhki Л. С другой сгорбил. Л<Х1 является юемешом массива Л и имеет сссшютсгпуккций тин элементв.

6.6 А т р и б у т ы

Атрибут (attribute паше) обозначает значение, функцию, тип диапазон, сигнал или константу, сопоставленную с некоторым понятием.

attribute-name :: =

prefiх'a11ributc_dcsigna 1ог| (stalic_c.xpression) ]

at(ribute_dcsignator :: ” «/M7wre_sinip!e_n;nnc

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

Если обозначение атрибута определяет предопределенный атрибут, то статических: выражение (static expression) либо должно, либо может быть использовано, что зависит от описания этого атрибута (см. раздел 14); в противном случае оно нс должно присутствовать.

Примеры

I REGISTER'LEFT(l) - - самая левая граница индекса массива

- - REGISTER

2 OUTPUT'FANOUT - - число сигналов, управляемых портом - - OUTPUT

3 CLK'DELAYED(5ns) - - сигнал CLK, задержанный на 5 нс

59

7 ВЫРАЖЕНИЯ

7.1 В ы р а ж синя

Выражение — это формула, определяющая вычисление некоторого значения, expression :: =

relation { and relation }

I relation { or relation }

I relation { xor relation )

1 relation I nand relation 1

I relation I nor relation |

relation :: =

siniple_cxprcssion | rclational_opcrator simplc_exprcssion 1 simple_cxpression :: =

| sign j term ( adding_opcrator term } term :: =

factor { multiplying_opcrator factor }

factor :: -

primary [ ** primary ]

t abs primary

I not primary primary :: -name I literal I aggregate

I function_ca 11

I qualificd_cxpression

1 typc_convcrsion

I allocator

I ( expression )

ГОСТ Р 50754—95

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

Тип выражения (expression) зависит только от типов операндов и применяемых операторов; для совмещенного операнда или совмещенного оператора выявление типа операнда или идентификация совмещенного оператора зависят от контекста (см. 10.5). Для каждого предопределенного оператора типы операндов и результата описаны в 7.2.

Примечание— Синтаксические правила в отношении выражения, содержащего лшмчсскис операторы, иолволяют ецюии, iKicaCAomiTcmMiocn. из операторов and. or или xor. так как с<>1>т*сктпую1ине операции являются ассоциативными; для операторов nand и пог такая тюслслоаатслмюси, неловустима. так как пхпнегствующис операции нс я пли клея ассоциативными.

7.2 Оператор ы

Ниже определены операторы, которые могут быть использованы в выражениях. Каждый оператор представлен своим классом операторов, в котором все операторы имеют один и тот же уровень старшинства;

классы операторов представлены в порядке возрастания старшинства.

Iogical_operator : : = and I or 1 nand 1 nor 1 xor

rclational_opcrator : : - - 1 /“ 1 < 1 о 1 > I >=

adding_operator : : - + 1 — 1 &

sign : : - + 1 — 1

mulliplying_operator : : = • 1 / 1 mod 1 rem

misccllancous_opcrator : : = ** 1 abs 1 not

5-1-1406

60

ГОСТ Р 50754—95

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

В общем случае операнды в выражении вычисляются до их сопоставления с операторами. Для некоторых операций операнд, стоящий справа, вычисляется в том случае, если и только если операнд, стоящий слева, имеет определенное значение. Такие операции называются укороченными операциями. Логические операции and, or. nand и пог, определенные для операндов типов BIT и BOOLEAN, нее являются укороченными операциями. Более того, они являются единственными укороченными операциями.

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

Логические операторы and, or, nand, nor, xor и not определены для предопределенных типов BIT и BOOLEAN. Они также определены для любого одномерного массива, тип элементов которого есть BIT или BOOLEAN. В последнем случае для бинарных операторов and. or, nand. пог. или xor операнды должны быть массивами одинаковой длины, операция выполняется над соответствующими элементами этих массивов, а результат является массивом, диапазон индекса которого совпадает с диапазоном индекса левого операнда. Для унарного оператора not операция выполняется над каждым элементом операнда, а результат является массивом, диапазон индекса которого совпадает с диапазоном индекса операнда.

В следующих таблицах определены результаты логических операций. Символ Т представляет значение TRUE для типа BOOLEAN и 'Г для типа BIT; символ F представляет значение FALSE для типа BOOLEAN и 'О' для типа 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 В

А В

А пог В

А

not А

Т Т

F

Т Т

F

Т

F

Т F

Т

Т F

F

F

Т

F Т

Т

F Т

F

F F

Т

F F

Т

Для укороченных операций and. or. nand и nor над типами BIT и BOOLEAN правый операнд вычисляется только в том случае, если значения левого операнда не достаточно для определения результата операции. Для операции and и nand правый операнд вычисляется только в том случае, если значение левого операнда есть Т; для операции or и пог правый операнд вычисляется только в том случае, если значение левого операнда есть F.

П р и м с ч а и и е — Все бинарные логические операторы принп.гкжпт к классу оператор.» самого низкого уранит старшикстои. Унарный лошческнй оперптор пот принадлежит к классу операторов с самым высоким урошитм сгарп1инстп:1.

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

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

Оператор

Операция

Тип операндов

Тип результата

а*

равенство

любой тип

BOOLEAN

/-

неравенство

любой ТПП

BOOLEAN

<<->> =

упорядоченность

любой скалярный тип или дискретный индексируемый тип

BOOLEAN

Операторы равенства и неравенства (“ и /=) определены для всех типов, отличных от файловых типов. Оператор равенства возвращает значение TRUE, если два операнда равны, или в противном случае значение FALSE. Оператор неравенства возвращает значение FALSE, если два операнда равны, или в противном случае значение TRUE.

61

ГОСТ I» 50754—95

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

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

Операторы упорядоченности определены для любого скалярного типа и для любого дискретного индексируемого типа. Дискретный массив — это одномерный массив, элементы которого имеют дискретный тип. Каждый оператор возвращает значение TRUE, если соответствующее отношение удовлетворяется, или в противном случае значение FALSE.

Для скалярных типов упорядоченность определена в терминах относительных значений. Для дискретных индексируемых типов отношение < (меньше чем) определено таким образом, что левый операнд меньше чем правый операнд, если и только если:

1) Левый операнд является пустым массивом, а правый операнд таковым нс является;

2) оба операнда не являются пустыми массивами и удовлетворяется одно из следующих условий: а) самый левый элемент левого операнда меньше чем самый левый элемент правого операнда.

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

Отношение <= (меньше или равно) для дискретных индексируемых типов определено как исключающая дизъюнкция результатов операторов < и = для тех же двух операндов. Отношения > (больше) и >= (больше или равно) определены как дополнения операторов <= и < для тех же двух операндов соответственно,

7.2.3 Аддитивные операторы

Аддитивные операторы + и — предопределены для любого числового типа и имеют обычный смысл.

Оператор конкатенации & предопределен для любого одномерного индексируемого типа

Оператор

Операция

Тип левого

Тип правого

Тип

+

сложение

операнда

любой число

операнда

тот же тип

результата тот же тип

вычитание

вой тип любой число

тот же тип

тот же тип

&

конкатенация

вой тип

любой индек-

тот же индек-

тот же индек-

Для операции 1) Если оба

сирусмый тип любой индексируемый ТИП тип элемента тип элемента

конкатенаций возможны три случая: операнда являются одномерными массивами

енруемый тип сирусмый тип

тип элемента тот же индек

сируемый тип

любой индек- тот же индексируемый тип сирусмый тип

тип элемента любой индек

сируемый тип

, то результатом конкатенации является

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

(в порядке слева направо), за которыми следуют элементы правого операнда <в том же порядке). Левой границей этого результата является левая граница левого операнда, если только он нс является пустым массивом (в этом случае результатом операции является правый операнд). Направление результата совпадает с направлением левого операнда, если только он нс является пустым массивом (в этом случае направление результата совпадает с направлением правого операнда).

(.2

ГОСТ Р 50754-95

2) Если только один из операндов является одномерным массивом, то результат конкатенации определяется правилами для случая (I), при условии, что вместо второго операнда используется неявный массив, единственным элементом которого является этот операнд. Левой границей такого массива является левая граница подтипа индекса этого массива, а его направление является восходящим (нисходящим), если подтип индекса является восходящим (нисходящим).

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

Операторы знака + и — предопределены для любого числового типа и имеют обычный смысл. Для каждого из этих унарных операторов операнд и результат имеют одинаковый тип.

Примечание — В силу относительною ире^ииестгкмаиня знаков » и — ■> грамматике выражений операнд ел диаком не должен следовать за мультипликативным оператором, оператором пСиоСДОпи* в Степень ’* или операторами abs и ПО1. Например, синтаксические пропила не допускают написание следующих выржений:

I) А/+В - - недопустимое выражение

2) Л**—В - - недопустимее пыражспие

Однако эти выражении могут быть переписаны о допустимой форме си туютиим образом:

I) А/<+В> - - допустимое выражение

2) А**(—В) - - допустимое выражение

7.2.4 Мультипликативные операторы

Операторы • и / предопределены для любрго целого и для любого плавающего типа и имеют обычный смысл; операторы mod и rem предопределены для любого целого типа. Для каждого из этих операторов операнды и результат имеют один и тот же тип.

Оператор

Операция

Тип левого операнда

Тип правого операнда

Тип результата

умножение

любой целый тип

тот

же

тип

тот

же

тип

любой плавающий тип

тот

же

тип

тот

же

ТИП

/

деление

любой целый тип

тот

же

тип

тот

же

тип

любой плавающий тип

тот

же

тип

ТОТ

же

ТИП

mod

модуль

любой целый ТИП

тот

же

тип

тот

же

тип

rem

остаток

любой целый тип

тот

же

тип

тот

же

тип

Целочисленное деление и остаток определены следующим отношением:

А-(А/В)*В+(А rem В),

где (А rem В) имеет знак операнда А и абсолютное значение меньшее, чем абсолютное значение операнда В. Целочисленное значение удовлетворяет следующему равенству:

(—А)/В-—(А/В)-А/(—В).

Результат операции деления по модулю таков, что (A mod В) имеет знак операнда В и абсолютное значение меньшее, чем абсолютное значение операнда В. Для некоторого целого значения N этот результат должен удовлетворять отношению:

A»B*N+(A mod В).

В дополнение к вышесказанному операторы * и / предопределены для любого физического типа.

63

ГОСТ Р 50754—95

Оператор

Операция

Тип левого операнда

Тип правого операнда

Тил результата

умножение

любой физический тип

INTEGER

совпадает с типом левого операнда

любой физический тип

REAL

совпадает с типом левого операнда

INTEGER

любой физический тип

совпадает с типом правого операнда

REAL

любой физический тип

совпадает с типом правого операнда

/

деление

любой физический тип

INTEGER

совпадает с типом левого операнда

любой физический тип

REAL

совпадает с типом левого операнда

Умножение

значения Р физического

любой физический тип

типа T\Sp\s на

тот же тип

значение 1 типа

универсальный целый

INTEGER эквивалентно

следующему вычислению:

T\Sp\s'Val(T\Sp\s'Pos(P)*I)

Умножение значения Р физического типа T\Sp\s на значение F типа REAL .эквивалентно следующему вычислению:

T\Sp\sWal(INTEGER(REAL(T\Sp\sTos(P))*m

Деление значения Р физического типа 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’Po5(P2>

7.2.5 Прочие операторы

Унарный оператор abs предопределен для любого числового типа.

Оператор

Операция

Тип операндов

Тип результата

abs

абсолютное

любой числовой

тот же числовой

значение

тип

тип

Оператор возведения в степень *• предопределен для

каждого целого типа

и для каждого плавающего

типа. В любом случае правый операнд, называемый экспонентой, имеет предопределенный тип INTEGER.

Оператор Операция

Тип левого

Тип правого

Тип результата

операнда

операнда

** возведение

любой целый

INTEGER

совпадает с

в степень

тип

типом левого операнда

любой плаваю

INTEGER

совпадает с

щий тип

типом левого

операнда

$•2—1406

64

ГОСТ Р 50754—95

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

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

7.3 Операнды

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

Имена определены в 6.1; остальные виды операндов определены в 7.3.1 —7.3.6.

7.3.1 Литералы

Литерал — это либо числовой литерал, либо литерал перечисления, либо строковый литерал, либо битовый литерал, либо литерал null.

literal :: = numeric-literal

I enumcrationjitcral

I string-literal

l bit-StringJitcral

I null

numeric_litcrai :: -abstract-literal I physical-literal

Числовые литералы (numcricjitcral) включают литералы абстрактных типов универсальный _целый и универеалышй у)ейстаительиый. а также литералы физических типов. Абстрактные литералы определены в разделе 13; физические литералы определены в 3.13.

Литералы перечисления (enumeration literal) — это литералы перечисляемых типов, Они включают как идентификаторы, так и символьные литералы. Перечисляемые литералы определены в 3.1.1.

Строковые (string literal) и битовые (bit string literal) литералы являются представлениями одномерных символьных массивов. Тип строкового или битового литерала должен определятся исключительно из контекста, в котором этот литерал используется, не учитывая при этом сам литерал, но используя тот факт, что типом этого литерала должен быть одномерный массив символьного типа (для строковых литералов) или типа BIT (для битовых литералов). Лексическая структур.! строковых и битовых литералов определена в разделе 13.

Для строковых и битовых литералов, представляющих непустые индексируемые значения, направление и границы этого значения определяются согласно правилам для позиционных агрегатов массивов, где число элементов агрегата эквивалентно длине (см. 13.6 и 15.7) строкового или битового литерала. Для строкового литерала, представляющего пустой массив, направление и самая левая граница этого массива определяются так же, как и для других строковых литералов. Если направление является восходящим, то самая правая граница — это значение, предшествующее (как установлено атрибутом PRED) значению левой границы; в противном случае самой правой границей является значение, следующее (как установлено атрибутом SUCC) за значением самой левой границы.

Символьные литералы, соответствующие графическим символам, содержащимся внутри строкового литерала или битового литерала, должны быть видимыми на месте строкового литерала.

Литерал null представляет пустое ссылочное значение для любого ссылочного типа.

Вычисление литерала производит соответствующее значение.

Примеры

1

3.14159_26536

- - литерал типа универсальный _дейстаите;1ьный

2

5280

- - литерал типа унимрсальный^слый

3

10.7ns

- - литерал физического типа

4

0"4777'

- - литерал типа BIT-STRING

5

"54LS281”

- - литерал типа STRING

6

•< 1»

- - строковый литерал, представляющий пустой

7

- - массив

65

ГОСТ Р SO754-95

7.3.2 Агрегаты

Агрегат объединяет одно иди несколько значений в составное значение структурною или индексируемого типа.

aggregate :: =

( element-association { , clcmcnt_association ) >

demon t_associa lion :: -

( choices => | expression

choices :: = choice { I choice }

choice :: ■

simplc_expression

I dcscrctc.range

I e/emcn(_siniplc_namc

I others

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

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

Сопоставление элементов, в котором выбор (choice) задан как простое имя (simple name), разрешен только в агрегате структуры. Сопоставление элементов, в котором выбор задан в виде простого выражения или дискретного диапазона, допустимо только в агрегате массива: простое выражение задаст элемент с соответствующим значением индекса; дискретный диапазон задаст элементы для каждого значения индекса в этом диапазоне. Сопоставление элементов с единственным выбором others допустимо в том случае, когда он задает все оставшиеся элементы (если они есть).

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

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

7.3.2.1 Л г р с г а т ы с т р у к т у р

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

7.3.2.2 Л г р е г а т ы массивов

Для агрегата одномерного индексируемого типа каждый выбор должен задавать значения, принадлежащие к типу индекса, а выражение, стоящее в каждом сопоставлении элементов, должно иметь тип элементов. Агрегат п-мерного индексируемого типа, где п больше Г, записывается как одномерный агрегат, в котором подтип индекса этого агрегата задан первой позицией индекса индексируемого типа, а выражение, заданное для каждого сопоставления элементов, является (п — Ь-мсрным массивом или агрегатом массива. В многомерных агрегатах строковые и битовые литералы допускаются вместо одномерного массива символьного типа.

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

5-2’

66

ГОСТ Г 50754-95

Подтип агрегата массива, имеющего выбор others, должен определяться из контекста. Это означает, что такой агрегат может использоваться только:

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

2) Как неявное выражение, определяющее неявное начальное значение порта, объявленного с ограниченным индексируемым подтипом.

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

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

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

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

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

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

9) Как подагрегат многомерного агрегата, при этом последний сам используется в одном из перечисленных контекстов.

Границы массива, который не имеет выбор others, определяются по следующим правилам. Если агрегат используется в одном из вышеуказанных контекстов, то направление подтипа индекса этого агрегата совпадает с направлением соответствующего ограниченного индексируемого подтипа: в противном случае направление подтипа индекса этого агрегата совпадает с подтипом индекса базового типа этого агрегата. Для агрегата, имеющего именованные сопоставления, самая левая и самая правая границы определяются направлением подтипа индекса этого агрегата и заданными наименьшим и наибольшим выборами. Для позиционного агрегата самая левая граница определяется применяемым ограничением индекса, если лот агрегат используется в одном из вышеуказанных контекстов; в противном случае самая левая граница представлена атрибутом S’LEFT, где S является подтипом индекса базового типа массива; в любом случае самая правая граница определяется направлением подтипа индекса и количеством элементом.

7.3.3 Выловы функций

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

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

function_call :: =

function_nnme I ( aclual_pararneter_part > |

actual_parameter_part :: - p«r«werer_association_list

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

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

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

Квалифицированное выражение испольузстся для явного утверждения типа и, возможно, подтипа операнда, представленного в виде выражения или агрегата.

qualificd_cxprcssion :: -

type..mark ’ ( expression )

I type_mark ’ aggregate

67

ГОСТ Р 50754-М

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

П р и м с >■ а и и с — Квалифицированное выражение может быть иссю-тьмшикт для явного утверждения типа а тех случаях, когда тип литерала перечисления или агрегата нельзя усыновить по контексту.

7.3,5 Преобразование типа

Преобразование типа обеспечивает явное преобразование между родственными типами.

lypejronversion :: - typc_mark ( expression )

Целевой тип преобразования типа — это базовый тип обозначения типа (type mark). Тип операнда преобразования типа должен определяться независимо от контекста (в частности, независимо от целевого типа). Болес того, операнд преобразования типа не может быть литералом null, генератором, агрегатом или строковым литералом. В качестве операнда преобразования типа может использоваться выражение, заключаемое в круглые скобки, при условии, что это выражение имеет допустимую форму и без скобок.

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

Явное преобразование типа допускается между родственными типами. В частности, допускается преобразование операнда конкретного типа в сам тип. Ниже приведены другие допустимые явные преобразования типа:

а) Абстрактные чистовые типы.

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

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

1) оба типа имеют одинаковую размерность;

2) в каждой позиции индексов типы индексов либо являются одним и тем же типом, либо взаимно преобразуемыми типами;

3) типы элементов являются одним и тем же типом.

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

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

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

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

Примечание— Дна индексируемых типа могут быть ролктенными. лаже сели стютютгнукнаис позиции индексов имеют разные направлении.

68

ГОСТ I’ 50754-95

7.3.6 Генераторы

Вычисление генератора создаст объект и вырабатывает ссылочное значение, которое указывает на этот объект.

allocator :: =

new subtypejndication

I new qualificd_cxprcssion

Типом объекта, создаваемого генератором (allocator), является базовый тип обозначения типа, заданного либо в указании подтипа (subtype indication), либо в квалифицированном выражении (subtype expression). Для генератора, в котором используется указание подтипа, начальным значением создаваемого объекта является то же значение, которое задастся неявно в объявлении переменной (неявное начальное значение) указанного подтипа. Для генератора, в котором используется квалифицированное выражение, начальное значение создаваемого объекта определяется этим выражением.

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

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

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

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

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

II р и м е я а н и с — Для каждой, ссылочного шип неявно ф6ъ9плси;| процедуры Г)еа№хше. Э,а процедура обеспечивает механизм для явного освобождения памяти, занимаемой объектом, созданным при помощи генератор».

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

Примеры

NODE

принимает неявное начальное значение

I

new

2

3

new

new-

NODE’ (15ns, null)

NODE’ (Delay e> 5ns, Next “> Stack)

- -

начальное значение задано явно

начальное значение задано явно

4

new

BIT_VECTOR’<"00110110")

- -

ограничен начальным значением

5

new

STRINGd to 10)

- -

ограничен пределами индекса

6

new

STRING

- -

неправильно: должно быть задано ограничение

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

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

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

69

ГОСТ Р 50754—95

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

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

I) литералом любого типа;

2) константой (за исключением неполной константы), явно описанной объявлением константы с использованием локально статического подтипа и инициализированной при помаши локально статического выражения;

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

4) предопределенным атрибутом локально статического поллтипа, являющимся значением;

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

6) определяемым пользователем атрибутом, значение которого определяется локально статическим выражением;

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

8) локально статическим выражением, заключенным в круглые скобки;

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

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

Локально статическим подтипом является либо локально статический скалярный подтип, либо локально статический индексируемый подтип.

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

I) локально статическим первичным;

2) константой настройки;

3) параметром оператора генерации;

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

5) агрегатом глобально статического подтипа, сопоставления элементов которого содержат только глобально статические выражения:

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

7) предопределенным атрибутом глобально статического подтипа, являющимся значением или диапазоном;

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

9> определяемым пользователем атрибутом, значение которого определяется глобально статическим выражением;

10) квалифицированным выражением, обозначение типа которого указывает на глобально статический подтип и операнд которого представлен глобально статическим выражением;

11) глобально статическим выражением, заключенным я круглые скобки.

Глобально статическим диапазоном является диапазон, границы которого представлены глобально статическими выражениями. Глобально статическим ограничением диапазона является ограничение

70

ГОСТ Р 50754—95

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

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

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

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

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

Универсальным выражением является либо выражение, производящее результат типа универсальный _це-лый, либо выражение, производящее результат типа универсальный-действительный.

Ддя любого целого типа и для типа универсальный_цслый предопределены одни и те же операции. Для любого плавающего типа и для типа унткрсальиый-действительный предопределены одни и те же

операции. В

дополнение к этим

операциям существуют еще

следующие операции

умножения и деления:

Оператор

Операция

Тип левого операнда

Тип правого операнда

Тип результата

умножение

универсале-ный_действи-тельный

универсаль-ный_целый

универсальный -действительный

универсальный _целый

универсаль-ный_действи-

универсаль-ный -действи

/

тсльный

тельный

деление

уиивсрсаяь-ный -действи

универсальный _целый

универсала-ный_действи-

тельный

тельный

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

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

8 ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ

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

sequcnce_of_statemcnis :: =

( scqucntial_statemcnt }

5cquen(ial_s(alcmcnt :: =

wait_statemcni

I assertion.sta lenient

I signal_assignmcnt_statement

I variable_assignmcnt_slatement

I procedure_call_siatcmcnt

I if_$taiement

71

( OCT P 50754—95

I casc_statcment

1 loop_statcmcnt

I ncxl_skHemeni

I cxit_statemcni

I rcturn_staiemcnt

I null_statcmcnt

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

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

Оператор ожидания (wait statement) вызывает приостановку выполнения оператора процесса или процедуры.

waiLstatcment :: =

wait f sensiiivity_clausc |

[ condition .clause || timcoul_clausc J;

scnsilivity_clau.se :: = on scnsitivilyjist

scnsi(ivity_list :: = izgW_namc { . s<gne/_namc }

condition_clausc :: ” until condition

condition :: - />оо7е«гг_ех press ion

timcout_ciau.se :: - for /rmc_ex pression

Описание чувствительности (sensitivity clause) определяет множество чувствительности оператора ожидания, т.с. множество сигналов, к которым этот оператор чувствителен. Каждое имя сигнала (signal паше) в списке чувствительности (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

ГОСТ Р 50754—95

asscrlion_statcmcnt :: =

assert condition

I report expression |

I severity expression ];

Если описание сообщения задано, то оно должно содержать выражение предопределенного тина STRING, задающее текст сообщения. Если описание серьезности задано, то оно должно содержать выражение предопределенного типа SEVERITYJLEVEL, задающее уровень серьезности утверждения.

Описание сообщения задаст строку сообщения, включаемую в сообщение об ошибке, генерируемое утверждением. При отсутствии описания сообщения в конкретном утверждении неявным значением строки сообщения является строка "Assertion violation”. Описание серьезности задаст уровень серьезности, сопоставляемый с утверждением. При отсутствии описания серьезности в конкретном утверждении неявным значением уровня серьезности является ERROR.

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

Сообщение об ошибке состоит по крайней мерс из:

1) указания, что данное сообщение сгенерировано утверждением;

2) значения уровня серьезности;

3) значения строки сообщения;

4) имени модуля проекта (См. раздел 11.1), содержащего это утверждение.

8.3 Оператор назначения сигнал а

Оператор назначения сигнала (signa! assignment statement) изменяет планируемые выходные формы сигнала, содержащиеся я драйверах одного или более сигналов (см. 9.2.1).

signal_assignmeni_sta(cment :: =

target <= [ transport J waveform;

target :: = name I aggregate

waveform :: =

wavefbrm_clemcnl { , wavcform_elcment }

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

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

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

Правая часть оператора назначения сигнала может содержать зарезервированное слово transport. Это означает, что задержка, сопоставляемая с первым элементом формы сигнала, трактуется как транепо/)-шнаи задержка. Транспортная задержка является характеристикой устройств (таких, кик линии передачи), которые имеют бесконечно большую частоту срабатывания: любой импульс передается независимо от того, насколько мала его длительность. Если слово transport нс задано, то задержка трактуется как 73

ГОСТ Р 50754-95

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

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

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

wavcform_elenient :: =

w/«e_cxprcssion 1 after nw_expression |

I null I after //me_cx press ion |

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

Базовым типом выражения времени (time expression) в каждом элементе формы сигнала должен быть предопределенный тип TIME, определенный в пакете STANDARD. Если описание задержки не задано в элементе формы сигнала, то подразумевается неявное описание after 0ns. Считается ошибкой, если выражение времени в элементе формы сигнала вырабатывает отрицательное значение.

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

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

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

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

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

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

1) Все новые транзакции помечаются.

2) Старая транзакция помечается, если она непосредственно предшествует помеченной транзакции, и се компонент значения такой же, как у этой помеченной транзакции.

3) Транзакция, определяющая текущее значение драйвера, помечается.

4) Все непомеченные транзакции (все из которых являются старыми транзакциями) выбрасываются из планируемой выходной формы сигнала.

С точки зрения помеченных транзакций считается, что любые две пустые транзакции, следующие одна за другой в планируемой выходной форме сигнала, имеют один и тот же компонент времени.

Выполнение оператора назначения сигнала, в котором целевой объект имеет составной тип, происходит аналогичным образом, за исключением того, что вычисление формы сигнала состоит из вычисления отдельной последовательности транзакций для каждого скалярного полэлеменга. тип которого определяется

74

ГОСТ Р 50754—95

типом целевого объекта. Каждая такая последовательность состоит из транзакций, компоненты значения которых определяются значениями соответствующих скалярных подэлсментон выражений значения в этой форме сигнала, а компонент времени определяется выражением времени, соответствующим выражению значения. Каждая такая последовательность затем используется для изменения планируемой выходной формы драйвера, соответствующего подэлементу целевого объекта. Это верно как для целевого объекта, заданного именем сигнала составного типа, так и для целевого объекта, заданного в виде агрегата.

Если конкретная процедура описана элементом объявления, который нс содержится в операторе процесса, и в этой процедуре используется оператор назначения сигнала, то объектом назначения этого оператора должен быть формальный пример этой процедуры или родителя этой процедуры, или агрегат, составленный из таких формальных параметров.

II р и м с ч а н и с — Если выражение значения (value схргсзмоЮ. сюйпкс справа. «пляски либо числовым литералом, либо атрибутом, вырабатывающим результат типа уг/1г<кт>ог.1б/1ый_1к.тый или ^иверсалмиЛ^йетмш.1Ы1ыЛ. то п .'ном случае выполняется исшитое пресоразоалппе типа.

Вышеописанные правила гарантируют, что лайнер, на который тодаейсшуст оператор нйаначения сигнала, всегда является статически определяемым, если атш оператор стоит внутри конкретного процесса (включая случай, когда он стоит внутри процедуры, объявленной внутри этого и pi тесел». В этом случае сам драйвер является /трайлером, определенным этим процессом; в противном случае оператор назначения сигналя должен стоять внутри процедуры, а сам драйвер является дайвером, переданным в эту процедуру вместе с 1гараметрамн-сип1оламн этой процедуры.

8.4 Оператор п р и с в а и в а н и я и с р с м с н н о й

Оператор присваивания переменной (variable assignment statement) изменяет текущее значение переменной на новое значение, заданное выражением. Переменная, обозначаемая именем, и выражение, стоящее в правой части оператора, должны быть одного и того же типа.

variablc_assignment_staicmcnt :: =

target : - expression;

Если целевой объект оператора присваивания представлен именем, то .это имя должно обозначать переменную, а базовым типом выражения, стоящего в правой части, должен быть базовый тип переменной, обозначаемой этим именем. Такая форма оператора присваивания используется для присваивания значения, стоящего справа, отдельной (скалярной или составной) переменной.

Если целевой объект оператора присваивания представлен в виде агрегата, то тип этого агрегата ДОЛЖСН определяться из контекста, исключая сам агрегат, но учитывая тот факт, что типом этого агрегата должен быть составной тип. Базовым типом выражения в правой части оператора присваивания должен быть базовый тин этого агрегата. Более того, выражение н каждом элементе этого агрегата должно быть статическим именем, обозначающим переменную. Такая форма оператора присваивания используется для присваивания каждого элемента значения, стоящего справа, переменной, имя которой используется как соответствующий подэлемент этого агрегата.

Если целевой объект оператора присваивания представлен в виде агрегата и локально статическое имя в элементе сопоставления этого агрегата обозначает конкретную переменную или другую переменную, подэлсмснтом которой является эта переменная, то считается, что этот элемент сопоставления идентифицирует такую переменную как целевой объект оператора присваивания. Считается ошибкой, если эта переменная идентифицируется как объект присваивания более чем одним элементом сопоставления в одном и том же агрегате.

При выполнении оператора присваивания, целевой объект которого представлен именем переменной, сначала вычисляются имя переменной и выражение. Затем делается проверка на соответствие типа значения выражения подтипу переменной, за исключением того случая, когда переменная является массивом (в этом случае присваивание вызывает преобразование подтипа). Наконец, значение этого выражения становится новым значением этой переменной.

Выполнение оператора присваивания, целевой объект которого представлен в виде агрегата, происходит аналогичным образом, за исключением того, что вычисляется каждое из имен в агрегате и проверка подтипа выполняется для каждого подэлемента значения, стоящего справа, соответствующего одному из имен в этом агрегате. Значение этого подэлемента затем становится новым значением переменной, обозначаемой соответствующим именем.

Возникает ошибка, если вышеупомянутая проверка подтипа нс имеет успеха.

Выявление типа целевого объекта оператора присваивания может потребовать выявление типа выражения, если целевой объект представлен именем, которое может быть интерпретировано как имя переменной, указываемой ссылочным значением, возвращаемым через вызов функции; и. аналогично, как элемент или сечение такой переменной.

Примечание — Бели правая часть оператора присваивание представлена числовым литералом либо атрибутом, вырабатывающим результат типа уншк'рс'атытыЛ^слхл) или .п/иаерса.тьчый^Ача'шаппгс.тынл). то в гном случае выполняется неявное преобразование типа.

75

ГОСТ Р 50754—95

Нс допускается присваивание значения переменной файлового типа

8.4.1 Присваивание индексируемой переменной

Если левая часть оператора присваивания представлена в виде имени, обозначающего индексируемую переменную (включая сечение), то значение, присваиваемое целевому объекту, неявно конвертируется в подтип этой индексируемой переменной; результат такого конвертирования подтипа становится новым значением этой индексируемой переменной.

Вышеуказанное означает, что новое значение каждого элемента индексируемой переменной задается соответствующим элементом (см. 7.2.2) индексируемого значения, получаемою вычислением выражения. В процессе конвертирования подтипа делается проверка на наличие для каждого элемента индексируемой переменной соответствующего элемента в этом индексируемом значении. Возникает ошибка, сели эта проверка нс имеет успеха.

II р и м с ч о ■■ и с — Неявное крсобразованис подтип», описанное шлиц:, для ирноюишины индексируемой переменной выполняется только для значения, стоящего в правой части и юикин как едших пелес; конвертирование не выполняется для иодэлсяснюи. являющихся индексируемыми значениями.

8.5 Оператор вызова процедуры

Вызов процедуры активизирует выполнение тела процедуры.

proccdurc_call_statcmcni :: =

proccJwre_namc f(actual_pnramcler_pari) j;

Имя процедуры задаст активизируемое тело процедуры. Раздел фактических параметров, если задан, задаст сопоставление фактических параметров с формальными параметрами процедуры.

Для каждого формального параметра процедуры вызов процедуры должен содержать точно один соответствующий фактический параметр. Этот фактический параметр задастся либо явно элементом сопоставления в списке сопоставлений либо, при отсутствии такого элемента сопоставления, неявным выражением (см. 4.3.3).

Выполнение вызова процедуры включает вычисление выражений фактических параметров, заданных в этом вызове, и вычисление неявных выражений, сопоставленных с формальными параметрами этой процедуры, нс имеющими сопоставленных с ними фактических параметров. (Если формальный параметр имеет неограниченный индексируемый тип. то этот параметр принимает подтип фактического параметра). Тело процедуры выполняется с использованием в качестве значений формальных параметров значений фактических параметров и значений неявных выражений.

8.6 У с л о в н ы й о it с р а т о р

Условный оператор (if_statement> выбирает для выполнения одну или ни одной из заключенных в него последовательностей операторов (sequence of statement), в зависимости от значения одного или более соответствующих условий.

if_statcmcnl :: -

if condition then

sequcncc_of_statcmcnls

{ clsif condition then scqucnce_of_siaiemcnis )

I else

scqucncc_of-siatcmcnis | end if;

Выражение, задающее условие, должно иметь тип BOOLEAN.

Выполнение условного оператора состоит в последовательном вычислении условий, стоящих после слова if и после всех слов elsif (при этом заключительное else рассматривается как elsif TRUE then) до тех пор, пока одно из них не возвратит значение TRUE или все условия нс возвратят значение FALSE. Если одно условие возвращает значение TRUE, то соответствующая ему последовательность операторов выполняется; в противном случае ни одна последовательность операторов нс выполняется.

8.7 Оператор выбора

Оператор выбора (case statement) выбирает для выполнения одну последовательность операторов из числа альтернативных последовательностей операторов; выбираемая альтернатива определяется значением выражения.

case_statement :: -

case expression is

6 1 -U06

76

ГОСТ Р 50754—95

casc_staicmcnt_altcrnativc

{ case^statcmenLal tentative } end case;

case_statement_ahernaiive :: -

when choice» - >

scqncncc_uf_$tatcnien is

Выражение должно иметь дискретный тип или одномерный символьный индексируемый тип (значения которого могут быть представлены строковыми или битово-строковыми литералами). Этот тип должен определяться независимо от контекста, н котором эго выражение используется, но используя тот факт, что выражение должно иметь дискретный тип или одномерный символьный индексируемый тип. Каждый выбор в альтернативе оператора выбора (case statement alternative) должен иметь тот же тип. что и это выражение; список выборов задаст значения выражения, при которых эта альтернатива будет выбрана.

Если в качестве выражения используется имя объекта, подтип которого является локально статическим (независимо от того, является ли ок скалярным или индексируемым), то каждое значение этого подтипа должно быть представлена раз и только раз в множестве выборов оператора выбора, и никакие другие значения не допускаются; это правило также имеет место, если это выражение является квалифицированным выражением или преобразованием типа, в которых обозначение типа указывает на локально статический подтип.

Если типом выражения является одномерный символьный индексируемый тип. то это выражение должно быть именем объекта, подтип которого янляетея локально статическим, или оно должно быть квалифицированным выражением или преобразованием подтипа, обозначение подтипа которых указывает локально статический подтип. В этом случае каждый выбор, стоящий в любой альтернативе оператора выбора, должен быть локально статическим выражением, значение которого имеет ту же длину, что и значение этого выражения.

Для других форм выражения каждое значение (базового) типа выражения должно быть представлено один и только один раз во множестве выбором и никакое другое значение не допускается.

Простое выражение и дискретные диапазоны, заданные в качестве выборов в операторе выбора, должны быть локально статическими. Выбор, определяемый дискретным диапазоном, символизирует все значения в соответствующем диапазоне. Выбор others допускается только в последней альтернативе, при этом ок должен быть единственным выбором в этой альтернативе; этот выбор символизирует все значения (возможно и ни одного), которые не заданы в выборах предыдущих альтернатив. Простое имя элемента нс допускается в качестве выбора в альтернативе оператора выбора.

И р и м е ч в и ■■ с — При пмкинс<|и>« cncpjirojxai выбора для ncixeii«eiiHM избирается «мил и только одна альтернатива, ПК как ыаборы яялякпеч nc^inruDaKimtiM» и вмигонсклюпэкхцпми. Km.h».|»ikjii»iu выражения оператора лыйсра локально статическим полтниом часть бывает полезна дня ограничение числа выбором, коичме исииходимо залами, «ено.

Выбор others к операторе выбора требуется в случае, если <шюм выражения янляетея тип у1нгёф<атьнм^'.гм) (например, если эти пыражеиме является целым литералом), так как это «моется счимопенным способом покрыц. ясс значения этою иша.

Совмещение oiiepaiofNt *-“ ие кише! ла семашику uutKvnjcmin оператора шибера.

8.8 Оператор ник л а

Оператор цикла (loop statement) содержит последовательность операторов, которая будет выполняться многократно 0 или более раз.

Ioop_statcmcnt :; -

I йх)р_1эЬе! : J

| iteration_schcmc | loop sequence_of_5tatcincnt5 end loop | /oopjabd I ;

iterationjKhemc :: =

while condition

I for /oop_paramcter_spccjfication

parameter.speciflcation :: -

identifier in discrctc_rangc

Если н конце оператора цикла используется метка, то она должна повторять метку в начале этого оператора.

ГОСТ Р 50754—95

Оператор цикла без схемы итерации (iteration scheme) задает повторяющееся выполнение последовательности операторов. Выполнение оператора цикла завершается при выходе из него вследствие выполнения оператора перехода, оператора выхода или оператора возврата.

Для оператора цикла со схемой итерации while перед каждым выполнением последовательности операторов вычисляется условие; если значением этого условия является TRUE, то последовательность операторов выполняется, если FALSE, то выполнение оператора цикла завершается.

Для оператора цикла со схемой итерации for спецификация параметра цикла (loop parameter specification) является объявлением параметра цикла с конкретным идентификатором. Параметр цикла является объектом, типом которого является базовый тип дискретного диапазона.

Внутри оператора цикла параметр цикла является константой. Следовательно, параметр цикла нс может использоваться в качестве целевого объекта оператора присваивания. Аналогично, параметр цикла не может быть передан к качестве фактического параметра, соответствующего формальному параметру вида out или inout в списке сопоставления.

При выполнении оператора цикла со схемой итерации for сначала вычисляется дискретный диапазон (discrete range). Если этот диапазон является пустым диапазоном, то выполнение оператора цикла завершается; в противном случае последовательность оператора выполняется для каждого значения этого дискретного диапазона (при условии, что нс был сделан выход из оператора цикла вследствие выполнения операторов перехода, выхода или возврата). Перед каждой такой итерацией параметру цикла присваивается соответствующее значение дискретного диапазона. Значения присваиваются в порядке слева направо.

8.9 Оператор переход а

Оператор перехода (next statement) используется для завершения выполнения одной из итераций объемлющего оператора цикла (далее — цикл). Завершение называется условным, если этот оператор содержит условие:

ncxt_Slalcment :: =

next | /oopjabcl I I when condition |;

Оператор перехода, содержащий метку цикла, разрешен только внутри помеченного цикла и применяется именно к этому циклу: оператор перехода без метки цикла разрешен только внутри цикла и применяется к самому внутреннему объемлюшему циклу (с меткой или без метки).

При выполнении оператора перехода сначала вычисляется условие, если он задано. Текущая итерация цикла завершается, если значением этого выражения является TRUE или условие нс задано вообще.

8.10 Оператор выхода

Оператор выхода (exit statement) используется для завершения выполнения объемлющего оператора цикла (далее — цикл). Завершение является условным, если этот оператор содержит условие.

exit_statcmcnt :: =

exit | Awpjabcl I I when condition ];

Оператор выхода, содержащий метку цикла, разрешен только внутри помеченного цикла и применяется именно к этому циклу; оператор выхода без метки цикла разрешен только внутри цикла и применяется к самому внутреннему объемлющему циклу (с меткой или без метки).

При выполнении оператора выхода сначала вычисляется условие, если оно задано. Выход из цикла затем имеет место, если значением этого условия является TRUE или условие не задано вообще.

8. II Оператор возврата

Оператор возврата (return statement) используется для завершения выполнения самого внутреннего объемлющего тела функции или процедуры.

rcturn_statcmcni :: -

return | expression |:

Оператор возврата разрешен только внутри тела функции или процедуры и применяется к самой внутренней объемлющей функции или процедуре.

Оператор возврата, стоящий в теле процедуры, нс должен содержать выражение. Оператор возврата, стоящий в теле функции, должен содержать выражение.

Значение этого выражения определяет результат, возвращаемый этой функцией. Типом этого выражения должен быть базовый тип обозначения типа, заданного после зарезервированного слова return в спецификации этой функции. Считается ошибкой, если выполнение функции завершается средством, отличным от оператора возврата.

При выполнении оператора возврата сначала вычисляется выражение (если оно задано) и делается проверка на принадлежность значения выражения подтипу результата. Если проверка имеет успех, то

6-г

7S

ГОСТ Р 50754—95

на этом выполнение оператора возврата завершается;1 также заканчивается выполнение объемлющей подпрограммы. Возникает ошибка на месте оператора возврата, если проверка нс имеет успеха.

И р и м с ч а и и с — Если выражение является числовым лите|Х1ж»м либо атрибутом, преизяодящим результат типа умт/<терсй.ты<ыт>_т(<'лмй или унимрсолы/ый^йспшитсчм^^ то выполняется не шитое преобразование результата.

8.12 Пустой оператор

Пустой оператор (null statement) нс вызывает никаких действий.

null_siaiemcnt :: = null:

Выполнение пустого оператора нс имеет никакого эффекта, кроме передачи управления на следующий оператор.

Примечание — Пустой оператор может быть использован для явного указания того, что никакие действия не выполняются при удовлетворении некоторых условий. Это. и частности, иолсмю при исиальжипнии оператора выбора, и котором псе возможные значения выражения должны быть покрыты выборами; для определенных же выборов никаких действий не требуется.

9 ПАРАЛЛЕЛЬНЫЕ ОПЕРАТОРЫ

В данном разделе описаны различные формы параллельных операторов (concurrent statement). Параллельные операторы используются для определения взаимосвязанных блоков и процессов, которые совместно описывают полное поведение или структуру проекта. Параллельные операторы выполняются асинхронно в отношении друг друга.

concurrent-Statement :: - • - параллельный оператор block_slatcmcnt - - оператор блока

I proccss_stalcmeni - - оператор процесса

I concurreni_proce<lurc_call - - параллельный вызов процедуры I concurrcnt_assrction_statement - - параллельный оператор утверждения

I concurreni_signal_assignment_statcment - - параллельный оператор назначения сигнала I $ompQncn|jnslanUaiion_siatemcni - - оператор конкретизации компонента I gcncratC-Statement - - оператор генерации

Первичными параллельными операторами являются оператор блока (block statement), который группирует вместе другие параллельные операторы, и оператор процесса (process statement), который представляет отдельный независимый последовательный процесс. Остальные параллельные операторы обеспечивают удобную форму представления простых, общеиспользуемых форм процессов, а также структурной декомпозиции и регулярных описаний.

Внутри конкретного цикла моделирования реализация может обеспечивать выполнение параллельных операторов в параллельном или каком-либо другом порядке. Язык не определяет этот порядок. Описание, которое зависит от конкретного порядка выполнения параллельных операторов, является ошибочным.

Все параллельные операторы могут быть помечены. Метки этих операторов неявно объявляются в начале раздела объявлений самого внутреннего объемлющего объявления объекта, архитектурного тела или оператора блока.

9.1 Оператор блока

Оператор блока определяет внутренний блок, представляющий часть проекта. Блоки могут быть иерархически вложенными для обеспечения декомпозиции проекта.

block_stalemeni :: =

blockjabcl:

block | ( guard-expression ) | block_hcadcr block_dcclarativc_pari begin block-Statcmcnt-parl end block | blockjabel |;

block-header :: " [ generic_clau.se | gencric_map_aspect; | | [ pori_clausc [ port_map_aspccl; 1 I

79

ГОСТ Р 50754—95

block_dcclaraiivc_pari :: “

{ block_dcclaralivc_itcm }

blocky la lenient..pari :: -

{ concurrcn(_statement }

Если после зарезервированного слова block стоит выражение защиты’(quard expression), то в начале области объявлений (block declarative part) итого блока неявно описывается сигнал с простым именем 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 всегда опрежлиеия в рамках облает действии конкретного блока и не распространяется неявно на объекты проекта, снизанные с компонентами, конкретизируемыми внутри этого блока. Сигнал GUARD может быть явно передан как фактический сигнал в конкретизацию компонента с целью распространения его значений на компоненты более низкого уровня.

Фактические параметры, стоящие в списке сопоставления портов конкретного блока, никогда не могут обозначай, формальные ■юрты этого блока.

9.2 Оператор процесса

Оператор процесса определяет независимый последовательный процесс, представляющий повеление некоторой части проекта.

process_slatctncni :: =

I processJabd: |

process ( (scnsitivityjisl ) I

proccss_dccla ra 1 i vc_par t

begin

process_statenient_part

end process [ processjabcl I ;

process_declarative_part :: =

{ process_dcclarativc_itcm }

proccss_dcclaralive_itcni :: ”

s u bprogra m_d eclaration

I subprogram_body

I typc_declaration

I subtype_declaration

I constanl_dcclaration

I variable-declaration

i filc_declaration

I alias.dcclaration

I aitributc.dcclaration

I attribute_spccification

I use_c!ause

proccss_statcmcni_part :: =

{ suquentiaLstatcmcnl }

Если после зарезервированного слова process стоит список чувствительности (sensitivity list), то подразумевается, что последним оператором в разделе операторов (process statement part) этого процесса является неявный оператор ожидания; этот оператор имеет форму

6-2—1406

ЯО

ГОСТ I’ 50754—93

wait on sensitivityJist;

в которой список чувствительности — это тот же самый список, стоящий после слона process. Такой оператор процесса нс может содержать явного оператора ожидания. Аналогично, если такой процесс является родителем процедуры, то эта процедура не может содержать оператора ожидания.

В списке чувствительности оператора процесса могут использоваться только статические имена сигналов (см. 6.1).

Если в конце оператора процесса стоит метка (process label), то она должна повторять метку этого оператора.

Выполнение оператора процесса состоит из повторяющегося выполнения последовательности операторов. После того, как последний оператор в этой последовательности будет выполнен, выполнение оператора процесса продолжается, начиная с первого оператора в этой последовательности.

Оператор процесса называется пассивным процессом, если ни сам процесс, ни любая процедура, для которой этот процесс является родительским, нс содержат оператор назначения сигнала. Такой процесс или любой параллельный оператор, эквивалентный такому процессу, может использоваться в разделе операторов объявления.объекта.

Примем а и и с — Из вышеуказанных правил следует. что пропел, имеющий явный слили: <|упётиит<л|.1юС1н, всего имеет в сече ровно одни (неявный) оператор ожидания, и этот оператор стриг в коште tiuC;ie.#>«v>ic.iMK>.*ni операторов и разделе операторов этого процесса. Таким образом, процесс со списком чупсгвнтсльноаи всего нЯхидшея л ожатшшн и конце синего раздела операторов', любое событие на сигналах, перечисленных и этом списке, влечет выноянсние такого пронесся е начала раздела операторов до копия, где процесс будет опять находиться в окщанип Указанный процесс ewnftinwiCM однажды иссь в иа'тале моделирования н прностпплялкппсгсв при выполнении неявного оператора ожидания.

9.2.1 Драйверы

Каждый оператор назначения в операторе процесса определяет множество драйверов для ряда скалярных сигналов. Для конкретного скалярного сигнала S в операторе процесса существует отдельный драйвер при условии, что в этом операторе процесса имеется по крайней мере один оператор назначения сигнала it самый длинный статический префикс сигнала, стоящего в левой части этого оператора назначения, обозначает S или составной сигнал, в котором S является под элементом. Считается, что каждый такой оператор назначения сигнала сопоставляется с этим драйвером. Выполнение оператора назначения влияет только на сопоставленный ему драйвер (или драйверы).

Драйвер скалярного сигнала представлен планируемой выходной формой сигнала. Планируемая выходная форма сипюла состоит из последовательности, состоящей из одной или более транзакций, каждая из которых состоит из двух частей: компонента значения и компонента времени. Для конкретной транзакции компонент значения представляет значение, которое драйвер сигнала принимает в некоторый момент времени, а компонент времени задает этот момент времени. Все транзакции упорядочены в отношении компонентов времени.

Драйвер всегда содержит по крайней мерс одну транзакцию. Начальное содержимое драйвера, сопоставленного конкретному сигналу, определяется неявным значением, сопоставляемым этому сигналу (см. 4.3.1.2).

Для любого драйвера существует ровно одна транзакция, компонент времени которой нс больше, чем текущее время моделирования. Компонент значения этой транзакции является текущим значением драйвера. Если в результате продвижения времени текущее время становится равным компоненту времени следующей транзакции, то первая транзакция выбрасывается из планируемой выходной формы сигнала, а следующая становится текущим значением драйвера.

9.3 Пара л дельный вызов процедур ы

Параллельный вызов процедуры (concurrent procedure call) представляет процесс, содержащий соответствующий последовательный вызов процедуры.

concurrcnt_proccdurc_call :: =

I label : 1 procedurc_call_siatcmcni

Для любого параллельного вызова процедуры существует эквивалентный оператор процесса. Этот оператор не имеет списка чувствительности и раздела объявлений, а раздел операторов этого процесса состоит из оператора вызова процедуры (procedure call statement), за которым следует оператор ожидания. Оператор вызова процедуры состоит из того же имени процедуры и из того же раздела фактических параметров, что и параллельный вызов процедуры. Каждый формальный параметр процедуры, активизируемой параллельным вызовом процедуры, должен быть класса сигнал или константа.

Если в фактической части любою элемента сопоставления в параллельном вызове процедуры есть первичное, обозначающее сигнал, и этот сигнал сопоставляется формальному параметру вида in или inout, то эквивалентный оператор процесса включает в себя конечный оператор ожидания с описанием чувствительности, содержащим самый длинный статическим префикс каждого имени сигнала, использу-

К]

ГОС Г I» 50754—95

смого как первичное в фактической части и сопоставляемого такому формальному параметру; в противном случае эквивалентный оператор процесса содержит конечный оператор ожидания, нс имеющий ни явного описания чувствительности, ни явного описания условия, ни явного описания времени блокировки.

Выполнение параллельного вызова процедуры эквивалентно выполнению эквивалентного оператор;» процесса.

Пример

- - параллельный вызов процедуры

CheckTiming (tPLH. tPHL, Clk. D, Q>;

- - эквивалентный процесс

process

begin

CheckTiming (tPLH, tPHL. Clk. D. Q);

wait on Clk, D, Q;

end process;

Примечание — Парсмлсл...... вызовы процедуры прели являют тимможшхтг. объявлять прэдсдурм. выражающие общсиспользусмые процессы, н .w.imw просто сихишш. такие процессы обычным вызовом процедуры я виде параллельного оператора. Оператор ожидания п копие раздела операторов экпипалситиого оператора процесса подпаляет вызывать процедуру без ее бесконечного зацикливания, лаже если зш процедура необязательно предназначена для ikikwioomum в качестве процесса (то есть пил не содержит оператора ожидания). Такая процедура может сохранять свое сущееiвешание с течением времени (и таким образом значения ее переменных жмут удерживать свое состояние с течением времени), сели самый внешний оператор этой процедуры является оператором цикла, и этот цикл ецдержит оператор ожидания.

Аналогична можно гарантировать, что такая процедура выполняется один раз в шшале моделирования, если ее последний оператор является оператором ожидания, не имеющим ни описания чувствительности, пи шикания условия, ни описания времени блокировки.

Значение неявного объявляемого сигнала GUARD не имеет влияния па вычисление параллельного вызова процедуры, если он нс используется явно в одной из фактических частей раздела, фактических параметров этого параллельного вылова процедуры.

9.4 Параллельный оператор утверждения

Параллельный оператор утверждения (concurrent assertion statement) представляет пассивный оператор процесса, содержащий заданный оператор утверждения.

concurrent_asscrtion_stalemcnt :: -

( label: ) assertion-statement

Для любого параллельного оператора утверждения существует эквивалентный оператор процесса. Этот эквивалентный процесс не имеет ни списка чувствительности, ни раздела объявлений. Раздел операторов этого процесса содержит оператор утверждения (assertion statement), за которым следует оператор ожидания. Оператор утверждения содержит то же условие, описание сообщения и описания серьезности, что и параллельный оператор утверждения.

Если в логическом выражении, определяющем условие утверждения, есть первичное, обозначающее сигнал, то эквивалентный оператор процесса включает в себя конечный оператор ожидания с описанием чувствительности, содержащим самый длинный статический префикс каждого имени сигнала, используемого как первичное в этом выражении; в противном случае эквивалентный оператор процесса содержит конечный оператор ожидания, не имеющий ни явного описания чувствительности, ни явного описания условия, ни явного описания времени блокировки.

Выполнение параллельного оператора утверждения эквивалентно выполнению эквивалентного оператора процесса.

Примем п и и с — Параллельные вызовы процедуры прсдс изваяют возможность объявлять процедуры, выражающие общсиспользусмые процессы, и довольно просто создавать такие процессы обычным выловом процедуры о виде параллельного оператора. Оператор ожидания в конце раздела операторов эквивалентного оператора процесса позволяет вызывать процедуру бе* се бесконечного зацикливания, лаже если эта процедура необязательно предназначена для использования ■ качестве процесса (то есть она не содержит оператора ожидания). Такая процедура может сохранять свое существование с течением времени (и таким образом значения ее переменных могут удерживать слое состояние с течением времени), сети самый внешний оператор этой процедуры является оператором цикла, и этот цикл содержит оператор ожидания. Аналогично можно гарантирован» что такая процедура выполняется один раз в начале моделирования, если се последний оператор является оператором ожидания, нс имеющим ни описания чувствительности, ни описания условия, ни описания времени блокировки.

Значение неявного объявленного сигнала GUARD ire имеет влияния на вычисление парил.тельного вызова процедуры, если он не используется явно я о;июй из фактических частей раздела, фактических параметров этого параллельного выгона процедуры.

9.5 П а р а л л с л ь и ы й оператор назначения сигнала

Параллельный оператор назначения сигнала (cancurrcnt_signal_assignment) представляет эквивалентный оператор процесса, который присваивает значения сигналам.

6-2'

82

ГОСТ Р 50754—95

concurrcnt_signal_assignment_statcnicnl :: =

[label: I condilional_signal_assignment

l [label: | selectcd_signal_as5ignnicnt

options :: = (guarded I (transport |

Существуют две формы параллельного оператора назначения сигнала. Отличительные характеристики каждой из этих форм описаны ниже.

Каждая форма может содержать одну или обе из двух опций guarded и transport. Опция guarded указывает на то, что оператор назначения сигнала выполняется, когда сигнал GUARD изменяет свое значение с FALSE на TRUE, или когда этот сигнал имеет значение TRUE и на одном из его входов происходит событие. (Таким сигналом может быть один из неявно объявленных сигналов GUARD, сопоставленных с операторами блока, имеющими выражением зашиты; или им может быть явно объявленный сигнал типа BOOLEAN, видимый в точке параллельного оператора назначения сигнала). Опция transport указывает на то, что оператор назначения сигнала имеет транспортную задержку.

Если целевой объект параллельного назначения сигнала является именем, которое обозначает защитный сигнал (см. 4.3.1.2). или он представлен в форме агрегата, в котором выражение в каждом элементе сопоставления является статическим именем сигнала, обозначающим защищенный сигнал, то такой целевой объект называется защищенным целевым объектом. Если целевой объект параллельного назначения сигнала является именем, которое обозначает сигнал, не являющийся защищенных» сигналом, или он представлен в виде агрегата, в котором выражение в каждом элементе сопоставления является статическим именем сигнала, не являющегося защитным сигналом, то такой целевой объект называется незащищенным целевым объектом. Считается ошибкой, если целевой объект параллельного назначения сигнала нс является ни тем и ни другим.

Для любого параллельного оператора назначения сигнала существует эквивалентный оператор процесса, имеющий тот же смысл. Оператор процесса, эквивалентный параллельному оператору назначения сигнала, целевой объект которого представлен именем сигнала, строится следующим образом:

I) Если в параллельном операторе назначения сигнала задана метка, то такая же метка используется в операторе процесса.

2) Если в параллельном операторе назначения сигнала задана опция transport, то зарезервированное слово transport используется в каждом операторе назначения сигнала в операторе процесса.

3) Раздел операторов эквивалентного оператора процесса содержит преобразование сигнала, которое имеет вид: либо последовательного оператора назначения сигнала, либо условного оператора или оператора выбора, содержащего последовательные операторы назначения сигнала — один для каждой из альтернативных форм сигнала. Это преобразование сигнала определяет, какая из альтернативных форм сигнала должна быть присвоена выходным сигналам. При этом раздел операторов может содержать последовательность операторов отключения, которые предназначены для присвоения пустых транзакций целевому объекту параллельного назначения сигнала при выполнении определенных условий.

Если в параллельном операторе назначения сигнала используется опция guarded, то такое параллельное назначение сигнала называется защищенным назначением.

Если параллельный оператор назначения сигнала представляет собой защищенное назначение, и целевой объект параллельного назначения сигнала является защищенным целевым объектом, то раздел операторов эквивалентного оператора процесса имеет вид:

if GUARD then

преобразование сигнала

else операторы отключения end if;

В противном случае, если параллельный оператор назначения сигнала является защищенным назначением, но целевой объект параллельного назначения сигнала нс является защищенным целевым объектом, то раздел операторов эквивалентного оператора процесса имеет вид:

if GUARD then

преобразование сигнала

end if;

Наконец, если параллельный оператор назначения сигнала нс является защищенным назначением и целевой объект параллельного назначения сигнала не является защищенным целевым объектом, то раздел операторов эквивалентного оператора процесса имеет вид:

преобразование сиги ала

83

ГОСТ Р 50754-95

Считается ошибкой, если параллельное назначение сигнала является защищенным назначением, а целевой объект параллельного назначения сигнала является защищенным целевым объектом.

4) Если параллельный оператор назначения сигнала является защищенным назначением или если в каком-нибудь выражении (отличном от временного выражения) внутри параллельного оператора назначения сигнала имеется первичное, обозначающее сигнал, то оператор процесса содержит в качестве последнего оператора оператор ожидания с явным описанием чувствительности. 'Это описание чувствительности содержит самый длинный статический префикс каждого имени сигнала (если он есть), используемого как первичное в одном из вышеупомянутых выражений. Более того, если параллельный оператор назначения сигнала является защищенным назначением, то описание чувствительности также содержит простое имя GUARD. (Сигналы, идентифицированные этими именами, называются входами оператора назначения сигнала). В противном случае оператор процесса содержит в качестве последнего оператор ожидания без явного описания чувствительности, явного описания условия или явного описания времени блокировки.

Если в эквивалентном операторе процесса имеется последовательность операторов отключения, то эта последовательность содержит одно последовательное назначение сигнала для каждого скалярного подэлемента целевого объекта параллельного оператора назначения сигнала.

Для каждого такого последовательного назначения сигнала целевой объект этого назначения является соответствующим скалярным подэлсмснтом целевого объекта параллельного назначения сигнала, а форма сигнала этого назначения является пустым элементом <]юрмы сигнала, выражение времени которого заданно принимает спецификацию отключения (см. 5.3).

Если целевой объект параллельного оператора назначения сигнала представлен в форме агрегата, то имеет место то же самое преобразование. Такой целевой объект может содержать только локально статические имена сигналов, и никакие два имени сигналов нс могут идентифицировать один и тот же объект или подэлсмснт.

Считается ошибкой, если пустой элемент формы сигнала стоит в форме сигнала параллельного оператора назначения сигнала.

Выполнение параллельного оператора назначения сигнала эквивалентно выполнению эквивалентного оператора процесса.

Примечание— Параллельный оператор iia»ia*Ki«iia сигилла, формы сигнала и целевой объект которого содержат только статические выражения, эквивалентен оператору процесса, конечный оператор ожидания которого нс имеет явного описания чуаСтвигелыюстн. и поэтому он будет выполнен один рал целиком ........аде моделирования, а »тсм приостановлен постоянно.

9.5.1 Условное назначение сигнала

Условное назначение сигнала (conditional signal assignment) представляет оператор процесса, в котором преобразование сигнала задано условным оператором.

conditional_signal_assignmcnt :: =

target <= options condititonal_wavcforms;

conditional_waveforms :: -

{ waveform when condition else ) waveform

Для конкретного условного назначения сигнала существует соответствующий ему эквивалентный оператор процесса, как определено для любого параллельного оператора назначения сигнала. Если условное назначение сигнала имеет форму:

targen <■ options waveform I when condition 1 else

waveform? when condition? else

waveformN—I when conditionN—I else

waveformN ;

то преобразование сигнала в соответствующем операторе процесса имеет вид

if condition! then

target <■ | transport | waveform!; elsif condition then

target о | transport ) waveform?;

84

ГОСТ Р 50754—95

target <= ( transport 1 waveformN—1;

else

target <= [ transport | waveformN;

end if;

Если условные формы сигнала (conditional waveforms) представлены единственной формой сигнала, то преобразование сигнала в соответствующем операторе процесса имеет вид

target <= ( transport ] waveform;

Характеристики форм сигнала и условий в условном операторе назначения должны быть такими, чтобы условный оператор в эквивалентном операторе процесса являлся допустимым оператором.

9.5.2 Выборочное назначение сигнала

Выборочное назначение сигнала (selected signal assignment) представляет оператор процесса, в котором преобразование сигнала задано оператором выбора.

sclcctcd_signal_assignmcnt :: -

with expression select

target <- options sclccied_waveforms ;

selected_waveforms :: =

{ waveform when choices , } waveform when choices

Для конкретного выборочного назначения сигнала существует соответствующий эквивалентный оператор процесса, как определено для любого параллельного оператора назначения сигнала. Если выборочное назначение сигнала имеет форму

with expression select

tiirgcl<= oplions waveform 1 when choicejistl, waveform? when choiccjist?,

waveformn—I when choicejistn—I, waveformn when choicejistn;

то преобразование сигнала в соответствующем операторе процесса имеет вид

case expression is

when choiccjistl =>

target <- [transport) waveform 1;

when choice J is t2 “>

target <- [transport | waveform?;

when choiceJistN—1 «>

target <= (transport | waveformn—I;

when choiccJistN =>

target <= (transport) waveformn; end case;

Характеристики выражения выбора, форм сигнала и выборов в операторе выборочного назначения должны быть такими, чтобы оператор выбора в эквивалентном операторе процесса являлся допущенным оператором.

9.6 Оператор конкретизации компонента

Оператор конкретизации компонента (component instantiation statement) определяет подкомпонент объекта проекта, в котором он используется, и сопоставляет сигналы с портами этого подкомпонента. 85

ГОСТ Р 50754—95

Этот подкомпонент является одним экземпляром класса компонентов, определяемого соответствующим объявлением компонента.

componcnt_instantiation_siatcmcnt :: =

instantiation _\л be I: с от pot ten (_па m с

|gcncric_map_aspcct I |port_map_aspcct 1;

Имя компонента (component name) должно представлять имя компонента, описанное в объявлении компонента.

Аспект отображения параметров настройки (generic map aspect), если задан, сопоставляет каждому локальному параметру настройки (или его подэлсмснту) в соответствующем объявлении компонента отдельный фактический параметр настройки.

Для каждого локального параметра настройки (или его подэлемента) должно быть задано точно одно сопоставление. Аналогично, аспект отображения порток (port map aspect), если задан, сопоставляет каждому локальному порту (или подэлсмснту) в соответствующем объявлении компонента отдельный фактический параметр. Для каждого локального порта (или его подэлемента) должно быть задано точно одно сопоставление. Аспекты отображения параметров настройки и аспекты отображения портов описаны в 5.2.1.2.

П р и м с ч а нис — Для сияаыпаниа конкретного экземпляра компонент с обмолом проекта и оиих-т.-шлення локальных параметров настройки и локальных иоргов с формальными параметрами настройки и формальными портами спою объекта может быть испольюпана спецификация конфигурации.

Оператор конкретизации компонента может быи> использован дли прежлаилсиня структурной организации проекта. Используя оСтъяклспия компонентов, сигнала" и операторы конкретизации компонентов, конкретный Тииутренний или внешний) блок может быть описан в терминах нодкомнонепиж. азаимосаямииых при помаши анналов.

Конкретизации компонента т^еснечиваст средство структурирования логической лскомномщнь проекта. Точные структур...... или жжсдсичсскис характеристики конкретного подкомпонента мотут быть описаны позже. Конкретизация компонента также обеатечнытет механизм многократного жэтодтдщкшнм существующих проектов, паходшихся в библиотеке проекта.

Спецификация конфигурации может связывать конкретный экземпляр компонента с существующим объектом проекта, даже сели параметры настройки и порты в объявлении объекта точно не совпадают с параметрами настройки и портами компонента.

9.6.1 Конкретизация комПЫи'ЮПа

Оператор конкретизации компонента и соответствующая спецификация конфигурации, взятые вместе, предполагают, что иерархия блоков внутри объекта проекта, содержащего конкретизацию компонента, будет расширена уникальной копией блока, определенною другим объектом проекта. Аспект отображения параметров настройки и аспект отображения портов в операторе конкретизации компонента и в связывающем указании спецификации конфигурации идентифицируют соединения, которые должны быть сделаны с целью выполнения расширения.

Оператор конкретизации компонента эквивалентен парс вложенных операторов блока, сцепляющих иерархию блоков в модуле проекта, содержащем этот оператор конкретизации, с уникальной копией иерархии блоков, содержащейся в другом объекте проекта (то есть подкомпоненте). Внешний блок в этой парс представляет объявление компонента; внутренний блок представляет объект проекта, с которым этот компонент связывается. Каждый из этих блоков определяется оператором блока.

Заголовок оператора блока, соответствующего объявлению компонента, состоит из описания параметров настройки и описания портов (сели они есть), заданных в этом объявлении компонента, за которыми следует аспект отображения параметров настройки и аспект отображения портов (если они есть), заданных в соответствующем операторе конкретизации компонента. Смысл любого идентификатора, стоящего в заголовке этого оператора блока, тот же, который придается соответствующему вхождению этого идентификатора в описание параметров настройки, описание портов, аспект отображения параметров настройки или аспект отображения портов соответственно.

Раздел операторов оператора блока, соответствующего объявлению компонента, состоит из вложенного оператора блока, соответствующего объекту проекта.

Заголовок оператора блока, соответствующего объекту проекта, состоит из описаний параметров настройки и портов (если они сеть), заданных в объявлении объекта, определяющем интерфейс этого объекта проекта, за которым следуют аспекты отображения параметров настройки и портов (если они есть), используемых в связывающем указании, которое связывает экземпляр компонента с этим объектом. Раздел объявлений оператора блока, соответствующего объекту проекта, состоит из объявлений, стоящих в разделе объявлений объекта, за которым следуют объявления, стоящие в соответствующем архитектурном теле. Раздел операторов оператора блока, соответствующего объекту проекта, состоит из параллельных операторов, стоящих в разделе операторов объекта, за которыми следуют параллельные операторы, стоящие в разделе операторов соответствующего архитектурного тела.

86

ГОСТ Р 50754-95

Смысл любого идентификатора, стоящего в любом месте этого оператора блока, тот же, который придается соответствующему вхождению этого идентификатор.! в объявление объекта или архитектурное тело соответственно.

Пример — Пусть имеются Следующие описания:

- - объявление компонента

component COMP port (А, В: inout BIT);

- - спецификация конфигурации

for С: COMP use

entity X(Y)

port map (PI -> A2. P2 -> B);

- - оператор конкретизации компонента

C: COMP port map (A -> SI, В => S2>;

- - объявление объекта и архитектуры

entity X is

port (Pl, P2: inout BIT);

constant Delay: Time: - Ims;

begin

Cheek Timing (Pl, P2, 2 * Delay);

end X;

architecture Y of X is

signal P3 : Bit;

begin

P3 <- Pl 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 (Pl -> A, P2 -> В); - - связывание

- - локальных портов с формальными

constant Delay : Time : = 1ms - - объявление из «объекта signal РЗ : Bit ; - - объявление из архитектуры

begin

Check Timing (Pl. P2, 2 * Delay); - - оператор из объекта

РЗ <- Pl after Delay; - - операторы из архитектуры

Р2 о РЗ after Delay;

В: block - - внутренняя иерархия блоков

begin end block В;

end block X ;

end block C ;

Расширения иерархии блоков, предполагаемые операторами конкретизации компонентов, связанных с объектами проекта, реализуются в процессе прсдвы пол нения иерархии проекта (см. раздел 12), 87

ГОСТ Р 5075-1—95

9.7 Оператор генерации

Оператор генерации (generate statement) обеспечивает механизм итеративного или уставного прелвы-полнения части описания.

generalc_slatcmcnt :: -

genmi/ejabcl :

gcncralion_schcmc generate

{concurrcnt_statcment}

end generate IgcTuva/cJabel | ;

gcnerate_scheme :: -

for genera/e_parametcr_$pccification

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 1 to 3 generate

L3: for J in I to 3 generate

L4: if I+J >4 generate

15: CELL port map (A(l—1), B(J—I), A(l), 8(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(I), BCD);

end generate;

end generate;

end generate;

end block B;

to ОБЛАСТЬ ДЕЙСТВИЯ И ВИДИМОСТЬ

В данном разделе описаны правила, определяющие области действия и правила, определяющие видимость идентификаторов в различных точках текста описания. В формулировке этих правил используется понятие области объявлений.

10.1 Область объяв лени й

Область объявления — это часть теста описания. Отдельная область объявления формируется (текстуально) следующими конструкциями:

I) Объявление объекта, взятое вместе с соответствующим архитектурным телом.

2) Объявление конфигурации.

3) Объявление подпрограммы, взятое вместе с соответствующим телом подпрограммы.

4) Объявление пакета, взятое вместе с соответствующим телом (если оно есть).

5) Объявление структурного типа.

6) Объявление компонента.

7) Оператор блока.

8) Оператор процесса.

9) Оператор цикла.

ня

ГОСТ Р 50754—95

10) Конфигурация блока.

11) Конфигурация компонента.

В каждом из вышеуказанных случаев считается, что область объявлений сопоставляется е соответствующим объявлением или оператором. Считается что объявление стоит непосредственно внутри области объявлений, если эта область является самой внутренней областью, объемлющей это объявление, нс учитывая при этом область объявлений (если она есть), сопоставленную с самим объявлением.

Некоторые области объявлений состоят из раздельных частей. Каждая область объявлений, тем не менее, рассматривается как (логически? непрерывная часть текста описания. Следовательно, если какое-либо правило определяет часть текста как текст, распространяющийся от некоторой специфической точки области объявлений до конца этой области, то эта часть является соответствующим подмножеством этой области объявлений (и, следовательно, она нс содержит промежуточных объявлений между объявлением интерфейса и соответствующим объявлением тела).

10.2 Область действия о б ъ я в л е н и й

Для каждой формы объявления правилами языка определяется некоторая часть текста описания, называемая областью действия объявления. Областью действия объявления также называется область действия любого понятия, описанною этим объявлением. Более того, если объявление сопоставляет некоторое обозначение (либо идентификатор, либо символьный литерал, либо символ оператора) с описываемым понятием, то эта часть текста также называется областью действия этого обозначения. Внутри области действия понятия и только там существуют места, в которых допускается использование сопоставленного обозначения в целях ссылки на описанное понятие. Такие места определяются правилами видимости и совмещения.

Область действия объявления, стоящего непосредственно внутри области объявлений, распространяется or начала этого объявления до конца области объявлений: эта часть области действия объявлений называется непосредственной областью действия. Более того, для каждого из объявлений, перечисленных ниже, область действия этого объявления распространяется за пределы непосредственной области действия.

1} Объявления, стоящие непосредственно внутри объявления пакета.

2) Объявления элемента в описании структурною типа.

3) Объявление формального параметра в объявлении подпрограммы.

4) Объявление локального параметра настройки в объявлении компонента.

5) Объявление локального порта в объявлении компонента.

6) Объявление формального параметра настройки в объявлении объекта.

7) Объявление формального порта в объявлении объекта.

При отсутствии отдельного объявления подпрограммы спецификация подпрограммы, заданная в теле подпрограммы, ведет себя как это объявление, и правило (3) в этом случае также применимо. В каждом из перечисленных случаев конкретное объявление стоит непосредственно внутри другою объявляющею объявления, и область действий первого распространяется до конца области действия второго.

В дополнение к вышеописанным правилам, область действия любого объявления, содержащего конец раздела объявлений конкретного блока (либо внешнего блока, определяемого объектом проекта, либо внутреннею блока, определяемого оператором блока) распространяется на объявление конфигурации, конфигурирующее этот блок.

Если конфигурация компонента используется как элемент объявлений непосредственно внутри конфигурации блока, конфигурирующей конкретный блок, и область действия конкретною объявления содержит конец раздела объявлений этого блока, то область действия этою объявления распространяется от начала до конца области объявлений, сопоставленной с этой конфигурацией компонента. Аналогичные правила применяются к конфигурации блока, используемой как элемент объявления непосредственно внутри другой конфигурации блока, при условии что первая конфигурирует внутренний блок. Более того, область действия описания использования распространяется аналогичным образом. Наконец, область действия библиотечного модуля, содержащегося в библиотеке проекта, распространяется вместе с областью действия логического имени библиотеки, соответствующею этой библиотеке проекта.

Примечание— Пыинчипкаипые правила в огиынении облает действия нримсняктя ко веем формам объявления. В чаетпости. они причсияются также к неявным объявлениям.

10.3 Видимость

Смысл появления идентификатора в конкретном месте текста определяется правилами видимости, а в случае совмещенных объявлений — правилами совмещения. Под термином идентификатор в данной главе понимается любой идентификатор, отличный от зарезервированного слова. Под термином “место" в данной главе понимаются тс места, в которых может стоять лексический элемент (такой, как идентификатор). Под совмещенными объявлениями и данной главе понимают совмещенные объявления подпрограмм и литералов перечисления.

89

ГОСТ I' 50754—95

Для каждою идентификатора и в каждом месте текста правилами видимости устанавливается множество объявлений (с этим идентификатором), которое определяет возможные смыслы появления этого идентификатора. Объявление считается видимым н конкретном месте текста, если согласно правилам видимости это объявление определяет возможный смысл этого появления. При установлении смысла такого объявления возможны два случая:

1 Правилами видимости установлен по крайней мере одна возможный смысл. В этом случае правила видимости являются достаточными для установления объявления, определяющего смысл появления идентификатора, или при отсутствии такою объявления — для установления того факта, что это появление недопустимо в этом месте.

2 Правилами видимости установлено более одного возможного смысла. В этом случае появление идентификатора допустимо в этом месте, если и только если точно одно видимое объявление приемлемо в этом контексте для правил совмещения.

Объявление видимо только в пределах определенной части действия; эта часть начинается сразу за этим объявлением, за исключением объявления модуля проекта, когда эта часть начинается непосредственно после зарезервированного слова is, стоящего после идентификатора этого модуля.

Видимость может быть либо косвенной, либо непосредственной. Объявление видимо косвенно в местах, определяемых следующим правилами:

I) Для первичного модуля, содержащегося в библиотеке: на месте суффикса в составном имени, префикс которою обозначает эту библиотеку.

2> Для архитектурною тела, сопоставленного с конкретным объявлением обтюкта: на месте спецификации блока в конфигурации блока для внешнею блока, интерфейс которого определяется этим объявлением объекта.

3) Для объявления, заданного н объявлении пакета: на месте суффикса в составном имени, префикс которого обозначает этот пакет.

4) Для объявления элемента, стоящего внутри объявления структурного типа: на месте суффикса в составном имени, префикс которого подходит для этого типа; также на месте выбора (перед составным разделителем =>) в именованном сопоставлении элемента, стоящем в агрегате этого типа.

5) Для предопределенного атрибута, который применяется к конкретному диапазону определения: на месте обозначения атрибута (после разделителя ’ ) в имени атрибута, префикс которого принадлежит к этому диапазону определения.

6) Для определяемого пользователем атрибута: на месте обозначения атрибута (пекле разделителя ‘ ) в имени атрибута, префикс которого обозначает понятие, с которым этот атрибут сопоставлен.

7> Для объявления формального параметра в конкретном объявлении подпрограммы: на месте формального указателя (перед составным разделителем =>) в списке именованного сопоставления параметров в соответствующем вызове подпрограммы.

8) Для объявления локальных параметров настройки в конкретном объявлении компонента: на месте формального указателя (перед составным разделителем =>) в списке именованного сопоставления параметров настройки в соответствующем операторе конкретизации компонента; аналогично, на месте фактического указателя (после составного разделителя ->) в списке сопоставления параметров настройки в соответствующем связывающем указании.

9) Для объявления локального порта в конкретном объявлении компонента: на месте формального указателя (перед составным разделителем =» в списке именованною сопоставления портов в соответствующем операторе конкретизации компонента; аналогично, на месте фактического указателя (после составного разделителя ■» в списке сопоставления портов в соответствующем связывающем указании.

10) Для объявления формального параметра настройки в конкретном объявлении объекта: на месте формального указателя (перед составным разделителем =>) в списке именованного сопоставления параметров настройки в соответствующем связывающем указании.

II) Для объявления <|хтрмалиного порта в конкретном объявлении объекта: на месте формального указателя (перед составным разделителем -» в списке именованного сопоставления портов в соответствующем связывающем указании.

Наконец, внутри области объявлений, сопоставленной с конструкцией, отличной от объявления структурного типа, любое объявление, стоящее непосредственно в этой области, видимо косвенно на месте суффикса в расширенном имени, префикс которого обозначает эту конструкцию.

Объявление считается непосредственно видимым внутри определенной части своей непосредственной области действия; эта часть распространяется до конца этой непосредственной области действия, исключая тс места, где это объявление скрыто, что объясняется ниже. Объявление, стоящее непосредственно внутри видимой части пакета, можно сделать непосредственно видимым при помощи описания использования в соответствии с правилами, описанными в 10.4.

Объявление считается скрытым в рамках (всей или части) внутренней области объявлений, если эта внутренняя область объявлений содержит омограф этого объявления; внешнее объявление тогда является скрытым в рамках непосредственной области действия этого внутреннею омограф. Каждое из двух

90

ГОСТ Р 50754—95

объявлений считается омографом другого, если оба они имеют один и тот же идентификатор и совмещение разрешено самое большее для одного из двух. Если совмещение разрешено для обоих объявлений, то каждое из двух является омографом другого, если они имеют один и тот же идентификатор, символ оператора или символьный литерал, а также профиль параметров и типа результата.

В рамках спецификации подпрограммы каждое объявление, имеющее тот же идентификатор, что и эта подпрограмма, скрыто. В таких местах объявление не может быть видимо ни косвенно, ни некое родствен но.

Два объявления, стоящие непосредственно в одной и той же области объявлений, не должны быть омографами, если только точно одно из них нс является неявным объявлением предопределенной операции. В таких случаях предопределенная операция всегда скрыта другим омографом. В таких местах неявное объявление скрыто внутри всей области действия другого объявления: неявное объявление невидимо ни косвенно, ни непосредственно.

Всякий раз, когда объявление с определенным идентификатором видимо из конкретной точки, этот идентификатор и описанное понятие (если оно есть) также считаются видимыми из этой точки. Непосредственная видимость и косвенная видимость также определены для символьных литералов и символов оператора. Оператор видим непосредственно, если и только если непосредственно видимо соответствующее объявление этого оператора.

Пример —

LI: block signal А. В: Bit; begin L2: block

signal В: Bit;

begin

A <- В after 5ns;

В <- LI.В after 10ns; end block;

В <= A after 15 ns; end block;

- • внутренний омограф В

- - означает LI.Л <- L2.B - - означает L2.B <- 1.1.В

- - означает LLB <= LI.A

10.4 Онис а ния и с и о л ь з о в а и и я

Описание использования (use clause) делает объявления, которые являются видимыми косвенно, видимыми непосредственно.

usc_clause :: -

use 5clected_namc {, selcctcd_name}

Каждое составное имя (selected name) в описании использования идентифицирует одно и более объявлений, которые станут потенциально непосредственно видимыми. Если суффикс составного имени является простым именем или символом оператора, то такое составное имя идентифицирует только объявление(я) этого простого имени или символа оператора, содержащегося в пакете или библиотеке, обозначаемой префиксом этого составного имени. Если суффиксом является зарезервированное слово all, то это составное имя идентифицирует все объявления, содержащиеся в пакете или библиотеке, обозначаемой префиксом этого составного имени.

Для каждого описания использования существует определенная область текста, называемая областью (ТсИствия этого описания. Эта область начинается непосредственно за описанием использования. Если описание использования является элементом некоторой области объявлений, то область действия этого описания распространяется до конца этой области объявлений. Если описание использования стоит внутри описания контекста модуля проекта, то область действия этого описания использования распространяется до конца области объявлений, сопоставленной с этим модулем. Область действия описания использования может дополнительно быть распространена на объявление конфигурации (см. 10.2).

Для того, чтобы установить, какие объявления становятся непосредственно видимыми в конкретном месте при помощи описания использования, рассмотрим множество объявлений, идентифицированных всеми описаниями использования, области действия которых включают это место. Каждое объявление в этом множестве является потенциально видимым объявлением. Потенциально видимое объявление фактически становится непосредственно видимым, за исключением двух следующих случаев:

I) Потенциально видимое объявление нс становится непосредственно видимым, если рассматриваемое место находится внутри непосредственной области действий омографа этого объявления.

91

ГОСТ Р 50754—95

2) Потенциально видимые объявления, имеющие одно и то же обозначение, нс становятся непосредственно видимыми, если каждое из них нс является либо литералом перечисления, либо объявлсннем подпрограммы.

Примечание — Вышеуказанные правила гарантируют, что объявление. которое стлиопитея Hetiocpcacnieiiiio видимым при помощи описания иС1Юльзо1и1ния. нс может скрыл,-iTi. иежкрс/ктпенпо видимое объявление, килнмкп. которого установлена другим способом.

Если понятие X. объявленное в пакете Р, становится потршнылыш пилимым внутри пакета Q (то есть при помощи описания использования "им: Р-Х;". вставленного в описание контекста пакета Q). а описание контекста модуля проекта R содержит описание использования "use Qjll:". то этим не подразумевается, что понятие X будет потенцих-тыю видимо п модуле R. Только те понятии, которые фактически объявлены в пакете Q, будут потенциально видимыми в модуле R (при отсутствии какого-либо другого описания использования).

10.5 Контекст разрешения совмещения

Совмещение определено для подпрограмм и литералов перечисления.

Для совмещенных понятий разрешение совмещения устанавливает фактический смысл, который имеет появление литерала перечисления всякий раз, когда правилами видимости установлено, что в месте появления приемлем более чем один смысл; разрешение совмещения также устанавливает фактический смысл появления оператора.

В таком месте рассматриваются все видимые объявления. Появление допустимо только в том случае, если существует точно одна интерпретация каждого составляющею самого внутреннего полного контекста; полным контекстом является либо объявление, либо спецификация, либо оператор.

При рассмотрении возможных интерпретаций полного контекста используются только синтаксические правила, правила области действия и видимости и правила, описанные ниже:

1) Любое правило, требующее, чтобы имя или выражение имело определенный тип, или имело тот же тип, что и другое имя или выражение.

2) Любое правило, требующее, чтобы тип имени или выражения относили к определенному классу типов; аналогично, любое правило, требующее, чтобы определенный тип был дискретным, целым, действительным, физическим, универсальным, символьным или логическим.

3) Любое правило, требующее, чтобы префикс соответствовал определенному типу.

4) Правила, требующие, чтобы тип агрегата устанавливался исключительно из объемлющего полного контекста. Аналогично, правила, требующие, чтобы тип префикса атрибута, тип выражения оператора выбора или тип операнда преобразования типа устанавливались независимо от контекста.

5) Правила для разрешения вызовов совмещенных подпрограмм, для неявных преобразований универсальных выражений; для интерпретации дискретных диапазонов с границами, имеющими универсальный тип; для интерпретации расширенного имени, префикс которого обозначает подпрограмму.

II МОДУЛИ ПРОЕКТА И ИХ АНАЛИЗ

В настоящем разделе дано обсуждение общей организации описаний, а также их анализа и последующего определения их в библиотеке проекта.

11.1 Модули проекта

Некоторые конструкции могут быть независимо проанализированы и помещены в библиотеку проекта; такие конструкции называются модулями проекта (design units). Один или более модулей проекта в свою очередь составляют файл проекта (design file).

dcsign_filc :: = dcsign_unit { dcsign_unit }

dcsign_unii :: = contcx_clause library_unit

library_unit :: -

primary_unit

I sccondary_uni(

primary_unit :: -

entity_dcelaration

I configuraiion_declara(ion

I packagc_declaration

secondary_unit :: ”

architecturc_body

I packagc_body

7-1—1406

92

ГОСТ Р 50754—95

Модули проекта в фале проекта анализируются в текстуальном порядке их появления в этом файле. Результатом анализа является определение соответствующего библиотечного модуля в библиотеке проекта. Библиотечный модуль (library unit) — это либо первичный, либо вторичный модуль. Вторичный модуль — это отдельно анализируемое тело первичного модуля, полученного в результате предыдущего анализа.

Имя первичного модуля задается первым идентификатором, стоящим после начального зарезервированного слова в этом модуле. Из вторичных модулей имеются только архитектурные тела; имя архитектурного тела задастся идентификатором, стоящим после зарезервированного слова architecture. Каждый первичный модуль в конкретной библиотеке должен иметь простое имя. уникальное в рамках библиотеки, а также каждое архитектурное тело, ассоциированное с конкретным объявлением объекта проекта, должно иметь простое имя — уникальное внутри множества имен архитектурных тел, ассоциированных с этим объявлением объекта.

Объявления объектов проекта, архитектурные тела и объявления конфигурации описаны и разделе I. Объявления пакетов и тела пакетов описаны в разделе 2.

11.2 Библиотеки проекта

Библиотека проекта (design library) представляет собой зависящее от реализации средство хранения модулей проекта, которые ранее подвергались анализу. Конкретная реализация может позволять любое число библиотек проекта.

library_clausc :: - library logical_namejisl ;

logical_namcjist :: - logical_name { . logical_namc}

logical_name :: - identifier

Описание библиотеки (library clause) задаст логические имена для библиотек проекта в главном окружении. Описание библиотеки появляется как часть описания контекста, стоящего в начале модуля проекта. Существует определенная область текста, называемая областью видимости (scope) описания библиотеки; эта область начинается непосредственно после описания библиотеки и простирается до конца области объявлений, ассоциированной с модулем проекта, в котором стоит это описание. Внутри этой области, за исключением тех мест, где оно скрыто, каждое логическое имя, заданное в описании библиотеки, обозначает библиотеку проекта в главном окружении.

Для конкретного логического имени библиотеки фактическое имя соответствующих библиотек проекта в главном окружении может быть (или нет) одинаковым. Конкретная реализация должна обеспечивать некоторый механизм для ассоциирования логического имени библиотеки с конкретной библиотекой. Такой механизм языком не определяется. Существуют два класса библиотек проекта: рабочие библиотеки и библиотеки ресурсов. Рабочая библиотека (working library) — это библиотека, куда помещается библиотечный модуль, полученный в результате анализа модуля проекта. Библиотека ресурсов (resource library) — эго библиотека, содержащая библиотечные модули, ссылка на которые имеется в анализируемом модуле проекта. В процессе анализа конкретного модуля проекта могут участвовать только одна рабочая библиотека и любое число библиотек ресурсов (включая саму рабочую библиотеку).

Подразумевается, что каждый модуль проекта содержит неявно следующие разделы описания контекста:

library STD. WORK: use STD.STANDARD.all;

Логическое имя библиотеки STD обозначает библиотеку проекта, в которой содержится пакет STANDARD и пакет ТЕХТ10; оба они являются единственными стандартными пакетами, определяемыми языком (см. раздел 14). (Описание использования use делает все объявления, содержащиеся внутри пакета STANDARD, непосредственно видимыми в соответствующем модуле проекта; см. 10.4). Логическое имя библиотеки WORK обозначает текущую рабочую библиотеку, используемую в процессе анализа.

Вторичный модуль, соответствующий конкретному первичному модулю, может быть помещен только в ту библиотеку проекта, в которой расположен этот первичный модуль.

Примем а н и е — Проект жилка предполагает, что содержимое библиотек ресурсов, перечисленных и описаниях библиотеки, стоящих а описании контекста модуля проекта, будет остана 1 к я неизменным п процессе анализа этого модуля Ста исключением того случая, когда библиотека ресурса одновременно является и рабочей библиоiCKOii).

Рекомендуется, чтобы библиотека STD содержала только те библиотечные модули, которые сапостствуют модулям проекта, описанным как часть руководства по языку. Эта совокупное и. модулей может меняться со временем ио мерс развития языка; однако портаб>и1ытость проектов будет улучшена, если дли любой конкретной версии языка библиотека STD содержит известный набор библиотечных модулей.

11.3 Описание контекста

Описание контекста устанавливает начальную среду, в которой анализируется модуль проекта.

contcxt_clausc :: = { contextjtcm }

93

ГОСТ I* 50754—95

conicxtjicm :: =

library _clausc

I usc_clausc

Описание библиотеки задаст логические имена библиотек, ссылка на которые может иметь место в любом модуле проекта. Описания библиотек даны в 11.2. Описание использования (use clause) делает определенные объявления непосредственно видимыми внутри модуля проекта. Описания использования даны в 10.4.

Зависимости между модулями проекта устанавливаются описаниями использования, то есть модуль проекта, который явно или неявно ссылается на другие библиотечные модули в описании использования, зависит (depends) от этих библиотечных модулей. Эти зависимости оказывают влияние на допустимый порядок анализа модулей проекта (см. 11.4).

II р к м с ч в ине — Правила использования описаний 1ктюль.и>иаиия Тихоны. что независимо от тосо, используется имя библиотечного модуля олии или более раз в применяемых описаниях испольпоизния или даже и одном конкретном описании использования, эффект будет один и тог же.

11.4 Порядок анализ а

Правила, устанавливающие порядок, в котором модули проекта могут анализироваться, вытекают непосредственно из правил видимости, а именно:

1) Первичный модуль, на имя которого имеется ссылка внутри конкретного модуля проекта, должен анализироваться раньше этого модуля.

2) Первичный модуль должен анализироваться ранее любого соответствующего вторичного модуля.

Порядок анализа проекта не должен противоречить порядку, определенному вышеуказанными правилами.

Если в процессе анализа модуля проекта обнаруживается какая-либо ошибка, то попытка анализа отвергается, при этом нс оказывается никакого эффекта на текущую рабочую библиотеку.

Конкретный библиотечный модуль зависит от изменения любого библиотечного модуля, имя которого используется внутри этого библиотечного модуля. Вторичный модуль потенциально зависит от изменения соответствующего ему первичного модуля. Если библиотечный модуль изменяется (например, в результате повторного анализа соответствующего модуля проекта), то все библиотечные модули, которые потенциально зависят от этого изменения, становятся устарелыми и должны быть повторно анализированы, прежде чем их можно будет использовать вновь.

12 ПРЕДВЫПОЛНЕНИС И ВЫПОЛНЕНИЕ

Процесс, при помощи которого объявление достигает своего эффекта, называется предвыполнением этого объявления. После своего предвыполнения объявление считается прсдвыполненным. До окончания своего предвыполнения (а также и до предвыполнения) объявление еще нс считается прсдвыполненным.

Прсдвыполнение также определено для иерархий проектов, разделов объявлений, разделов операторов (содержащих параллельные операторы) и параллельных операторов. Предвыполненис таких конструкций необходимо, чтобы в конечном счете предвыполнить объявления, описанные внутри этих конструкций.

Для того, чтобы выполнить модель, иерархия проекта, определяющая эту модель, должна быть предвыполнена. Затем имеет место инициализация цепей. Наконец, происходит моделирование. Моделирование состоит из повторяющегося выполнения цикла моделирования, в течение которого осуществляется выполнение процессов и модификация цепей.

12.1 Прсдвыполнение иерархии проекта

Предвыполненис иерархии проекта создает множество процессов, взаимосвязанных при помощи цепей; эго множество процессов и цепей может быть выполнено для моделирования поведения этого проекта.

Иерархия проекта может быть определена объектом проекта. Прсдвыполнение иерархии проекта, определенной этим способом, состоит из предвыполнения оператора блока, эквивалентного внешнему блоку, определяемому этим объектом проекта. Эквивалентный оператор блока определен в 9.6.1. Прсдвыполнение оператора блока определено в 12.4.1.

Иерархия проекта может быть также определена конфигурацией. Прсдвыполнение конфигурации состоит из предвыполнения оператора блока, эквивалентного внешнему блоку, определяемому объекте^ проекта, конфигурируемым этой конфигурацией.

Прсдвыполнение оператора блока влечет в первую очередь предвыполненис каждого еще нспрслвы-полненного пакета, используемого в этом блоке. (Пакет используется внутри конкретной конфигурации, если имя этого пакета, либо стоящее отдельно либо являющееся префиксом в расширенном имени, используется внутри этой конфигурации). Аналогично, прсдвыполнение конкретного пакета влечет в первую очередь предвыполненис каждого еще нспрсдвыпол ионного пакета, используемого внутри этого пакета. Прсдвыполнение пакета дополнительно включает прсдвыполнение раздела объявлений, стоящего

7-1 •

94

ГОСТ Р 50154—95

в объявлении пакета, за которым следует предвыполнснис раздела объявлений, стоящего в соответствующем теле пакета, если оно есть. Предянполненис раздела объявлении определено в 12.3.

12.2 Предвыполнснис заголовка блока

Предвыполнснис заголовка блока (block header) состоит из предвыполнения описания параметрон настройки (generic clause), описания отображения параметров настройки (generic map clause), описания портов (port clause) и описания отображения портов (port map clause) в указанном порядке.

12.2.1 Описание параметров настройки

Предвыполнснис описания параметрон настройки состоит из предвыполнения каждого из эквивалентных отдельных объявлений параметров настройки, содержащихся в этом описании, в заданном порядке. Предвыполнснис объявления параметра настройки состоит из предвыполнения указания подтипа (subtype indication) и последующего создания константы настройки (generic constant) этого подтипа.

Значение константы настройки не определено до тех пор, пока нс будет предвыполнено последующее описание отображения параметров настройки, или, при отсутствии последнего, до тех пор, пока не будет вычислено неявное отображение, сопоставленное с этой константой настройки, определяющее значение этой константы.

12.2.2 Описание отображения параметров настройки

Предвыполнснис описания отображения параметров настройки состоит из предвыполнения списка сопоставления параметров настройки (generic association list). Список сопоставления содержит неявный элемент сопоставления (association element) для каждой константы настройки, для которой нет явного сопоставления; фактическая часть (actual part) такого элемента сопоставления представляет собой неявное выражение (default expression), состоящее я объявлении этой константы.

Предвыполнснис списка сопоставления параметров настройки состоит из предвыполнения каждого элемента сопоставления параметров настройки в этом списке, Предвыполнснис элемента сопоставления параметров настройки состоит из предвыполнения формальной части (formal part) и вычисления фактической части. Константа настройки или се подэлемент, обозначаемые формальной частью, затем инициализируются значением, получаемым при вычислении соответствующей фактической части.

12.2.3 Описание портов

Предвыполнснис описания портов состоит из предвыполнения каждого из эквивалентных отдельных объявлений портов, содержащихся в этом описании, я заданном порядке. Прсдвы пол некие объявления порта состоит на предвыполнения указания подтипа и последующего создания порта этого подтипа.

12.2.4 Описание отображения портов

Предвыполнснис описания отображения портов состоят из предвыпачнения списка сопоставления портов (port association list).

Предвыполнснис списка сопоставления портов состоит из предвыполнения каждого элемента сопоставления портов в этом списке. Предвыполнснис элемента сопоставления портов состоит из предвыпол пени я формальной части; порт или его лодэлсмеит, обозначаемый этой частью,затем сопоставляется с сигналом, обозначаемым фактической частью. Такое сопоставление влечет проверку ограничений, налагаемых на сопоставления портов (см. 1.1.1.2.). Возникает ошибка, если эта проверка не имеет успеха.

Если порт типа in в своем объявлении содержит неявное выражение, но для него нс -задан элемент сопоставления, то это выражение вычисляется и полученное значение становится значением этого порта.

12.3 Предвыпол пение раздела объявлений

Предвыполнснис раздела объявлений состоит из предвыполнения входящих в него элементов объявлений (declarative item), если они есть, в том порядке, в котором они расположены. В определенных случаях предвыполнснис элемента объявлений влечет вычисление выражений, стоящих внутри этого элемента объявлений. Значение каждого объекта, обозначаемого первичным в таком выражении, должно быть определено во время вычисления этого выражения.

Примечание — Из виисукпзонных щмни.т следует, что мяч сигнала, объявленное внутри блока, ice может fan, нсоольэооано в выраженмик. стоящих п элементах объявлений ««угри блок», так как значение сингала не определено до тех пор. пеки иерархии проекта не будет предпмполпсиа. Однако параметр-сигнал может быть ттслодюпввп и выражениях, стоящих г. элементах объявлений. которые и спою очередь используются в раздел-. пбытаиеимй iKX’inpuqxiMMW. ко при условии, что лги гкьюротрпммз вызывается только после качала моделировании, так как значение каждого сигнала буле: определяю только к этому моменту.

12.3.1 Предвыполненис объявления

Предвыполнснис объявления создаст объявляемый элемент.

Для каждого объявления правила языка (в частности правила области действия и видимости) таковы, что либо невозможно, либо недопустимо использовать конкретный элемент до предвыполнения объявления, описывающего этот элемент. Например, невозможно использовать имя типа для объявления объекта до того, как соответствующее объявление типа нс будет прсдвы пол пена. Аналогично, недопустимо вызывать подпрограмму до предвыполнения се тела.

95

ГОСТ I» 50754—95

12.3.1.1 О б ъ я в л е н и я и т ела п о д л р о е р и м м

Предвыполненис объявления подпрограммы влечет предвыполненис списка интерфейса параметров (parameter interface list) этого объявления; это в сною очередь влечет прсдвыполнение указания подтипа каждого элемента интерфейса с целью установить подтип каждого формального параметра этой подпрограммы. Прсдвыполнение тела подпрограммы нс имеет никакого другого э(]>фскта, кроме утверждения того факта, что это тело может теперь использоваться для выполнения вызовов этой подпрограммы.

12.3.1.2 О б ъ я в л е а и я т и и а а

Прсдвыполнение объявления типа в общем состоит из предвыполнения определения типа (type definition) и создания этого типа. Для ограниченного индексируемого типа прсдвыполнение еще состоит из предвыполнения эквивалентного анонимного неограниченного индексируемого типа, за которым следует прсдвыполнение именованного подтипа этого неограниченного типа.

Предвыполненис определения перечисляемого типа (enumeration type definiton) нс имеет никакого другого эффекта, кроме создания соответствующего типа.

Прсдвыполнение определения целого, плавающего или физического типа (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). Прсдвыполнение указания подтипа, содержащего ограничение, состоит из следующего:

I) Сначала предвыполнястся ограничение.

2) Затем делается проверка на совместимость этого О1раничсния с типом или подтипом, означаемым меткой типа (см. 3.1 и 3.2.1.1).

Предвыполненис ограничения диапазона (range constraint) состоит из вычисления этого диапазона. Вычисление диапазона определяет границы и направление этого диапазона. Прсдвыполнение ограничения индекса (index constraint) состоит из предвыполнения каждого из дискретных диапазонов (discrete range) в этом ограничении индекса в порядке, нс определяемом языком. Прсдвыполнение ограничения размера (size constraint) состоит из вычисления выражения.

12.3.1.4 Объявления объектов

Предвыполненис объявления объекта (object declaration), описывающего объект, отличный от файлового объекта, происходит в следующем порядке:

I) Сначала предвыполнястся указание подтипа. Тем самым устанавливается подтип этого объекта.

2) Если объявление обтюкта содержит явное инициализирующее выражение, то вычислением этого выражения получается начальное значение этого объекта. В противном случае устанавливается неявное начальное значение.

3) Объект создается.

4) Начальное значение присваивается объекту.

Инициализация такого объекта (либо всего объекта, либо его подэлемента) влечет проверку на принадлежность начального значения подтипу этого объекта. Для индексируемого объекта, описанного объявлением объекта сигнала, применяется неявное преобразование подтипа, как в случае оператора присваивания, если только этот объект не является константой, подтипом которой является неограниченный индексируемый тип.

Прсдвыполнение объявления файлового объекта состоит из предвыполнения указания подтипа, за которым следует создание этого объекта. Затем вычисляется логическое имя файла и файловому объекту сопоставляется соответствующий физический файл.

Примечай и е — Описанные правила применяются ко всем гА.нмсии«м объект!,, и исключением объявлений Нортон и параметрон настройки. |1ре.твы1юл11снис которых описана и 12.2.1 — 12.2.4.

Выражение, ипнцивлизируютес константе, нс обя:тател1.1ю должно -«.пъ статическим выражением

96

А2-!4О6

ГОСТ l> 50754 —95

12.3.1.5 Объявления бона л и и т с а ь к w v о л с к

Прсдвыполнснис объявлении дополнительного имени (alias declaration) состоит из предвыполиення указания подтипа для утверждения подтипа, сопоставляемого с этим именем, за которым следует создание дополнительного имени как альтернативного для имени объекта, заданного в этом объявлении. Создание дополнительного имени для индексируемого объекта влечет проверку того, что этот подтип включает соответствующий элемент для каждого элемента этого объекта. Возникает ошибка, если эта проверка нс имеет успеха.

12.3.1.6 Объявлен и я а т р и б у т о й

Прел выполнение объявления атрибута (attribute declaration) we имеет никакого другого эффекта, кроме создания шаблона для определения атрибутов элементов.

12.3.1.7 О О ъ я о л с и и я к о зг п о и с it tn о а

Прсдвыполнснис объявления компонента (component declaration) не имеет никакого другого эффекта, кроме создания шаблона для конкретизации экземпляров компонента.

12.3.2 Предвышкшенис спецификации

Прсдвыполнснис спсци^юкации (specification) нс имеет никакого другого эффекта, кроме сопоставления дополнительной информации с ранее объявленным элементом

12.3.2.1 С п е ц и Ф и к а ц и я «триб у т о в

Прсдвыполнснис спецификации атрибута (attribute .specification) происходит в следующем порядке:

I) Для того, чтобы установить, какие элементы задействуются спецификацией атрибута, предвыпол-няется спецификация понятия (entity specification).

2) Для определения значения атрибута вычисляется выражение.

3) Создастся новый экземпляр указанного атрибута и сопоставляется с каждым из задействованных элементов.

4) Каждому новому экземпляру атрибута присваивается полученное значение.

Присваивание значения Экземпляру конкретного атрибута влечет проверку на принадлежность этого значения подтипу указанного атрибута. Дли атрибута ограниченного индексируемого типа сначала применяется неявное преобразование подтипа, как н операторе присваивания. Для атрибута неограниченного индексируемого типа в таком преобразовании нет необходимости; ограничении этого атрибута определяются ограничениями самого значения.

Примечание — Выражение « спецификации атрибута uw&iwvdMiu должно быть сниичсским выражением.

12.3.2.2 С п е ц и ф и к а ц и и к о и ф и г у р а ц и и

Прсдвыполнснис спецификации конфигурации (configuration specification) происходит в следующем порядке:

1) Пред выполняется спецификация компонента (component .specification); тем самым определяется, какие экземпляры компонента задействуются этой спецификацией конфигурации.

2) Предвыполияется связывающее указание (binding indication»; тем самым идентифицируется объект проекта, к которому одсмспюванныс экземпляры компонент будут привязаны.

3) С каждой меткой задействованного экземпляра компонента сопоставляется связывающая информация для доследующего использования сс в конкретизации этих экземпляров.

Составной частью этого проекта предвыполнения является проверка на существование в указанной библиотеке проекта как объявления объекта (entity declaration), так и соответствующего архитектурного тела (architecture body), подразумеваемых связывающим указанием. Возникает ошибка, если эта проверка нс имеет успеха.

12.3.2.3 С. п с ц ц ф и к а ц it я о tn к л ю ч е tt и л

Прсдвыполнснис спецификации отключения (disconnection specification) происходит в следующем порядке:

1> Пред выполняете я спецификация защищенных сигналов (guarded signal specification); тем самым идентифицируются сигналы, задействованные этой спецификацией.

2> Вычисляется выражение времени (time expression); тем самым определяется время отключения для драйверов задействованных сигналов.

3> Время отключения сопоставляется с каждым задействованным сигналом для последующего использования при построении операторов отключения в эквивалентных процессах для защищенных назначений (quarded assignment) задействованных сигналок.

12.4 Предвыполненне раздела операторов

Параллельные операторы (concurrent statement), стоящие в разделе операторов (statement part) блока, должны быть вредвыполнены до начала моделирования. Предвыполненне раздела операторов блока состоит из предвыполнения каждого параллельного опера гора в заданном порядке.

12.4.1 Операторы блоки

97

ГОСТ Р 50754—95

Пред выполнение оператор.! блока (block statement) состоит из прсдвыполнения заголовка блока (block header), если он задан, за которым следует прсдвыполнснис раздела объявлений блока (block declarative part) и, наконец, прсдвыполнения раздела операторов блока (block statement part).

Прсдвы полнен не оператора блока может происходить под управлением объявления конфигурации (configuration declaration). В частности, конфигурация блока (block configuration) внутри объявления конфигурации может являться источником последовательности дополнительных неявных спецификаций конфигураций, которые применяются в течение прсдвыполнения соответствующего оператора блока. Если оператор блока предвыполняется под управлением объявления конфигурации, то такая последовательность неявных спецификаций конфигураций, источником которой является конфигурация блока, прсдвыиолня-стся как часть раздела объявлений этого блока, стоящая после всех остальных элементов объявлений в этом разделе.

Последовательность неявных спецификаций конфигурации, источником которой является конфигурация блока, включает в себя каждую из спецификаций конфигураций, подразумеваемых конфигурациями компонентов (см. 1.3.2), стоящими непосредственно внутри этой конфигурации блока; порядок спецификаций конфигураций совпадает с порядком конфигураций компонентов.

12.4.2 Операторы генерации

Прсдвыполнснис оператора генерации (generate statement) состоит из замещения этого оператора множеством копий (возможно пустым) оператора блока, раздел операторов которого включает параллельные операторы, содержащиеся в ртом операторе генерации.

Такие операторы блока считаются представленными этим оператором генерации. Затем каждый оператор блока предвыполняется.

Для оператора генерации со схемой генерации (generation scheme) for пред выполнение состоит из прсдвыполнения дискретного диапазона (discrete range), за которым следует генерация одного оператора блока для каждого значения в этом диапазоне. Все операторы блока при этом имеют следующий вид:

I) Метка оператора блока совпадает с меткой оператора генерации.

2) Раздел объявлений блока содержит единственное объявление константы, которое описывает константу с тем же простым именем, что и у применяемого параметра генерации (generate parameter); значением этой константы является значение параметра генерации, при котором произошла генерация этого конкретного блока. Тип этого объявления определяется базовым типом дискретного диапазона параметра генерации.

3) Раздел операторов блока содержит копию параллельных операторов, стоящих внутри оператора генерации.

Для оператора генерации со схемой генерации if прсдвыполнснис состоит из вычисления логического выражения (boolean expression), за которым следует генерация точно одного оператора блока, если это выражение вырабатывает значение TRUE, или ни одного блока — к противном случае. В случае генерации оператор блока имеет следующий вид:

1) Метка блока совпадает с меткой оператора генерации.

2) Раздел объявления блока пустой.

3) Раздел операторов блока состоит из копий параллельных операторов, стоящих внутри оператора генерации.

fl р и м е ч а и и е — Покорение меток блока при испалкхищнни схемы генс-рщии Гог нс подразумевает многократное объявление этой метки. ПсклОДопптс.пжосп. операторов блоха, нредаподенных операторам п-чидюпии. сосгаодяет последовательность ссылок к одной и той же неявно объявленной метке.

12.4.3 Операторы конкретизации компонентов

Предвыполнсние оператора конкретизации компонента (component instantiation statement) нс имеет никакого эффекта, если только экземпляр компонента нс является либо полностью связанным (fully bound) с объектом проекта, определенным объявлением объекта и архитектурным телом, либо связанным с конфигурацией этого объекта проекта. Если это так. то прсдвыполнснис соответствующего оператора конкретизации компонента состоит из прсдвыполнения подразумеваемого оператора блока, представляющего экземпляр этого компонента, и (вместе с этим блоком) подразумеваемого оператора блока, представляющего объект проекта, к которому этот экземпляр привязан. Указанные операторы блока определяются в 9.6.1.

12.4.4 Другие параллельные операторы

Все другие параллельные операторы — эго либо операторы процесса (process statement), либо операторы, для которых существует эквивалентный оператор процесса.

Прсдвыполнснис оператора процесса происходит в следующем порядке:

I) Предвыполняется раздел объявлений процесса (process declarative part).

2) Создаются драйверы, требуемые этим оператором процесса.

3) Начальная транзакция, определяемая неявным значением, сопоставленным с каждым скалярным сигналом, управляемым этим оператором процесса, вставляется в соответствующий драйвер.

98

7.2'

ГОСТ I» 50754-95

Предвыполнснис всех параллельных операторов назначения сигнала (concurrent signal assignment statement) и параллельных операторов утверждения (concurrent assertion statement) состоит из построения эквивалентного оператор;) процесса, за которым следует его предвыполнснис.

12.5 Дина м и ч с с к о е п р с д в ы п о л н е и и с

Выполнение некоторых конструкций, содержащих в отличие от параллельных операторов последовательные операторы, также влечет предвыполнснис. Такое предвыполнснис происходит во время выполнения модели.

Существуют три вида конструкций, в которых предвыполнснис происходит динамически в процессе моделирования:

I) Выполнение оператора цикла со схемой итерации (iteration scheme) for влечет предвыполнснис спецификации параметра цикла (loop parameter specification) до того, как начнется выполнение операторов, содержащихся в этом цикле <см. 8.8.). Такое предвыполнснис создаст параметр цикла (loop parameter) и вычисляет дискретный диапазон.

2) Выполнение вызова подпрограммы (subprogram call) влечет предвыполнснис списка интерфейса параметров (parameter interface list) соответствующего объявления подпрограмм (subprogram declaration); это в свою очередь влечет предвыполнснис каждого объявления интерфейса (interface declaration) с целью создания соответствующих формальных параметров. Затем фактические параметры сопоставляются с формальными параметрами. Наконец, прсдвыполнястся раздел объявлений соответствующего тела подпрограммы (subprogram body) и происходит выполнение последовательности операторов, содержащихся в этом теле.

3) Вычисление генератора (allocator), содержащего указание подтипа, влечет предвыполнснис этого указания до генерации создаваемого объекта.

Прим с ч л ине — Ил шшеопмеанимх пренил следует, что элементы объявлений (declarative item), стоящие внутри раздела объявлений тела иолпротраммы. (трелвыполнатОТСй каждый раз. «нэп соответствующая подпрограмма вызывается; таким образом следующие одно за одним прел*............ конкретною awwn.i объявлений, стоящею и таком месте, мотут сохишать элементы с различными характеристиками. Например, следующие одно за илиим предкыткепюиим оттого и того же объявления полтина, стоящего в теле подпрограммы, могут сохишать подтипы с различными «граничениями.

12.6 Выполнение модели

Результатом предвыполнения иерархии проекта является модель, которая может быть выполнена с целью моделирования проекта, представленного этой моделью. Моделирование влечет выполнение определенных пользователем процессов, взаимодействующих друг с другом и окружающей средой.

Ядро модели (kernel process) — это концептуальное представление процесса, который координирует активность определенных пользователем процессов при выполнении моделирования. Этот процесс осуществляет распространение значений сигналов и изменение неявных сигналов (таких, как S'STABLE(T)). Болес того, на этом процессе лежит ответственность за обнаружение происходящих событий и осуществление выполнения подходящих процессов в ответ на эти события.

Для любого конкретного сигнала, явно объявленного в модели, ядро модели содержит переменную, представляющую текущее значение этого сигнала. Любое вычисление имени, обозначающего этот сигнал, использует текущее значение соответствующей переменной в ядре модели. При выполнении моделирования ядро модели изменяет эту переменную на основании текущих значений источников соответствующего сигнала.

Дополнительно ядро модели содержит переменную, представляющую текущее значение любого неявно объявленного сигнала GUARD, объявление которого появляется в результате использования защищающего выражения в конкретном операторе блока. Болес того, ядро модели содержит драйвер и переменную, представляющие текущее значение любого сигнала вида S’Stablc(T), для каждого префикса S и для каждого времени Т, к которому есть ссылка в модели; то же самое верно для сигналов вида S'Quict(T) и S’Transaction.

12.6.1 Распространение значении сигналов

По мерс продвижения времени моделирования транзакции в планируемой выходной форме сигнала конкретного драйвера (см. 9.2.1.) будут каждая, последовательно друг за другом, становиться значением этого драйвера. Когда драйвер таким способом приобретает новое значение, независимо от того, отличается ли оно от предыдущего значения, считается, что этот драйвер активен в течение данного цикла моделирования. Сигнал считается активным в течение конкретного цикла моделирования, если:

1) один из его источников является активным;

2) один из его подэлсментов является активным;

3) этот сигнал используется в формальной части (formal part) элемента сопоставления (association clement) в списке сопоставления портов (port association list), и соответствующий фактический сигнал является активным;

4) этот сигнал является подэлсментом разрешенного сигнала, и последний является активным.

99

ГОСТ Р 50754-95

Если сигнал конкретного составного типа имеет источник другого типа (и. следовательно, в соответствующем элементе сопоставления задана функция преобразования типа», то каждый скалярный подэлемент этого сигнала рассматривается как активный, если этот источник сам является активным. Аналогично, если порт конкретного составного типа сопоставляется с сигналом другого типа (и, следовательно, в соответствующем элементе сопоставления задана функция преобразования типа), то каждый скалярный полэлемент этого порта считается активным, если фактический сигнал сам является активным.

В дополнение к вышесказанному, неявный сигнал считается активным в течение конкретного цикла моделирования, если ядро модели изменило этот неявный сигнал в этом цикле.

Если сигнал нс является активным в течение конкретного цикла моделирования, то этот сигнал считается пассивным (quiet) в течение этого цикла моделирования.

Ядро модели вычисляет два значения для некоторых сигналов в течение каждого цикла моделирования. Задающее значение конкретного сигнала — это значение, которое этот сигнал обеспечивает в качестве источника другого сигнала. Эффективное значение конкретного сигнала — это значение, получаемое вычислением ссылки на этот сигнал внутри выражения. Задающее и эффективное значения сигнала не всегда являются одним и тем же, особенно, когда в распространении значений сигнала участвуют функции разрешения и преобразования типа.

Для скалярного сигнала 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 или неподключенным портом вида inout, то эффективное значение 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. При этом делается проверка того, существует ли для каждого

7-3-1406

и»

ГОСТ Г 50754—95

элемента сигнала S соответствующий элемент в эффективном значении и наоборот. Возникает ошибка, если эта проверка не имеет успеха. Результат этого преобразования затем присваивается переменной, представляющей значение сигнала S.

Если при изменении сигнала текущее значение сигнала отличается от предыдущего значения, то считается, что на этом сигнале произошло событие. Это определение применяется к любому изменению сигнала, происходящему либо н соответствии с вышеописанными правилами, либо в соответствии с правилами изменения неявных сигналов, описанными в 12.6.2. Появление события может вызвать возобновление и последующее выполнение определенных процессов в течение никла моделирования, в котором это событие произошло.

Для любого сигнала, отличного от сигнала вида register, вычисление задающего и эффективного значений этого сигнала, а также изменение текущего значения этого сигнала выполнятся в каждом цикле моделирования, как описано выше. Изменение сигнала вида register происходит таким же образом в течение каждого цикла моделирования, за исключением тех циклов, в которых все источники этого сигнала имеют текущее значение, определяемое пустой транзакцией.

Изменение неявных сигналов S’STABLE<T>, S:QUIET(T) и S’TR.ANSACTION для любого префикса S и любого времени Т нс подчиняется вышеописанным правилам; изменение этих сигналов подчинено правилам, описанным в 12.6.2.

Примем » пне — U цикле мадлиршаиия тпжжпг «клэппсю» «'ипмлп может быть пассиглиим. хоти сам СмиЮл может быть «СГИ1ШМЧ.

Правила в отношении сопсстоменмв фактических параметров с формальными (ex. 4.3.3.2.’ подралумсгоюг. что если состыюй сигнал С0ПЛ-1ЛВ.КЯСЯ с йстамам портом вила Wl, Inaul или buffer и км <j>jp>iMuiM. ни фактически»» части люмеша WwcniMCMiit ж содержат функцию преобразил;»«ня типа, то каждым селлярный |вд<ечо1Г формального параметра является 1Кмчш№!м пюти-тствующсго подэлсмипп фактического параметра В этом случае кою решай падэлемеш фазического параметра будет активным, если и ксило «ели актиоен сооичмсгвуюший подлюменг фпрмилыюго параметра.

Алгоритм вычисления задающею I значения Скалярного сигнала S является рекурсивным. Например, если $ является лгж.шпым сигналом, стоящим в списке сопоставления портов, го задающее значение стала S может бып, зиг»учеип только после тою. гак будет вычислено задающее значение сгх>гостстпую1цгй фалшчсемтй части. Эш может повлечь многократное выполнение указанного алгоритма.

Анзл01мшк1, алгоритм вычисления аффекгшаклр значения сигнала S якаисгся рекурсивным. Например, если формалинай порт S вида in соносгввлен с фактическим сигналом А. то аффективное значение А должно быть вычислено ДО топь как может быи, вычислено .аффскттшпс значение порт S- Фактический синод А может сам быть исло.щюго1'иым как формильный пор» в списке сопоставления портов.

Для партой ЖЫ СНИ или linkage эффективное значение не ХСЮСТСя. т К эти порт не могут читаться.

12.6.2 Изменение неявных сигналю

Ядро модели изменяет значение каждого неявного сигнала GUARD, сопоставленного с оператором блока, имеющим защищающее выражение. Аналогично, ядро модели изменяет значения каждого неявного сигнала S’STABLE(T), S’QUIET(T) или S'TRANSACTION для любого префикса S и любого времени Т; это также влечет изменение драйверов сигналов S’STABLE(Ti и S’QU1ET(T>.

Для любого неявного сигнала GUARD текущее значение этого сигнала модифицируется, сели и только сели соответствующее защищающее выражение содержит ссыпку на сигнал S, и S является активным в течение текущего цикла моделирования. В этом случае неявный сигнал GUARD изменяется вычислением соответствующего защищающего выражения и присваиванием результата этого вычисления переменной, представляющей текущее значение этого сигнала.

Для любого неявного сигнала S’STABLE(T) текущее значение этого сигнала (а также текущее состояние соответствующего драйвера) модифицируется, если и только если истинно одно из следующих утверждений:

1) в текущем цикле моделирования на S произошло событие,

2) драйвер сигнала S'STABLE(T) является активным.

Если на сигнале S произошло событие, то сигнал S’STABLE(T) изменяется присваиванием значения FALSE переменной, представляющей текущее значение сигнала S’STABLECD, а драйверу сигнала S’STABLE(T) присваивается форма сигнала TRUE after Т. В противном случае, если драйвер сигнала S’STABLECD является активным, то S’STABLE(T) изменяется присваиванием текущего значения этого драйвера переменной, представляющей текущее значение сигнала S STABLEiT). Наконец, если оба утверждения ложны, то ни переменная, ни драйвер не модифицируются.

Аналогично, для любого неявного сигнала S'QWETCD текущее значение этого сигнала (а также текущее состояние соответствующего драйвера» модифицируется, если и только если истинно одно из следующих утверждений:

I) сигнал S является активным,

2) драйвер сигнала S’QUIETCD является активным.

Если сигнал S является активным, то сигнал S‘QUIET(T> изменятся присваиванием значения FALSE переменной, представляющей текущее значение сигнала S’QUIET(T), а драйверу сигнала S’QUIET(T) присваивается форма сигнала TRUE after Т. В противном случае, если драйвер сигнала S’QUIETCD является активным, то сигнал S’QUIET(T) изменяется присваиванием текущего значения этого драйвера 101

ГОСТ Р 50754-95

переменной, представляющей текущее значение сигнала S’QUIET(T). Наконец, если оба утверждения ложны, то ни переменная, ни драйвер нс модифицируются.

Для любого сигнала S’TRANSACTION текущее значение этого сигнала модифицируется, если и только если сигнал S является активным. Если это так, то сигнал S’TRANSACTION изменяется присваиванием значения выражения (not S’TRANSACTION) переменной, представляющей текущее значение сигнала S’TRANSACTION.

Текущее значение конкретного неявного сигнала R считается зависимым от текущего значения другого сигнала S, если верно одно из следующих утверждений:

I) R обозначает неявный сигнал GUARD и S является любым другим неявным сигналом, имя которого стоит в защищающем выражении, определяющем текущее значение сигнала R.

2) R обозначает неявный сигнал S'STABLE(T).

3) R обозначает неявный сигнал S'QUIET(T).

4) R обозначает неявный сигнал S’TRANSACTION.

Эти правила определяют частичную упорядоченность всех сигналов в модели. Изменение неявных сигналов ядром модели гарантируется таким образом, что если конкретный неявный сигнал R зависит от текущего значения другого сигнала S, то текущее значение сигнала S будет изменено в течение конкретного цикла моделирования до изменения текущего значения сигнала R.

Примечи в и с — Вышеописанные пропила подркп'.мипют. чп> если драйвер стинала S'STADLECP является активным, то новым текущим значением этого драйвера является значение TRUE. Ikuee того, вышеописанные пропила подразумевают, что если в течение конкретного цикла моделирования па Ститте S произошло событие и драйвер ентала S'STABLEO* стал активным о течение этого же цикла, то переменной, ирелстаалчющей текущее значение сигнала S'STABLEd*. будет присвоено значение FA1.SE и текущее значение драйвера сигнала S'STABLEO'* в течение этого цикла никогда нс будет присвоено этому сигналу

12.6.3 Цикл моделировании

Выполнение модели состоит из фазы инициализирования, за которой следует повторяющееся выполнение операторов процесса, заданных в описании модели. Каждое такое повторение называется циклом моделирования. В каждом цикле вычисляются значения всех сигналов, заданных в описании. Если в результате этого вычисления на конкретном сигнале происходит событие, то операторы процесса, которые чувствительны к этому сигналу, будут возобновлены и выполнены в течение этого цикла.

Фаза инициализации состоит из следующих шагов:

1) Вычисляются задающее значение и эффективное значение каждого явно объявленного сигнала и текущее значение сигнала устанавливается в эффективное значение. Это значение рассматривается как значение сигнала, которое он имеет постоянно до начала моделирования.

2) Значение каждого неявного сигнала вида S’STABLE(T) или S'QUIET(T) устанавливается в значение TRUE.

3) Значение каждого неявного сигнала GUARD устанавливается в значение, полученное вычислением соответствующего защищающего выражения.

4> Каждый процесс в модели выполняется до тех пор, пока он не будет приостановлен.

В начале моделирования текущее время имеет значение 0 нс.

Цикл моделирования состоит из следующих шагов:

I) Если нет активных драйверов, то время моделирования продвигается к следующему времени, в которое драйверы станут активным или возобновится процесс. Моделирование завершается, если время моделирования достигло TIME’HIGH.

2) Каждый активный явный сигнал в модели изменяется. (В результате на сигналах могут произойти события.)

3) Каждый неявный сигнал в модели изменяется. (В результате на сигналах могут произойти события.)

4) Каждый процесс Р, если Р в настоящий момент чувствителен к сигналу S, и на S произошло событие в этом цикле моделирования, то процесс Р возобновляется.

5) Каждый возобновленный процесс выполняется до его приостановки.

11 р и м с ч.п ннс — Начальное значение любого неявного сигнала wan S'TRANSACHON не определено.

Изменение явных сигналов описано в 126.1; изменение неявных анналов описано в 12 6 2

Когда процесс возобновляется, то он добавляется в множество процессов, которые должны быть выполнены в течение текущего цикла моделирования. Однако ни один процесс фактически нс начинает выполняться до наступления последнего шага цикла моделирования, к моменту наступления которого идентифицируются псе процессы, выполнимые в атом цикле.

13 ЛЕКСИЧЕСКИЕ ЭЛЕМЕНТЫ

Текст описания состоит из одного или более файлов проекта. Каждый файл проекта представляет собой последовательность лексических элементов, каждый из которых составлен из символов: в настоящем разделе описаны правила построения лексических элементов.

13.1 Набор символов

7-3'

102

ГОСТ Р 50754—95

В тексте VHDL-описания разрешено использовать только графические символы и символы управления форматом. Каждому графическому символу соответствует уникальный код из семиразрядного набора символов ISO (ГОСТ 27463) и знак визуального представления. Некоторые графические символы представлены различными знаками визуального представления н зависимости от национальной принадлежности набор.*! символов ISO. Описание языка в настоящем стандарте использует графические символы набора ASCII (ANSI представления набора символов ISO).

graphic_character :: - basic_graphic_characier

I lowcr_cascje(tcr

I other_spccial_character

basic_graphic_character :: = upper_case_letter

l digit I special_charactcr

l space_characier

basic_character :: = basic_graphic_characler

I forma t_effector

Базовый набор символов является достаточным для составления любого описания. Символы, входящие в каждую категорию базовых графических символов (basic graphic character), определены следующим образом:

а) заглавные буквы (upper case letters)

ABCDEFGHIJKLMNOPQRSTUVWXYZ

б) цифры (digits)

О 1 2 3 4 5 6 7 S 9

в) специальные символы (special characters) “#&•()* + , — ./:;<->_!

г) символ пробела (space character)

К символам управления форматом (formal effector) относятся символы из набора ISO (и ASCII), называемые: горизонтальная табуляция, вертикальная табуляция, возврат каретки, подача строки, подача страницы.

В остальные категории графических символов входят следующие символы:

д) строчные буквы (lower case letters)

abcdefghijklmnopqrstuvwxyz

с) прочие специальные символы (other special characters)

! $ % @ ? ( \ I ~ • { } ~

Допустимая замена специальных символов: вертикальная черта (I), диез (#) и кавычки (") — определена в 13.10 настоящего раздела.

Примем а ине — Символ из набора ISO. соответствующий визуальному символу # в представлении ASCII, появляется как символ фунта стерлинга в французском, немецком и английском национальных стандартах. В любом случае доработка набора шрифтов визуальных символов (например, курсивного или подчеркнутого* не является частью стандарта ISO.

Значения аббревиатур, используемых а данном разделе, следующие: ANSI — Американский Национальный Институт по Стандартам. ASCII — Американский Стандартный кол обмена информацией. ISO — Международная Организация ио Стандартизации.

Для ссылки на специальные символы используются следующие имена:

символ имя

символ ИМЯ

“ кавычки

# диез

& амперсанд

апостроф

< левая круглая скобка

•‘ бравая круглая скобка

звезда, умножить

+ плюс

, запятая

— дефис, минус

точка, период

/ слэш, разделитель

: двоеточие

; точка с запятой

< меньше

- равно

> больше

_ подчеркивание

I вертикальная черта

восклицательный знак

$ доллар

% процент

вопросительный знак

@ коммерческое at

| левая квадратная скобка

\ обратный слот

] правая квадратная скобка

Л орфографический знак

тупое ударение { левая фигурная скобка

) правая фигурная скобка

*- тильда

103

ГОСТ Р 50754-95

13.2 Л с к с и ч с с к и с элементы, разделители и огра н и ч и т с л и

Текст каждого модуля проекта является последовательностью отдельных лексических элементов. Каждый лексический элемент — эго либо ограничитель, либо идентификатор (может быть служебным словом), либо абстрактный литерал, либо символьный литерал, либо строковый литерал, либо битово-строковый литерал, либо комментарий.

В некоторых случаях в явном виде необходим разделитель для разделения рядом стоящих лексических элементов (а именно, когда без разделения они интерпретируются как отдельный лексический элемент). Разделителем может быть либо символ пробела, либо символ управления форматом, либо конец строки. Символ пробела нс является разделителем внутри комментария, строкового литерала или символьного литерала, включающего этот символ.

Конец строки всегда является разделителем. В языке не определено, что вызывает конец строки. Если для конкретной реализации конец строки задастся одним или более символами, то эти символы должны быть символами управления форматом, отличными от символа горизонтальной табуляции. В любом случае последовательность, состоящая из одного или нескольких символов управления форматом, отличных ог символа горизонтальной табуляции, должна вызывать по крайней мерс один конец строки.

Между любыми двумя соседними лексическими элементами разрешено ставить одни или более разделителей, а также перед первым лексическим элементом или после последнего лексического элемента в каждом модуле проекта. По крайней мере один разделитель необходим между идентификатором или абстрактным литералом и соседним идентификатором или абстрактным литералом. Ограничителем может быть один из следующих символов (входящих в базовый набор):

&'()* + , — ./:< = >!

или олин из составных ограничителей, составленный из рядом стоящих специальных символов:

= >••; = / = >»<-<>

Каждый из специальных символов, перечисленных в списке односимвольных ограничителей, является простым ограничителем, за исключением того случая, когда этот символ используется в составном ограничителе или комментарии, строковом литерале, в символьном литерале или абстрактном литерале.

и р и м с ч а и и с — Каждый лексический элемент должен помещаться на одной строке, т.к. конец сцижн рзсематрниасия как разделитель. Кавычки, диез и подчеркивание, а также лил рилом стоящих дефиса не являются шраннчитслями, но могут являйся частью друшх лексических элементов.

В отношении составных ограничителей используются следующие имена:

ограничитель

имя

стрелка

двойная звехта. возведение в степень

присваивание переменной

не равно

больше или равно

меньше или равно, а также назначение сигнала блок

13.3 Идентификаторы Идентификаторы используются в качестве имен,

а также в качестве зарезервированных слов.

identifier :: - letter { ( underline I lcttcr_or_digit }

letier_of_digtt :: - letter I digit

letter :: = upper_casc_leitcr I lowcr_cascjettcr

Bee символы в идентификаторе существенны, включая символ подчеркивания (underline), стоящий между буквой (letter) и цифрой (digit) или между двумя соседними буквами, или двумя соседними цифрами. Идентификаторы, различающиеся только по использованию соответствующих заглавных (upper case letter) и строчных (lower case letter) букв, считаются одинаковыми.

Примеры

1 COUNT X C_OUT ГП Decoder

2 VHSIC XI PageCount STORE.NEXTJTEM

Примечание— Так как пробел является разделителем, то исиалтздшшие cm недопустима внутри идентификатора.

1(К

ГОСТ Р 50754—95

13.4 Абстрактные литералы

Имеются два класса абстрактных литералов: действительные литералы и целые литералы. Действительным литералом является абстрактный литерал, содержащий точку; целым литералом является абстрактный литерал без точки. Действительными литералами являются литералы типа универсальный — действительный. Целыми литералами являются литералы типа универсальный целый.

abstract-literal :: - decimaljiteral I bascdjilcral

13.4.1 Десятичные литералы

Десятичным литералом (decimal literal) является абстрактный литерал, выраженный в десятичной системе счисления (то есть база счисления — это точно 10).

decimaljiteral :: = integer | . integer | | exponent 1

integer :: = digit { | underline | digit }

exponent :: = E (+| integer I E — integer

Символ подчеркивания, стоящий между двумя соседними цифрами десятичного литерала, нс оказывает влияния на значение этого абстрактного литерала. Буква Е в выражении экспоненты (если оно используется) может быть написана в любой форме (заглавной или строчной) — значение выражения от этого не меняется.

Экспонента обозначает степень числа 10. на которую умножается значение десятичного литерала, взятого без выражения экспоненты, для получения значения этого литерала с экспонентой. Выражение экспоненты в целом литерале не должно содержать знак минус.

Примеры

1

12

0

IE6

123-456

- - целые литералы

2

12.0

0.0

0.456

3.14159.26

- - действительные

- - литералы

3

I.34E—12

I.0E+6

6.023Е+24

- - действительные лите-

- - ралы с экспонентой

II р и м е ч а к и е — В п&трпкпшх лпсраюх эопускпкжя исиичпщт: нули. Так как пробел яиются ралкмитгл-.м. то ои ян рацкикк и э&ц-икгиых литералах даже между сосенными частями дкаичц-шы. Значение 0 с«спснс1пы iwpchmho таила» и целых лилиалах,

13.4.2 Базированные литералы

Базированный литерал (based literal) — это абстрактный литерал, выраженный в форме, которая явно содержит базу счисления. База счисления может находиться в пределах от 2 до 16.

bascdjilcral :: -

base # basedjntegcr | . bascdjnteger | # | exponent |

base :: - integer

basedjntcgcr :: =

cxtendcd_digit ( | underline 1 extended-digit }

cxtended_digit :: “ digit I letter

Символ подчеркивания, стоящий между двумя соседними цифрами в базированном литерале, нс влияет на значение этого абстрактного литерала. База счисления (base) и экспонента должны быть выражены десятичным числом. Буквой, используемой в качестве расширенной цифры (extended digit), могут быть буквы от А до F, соответственно представляющие цифры от 10 до 15. Буква в базированном литерале (будь то буква Е в экспоненте или расширенная цифра) может быть написана как в заглавной так и в строчной форме, — значение литерала от этого не меняется.

Предполагается обычный смысл базированного написания; в частности значение каждой расширенной цифры нс должно превышать значения базы. Экспонента обозначает степень базы, на которую умножается значение базированного литерала, взятого без выражения экспоненты, для получения значения этого литерала с экспонентой. Выражение экспоненты в целом литерале нс должно содержать знак минус.

Примеры

- - целые литералы

- - значения 255

105

ГОСТ Р 50754—95

2#1I11J11I# I6#FF# OI6#OFF#

- - целые литералы

- - значения 224

16#Е#Е1 2#1110.0000#

- - действительные

- - литералы значения

- ■ 4095.0

l6#F.FF#E+2 2#l.l 11 l_l 111_11 l#EI I

13.5 С и м в о л ь и ы с литер а л ы

Символьный литерал формируется включением одного из 95 графических символов (включая символ пробела) между двумя символами апостроф;». Символьный литерал содержит значение символьного типа.

characicrjitcral :: - ' graphic_character

Примеры

1 А’

2

3 ' ' '

4 ’ ’

13.6 Строковые литералы

Строковые литералы формируются из последовательности графических символов (возможно и пустой), заключенной между двумя символами кавычки, используемыми как строковые скобки.

slring_li(cral :: “ " { graphic_characicr } ”

Строковый литерал имеет значение, представляющее собой последовательность символьных значений, соответствующих графическим символам этого строкового литерала, исключая сами кавычки. Если необходимо включить символ кавычки в состав строкового литерала, то этот символ надо повторить подряд два раза на соответствующем месте. (Это означает, что строковый литерал, содержащий два рядом стоящих символа кавычки, никогда нс интерпретируется как два рядом стоящих строковых литерала).

Длина строкового литерала равна количеству символьных значений в представленной последовательности. (Каждый удвоенный символ кавычки учитывается как один символ).

Примеры

I "Setup lime is too short" - - сообщение об ошибке

2 "" - - пустой строковый литерал

3 " " "А........ - - три строковых литерала длиной I.

4 "Characters such as S, % and } are allowed in stringliterals"

П p и м с ч а в и e — Струпный литерал должен быть написан па одной строчке, т.к. он миляекя лексическим элементом (см. 13.2». Пахе длинные литералы могут быть составлены при помощи аперпцин конкатенации. Эта операция также может 6i.ii. нСпЛльзопаиа для получения строковых литералов, содержащих нстрпфичоскнс символы. Специфика пив 1п21рАф||'кя'ких символов содержится я объявлении тина CHARACTER в пакете STANDARD Ниже лапы примеры псполишиаиич операции конкатенации

I) “IIRST PART Of A SEQUENCE Of CHARACTERS" &

2> “THAT CONTINUES ON THE NEXT LINE"

3) "sequence Pun includes the* & ACK A "control character"

13.7 Битово-строковые литералы

Битово-строковые литералы (bit-string literal) формируются из последовательности расширенных цифр, заключаемой между двумя символами кавычки, используемых как скобки строки битов, которой предшествует спецификатор базы (base specifier).

bit_stringjiicral :: - basc_specificr " bit_valuc"

bil_valuc :: “ cxtcndcd_digil { [ underline | extendcd_digil }

basc_spccificr :: - В I 0 I X

Символ подчеркивания, стоящий между двумя соседними цифрами в битово-строковом литерале, не влияет на значение этого литерала. Буквой, используемой в качестве расширенной цифры, могут быть буквы от Л до F, представляющие соответственно цифры от 10 до 15. Буква к битово-строковом литерале

106

ГОСТ Р 50754-95

(будь то расширенная цифра или спецификатор базы) может быть написана как в заглавной, так и строчной форме — значение литерала от этого нс меняется.

Если спецификатор базы счисления есть В. то в качестве расширенных цифр могут выступать только цифры 0 и 1; сети 0, то цифры от 0 до 7; и если X, то цифры от 0 до 9 и от .А ло F.

Битово-строковый литерал имеет значение, представляющее собой последовательность значений предопределенного типа BIT (то есть последовательность из '0' и ’Г). Если указатель базы счисления есть В. to значение битово-строкового литерала есть сам литерал. Если указатель базы сеть 0 (или X), то значением литерала является последовательность, полученная замещением каждой расширенной цифры последовательностью из трех (или четырех) значений предопределенного типа BIT.

Длина битово-строковою литерала равна числу значений типа BIT в представленной последовательности. Примеры

I XTFR - - эквивалентно В"1111.1111.111 Г

2 О"777” - - эквивалентно В'ТП III 111"

3 Х"777" - - эквивалентно В'0117.0111.01 П"

13.8 Ко м м с к т а р и и

Комментарий начинается с двух рядом стоящих символов дефиса и ограничен концом строки. Комментарий может появиться в любой строке VH 1)1.-описания. Наличие или отсутствие комментариев не оказывает влияния на правильность описания. Болес того, комментарии нс оказывают влияния на выполнение модуля моделирования; единственным назначением комментариев является повышение читабельности описания.

В комментарии допускаются любые символы любых алфавитов, реализуемых инструментальной ЭВМ. Примеры

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

WAIT

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

( OCT P 50754-95

(I p и и c <i а и n с — Зарезервированные слона, различающиеся только в использовании «хивстстпукнцих заглавных и строчных бука, рассматриваются как идентичные (см 133). Зарезервированное слово range также используется как имя предопределенного атрибута.

13.10 Возможные замены символов

Для базовых символов вертикальная черта, диез, кавычка разрешены следующие замены:

— вертикальная черта (I) может быть заменена восклицательным знаком (!) при использовании в качестве ограничителя;

— диез (#) в базированном литерале может быть заменен двоеточием (:), при этом заменить надо оба знака в этом литерале;

— кавычки ("), используемые как ограничители в строковом литерале с обеих сторон, могут быть заменены на проценты (%). При этом необходимо заменить обе строковые скобки, а из последовательности символов исключить все символы кавычки. Каждый символ процента внутри последовательности символов должен быть удвоен. Удвоенный символ процента интерпретируется в этом случае как один символ.

Такие замены нс изменяет смысл описания.

I) р и и с ч к нис — Рекомендуется ограничивать замещение чмикукаапмных символов для случаев, когда соответствующий визуальный символ недоступен Необходимо иметь ввиду, что на некоторых устройствах вертикальная черта представлена как разорванная вертикальная черта и в этом случае замена не рекомендуется.

Правила использования идс1пификаторов и абстрактных литсрдот таковы, что странные и заглавные буквы могут быть иепмиишаиы без различия. Эти лексические элементы. таким образом, могут быть написаны с использованием только базовою набора символов.

14 ПРЕДОПРЕДЕЛЕННОЕ ОКРУЖЕНИЕ ЯЗЫКА

В настоящем разделе описаны предопределенные атрибуты языка VHDL и пакеты, которые должны обеспечиваться всеми реализациями языка.

14.! Предопределенные атрибуты

Предопределенные атрибуты обозначают значения, функции, типы и диапазоны, сопоставленные с различными видами понятий. Ниже дано описание этих атрибутов. Для каждого атрибута дается следующая информация:

— Вид атрибута: значение,тип. диапазон, функция или сигнал.

— Описание префиксов для каждого атрибута.

— Описание параметра или аргумента, если он есть.

— Результат вычисления атрибута и тип этот результата (если применяется).

— Налагаемые ограничения или комментарии.

TBASE

Вид:

Префикс:

Результат:

Ограничения:

Тип.

Любой тип или подтип Т.

Базовый тип Т.

Этот атрибут допускается только в качестве префикса имени другого атрибута; например. T’BASE’LEFT.

T’LEFT

Вид:

Значение.

Префикс:

Любой скалярный тип или подтип Т.

Тип результата:

Такой же тип, как Т.

Результат:

Левая граница Т.

T’RIGHT

Вид:

Значение.

Префикс:

Любой скалярный тип или подтип Т.

Тип результата:

Такой же тип, как Т.

Результат:

Правая граница Т.

108

ГОСТ I» 30754—95

THIGH

Вид:

Значение.

Префикс:

Любой скалярный тип или подтип Т.

Тип результата:

Тахой же тип. как Т.

Результат:

Верхняя граница Т.

TLOW

Вид:

Значение.

Префикс:

Любой скалярный тип или подтип Т.

Тип результата: Результат:

Такой же тип, как Т.

Нижняя граница Т.

TPOS(X>

Вид:

Функция.

Префикс:

Любой дискретный или физический тип или подтип Т.

Параметр:

Выражение, типом которого является базовый тип Т.

Тип результата: Результат:

Униое)калькый_целый.

Номер позиции значения параметра.

TVAL(X>

Вид:

Префикс:

Функция.

Любой дискретный или физический тип или подтип Т.

Параметр:

Выражение, типом которого является базовый тип Т.

Тип результата:

Базовый тип Т.

Результат:

Значение, номер позиции которого является значением типа универ-амьмлй~целый, соответствующим X.

T’SUCC(X)

Вид:

функция.

Префикс:

Любой дискретный или физический тин или подтип Т.

Параметр:

Выражение, типом которого является базовый тип Т.

Тип результата: Результат:

Базовый тип Т.

Зимние, номер позиции которого на t больше, чем номер позиции

Ограничения:

значения параметра.

Возникает ошибка, если значение X эквивалентно T'BASE'HIGH.

T’PRED(X)

Вид:

Функция.

Префикс:

Любой дискретный или физический тип или подтип Т.

Параметр:

Выражение, типом которого является базовый тип Т.

Тип результата:

Базовый тип Т.

Результат:

Значение, номер позиции которого на 1 меньше, чем номер позиции

Ограничения:

значения параметра.

Возникает ошибка, если значение X эквивалентно T’BASE’LOW.

TLEFTOFOO

Вид:

Функция.

Префикс:

Любой дискретный или физический тип или подтип Т.

Параметр:

Тип результата:

Результат:

Выражение, типом которого является базовый тип Т.

Базовый тип Т.

Значение, находящееся слепа от значения параметра в диапазоне значений Т.

Ограничения:

Возникает ошибка, если значение X эквивалентно T’BASE’LEFT.

T’RIGHTOFcX)

Вид:

Функция.

Префикс:

Любой дискретный или физический тип иди подтип Т.

Параметр:

Тип результата: Результат:

Выражение, типом которого является базовый тип Т.

Базовый тип Т.

Значение, находящееся справа от значения параметра и диапазоне значений Т.

Ограничения:

Возникает ошибка, если значение X эквивалентно T’BASE’RiGHT.

109

ГОСТ Р $0754—95

AXEFTKN) |

Вид:

Функция.

Префикс:

Любой префикс Л, подходящий для индексируемого объекта или его дополнительного имени; или обозначающий ограниченный индексируемый подтип.

Параметр:

Локально статическое выражение типа уншерсалы»Ы11_целый, значение которого нс должно превышать размерности А. По умолчанию

Тип результата:

принимается 1.

Тил, левой границы N-ro диапазона индекса Л.

Результат:

Левая граница N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого объекта, то результатом является левая граница N-ro диапазона индекса, взятого из объявления А,а нс из объявления объекта).

A’RIGHT[(N) ]

Вид:

Префикс:

Функция.

Любой префикс А, подходящий для индексируемого объекта или его дополнительного имени; или обозначающий ограниченный индексируемый подтип.

Параметр:

Локально статическое выражение типа уштс/пальный^елый, значение которого нс должно превышать размерности А. По умолчанию

Тип результата:

принимается 1.

Тип правой границы N-ro диапазона индекса А.

Результат:

Правая граница N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого объекта,то результатом является правая граница N-ro диапазона индекса, взятого из объявления А. а не из объявления объекта).

A’HIGH((N)1

Вид:

Функция.

Префикс:

Любой префикс А, подходящий для индексируемого объекта или его дополнительного имени; или обозначающий ограниченный индексируемый подтип.

Параметр:

Локально статическое выражение типа уш1вс1шлыый_цслый. значение которого нс должно превышать размерности А. По умолчанию принимается 1.

Тип результата:

Тип N-ro диапазона индекса А.

Результат:

Верхняя граница N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого объекта, го результатом является верхняя граница N-ro диапазона индекса, взятого из объявления А, л нс из объявления объекта).

A’L0W[(N))

Вид:

Функция.

Префикс-

Любой префикс А, подходящий для индексируемого объекта или его дополнительного имени; или обозначающий ограниченный индексиру

Параметр:

емый подтип.

Локально статическое выражение типа уним-рсальный^целыИ, значение которого не должно превышать размерности А. По умолчанию

принимается 1.

Тип результата: Результат:

Тип N-ro диапазона индекса А.

Нижняя граница N-ro диапазона индекса А. (Если А является дополнительным именем индексируемого объекта/то результатом является нижняя граница N-ro диапазона индекса, взятого из объявления А, а нс из объявления объекта).

110

ГОСТ Р 50754—95

A’RANGE((N) |

Вид:

Диапазон.

Префикс:

Любой префикс А, подходящий для индексируемого объекта или его дополнительного имени; или обозначающий ограниченный индексируемый подтип.

Параметр:

Локально статическое выражение типа универсальный-целый. значение которого нс должно превышать размерность А. По умолчанию

Тип результата: Результат:

принимается 1.

Тип N-ro диапазона индекса А.

Диапазон A'LEFT(N> to A’RIGHT(N), если N-й диапазон индекса является восходящим; или диапазон A'LEFT(N) downto A’RIGHT(N). если N-й диапазон индекса является нисходящим. Если А является дополнительным именем индексируемого объекта, то результат определяется N-м диапазоном индекса, взятым из объявления А. а нс из объявления объекта.

A'REVERSE RANGEKN)]

Вид:

Диапазон:

Префикс-

Любой префикс А. подходящий для индексируемого объекта или его дополнительного имени; или обозначающий ограниченный индексируемый подтип.

Параметр:

Локально статическое выражение типа уни&усссшнлнлелын, значение которого нс должно превышай, размерности А. По умолчанию пршшмастся 1.

Тип результата:

Тип N-ro диапазона индекса А.

Результат:

Диапазон A’RIGHT(N) downto A’LEFTtN), если N-й диапазон индекса является восходящим: или диапазон A’RIGHT(N) to A'LEFr(N), если N-й диапазон индекса является нисходящим. Если А является дополнительным именем индексируемого объекта, то результат определяется N-м диапазоном индекса, взятым из объявления А, а не из объявления объекта.

^LENGTH (<N)J

Вид;

Значение.

Префикс:

Любой префикс А, подходящий для индексируемого объекта или его дополнительного имени; или обозначающий ограниченный индексиру

емый подтип.

Параметр:

Локально статическое выражение типа универсальный _цслый. значение которого нс должно превышать размерности А. По умолчанию принимается 1.

Тип результата: Результат:

Ун иве реал ьный^целый.

Количество значений в N-м диапазоне индекса А, то есть значение

A’HIGH<N)-A’LOW(N)+I.

S’DELAYEDI(T) ]

Вид:

Сигнал.

Префикс:

Любой сигнал, обозначаемый статическим именем S.

Параметр:

Статическое выражение типа TIME, производящее отрицательное значение. По умолчанию принимается 0 ns.

Тип результата:

Базовый тип сигнала S.

Результат:

Сигнал, эквивалентный сигналу S, задержанному на Т единиц времени. Значение S’DELAYED(t) во время Тп всегда эквивалентно значению сигнала S во время Тп—1.

Конкретно: Пусть R имеет тот же подтип что и S, пусть Т >= 0 ns и пусть Р будет оператором процесса в форме:

Р: process (S)

begin

R <- transport S after T;

end process;

Предположим, что начальное значение R совпадает с начальным значением S, тогда атрибут ’DELAYED определен таким образом, что S’DELAYED(T)-R для любого Т.

Примечание — S‘DELAYEP(Ons> неэквивалентно S. когда S только что изменился.

III

ГОСТ Р 50754—95

S'STABLE((T) ]

Вид:

Префикс:

Параметр:

Тип результата:

Результат:

Сигнал.

Любой сигнал, обозначаемый статическим именем $.

Статическое выражение типа TIME, производящее неотрицательное значение. По умолчанию принимается 0 ns.

Тип Boolean.

Сигнал со значением TRUE при условии, что и течение Т единиц времени на сигнале S нс были события; или сигнал со значением FALSE в противном случае (см. 12.6.2).

Примечание — S*STABLE<Ons>-<.S*DEI*-\YfiD<ftns)“S», и S’STAnMZ <0 «к» имеет значение FAISB только к том случае, котла S только что изменился.

S’QUIET[(T> |

Вид:

Сигнал.

Префикс:

Параметр:

Любой сигнал, обозначаемый статическим именем S.

Статическое выражение типа TIME, производящее неотрицательное значение. По умолчанию принимается 0 ns.

Тип результата: Результат:

Тип Boolean.

Сигнал со значением TRUE при условии, что сигнал S был пассивным в течение Т единиц времени; или сигнал со значением FALSE в противном случае (см. 12.6.2).

Для конкретного цикла моделирования S‘QUIET(On$) имеет значение TRUE, если и только если сигнал S является пассивным в этом цикле.

S’TRANSACTION

Вид:

Префикс:

Тил результата:

Результат:

S’EVENT

Вид:

Префикс:

Тил результата:

Результат:

Сигнал.

Любой сигнал, обозначаемый статическим именем S.

Тин Bit.

Сигнал, значение которого инвертируется по отношению к предыдущему значению этою сигнала в каждом цикле моделирования, в котором сигнал S становится активным.

Функция.

Любой сигнал, обозначаемый статическим именем 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, если в течение текущего цикла моделирования какой-либо скалярный подэлемент сигнала $ является активным; в противном случае возвращается значение FALSE.

a-i-MOs

1)2

ГОСТ I’ 50754—95

S’LAST.EVENT

Вид:

Функция.

Префикс:

Любой сигнал, обозначаемый статическим именем S.

Тип результата:

Тип Time.

Результат:

Временной интервал, прошедший с момента последнего события на сигнале S.

Конкретно: Для скалярного сигнала S S'LAST_EVENT возвращает самое большое значение Т (если оно существует) типа TIME, для которого S’DELAYED(T)’STABLE вырабатывает значение TRUE, в противном случае возвращается значение 0 ns.

Для составного сигнала S S'LASTJEVENT возвращает минимальное из значений R’LASTEVENT для каждого скалярного подэлемента R сигнала S.

S’LAST_ACT1VE

Вид:

Функция.

Префикс:

Любой сигнал, обозначаемый статическим именем S.

Тип результата:

Тип Time.

Результат:

Интервал времени, прошедший с момента, когда сигнал S был последний раз активным.

Конкретно: Для скалярного сигнала S ST-AST_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'STABLE(T) имеет значение FALSE, то по определению для некоторого 1. где 0 ns <- I <- Т. S'DELAYED<T>/“$.

2 Если Ts является минимальным значением, при котором SSTABl-EHo вырабатывает значение FALSE, то для всех 1. где 0 ns <- I <- Ts. S DELAYEDm-S.

B’BEHAVIOR

Вид:

Значение.

Префикс:

Любой блок, обозначенный меткой, или любой объект проекта, обозначенный именем архитектуры.

Тип результата: Результат:

Тип Boolean.

Значение TRUE, если блок, определяемый оператором блока или объектом проекта, нс содержит оператор конкретизации компонента. В противном случае возвращается значение FALSE.

B'STRUCTURE

Вид:

Значение.

Префикс:

Любой блок, обозначенный меткой, или любой объект проекта, обозначенный именем архитектуры.

Тип результата: Результат:

Тип Boolean.

Значение TRUE, сети блок, определяемый оператором блока или объектом проекта, нс содержит нспассивный оператор процесса или параллельный оператор, эквивалентом которого является непассивный

из

оператор процесса. В противном случае возвращается значение FALSE.

ГОСТ Р 50754—95

Примечание — Взаямосмзь между значениями атрибутов LEFT. RIGHT. LOW, HIGH выражается слелукниен таблицей:

Восходящий дивилцш Нисходящий диапазон

TUFT - TJ.OW THIGH

■FRIGHT - THIGH FLOW

Так как атрибуты S'EVEXT, SWCTIVE. SLAST„EVKNF, S’lASTACHVIl и S'LAST.VALVE являются функциями, з w сигналами, то <ши не могут вызывать выполнение процесса, хотя значение, ««пращаемос такой функцией, может изменяться динамически.

В связи с этим и идрал.телыпяк контекстах, таких как выражения яищим или параллельные операторы назначения сигнала, рекомендуется использовать Экпивяле1т>ыс атрибуты S’STABLE и S GL'IET. являющиеся сигналами, или выражения, содержащие ЛИ атрибуты. Аналогично. функция STANDARD.NOW шкже нс должна испольюсаться и параллельных процессах.

14.2 Пакет STANDARD

Пакет STANDARD предопределяет ряд типов, подтипов и функций. Предполагается, что 8 начале каждого модуля проекта присутствует неявное описание контекста, ссылающееся на этот пакет. Пакет 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,

DC1,

DC2,

DC3,

DC4,

NAK.

SYN,

ETB,

CAN.

EM,

SUB,

ESC.

FSP,

GSP.

RSP,

USP,

’Г

» u •

’**>

^\

» »

* *

7’» '

o\

T, ’9’,

’3’,

’4’,

6', '

'7'.

'8’,

• •

>

’7’

’A’,

’C’,

-D’.

’E\

т;

’G’,

T,

J',

’K’,

’L’,

’M\

’N',

'O’,

’P\

’S’,

•T’,

’U'.

’V,

'W,

T,

’V,

•/V

’a’,

’b’,

’o’.

’d’,

’c’,

т/

’h’,

Те

v,

T,

’m',

’n’,

’o’,

V» 'x’,

o'.

v.

V,

v.

V,

’w’,

У»

7’,

T,

’I’,

T.

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 p$;

- - наносекунда

us - 1000 ns;

- - микросекунда

uts = l ООО us;

- - миллисекунда

sec - 1000 ms;

- - секунда

min - 60 sec;

• - минута

hr - 60 min; end units;

- - час

- - функция, возвращающая текущее время моделирования;

function NOW return TIME;

- - предопределенные числовые подтипы:

в-?*

114

ГОСТ Р 50754-95

subtype NATURAL is INTEGER range 0 to INTEGERHIGH;

subtype POSITIVE is INTEGER range 1 to INTEGER’HIGH;

- - предопределенные индексируемые типы:

type STRING is array (POSITIVE range < » of CHARACTER;

type BIT_VECTOR is array (NATURAL range < » of BIT;

end STANDARD;

Примечание — ASCH мнемоники для символов Г5, GS. RS и CS представлены и nine CHARACTER одлвететвеипо символами ESP. GSP, RSP. USP no избежание конфликта с слининами типа TIME.

14.3 Пакет Т Е X Т I О

Пакет ТЕХТЮ содержит объявления типов и подпрограмм, обеспечивающих форматированные операции ввода-вывода с символами ASCII.

package ТЕХТЮ is

- - описание типов для ввода/вывода текстов

type LINE is access STRING;

type TEXT is file of STRING;

type SIDE is (RIGHT, LEFT);

subtype WIDHT is NATURAL;

- - LINE является указателем

- - значения типа STRING

- - файл из ASCII записей

- - переменной длины

- - для выравнивания выходных

- - данных внутри полей

- ■ для задания ширины выход-- - ных полей

- - стандартные текстовые файлы

file INPUT; TEXT is in "STD-INPUT";

file OUTPUT; TEXT is in "STD-OUTPUT";

- - процедуры ввода для стандартных типов procedure READLINE (F: in TEXT; L: out LINE);

procedure

READ

(Lzinout

LINE;

VALU£:out

BIT; GOODzout BOOLEAN);

procedure

READ

(L:inout

LINE;

VALUEzout

BIT);

procedure

READ

(Linout

LINE;

VALUE:Out

BIT VECTOR: GOOD:out BOOLEAN)

procedure

READ

(Lzinout

LINE;

VALUEzout

B1T_VECTOR);

procedure

READ

(L: inout

LINE;

VALUE:out

BOOLEAN; GOOD:out BOOLEAN);

procedure

READ

(Linout

LINE;

VALUE:out

BOOLEAN);

procedure

READ

(Lzinout

LINE;

VALUEzout

CHARACTER; GOODzout BOOLEAN)

procedure

READ

(Linout

LINE;

VALUEzout

CHARACTER:

procedure

READ

(L:inout

LINE;

VALUEzout

INTEGER; GOODzout BOOLEAN);

procedure

READ

(Lzinout

LINE;

VALUEzout

INTEGER);

procedure

READ

(Lzinout

LINE;

VALUEzout

REAL; GOODzout BOOLEAN);

procedure

READ

(L:inout

LINE;

VALUEzout

REAL);

procedure

READ

(Linout

UNE;

VALUEzout

STRING; GOODzout BOOLEAN);

procedure

READ

(Linout

LINE;

VALUEzout

STRING);

procedure

READ

(Linout

LINE;

VALUEzout

TIME; GOODzout BOOLEAN);

procedure

READ

(Linout

UNE;

VALUEzout

TIME);

115

14 К. Г ’.’ 50754—95

- - процедуры вывода для стандартных типов

procedure WRITELINE (F: out TEXT; L: in LINE);

procedure WRITE (L: inout LINE; VALUE: in BIT;

JUSTIFIED: in SIDE:-RIGHT; FIELD: in WIDHT: = 0);

procedure WRITE (L: inout LINE; VALUE: in BIT_VECTOR;

JUSTIFIED: in SIDE:*RIGHT; FIELD: in WIDHT: - 0);

procedure WRITE (L: inout LINE; VALUE: in BOOLEAN;

JUSTIFIED: in SIDE-RIGHT; FIELD: in WIDHT: - 0);

procedure WRITE (k inout LINE; VALUE: in CHARACTER;

JUSTIFIED: in SIDELIGHT; FIELD: in WIDHT: = 0);

procedure WRITE (L inout LINE; VALUE: in INTEGER;

JUSTIFIED: in SIDELIGHT; FIELD: in WIDHT: - 0);

procedure WRITE (k inout LINE; VALUE: in REAL;

JUSTIFIED: in SIDE-RIGHT; FIELD: in WIDHT: = 0);

DIGITS: in NATURAL-0);

procedure WRITE (L: inout LINE; VALUE: in STRING;

JUSTIFIED: in S1DE:-RIGHT; FIELD: in WIDHT: - 0>;

procedure WRITE (L: inout LINE; VALUE: in TIME;

JUSTIFIED: in SIDE:-RIGHT; FIELD: in WIDHT: - 0;

UNIT: in TIME: = ns);

- - процедуры обработки позиции файла

function ENDLINE (L: in LINE) return BOOLEAN;

function ENDFILE (F: in TEXT) return BOOLEAN:

end TEXJO;

Процедуры READLINE и WRITELINE, описанные в пакете TEXTIO. читают и записывают целиком строки файла типа TEXT. Процедура READLINE вызывает чтение следующей строки из этого файла и возвращает в качестве значения параметра L ссылочное значение, указывающее на объект, представляющий эту строку. Если параметр L содержит непустое ссылочное значение перед вызовом процедуры, jo объект, указываемый этим значением, будет уничтожен прежде, чем будет создан новый объект. Процедура WRITELINE вызывает записывание строки, указываемой ссылочным значением параметра L, в этот файл и возвращает через параметр L ссылочное значение, указывающее на пустую строку. Если перед вызовом процедуры параметр L содержит пустое ссылочное значение, то в файл записывается пустая строка.

Каждая процедура READ, описанная в пакете ТЕХТЮ. читает данные из начала строки, указываемой параметром L, и модифицирует этот параметр таким образом, что при выходе он указывает на оставшуюся часть строки. Каждая процедура WRITE аналогично дописывает данные в конец строки, указываемой параметром L; в этом случае параметр L продолжает указывать на всю формируемую строку. Необходимо отмстить, что операции записывания нс помешают апострофы, окружающие отдельное символьное значение или двойные кавычки, окружающие строковое значение, нс делают этого также и соответствующие операции чтения, которые уничтожают эти символы, если они появляются во входном файле.

Для каждого предопределенного типа данных имеются две процедуры READ, описанные в пакете ТЕХТЮ. Первая из них имеет три параметра:

I) L — строка, из которой происходит считывание;

2) VALUE — значение, считываемое из этой строки;

3) GOOD — индикатор, указывающий на правильность завершения операции.

Например, операция READtL, InlVal, ОК) возвратит ОК со значением FALSE, L без изменения и IntVal неопределенным, если IntVal является переменной типа INTEGER, a L указывает на строку “АВС”. Индикатор успешного завершения операции, возвращаемый через параметр GOOD, позволяет процессу изящно устранить неожиданное противоречие но входном формате. Вторая форма операции чтения имеет всего два параметр;» L и VALUE. Если требуемый тип нс может быть прочитан в VALUE

8-2—14П6

116

ГОСТ Р 50754—95

из строки L. то возникает ошибка. Так, например, операция READ(L. IntVal) приведет к ошибке, если lniV.il имеет тип INTEGER, a L указывает на строку “ЛВС”.

Для каждого предопределенного типа данных имеется одна процедура WRITE, описанная и пакете ТЕХТЮ. Каждая из них имеет по крайней мерс два параметра:

I) L — строка, куда записываются данные:

2) VALUE — записываемое значение.

Дополнительные параметры JUSTIFIED, FIELD. DIGITS и UNIT управляют форматированием вводимых данных. Каждая операция вывода дописывает данные в строку, форматированную рамками некоторого поля, которое имеет длину, достаточную по крайней мере для представления выводимого значения. Ширина требуемого поля задастся параметром FIELD. Так как фактическая ширина поля будет всегда по крайней мере достаточной для хранения строкового представления выводимых данных, то неявное значение 0 для параметра FIELD вызывает вывод данных в поле, которое точно соответствует длине данных (то есть никакие ведущие или сопровождающие пробелы не выводятся). Параметр JUSTIFIED задает вид выравнивания выводимых данных внутри поля либо по правой границе, либо по левой границе; по умолчанию принимается выравнивание по правой границе.

Параметр DIGITS задаст количество цифр справа от десятичной точки при выводе действительного числа; неявное значение 0 указывает на то. что число будет выводиткя в стандартной форме, состоящей из нормализованной мантиссы и экспоненты (например: I.079236E—2). Если DIGITS имеет ненулевое значение, то действительное число выводится в форме, состоящей из целой части, за которой следует ’.' и затем дробная часть, количество цифр в которой равно значению DIGITS (например: 3.14)59).

Параметр UNIT задаст формат значения типа TIME. Значение этого параметра должно быть равно одной из единиц, объявленных в описании типа TIME; в результате значение термализуется как целый или действительный литерал, за которым следует имя самой единицы. Например, вызов процедуры WRITE (Une, 5ns, UNIT“>us) приведет к тому, что в строку, указываемую значением Line, добавится строковое значение ''0.0O5US"; в то время как вызов процедуры WRITEdJnc. 5ns) приведет к добавлению строкового значения "5ns'’ (так как по умолчанию значением параметра UNIT является значение ns).

В дополнение к вышеописанным процедурам для строк внутри текстовок» файла определен предикат ENDLINE. Для входного параметра L типа Une функция ENDLINE воз вращает значение выражения (L’Lcnglh-O). Функция ENDFILE определяется для файлов типа TEXT неявным объявлением этой функции в рамках объявления файлового типа.

II р и м с ч а и и с — Дм переменной L num line атрибут L'Ccng-h возвращает текущую длину Crptw.il независимо от операции пвола-имвоДЛ. выполняемой над этой строкой. Для строки I. в случае тоерации злиисываиня .-.трибуг L'lc-ngth возвращает количество символов, которое уже записано в эту строку, что эквивалентно кхмеру позиции последнего символа в этой строке. Для строки I. в случае операции чтения атрибут l.'lxngih отвращает колишттао символы», которое oernaoci. и агой строке.

Выполнение операции впила-вывода может изменить или лаже уничтожить строковый объект, укалываемый входным параметром I. типа Lino для этой операции. Таким образом, если значение переменной 1. типа Jane присваивается другой аы.к-шпй переменной и затем с L выполняется (шерацин ввода-вывода, то в резулвтптс может hoh>.mii>c>< нависшая ссылка.

117

ГОСТ I' 50754—95

ПРИЛОЖЕНИЕ- А (справочное)

Сводка синтаксических правил

(Данное приложение нс является частью стандарта IEEE Sid. 1076-1987, IEEE Standard VHDL)

Приложение содержит сводку синтаксических правил языка VHDL. Эти правила упорядочены по алфавиту в отношении нетерминальных имен стоящих слева. В круглых скобках указаны номера пунктов, в которых эти правила описаны.

abstract-literal :: =

decimaljiteral I based-literal

(13.4)

acccss_type_dcfifnition :: -access sybtypcjndication

(3.3)

actual-designator :: -expression

I .ч^гмУ-патс

I iw/aWe_namc

I open

(4.3.3.2)

actual_paramatcr„pan :: =

/wome/er-associationjisi

actual_pari :: =

actual-designator

I /юто(йм_патс ( actual-designator )

adding operator :: =

+ I — I &

aggregate :: =

( clcmcni_associalion { , dcment_association } )

alias_dcclaration :: -

alias identifier : subtypc_indication

is name ;

allocator :: -

new subtypcjndication

I new qualified-expression

architecture-body :: -

architecture identifier of cntity_name is architecture_declarative_pari

begin

archilecure_statement_part

end [ orcA»/ecMre_simple_namc | ;

(7.3.3)

(4.3.3.2)

(7.2)

(7.3.2)

(4.3.4)

(7.3.6)

(1.2)

its

ГОСТ Р 30754—95

architecturc_dcclarative_part :: - (1.2.1)

{ block_declarative_item }

architecurc_statemenl_part :: = (1.2.2)

{ concurrent-Statement }

array_type_dcfinition :: ~ (3.2.1)

unconstraincd_array_definiiion I constraincd_array_definition

asscrtion_statcmcnt :: = (8.2)

assert condition

[ report expression |

I severity expression 1 ;

association_elemcnt :: - (4.3.3.2)

I formal_part => 1 actual_part

associationjist :: - (4.3.3.2)

associaton_clcment { , association_elemcnt }

attribute-declaration :: = (4.4)

attribute identifier : iypc_mark ;

attribute-designator :: = (6.6)

attribu te_si m pl e_n a m c

attribute_namc :: - (6.6)

prefix ’ attribute-designator

I ( s/afte_ex pression ) |

attribute-Specification :: - (5.D

attribute attribute_dcsitgnator of entity-specification is expression ;

base :: - (13.4.2)

integer

base specifier :: - (13.7)

В I О I X

base_unit_dcclaration :: = (3.1.3)

identifier ;

basedjntcger :: = (13.4.2)

extended-digit { [underline] extended-digit }

bascd_literal :: = (13.4.2)

base # based_intcgcr [ . bascdjnteger I

# I exponent |

119

ГОСТ Р 50754—95

basic_characier :: =

basic-graph ic_character I forma t_cffcctor

basic_graphic_cha racier :: -

uppcr_ca$c_lcucr I digit

I spccial_charactcr I spacc_character

binding-indication :: =

cntity_aspcci

I gcncric_map_aspect I

I port_map_aspcct |

bil_string_literal :: = basc_specifier " bit_value ”

bit_value :: =

cxtcndcd_digit ( (underline| extended-digit }

block-Configuration :: -for block-specification

{ u$c_clausc }

{ configuralion_item } end for;

(13.1)

(13.1)

(5.2.1)

(13.7)

(13.7)

(1.3.1)

block_dcclarativc_item :: = 5ubprogram_dcclaraiton I subprogram_body

1 type_dcclaration

I subtypc_dcclaration

I constant-declaration

I signal-declaration

I file_declaration

I alias_de<.-l;iration

I component-declaration

I attribute-declaration

1 attribuie_.specification

I configuralion_specification

I disconnection-Specification

I usc_clausc

(1.2.1)

block-dcclarativc-part :: “

{ block-declarativc-iiem }

block-header :: “

| generic_clau5c I gencnc_map_aspccl : | I

I port_clausc I port_map_aspccl ; 1 I

block-Specification :: -

archi(ccturc_irA m c

I block _st ah-meh/„label

I g<werare_s/a/ez«<vt/_label

1 ( index.spccificaiion ) |

(9.1)

(9.1)

(1.3.1)

fl-3—1406

120

ГОСТ Р 50754—95

block statement :: =

WocAJabel :

block, 1 ( £w<r</_exprci».$ion ) | block_hcader block_dcclarativc_part

begin block_statement_part

end block ( WocAJabel I ;

block_statement_part :: -

{ concurrent-Statement }

casc_statement :: =

case expression is case_slatemcnt_altcrnativc { casc_5tatcmcn(-alternative }

end case;

casc_siatement_altcrnative :: -

when choices => scquence_of_$tatcments

character-literal :: =

' graphic_characlcr ’

choice :: •

simplcjex pression

I discretc_rangc

l e/emen/_$imple_name

I others

choices :: =

choice { I choice }

component-Configuration :: = for component-specification

( use binding-indication ; |

I block-Configuration I

end for;

component-declaration :: -

component identifier

I local_gencric_clause ]

[ local_port_clausc I

end component ;

component_instantiation_$tatcmcnt :: -in stan tiation _\abe I:

componentjname

I gcneric_map_aspcct [

( port_map_aspect J;

(9.1)

(9.1)

(8.7)

(8.7)

(13.5)

(7.3.2)

(7.3.2)

(1.3.2)

(4.5)

(9.6)

121

ГОСТ Р 50754—95

component-Specification :: = instantiationjist : com/>oncnl_name

(5.3)

compositc_type_definition :: = array_typc_dcfinition

I record-lype-definition

(3.2)

concurrcnt_asscrtion_statcmcnt :: - (9.4)

( label : I asscriionjtatcmcni

concurrcni_proccdure_call :: = (9.3)

I label : 1 procedurc_call_$iaicmcnt

concurrcni_$ignal_assignmcnt-Slatcment :: - <9.5)

I label : | conditional_signal_assignmcnt I [ label : I sclcctcd_signal_a$signmcnt

concurrent-Statement :: -

block-Statement

I proccss.slatemcnt

I concurrcnt_proccdure_call

l concurrent_asscriion_statement

I concurrent_signal_assignmcnt_$tatcmcnt

I componentJn$iantiation_5tatcmcni

l gcncratc.slatcment

(9)

condition :: -boolean _cx press ion

condilion.clausc :: -until condition

(8.1)

(8.1)

conditional_signal_assignment :: =

target <= options condi lional_waveforms ;

condilional.waveforms :: -

{ waveform when condition else } waveform

(9.5.1)

(9.5.1)

configuration-declaration :: -

configuration identifier of cnMy_namc is configuralion_declarative_part block-configuration

end | con/fguren'o/r_simplc_namc I ;

(1.3)

configuration_declarativcjtcm :: -usc_clause

I attribute-Specification

configuration_dcclaralivc_part :: -

{ configuraiion_dcclarativc-item }

e-s*

(1.3)

(1.3)

122

ГОСТ Р 50754-95

configurationjtem :: = block-Configuration I component_conf iguration

configuration-Specification :: -for component-specification use binding-indication ;

constant-declaration :: = constant idcnlificrjist : subtypcjndication I := expression 1 ;

constrained_array_dcifinition :: = array indcx_con5iraini of_(

eZezzzezi f_sub(ypejndication

constraint :: =

rangc_constraint I index constraint

contexl_clausc :: -

{ context-item }

(1.3.1)

(5.2)

(4.3.1.1)

(3.2.1)

(4.2)

(11.3)

contextjtcm :: -library-dause I use_clause

(11.3)

decimal-literal :: =

integer I . integer | | exponent |

(13.4.1)

declaration :: -

type_decla ration

l subtypc-dcclaration

1 object-declaration

I file..declaration

I interface-declaration

I alias-declaration

I attribute_declaration

I component-declaration

I cntity_declarafion

I configuration-declaration

I subprogram-declaration

I package_dcclaration

(4)

dcsign_file :: =

design_unii { design_unit }

disign_unit :: “ conlext_clause )ibrary_unit

designator :: =

identifier I operator-symbol

direction :: = to I downto

(II.I)

(11.1)

(2.1)

(3.1)

123

ГОСТ Р 50754 -95

disconnection-Specification :: = (5.3)

disconnect guardcd-signal_spccification

after /ime_expression ;

discrctc_rangc :: = c/fscre/e_subtype_indicaiion I range

(3.2.1)

element-association :: =

I choices -> I expression

(7.3.2)

element-declaration :: - (3.2.2)

identificrjist : clcmcni_subtypc_dcfinilion ;

element-SubtypC-difinition :: -subtypejndication

(3.2.2)

entity-aspect :: -entity cnWy_name

I ( rtrcMccfureJdcntifier ) | I configuration configuration _namc I open

entity_class :: -

(5.2.1.1)

entity

1 architecture

I configuration

procedure

1 function

1 package

type

I subtype

I constant (8

signal

I variable

I component

(5.1)

I label

eniiiydccl.irahon :: = entity identifier is entity_hcader entity_dcclarative_part

I begin entity_statcmcnt_part | end | en/i7y_simple_namc I ;

(1.1)

cntity_declarative_item :: = subprogram-declaration I subprogram_body

I type-declaration

I subtypc-dcdaration

I constant-declaration

I signal-dcckiration

I file_declaration

l alias-declaration

I attribute-declaration

I attributc_specifica£ion

I disconnection-specification

I use_clausc

cniity-dcclaraiivc-part :: -

{ cntity_dcclarativcjtcm )

(1.1.2)

(1.1.2)

124

ГОСТ Р 50754-95

entiiv_designator :: -

simplc_namc I operator_symbol

cnlity_headcr :: =

( 7orma/_gcncric_clausc I

| /wmfl/jxjrt.clause |

entity_namejist :: =

entity_dcsignator { , entity_dcsignator )

I others I all

entity_spccification :: =

entity_namejisi : cniily_class

entity_slatcment :: -

concurrcnt_assertion_statement

I passi ve_concu r re n l_proccd u rc_ca 11

I pdssfw_process_statcment

cntity_statcment_pan :: = { entily_siatement }

cnumcrationjiteral :: =

identifier I eharactcrjiteral

cnumcration_type_definition :: -

( cnumcralionjilcral { , cnumcraiionjiteral J )

cxit_statenient :: =

exit [ /oopjabcl 1 [ when condition ] ;

exponent :: -

E 1+1 integer I E — integer

expression :: =

relation { and relation }

I relation { or relation }

I relation { xor relation }

I relation ( nand relation ]

I relation | nor relation |

extendcd_digit :: -

digit I letcr

(5.1)

(1.1.1)

(5.1)

(5.1)

(1.1.3)

(1.1.3)

(3.1.1)

(3.1.1)

(8.10)

(13.4.1)

(7.1)

(13.4.2)

factor :: =

primary [ ** primary 1

I abs primary

I not primary

(7.1)

filc_dcclaration :: =

file identifier : sublypejndication is ( mode ] filejogieal name ;

(4.3.2)

125

ГОСТ I’ 50754—95

file_logical_namc :: = (4.3.2)

s/rfng_cx pression

file_typc_dcfinition :: - (3.4)

file of type_mark

float ing_typc_dcfi nil ion :: - (3.1.4)

rangc_consTraint

formal_designator :: = (4.3.3.2)

gcn<?w_namc I por/_name I parameter_n;imc

formal_paramctcrjisl :: “ (2.1.1)

param efer_i n t crfacc J is t

formal-part :: = (4.3.3.2)

formal_d esigna lor I function _m\mc ( formaLdcsignator )

full_iype_declarntion :: = (4.1)

type identifier is iypc_definilion ;

function_call :: - (7.3.3)

function _пате | (aciual_paramctcr_pari ) ]

gcneratc_statcmcni :: = (9.7)

яелегл/сЧаЬе! : generation_scheme generate { concurrcnt_slatcment } end generate [ gwrn/cjabel ] ;

gcncralion_schcmc :: - (9.7)

for gertmwe_parameter_$pccifica<ion I if condition

gcneric_clau$e :: = (1.1.1)

generic ( generic_lisl ) ;

gencricjist :: = (1.1.1.1)

generic_in terf ace_l is I

generic_map_aspccl :: - (5.2.1.2)

generic map ( ^mc_association_lisi )

graphiC-Charaeter :: = (13.1)

basic_graphic_charactcr I lower_case_letter I oiher_spccial_cliaracicr

guardcd_signal_specification :: - (5.3)

g/«wJ<?</_signal_lisl : typc_mark

126

ГОСТ Р 50754—95

identifier :: = (13.3)

letter { (underline] lcttcr_or_digit }

identifierjist :: -identifier { , identifier }

(3.2.2)

if_statement :: =

if condition then sequcncc_of_siaiements

(8.6)

{ elsif condition then “ scquencc_of_statemcnts }

[ else sequcnce_of_sta laments | end if;

incomplelc_lype_declaralk>n :: -type identifier ;

(3.3.1)

indexjconstrainl :: =

(3.2.1)

( discrcte_rangc { , discretc_rangc ) )

index_specification :: -discrcte_rangc 1 x/«We_cxprc5sion

(1.3.1)

indcx_subtype_dcifinition :: -type_mark range < >

(3.2.1)

indexcd_name :: -

prefix ( expression { , expression } )

(6.4>

instantiationjist :: =

inst<intiafion_)abc\ { , /z».v/«;K/rt/KMiJabel }

1 others

(5.2)

I all

integer :: -

(13.4.1)

digit { (underline] digit }

integcrjypc_definition :: = rangc_con5iraini

(3.1.2)

interfacc_constant_declaralion :: -

(4.3.3)

J constant | identifierjist : | in | sublypejndicalion | : « sm/fc^cxpression |

interfacc_declaration :: -interfacc_consiant_dcclaration i interfacc_signaLdeclaraiion 1 inlcrfacc_variable_dcchration

(4.3.3)

intcrface_clemcnt :: = intcrfacc_dcclaration

(4.3.3.1)

interfacejist ;; “

(4.3.3.1)

inierfacc_clcment { ; intcrfacc_clement }

127

ГОСТ Р 50754-95

interface signal-declaration :: =

[ signal 1 identifierjisi : I mode I subtypejndication | bus )

[ : - static_cx pression |

interface_variable_declaration :: -

I variable | identifierjisi : | mode ] subtypejndication | : = staficjnxpression ]

(4.3.3)

(4.3.3)

itcration.schcmc :: = (8.8)

while condition

I for /oo/>_paramcter_sp<xification

label :: = identifier

(9.7)

letter :: -upper_casejetter I lower_case_lctler

(13.3)

letter_or_digit :: = letter I digit

library_.clause :: -

library logical_namejist ;

(13.3)

(11.2)

library_unil :: -

primary_unit I secondary_unit

(II.I)

literal :: = numericjitcral

I enumerationJiteral

I string literal

I bit_string_litcral

I null

(7.3.1)

logical.name :: -identifier

(11.2)

logical_namc_list :: =

logical_namc { , logical_namc }

logical_operalor :: -

and I or I nand f nor I xor

loop-Slalcment :: “

I /oopjabcl : I

[ itcralion_schcmc ] loop sequence_of_statements end loop [ /oopjabcl ) ;

miscellaneous-Operator :: -

** I abs I not

(11.2)

(7.2)

(8.8)

(7.2)

128

ГОСТ Г $0754—95

mode :: -

in I out I inout I buffer 1 linkage

(4.3.3)

multiplying_operator :: -*1/1 mod I rem

(7.2)

name :: =

simple-name

I opera tor_symbol

I sclccted_name

I indcxcd_namc

I slicc_namc

I aiiributc_name

(6.1)

ncxt_statement :: = (8.9)

next | /<ю/> label | | when condition | ;

null.staiemcnt :: - (8.12)

null:

numcric_literal :: =

abstract-literal I physical-literal

object-declaration :: -constant-declaration I signal-declaration I variablc_dcclaration

opcralor_synibol :: = siring_litcral

options :: =

I guarded | I transport ]

package_body :: -

package body p«c4agc_simple_name is packagc_body_dcclaraiivc_part

end [ pacAage_simplc_namc | ;

package_body_declarativc_itcm :: -

subprogram_declaration

I subprogram.body

1 type_declaraiion

I sublypc_dcclaration

I constant-declaration

I filc_dcclaration

I alias_dcclara1ion

I usc_clausc

(7.3.1)

(4.3.1)

(2.1)

(9.5)

(2.6)

(2.6)

package_body_declarativc_part :: -

{ packagc_body_dcc1arativc_itcm }

(2.6)

129

ГОСТ I* 50754—95

package-declaration :: -

package identifier is “

рас kagc.dcch га I ivc_part end | /wc^n^C-Simptc-namc I ;

package_declaralive_ilem :: =

subprogram-declaration

1 t>'pe_dccla ration

I subtype_dcclaration

I constant-declaration

I signal-declaration

I file_dcclaration

l alias-declaration

I componcnt_dcclaration

I attribute-declaration

I attribute-Specification

I disconncciion_specificalion

I use clause

(2.5)

(2.5)

packagC-deelaralive-part :: -{ packagc-dcclarativc-item )

paramcter_specification :: -identifier in discrcic_cangc

physical-literal :: “

I abstracl_litcral I ww/_namc

physical-lypc-dcfinition :: -

range_constraint

units

ba5C_u n i t_d ccla ra 1 ion

{ secondary _unii-declaration } end units

(2.5)

(8.8)

(3.1.3)

(3.1.3)

port_clausc :: =

port ( port-list ) ;

(1.1.1)

portjist :: -

/xvHnterfaceJist

porl_map_aspect :: =

port map ( por/_associalion_list )

(1.1.1.2)

(5.2.1.2)

prefix :: -name I function call

(6.1)

130

ГОСТ Р 50754—95

primary :: -name

I literal

1 aggregate

I function_ca1l

I qualified_cxpression

1 typc_conversion

I allocator

I ( expression )

(7.1)

primary_unit :: -entity_declaration l configuration_declaralon I packagc_dcclaraton

procedurc_call_statement :: =

procedure_namc 1 < actual_parameter_part > ] ;

process_declarative_itcm :: =

s u bprogra m_dcclara I ion

I subprogram_body

I type_declaration

I subiypc_declaraiion

I constant_dcclaration

I variablc_dcclaration

I file_decla ration

I alias_dcdaraiion

I attributc_dcclaration

I attributc_spccification

I use clause

(II.I)

(8.5)

(9.2)

proccss_declarativc_part :: -

{ process_declarativc_itcm )

proccss_statement :: =

I /wcesxjabcl : I

process | ( sinsitivityjist ) ] process_dcclarativc_part

begin

proccss_statemcnt_part

end process ( prrxcssjabcl ] ;

(9.2)

(9.2)

proccss_statement_part :: =

{ scqucntial_statcmcnt }

qualified-expression :: = type_mark * ( expression )

1 type_mark , aggregate

(9.2)

(7.3.4)

range :: -

/wjge_at t ribu te_na me

I sitnple_exprcssion direction simp!c_expression

(3.1)

131

ГОСТ Р 50754 -95

rangC-Constraint :: = <3.1 >

range range

record_typc_dcfinition :: “ (3.2,2)

record

element-declaration

{ element-declaration } end record

relation :: = (7.1)

simple_exprcssion

( relational-operator simplc_cxpression 1

relational operator :: - (7.2)

ж I /- I < I <. I > I >«

rcturn_siatemcnt :: = <8.11)

return [ expression | ;

scalarJypc_definition :: = (3.1)

enumcration_type_dcfinition I integer_typc_dcfinition

I floating_typc_dcfiniiion

I physical_type_dcfinition

secondary_unit :: = (11.1)

architccture_body I package-body

secondary_unit_dcclaraton :: - (3.1.3)

identifier = physical-literal ;

selected_namc :: = (6.3)

prefix . suffix

sclecied_signal_assignment :: - (9.5.2)

with expression select

target < - options sclcctcd_waveforms ;

selected_waveforms :: - (9.5.2)

{ waveform when choices , } waveform when choices

scnsitiviiy_clausc :: - (8.1)

on sensitivityjist

sensitivityjist :: - (8.1)

s/gnrJ-namc { , .wgW_name }

scquence_of_statcmcnts :: = (8)

{ sequential-Statement }

1.32

ГОСТ Р 50754—95

sequential-Statement :: = wait_statemcnt

I asscrtion_statemeni

I signa!_assignment_siatcment

I variablc_assignmcn(_statcment

I proccdurc_call_s(alcmcnt

I if_statemcnt

I casc_staiemcnt

I loop_statcment

I next-Statement

I exit-Statement

I return_sta(cmcnt

I null-Statement

<S>

sign :: = + I —

(7.2)

signal_assignmcnl_stalemcnt :: -target <- [ transport | waveform ;

(8.3)

signal-declaration :: -

signal identifierjist : sublypcjndicaiion

I signal-king I [ : = expression ] ;

(4.3.1.2)

signal_kind :: -register I bus

(4.3.1.2)

signal-list :: =

sigwa/_natnc { , sfgnaZ_namc }

I others I all

simple_cxpression :: =

[ sign | term { adding-operator term )

5imple_namc :: -

identifier

slicc_name :: =

prefix ( discrete_rangc )

string-literal :: =

" { graphic_character } *

subprogram_body :: =

subprogram_spccifieation is

subprogram_dcclarativc_part

begin

subprogram_statement_parl

end ( designator | ;

(5.3)

(7.1)

(6.2)

(6.5)

(13.6)

(2.2)

subprogram-declaration :: -subprogram_specification ;

133

(2.1)

ГОСТ Р 5075-4—95

subprogram_dcclarativcjtem :: -subprogram-declaration

I subprogram_body

1 type_decla ation

I subtype_dcclaration

I constant-declaration

I variablc_dcclaration

I filc_declaration

I alias_dcdaration

I attribute-declaration

I attribute-Specification

I usc_clausc

(2.2)

subprogram_dec)arative_part :: = (2.2)

{ subprogram_declarativcjtem }

subprogram_specification :: = (2.1)

procedure designator

1 ( forma1_parameter_list ) |

I function designator | ( formal_paramctcrjist ) ]

return lypc_mark

subprogram_statcmcnt_part :: - (2.2)

{ sequential_statcmcni }

subtype-declaration :: = (4.2)

subtype identifier is subtypejndication ;

subtypejndication :: -

[ resolution J unction _п‘лте | type mark

| constraint |

(4.2)

suffix :: = simplc_namc

I charactcrjitcral

I opera tor_symbol

I all

(6.3)

target :: = name I aggregate

(8.3)

term :: - (7.1)

factor { mulliplying_opcralor factor }

timcout.clause :: -for /nne-Cxpression

(8.1)

iype_conver$ion :: =

lype_mark ( expression )

(7.3.5)

type-declaration :: = (4.D

full_,lypc_declaration

I incomplele_type_declaration

134

ГОСТ Р 50’54- 95

lype„definition :: *

scalar_type_definition

I composite^type^definiiion

l accessjype^definition

I filc_j.vpc_dcf ini lion

(4. J)

typc_mark :: “

type_i)ame I subtype_namc

uncons(ruincd_array_definilion :: =

array ( index_subiype_defini<ion { , indcxjsubtypc_dEfinition } )

of i’AweMCsubtypcJndication

(З.2.Г1

use^dausc :: ■

use sdctlcd name { , setec(ed_name } ;

variabJc_assignnicnt_3tatcmen( :: = target : " expression ;

varinblc_dedaration :: " variable identificr_lis( : subtype-indicator | : = expression ] :

waU_s(atc<ncnt :: 3

wait I scnsitivi(v_€lausc ] [ condition^ctause ] [ timcout^clausc j ;

waveform :: "

wavcform_element { , waveform_clcmcnt }

wavcform_element :: °

value_ex. press ion I after ft’w_cxprc»ion 1

I null | after ft'meexpression J

(10.4)

(8.4)

(4.3.I.3)

(8.1)

(8.3)

(8.3.1)

135

ГОСТ Р 50754—95

УДК 681.3.06.Л06.354 _ОКС 35.060 11X5 ОКСТУ 5001

Ключевые слова: автоматизированное проектирование, программные средства, язык моделирования, цифровая система

Редактор Т.С. И few Технический редактор ОМ. Нхасом Корректор Л. С- Черноусом Компьютерная пере гка ЕМ 'Цгрдкмнлпхмо

Сдано а набор 03 04.95 Подписано в печать 20.07.95. Уел. не*-, д 17,5 Уел- кр.-отт. «7.75. Уч -мал.. ■•• 16.74.

______________________________________________Тираж 340 wj. С2656 _ tax. 1406

ИНК Издательство ецшаартоп

107076. Москва. Колодезный мер.. 14.

Набрано а И етательепн- пл ПЭВМ

Калужская пикп-рафпя стандартов. уд. Московская. 256

Превью ГОСТ Р 50754-95 Язык описания аппаратуры цифровых систем VНDL. Описание языка