Cтраница 2
Эператор процесса third реализует такие же преобразования, что и опера-горы вызова first и second. Обратите внимание: список инициализаторов этого процесса совпадает со списком формальных параметров оператора Eirst. [16]
Соответственно регистры в программах удобно представлять процессами, список инициализаторов которых включает управляющие сигналы, а в теле процесса находятся операторы присваивания, определяющие состояние триггеров регистра после изменений управляющих сигналов. Логика анализа условий выполнения операторов в теле этого процесса не отличается от такой же логики для одиночных триггеров. [17]
Множественное наследование указывается двоеточием (:) после имени производного класса и перечислением списка разделенных запятыми базовых классов после двоеточия. Для вызова конструкторов базового класса в конструкторе производного класса используется список инициализаторов элементов. [18]
Если список инициализаторов пуст, то процесс безусловно исполняется при начальном запуске, а также сразу за исполнением последнего оператора в разделе операторов этого процесса. При этом надо иметь в виду, что оператор процесса без списка инициализаторов обязательно должен содержать в своем теле оператор ожидания wait. Иначе исполнение любых других операторов в программе блокируется. [19]
Поскольку производный класс наследует элементы базового класса, то при создании объекта производного класса должен быть вызван конструктор базового класса для задания начальных значений элементам базового класса, содержащимся в объекте производного класса. В конструкторе производного класса при явном вызове конструктора базового класса может быть предусмотрен список инициализаторов элементов; в противном случае конструктор производного класса будет неявно вызывать конструктор базового класса с умолчанием. [20]
![]() |
Определения функций элементов класса Derived ( часть 4 из 6. [21] |
Заметьте, что множественное наследование указывается двоеточием (:) после имени класса ( class Derived) с последующим перечислением через запятую базовых классов. Отметим также, что конструктор Derived вызывает конструкторы каждого из своих базовых классов Basel и Base2 с использованием списка инициализаторов элементов. Конструкторы базового класса вызываются в той последовательности, в которой определено наследование, но не в той, в которой эти конструкторы упоминаются. [22]
Структуры могут быть инициализированы с помощью списка инициализаторов ( начальных значений), как массивы. Для инициализации структуры вслед за именем в объявлении переменной ставится знак равенства, а затем в фигурных скобках записывается список инициализаторов, разделенных запятой. [23]
![]() |
Пример выравнивания памяти для переменной типа struct example. [24] |
Чтобы инициализировать структуру, после имени переменной в объявлении структуры ставится знак равенства, за которым следует помещенный в фигурные скобки, разделенный запятыми список инициализаторов. [25]
Архитектурное тело описанного в этой форме устройства, изображенного на рис. 3.11, представлено в листинге 3.18. Здесь важно отметить, что все входные сигналы комбинационной схемы должны быть включены в список инициализаторов процесса с тем, чтобы любое их изменение вызывало исполнение оператора присваивания. Кроме того, в данном случае недопустимо a and b декларировать как сигнал. Это обязательно переменная, причем ее вычисление задается оператором, предшествующим операторам вычисления результирующих сигналов. В противном случае наблюдается некорректное представление поведения, заключающееся в том, что используются значения не непосредственно полученные в процессе текущего исполнения оператора process, а значения, вычисленные ранее после предыдущего изменения одного из входных сигналов. [26]
В триггерных устройствах входные сигналы можно разделить на две категории - управляющие и информационные. Главное свойство триггеров - способность сохранять свое состояние при пассивном состоянии управляющих входов независимо от изменений сигналов на информационных входах. Это свойство удобно описывать в VHDL с помощью оператора process, причем управляющие сигналы включаются в список инициализаторов или в выражения условий вложенного оператора ожидания wait. Состояние триггера после события на управляющем входе определяется его типом ( функцией переходов и способом управления), предыдущим состоянием и сигналами на информационных входах. [27]
![]() |
Автомат Мура с предустановкой.| Структура описания автомата Мура с предустановкой. [28] |
И, наконец, следует отметить такую модификацию модели последовательно-стных схем, как автомат Мили с асинхронными выходами, являющийся по сути гибридом автоматов Мили и Мура. В этой модели выходной сигнал является функцией от текущего состояния и состояния входов в текущий момент времени. Структурное представление такого автомата представлено на рис. 3.18. Программа, описывающая указанную реализацию, может быть подобна по структуре рис. 3.14, с той разницей, что в список инициализаторов процесса F2 и в состав аргументов для вычисления выхода войдет не только сигнал состояния, но и входной сигнал. [29]
Здесь важно отметить, что этот оператор определен именно как составной оператор параллельного типа. Под составным оператором понимается оператор, имеющий тело, которое содержит несколько вложенных операторов. Оператор процесса начинает исполняться при изменении сигналов, входящих в список инициализаторов ( при отсутствии такого списка - безусловно после выполнения всех вложенных операторов), а результаты его исполнения доступны другим параллельным операторам только после исполнения всех операторов, инициируемых теми же событиями, в том числе процессов. [30]