Чтение онлайн

ЖАНРЫ

Искусство схемотехники. Том 2 (Изд.4-е)
Шрифт:

Рис. 8.77 представляет входное описание на языке CUPL. Здесь сигналы запуска сегментов а — g обозначают входы (положительная логика), а шестнадцатеричные разряды D0-D3 выходы (отрицательная логика). Язык CUPL позволяет определить промежуточные переменные, которые могут быть использованы в выражениях позднее. В этом случае удобно определить очевидные переменные от zero до next через возможные отображения цифры в терминах сегментных входов. Это просто большие термы произведений (И)

от входных сегментных переменных, которые вы можете прочесть из изображений цифр на рис. 8.76.

/** Inputs **/

PIN 1 = a; /* segment a */

PIN 2 = b; /* segment b */

PIN 3 = c; /* segment c */

PIN 4 = d; /* segment d */

PIN 5 = e; /* segment e */

PIN 6 = f; /* segment f */

PIN 7 = g; /* segment g */

/** Outputs **/

PIN 19 = !D3; /* msb of hex encode */

PIN 18 = !D2; /* */

PIN 17 = !D1; /* */

PIN 16 = !D0; /* 1sb */

/** Declarations and Intermediate Variable Definitions **/

zero = a & b & c & d & e & f & !g;

one = !a & b & с & !d & !e & !f & !g

two = a & b & !с & d & e & !f & g;

three = a & b & c & d & !e & !f & g;

four = !a & b & с & !d & !e & f & g;

five = a & !b & с & d & !e & f & g;

six = a & !b & c & d & e & f & g;

seven = a & b & с & !d & !e & !f & !g;

eight = a & b & c & d & e & f & g;

nine = a & b & с & !d & !e & f & g

# a & b & c & d & !e & f & g; /* two ways */

hexa = a & b & с & !d & e & f & g;

hexb = !a & !b & c & d & e & f & g;

hexc = !a & !b & !c & d & e & !f & g

# a & !b & !c & d & !e & f & !g; /* two ways */

hexd = !a & b & c & d & e & !f & g;

hexe = a & !b & !c & d & e & f & g;

hexf = a & !b & !c & !d & e & f & g;

/** Logic Equations **/

D3 = eight # nine # hexa # hexb # hexc # hexd # hexe # hexf;

D2 = four # five # six # seven # hexc # hexd # hexe # hexf;

D1 = two # three # six # seven # hexa # hexb # hexe # hexf;

D0 = one # three # five # seven # nine # hexb # hexd # hexf

Рис. 8.77. Спецификация преобразователя 7-сегментного представления в 16-ричное на языке CUPL.

Окончательно каждый двоичный выходной бит записывается как сумма (ИЛИ) цифровых переменных, при которых этот бит устанавливается. Мы используем уровни отрицательной логики, потому что 16L8 представляет матрицу И-ИЛИ-НЕ. Этим заканчивается логическая спецификация для языка.

Упражнение 8.29.

Проверьте для себя правильность нашей работы, записав некоторые из отображаемых символов, через заданные нами промежуточные переменные zero-next.

Язык CUPL сначала использует определение промежуточных переменных для записи выражений D0-D3 прямо в термах входных переменных a — f, работа, которая подобно ассемблеру PALASM должна исполняться нами изначально. В этом случае логические уравнения представлены в желательной И-ИЛИ-НЕ форме. Однако мы не закончили на этом, так как 16L8 (и все другие комбинационные ПМЛ) допускают не более 7 термов произведений для каждой суммы, тогда как мы имеем 9, 8, 9 и 10 соответственно для выходов D0-D3. Одним решением может быть связывание выхода через вторичный вентиль ИЛИ, для того чтобы получить желательное число термов произведений в сумме.

Эта обычно рассматриваемая форма плоха, так как она удваивает задержки распространения, хотя это не так важно в медленных устройствах, подобных этому. Лучшее решение — произвести логическую минимизацию, используя логическую эквивалентность по формуле Моргана, например.

Мы запускаем минимизатор CUPL, который выдает термы произведений (рис. 8.78).

** Expanded Product Terms **

D0 =>

a & b & c & d & !e & g

# a & b & с & !e & f & g

# a & с & d & !e & f & g

# b & с & !d & !e & !f & !g

# !a & !b & c & d & e & f & g

# a & !b & !c & !d & e & f & g

# !a & b & c & d & e & !f & g

D1 =>

a& !b & !c & e & f & g

# !b & c & d & e & f &g

# a & b & с & !d & e & f & g

# a & b & !c & d & e & !f & g

# a & b & c & d & !e & !f & g

# a & b & с & !d & !e & !f & !g

D2 =>

а & !b & !с & d & е & f

# а & !b & c & d & f & g

# а & !b & !с & е & f & g

# !а & b & с & !d & !е & f & g

# !a & b & c & d & e & !f & g

# !a & !b & !c & d & e & !f & g

# a & b & с & !d & !e & !f & !g

D3 =>

a & b & c & f & g

# a & !b & !c & d & e & f

# a & !b & !c & e & f & g

# !a & !b & c & d & e & f & g

# !a & b & c & d & e & !f & g

# !a & !b & !c & d & e & !f & g

D0.oe => 1

D1.oe => 1

D2.oe => 1

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