Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППЛИС_лаб2.doc
Скачиваний:
77
Добавлен:
05.06.2015
Размер:
1.31 Mб
Скачать

If in_f then

out[] = 3;

ELSIF in_s THEN

out[] = 2;

ELSIF in_t THEN

out[] = 1;

ELSE

out[] = 0;

END IF;

END;

Файл case.tdf, описывает дешифратор из 3 в 8 бит с использованием оператора CASE.

SUBDESIGN case

(

In[2..0] : input;

out[7..0] : OUTPUT;

)

BEGIN

CASE in[] IS

WHEN 0 => out[] = B"00000001";

WHEN 1 => out[] = B"00000010";

WHEN 2 => out[] = B"00000100";

WHEN 3 => out[] = B"00001000";

WHEN 4 => out[] = B"000100000";

WHEN 5 => out[] = B"001000000";

WHEN 6 => out[] = B"010000000";

WHEN 7 => out[] = B"100000000";

END CASE;

END;

В этом примере входной код шины имеет значения от 0 до 8. В операторе Case за символом => следует активизируемое уравнение. Например, если in[] равен 1, то выход out1 устанавливается в B"00000010".

6.3.3 Проектирование на языке ahdl с помощью таблиц истинности.

Язык AHDL позволяет описывать комбинационные схемы при помощи таблиц истинности.

Файл truth_table.tdf, является дешифратором описанным при помощи таблицы истинности.

SUBDESIGN truth_table

(

In[2..0] : input;

out0, out1, out2, out3, out4, out5, out6 : OUTPUT;

)

BEGIN

TABLE

i[3..0] => out0, out1, out2, out3, out4;

H"0" => 1, 1, 1, 1, 0;

H"1" => 1, 0, 0, 0, 0;

H"2" => 0, 1, 1, 0, 1;

H"3" => 1, 1, 0, 0, 1;

H"4" => 1, 0, 0, 1, 1;

H"5" => 1, 1, 0, 1, 1;

H"6" => 1, 1, 1, 1, 1;

H"7" => 1, 1, 0, 1, 0;

END TABLE;

END;

В приведенном примере описан выходной набор для всех 8 возможных комбинаций входных воздействий.

Файл truth_table_with_x.tdf, является примером когда при помощи таблицы истинности описывается не весь набор входных воздействий, а лишь те, которые влияют на состояние выходных сигналов.

SUBDESIGN truth_table_with_x

( in[10..0], en : INPUT;

out0, out1, bus[2..0] : OUTPUT; )

BEGIN

TABLE

en, in[10..0] => out0, out1, bus[];

1, B"00XX1XXX0XX" => 1, 0, B"000";

1, B"100XXX1XXX0" => 0, 1, B"001";

0, B"00000010101" => 0, 0, B"010";

1, B"00000010110" => 0, 0, B"011";

0, B"00010011011" => 0, 0, B"100";

END TABLE;

END;

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

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

При помощи оператора DEFAULT можно присваивать значения по умолчанию для операторов IF THEN, CASE и таблиц истинности.

6.3.4 Операторы If Generate, For Generate

Оператор If Generate содержит список операторов, активизирующийся в случае положительного результата оценки арифметического выражения.

Следующий пример демонстрирует использование оператора If Generate:

IF DEVICE_FAMILY == "FLEX8K" GENERATE

c[] = adder16a(a[], b[], cin);