Cтраница 2
Такие средства в язык ИНСТР не включены, поскольку аварийные ситуации должны отрабатываться стандартным образом, а ситуации типа конец файла фиксируются как завершение оператора повторения или поиска. [16]
Предположим, что обработке подлежит массовая совокупность объектов, причем обработка каждого состоит из нескольких последовательных этапов. На первый взгляд кажется уместным записать такую обработку в виде оператора повторения по объектам, телом которого и являются действия этапов. Однако такая запись означает, что обработка следующего объекта начнется лишь тогда, когда закончатся все этапы обработки предыдущего. Но если этапы обеспечены разными исполнителями, то нет необходимости в таком ожидании: как только первый этап завершился для одного объекта, он может начинаться для следующего. Такая организация работы называется конвейерной. [17]
Остальные формы операторов повторения по синтаксису, да и по интерпретации записанных действий, практически не отличаются от таких же операторов языка С, поэтому ограничимся несколькими простыми примерами. Отметим только, что реализуемые подмножества языка требуют использования логически статических выражений для операторов повторения. [18]
В программе ( листинг 3.37) описана ситуация, когда к линии output подключено девять источников, и дополнительные источники могут подключаться к этому порту при включении модуля open drain в иерархические проекты. Сигнал output имеет в модуле open drain девять драйверов, присваивающих ему различные значения: восемь из них представлены в процессе muitipie assign оператором повторения, а один - параллельным оператором условного присваивания. [19]
Кроме этого, пользователь вправе предусмотреть в программе фрагменты, ориентированные только на реализацию процедур моделирования. При записи таких фрагментов разработчик может не обращать внимание на эффективность и даже возможность их физической реализации - важна лишь простота и наглядность описания - и в этом случае допускается применить даже достаточно экзотические конструкции, вроде рекурсивных вызовов процедур или операторов повторения с необъявленными заранее признаками их завершения. Такие фрагменты обычно просто удаляются после предварительного тестирования и отладки перед передачей программы в подсистему синтеза. Существуют системы интерпретации, в которых программным блокам можно сопоставлять специфические признаки, определяющие, какие из них подлежат реализации, а какие используются только при моделировании. Например, синтезатор системы MAX PLUS II игнорирует операторы initial в программах на Verilog. Иногда разработчик намеренно использует несинтезируемые конструкции на начальных этапах проектирования для обеспечения большей наглядности спецификации или для сокращения времени предварительной отладки ( как для экономии собственных трудозатрат, так и машинного времени для моделирования), предполагая дальнейшую декомпозицию проекта на реализуемые фрагменты ( см. пример в разд. [20]
Комментарии к операторам выполняемой последовательности смещены относительно комментария к первой строке конструкции на одну единицу смещения вправо. Следует помнить, что формирование условия завершения повторений должно осуществляться операторами, входящими в выполняемую последовательность. Другие конструкции языка, реализующие оператор повторений, оформляются аналогично. [21]
Последовательные операторы заключаются в выделенные программные блоки и при моделировании выполняются последовательно друг за другом в порядке записи. Результаты преобразований доступны для других блоков программы только после выполнения всех вложенных в блок операторов. В число последовательных операторов, в частности, входят последовательные операторы присваивания, условный оператор if, оператор выбора case, операторы повторения loop. Вводятся конструкции, которые представляют действия, исполняемые в течение некоторого ненулевого временного интервала. [22]