русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Основные тенденции развития схемотехники


Дата добавления: 2014-11-27; просмотров: 2121; Нарушение авторских прав


Микросхемы АЦП выполняют функцию, прямо противоположную функции ЦАП, — преобразуют входной аналоговый сигнал в последовательность цифровых кодов. В общем случае микросхему АЦП можно представить в виде блока, имеющего один аналоговый вход, один или два входа для подачи опорного (образцового) напряжения, а также цифровые выходы для выдачи кода, соответствующего текущему значению аналогового сигнала (рис. 13.13).

Часто микросхема АЦП имеет также вход для подачи тактового сигнала CLK, сигнал разрешения работы CS и сигнал, говорящий о готовности выходного цифрового кода RDY. На микросхему подается одно или два питающих напряжения и общий провод. В целом микросхемы АЦП сложнее, чем микросхемы ЦАП, их разнообразие заметно больше, и поэтому сформулировать для них общие принципы применения сложнее.


Рис. 13.13. Микросхема АЦП

Опорное напряжение АЦП задает диапазон входного напряжения, в котором производится преобразование. Оно может быть постоянным или же допускать изменение в некоторых пределах. Иногда предусматривается подача на АЦП двух опорных напряжений с разными знаками, тогда АЦП способен работать как с положительными, так и с отрицательными входными напряжениями.

Выходной цифровой код N (n-разрядный) однозначно соответствует уровню входного напряжения. Код может принимать 2n значений, то есть АЦП может различать 2n уровней входного напряжения. Количество разрядов выходного кода n представляет собой важнейшую характеристику АЦП. В момент готовности выходного кода выдается сигнал окончания преобразования RDY, по которому внешнее устройство может читать код N.

Управляется работа АЦП тактовым сигналом CLK, который задает частоту преобразования, то есть частоту выдачи выходных кодов. Предельная тактовая частота — второй важнейший параметр АЦП. В некоторых микросхемах имеется встроенный генератор тактовых сигналов, поэтому к их выводам подключается кварцевый генератор или конденсатор, задающий частоту преобразования. Сигнал CS разрешает работу микросхемы.



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


Рис. 13.14. Компаратор напряжения

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


Рис. 13.15. АЦП последовательного типа

Существует два основных принципа построения АЦП: последовательный и параллельный.

В последовательном АЦП входное напряжение последовательно сравнивается одним единственным компаратором с несколькими эталонными уровнями напряжения, и в зависимости от результатов этого сравнения формируется выходной код. Наибольшее распространение получили АЦП на основе так называемого регистра последовательных приближений (рис. 13.15).

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

Регистр последовательных приближений работает так, что в зависимости от результата предыдущего сравнения выбирается следующий уровень эталонного напряжения по следующему алгоритму:

  • В первом такте входной сигнал сравнивается с половиной опорного напряжения.
  • Если входной сигнал меньше половины опорного напряжения, то на следующем такте он сравнивается с четвертью опорного напряжения (то есть половина опорного напряжения уменьшается на четверть). Одновременно в регистр последовательных приближений записывается старший разряд выходного кода, равный нулю.
  • Если же входной сигнал больше половины опорного напряжения, то на втором такте он сравнивается с 3/4 опорного напряжения (то есть половина увеличивается на четверть). Одновременно в регистр последовательных приближений записывается старший разряд выходного кода, равный единице.
  • Затем эта последовательность сравнений повторяется нужное число раз с уменьшением на каждом такте вдвое ступени изменения эталонного напряжения (на третьем такте — 1/8 опорного напряжения, на четвертом — 1/16 и т.д.). В результате опорное напряжение в каждом такте приближается к входному напряжению. Всего преобразование занимает n тактов. В последнем такте вычисляется младший разряд.

Понятно, что процесс этот довольно медленный, требует нескольких тактов, причем в течение каждого такта должны успеть сработать компаратор, регистр последовательных приближений и ЦАП с выходом по напряжению. Поэтому последовательные АЦП довольно медленные, имеют сравнительно большое время преобразования и малую частоту преобразования.

Второй тип АЦП — АЦП параллельного типа — работает по более простому принципу. Все разряды выходного кода вычисляются в них одновременно (параллельно), поэтому они гораздо быстрее, чем последовательные АЦП. Правда, они требуют применения большого количества компараторов (2n–1), что вызывает чисто технологические трудности при большом количестве разрядов (например, при 12-разрядном АЦП требуется 4095 компараторов).

Схема такого АЦП (рис. 13.16) включает в себя резистивный делитель из 2n одинаковых резисторов, который делит опорное напряжение на (2n–1) уровней.


Рис. 13.16. 3-разрядный АЦП параллельного типа

Входное напряжение сравнивается с помощью компараторов с уровнями, формируемыми делителем напряжения. Выходные сигналы компараторов с помощью шифратора преобразуются в n-разрядный двоичный код. Шифратор выдает на выход номер последнего из сработавших (то есть выдавших сигнал логической единицы) компараторов. Например, в случае 3-разрядного АЦП (на рисунке) при величине входного напряжения от 0 до 1/8 опорного напряжения выходной код будет 000, при входном напряжении от 1/8 до 2/8 опорного напряжения сработает первый компаратор, что даст выходной код 001, при входном напряжении от 2/8 до 3/8 опорного напряжения сработают компараторы 1 и 2, что даст выходной код 010, и т.д. Процесс преобразования происходит в параллельном АЦП очень быстро, поэтому частота преобразования может достигать сотен мегагерц.

Для повышения быстродействия в параллельном АЦП иногда применяется конвейерный принцип: выходной код компараторов записывается в (2n–1)-разрядный параллельный регистр, показанный на рис. 13.16. Выходной код шифратора также записывается в n-разрядный параллельный регистр. Оба регистра в этом случае тактируются одним и тем же тактовым сигналом. Это снижает требования к быстродействию компараторов и шифратора. Правда, выходной код АЦП задерживается из-за таких регистров на два периода таковой частоты.

Громоздкость структуры параллельного АЦП приводит к тому, что в некоторых АЦП применяется смешанный параллельно-последовательный принцип. Это несколько снижает быстродействие подобного АЦП по сравнению с обычным параллельным АЦП, но зато позволяет получить большое число разрядов, не увеличивая количество компараторов до (2n–1).

Для того чтобы АЦП любого типа работал с использованием всех своих возможностей, необходимо обеспечить согласование диапазона изменения входного аналогового сигнала с допустимым диапазоном (динамическим диапазоном) входного напряжения АЦП.

На рис. 13.17 показано четыре возможных случая соотношения динамического диапазона АЦП (от 0 до UREF или от UREF1 до UREF2) и входного сигнала. В случаях а и б входной сигнал меньше динамического диапазона, поэтому АЦП будет работать правильно, но не будет использовать всех своих возможностей. В случае в входной сигнал слишком большой, поэтому часть его значений не будет преобразована. Только в случае г АЦП действительно будет работать как n-разрядный и будет преобразовывать все значения входного сигнала. Для согласования входного сигнала с динамическим диапазоном АЦП можно применять усилители, аттенюаторы, схемы сдвига. В некоторых случаях согласование может быть достигнуто простым выбором величин опорных напряжений.


Рис. 13.17. Соотношение входного сигнала и динамического диапазона АЦП


Рис. 13.18. Уменьшение количества разрядов выходного кода АЦП

Иногда бывает необходимо уменьшить количество разрядов АЦП. В этом случае нужное количество младших разрядов выходного кода микросхемы просто не используется. На рис. 13.18 показано использование 10-разрядного АЦП в качестве 8-разрядного.

Обратная задача — увеличение разрядности АЦП — встречается чаще. Существует ряд типичных схемотехнических решений по объединению нескольких микросхем АЦП для увеличения количества разрядов выходного кода, но большинство этих решений требует сложных расчетов результирующих погрешностей преобразования и применения аналоговых узлов. Мы не будем их здесь рассматривать. Отметим только, что при возникновении задачи увеличения разрядности надо прежде всего попытаться найти микросхему с нужным количеством разрядов, и только потом рассматривать возможности объединения нескольких микросхем АЦП.

Рассмотрим несколько типичных схем включения АЦП, используемых в аналого-цифровых системах.


Рис. 13.19. Фиксатор превышения входным сигналом установленного порога

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

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

АЦП также применяется в схемах вычисления амплитуды входного аналогового сигнала. Для такого вычисления можно использовать уже рассмотренную схему вычислителя экстремального значения входного кода (см. рис. 8.9). В качестве источника последовательности входных кодов в данном случае выступает АЦП (рис. 13.20).


Рис. 13.20. Вычислитель амплитуды аналогового сигнала

В регистр со входом разрешения записи записывается код с выхода АЦП по сигналу RDY в том случае, если текущее значение кода больше значения кода, записанного ранее в регистр. В результате уже после одного периода входного сигнала в регистре будет код амплитуды входного сигнала. За период преобразования АЦП должны успеть сработать компаратор кодов и регистр.

Если такой вычислитель амплитуды входного сигнала используется в составе сложной аналого-цифровой системы, в которой уже присутствует АЦП, непрерывно преобразующий входной сигнал в коды, то дополнительно требуются только цифровые микросхемы: компаратор кодов и регистр.


Рис. 13.21. Включение буферной памяти для запоминания кодов с выходов АЦП

Наиболее часто встречающееся использование АЦП — это преобразование входного сигнала в поток кодов, причем коды эти обычно записываются в буферную память. В данном случае наиболее подходящим является однонаправленный буфер с периодическим режимом работы. То есть сначала в буферную память заносится массив кодов выборок входного сигнала, а затем этот массив читается для дальнейшей обработки. Именно так, например, строится цифровой осциллограф, предназначенный для наблюдения аналоговых сигналов на экране.

Схема включения АЦП в этом случае показана на рис. 13.21. В качестве строба записи в буферную память используется сигнал RDY с АЦП. Подробнее организацию буфера мы уже рассматривали в предыдущей лекции.

Конечно, в реальных аналого-цифровых устройствах все гораздо сложнее, в них требуются схемы синхронизации процесса записи со входным сигналом, схемы предварительной обработки аналогового сигнала, но суть остается той же — буферная память, записывающая последовательность кодов с выхода АЦП. Чем больше объем памяти, тем больший фрагмент входного аналогового сигнала она может запомнить. Например, если память имеет организацию 64Кх8 и работает с 8-разрядным АЦП, то при частоте преобразования АЦП 10 МГц буфер сможет хранить в себе фрагмент аналогового сигнала длительностью 6,5536 мс.

Наконец, последняя схема, которую мы рассмотрим (рис. 13.22), позволяет вдвое повысить быстродействие АЦП, точнее, поднять вдвое частоту записи кодов выборок входного сигнала в буферную память.


Рис. 13.22. Увеличение вдвое частоты преобразования входного сигнала с помощью двух АЦПс буферами

Идея схемы очень проста: используется два АЦП и два буфера, которые работают по очереди, например, четные выборки входного сигнала обрабатывает один АЦП со своим буфером, а нечетные — другой АЦП со своим буфером. В результате запоминание кодов входного сигнала осуществляется с частотой вдвое больше частоты преобразования каждого из АЦП. Например, если каждый АЦП и каждый буфер работают с частотой 10 МГц, то результирующая частота преобразования составит 20 МГц.

Тактовые сигналы АЦП и сигналы RDY на выходах АЦП должны быть сдвинуты один относительно другого на половину периода тактового сигнала. Чтение зарегистрированных кодов из обоих буферов также должно быть организовано по очереди: первый код читается из первого буфера, второй — из второго, третий — опять из первого, четвертый — из второго и т.д. Объем обоих буферов в данном случае складывается. Например, при организации каждого буфера 64Кх8 результирующий буфер будет иметь организацию 128Кх8.

Пользуясь этим же принципом, можно повысить частоту обработки входного сигнала с помощью АЦП не только вдвое, но и втрое, в четыре раза и т.д. Необходимо только согласовать во времени работу соответственно трех, четырех и т.д. АЦП, у каждого из которых должна быть своя буферная память.

Помимо упомянутых здесь АЦП последовательно и параллельного типов существуют еще и АЦП с промежуточным преобразованием. В них входной аналоговый сигнал с помощью аналогового интегратора преобразуется во временной интервал между цифровыми импульсами или в частоту следования цифровых импульсов. Выходной цифровой код, соответствующий входному аналоговому сигналу формируется в результате измерения длительности временного интервала или частоты следования импульсов (рис. 13.23). Если используется выходная частота, то такой АЦП называется "преобразователем напряжение—частота" (ПНЧ).

Такой подход позволяет с помощью сравнительно простых аппаратных средств получить высокую точность преобразования, не зависящую от многих параметров используемых компонентов и от характеристик окружающей среды. Измерение временных интервалов и частоты следования импульсов осуществляется простейшими цифровыми схемами, примеры которых приведены в лекциях 9, 10. Измерения эти могут осуществляться с высокой точностью вследствие того, что существует очень хороший временной эталон — кварцевый генератор. Отметим, что достоинством ПНЧ является также возможность простой передачи его выходного цифрового сигнала на большие расстояния.


Рис. 13.23. АЦП с промежуточным преобразованием

В конце лекции надо еще раз отметить, что приведенные здесь схемы сильно упрощены. Для их практической реализации необходимо знание не только цифровой схемотехники, но и аналоговой и аналого-цифровой схемотехники, а также знание особенностей конкретных микросхем ЦАП и АЦП, что не является предметом данной книги. Однако рассмотренные ключевые принципы использования ЦАП и АЦП и их совместного включения с цифровыми схемами будут полезны любому разработчику.

 

14. Лекция: Разработка простых цифровых устройств: версия для печати и PDA В лекции подробно рассматриваются примеры разработки простых цифровых устройств — клавиатуры и вычислителя контрольной суммы, начиная от анализа функций устройств и выделения основных узлов до проектирования принципиальных схем узлов и устройства в целом.
В предыдущих лекциях были рассмотрены базовые элементы цифровой схемотехники и простейшие приемы проектирования узлов на их основе. Но для разработки сложных устройств и систем всех этих знаний порой оказывается недостаточно. Чтобы создать сложное устройство, необходимо еще владеть приемами системотехники, то есть уметь на основании анализа функций, которые должно выполнять устройство в целом, спроектировать его структуру, сформулировать принципы взаимодействия узлов, четко определить все задачи, которые должен решать каждый из узлов, выработать требования к отдельным узлам. Возможно, в результате всех этих шагов будет изменена сама первоначальная задача, будут переформулированы требования к создаваемому устройству, к его месту в системе, к принципам его взаимодействия с другими устройствами. И только потом, после всей этой предварительной работы уже можно переходить к разработке узлов, собственно к схемотехнике. Приемы системотехники сформулировать, формализовать, описать, даже перечислить гораздо сложнее, чем приемы схемотехники. Да и пользы от такой формализации зачастую немного. Проектирование сложного, надежно работающего цифрового устройства с минимальными аппаратными затратами сродни искусству и требует от разработчика определенных способностей, даже таланта. Научить этому практически невозможно. Более того, попытка научить системотехнике может даже принести вред, так как ограничит творческие способности разработчика несколькими жесткими стандартными алгоритмами. Однако можно показать несколько простейших примеров разработки, продемонстрировать последовательность шагов, которые необходимы при проектировании, которые могут встретиться в процессе создания устройств некоторых распространенных типов. Исходя из этих примеров, разработчик может в дальнейшем попробовать по аналогии создать что-то свое, более или менее совершенное, но обязательно работоспособное. Поэтому в данной лекции как раз и будут подробно рассмотрены несколько простых примеров проектирования сравнительно сложных устройств на всех этапах: от анализа решаемой задачи до создания полной принципиальной схемы. Примеры эти, конечно, не отражают и малой доли всех реально встречающихся задач, но относятся к различным классам цифровых устройств. Разработка клавиатуры Различные клавиатуры с большим количеством клавиш (кнопок) широко используются в цифровых системах: в компьютерах, контроллерах, измерительных приборах, в бытовой технике. Основная задача любой клавиатуры довольно проста: она должна при любом нажатии на клавишу выдавать код номера этой клавиши и сигнал флага нажатия клавиши (строб этого кода). Получив этот сигнал флага, внешнее устройство читает код нажатой клавиши и предпринимает требуемые действия. Главная задача при проектировании клавиатуры состоит в минимизации аппаратных затрат и в обеспечении надежного срабатывания в любой ситуации. Существует масса схемотехнических решений этой задачи — от примитивных до сложнейших. Клавиатуры могут быть механическими, квазисенсорными или сенсорными, клавиатуры могут иметь жесткую логику работы или быть интеллектуальными, даже допускать перепрограммирование. Мы будем в качестве примера рассматривать самую простую механическую клавиатуру с жесткой логикой работы. Количество клавиш полноразмерной клавиатуры компьютера превышает сотню, поэтому мы будем проектировать клавиатуру на максимальное количество клавиш, равное 128. Естественно, клавиатура должна иметь защиту от дребезга механических контактов и должна корректно обрабатывать ситуацию одновременного нажатия нескольких клавиш. Примем, например, что при одновременном нажатии нескольких клавиш клавиатура должна выдавать код только одной из них. Примем также, что максимально возможный темп нажатия клавиш на клавиатуре не должен превышать 20 нажатий в секунду (это довольно много). Таким образом, основные требования к проектируемому устройству сформулированы. Начнем разработку. Очень часто удобным и эффективным приемом является начало разработки устройства "с конца". То есть проектирование начинается исходя из требуемого результата, из тех сигналов, которые устройство должно выдавать вовне и принимать извне. И только в конце проектирования разрабатывается та часть устройства, которая выполняет требуемую функцию. Такой подход гарантирует, что разработанное устройство не будет чрезмерно избыточным, не будет делать ничего лишнего, а также то, что оно корректно будет взаимодействовать с другими устройствами и системами. Этот принцип проектирования не универсален, порой выдержать его в течение всего процесса разработки трудно, но попробовать его применить к любому устройству никогда не помешает. В нашем случае необходимо сначала определиться, что должна выдавать вовне клавиатура. Обычно это задается техническим заданием, но мы примем, что наша клавиатура должна выдавать 7-разрядный двоичный номер нажатой клавиши (так как 27 = 128) и сопровождать его положительным сигналом флага нажатия. Сигнал флага и код клавиши должны сохраняться до тех пор, пока нажата клавиша. За это время (несколько миллисекунд) внешнее устройство должно успеть проанализировать сигнал флага и прочитать выходной код клавиатуры. Обычно данное требование не слишком жесткое. Альтернативное решение — сохранение кода нажатой клавиши и сигнала флага до момента чтения выходного кода внешним устройством — конечно же, снижает требование к быстродействию читающего внешнего устройства, однако оно может привести к тому, что некоторые нажатия клавиш останутся без реакции, не будут обработаны. Также необходимо определиться, как клавиатура будет вести себя при одновременном нажатии нескольких клавиш. Наиболее сложные, интеллектуальные клавиатуры выдают последовательно коды всех нажатых клавиш, запоминая их в буферной памяти. Но мы примем, что клавиатура должна выдавать только код одной из одновременно нажатых клавиш (первой по установленному порядку). Нажатия всех остальных клавиш одновременно с данной просто игнорируются. При проектировании механической клавиатуры важно решить, как будет обрабатываться неизбежно присутствующий дребезг механических контактов клавиш. Его можно обрабатывать как внутри клавиатуры, так и вне ее (то есть перенести эту функцию на внешнее устройство). Оба эти подхода имеют свои преимущества. Но наша клавиатура будет обрабатывать дребезг контактов самостоятельно. Принцип обработки выбираем очень простой: первое зафиксированное замыкание контактов клавиши считается началом нажатия, а конец нажатия определяется тогда, когда контакты будут разомкнуты в течение заданного интервала времени. В результате временная диаграмма работы разрабатываемой клавиатуры может быть упрощенно представлена в виде рис. 14.1. Здесь сигнал флага начинается при фиксации единичного сигнала с клавиши (это может быть как во время дребезга, так и после его окончания). После выставления флага фиксируется выходной код клавиши. После отпускания клавиши (нулевой сигнал), через время задержки tзад снимается сигнал флага. Время задержки должно быть заведомо больше времени дребезга контактов. Выходной код может сохраняться после отпускания клавиши до следующего нажатия, а может и сниматься. Рис. 14.1. Временная диаграмма работы клавиатуры Дальнейшая разработка невозможна без выбора принципа преобразования сигналов от нажатия клавиш в код номера нажатой клавиши. Простейшим путем построения подобного преобразователя является использование приоритетных шифраторов (рис. 14.2). Каждая клавиша дает свой логический сигнал, сигналы от всех клавиш преобразуются шифратором в код номера клавиши. Однако такой простейший подход хорош только при небольшом количестве клавиш (до 8 или до 16), так как при большом количестве входов приоритетный шифратор получается довольно сложным. При малом количестве клавиш дребезг контактов обычно устраняется отдельно для каждой клавиши с помощью RS-триггера (как это показано на рисунке). Это решение простое, но требующее больших аппаратурных затрат. Рис. 14.2. Простейший преобразователь для клавиатуры Другим путем построения преобразователя является использование так называемой коммутационной матрицы, состояние которой периодически опрашивается с частотой тактового генератора. Коммутационная матрица представляет собой две группы пересекающихся проводников (строки и столбцы), во всех точках пересечения которых находятся клавиши. В данном случае каждая клавиша не формирует своего отдельного логического сигнала, а только коммутирует (соединяет) одну из строк матрицы с одним из ее столбцов. Наиболее универсальная схема преобразователя, легко наращиваемая и достаточно простая, приведена на рис. 14.3. Для опроса коммутационной матрицы применяется счетчик, тактируемый генератором. Старшие разряды счетчика используются для выбора одной из строк матрицы с помощью дешифратора (на выбранную строку поступает сигнал логического нуля, на невыбранную — сигнал логической единицы). Младшие разряды счетчика используются для опроса столбцов матрицы с помощью мультиплексора. Сигнал с опрашиваемого столбца подается на выход мультиплексора. Признаком нажатия клавиши является нулевой сигнал на выходе мультиплексора. В этот момент на выходах счетчика присутствует код номера нажатой клавиши. Такая схема легко позволяет строить клавиатуры на большое количество клавиш (до 256, как на рисунке, и даже больше), однако она требует довольно большого времени для полного опроса клавиатуры (так как количество тактов опроса равно полному количеству клавиш). Рис. 14.3. Преобразователь с опросом всех клавиш Совмещение двух рассмотренных подходов позволяет создавать достаточно большие клавиатуры с малыми аппаратурными затратами и малым временем опроса. При таком комбинированном методе (рис. 14.4) также используется коммутационная матрица с клавишами на всех пересечениях строк и столбцов, но опрашиваются не все клавиши по очереди, а только строки (или столбцы) матрицы. Для опроса, как и в предыдущем случае, применяются генератор, счетчик и дешифратор. Положение же нажатой клавиши в строке (или в столбце) определяется с помощью шифратора. Код нажатой клавиши образуется из выходного кода счетчика (старшие разряды) и кода с выхода шифратора (младшие разряды). В нашем случае клавиатура имеет 128 клавиш, то есть коммутационная матрица должна состоять из 16 строк, опрашиваемых дешифратором 4–16 (ИД3), и 8 столбцов, сигналы с которых обрабатываются шифратором 8–3 (ИВ1). Счетчик должен иметь 4 разряда (ИЕ7). Эти 4 разряда и 3 разряда с выхода шифратора дадут 7-разрядный номер нажатой клавиши. Полный цикл опроса клавиатуры будет занимать 16 тактов генератора (по числу строк). Признаком нажатия одной из клавиш будет отрицательный сигнал на выходе –GS шифратора. Если нажато несколько клавиш в разных строках, то обрабатываться будет та клавиша, строка которой будет опрошена первой. Если нажато несколько клавиш в одной строке, то шифратор выдаст код клавиши, соответствующей большему номеру входа. Надо также учитывать, что шифратор ИВ1 выдает инверсный номер входа, на который пришел нулевой сигнал, — эта особенность может потребовать применения трех выходных инверторов (на рисунке не показаны). Рис. 14.4. Преобразователь с опросом строк клавиш Оценим, какой должна быть частота тактового генератора. Мы приняли, что максимальная скорость нажатия равна 20 раз в секунду. Значит, за 1/20 секунды надо успеть опросить всю клавиатуру, то есть все 16 строк. Таким образом, минимально допустимая тактовая частота составляет 16•20 = 320 Гц. Но надо заложить и запас на обработку дребезга контактов. Поэтому примем тактовую частоту опроса равной 400 Гц. Она может быть и больше, но чрезмерно увеличивать ее (например, выше 1 кГц) не стоит, так как при быстром переключении микросхем увеличивается потребляемый схемой ток. Понятно, что генератор должен быть не кварцевым, так как кварцевые резонаторы на низкие частоты не выпускаются, а делитель частоты резко усложнит схему. К тому же точная выдержка частоты генератора в данном случае совершенно не нужна. Выходной сигнал "–Нажатие", конечно же, будет иметь короткие паразитные импульсы. Во-первых, они будут возникать из-за дребезга контактов нажатой в данный момент клавиши. Во-вторых, они могут появляться из-за переходных процессов при переключении счетчика и дешифратора. Эти паразитные импульсы надо исключать. Чтобы исключить действие паразитных импульсов из-за переходных процессов при переключении счетчика и дешифратора достаточно применить стробирование или тактирование сигнала "–Нажатие" в середине каждого тактового интервала. Для этого из схемы преобразователя надо вывести сигнал "–Такт". Исключение коротких выходных импульсов из-за дребезга контактов клавиш сложнее. Прежде всего, на время нажатия клавиши целесообразно остановить опрос строк с помощью сигнала "–Запрет". Затем надо обработать сигнал "?Нажатие" по принципу, показанному на рис. 14.1. Будем считать, что при дребезге контактов длительность кратковременного размыкания не превышает периода тактового генератора (2,5 мс при тактовой частоте 400 Гц). Тогда задержка окончания сигнала флага нажатия (см. рис. 14.1) должна быть не менее одного периода тактового сигнала. Для выработки задержки можно использовать цепочку триггеров, тактируемых сигналом "–Такт". Схема выработки выходных сигналов клавиатуры приведена на рис. 14.5. Рис. 14.5. Схема выработки выходных сигналов клавиатуры Триггер Т1 перебрасывается в единицу (на инверсном выходе) тогда, когда в середине тактового интервала (по положительному фронту сигнала "–Такт") сигнал "–Нажатие" нулевой. Своим выходным сигналом триггер Т1 перебрасывает в единицу триггер Т2, который уже никак не связан с сигналом "–Нажатие", не реагирует ни на какой дребезг этого сигнала. Выходной сигнал триггера Т2 используется в качестве сигнала флага нажатия клавиатуры. Инверсный сигнал с выхода триггера Т2 используется в качестве сигнала "–Запрет", останавливающего опрос строк клавиатуры. Цепочка триггеров Т3 и Т4, тактируемая сигналом "Такт", служит для задержки снятия сигнала флага после отпускания клавиши (когда сигнал "–Нажатие" становится равным единице). После установки флага в единицу, сигнал флага начинает записываться по фронту сигнала "–Такт" в триггеры Т3 и Т4, но только в том случае, когда сигнал "–Нажатие" установлен в единицу. В результате на инверсном выходе триггера Т4 появится сигнал логического нуля при нахождении сигнала "–Нажатие" в единице в моменты двух последовательных положительных фронтов сигнала "–Такт". Сигнал с выхода Т4 сбрасывает сигнал флага в нуль, после чего вся схема переходит в исходное состояние и ждет следующего нулевого сигнала "–Нажатие". Если кратковременное размыкание при дребезге контактов клавиш длится более 2,5 мс, то можно увеличить количество триггеров в последовательной цепочке (Т3 и Т4), что приведет к увеличению задержки снятия сигнала флага на целое число тактов генератора. Таким образом, схема полностью разработана. Отметим, что низкая тактовая частота работы схемы позволяет нам не рассчитывать задержек микросхем, то есть использовать только первый уровень представления, логическую модель. А эффекты, связанные с переходными процессами при переключении микросхем, мы устранили, обеспечив временной сдвиг на половину периода генератора между тактовыми сигналами схемы преобразователя (рис. 14.4) и схемы выработки выходных сигналов (рис. 14.5). Все резисторы, примененные в схеме, должны быть номиналом около 1 кОм. Разработка вычислителя контрольной суммы Различные контрольные суммы широко применяются в цифровых устройствах и системах для контроля правильности хранения или передачи массивов информации. Суть этого метода контроля проста: к хранимому или передаваемому информационному массиву присоединяется небольшой контрольный код (обычно от 1 разряда до 32 разрядов), в котором в свернутом виде содержится информация обо всем массиве. При чтении или получении этого массива еще раз вычисляется тот же самый контрольный код по тому же самому алгоритму. Если этот вновь вычисленный код равен тому коду, который был присоединен к массиву, то считается, что массив сохранен или передан без ошибок. Логика здесь следующая: контрольный код (он же контрольная сумма) гораздо меньше контролируемого массива, поэтому вероятность искажения контрольной суммы гораздо меньше, чем вероятность искажения массива. Если же исказятся как массив, так и контрольная сумма, то вероятность того, что эти искажения не будут замечены при повторном подсчете контрольной суммы, крайне мала. Существует, правда, вероятность, что массив будет искажен в нескольких местах таким образом, что контрольная сумма от этих искажений никак не изменится, но такая вероятность также обычно мала. Контрольные суммы применяются при хранении данных в памяти (оперативной и постоянной), при хранении данных на магнитных носителях (дисках, лентах), в локальных и глобальных сетях передачи информации. В случае защиты контрольной суммой хранимой информации можно определить, что данный массив (файл, сектор на диске) испорчен и его нельзя использовать. В случае защиты контрольной суммой передаваемой по сети информации приемник может потребовать от передатчика повторной передачи искаженного массива. Существует множество способов вычисления контрольной суммы, различающихся степенью сложности вычисления и надежностью выявления ошибок. Но наибольшее распространение получил в настоящее время так называемый "циклический метод контроля по избыточности" или CRC (Cyclic Redundancy Check), при котором применяется циклическая контрольная сумма. Вычисляется циклическая контрольная сумма следующим образом. Весь массив информации рассматривается как одно N-разрядное двоичное число, где N — количество бит во всех байтах массива. Для вычисления контрольной суммы это N-разрядное число делится на некоторое постоянное число (полином), выбранное специальным образом (но делится не просто, а по модулю 2). Частное от этого деления отбрасывается, а остаток как раз и используется в качестве контрольной суммы. Мы не будем углубляться в математическое обоснование этого метода. Интересующиеся читатели могут обратиться к специальной литературе. Здесь же мы отметим только, что данный метод выявляет одиночные ошибки в массиве с вероятностью 100%, а любое другое количество ошибок с вероятностью, примерно равной 1–2-n, где n — количество разрядов контрольной суммы (это верно только при условии, что N гораздо больше n, что, впрочем, почти всегда выполняется). Например, при n = 8 данная вероятность составит 0,996, для n = 16 она будет равна 0,999985, а для n = 32 она будет 0,9999999997672. Иначе говоря, почти все ошибки будут выявляться. А теперь кратко поясним, что такое деление по модулю 2. Пусть массив (последовательность бит) имеет следующий вид: 101111001110 (для простоты берем небольшую разрядность). Число, на которое делим (называемое обычно образующим полиномом) возьмем 10011. Как оно выбирается? Оно должно делиться по модулю 2 без остатка только на единицу и само на себя (то есть это должно быть простое число в смысле деления по модулю 2). Разрядность полинома берется на единицу большая, чем требуемая разрядность контрольной суммы (остатка от деления). Так, чтобы получить 8-разрядный остаток (8-разрядную контрольную сумму), надо брать 9-разрядный полином. В нашем случае полином 5-разрядный, следовательно, остаток будет 4-разрядный. Для получения 8-разрядного остатка можно использовать, например, полином 1 0001 1101 или 11D в 16-ричном коде. Деление по модулю 2 производится точно так же, как и привычное для нас деление "в столбик" (рис. 14.6), но вместо вычитания в данном случае используется поразрядное сложение по модулю 2, то есть каждый результирующий бит представляет собой функцию Исключающее ИЛИ от соответствующих битов слагаемых. Частное от деления нас не интересует, а остаток, равный в нашем примере 1000, и будет циклической контрольной суммой. Рис. 14.6. Вычисление циклической контрольной суммы Как практически реализовать вычисление этого остатка (контрольной суммы)? Можно сделать это по приведенному здесь принципу деления в столбик (аппаратно или программно). Но в любом случае это довольно громоздко и медленно. Ускорить процесс вычисления можно, воспользовавшись табличным методом. Для этого составляется таблица чисел размером 2nхn, где n — разрядность контрольной суммы. Принцип вычисления чисел в таблице очень прост (табл. 14.1).
Таблица 14.1. Табличный метод вычисления циклической контрольной суммы
Адрес в таблице Данные в таблице (числа)
Остаток от деления числа 1 0000 0000 на полином
Остаток от деления числа 10 0000 0000 на полином
Остаток от деления числа 11 0000 0000 на полином
Остаток от деления числа 100 0000 0000 на полином
Остаток от деления числа 101 0000 0000 на полином
Остаток от деления числа 1111 1111 0000 0000 на полином

Числа представляют собой остаток от деления по модулю 2 числа с n конечными нулями (в нашем примере n = 8) и с n начальными разрядами, равными номеру числа (его адресу) в таблице. Деление производится на выбранный полином (в нашем случае — 9-разрядный). Таблица вычисляется один раз и хранится на диске или в ПЗУ.

Алгоритм вычисления контрольной суммы с помощью этой таблицы следующий (рассматриваем случай n = 8). Берем первый байт нашего информационного массива. Рассматриваем его как адрес в таблице (номер числа). Берем из таблицы число с полученным номером — получаем остаток О1. Берем второй байт массива и складываем его по модулю 2 с остатком О1. Полученное число используем как адрес в таблице. По этому адресу выбираем из таблицы остаток О2. Берем третий байт массива, складываем его по модулю 2 с остатком О2. Используя это число как адрес в таблице, выбираем из нее остаток О3 и так продолжаем до последнего байта массива. Естественно, это будет гораздо быстрее, чем вычисление "в столбик".

Реализация этого алгоритма с помощью цифровых схем требует только ПЗУ с организацией 2nхn (256х8 при 8-разрядной контрольной сумме), n-разрядного регистра и n элементов Исключающее ИЛИ (рис. 14.7). В ПЗУ заносится таблица промежуточных остатков (табл. 14.1), на вход схемы подаются один за другим байты массива, сопровождаемые стробом. Адресом ПЗУ служит сумма по модулю 2 входных данных и содержимого выходного регистра, в который по сигналу строба записывается выходной код ПЗУ. Перед началом вычисления состояние регистра обнуляется. После окончания всего массива в регистре образуется циклическая контрольная сумма.

Недостаток данной схемы параллельного вычислителя очевиден: в случае большого числа разрядов контрольной суммы требуется очень большой объем ПЗУ (64Кх16 для 16-разрядной суммы и 4Гх32 для 32-разрядной суммы). Поэтому она применяется сравнительно редко. Зато параллельный вычислитель обладает высоким быстродействием (байты могут поступать с периодом, равным сумме задержки выходного регистра, времени выборки адреса ПЗУ и задержки элемента Исключающее ИЛИ).


Рис. 14.7. Параллельный вычислитель 8-разрядной циклической контрольной суммы на ПЗУ

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

Количество точек включения обратной связи определяется количеством единиц в полиноме (единица в младшем разряде не учитывается), а номера разрядов сдвигового регистра, с которых берутся сигналы обратной связи, определяются номерами единичных разрядов в коде полинома. В отличие от генератора квазислучайного сигнала, в данном случае необходимо смешать по функции Исключающее ИЛИ не только сигналы обратной связи, но и входной сигнал данных в последовательном коде.


Рис. 14.8. Последовательный вычислитель 16-разрядной циклической контрольной суммы на регистре сдвига

На рис. 14.8 приведен пример последовательного вычислителя 16-разрядной циклической контрольной суммы при выбранном полиноме 1 0001 0000 0010 0001 или 11021 в 16-ричном коде (ре­ко­мен­да­ция МККТТ V.41). Так как в коде полинома три единицы (без младшего разряда), необходимо взять три точки включения обратной связи. При этом номера разрядов сдвигового регистра, к которым подключаются обратные связи, определяются положением единичных битов в полиноме. Перед началом работы сдвиговый регистр необходимо сбросить в нуль (сигнал "–Сброс"). Биты массива должны сопровождаться сигналом строба. После окончания массива в регистре будет циклическая контрольная сумма.

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

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

 

15. Лекция: Разработка более сложных цифровых устройств: версия для печати и PDA В лекции подробно рассматриваются примеры разработки сравнительно сложных цифровых устройств — логического анализатора и генератора аналоговых сигналов, начиная от анализа функций устройств и выделения основных узлов до проектирования принципиальных схем узлов и устройства в целом.
Разработка логического анализатора Логический анализатор — это контрольно-измерительный прибор, предназначенный для запоминания (фиксации) и последующего анализа (например, просмотра на экране) временных диаграмм большого количества цифровых сигналов. Логические анализаторы используются при динамической отладке различных цифровых устройств и систем, а также при контроле их работы. Совершенно незаменимы они при разработке и отладке различных микропроцессорных систем, контроллеров, компьютеров, где используется большое количество многоразрядных шин цифровых сигналов. Именно логические анализаторы позволяют разработчику увидеть те временные диаграммы, которые он рисует на бумаге при проектировании своего устройства, причем увидеть их в реальном масштабе времени, посмотреть, как работает устройство на своей нормальной рабочей скорости. Логический анализатор по своему назначению близок к осциллографу, так как он также позволяет наблюдать на экране временные диаграммы сигналов. Но существуют и существенные отличия логического анализатора от обычного (не цифрового) осциллографа:
  • Логический анализатор работает только с цифровыми, то есть двухуровневыми (реже трехуровневыми) сигналами, а осциллограф — с аналоговыми сигналами, имеющими бесконечно большое число разрешенных уровней.
  • Логический анализатор имеет большое количество входных линий (обычно от 16 до 64), то есть позволяет одновременно фиксировать множество входных сигналов, а осциллографы обычно позволяют одновременно увидеть не более четырех входных сигналов.
  • Логический анализатор работает в режиме однократного запоминания временных диаграмм (как запоминающий осциллограф). То есть анализатор запоминает состояния входных сигналов в течение заданного времени (называемого окном регистрации), а затем дает возможность анализировать зафиксированные последовательности. Осциллограф же работает обычно в режиме непрерывной развертки, то есть он не запоминает формы входного сигнала и позволяет наблюдать только повторяющиеся, периодические сигналы.
  • Логический анализатор предусматривает возможность так называемой предпусковой регистрации. Эта возможность предусматривается и в цифровых осциллографах, но ее нет в аналоговых осциллографах.
Рассмотрим подробнее, что такое предпусковая регистрация. Процесс регистрации входных сигналов (или отображения их на экране в обычном осциллографе) всегда должен быть привязан к какому-то моменту времени, к какому-то внешнему событию, называемому запуском. Иначе разобраться в отображаемых сигналах будет совершенно невозможно. Например, в осциллографах моментом запуска обычно является момент превышения входным исследуемым сигналом установленного порога. Сигналом запуска может служить и специальный внешний синхронизирующий сигнал. В логических анализаторах в качестве запуска обычно используется момент появления на входах заданного уровня или заданной последовательности одного или нескольких входных сигналов. В обычных осциллографах отображение формы входного сигнала (или входных сигналов) начинается в момент запуска, то есть на экране видно только то, что происходило со входными сигналами после момента запуска. Такая регистрация может быть названа послепусковой. Можно также сказать, что точка запуска всегда находится в начале окна регистрации (рис. 15.1). Рис. 15.1. Послепусковая регистрация в аналоговых осциллографах В логических анализаторах (и в цифровых осциллографах) существует возможность увидеть и зафиксировать не только то, что было после запуска, но еще и то, что происходило в течение определенного времени до момента запуска. Именно эта регистрация до момента запуска и называется предпусковой регистрацией. В этом случае точка запуска может находиться и в начале, и в середине, и в конце окна регистрации (рис. 15.2). Понятно, что такая возможность очень удобна, так как, выбирая величину длительности предпусковой регистрации, можно увидеть те события, временная привязка к началу которых затруднена или попросту невозможна. Длительность (глубина) предпусковой регистрации может быть постоянной (например, равной половине длительности окна регистрации) или переменной (то есть задаваться пользователем в пределах от нуля до полной длительности окна регистрации). При переменной глубине предпусковой регистрации точка запуска может располагаться в любой точке окна регистрации — от его начала до конца. С точки зрения схемотехники, логический анализатор представляет собой быстродействующую буферную оперативную память, работающую в периодическом режиме. Буфер этот однонаправленный: сначала в буферную память с большой тактовой частотой последовательно записываются состояния нескольких входных сигналов, а затем эта информация последовательно читается из буфера. Таким образом, адреса буферной памяти могут перебираться одним и тем же счетчиком как в режиме записи, так и в режиме чтения. Структура таких буферов уже рассматривалась. Рис. 15.2. Предпусковая регистрация в логических анализаторах и цифровых осциллографах Главные особенности логического анализатора, по сравнению со стандартной структурой информационного буфера на основе оперативной памяти, следующие:
  • большое число разрядов шины данных (то есть входных сигналов, каналов регистрации анализатора);
  • необходимость обеспечения режима предпусковой регистрации;
  • необходимость временной привязки процесса регистрации (записи в память) к состояниям входных сигналов (обеспечение запуска).
Первая из этих особенностей приводит к тому, что данные при чтении приходится считывать не все сразу, а по очереди (особенно при числе разрядов больше 32). Обычно данные требуется читать по 8 или по 16 разрядов. В результате усложняется та часть схемы буферной памяти, которая отвечает за чтение данных. Вторая особенность требует существенного усложнения схемы счетчика, перебирающего адреса буферной памяти. Наконец, третья особенность требует усложнения схемы управления работой информационного буфера. Логические анализаторы делятся на синхронные (или анализаторы логических состояний) и асинхронные (или анализаторы временных диаграмм). Синхронные анализаторы работают от тактового генератора исследуемой схемы и фиксируют только временные сдвиги, кратные его периоду, а следовательно, выявляют только нарушения в логике работы схемы. Асинхронные анализаторы работают от собственного внутреннего тактового генератора, поэтому они позволяют измерять абсолютные значения временных сдвигов между сигналами и могут выявлять ошибки из-за неправильно рассчитанных задержек, из-за емкостных эффектов и т.д. Они обычно делаются гораздо более быстрыми, чем синхронные анализаторы (рассчитываются на предельно возможную частоту регистрации). В идеале, логический анализатор должен обеспечивать оба эти режима работы, то есть работать как от своего внутреннего тактового генератора с разными тактовыми частотами, так и от внешнего тактового сигнала. Иначе говоря, тактовый генератор анализатора должен быть также достаточно сложным. Сформулируем исходные данные для проектирования логического анализатора. В данном случае нам важно не получить рекордные характеристики, а всего лишь продемонстрировать принципы разработки подобных схем на основе буферной памяти. Пусть количество входных линий анализатора (каналов регистрации) равно 32, количество регистрируемых состояний — 4096, максимальная тактовая частота — 10 МГц, тактовый генератор — внутренний с изменяемой частотой или внешний, запуск — по положительному или отрицательному фронту (синхропереходу) на одной из 8 входных линий, глубина предпусковой регистрации — задается программно. Будем также считать, что данные из памяти читаются порциями по 8 разрядов. Таким образом, буферная оперативная память анализатора должна иметь объем 128 Кбит при организации 4Кх32. Помимо оперативной памяти, анализатор должен включать в себя счетчик для перебора адресов с количеством разрядов не менее 12. В структуре анализатора должен быть также внутренний тактовый генератор с программно изменяемой частотой и возможностью подключения внешнего тактового сигнала. Наконец, необходимо наличие схемы запуска анализатора, которая будет выбирать одну из 8 входных линий и полярность синхроперехода (положительный или отрицательный фронт). Память целесообразно выполнить на многоразрядных микросхемах ОЗУ (для снижения количества микросхем). Требования к быстродействию памяти в данном случае не слишком высоки (при максимальной тактовой частоте 10 МГц в течение 100 нс необходимо успеть переключить счетчик адресов и записать входную информацию в ОЗУ). Микросхем памяти, способных обеспечить такую скорость работы, достаточно много. От счетчика адресов памяти требуется максимальное быстродействие (можно взять, например, микросхемы синхронных счетчиков КР531ИЕ17, которые достаточно легко каскадируются без потери быстродействия). Кроме простого перебора адресов, счетчик должен также обеспечивать предпусковую регистрацию. Остановимся на этом несколько подробнее. Для того чтобы реализовать предпусковую регистрацию, необходимо обеспечить непрерывную перезапись по кругу содержимого буферной памяти до момента прихода запуска (рис. 15.3). Рис. 15.3. Организация предпусковой регистрации То есть после записи последнего 4095 адреса надо записывать информацию по нулевому адресу. Если мы выбираем глубину предпусковой регистрации N тактов, то надо остановить регистрацию через (4096–N) тактов после момента прихода запуска. После остановки регистрации надо считывать содержимое памяти, начиная с точки остановки, с перебором адресов в том же самом направлении, что и при регистрации. Проведя 4096 операций чтения содержимого памяти, мы получим информацию о состоянии входных сигналов в течение N тактов до запуска и (4096–N) тактов после запуска, то есть моменту прихода запуска будет соответствовать содержимое адреса памяти, считанного N-ым. Однако все произойдет именно таким образом только в том случае, если от момента начала регистрации до момента прихода запуска логический анализатор успеет зафиксировать N тактов. Иначе, остановив регистрацию через (4096–N), мы не перепишем всю память, и в части его адресов будет находиться предыдущая информация. Чтобы избежать этого, надо запретить реакцию на запуск в течение N тактов после начала регистрации (выдержать своеобразное "мертвое" время). А что будет, если запуск придет в течение этого самого "мертвого" времени? Если исследуемый процесс — периодический (то есть все входные сигналы повторяются через какое-то время), то анализатор среагирует на следующий запуск после окончания "мертвого" времени. Если же исследуемый процесс — однократный, не повторяющийся, то надо начать процесс регистрации заведомо раньше (на "мертвое" время или больше), чем начнется изучаемый процесс (например, если мы исследуем старт компьютера при включении питания). Рис. 15.4. Временная диаграмма работы счетчиков логического анализатора В результате счетчики анализатора должны обеспечивать временную диаграмму, показанную на рис. 15.4. Адреса памяти начинают перебираться с началом регистрации. В течение N тактов после начала регистрации реакция на запуск запрещается, а затем разрешается. Через (4096–N) тактов после прихода запуска регистрация прекращается. Отметим, что точно так же может быть реализована предпусковая регистрация в цифровом осциллографе. По сравнению с логическим анализатором, в схему надо будет добавить только один или несколько АЦП и некоторые другие цифро-аналоговые узлы. Спроектируем схему счетчиков, реализующую приведенную временную диаграмму. Счетчик, перебирающий адреса памяти, должен быть 12-разрядным, так как 212=4096. Во время регистрации он должен работать в непрерывном режиме, реализуя постоянную перезапись по кругу всей буферной памяти. На этот же счетчик можно возложить функцию отсчета "мертвого" времени (N тактов). Но этот счетчик не может отсчитывать еще и (4096–N) тактов после прихода запуска, так как запуск может прийти в любой момент после окончания "мертвого" времени. Для этого понадобится уже другой счетчик, причем также 12-разрядный. Этот второй счетчик должен начинать работу только после прихода запуска (по сигналу "Разрешение запуска") и должен отсчитывать всего (4096–N) тактов, после чего завершать регистрацию. То есть получается, что логический анализатор начинает регистрацию по внешнему управляющему сигналу, а заканчивает автоматически через (4096–N) тактов после запуска, о чем должен сообщать вовне сигнал флага окончания регистрации. Рис. 15.5. Схема счетчиков логического анализатора Таким образом, один 12-разрядный счетчик должен отсчитывать N тактов, а другой 12-разрядный счетчик должен отсчитывать (4096–N) тактов. Проще всего организовать такой режим, если в оба счетчика записать до начала работы код N и задать первому счетчику инверсный режим счета, а второму — прямой режим счета. Перебор адресов памяти первым счетчиком начнется с адреса N и будет происходить на уменьшение (а не на увеличение, как на рис. 15.3), однако для работы буферной памяти это не имеет никакого значения. Сигнал переноса первого счетчика появится через N тактов после начала регистрации. Этот сигнал должен разрешать ожидание запуска (сигнал РЗ на рис. 15.4). Когда же приходит запуск, то разрешается работа второго счетчика, начинающего считать с кода N на увеличение. В результате сигнал переноса второго счетчика появится через (4096–N) тактов после начала его работы. Этот сигнал должен остановить процесс регистрации. После окончания регистрации должен начаться процесс чтения из памяти. При этом первый счетчик должен перебирать адреса памяти по стробу чтения в том же направлении, что и при записи (то есть в режиме инверсного счета). 4096 последовательно произведенных циклов чтения позволит перебрать все 4096 адресов памяти, причем на N-ом цикле чтения будет прочитан такт, в котором произошел запуск. Схема счетчиков логического анализатора, реализующая описанный алгоритм, приведена на рис. 15.5. Два 12-разрядных счетчика реализованы на шести микросхемах ИЕ17. Первый счетчик (на рисунке вверху) работает в режиме инверсного счета, второй (на рисунке внизу) — в режиме прямого счета. Перед началом работы в оба счетчика по внешнему сигналу "–Зап." записывается код N. Причем четыре младших разряда 12-разрядного кода N равны нулю, а записываются только 8 старших разрядов. Это приводит к тому, что глубина предпусковой регистрации может задаваться с точностью до 16 тактов и принимать значения из ряда: 0, 16, 32, 48, 64,..., 4080. При записи на входы счетчиков –EWR и С поступают отрицательные сигналы, причем сигнал –EWR задержан относительно сигнала С на двух инверторах и (при необходимости) на конденсаторе. В результате положительный фронт сигнала С приходит тогда, когда сигнал –EWR равен нулю, что и требуется для записи. На вход С обоих счетчиков могут приходить еще два сигнала: строб чтения из памяти "–Чт." и тактовый сигнал "Такт". Сигнал "Такт" приходит при регистрации (в режиме записи в память), а сигнал "–Чт." поступает при чтении из памяти зарегистрированной информации. После того как в оба счетчика записан код N, необходимо начать регистрацию по внешнему сигналу "–Старт". Этот сигнал сбрасывает в нуль триггеры 1 и 2 и устанавливает в единицу триггер 3. Выходной сигнал триггера 3 разрешает регистрацию (сигнал "Рег." на рис. 15.4), то есть разрешает прохождение тактовых импульсов на входы счетчиков С. Это приводит к тому, что начинает работу первый счетчик, а второму счетчику работа запрещается по входу -ECT выходным сигналом триггера 2. Первый счетчик, выходной код которого используется как адрес памяти, отсчитывает N тактов в инверсном режиме и вырабатывает сигнал переноса -CR. Этим сигналом перебрасывается в единицу триггер 1. Затем первый счетчик продолжает перебирать адреса памяти по кругу, а запись нулей в триггер 1 запрещается элементом 2И-НЕ на входе триггера. Выходной сигнал триггера 1 (сигнал РЗ на рис. 15.4) разрешает работу триггера 2 и тем самым разрешает реакцию схемы на сигнал запуска "Запуск" (положительный фронт). После прихода сигнал "Запуск" перебрасывается в единицу триггер 2, разрешая работу второго счетчика. Первый счетчик в это время продолжает считать. Второй счетчик начинает свой счет с кода N, досчитывает в режиме прямого счета до 4096 и своим сигналом переноса –CR перебрасывает в нуль триггер 3. Это приводит к запрету поступления тактовых импульсов на вход С счетчиков и к остановке регистрации. После этого может начаться чтение записанной информации по стробу "–Чт.". По заднему (положительному) фронту этого сигнала первый счетчик будет перебирать адреса памяти в инверсном режиме. Второй счетчик также будет считать, но это не имеет никакого значения. После 4096 циклов чтения вся информация из памяти будет прочитана, и схема будет готова к новой регистрации. Перейдем теперь к проектированию других узлов логического анализатора. Как уже отмечалось, тактовый сигнал анализатора может быть как внутренним (от внутреннего тактового генератора), так и внешним (от исследуемой схемы). Для повышения универсальности анализатора целесообразно обеспечить его работу на нескольких тактовых частотах. Большие частоты будут использоваться для анализа быстрых процессов, а малые частоты — для анализа длительных процессов. Тактовая частота не должна при этом принимать слишком много значений. Вполне достаточно ряда нескольких частот, различающихся вдвое. Пример схемы тактового генератора для логического анализатора приведен на рис. 15.6. Рис. 15.6. Тактовый генератор логического анализатора Тактовый генератор анализатора выполнен на кварцевом генераторе, 6-разрядном счетчике (ИЕ19) и 8-канальном мультиплексоре (КП7). Он может выдавать на выход ряд тактовых частот, различающихся в 2 раза (период 100, 200, 400, 800, 1600, 3200, 6400 нс) или внешний тактовый сигнал ВТС. То есть он позволяет реализовать как синхронный, так и

<== предыдущая лекция | следующая лекция ==>
Введение | Источники погрешностей, влияющих на работу АЦП и ЦАП


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.008 сек.