Проектирование устройств сопряжения (1083567), страница 13
Текст из файла (страница 13)
Исходя из этих соображений, мы будем разрабатывать 56-разрядный контроллер с побайтным управлением направления передачи. Как показывает практика, этого хватает для большинства возникающих задач.
При проектировании любой схемы УС можно рекомендовать следующий порядок. Сначала мы должны хотя бы приблизительно оценить функции интерфейсной части УС исходя из назначения УС (то есть какие режимы обмена с магистралью будут использоваться, какое требуется количество адресов, нужны ли прерывания, прямой доступ и т.д.). Это позволит наложить на операционную часть УС определенные ограничения.
Вторым этапом проектирования должна быть детальная разработка операционной части с учетом особенностей обмена с компьютером и с внешним устройством. И в заключение (третий этап) надо опять же вернуться к интерфейсной части УС, детализировав ее, приспособив для обмена с уже готовой операционной частью. Обычно этих трех этапов хватает, хотя в ряде случаев их может понадобиться и больше (то есть придется опять же вернуться к операционной части и т.д.).
Итак, в соответствии с этим алгоритмом, сначала сформулируем требования к интерфейсной части. При побайтном управлении внешними линиями имеет смысл ограничиться 8-разрядным обменом (скорость передачи информации здесь не очень важна), и тогда для обмена данными потребуется 7 адресов в адресном пространстве ввода/вывода. Помимо этого в УС надо записывать 7 бит управляющего слова, которое будет определять направление передачи информации для каждого из семи внешних 8-разрядных портов. Поэтому нашему УС необходимо в целом 8 адресов. Нужны ли здесь прерывания? Желательны, но не обязательны: можно ограничиться и опросом флага готовности. Прямой доступ не нужен совершенно.
Теперь переходим к операционной части. Начнем с конца, то есть с внешнего разъема (кстати, очень распространенный прием проектирования). Так как все внешние линии нашего УС двунаправленные, не исключена вероятность того, что на одну линию с разных концов (от контроллера и от внешнего устройства) будут поступать сигналы различных уровней. Например, выходной каскад нашего УС выдает сигнал логической единицы, а от внешнего устройства приходит сигнал логического нуля, или наоборот. В худшем случае это может привести к выходу из строя микросхем УС или внешнего устройства. В лучшем случае на линии будет не тот уровень, который мы хотим, или этот уровень будет нестабильным. Особенно типична такая ситуация при использовании данного контроллера для диагностики и отладки цифровых устройств. Поэтому здесь необходима какая-то защита, которая может быть реализована тремя взаимодополняющими методами:
- при включении питания компьютера все внешние линии контроллера должны переходить в состояние приема и только потом программно устанавливаться в нужный режим;
- необходимо программно контролировать правильность выдаваемой информации, причем желательно читать именно сигнал, приходящий от внешнего устройства, сравнивая который с выдаваемым сигналом, можно обнаружить конфликт и принять меры по его ликвидации (например, переключить линию на прием, подать нужные сигналы на внешнее устройство, проинформировать оператора и т.д.);
- требуется ограничить уровни выходных токов внешних линий контроллера (наиболее простое решение здесь — последовательно включенные во внешние линии резисторы с малым сопротивлением).
Выходные сигналы разрабатываемого УС должны быть достаточно мощными, чтобы работать с внешними устройствами, находящимися на расстоянии нескольких метров (хотя бы до 2 м) от компьютера. В режиме приема внешних сигналов линии должны обеспечивать малые входные токи, чтобы не перегружать внешние устройства. Вот, собственно, и все требования к операционной части УС (случай мы рассматриваем простейший). Исходя из них, операционная часть может выглядеть следующим образом (рис. 2.38).
Выходные сигналы формируются регистрами с тремя состояниями выхода КР1533ИР37, каждый из которых может находиться в активном или пассивном состоянии в зависимости от значения соответствующего бита в управляющем слове, хранящемся в регистре на базе КР1533ТМ8. На внешний разъем выходные сигналы подаются через защитные резисторы с сопротивлением около 100 Ом. Для чтения состояний внешних линий используются однонаправленные буфера КР1533АП5, выходы которых объединяются для мультиплексирования читаемых данных. Таким образом, в случае конфликта при чтении по шине выходных данных мы получаем именно сигналы, приходящие от внешнего устройства. Сравнивая их с выдаваемыми сигналами, мы можем детектировать конфликтную ситуацию. Конечно же, использование защитных резисторов несколько снижает помехоустойчивость и нагрузочную способность, но настолько незначительно, что, как показывает практика, обычно этим можно пренебречь.
Рис. 2.38. Операционная часть универсального контроллера параллельного обмена информацией.
Управляющие сигналы операционной части используются для записи выходных данных (-STR W0 ... -STR W6), для чтения входных данных (-STR R0 ... -STR R6), для записи управляющего слова (-STR W7), определяющего направление передачи каждого из семи 8-разрядных портов, а также для перевода всех внешних линий в состояние приема при включении питания (по сигналу -RESET). Именно эти сигналы должна формировать интерфейсная часть, к которой мы теперь возвращаемся.
Одно из возможных решений интерфейсной части показано на рис. 2.39. Селектор адреса выполнен на ППЗУ КР556РТ4 и дешифраторах КР1533ИД7. При этом свободный адресный вход ППЗУ используется для переключения селектируемых адресов. Входные данные УС буферируются с помощью КР1533АП5. В адресном пространстве устройств ввода/вывода компьютера наше УС занимает зону в 8 адресов, семь из которых используются для чтения/записи 56 внешних линий, а один — для записи слова состояния. Проинвертированный магистральный сигнал RESET DRV задает начальную конфигурацию внешних линий (все — на прием). Нетрудно подсчитать, что в данном варианте наше УС включает в себя 21 микросхему.
Рис. 2.39. Интерфейсная часть универсального контроллера параллельного обмена информацией.
Схема УС может быть дополнена узлом обработки прерываний от внешних устройств. Пусть УС должно принимать два сигнала прерываний и формировать один сигнал требования прерывания IRQ. При этом надо предусмотреть возможность для компьютера определить, какое именно прерывание из двух внешних поступило на УС, для чего удобно использовать незадействованный сигнал -STR R7. Возможное решение такой схемы обработки прерываний — на рис. 2.40. Внешними прерываниями являются положительные фронты сигналов INT1 или INT2, перебрасывающие триггеры, выходы которых формируют IRQ. Для чтения номера пришедшего прерывания использован буфер КР1533ЛП8, открывающийся сигналом -STR R7. Этим же сигналом триггера сбрасываются в исходное состояние.
Рис. 2.40. Интерфейсная часть универсального контроллера параллельного обмена информацией.
Здесь же стоит упомянуть о еще одном возможном дополнении схемы нашего УС. Если на внешний разъем вывести стробы записи и чтения (STR R и STR W), то в ряде случаев это позволит значительно ускорить обмен с внешним устройством, которое сможет, например, записывать в свои внутренние регистры приходящие данные по стробу STR W.
Как уже отмечалось, с помощью предлагаемого УС и соответствующего программного обеспечения можно реализовать практически любой стандартный интерфейс или даже несколько интерфейсов одновременно (Centronics, IEEE 488, RS — 232 и т.д.). Необходимо только учитывать ограничение на быстродействие эмулируемого интерфейса, связанное с быстродействием компьютера. Точно так же можно организовать свой интерфейс, реализующий протокол, наиболее соответствующий решаемой задаче. При этом все УС можно разместить во внешнем конструктиве, а в компьютер установить только разработанный контроллер. Такой подход обеспечивает все преимущества вынесения УС из компьютера: снятие ограничений на сложность и количество УС, снижение наводок и помех и т.д., хотя и увеличивает стоимость системы в целом. По сравнению со стандартными интерфейсами компьютера в данном случае гораздо проще достигается сопряжение с большим количеством УС (все форматы и протоколы мы выбираем самостоятельно).
2.1.10. Одноплатный логический анализатор
Вторым примером схемы УС, который мы рассмотрим, будет котроллер, применяемый при отладке цифровой аппаратуры — логический анализатор, имеющий в своем составе многоразрядное буферное ОЗУ с узлами управления и синхронизации. Эту схему мы не будем описывать так же подробно, как первую.
Несколько вводных слов. Логический анализатор по своему назначению близок к осциллографу, так как он позволяет наблюдать на экране временные диаграммы сигналов. Но в отличие от обычного (не цифрового) осциллографа логический анализатор работает только с цифровыми двухуровневыми (реже трехуровневыми) сигналами, имеет большое количество входных линий (обычно от 16 до 64), работает в режиме однократного запоминания временных диаграмм (как запоминающий осциллограф) и имеет возможность предпусковой регистрации. Последнее требует некоторых пояснений (рис. 2.41).
Рис. 2.41. Предпусковая регистрация.
В отличие от обычных осциллографов, в которых развертывание формы входного сигнала начинается в момент запуска (то есть прихода внешнего сигнала запуска или превышения входным сигналом заданного уровня напряжения), здесь точка запуска может быть и в начале, и в середине, и в конце окна регистрации. Под запуском здесь понимается временная привязка процесса регистрации к исследуемому процессу. Запуском может служить, например, появление в потоке данных заданного кода или переход (фронт) на одной из входных линий. В этом случае оператор может видеть не только то, что происходило после запуска (как в случае с обычным осциллографом), но и то, что происходило до него.
Логические анализаторы делятся на синхронные (или анализаторы логических состояний) и асинхронные (или анализаторы временных диаграмм). Синхронные анализаторы работают от тактового генератора исследуемой схемы и фиксируют только временные сдвиги, кратные его периоду, а, следовательно, выявляют только нарушения в логике работы схемы. Асинхронные анализаторы работают от собственного внутреннего тактового генератора, поэтому они измеряют абсолютные значения временных сдвигов и могут выявлять ошибки из-за неправильно рассчитанных задержек, из-за емкостных эффектов и т.д. Они обычно делаются гораздо более быстрыми, чем синхронные анализаторы (рассчитываются на предельно возможную частоту регистрации).
Мы в качестве примера будем разрабатывать схему логического анализатора, не отличающуюся рекордными характеристиками ни в плане быстродействия, ни в плане количества разрядов, ни в плане развитости системы запуска. Достоинство ее в другом: она выполняется в виде платы расширения персонального компьютера, и, следовательно, при ее использовании оператор получает в свое распоряжение всю мощь этого компьютера: интеллект, средства ввода и отображения информации, дисковую память и т.д. В результате ценой незначительных дополнительных затрат (цена платы) мы можем превратить компьютер (на время или навсегда) в эффективный и очень удобный логический анализатор. Отметим, что это далеко не все преимущества данного подхода.
Исходные данные для проектирования примем следующие: количество входных линий (каналов регистрации) — 32, количество регистрируемых состояний — 4096, максимальная тактовая частота — 10 МГц, тактовый генератор — внутренний с изменяемой частотой или внешний, запуск — по положительному или отрицательному переходу на одной из 8 входных линий, глубина предпусковой регистрации — задается программно.
Первый этап проектирования в соответствии с описанным алгоритмом — предварительная оценка интерфейсной части. Прежде всего посмотрим, какие режимы обмена с магистралью нужны в данном случае. Для обеспечения нужного темпа приема данных (до 10 МГц) совершенно необходимо буферное ОЗУ, обмен с которым должен быть периодическим: при регистрации оно заполняется в темпе тактового генератора, по окончании регистрации его содержимое считывается компьютером. Нужно ли максимально ускорять этот процесс считывания? Зарегистрированная информация должна обрабатываться и отображаться на экране с целью анализа ее оператором. Этот процесс неизмеримо более длительный, чем перекачка информации из буферного ОЗУ в системное ОЗУ компьютера. Поэтому в данном случае особой скорости обмена, по-видимому, не требуется. Конечно же, можно организовать 16-разрядный обмен с нашим УС, дающий большой выигрыш во времени по сравнению с 8-разрядным обменом, но зато он требует дополнительных аппаратурных затрат (вдвое больше буферов данных, формирование сигнала -I/O CS 16). К тому же в этом случае усложняется проектирование печатной платы (нужен второй магистральный разъем). Исходя из всех этих соображений, имеет смысл остановиться на 8-разрядном обмене и отказаться от использования ПДП.