Главная > Схемотехника > Искусство схемотехники, Т.2
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

8.27. Последовательностные ПМЛ

Комбинационные (только на вентилях) ПМЛ, которые мы рассматривали выше в разд. 8.15, входят в большое семейство, которое включает устройства с различным числом регистров -типа на кристалле (называемые «регистровые ПМЛ»). Типичный из этих ПМЛ - -показан на рис. 8.74. Программируемая-И/фиксированная ИЛИ матрица типовых комбинационных ПМЛ генерирует входные уровни для 8 синхронно тактируемых регистра -типа с выходами на 3 состояния; выходы регистра (прямой и инверсный) как и стандартные входные контакты доступны как входы логической матрицы. Если вы посмотрите снова на рис. 8.57, вы увидите, что ПМЛ с регистрами - это элемент последовательностной схемы общего назначения с определенными ограничениями на число регистров и вентилей, и вы можете конструировать, что хотите, но только в этих пределах. Например, вы можете сделать сдвиговой регистр или счетчик, или сразу оба. На практике вы можете сделать некоторый кусок логики как часть большой схемы, для которой альтернативой является дискретная логика, построенная на вентилях и триггерах. Посмотрим некоторые примеры.

Карты перемычек, создаваемые вручную.

Простые проекты могут конструироваться в ПМЛ посредством изображения логики, затем соответствующий образ преобразуется в массив перемычек для программатора ПМЛ. Так, например, предположим, что мы хотим получить -входовый мультиплексор с защелкиваемыми выходами. Мы можем записать логическое уравнение для мультиплексной части (т. е. до -входов триггера) в виде

где входы 50 и -адреса, выбирающие входы соответственно И или ИЛИ.

Регистровые ПМЛ легко реализуют это с фиксацией результата. Заметим, что мы использовали ИЛИ -входовых И, предпочитая это первоначальному декодированию выбранного адреса на двухвходовых вентилях И, так как мы вынуждены использовать сумму произведений (это также быстрее). Окончательная схема показана на рис. 8.75 (заметим, существует тонкость для этой схемы, см. подразд. «Выбросы» в конце этого раздела).

PALASM.

Для схем какой-либо разумной сложности необходимы некоторые методы логического проектирования ПМЛ. Например, ПМЛ имеет 2048 перемычек, а сложный проект может потребовать, чтобы вы прожгли несколько сотен из них, и если вы не необычайно обязательны, то маловероятно, что достигните цели вручную, корректно определив их для ПМЛ-программатора.

PALASM (PAL Assembler, торговый знак фирмы Monolithic Memories ), разработанный фирмой Monolithic Memories (впервые создавшей ПМЛ), был одним из первых инструментов. Он берет логическое выражение, подобное тому, которое мы писали выше, и преобразует его в карту перемычек. Производится это посредством программы, но без логической минимизации, поэтому вы должны проделать эту трудную работу сами. Однако PALASM позволяет вам вводить набор тестовых состояний (называемых тестовыми векторами), дающих возможность получить на выходах то, что должно быть результатом ваших логических спецификаций.

Рис. 8.74. Регистровая ПМЛ 16R8 имеет 8 внешних входов, 8 выходов, линии синхронизации и управления 3-м состоянием. Выходы регистра можно также использовать как входы матрицы И (с разрешения фирмы Advanced Micro Devices, Калифорния.).

Рис. 8.75. 4-входной мультиплексор с фиксацией, выполненный на ПМЛ.

Таким образом вы можете отлаживать ваши уравнения перед изготовителем ПМЛ. PALASM широко используется. Существуют листинги исходных текстов (кодов) на языке Фортран, которые могут затем послать карты перемычек для ПМЛ-программаторов (в стандартном -формате) через последовательный порт. Многие ПМЛ-программаторы со встроенными микропроцессорами включают резидентный PALASM такие, например, как у фирм Data , Digiles, Stag, и Structured Resign. Остается только подключить терминал, и вы в работе.

Языки ABEL и CUPL.

PALASM-помощник, но серьезному пользователю ПМЛ необходимо большее. Языки логического программирования высокого уровня подобно языкам ABEL (фирмы Data ) и CUPL (фирмы Logical Devices) делают программирование ПМЛ (и ПЛМ) легкой работой. Они позволяют вам задавать логику либо через логические булевы уравнения, либо через таблицы истинности, для последовательностных схем вы задаете состояния и правила перехода. Подобно какому-либо хорошему языку высокого уровня, вы можете определять массивы (для набора сигналов, т. е. адресной шины), выражения и промежуточные значения, затем использовать их в других выражениях.

Эти языки достаточно «умны» для преобразования таблиц истинности в логические выражения с последующей минимизацией их (также, как и логических булевых выражений) в логически идентичные, окончательный результат получается в форме, которая соответствует логическим ограничениям устройства (т. е. сумма произведений для ПМЛ). Вместо записи сверху вниз явнозаданных логических выражений для ряда значений вам достаточно записать что-то вроде ADDR: , которое будет преобразовано в соответствующую логику. Эти языки также позволяют вам определять тест-векторы, с помощью которых тестируется ваша схема, кроме того, тест-векторы могут также посылаться в программатор для проверки запрограммированного кристалла. Наконец, эти языки позволяют получить стандартную документацию на законченный кристалл, что существенно, если вы захотите отлаживать приспособление с этими самодельными устройствами.

С целью конкретизации этих идей, давайте рассмотрим оба примера проектирования как последовательностных, так и комбинационных схем, используя язык CUPL.

Пример использования языка проектирования преобразователя из -сегментного кода в шестнадцатеричный (комбинационная логика). Наступает время, когда вы захотите использовать желаемый БИС-кристалл, который выполняет определенную функцию (например, калькулятор или хронометр), как часть создаваемого вами устройства. Беда в том, что эти БИС-кристаллы обычно имеют выходы для прямого управления -сегментным индикатором, который предпочтительней, чем шестнадцатеричные (или двоичные) выходы, которые вы хотите получить.

Рис. 8.76. Коды -сегментного индикатора.

Давайте спроектируем кристалл-шифратор, который преобразует -сегментный код обратно в -битовый двоичный, такая функция не реализуется как стандартная микросхема (хотя существует дешифратор из семисегментного кода в двоично-десятичный, ).

Входы представляют отдельные сегментные сигналы, которые всегда помечаются символами (рис. 8.76). На рис. 8.76 показано, как цифры представляются на -сегментном индикаторе. Заметьте, что возможно двоякое представление «9» и , оба из которых должны корректно восприниматься вашей логикой. Для ПМЛ мы выбираем -контактная комбинационная часть которой логически была показана на рис. 8.45.

Рис. 8.77 представляет входное описание на языке CUPL.

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

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

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

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

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

Рис. 8.78. Преобразователь -сегментного представления в -ричное с минимизированными термами произведения.

Мы запускаем минимизатор CUPL, который выдает термы произведений (рис. 8.78). Взгляните, все удовлетворяет ограничению «7 произведений». CUPL также рисует для вас карту перемычек (рис. 8.79). Конечно, вы не программируете ПМЛ так, а используете вместо этого прямую загрузку универсального JEDEC программирующего формата. В этом примере язык CUPL, очевидно, делает трудную задачу простой.

Пример использования языка CUPL для программирования автомата-продавца (последовательная схема).

Рис. 8.79. Карта перемычек преобразователя -сегментного представления в -ричное.

Произвольная машина состояний (разд. 8.18) имеет набор состояний и правил перехода для движения между этими состояниями по каждому фронту синхроимпульса. Правила перехода зависят от текущего состояния и от частной комбинации входных уровней, существующих на следующем фронте. Вы можете соорудить машину состояний на программируемой логике, содержащей регистры, если а) существует достаточное число битов в регистре для представления всех возможных состояний (например, с -разрядным регистром вы можете иметь до 16 состояний), и б) существует достаточное число входов и логических вентилей для реализации правил перехода.

Рис. 8.80. Диаграмма состояний торгового автомата.

Как пример, давайте спроектируем регистровую ПМЛ для диаграммы состояний на рис. 8.80. Это - торговый автомат, предназначенный для выдачи бутылки сладкой шипучей жидкости, когда опущено 25 цент или более. Существует некоторый вид монетного интерфейса, который «заглатывает», распознает монету и посылает на наш ПМЛ -битовый входной сигнал , СО), действительный для одного такта, показывающего монету, которую опустили (01-5 цент, монета, монета, - нет монеты). Задача машины состояний добавлять к общему вкладу и формировать выход, называемый «бутылка», когда опущено достаточно монет.

Рис. 8.81 показывает спецификацию, выполненную в синтаксисе машины состояний языка CUPL. Как и прежде, мы начнем с определения входных - выходных контактов. Заметим, что мы добавили вход reset (сброс) так, чтобы вы могли перейти к начальному состоянию (нет монеты). Затем мы определим состояния, потом правила перехода между ними. Если какие-либо выходы, либо регистровые, либо комбинационные, необходимо генерировать в течение состояний или переходов между состояниями, они определяются в то же самое время.

Рис. 8.81. Спецификация торгового автомата на языке CUPL.

(см. оригинал)

Рис. 8.82. Выход CUPL для торгового автомата.

В этом примере выход «бутылка» специфицируется как раздельный выходной регистр, т. е. выходные состояния дешифрировать не нужно. Фактически нужен только выход, а биты машины состояний могут быть представлены во внутренних регистрах, которые не генерируют прямо выводы; некоторые программируемые логические устройства имеют также внутренние регистры в дополнение к обычным выходным регистрам.

Заметим, что вы должны определить точно переход из некоторого состояния в себя, также, как мы делали для входа «нет монеты». Неопределенное условие безусловно сбрасывает состояние во все нули. Это происходит потому, что эти условия собираются в комбинационную логику для выставления на -входы регистров и, таким образом, если условие не удовлетворяется, то соответствующий -вход не подтверждается. Рис. 8.82 показывает вывод из языка CUPL. Ничего очевидного или простого в логике, поскольку и состояние автомата и входящие переменные (С0-1) определены в виде двоичных чисел, а логика работает по отдельным битам. Таким образом, результирующая логика не сильно связана с первоначальным описанием состояний (рис. 8.81). Фактически, конкретный выбор состояний (возрастающий двоичный код 0-5) мог бы быть различным, это полностью изменило бы результирующую логику.

В этом случае этот пример легко укладывается в ограничениях ПМЛ термов произведений на регистр): если это не так, мы могли бы попытаться переопределить состояния, что часто приводит к более простой логической реализации. Заметим, что вход сброса действует, заменяя безусловность всех -входов, которую мы задали посредством нашего задания промежуточных переменных «нет монеты», «5 цент» и т.д.

Упражнение 8.30. Проконтролируйте правильность конечных логических выражений, посредством проверки нескольких правил перехода. Вы должны испытать все переходы от 00, или от «5 центов», или «10 центов» к какому-либо другому состоянию.

Упражнение 8.31. Хорошие торговые автоматы имеют размен. Перерисуйте диаграмму состояний (рис. 8.80) так, чтобы были состояния (сколько?) для каждого возможного числа разменов. Модифицируйте правила перехода соответственно. Гарантируйте, чтобы ваш усовершенствованный автомат выполнял свою основную работу - выдачу бутылок.

Упражнение 8.32. Нарисуйте диаграмму состояний и правил перехода для электронного комбинационного замка. Он должен открываться только тогда, когда четыре цифры набраны в правильном порядке. Какая-либо ошибка должна сбрасывать его.

<< Предыдущий параграф Следующий параграф >>
Оглавление