на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Основы языка VHDL
. Прочие

Приоритет операций возрастает от категории 1 к категории 5. Операции одной категории имеют одинаковый приоритет и выполняются в последовательности: слева направо. Скобки используются для изменения последовательности исполнения.

Операции логические

Существует шесть логических операций: and, or, nand, nor, xor, not.

Операции применимы к типам BIT, BOOLEAN, к одноразмерным массивам BIT и BOOLEAN. При выполнении битовые значения `0' и `1' интерпретируются как булевские FALSE и TRUE. Результат имеет тот же тип, что и операнды. Операция not - унарная операция, она имеет приоритет категории 5.

Операции отношений

В языке VHDL имеются следующие операции отношений:

=, /=, <, <=, >, >=

Результатом выполнения любой операции отношений является булевское выражение BOOLEAN. Операции равенства ( = ) и неравенства ( /= ) допустимы со всеми типами, за исключением типа “файл”. Остальные четыре операции допустимы над скалярными типами (целочисленными, перечислимыми) или над массивами дискретного типа. Когда операндами являются массивы, то сравнение выполняется слева направо по одному элементу, например при следующем сравнении:

BIT_VECTOR'('0', '1', '1') < BIT_VECTOR'('1', '0', '1')

получен результат TRUE, т.к. первый элемент вектора слева меньше первого элемента вектора справа. Другой пример, если декларирован тип:

type MVL is ('U', '0', '1', 'Z' );

то результат сравнения:

MVL'( 'U' ) < MVL'( 'Z' )

будет TRUE, т.к. `U' находится левее `Z'.

Операции суммирования, вычитания, конкатенации

Операции имеют обозначения:

+, -, &.

Операнды, участвующие в операциях сложения ( + ) и вычитания ( - ) должны быть одного числового типа, результат оказывается того же типа. Операндами в конкатенации ( & ) могут быть или отдельные элементы или одномерные массивы. Результат выдается в виде массива, например при выполнении конкатенации:

`0' & `1'

образуется массив символов “01”, или еще пример:

`C' & `A' & `T'

дает “CAT”.

Операции умножения, деления

К этой группе оператций относятся: *, /, mod, rem.

Операнды умножения ( * ) и деления ( / ) должны быть одновременно либо целочисленного типа (integer) либо типа с плавающей запятой (floating point). Результат всегда того типа, что и операнды. Операция умножения может иметь один операнд физического типа, а другой - либо целочисленного, либо натурального типа. Результат выдается в виде физического типа.

В операции деления допустимо делить объект физического типа на целочисленный или натуральный. Результат - всегда физического типа. Деление физического типа на физический дает целочисленный результат.

Операции остатка ( rem ) и “деления по модулю” ( mod ) в качестве операндов могут иметь целочисленные типы и результат - целочисленного типа. Результат rem имеет знак первого операнда и определяется следующим образом:

A rem B = A - ( A / B ) * B

Результат mod имеет знак второго операнда и определяется следующим образом:

A mod B = A - B * N,

где N - некоторое целое.

Прочие операции

К их числу следует отнести: Abs, ** и другие. Операция выделения абсолютного значения ( abs ) совместима с любым числовым типом операнда. Операция возведения в степень ( ** ) операндом слева имеет целое или тип с плавающей точкой, а в качестве правого операнда (степень) - только целое.

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

К последовательным операторам (Sequential Statements) относятся операторы присваивания (Assignment Statements), условные операторы if (if Statements) и case (case Statements), операторы цикла (loop - next Statements) и другие. Рассмотрим некоторые из операторов этого типа

Оператор присваивания

Эти операторы делятся на операторы присваивания переменной (обозначается знаком :=) и операторы назначения сигнала (<=). В обоих случаях снаала вычисляется значение выражения, стоящее справа от знака равенства, а затем полученное значение присваивается переменной или сигналу, стоящим слева от знака. Например, оператор

abar := not a;

задает новое значение переменной abar, а именно - инверсное значение a.

Оператор

z <= not (a and b);

задает новое значение сигнала z, которое получается справа от знака <=.

Оператор if

В
общем случае if представляет собой последовательность выражений, оговаривающих условия. В качестве условий применимы любые выражения, при вычисление которых получается булевская величина (FALSE и TRUE).

if булевское_выражение then

последовательностные_выражения

[elsif булевское_выражение then

последовательностные_выражения ]

[else

последовательностные_выражения]

end if;

Выражение if вычисляется путем просмотра условий одного за другим, пока не будет найдено истинное. Затем вычисляется набор последовательностных выражений, связанных с этим условием. Предложений вида elsif в выражении if может быть от 0 и более. Может использоваться и предложение else. Выражения if могут вкладываться одно в другое без ограничений.

Рассмотрим простой пример.

if CTRL = '1' then

MUX_OUT<= "10";

else

MUX_OUT<= "01";

end if;

Если управляющий сигнал CTRL1 равен `1', то выходной сигнал MUX_OUT принимает значение "10", иначе MUX_OUT примет значение "01". На этом оператор if завершается.

Рассмотрим более сложный пример.

if CTRLI = '1' then

if CTRL2 = '0' then

MUX_OUT<= "0010";

else

MUX_OUT<= "0001";

end if;

else

if CTRL2 = '0' then

MUX_OUT <= "1000";

else

MUX_OUT <= "0100";

end if;

end if;

Если управляющий сигнал CTRL1 равен `1', тогда при условии (открывается вложенное if) CTRL2='0' выходной сигнал MUX_OUT<= "0010", иначе (т.е. при любых других значениях сигнала CTRL2) MUX_OUT<= "0001". Здесь завершается внутренний (вложенный) оператор if. Иначе (т.е. при любых других значениях сигнала CTRL1), если (открывается новый вложенный оператор if) CTRL2='0', тогда MUX_OUT<= "1000", иначе (т.е. при любых других значениях сигнала CTRL2) MUX_OUT<= "1000". Здесь завершается внутренний (вложенный) оператор if, а также завершается и наружный.

Оператор case

Оператор
case имеет следующий формат:

case выражение is

when вариант выбора => последовательностные_выражения

when вариант выбора => последовательностные_выражения

-- произвольное число вариантов выбора.

when others => последовательностные_выражения]

end case;

При вычислении выражения case выбирается одна из ветвей в соответствии со значением выражения. Выражение может иметь значения типа перечислимого или типа одномерного массива. Рассмотрим пример:

type WEEK_DAY is (MON, TUE, WED, THU, FRI, SAT, SUN);

type DOLLARS is range 0 to 10;

variable DAY: WEEK_DAY;

variable POCKET_MONEY: DOLLARS;

case DAY is

when TUE => POCKET_MONEY := 6; -- ветвь 1

when MON I WED => POCKET_MONEY := 2; -- ветвь 2

when FRI to SUN => POCKET_MONEY := 7; -- ветвь 3

when others => POCKET_MONEY := 0; -- ветвь 4

end case;

Переменная WEEK_DAY имеет значения перечислимого типа (дни недели). Переменная DOLLARS имеет целочисленные значения в диапазоне от 0 до 10. Ветвь 1 выбирается, когда день недели TUE. Ветвь 2 выбирается в случае когда дни недели MON или WED (вертикальная черта означает ИЛИ). Ветвь 3 покрывает значения от FRI до SUN, т.е. FRI, SAT и SUN. Ветвь 4 покрывает все оставшиеся значения, т.е. THU.

Оператор loop

Оператор
loop используется для задания итерации набора последовательных выражений.

[ярлык для loop: ] итерационная схема loop

последовательностные_выражения

end loop [ярлык для loop ] ;

Существует три итерационных схемы. Первая имеет форму:

for идентификатор in диапазон

Пример использования схемы:

FACTORIAL := 1;

for NUMBER in 2 to N loop

FACTORIAL := FACTORIAL * NUMBER;

end loop;

Тело loop исполняется N-1 раз, при этом идентификатор NUMBER в конце каждой итерации увеличивается на 1. Подразумевается, что идентификатор целочисленного типа и значения его лежат в диапазоне от 2 до N.

Второй итерационной схемой является следующая:

while булевскоe_выражение

Пример использования схемы:

J:=0;SUM:=10;

WH-LOOP: while J<20 loop -- loop имеет ярлык WH_LOOP

SUM := SUM * 2;

J:=J+3;

end loop;

Выражения в теле loop выполняются одно за другим и эта последовательность повторяется, пока условие J<20 истинно.

Третьей cхемой является конструкция, в которой итерационная схема не задается и выход из loop осуществляется с использованием выражений: exit, next или return, например:

SUM:=1;J:=0;

L2: loop --loop имеет ярлык

J:=J+21;

SUM := SUM* 10;

exit when SUM > 100;

end loop L2;

В этом примере выражение exit заставляет выходить из петли L2 когда SUM становится больше 100. При отсутствии выражения exit loop будет исполняться бесконечно.

1.7 Параллельные операторы

К параллельным операторам (Concurrent Statements) оператор process, оператор параллельного вызова процедуры, оператор конкретизаци компонента, оператор генерации (generate) и другие. Параллельные операторы определяют параллельное поведение схем, порядок их выполнения не зависит от их появления внутри блока.

Рассмотрим кратко оператор process. В общем виде он может быть записан следующим образом.

[имя процесса:][postponed] process [(список)]

раздел деклараций

begin

операторы

end process [имя процесса];

Имя процесса и ключевое слово [postponed] являются необязательными и часто отсутствуют. Список, находящийся после ключевого слова process, хотя и является необязательным, на практике используется достаточно часто для указания сигналов запуска. Перед ключевым словом могут находиться различного рода декларации типов, констант атрибутов и т. д.

Хотя процесс является параллельным оператором, он может содержать последовательные операторы. Внутри процессов не мегут быть декларированы сигналы.

1.8 Описание интерфейса устройства

В начале главы уже говорилось, что на моделируемое устройство в первую очередь следует посмотреть со стороны (“вид снаружи”) и для этого “черного ящика” определить интерфейс с внешним миром. Такая задача решается в VHDL декларацией интерфейса entity. Она задает имя описания, имена интерфейсных портов, направление передачи, тип портов. Порт - это сигнальная линия (шина), с помощью которой устройство (модель) взаимодействуют с окружающей средой. Например, для полусумматора (рис. 1.2) декларация будет выглядеть следующим образом:

Рис. 1.2. Полусумматор

entity half_adder is

port(a, b: in BIT; sum, cur: out BIT);

end half_adder;

Здесь описание с именем half_adder имеет два входных порта, a и b (in - означает входной порт), и два выходных порта, sum и carry (out - означает выходной порт). Тип портов определен как BIT - означает, что сигналы на линиях портов могут принимать значения: `0' или `1'.

Другим примером может послужить дешифратор, показанный на рис. 1.3.

entity dec2x4 is

port(a, b, enable: in BIT; z: out BIT_VECTOR (0 to 3));

end dec2x4;

Здесь описание с именем dec2x4 имеет три входных порта и четыре выходных. Выходные порты описаны как массив. BIT_VECTOR - это одномерный массив, диапазон задается параметром Z (0 to 3).

Рис. 1.3. Декодер 2х4

Каждый интерфейсный порт может функционировать в следующих режимах:

in - значение порта только считывается для использования внутри модели,

out - значение порта может только обновляться моделью, но не считывается,

inout - двунаправленный порт, значение считывается и обновляется моделью,

buffer - буферный порт, значение считывается и обновляется моделью, но источником сигнала может быть либо буфер, либо одиночный источник.

1.9 Архитектура

Архитектура (architecture body) моделирует взгляд на устройство “изнутри”. Устройство может рассматриваться под разными углами и описываться по-разному. Оно может предстать либо как композиция более простых модулей (структурный стиль моделирования), либо как набор параллельно исполняемых алгоритмов (стиль dataflow), либо описано как процесс последовательного исполнения операций (стиль “поведенческий”), либо может быть раскрыто сочетанием указанных стилей.

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.