Конструкция языка ahdl
Логические уравнения
Пример:
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;
Одномерные и последовательные группы.
Пример:
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));
OUT5 = (A3 # B1) & !c;
OUT4 = (A2 # B2) & !d;
и т.д.
Двумерные группы.
Пример:
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;
Таблица истинности.
Шаблоны языка вызываются TEMPLATESAHDL TEMPLATES
Truth Table Statement – шаблон таблицы истинности.
TABLE
Определяет форму таблицы
В ней через запятую перечислены аргументы
и имена функций разделены =>. В
последующих строках указываются наборы
аргументов и значения функций.
_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;
Оператор IF THEN.
Оператор имеет три формы.
Шаблон 1-ой формы.
IF _expression
THEN
_statement;
_statement;
ELSIF _expression
THEN
_statement;
_statement;
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;
Оператор 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;
Базовые значения функции.
Базовые значения функции дают возможность определить значения булевых функций на ряде их аргументов не перечисленных в таблице истинности. Базовые значения задаются не явно по умолчанию или явно. По умолчанию задается базовое значение логического “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;
Использование констант
Пример:
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;