Дешифратор для семисегментного индикатора


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; просмотров: 323;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.