Атрибуты скалярного типа в языке VHDL.

Атрибутом называют особенное, долговременное свойство предмета. В языке VHDL сигналы, переменные и другие объекты, кроме своего значения, также имеют множество атрибутов. У каждого типа объектов есть несколько предопределенных атрибутов. Пользователь также может ввести ряд специальных атрибутов. Атрибуты бывают различного типа: атрибут - тип, значение, сигнал, функция, диапазон.

Атрибут объекта записывается как

\имя объекта\' \имя атрибута\.

Для скалярного типа Т предопределены следующие атрибуты:

T'left - самое левое значение множества элементов скалярного типа Т.
T'right - самое правое значение множества элементов скалярного типа Т.
T'high - наибольшее значение в множестве элементов скалярного типа Т.
T'low -наименьшее значение в множества элементов скалярного типа Т.
T'image(X) - функция строкового представление выражения Х типа Т.
T'value(Х) - функция значения типа Т от строкового представления Х.
T'pos(Х) - функция номера позиции элемента Х типа Т.
T'val(Х) -функция значения элемента типа Т стоящего в позиции Х.

Примерыатрибутов:

type st is (one,two,three); st'right = three, st'pos(three) = 2, st'val(1) = two.
positive'low = 1, positive'high =2147483647.
integer'value("1_000") =1000, integer'image(330) ="330".

Атрибуты регулярного типа в языке VHDL.

Атрибутом называют особенное, долговременное свойство предмета. В языке VHDL сигналы, переменные и другие объекты, кроме своего значения, также имеют множество атрибутов. У каждого типа объектов есть несколько предопределенных атрибутов. Пользователь также может ввести ряд специальных атрибутов. Атрибуты бывают различного типа: атрибут - тип, значение, сигнал, функция, диапазон.

Атрибут объекта записывается как

\имя объекта\' \имя атрибута\.

Для регулярного типа A предопределены следующие атрибуты:

A'left[(N)] - левое значение диапазона индексов по N-й размерности.
A'right[(N)] - правое значение диапазона индексов по N-й размерности.
A'high[(N)] - наибольшее значение диапазона индексов по N-й размерности.
A'low[(N)] - наименьшее значение диапазона индексов по N-й размерности.
A'range[(N)] - диапазон индексов по N-й размерности.
A'reverse_range[(N)] - обратный диапазон индексов по N-й размерности.
A'length[(N)] - протяженность диапазона индексов по N-й размерности.
A'ascending[(N)] - функция, равная true, если диапазон индексов по N-й размерности - возврастающий.

Примерыпримененияатрибутов:

type s2 is array(2 downto 1, 0 to 3)of integer;
s2'left(1) = 2, s2'right(2) = 3, s2'high(1) = 2, s2'low(2) = 0,
s2'range(2) = 0 to 3, s2'reverse_range(1) = 1 to 2, s2'length(2) = 4.

Циклы в VHDL.

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

[ loop_label: ] loop

{ sequential_statement }

end loop [ loop_label ] ;

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

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

Clk_1: process(Clock)

Begin

L1: loop

Clock <= notClock after5 ns; — период Clock равен 10 ns

endloop 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;

exitL2 whenA > 10;

endloop L2;

Цикл for

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

[loop_label:]for loop_indexin rangeloop

sequential statements

end loop [loop-label];

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

for count_valuein0to127 loop

count_out <= count_valueafter5 ns;

endloop;

Цикл while

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

[ loop_label: ] while conditionloop

{ sequential_statement }

end loop [ loop_label ] ;


Наши рекомендации