Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_МОД.doc
Скачиваний:
21
Добавлен:
20.09.2019
Размер:
3.22 Mб
Скачать

20. Типы данных в vhdl

Перечисляемые типы данных:

type <имя> is <элементы перечисления>

type T1 is (‘1’,’2’,’3’)

type COM is (‘ADD’,’SUB’,’MUL’)

BIT {0,1}

BOOLEAN (TRUE, FALSE)

Битовый тип обычно используется при описании сигналов и определяет уровни сигналов 0 и 1. BOOLEAN используется в логических выражениях операторов if, case и т.д.

Числовой тип:

Обычно имеет целое или вещественное значение. Достаточно часто вещественный тип не поддерживается компилятором.

type <имя> is <диапазон значений>

type T35 is range 1 to 100

T06 is range 100 downto 1

Физический тип:

Обычно используется для описания физических величин моделируемого процесса.

Сложный тип:

Массивы:

type <имя> is array <диапазон> of <тип>

type word is array (31 downto 0) of BIT

word (21) – обращение к 21-му биту. VHDL допускает описание многомерных массивов.

21. Понятие сигнала в vhdl. Средство описания сигналов.

Классы объектов VHDL включают:

  1. константы

  2. переменные

  3. сигналы

Константы – это объект, значение которого не меняется

Constant <имя> : <тип> : = <начальное значение>

Constant Forse : MLT : = (‘3’)

Перед определением константы должен быть определен тип.

MLT – перечисляемый тип

При работе с битовыми массивами часто используется тип BIT_VECTOR

Constant REG : BIT_VECTOR : = ‘00011111’

Начальные значения могут быть заданы в следующих формах:

  1. Десятичные

  2. Строковые

  3. Строка бит

  4. Символьная

  5. Базовая

Если необходимо указать систему счисления: 2#1001#, 16#ABCD#, 10#99#

Символьная константа задает перечисление отдельных символов ASCII взятых в апострофы ‘A’, ‘a’, ‘c’.

Для задания строковых констант строка записывается в апострофах “REG”

Переменные – объект, значение которого может меняться в процессе моделирования.

Variable <имя> : <тип> : = <начальное значение>

При моделировании устройств целесообразно использовать понятие сигнала. С ним связано задание входных и выходных значений. Сигналы можно использовать для задания моделируемых точек объекта. Принадлежность к сигналу определяется конструкцией: <=

c <= not (a and b)

signal <список сигнала> : <тип> : = <начальное значение>

Безусловное назначение сигнала

Формат: <имя сигнала> <= <выражение>

Пример: описать дешифратор на два входа и 4 выхода.

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

Entity DECODER (дешифратор) is

Port (A0, A1, E: in BIT;

D0, D1, D2, D3: out BIT);

End DECODER

Architecture DECODER.ARH of DECODER is

BEGIN

D0<=not A0 and not A1 and E

D1<=not A0 and A1 and E

D2<=A0 and not A1 and E

D3<=A0 and A1 and E

END DECODER_ARH

Написание программы в ряде случаев упрощается с битовыми строками:

Entity DECODER is

Port (A: in Bit_vector (1 down to 0);

E: in BIT;

D: OUT Bit_vector (0 to 3));

End DECODER

Architecture DECODER.ARH of DECODER is

BEGIN

D(0)<=not A(0) and not A(1) and E;

D(3)<=A(0) and A(1) and E;

End DECODER_ARH

Условное назначение сигнала

В ряде случаев назначение значения сигнала должно осуществляться с использованием сигнала

<имя сигнала><=<выражение 1> When <условие 1> Else <выражение 2>

Проверяется условие 1 и если оно истинно, то выполняется выражение 1. Выражение может выполнять серию соединенных знаками логических операций. Пример:

Интерфейсный блок

Architecture DECODER.ARH of DECODER is

BEGIN

D(0)<=’1’ When A=”00” and E=’1’ Else ‘0’;

………………………………………………...

D(3)<=’1’ When A=”11” and E=’1’ Else ‘0’;

End DECODER_ARH

Следует учесть, что если значение определено как битовое, то оно заключается в одинарные кавычки (1 или 0), если же используется определение битового вектора, то его значение берется в двойные кавычки.

Пример на описание мультиплексоров:

Entity MUX is

Port (D: in bit_vector (3 down to 0);

A: in bit_vector (1 down to 0);

F: out bit);

End MUX

Architecture MUX_ARH of MUX is

Begin

F<=D(0) When A=”00” Else

D(1) When A=”01” Else

D(2) When A=”10” Else

D(3) When A=”11”

End MUX_ARH