Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВМиС - бывшее АПЭВМ / АПЭВМ - конспект.doc
Скачиваний:
37
Добавлен:
15.09.2014
Размер:
599.55 Кб
Скачать

Конструкция языка ahdl

  1. Логические уравнения

Пример:

SUBDESIGN bode // описание интерфейса

(A0, A1, B: INPUT; OUT1, OUT2: OUTPUT;) // описание полюсов

BEGIN// описание логики

OUT1 =A1 & !A0; Безразлично с чего начинать

OUT2 =OUT1 #B; вAHDLоператоры работают параллельно

END;

Можно использовать внутренние переменные (именованные линии связи)

VARIABLE

INT:NODE; // внутренняя переменная

BEGIN

OUT2 = INT # B;

INT = !A0 & A1;

END;

LCELL– неудаленный буфер помещаем в ячейку.

SUBDESIGN bode

(A0, A1, B: INPUT; OUT2: OUTPUT)

VARIABLE

INT: NODE;

BEGIN

OUT2 = INT # B;

INT = LCELL (A1 & !A0);

END;

  1. Одномерные и последовательные группы.

Пример:

SUBDESIGN gr1

(A[3..0], B[4..1], c, d, e, f: INPUT; OUT[5..2]: OUTPUT;)

BEGIN

OUT[] = (A[] # B[1..4] & !(c, d, e, f));

END;

// (OUT5, OUT4, OUT3, OUT2) = ((A3, A2, A1, A0) # (B1, B2, B3, B4) & !(c, d, e, f));

  1. OUT5 = (A3 # B1) & !c;

  2. OUT4 = (A2 # B2) & !d;

  3. и т.д.

Двумерные группы.

Пример:

SUBDESIGN gr2

(A[2..1]: INPUT; R[1..0][2..1]: OUTPUT;)

BEGIN

R[][] = (A[1..2], A[2..1]);

END;

// (R1_2, R1_1, R0_2, R0_1) = (A1, A2, A2, A1);

// R1_2 = A1;

// R1_1 = A2;

// R0_2 =A2;

// R0_1 =A1;

  1. Таблица истинности.

Шаблоны языка вызываются TEMPLATESAHDL TEMPLATES

Truth Table Statement – шаблон таблицы истинности.

TABLE

Определяет форму таблицы

В ней через запятую перечислены аргументы и имена функций разделены =>. В последующих строках указываются наборы аргументов и значения функций.

_node_name, _node_name =>

_node_name, _node_name;

_input_value, _input_value =>

_output_value, _output_value;

- // -

- // -

END TABLE;

Пример приоритетного шифратора:

high

middle

low

1

-

-

1

1

A =

0

1

-

B =

1

0

0

0

1

0

1

Опишем это с помощью таблицы истинности

SUBDESIGN truth_table

(high, middle, low: INPUT; Y[1..0]: OUTPUT;)

BEGIN

TABLE

high,middle,low=>Y[]; // описание переменной и функции

1, x, x=> B “11”;

0, 1, x=> B “10”;

0, 0, 1=> B “01”;

0, 0, 0=> B “00”;

END TABLE;

END;

  1. Оператор IF THEN.

Оператор имеет три формы.

Шаблон 1-ой формы.

  1. IF _expression

THEN

_statement;

_statement;

  1. ELSIF _expression

THEN

_statement;

_statement;

  1. ELSE

_statement;

_statement;

END IF

Во 2-ой форме отсутствует 2.

В 3-ой форме отсутствует 2,3.

Пример:

SUBDESIGN if_then

(high, middle, low: INPUT; Y[1..0]: OUTPUT;)

BEGIN

IF high = = 1 THEN Y[] = 3;

ELSIF middle = = 1THEN Y[] = 2;

ELSIF low = = 1THEN Y[] = 1;

ELSE Y[] = 0;

END IF;

END;

  1. Оператор CASE.

Шаблон может быть представлен в двух формах.

1-ая форма:

CASE _expression IS

WHEN _constant_value =>

_statement;

_statement;

WHEN _constant_value =>

_statement;

_statement;

WHEN OTHERS =>

_statement;

_statement;

END CASE;

Пример:

- // - // - //описание интерфейса

BEGIN

CASE (high, middle, low) IS

WHEN B “1xx” => Y[] = 3;

WHEN B “01x” => Y[] = 2;

WHEN B “001” => Y[] = 1;

WHEN OTHERS => Y[] = 0

END CASE;

END;

  1. Базовые значения функции.

Базовые значения функции дают возможность определить значения булевых функций на ряде их аргументов не перечисленных в таблице истинности. Базовые значения задаются не явно по умолчанию или явно. По умолчанию задается базовое значение логического “0”.

Шаблон оператораDEFAULTS.

DEFAULTS

node_name = constant_value;

END DEFAULTS

Пример:

SUBDESIGN def1

(A[7..1], m: INPUT; R1, R2, P, SP[1..0]: OUTPUT;)

BEGIN

TABLE

m, A[] => R1, R2, P, SP[];

1, B “00xxxxxx” => 1, 0, 0, B “01”;

0, B “01001110” => 0, 0, 1, B “11”;

END TABLE;

END;

m A[]

1 00111111

1 10111111

Пример:

SUBDESIGN def2

(IN[3..0]: INPUT; AS[7..0]: OUTPUT;)

BEGIN

DEFAULTS AS[] = B “00111111”; END DEFAULTS;

TABLE

IN[] => AS[];

B“1000” =>B“01100001”;

B “1100” => B “01100010”;

B“1110” =>B“01100011”;

B “1111” => B “01100100”;

END TABLE;

END;

  1. Использование констант

Пример:

CONSTANT ADR_WIDTH = 8;

CONSTANT NUMBER_IO = 16;

CONSTANT IO_ADR = 2^ADR_WIDTH – NUMBER_IO;

CONSTANT Command = IO_ADR;

CONSTANT DAC = IO_ADR + 1;

CONSTANT ADC = IO_ADR + 2;

SUBDESIGN CONST_1

(ADR[ADR_WIDTH..1], R, W: INPUT; WR.C, RD.C, WR.D, RD.A: OUTPUT;)

BEGIN

IF ADR[] = = Command THEN

IF W = = 1THEN WR.C = VCC;

ELSIF R = = 1 THEN RD.C = VCC;

END IF;

END IF;

IF ADR[] = = DAC THEN

IF W = = 1THEN WR.D = VCC;

END IF;

END IF;

IF ADR[] = = ADC THEN

IF R = = 1THEN RD.A = VCC;

END IF;

END IF;

END;