Проектирование устройств сопряжения (1083567), страница 14
Текст из файла (страница 14)
Что касается прерываний, то для логического анализатора их использование очень желательно, если не необходимо. Ведь между началом регистрации и ее окончанием, связанным исключительно с приходом запуска, может пройти довольно большое время. Целесообразно предусмотреть возможность выполнения в этот период компьютером других задач. Поэтому прерывание по окончании регистрации мы будем формировать, что, впрочем, не исключает необходимости чтения флага готовности.
Таким образом, интерфейсная часть нашего одноплатного анализатора должна обеспечивать следующие параметры. Количество адресов УС в адресном пространстве устройств ввода/вывода — 5, из которых четыре используются для чтения Зарегистрированных данных, а один — для чтения флага готовности. Для записи управляющего слова будем использовать два из этих пяти адресов (надо записать глубину предпусковой регистрации, код выбора тактовой частоты, код выбора запуска). Используем одно прерывание по окончании регистрации. Как видим, ничего сложного здесь нет, поэтому к интерфейсной части мы не возвращаемся.
Переходим к операционной части. Основные ее узлы: буферное ОЗУ объемом 128 Кбит с организацией 4К х 32, счетчик для перебора адресов, внутренний тактовый генератор с программно изменяемой частотой, схема запуска и входные буфера для регистрируемых сигналов.
ОЗУ целесообразно выполнить на многоразрядных микросхемах (для снижения количества корпусов). Требования к его быстродействию в данном случае невысоки (при максимальной тактовой частоте 10 МГц в течение 100 нс необходимо переключить счетчик адресов и записать входную информацию в ОЗУ). Таких микросхем, особенно зарубежного производства, достаточно много.
От счетчика требуется максимальное быстродействие (можно взять, например, микросхемы КР531ИЕ17, которые достаточно легко каскадируются без потери быстродействия). Кроме простого перебора адресов счетчик должен также обеспечивать предпусковую регистрацию. Остановимся на этом несколько подробнее. Для того чтобы реализовать предпусковую регистрацию, необходимо до прихода запуска непрерывно переписывать содержимое буферного ОЗУ по кругу (рис. 2.42.). Если мы выбираем глубину предпусковой регистрации N тактов, то надо остановить регистрацию через (4096 — N) тактов после прихода запуска. Затем надо считывать содержимое ОЗУ, начиная с точки остановки с перебором адресов в том же направлении, что и при регистрации. Проведя 4096 операций чтения содержимого ОЗУ, мы получим N тактов до запуска и (4096 — N) тактов после запуска, то есть моменту прихода запуска будет соответствовать адрес ОЗУ, считанный N-ым.
Рис. 2.42. Реализация предпусковой регистрации.
Однако все произойдет именно так только в том случае, если от момента начала регистрации до момента прихода запуска наш анализатор успеет зафиксировать N тактов. Иначе мы не перепишем все ОЗУ, и в части его адресов будет находиться предыдущая информация. Чтобы избежать этого, надо запретить реакцию на запуск в течение N тактов после начала регистрации (выдержать своеобразное "мертвое" время). А что будет, если запуск придет в течение этого "мертвого" времени? Если исследуемый процесс периодический, то анализатор среагирует на следующий запуск. Если же процесс однократный, то надо начать процесс регистрации заведомо раньше (на "мертвое" время или больше), чем начнется изучаемый процесс (например, если мы исследуем старт компьютера при включении питания).
В результате счетчики анализатора должны обеспечивать временную диаграмму, показанную на рис. 2.43. Адреса ОЗУ начинают перебираться с началом регистрации. В течение N тактов после начала регистрации запуск запрещен. Через (4096 — N) тактов после прихода запуска регистрация прекращается.
Рис. 2.43. Временная диаграмма работы счетчиков логического анализатора.
Отметим, что точно так же может быть реализована предпусковая регистрация в цифровом осциллографе, который, кстати, тоже можно выполнить в виде одноплатного УС, сопрягаемого с системной магистралью. По сравнению с логическим анализатором в схему надо будет добавить одно или несколько АЦП и некоторые другие цифро-аналоговые узлы.
Что касается остальных узлов логического анализатора, то они не представляют особого интереса, поэтому сразу обратимся к функциональной схеме всего УС (рис. 2.44). Здесь мы уже не разрисовываем подробно интерфейсную часть, как мы делали при рассмотрении предыдущего УС, так как ничего принципиально нового она не содержит.
Тактовый генератор выполнен на счетчике Сч.1 и мультиплексоре M1. Он может выдавать ряд частот, различающихся в 2 раза (период 100, 200, 400, 800, 1600, 3200, 6400 нс) или внешний тактовый сигнал ВТС. То есть здесь реализуются как синхронный, так и асинхронный режимы работы. В качестве запуска используется положительный или отрицательный переход на одной из восьми входных линий, выбираемых мультиплексором М2 (полярность перехода задается управляемым инвертором на элементе "Исключающее ИЛИ"). 7-разрядное управляющее слово записывается в регистр управляющего слова РУС по сигналу ЗУС (STR W0).
Перед началом работы необходимо записать в наш анализатор управляющее слово и упреждение (глубину предпусковой регистрации). 8-разрядный код упреждения N записывается в два 12-разрядных счетчика Сч.2 и Сч.З по сигналу ЗУП (STR W1). При этом на четыре младших входных разряда счетчиков подается сигнал логического нуля (то есть упреждение задается с точностью до четырех тактов и выбирается из ряда: 0, 16, 32, 48, 64, ..., 4080 тактов).
Запись упреждения служит стартом регистрации (сбрасываются триггера T1, T2, ТЗ, начинает считать Сч.2, ОЗУ переходит в режим записи, а входной буфер БФ — в режим пропускания). Счетчик Сч.2 работает в режиме вычитания (обратного счета). После того как он отсчитал N тактов, перебрасывается триггер Т1 (заканчивается "мертвое" время). После этого Т2 начинает реагировать на синхропереход СП. После поступления синхроперехода триггер Т2 перебрасывается и разрешает работу Сч.З, работающего в режиме прямого счета. Затем Сч.З отсчитывает (4096 — N) тактов и перебрасывает ТЗ. На этом регистрация закончена.
Рис. 2.44. Функциональная схема логического анализатора.
Сигнал РЕГ с выхода ТЗ служит флагом готовности и используется для выработки прерывания. По окончании регистрации по четырем адресам компьютер считывает записанную в ОЗУ 32-разрядную информацию. При этом сигнал чтения из четвертого адреса Чт.4 (STR R3) перебрасывает на единицу Сч.2, то есть изменяет адрес ОЗУ. Этот процесс чтения повторяется 4096 раз. В результате полный цикл перекачки зарегистрированной информации включает в себя 16384 обращения к логическому анализатору.
Таким образом, мы рассмотрели проектирование довольно типичного УС с буферным ОЗУ с периодическим режимом обмена. Данный модуль логического анализатора может быть использован в системе динамической отладки УС, особенности которой мы рассмотрим позже.
2.1.11. Генератор сигналов произвольной формы
Еще один пример УС с буферным ОЗУ — это цифровой программно-управляемый генератор сигналов произвольной формы, позволяющий формировать аналоговые сигналы с заданными параметрами: формой, периодом, амплитудой. Такой генератор может использоваться в контрольно-измерительной системе на базе персонального компьютера или в составе промышленных установок, в которых требуется формирование различных сигналов (разовых или периодических), например в системах виброиспытаний.
С точки зрения разработчика УС, такой генератор — это УС, имеющее в своем составе буферное ОЗУ с периодическим режимом обмена с внешним устройством. Перед началом работы компьютер записывает в буферное ОЗУ коды выборок генерируемого сигнала, задавая его форму, определяет период сигнала и его амплитуду, а также режим запуска генерации: разовый или автоматический. Затем дается старт генерации во время которой выходные коды буферного ОЗУ поступают на ЦАП, преобразующий их в уровни выходного аналогового сигнала. Программные средства генератора при этом могут обеспечивать различные методы задания формы сигнала: выбор стандартного сигнала (синусоидальный, прямоугольный, треугольный, пилообразный, шумовой и т.д.), формирование сигнала по математической формуле, задание и коррекция формы на экране компьютера.
Мы будем разрабатывать генератор со следующими характеристиками: частота выходного сигнала — 2 Гц ... 125 кГц, амплитуда выходного сигнала — 50 мВ ... 10 В. Следует учесть, что сигналы сложной формы нужны обычно низкочастотные, поэтому выбранные параметры обеспечат довольно высокую универсальность генератора. В схеме должны быть предусмотрены режим разового запуска (остановка генерации после одного периода сигнала) и режим автоматического запуска (непрерывная генерация до ее программной остановки).
Оценим предварительно требования к интерфейсной части УС. Если ориентироваться на 8-разрядный обмен (скорость обмена здесь, как и в случае с логическим анализатором, некритична), то потребуется один адрес для обмена с буферным ОЗУ (запись и чтение, которое нужно для самотестирования), два адреса (16 разрядов) для записи кода частоты (периода), один адрес для записи кода амплитуды и один адрес для записи управляющего слова и чтения слова состояния. Итого пять адресов. Отметим, что увеличивать количество разрядов выходного ЦАП больше, чем до восьми, особого смысла в данном случае не имеет. В управляющее слово входят два бита: разрешение/запрет генерации и разовый/автоматический запуск. В слово состояния входит всего один бит (генерация идет), который нужен только при разовом запуске. Прямой доступ здесь не нужен, прерывание — тоже, так как даже по окончании разового запуска никаких срочных действий предприниматься не должно. То есть ничего особенного интерфейсная часть собой не представляет.
Для задания частоты в цифровых генераторах (или синтезаторах, как их еще называют) сигналов произвольной формы наиболее часто используются два метода. Согласно первому из них, адреса буферного ОЗУ перебираются обычным двоичным счетчиком, а для изменения частоты выходного сигнала меняется частота, с которой эти адреса перебираются. В этом случае всегда опрашиваются все адреса ОЗУ, то есть количество выборок на период выходного сигнала не изменяется при изменении частоты, а значит, не изменяется и точность воспроизведения формы сигнала. Недостатком такого метода является то, что он хорошо работает только в области низких и инфранизких частот выходного сигнала, так как большие частоты требуют в данном случае очень высоко-то быстродействия ЦАП. Еще один существенный недостаток такого подхода состоит в том, что частота сигнала помехи, возникающей из-за квантования уровней выходного сигнала, здесь прямо пропорциональна частоте выходного сигнала (рис. 2.45). Поэтому фильтрация этого сигнала помехи (обычно необходимая) довольно трудоемка и требует специальных перестраиваемых фильтров.
Рис. 2.45. Синтез аналогового сигнала по выборкам.
Второй метод задания частоты выходного сигнала несколько сложнее (рис. 2.46). В этом случае для перебора адресов буферного ОЗУ используется не счетчик, а накапливающий сумматор, состоящий из двоичного сумматора и регистра, охваченных обратной связью. При этом с каждым следующим импульсом тактового генератора к выходному коду регистра прибавляется входной управляющий код и полученная сумма снова записывается в регистр. В результате в каждом такте приращение адреса ОЗУ будет определяться входным управляющим кодом накапливающего сумматора, изменяя который мы можем изменять скорость прохождения всех адресов ОЗУ и, следовательно, частоту выходного аналогового сигнала. Если обозначить входной код N, частоту тактового генератора f, а количество адресов ОЗУ — М, то выходная частота F = fN/M, то есть пропорциональна входному коду.
Недостаток этого метода — изменение количества выборок на период выходного сигнала обратно пропорционально его частоте, то есть форма сигнала воспроизводится с разной точностью на разных частотах. Но его большое преимущество состоит в том, что частота сигнала помехи будет постоянна (она равна f) и, следовательно, отфильтровать этот сигнал очень просто с помощью самого простого (не перестраиваемого) фильтра нижних частот. Частота выходного сигнала при такой схеме задается с постоянным шагом во всем частотном диапазоне, поэтому относительная погрешность ее установки минимальна в верхней части частотного диапазона.
Рис. 2.46. Перебор адресов ОЗУ с помощью накапливающего сумматора.
Мы будем разрабатывать генератор на основании именно этого второго метода задания частоты. Для обеспечения требуемого частотного диапазона при минимальном количестве выборок на период выходного сигнала, равном 16, накапливающий сумматор должен иметь 20 разрядов, а тактовая частота должна быть 2 МГц. С такой частотой могут успешно работать многие микросхемы ЦАП, например, К1108ПА1А (время преобразования не более 400 нс). В схему накапливающего сумматора (рис. 2.47) входят 5 микросхем 4-разрядных полных сумматоров К155ИМЗ (задержка не более 50 нс) и 3 микросхемы 8-разрядных регистров со сбросом КР1533ИР35 (задержка не более 15 нс). То есть предельная рабочая частота схемы около 15 МГц. Старшие 4 разряда кода задания частоты здесь не используются. На адресные входы ОЗУ с кодами выборок выходного сигнала подается требуемое число старших разрядов выходного кода накапливающего сумматора.