Дешифратор для семисегментного индикатора
SUBDESIGN 7segment
(
i [3..0] :INPUT;
a, b, c, d, e, f, g : OUTPUT;
)
BEGIN
TABLE
i [3..0] => a, b, c, d, e, f, g;
H "0" => 1, 1, 1, 1, 1, 1, 0;
H "1" => 0, 1, 1, 0, 0, 0, 0;
H "2" => 1, 1, 0, 1, 1, 0, 1;
H "3" => 1, 1, 1, 1, 0, 0, 1;
H "4" => 0, 1, 1, 0, 0, 1, 1;
H "5" => 1, 0, 1, 1, 0, 1, 1;
H "6" => 1, 0, 1, 1, 1, 1, 1;
H "7" => 1, 1, 1, 0, 0, 0, 0;
H "8" => 1, 1, 1, 1, 1, 1, 1;
H "9" => 1, 1, 1, 1, 0, 1, 1;
H "A" => 1, 1, 1, 0, 1, 1, 1;
H "B" => 0, 0, 1, 1, 1, 1, 1;
H "C" => 1, 0, 0, 1, 1, 1, 0;
H "D" => 0, 1, 1, 1, 1, 0, 1;
H "E" => 1, 0, 0, 1, 1, 1, 1;
H "F" => 1, 0, 0, 0, 1, 1, 1;
END TABLE;
END;
Это дешифратор для семисегментного индикатора.
Использование для переданных значений по умолчанию на языке AHDL.
Можно определить значение по умолчанию для узла или группы, которые будут автоматически использоваться для них, если в файле их значения не будут заданы. Язык AHDL позволяет присваивать значения узлу или группе неоднократно и, если произойдет конфликт, система автоматически будет использовать значение по умолчанию. Если значения по умолчанию не были заданы, то узлам и группам автоматически присваивается значение GND или все 0. Значение по умолчанию можно использовать и в условных операторах IF и CASE.
Рассмотрим пример:
Пусть на вход системы подается шестнадцатеричный одноразрядный код. На выходе системы должен появиться соответствующий ASCII код. А если одновременно поданы сигналы на несколько входов, то устройство должно выдавать «?».
SUBDESIGN Default 1
{ i [3..0]: INPUT;
ASCII_CODE OUTPUT;}
BEGIN
DEFAULTS
ASCII_CODE [] = b “01111111”; % “?”
END DEFAULTS
TABLE
I [3..0] => ASCII_CODE;
B “1000” => B “01100001”; % “a”
B “0100” => B “01100010”; % “b”
B “0010” => B “01100011”; % “c”
B “0001” => B “01100100”; % “d”
END TABLE;
END.
Реализация условной логики. Условная логика реализуется с помощью операторов IF Then и Саsе.
Оператор Case определяет список альтернативных вариантов, один из которых выполняется, если значение селектора (переменной, группы или выражения), стоящего за ключевым словом САSЕ, соответствует значению, стоящему за ключевым словом WHEN этого варианта. Оператор имеет следующие правила синтаксиса и семантики.
• Вначале идет ключевое слово САSЕ, да которым следует селектор, далее ключевое слово IS.
• Оператор завершается ключевым словосочетанием END САSЕ, за которым стоит символ (;).
• Тело оператора представляет собой список альтернативных вариантов, каждый из которых начинается ключевым словом ШНЕМ. Каждый вариант представляет собой набор констант, разделенных запятыми, за которым следует символ =>. За этим символом следует список операторов, разделенных символом (;). Последний вариант может начинаться ключевым словосочетанием WHEN ОТНЕRS.
• Если значение селектора равно одному из значений констант варианта, выполняются все операторы этого варианта. Если значение селектора не равно ни одной из констант, выполняются операторы за словосочетанием WHEN ОТНЕRS (если оно есть).
• Если оператор САSЕ используется для описания конечного автомата, словосочетание WHEN ОТНЕRS не может использоваться для выхода из неразрешенных состояний.
SUBDESIGN decoder
(
code [1..0] :INPUT;
out [3..0] :OUTPUT;
)
BEGIN
САSЕ code [ ] is
WHEN 0 => out [ ] = B "0001";
WHEN 1 => out [ ] = B "0010";
WHEN 2 => out [ ] = B "0100";
WHEN 3 => out [ ] = B "1000";
END CASE;
END;
Это описание дешифратора 2 4, который преобразует двухразрядный двоичный код в код «one hot» (четыре значения содержат каждое по одной единице). В зависимости от кода на входе активизируется одна из ветвей оператора САSЕ.
Оператор If Then определяет списки операторов, выполняемых в зависимости от значения булева выражения. Оператор имеет следующие правила синтаксиса и семантики.
• Вначале идет ключевое слово IF, за которым следует булево выражение, далее ключевое слово ТНЕМ и список операторов, разделенных символом (;).
• Далее между ключевыми словами ELSEIF и ТНЕМ может следовать дополнительное булево выражение, а за ТHEM - список операторов, выполняемых или нет в зависимости от значения этого выражения. Эта необязательная конструкция может повторяться многократно. Операторы за словом ТНЕМ выполняются, если булево выражение истинно, при этом последующая конструкция ELSEIF ТНЕМ игнорируется.
За конструкцией ELSEIF ТНЕМ может следовать ключевое слово ELSE, а за ним список операторов, которые выполняются, если ни одно из булевых выражений ни приняло истинного значения. Значения булевых выражений за ключевыми словами IF и ELSEIF вычисляются последовательно. Оператор завершается словосочетанием END IF и символом (;).
SUBDESIGN priority
(
low, middle, high :INPUT;
highest_level [1..0] :OUTPUT;
)
BEGIN
IF higtTHEN
highest_ level [ ] =3;
ELSIF middle THEN
highest_ level [ ] =2;
ELSIF low THEN
highest_ level [ ] =1;
ELSE
highest_ level [ ] =0;
END IF;
END;
Это шифратор приоритетов. На выходах устанавливается код, соответствующий приоритету входа, на котором имеется значение VСС. А это просто пример выбора вариантов действий:
IF a[ ] = = b [ ] THEN
c [8..1] = H "77";
addr [3..1] = f [3..1].q;
f [ ].d = addr [ ] +1;
ELSIF g3 $ g4 THEN;
f [ ].d = addr [ ];
ELSE
D=VCC;
END IF;
Дата добавления: 2021-09-07; просмотров: 422;