Шапка

Обзор Части 14

В пунктах @A-@J перечисляются вопросы, поднятые в Части 14 . В итоговый обзор вошли базовые принципы, факты и советы.

@A Процессоры и шины данных

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

@B Шиноцентрическая архитектура вычислительных систем

В классической архитектуре вычислительной системы ( §14.1 ) процессор ( CPU или MPU ) исполняет инструкции, выбираемые из памяти по набору параллельных линий, именуемых шиной ( рис. 14.2 ). Инструкция сообщает, какое конкретно действие должна выполнить машина, а процессор воспринимает эту информацию через блок декодирующей логики . Кроме него в ЦПУ входит: арифметическо-логическое устройство ( ALU ), оно отвечает за действия над данными в регистрах , счётчик программы хранит адрес исполняемой инструкции, набор флагов отражает результат последней операции и используется в операциях с условием. В указателе стека находится ссылка на временное хранилище вспомогательной информации ( промежуточные результаты и адреса возврата ). Наконец, часто вычислительная система имеет кэш-память , позволяющую быстрее добираться до часто используемых данных и команд.

@C Периферия

Микропроцессоры ( CPU ), ориентированные на вычисления ( например, в рабочих станциях ), общаются с периферийными устройствами на плате через специальные шины. Процессоры, рассчитанные на встроенное применение ( т.е. микроконтроллеры ( MPU ), Часть 15 ) имеют меньшее быстродействие, зато оснащены встроенными периферийными блоками и памятью. В списке встроенной периферии можно найти видео системы, сетевые интерфейсы, средства измерения ( АЦП ) и управления ( ЦАП, дискретный ввод-вывод ), последовательные порты ( UART, USB ), интерфейсы дисковых накопителей ( SATA, SAS ).

@D Система команд или машинные коды

Каждый процессор руководствуется в своих действиях особым образом собранными и отформатированными данными - инструкциями ( §14.2 ). Полный набор инструкций называется системой команд , а её двоичное представление - машинными кодами . Инструкции могут быть одной длины или иметь разный размер, например у 32-разрядного процессорного семейства Intel x86 команды занимают от 1 до 15 байт. Прямое написание программ в машинных кодах крайне утомительное дело, поэтому каждому двоичному коду инструкции ставят в соответствие мнемонику - команду на языке ассемблера - удобное для запоминания буквосочетание. Например, «ADD AX, BX» соответствует операции сложения содержимого регистра AX и регистра BX . Программа-ассемблер преобразует текст, созданный человеком ( или компилятором из текста на языке высокого уровня ), в машинные коды процессора.

В качестве примера выбрано подмножество инструкций семейства Intel x86 ( §14.2.2 и табл. 14.1 ): арифметические , переходы по условию , работа со стеком и ввод-вывод . Разбор инструкций сопровождается описанием методов адресации - различных путей, с помощью которых можно добраться до содержимого регистров и памяти. Ассемблер Intel позволяет использовать прямую , косвенную , индексную и непосредственную адресацию.

@E Параллельная шина PC104/ISA

Подключение и передача информации посредством шины данных может быть очень непростым делом, сопровождающимся запутанной системой сигналов подтверждения. Для упрощения знакомства с темой в качестве учебного пособия взята 8-разрядная параллельная шина PC104/ISA ( §14.3 ), появившаяся изначально в IBM PC и ставшая промышленным стандартом. PC104 широко распространена и является удачным примером многоточечного разделяемого параллельного канала передачи данных. Полный набор сигналов приводится в §14.3.11 .

Цикл записи
Чтобы вывести данные в периферийное устройство ( провести «цикл записи» ) задатчик на шине ( здесь процессор ) выставляет данные на линиях данных ( «D7...D0» ), сообщает адрес периферийного устройства на адресных линиях ( «A9...A0» ), после чего активирует строб записи ( «IOW'» ), см. рис. 14.8 . Периферийное устройство ( рис. 14.9 ) защёлкивает данные «D7...D0» по сигналу «IOW'», если состояние линий «A9...A0» соответствует его адресу. Все эти действия выполняются аппаратно, когда процессор выполняет инструкцию «OUT».
Цикл чтения
Чтобы получить данные от стороннего источника ( провести «цикл чтения» ), задатчик на шине должен сообщить адрес интересующего периферийного устройства, переключить свои линии данных на вход, подать строб чтения ( «IOR'» ) и защёлкнуть состояние «D7...D0», изменённых внешним устройством, см. рис. 14.13 . Периферийное устройство ( рис. 14.14 ) откликается на свой адрес, выдавая данные в шину по разрешающему уровню «IOR'». Описанная последовательность действий выполняется аппаратно, когда процессор исполняет инструкцию «IN».
Флаги управления и состояния
Информация, получаемая процессором в цикле чтения, может содержать обычные данные ( например, результат измерения ), а может содержать флаги состояния ( например, признак готовности результата ). Информация о состоянии устройства необходима в большинстве ситуаций. В примере клавиатурного интерфейса ( рис. 14.15 ) триггер устанавливается при появлении нового символа и сбрасывается при его считывании. Состояние триггера видно через линию «D7» по адресу KBFLAG . Программа ( §14.3.5.A ) постоянно крутится в цикле, опрашивая байт состояния , пока не обнаружит установленный бит 7 . Увидев таковой, программа считывает байт из порта клавиатуры KBDATA и добавляет его в буфер строки. Сходно работают биты, пересылаемые периферийному устройству. Они указывают на возможность/ необходимость выполнения каких-либо действий со стороны периферийного устройства, т.е. являются командными битами . Так можно запустить преобразование в АЦП или переключить последовательный порт на передачу. Из нескольких битов состояния ( или управления ) можно собрать в регистре слово, каждый разряд которого будет иметь своё назначение.
Прерывания
Биты состояния позволяют процессору узнать о необходимости каких-то действий, но требуют при этом считывания регистра состояния. Такое действие называется опросом и является одним из возможных методов передачи сведений от периферии в процессор. Альтернативный путь - использование прерываний . Периферийное устройство активирует специальную линию ( в PC104 такие линии зовутся «IRQn» ). Если прерывания разрешены, аппаратная обвязка вычислительного ядра приостанавливает выполнение текущего задания и заставляет процессор перейти к исполнению кода «обработчика прерывания», см. §14.3.7 - §14.3.9 , где приводятся примеры схем и кода.
Прямой доступ к памяти
Самый быстрый способ передачи блока данных ( например, считывание его с диска ) - прямой доступ к памяти ( §14.3.10 ). Последовательные адреса памяти и управляющие сигналы формируются специальной схемой и не требуют внимания центрального процессора или циклов программного ввода-вывода .

@F Другие параллельные шины

Внутренняя многоточечная шина PC104/ISA работает слишком медленно ( менее 10 MBps ), ей на смену пришла шина PCI - тоже многоточечной, но достигшей в 64-разрядной версии скорости 2 Gbps . Общение через PCI заметно более сложная задача, нежели передача данных по PC104 ( @E ), и требует нескольких этапов взаимодействия с контроллером шины. На данный момент PCI тоже вышла из употребления, уступив место PCIe ( @H ) с последовательными соединениями точка-точка. Для обмена с дисковыми накопителями есть старый интерфейс IDE ( другие названия ATAPI и PATA ) и SCSI. Оба вышли из употребления и заменены последовательными SATA и SAS соответственно. Ещё один параллельный интерфейс - принтерный порт «Centronics» ( 36-контактный разъём на принтере, 25-контактный D-SUB в компьютере ) заменён последовательными шинами USB и Ethernet. Для подключения лабораторного оборудования используется интерфейс GPIB , который фирма-создатель HP зовёт HPIB. Он доступен и поддерживается по настоящий момент, но уже довольно неудобен для подключения из-за толстых кабелей и крупных соединителей. Большая часть современных приборов и инструментов поддерживает USB и Ethernet. Все упомянутые и некоторые прочие шины сведены в табл. 14.3 .

@G Параллельная передача информации

На более низком уровне интеграции элементов на плате для обмена данными между ИМС, скажем, между контроллером и АЦП классическая параллельная шина с адресом-данными-стробами становится избыточной и упрощается до простого соединения точка-точка ( предполагается, что микросхем всего две ) шириной 8 или даже 4 разряда, сигналом направления и сигналом стробирования ( рис. 14.34 ). Это уже не шина, а просто линия связи.

Исключая линии связи и особые случаи широких быстрых шин для связи ЦП с чипсетами ( «Front-Side bus» ), практически все параллельные шины и соединения сошли с дистанции, оставив поле за последовательными ( @H , @I ) вариантами. Особую пикантность ситуации придаёт тот факт, что одиночная последовательная линия оказывается быстрее, чем исходная линия шириной 8 бит, и вдобавок к увеличению скорости идёт снижение числа проводов и уменьшение размеров кабелей и соединителей.

@H Последовательные интерфейсы

У последовательных линий передачи данных ( §14.7 ) есть масса достоинств: меньше проводов, меньше выводов микросхем приёмников и передатчиков, при использовании соединений точка-точка упрощается и улучшается согласование, отсутствует явление скольжения фронтов ( тактовый сигнал восстанавливается из потока канальных символов ) и, наконец, существенно упрощается переход на оптический или беспроводной канал. Совсем не очевидна более высокая скорость передачи данных при работе через последовательный канал, нежели через параллельный. Тем не менее, параллельные дисковые интерфейсы ( 16-разрядные PATA и SCSI ) не вершине своего развития достигли скорости 1...2 Gbps , а их преемники - последовательные SATA и SAS с одной дифференциальной парой в каждом направлении дают 6 Gbps .

В компьютерном мире используют внутренние последовательные дисковые шины SATA ( eSATA - внешнее расширение SATA), SAS и PCIe ( §14.7.6 , §14.7.7 ). PCIe - гибридная: в отличие от предшественницы PCI, PCIe организована в виде связей точка-точка с последовательными дифференциальными линиями в каждом направлении. Но в соединитель могут заводиться несколько такого рода наборов - “lanes” ( подобное расширение обозначается сочетанием «×n», на данный момент используются «×1», «×4» и «×16», но есть также «×8» и «×32» ). Каждая линия может передавать данные со скоростью до 8 Gbps , восстанавливая свой собственный тактовый сигнал на приёмной стороне.

Для внешних связей имеются последовательные интерфейсы USB, FireWire, Ethernet и CAN. USB 3.0 ( §14.7.13 ) обеспечивает полнодуплексную связь на скорости 3.2 Gbps , что существенно лучше полудуплекса и 480 Mbps в USB 2.0. FireWire ( IEEE1394, §14.7.14 ) предлагает дуплексную связь на скорости 400 и 800 Mbps ( стандарт предусматривает скорости до 3.2 Gbps ).

Ethernet
( §14.7.16 ) - основной протокол для организации компьютерных сетей. Исходная коаксиальная линия с шинной архитектурой и скоростью 10 Mbps ( 10Base2 – «тонкий» кабель и 10Base5 – «толстый» ) прожила достаточно долго, прежде чем была заменена полнодуплексной связью точка-точка на витой паре ( 10Base-T, 100Base-TX, 1000Base-T ), которая решила проблему коллизий и увеличила скорость до 1 Gbps .
CAN
( §14.7.15 ) - многоточечная, мультимастерная шина для промышленного сегмента и транспорта. Надёжна, работает на расстояниях до 1 km , хотя и на сильно сниженной скорости ( 10 kbps против 1 Mbps для расстояний до 40 m ).

@I Последовательные соединения

Последовательная связь очень популярна для организации транспортных путей между ИМС в пределах печатной платы ( @G ) и практически полностью вытеснила параллельные каналы. Здесь популярны SPI, I2C и JTAG.

SPI
( §14.7.1 ) восхитительно простая 3-проводная шина с организацией ведущий-ведомый. Две линии данных ( «MOSI», «MISO» ) - по одной на каждое направление и тактовый сигнал ( «SCLK» ). Кроме общих линий каждому ведомому требуется индивидуальная линия выбора «SS'» ( рис. 14.38 ). Выбранное устройство принимает ( через «MOSI» ) и отдаёт ( через «MISO» ) данные на каждом импульсе «SCLK» ( рис. 14.37 ). Единого стандарта на SPI нет, поэтому особенности каждого конкретного периферийного кристалла надо уточнять по справочным данным. Примеры микросхем с интерфейсом SPI можно посмотреть на рис. 15.21 .
I2C
( §14.7.2 ). В отличие от SPI, это более сложная многоточечная последовательная шина. Ей требуется только два провода ( «SDA» для данных и «SCL» для тактового сигнала ), а протокол чётко определяет, как именно происходит адресация устройств и задание направления передачи. Ограниченное число проводов и удобство организации связи идут в комплекте с требованием уникальности адреса каждого устройства, подключённого к шине, и неизбежностью коллизий и арбитража в мультимастерной конфигурации. Примеры периферийных ИМС с интерфейсом I2C можно посмотреть на рис. 15.22 .
JTAG
( §14.7.4 ). Исходно предназначался для тестирования, но превратился в популярный метод загрузки и отладки программ для микроконтроллеров, а также программирования микросхем памяти в собранной системе. Состоит из общих сигналов тактирования ( «TCK» ) и режима ( «TMS» ) плюс двух линий данных с последовательным включением абонентов с «TDI» на входе и «TDO» на выходе ( рис. 14.43 ). Подключиться к интерфейсу JTAG можно с помощью специального адаптера USB-JTAG.
RS-232
( §14.7.8 ). Старый добрый последовательный порт и поныне поддерживается микроконтроллерами. Передать через него данные в PC можно через программу терминала, подключив переходник USB-RS-232, например, что-нибудь из продукции фирмы FTDI.

@J Память

Обсуждение вычислительной техники без упоминания памяти ( §14.4 ) нельзя считать исчерпывающим. Идеальная память позволяет выполнять случайное обращение, ничего не забывает ( даже в отсутствие питания ) и имеет бесконечный ресурс ( количество циклов стирания-записи ). Совсем замечательно, если она вдобавок немного потребляет, недорога и компактна. Настоящие ИМС памяти не достигли таких показателей, по крайней мере, в памяти одного типа.

Среди постоянной памяти ( §14.4.5 ) фаворитом на настоящий момент является flash-NAND . Именно её можно обнаружить в USB «флэшках», картах памяти для фотоаппаратов и в твердотельных дисках. Скорость и ресурс её ограничены, а стирание и запись может выполняться только посекторно. Зато она недорога ( ∼$0.50/GB в розницу ). Для хранения небольших объёмов данных есть EEPROM . Она строится на 2-транзисторных ячейках и позволяет проводить стирание-запись побитово. Некоторые новые технологии обещают близкий к бесконечному ресурс. Среди таких направлений FRAM ( ферроэлектрическая ) MRAM ( магниторезистивная ) и PCM ( память на фазовых переходах ).

Вся память с быстрым доступом и бесконечным ресурсом требует для работы питания . Она подразделяется на два класса: статическую и динамическую.

Статическая
память - SRAM ( §14.4.3 ) - массив 6-транзисторных триггеров ( «6T», рис. 14.20 и 14.21 ), предполагающих работу в асинхронном или синхронном ( т.е. тактируемом ) режиме. Статическая память имеет простой интерфейс, быстрый доступ и низкий ток потребления, но ячейка «6T» занимает много места на кристалле, а значит, имеет невысокую плотность хранения. Поэтому основной областью использования статической памяти являются малопотребляющие системы, где не требуется хранить большие объёмы данных.
Динамическая
память - DRAM ( §14.4.4 ) - другой вид оперативной памяти, представляет собой массив очень маленьких конденсаторов ( ∼30fF ), уровень заряда на которых соответствует состоянию бита данных. Конденсаторы коммутируются массивом транзисторов таким образом, что для хранения одного бита нужен только один транзистор ( ячейка «1T1C», рис. 14.26 , 14.27 ). Динамическая память нуждается в периодической регенерации заряда конденсаторов. Подобно статической памяти бывает асинхронной и синхронной ( SDRAM ), причём последняя может быть с однократной скоростью выдачи данных SDR и удвоенной DDR с цифрами, указывающими на номер поколения ( DDR2, DDR3, DDR4 ). Динамическая память имеет бесконечный ресурс, быстрый доступ, высокую плотность хранения и низкую стоимость. Используется в качестве основной системной памяти в большей части современных вычислительных машин: от рабочих станций до потребительской электроники. Именно она стоит на линейках памяти DIMM в материнских платах компьютеров. В настоящий момент её цена составляет примерно $5/GB .

Previous part:

Next part: