Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vhdl.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
396 Кб
Скачать
☆

Атрибуты

... а компьютер считался атрибутом буржуазного общества.

Атрибуты - это различные характеристики объектов VHDL. Они делятся на предопределенные и пользовательские. Мы рассмотрим и те и другие, хотя использование пользовательских атрибутов очень обременительно и мало что дает, но может кому-то и понравится.

Предопределенные атрибуты делятся на три группы - атрибуты сигналов, атрибуты массивов и атрибуты типов. Давайте мы их так и будем рассматривать. В таблице 1 приведены атрибуты сигналов, в таблице 2 - массивов, в таблице 3 - типов данных.

Таблица 1

Атрибут

Описание

S'active

TRUE, если было присвоение, но текущее значение еще прежнее

S'delayed(t)

Значение сигнала, существовавшее на время t перед вычислением данного атрибута

S'event

TRUE, если происходит изменение сигнала

S'last_active

Время от последнего присвоения значения сигналу до момента вычисления атрибута

S'last_event

Время от последнего изменения сигнала до момента вычисления атрибута

S'last_value

Последнее присвоенное сигналу значение

S'stable(t)

TRUE, если не происходило изменение сигнала в течение времени t

S'transaction

TRUE, если происходит очередное присвоение значения сигналу

S'quiet

FALSE, если было присвоение, но текущее значение еще прежнее

Таблица 2

Атрибут

Описание

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-го индекса массива А

Таблица 3

Атрибут

Описание

T'base

Базовый тип данных

T'left

Левая граница значений T

T'right

Правая граница значений T

T'high

Верхняя граница значений T

T'low

Нижняя граница значений T

T'pos(X)

Позиция значения Х в наборе значений Т

T'val(N)

Значение элемента в позиции N набора значений Т

T'succ(X)

Значение в наборе значений T, на одну позицию большее X

T'pred(X)

Значение в наборе значений T, на одну позицию меньшее X

T'succ(X)

Значение в наборе значений T, на одну позицию вправо от X

T'pred(X)

Значение в наборе значений T, на одну позицию влево от X

Несколько слов о пользовательских атрибутах в языке VHDL. Раньше было модно назначать пины микросхемы прямо в VHDL-коде через пользовательские атрибуты, и компилятор брал эти значения и минуя синтезатор передавал их разводчику. Но сейчас такое почти нигде не практикуется. Во первых Вы можете не знать на этапе написания VHDL-кода, какую микросхему примените, во вторых сам компилятор может не знать, каким разводчиком Вы воспользуетесь, потому что серьезные разработчики практически не пользуются программами "все в одном флаконе", да и нет сейчас таких фирм, чтобы сами все делали, все равно синтезаторы от одной фирмы, компиляторы от другой, разводчики от третьей, а симуляторы от четвертой, все это в одну оболочку собрали и обозвали, к примеру, КВАРТУС II.

Но в качестве примера такие атрибуты подойдут в самый раз:

  • entity example is

  •    port (res, clk : in std_logic;

  •    data_in : in std_logic_vector(3 downto 1);

  •    data_out : out std_logic_vector(3 downto 1)

  •    );

  •    attribute pinnum : string;-- Определили атрибут pinnum

  •    attribute pinnum of res signal is "5";-- Здесь и далее назначаем пины

  •    attribute pinnum of clk signal is "9";

  •    attribute pinnum of data_in signal is "11, 12, 13";

  •    attribute pinnum of data_out signal is "18, 20, 64";

  • end example;

Ну вот вроде и все про атрибуты в языке VHDL.

Так вот, чтобы поймать строб сигнала, нам как раз подходит атрибут S'event. Посмотрите в таблице 1. S'event дает TRUE, если происходит изменение сигнала, а это ни что иное как фронт сигнала (строб). Такой атрибут любой синтезатор воспримет правильно и подключит его ко входу синхронизации тригера, что нельзя сказать о других атрибутах, которые в основном используются для моделирования или носят вспомогательные функции.

Итак, мы выбрали атрибут, но этого мало. Еще нужно указать какой фронт ALE мы будем ловить. Для определенности, пусть нам нужно срабатывание по переднему фронту - ----/----. Тогда это будет соответствовать выражению clk'event and clk = '1'. Только не будем торопиться писать код, это мы сделаем в следующем разделе.

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