Суворова Е.А., Шейнин Ю.Е. Проектирование цифровых систем на VHDL (2003) (1095892), страница 15
Текст из файла (страница 15)
Управляющие операторы Как для всякого алгоритмического языка, лля языка ЧНР1 определена естественная последовательность выполнения исполняемых операторов. Это — последовательность выполнения в порядке записи операторов программы. Операторы управления последовательностью действий позволяют программно изменять зту естественную последовательность, устанавливать зависимость хода выполнения программы от значений обрабатываемых данных. Операторы и данные языка МНРП Операторы условного перехода Оператор И Оператор ее имеет следующий синтаксис: 1Е Ьоо1еап ехртевваоп ЕЬеп (вес)ептьа1 всасепсепс) [(е1аЕЕ Ьоо1еап ехртевв1оп ЕЬап (вес(оепсаа1 всатеспепс)] [е1ве (веяоепт1а1 втатепсепт)] спи ЕЕ; Оператор может содержать только секцию ее, что соответствует пустому ОПЕратОру ПО ВЕТКЕ ЕЬеп.
Секций езвае может быть несколько. Например: 1Е с]ата1="1111" ЕЬеп с)атаг с =с)атаЗ с вава аатагс=с]аспас апа 1Е; 1Е (дата1ыв) апс] (с)ата2=4) ЕЬеп Еасаоисс=7; е1вЕЕ (с)ата1=3! апс] (с]атаг=з) ЕЬюь дасаоптс=1; апа ЕЕ; Оператор саве Оператор саве имеет следующий синтаксис: саве ехртеввьоп Еа (иьеп (в1спр1е ехртевваоп ] с]1вотете тапсе ] оЕЬетв) с> (вес)пепсаа1 всатеспепс)) епа саве; Выражение, стоящее после сава (селектор), должно принимать дискретный набор значений. Значение этого выражения сравнивается со значениями, СтсящИМИ ПОСЛЕ инес (ИХ тИП дОЛжЕН СОВПадатЬ).
ВЫПОЛНяЕтСя ПОСЛЕдОВательность действий, стоящая после первого же иьеп, для которого было обнаружено совпадение. Если необходимо, чтобы выполнялась некоторая последовательность действий при отсутствии совпадений, то используется КОНСтруКцИя инее оЕЬетв, ПОСЛЕ КОтОрОй И ЗадаЕтСя Эта ПОСЛЕдОВатЕЛЬНОСтЬ. Эта конструкция должна быть последней в операторе. Глава 2 Например: Етре а1и тиас 1в (равв1, равя2, раяяэ, раева)з мат1аЬ1е типсз а1и типсз саве типо 1а зазор раяя1 => теви1т:=оретапз(1з мвезз равв2 => теви1т:=оретапд2; миеп осьетв => теяи1т:=0; епа оааез Если нескольким значениям селектора соответствует одна и та же последовательность действий, они могут быть перечислены после одного мьеп. Разделителем служит вертикальная черта.
Например: мьеп 1оаа ~ азИ [ виьа оретапс(з= хзеяз оретапз(з Если одна и та же последовательность действий соответствует некоторому интервалу значений селектора, то после мьеп можно задать интервал. Это имеет следующий синтаксис: мьеп взязр1е ехртеввъоп Ео [ аомпто взазр1е ехртеввьоп => Значения выражений, стоящих после мь и, вычисляются только на этапе компиляции, поэтому они не должны содержать объектов, значения которых могут изменяться в ходе моделирования. Циклы Оператор цикла (оор ПрОСтЕйШая фОрМа ОПЕратсра 1оор, КОтОрая ПОЗВОЛяЕт ОрГаНИЗОВатЬ ПОСТО- янно повторяющийся цикл, имеет следующий синтаксис: [1аор 1аЬе1:] 1оор (весиептьа1 ятатвзиепт) епа 1оор (1оор 1аЬе1(з Циклы 1оор могут быть вложенными.
Оператор 1оор сам по себе организует бесконечный цикл. Тело цикла будет выполняться неограниченное число раз, если выполнение цикла не будет прервано другими, специальными управляющими операторами. Оператор завершения цикла ехи Для того чтобы организовать цикл, который бы не был бесконечным, используется специальный оператор ех1е. Он имеет следующий синтаксис: ехЫ [1оор 1аЬе1( [анап Ьоо1еап ехртеввъоп( Операторы и данные языка МНР1 67 Если условие ыиеп не указано, то выполнение оператора однозначно приводит к завершению цикла; в противном случае цикл завершается только при выполнении условия, стоящего после хиеп. Если не указана метка цикла, то оператор ехьс осуществляет выход из того цикла, в котором он непосредственно находится. Указание метки цикла после ключевого слова ех1с позволяет использовать этот оператор для завершения сразу нескольких вложенных друг в друга циклов.
Например: сцсег: 1сер 1ппег: 1оор ехзс оцеег ыиеп сопдаеаоп 1у — выход ив внутреннего и внешнего циклов ехЫ еиеп сопс1с1оп Гы -- выход ив внутреннего цикла епа 1оор зппег; ЕХ[Е Впав СОПС]1С1СП 3; — ВЫХОД ИВ ВНЕШНЕГО цИКЛа епа 1оор оцеег; Оператор прерывания текущей итерации цикла пект Для того чтобы на очередной итерации цикла не выполнять всю последовательность действий, включенных в тело цикла, может использоваться операТор пенс: пене [1оор 1а]зе1] [еиеп ]зоо1еап ехргеввьоп] Этот оператор отличается от оператора ехас тем, что он прерывает не выполнение цикла, а только эту итерацию.
После выполнения пенс прекращается выполнение текущей итерации и происходит переход на следующую итерацию цикла. Как и в операторе ех1е, этот оператор может быть снабжен условием вы- ПОЛНЕНИЯ, ОдНаКО, В ОТЛИЧИЕ От ОПЕратОра ехьв (КОтсрЫй ПрЕрЫВаЕт ВЫПОЛ- пение, если условие истинно), пене прерывает выполнение, если условие ложно. Циклы с условием в]Ы[е ЦИКЛЫ С ПрсдуСЛОВИЕМ ыв11е. УСЛОВИЕ ВЫПОЛНЕНИЯ цИКЛа МОЖНО ВЫНЕСТИ В его заголовок. Тогда, если перед началом очередной итерации условие истинно, то она выполняется, в противном случае цикл завершается. Такой цикл имеет следующий синтаксис: [1сор 1а]зе1] иМ1е сопс]1с1оп 1оор (вечцепсьа1 всасыпепс] епа 1оор [1сор 1а]зе1]; Глава Я При подобной организации цикла предполагается, что в процессе его выполнения объекты, входящие в условие заголовка цикла, могут изменить свое значение в теле цикла.
заз11е с[пса="0000" 1оор ззаеа <= ззаса зпз Циклы с указанием количества повторений $сг. В заголовке цикла можно указать количество его повторений. Это имеет следующий синтаксис: [1оор 1аЬе1) лов Ыепе111ех 3п (взлр1е ехргеввьоп Ео ! доепсо вззвр1е ехрхеввзоп! 1оор (веспепеза1 веасезвепсЗ ° па 1оор [1оор 1вЬе1[з Объект, указанный идентификатором ьс[епеьгзех, может быть любого дискретного типа и не требует предварительного описания в модели. Идентификатор считается определенным только на время выполнения цикла. Хотя его имя может совпадать с именем другого объекта в модели, данный идентификатор в заголовке цикла никак не будет с ним связан; его значение не будет влиять на значение другого объекта в модели, имеющего то же имя, и наоборот.
Перед первым выполнением цикла идентификатору, указанному в заголовке, присваивается значение левой границы интервала, заданного в заголовке. При каждом выполнении цикла оно увеличивается (уменьшается) на 1 (для типов, задаваемых перечислением элементов, идентификатору присваивается значение следующего элемента). Количество повторений цикла равно количеству элементов, входящих в заданный в заголовке интервал. Пример: оавьаЬ1е а, Ь: 1пеедев; Ьее1п з=зоз Еов а зп 0 Ео 7 1оор Ьз=аз ° па 1оорз После завершения выполнения этого цикла переменные имеют следующие ЗНаЧЕНИя: Ь=7, а=10. В теле цикла лов нельзя изменять значения идентификатора„ указанного в заголовке цикла. Операторы и данные языка И (Р(.
Если цикл задан следующим образом: гог а 1а ехрг1 Ео ехрг2 1оор: при ехрг1>ехрг2 цикл не будет выполняться ни разу. Аналогичный эффект получим и для следующего примера: гог а 1о ехрг1 сового ехрг2 1оор: Прн ехрг1<ехрг2. Использование атрибутов в циклах работы с массивами. Циклы нередко используются при работе с массивами. Рассмотрим пример работы с циклами, в которых будут использованы атрибуты типов. В ходе работы над проектами определения типов могут претерпевать изменения. Крайне нежелательно, чтобы при этом приходилось редактировать большой объем кода.
Во избежание такой ситуации могут быть использованы атрибуты типов. Пусть, например, входные данные представляются в виде вектора, ЭЛЕМЕНТЫ КстсрОГО ИМЕЮТ тИП вса с1одьс, а ЕГО дЛИНа СОСтаВЛяЕт 16: Гуре ту оесгог Суре 1в вМ и1сдьс уесгог(0 Со 15); Пусть в программе имеется переменная ыу уесгог, описанная с использованием этого типа. Необходимо определить количество единиц в этом векторе. Фрагмент кода может выглядеть следующим образом: Бвв:=0; Еог 1 3о 0 Ео 15 1оор 1Е ту гессог(1) ='1' Гвео всвп=вяп+1; епа Ы; ыхт 1оор; Если при дальнейшей работе с проектом выяснится, что вектор должен иметь длину не 16, а 32 разряда, то заголовок цикла придется редактировать.
Однако, решая ту же задачу, заголовок цикла можно написать с использованием атрибутов типа: Яве: =О; гог 1 Ы ву уессог суре'гвпде 1оор 1г ыу чессог(1) ='1' Гиео залп:=випн1; еоа 1г; епа 1оор; В этом случае текст программы цикла не придется редактировать, даже если изменится не только верхняя и нижняя граница диапазона, но и направление интервала.
Пустой оператор Пустой оператор имеет следующий синтаксис: ав11 у Глава 2 Как правило, он используется на этапе отладки модели, когда известно, что в определенном месте модели должна выполняться некая последовательность действий, но какая именно, еще неясно. Например: 1г а<Ь атвп Нп11; в1ва а:=Ь; ъа звк Операторы управления сбором информации в ходе моделирования Операторы управления сбором информации в ходе моделирования входят в стандарт языка ЧНР[..