ОСНОВНЫЕ ОПЕРАТОРЫ ЯЗЫКА VHDL



Последовательные операторы VHDL могут использоваться в описании процессов, процедур и функций.

Их состав включает:

• оператор присваивания переменной (:=);

• оператор назначения сигналу (<=);

• оператор утверждения (assert);

• условный (if);

• выбора (case);

• цикла (loop);

• пустой оператор (null);

• оператор возврата процедуры - функции (return);

• оператор ожидания (wait)

Оператор условия if  оператор выбора case позволяют описывать совокупности действий, некоторые из которых исполняются при возникновении определенных условий.

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

Операторы повторения loop позволяют сокращенно записывать совокупность однотипных действий.

Оператор проверки assert служит для выявления специфических ситуаций, которые могут возникать в процессе компиляции и моделирования и выдачи в этих ситуациях сообщения разработчику.
47. ОПЕРАТОР УСЛОВИЯ ЯЗЫКА VHDL . ПУСТОЙ ОПЕРАТОР

Последовательные операторы VHDL могут использоваться в описании процессов, процедур и функций.

Их состав включает:

• оператор присваивания переменной (:=);

• оператор назначения сигналу (<=);

• оператор утверждения (assert);

• условный (if);

• выбора (case);

• цикла (loop);

• пустой оператор (null);

• оператор возврата процедуры - функции (return);

• оператор ожидания (wait)

Оператор условия if  позволяет описывать совокупности действий, некоторые из которых исполняются при возникновении определенных условий.

Синтаксис:

IF <логическое выражение>

ТНЕN <операторы>

ELSE <логическое выражение>

THEN <операторы>

END IF;

Пустой оператор null используется в операторах if или case чтобы обозначить варианты не требующие действий при определении условий

Пример:

case flag is

when true=>

Q:=null; - величина

when false

null; - оператор

end case.


ОПЕРАТОР CASE ЯЗЫКА VHDL

Оператор case – последовательный оператор, который по условию выполняет одну ветвь в зависимости от величины выражения селектора и имеет следующий синтаксис:

case выражение is

   {when выборы =>

   последовательные операторы}

end case;

Выражение, стоящее после case (селектор), должно принимать дискретный набор значений. Значение этого выражения сравнивается со значениями, стоящими после when (их тип должен совпадать). Выполняется последовательность действий, стоящая после первого же when, для которого было обнаружено совпадение. Если необходимо, чтобы выполнялась некоторая последовательность действий при отсутствии совпадений, то используется конструкция when others, после которой и задаётся эта последовательность. Эта конструкция должна быть последней в операторе.

Например:

type alu_func is (pass1, pass2, pass3, pass4);

variable func: alu_func; 

case func is

  when pass1 => result:=operand1;

  when pass2 => result:=operand2;

  when others => result:=0;

end case;

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

Например: when load | add | subs =>operand:=mem_operand;


ЦИКЛЫ. ОПЕРАТОР LOOP ЯЗЫКА VHDL

Loop – последовательный оператор для выполнения набора последовательных операторов. Операторы повторения loop позволяют сокращенно записывать совокупность однотипных действий.

Простейшая форма оператора loop имеет вид: [метка:] loop

последовательные операторы end loop [метка];

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

Для того чтобы организовать цикл, который бы не был бесконечным, используют оператор exit. Он имеет следующий синтаксис: Exit [ loop метка] [ when условие];

Если условие when не указано, то выполнение оператора однозначно приводит к завершению цикла; в противном случае цикл завершается только при выполнении условия, стоящего после when. Если не указана метка цикла, то оператор exit осуществляет выход из того цикла, в котором он непосредственно находится. Указание метки после ключевого слова exit позволяет использовать этот оператор для завершения сразу нескольких вложенных друг в друга циклов.

Пример:

L1 : loop

L2 : loop

exit L1 when condition_1; (выход из внутреннего и внешнего циклов)

exit when condition_2; (выход из внутреннего цикла)

end loop L2;

exit when condition_3; (выход из внешнего цикла)

end loop L1;

Для того чтобы на очередной итерации цикла не выполнять всю последовательность действий, включенных в тело цикла, может использоваться оператор next:   next [ loop метка] [ when условие];

Этот оператор отличается от оператора exit тем, что он прерывает не выполнение цикла, а только эту итерацию. После выполнения next прекращается выполнение текущей итерации и происходит переход на следующую итерацию цикла. Этот оператор также может быть снабжен условием выполнения, однако, в отличие от оператора exit (который прерывает выполнение, если условие истинно), next прерывает выполнение, если условие ложно.


 


Дата добавления: 2020-04-08; просмотров: 547; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!