Введение в архитектуру ввода/вывода встроенных систем
Создание оборудования интерфейса В/В, которое соединяется с шиной
Интерфейсы устройств В/В обычно соединяются с шиной. Основным строительным блоком, используемым для интерфейса устройств В/В, является порт В/В (называемый также регистром В/В). Порт входа В/В пересылает внешние данные из устройства В/В в процессор с помощью шины. Порт выхода В/В переносит данные из процессора во внешнее устройство В/В.
Каждое устройство В/В имеет уникальный присвоенный адрес и имеет логическую схему декодера адреса, которая проверяет в шине этот адрес. Сначала посылается значение адреса, так чтобы схема декодера адреса имела стабильный действительный выход, прежде чем управляющие линии шины активируют схему.
Данные входа В/В обычно содержатся в регистре в устройстве В/В. Как видно на рисунке 2.6, когда оборудование интерфейса порта входа В/В декодирует свой адрес на шине, и происходит операция чтения шины В/В, оно помещает значение своих данных в шину, включая свои драйверы с тремя состояниями для управления шиной данных. Должны использоваться три состояния, так как несколько устройств могут совместно использовать и управлять шиной данных (только по очереди). Интегральные схемы, созданные для присоединения к шине, такие как расширители порта В/В, содержат драйверы трех состояний и регистры, необходимые для интерфейса с шиной данных. Некоторые шины (а именно, PCI) мультиплексируют по времени информацию адреса и данных, используя одну шину, и должны будут сохранять значения адреса в регистре.
Рис. 2.6. Типичная операция оборудования порта входа В/В. Устройство включает свои драйверы с тремя состояниями, чтобы управлять шиной данных с данными входа устройства В/В, только когда оно декодирует свой адрес и происходит операция чтения шины. Процессор затем сохраняет значение шины данных в регистре
Некоторые шины все еще используют более старую альтернативу для выходов с тремя состояниями, используя специальные логические вентили с открытым стоком или открытыми коллекторными выходами. Мышь и клавиатура PS/2 являются одним из таких примеров. В шине такого типа специальный логический вентиль выхода может управлять только низким сигналом данных, и единственный внешний резистор слабо (и несколько медленно по современным стандартам логики) переводит его в высокое состояние. Такой тип соединения шины называется иногда соединением монтажное-И или монтажное-ИЛИ. При таком типе вывода нет потенциального конфликта шины, когда два устройства могут попытаться направить сигнал в различные логические состояния. Два стандартный драйвера вывода в конфликте (т.е. один высокий и один низкий), соединенные с общей сигнальной линией, будут вызывать условие короткого замыкания уровня промежуточной логики и высокого сигнала тока.
Порт вывода В/В пересылает данные из процессора в устройство В/В с помощью шины. Как видно на рисунке 2.7, когда оборудование интерфейса порта вывода В/В декодирует его адрес на шине, и происходит операция записи В/В шины, он пересылает значение шины данных в регистр вывода В/В. Данные вывода должны сохраняться в регистре, так как на шине он присутствует только в течение нескольких циклов синхронизации.
Рис. 2.7. Типичная операция оборудования порта В/В. Устройство загружает новые данные в регистр вывода порта В/В, только когда декодирует его адрес, и на шине происходит операция записи
Реальные логические схемы несколько сложнее, чем показанные в этих примерах, так как некоторые сигналы состояния могут быть активными в шине на нижнем уровне, и данные должны передаваться в регистр в конце сигнала записи В/В (а не в начале), когда данные гарантировано будут действительны для задания, и удерживаются на регистре ввода.
Чтобы минимизировать расфазировку синхронизации, вместо пропускания входа синхронизации с помощью вентиля AND, регистр с входом поддерживающим синхронизацию (или нагрузку) обеспечивает меньшую расфазировку синхронизации и минимизирует любые возможные проблемы метастабильности триггера (если возникает дополнительная проблема на выходе вентиля AND, то триггер может увидеть другой "фантомный" сигнал синхронизации в неподходящее время). При таком подходе команда записи В/В будет служить в качестве сигнала синхронизации, а выход декодера в качестве средства запуска. На шине ISA логика должна также проверять сигнал шины AEN на 0, чтобы гарантировать, что устройство не отвечает по ошибке на циклы DMA (DMA активирует одновременно более одного сигнала состояния шины ISA).
Некоторые встроенные устройства могут требовать своих собственных специальных аппаратных устройств В/В. Существует несколько доступных вариантов. Вместо вычерчивания схем на уровне вентиля, поставщики микросхем и разработчики встроенных систем обычно проектируют оборудование В/В с помощью средств CAD, используя язык описания оборудования (HDL), такой как VHDL или Verilog. VHDL имеет синтаксис аналогичный Pascal или ADA, а Verilog похож на C. Затем синтезируется модель HDL для создания списка соединений. Список соединений является текстовым описанием схемы. Автоматизированные инструменты CAD затем могут использовать список соединений для размещения конструкции оборудования в специальном устройстве VLSI, Application Specific Integrated Circuit (ASIC), или Field Programmable Logic Array (FPGA). Стоимость начальной настройки и маски для специальных конструкций VLSI и ASIC является очень высокой, и требуются большие объемы продаж, чтобы покрыть высокие расходы разработки. FPGA являются более подходящими для производства в меньших объемах, но они также потребляют больше энергии и работают медленнее.
В качестве примера конструкции устройства В/В на основе HDL мы преобразуем предыдущие конструкции устройств порта ввода и вывода ISA, показанные на рисунках 2.3, 2.6, и 2.7 в VHDL. Декодер адреса, описанный ранее, требует просто проверки на равенство в VHDL. На шине ISA AEN=1 указывает на операцию DMA. В VHDL число битов, которое требуется для каждой переменной, определяется, когда они объявляются в начале программы. Следующий код генерирует декодер адреса для портов:
-- Декодер адреса на основе VHDL для for 0x3E0 PORT_IO_DECODE <= '1' WHEN ADDRESS = X"3E0" AND AEN='0' ELSE '0';
В VHDL присваивание значения "Z" выходу указывает на выход с тремя состояниями. Буферы с тремя состояниями для присоединения к 8-битной шине данных и их соответствующая управляющая логика для 8-битного порта ввода, как видно на рисунке 2.6, можно сгенерировать с помощью:
-- Порт ввода В/В на основе VHDL - используйте буферы -- с тремя состояниями DATA <= PORT_DATA_IN WHEN PORT_IO_DECODE = '1' AND IOR = '0' ELSE "ZZZZZZZZ";
Для регистров в VHDL требуется процесс для восприятия перехода сигнала синхронизации. Регистры будут созданы с помощью D-триггеров. Следующий код генерирует 8-битный порт вывода, как показано на рисунке 2.7:
-- Порт вывода В/В на основе VHDL – используйте регистр -- (с помощью DFF) PROCESS BEGIN -- синхронизация на положительном крае ISA IOW WAIT UNTIL IOW'EVENT AND IOW='1'; -- используйте выход декодера адреса для активации -- синхронизации DFF IF PORT_IO_DECODE = '1' THEN -- сохраните данные на шине данных ISA в регистре PORT_DATA_OUT <= DATA; END IF; END PROCESS;
Использование HDL, такого как VHDL, с инструментами синтеза логики, делает конструкторов устройств более продуктивными, также как использование высокоуровневого языка делает более продуктивными разработчиков программного обеспечения. Порты В/В используют обычно 8, 16 или 32 бита. Большинство устройств имеют один порт В/В для передачи данных и второй порт В/В со смежным адресом В/В, который используется для битов статуса устройства, линий квотирования, и управляющих сигналов. Многие платы встроенных компьютеров предоставляют дополнительные порты В/В, называемые В/В общего назначения (GPIO) или иногда называемые параллельным портом для использования пользователями, когда они добавляют свое собственное специальное оборудование В/В.
Другие шины первого поколения микропроцессора аналогичны. Несколько других интерфейсов устройств, имеющихся в ПК, по-прежнему имеют сигналы, похожие на ISA, так как они были первоначально получены из нее. Отметим, что в примерах цикла шины ISA, требуется минимум от 5 до 6 циклов шины ISA для передачи одного значения данных.
По мере того как процессоры и память становятся быстрее, полоса пропускания шины ISA стала ограничивающим фактором. Сначала память была перенесена на более быструю выделенную шину процессора/памяти. Но высокоскоростные сетевые интерфейсы и графические платы все же требовали большей полосы пропускания шины, чем было доступно на шине ISA. Это привело к новому более быстрому второму поколению шин, как для ПК, так и для встроенных систем.