Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mat_mod.docx
Скачиваний:
229
Добавлен:
22.02.2016
Размер:
807.96 Кб
Скачать

55. Циклы в vhdl.

В VHDL существует три вида циклов: бесконечный, while и for. Синтаксис бесконечного цикла выглядит следующим образом:

[ loop_label: ] loop

{ sequential_statement }

end loop [ loop_label ] ;

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

signal Clock: BIT := ’0′;                             —  инициализация  в 0

Clk_1:  process  (Clock)

begin

L1: loop

Clock <=  not Clock  after 5 ns;  —  период Clock  равен 10 ns

end loop L1;

end process Clk_1;

Для завершения цикла может быть применен оператор  exit, а для прерывания теку-

щейитерации – оператор next:

[ label: ] exit [ loop_label ][when boolean _expression];

[ label:] next [ loop_label ] [when boolean _expression];

Если метка не указана, то действие оператора относится к содержащему его циклу. Необязательное выражение boolean_expression позволяет задавать условие прерыва- ния выполнения цикла или его итерации. В следующем коде выполнение цикла завер- шится, когда А станет больше 10:

L2: loop

A := A+1;

exit L2 when A > 10;

end loop L2;

Цикл for

Общая форма цикла for имеет следующий вид:

[loop_label:] for loop_index in range loop

sequential  statements

end loop [loop-label];

Индекс цикла loop_index автоматически описывается при использовании оператора цикла и не требует его предварительного декларирования. Индекс инициализируется первым значением из указанного диапазона range, после чего выполняются последо- вательные операторы (sequential statements). Индекс цикла может быть использован в последовательных операторах, но не может быть изменен в них. После выполнения одной итерации цикла индекс получает следующее значение из диапазона и последо- вательность операторов выполняется снова. Процесс продолжается до тех пор, пока индекс цикла не переберет все значения диапазона. После этого выполнение операто- ра цикла заканчивается и индекс становится недоступным. Для следующего цикла- индекс count_value в начале выполнения цикла будет инициализирован значением 0 и последовательность операторов в цикле будет выполнена 128 раз:

for count_value in 0 to 127 loop

count_out <= count_value after  5 ns;

end loop;

Цикл while

Выполнение операторов, размещенных в условном цикле while, будет продолжаться до тех пор, пока условие condition имеет значение истины:

[ loop_label: ] while condition loop

{ sequential_statement }

end loop [ loop_label ] ;

56. Оператор ветвления и селектор в vhdl.

ОПЕРАТОР IF. <<-------------Ветвление

Этот условный оператор в зависимости от заданных условий выполняет цепочки последовательных операторов, причем от условия зависит, которая из цепочек операторов выполняется. Упрощенный синтаксис оператора: \оператор if\::=if \условие 1\ then        {\последовательный оператор 1\}        [ { elsif \условие 2\ then        {\последовательный оператор 2\}]        [else        {\последовательный оператор 3\}] end if;  Каждое из условий должно быть выражением, вычисляющим результат булевского типа. При выполнении этого оператора условия проверяются последовательно друг за другом пока результат условия не будет true. Тогда выполняется соответствующая этому условию цепочка операторов и выполнение данного оператора if прекращается.

ОПЕРАТОР CASE. <<---------Селектор

Этот оператор разрешает выполнение одной из цепочек последовательных операторов в зависимости от значения выражения селектора. Его упрощенный синтаксис: \оператор case\::=case \простое выражение\ is        when \альтернативы\ => {\последовательный оператор\}        {when \альтернативы\ => {\последовательный оператор\}} end case ; \альтернативы\:= \альтернативa\{ | \альтернатива\} В выражении селектора \простое выражение\ должен вычисляться целый результат или значение перечисляемого или регулярного типа. Это должно быть простое выражение, а не, например, конкатенация. Каждая из альтернатив \альтернатива\ должна быть такого же типа, что и \выражение\ и представлена статическим выражением или диапазоном, например, 0 to4. Никакие два значения, получаемые из выражений альтернатив, не должны быть равны друг другу, т.е. множества альтернатив не перекрываются. Последней альтернативой может быть ключевое слово others, которое указывает на не перечисленные альтернативы. Если слово others не применяется, то в альтернативах должны быть перечислены все возможные значения, принимаемые в селекторе \выражение\.

Примероператора case:

variable sel, a: integer 0 to 9;

.............

case sel is

when 0 => a <= 0;

when1|2|3 => a <= 1;

when 4 to 7 => a <= 2;

when others => a <= 3;

endcase.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]