Врезка 10
SUBDESIGN default1 ( i[3..0] : INPUT; ascii_code[7..0] : OUTPUT; ) BEGIN DEFAULTS ascii_code[] = B"00111111";% ASCII question mark"?" % 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; |
Если значение входа совпадает с одним из значений в левой части таблицы, код на выходе приобретает соответствующее значение ASCII-кода в правой части таблицы. Если входное значение не совпадает ни с одним из (левых) табличных, выходу будет присвоено значение по умолчанию B”00111111” (вопросительный знак).
В приведённом на врезке 11 файле default2.tdf показано, как при многократном присваивании узлу разных значений возникает конфликт и как он разрешается средствами AHDL.
Врезка 11
SUBDESIGN default2 ( a, b, c : INPUT; select_a, select_b, select_c : INPUT; wire_or, wire_and : OUTPUT; ) BEGIN DEFAULTS wire_or = GND; wire_and = VCC; END DEFAULTS; IF select_a THEN wire_or = a; wire_and = a; END IF; IF select_b THEN wire_or = b; wire_and = b; END IF; IF select_c THEN wire_or = c; wire_and = c; END IF; END; |
В данном примере выход wire_or устанавливается равным a, b или c, в зависимости от входных сигналов select_a, select_b и select_c. Если ни один из них не равен VCC, то выход wire_or принимает значение по умолчанию, равное GND.
Если более одного сигнала (select_a, select_b или select_c) равны VCC, то wire_or равно результату логической операции ИЛИ над соответствующими входными сигналами. Например, если select_a и select_b равны VCC, то wire_or равно a ИЛИ b.
С сигналом wire_and производятся аналогичные действия, но он становится равным VCC, когда входные сигналы select равны VCC, и равен логическому И от соответствующих входных сигналов, если более, чем один из них равен VCC.
Рассмотрим реализацию логики с активным низким уровнем. Значение сигнала с низким активным уровнем равно GND. Такие сигналы могут быть использованы для управления памятью, периферийными устройствами и микропроцессорными чипами.
На врезке 12 приводится файл daisy.tdf, который представляет модуль арбитражной схемы для соединения гирляндой (daisy chain). Данный модуль делает запрос на доступ к шине для предыдущего (в гирлянде) модуля. Он получает запрос на доступ к шине от самого себя и от следующего (в цепочке) модуля. Доступ к шине предоставляется модулю с более высоким приоритетом.
