Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Дешифратор для семисегментного индикатораСодержание книги
Поиск на нашем сайте
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;
Последовательностная логика Последовательностная логика (конечные автоматы с памятью) описывается в языке АНDL с помощью триггеров, регистров, машин состояний и библиотеки параметрических модулей (LMP).
Регистры. Регистр создается объявлением его в разделе VARIABLE или ссылкой в строке в разделе LOGIC. После определения регистра его можно подключить к другой логике при помощи его портов. Обращение к портам регистра производится по имени регистра и имени порта: <имя регистра>.<имя порта> В следующем примере сформирован восьмиразрядный регистр из триггеров D-типа, который защелкивает данные с входов d по положительному фронту синхросигнала при положительном активном значении на входе разрешения.
SUBDESIGN bur_reg ( clk, load, d [7..0]:INPUT; q [7..0] :OUTPUT;
) VARIABLE ff [7..0] :DFFE;
BEGIN ff [ ].clk = clk; ff [ ].ena = load; ff [ ].d = d [ ]; q [ ] =ff [ ].q; END;
Первое уравнение логической секции соединяет вход тактового сигнала проекта с тактовыми входами триггеров. Во втором уравнении подключается разрешающий сигнал, в третьем уравнении подключаются входы, а в четвертом выходы. Altera рекомендует использовать в качестве тактирующего глобальный синхросигнал. Можно объявить выходы проекта как D-триггеры в разделе VARIABLE. Это дает экономию за счет использования триггеров на выводах микросхемы.
SUBDESIGN reg_out ( clk, load, d [7..0]:INPUT; q [7..0] :OUTPUT; ) VARIABLE q [7..0] :DFFE; % выходы объявлены как регистры %
BEGIN q [ ].clk = clk; q [ ].ena = load; ff [ ].d = d [ ]; q [ ] =d [ ]; END;
Счетчики. Счетчики обычно реализуются на D-триггерах с использованием оператора IF. В следующем примере реализован 16-разрядный загружаемый счетчик со сбросом.
SUBDESIGN ahdlcnt ( clk, load, ena, clr, d[15..0]: INPUT; q [15..0] :OUTPUT; ) VARIABLE count[15..0] : DFF; BEGIN count [ ].clk = clk; count [ ].clm =!clr; IF load THEN count [ ].d = count [ ].q+1; ELSE count [ ].d = count [ ].q; count Q.d = count)].q; END IF; q [ ] = count [ ]; END;
|
||||||
Последнее изменение этой страницы: 2021-09-26; просмотров: 179; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.86.53 (0.011 с.) |