16 декабря 2011 г.

Делаем курсач по VMEbus. Часть 5. Чтение адреса slave-устройством. Типы адресации. Регистр-защелка и компаратор

Любой цикл пересылки данных по шине DTB начинается с выставления мастером адреса и модификатора адреса на соответствующие линии. Поэтому работа слэйва в цикле всегда начинается с обработки адреса.

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




Типы адресации устройств VME

Существует три типа адресации устройства на шине VME:

  1. короткая - A16/D08,
  2. стандартная - A24/D16,
  3. расширенная - A32/D32.
Видно, что тип адресации также определяет количество одновременно передаваемых по шине байтов: при короткой адресации в одном цикле пересылки данных можно пересылать 1 байт, при стандартной - 1 или 2, при расширенной - 1, 2, 3 или 4. Определитесь, сколько байт одновременно будет передавать ваше устройство. Например, если вы делаете 12-разрядный ЦАП, то вам точно не хватит адресации типа A16/D08, а A24/D16 будет в самый раз.

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


Каждый слэйв имеет свой адрес. Вернее, каждый его регистр имеет свой адрес. 

Регистр-защелка

Для осуществления чтения адреса с шины нам нужно вспомнить принципы работы некоторых замечательных устройств, в том числе одной из интереснейших цифровых микросхем - регистра-защелки (latch-register).

Восьмибитный регистр-защелка содержит 8 входов данных и 8 выходов данных, а также вход для строба CLK. Работа этого устройства заключается в том, что при положительном фронте сигнала на входе CLK значения со входов DIN(0-7) записываются на соответствующие выходы Q(0-7). При дальнейшей смене входных сигналов состояние выходов не будет никак меняться, пока снова не появится строб на CLK. 

Компаратор

Другое устройство, которое нам понадобится для работы - это компаратор. Компаратор сравнивает коды на группах входов A и B и выставляет высокий уровень на выходе ">", если код A больше B, на выходе "<", если код A меньше B, на выходе "=", если коды равны.


Обычно компаратор сравнивает 4х или 8ми битные коды, для сравнения более длинных слов компараторы можно легко каскадировать. Для этого у них есть специальные входы переноса. Последовательно соединяя компараторы мы получаем постепенное сравнение слов начиная с младших разрядов.


Если слова длиной 8, 16 или сколько вам угодно бит полностью совпадают, то самый последний компаратор выставит высокий уровень на своем выходе A=B.

Обработка адреса slave-устройством

Для чего же нам нужны регистры и компараторы?

Вспомним, с чего начинается цикл пересылки данных по шине DTB:

МАСТЕР 
  1. выставляет адрес на линиях A02-Axx
  2. выставляет модификатор адреса на линиях AM00-AM05
  3. выставляет высокий уровень на LWORD*
  4. выставляет высокий уровень на IACK*
  5. выставляет низкий уровень на AS*
СЛЭЙВ
  1. принимает адрес
  2. принимает модификатор адреса
  3. принимает LWORD* высокого уровня
  4. принимает IACK* высокого уровня
  5. принимает AS* низкого уровня
  6. если принятый от мастера адрес совпадает с собственным адресом слэйва, он выбирает внутримодульное устройство для продолжения работы

Для примера рассмотрим адресацию типа A16. Мастер устанавливает 2 байта данных на линиях адреса и еще 6 бит на линиях модификатора адреса. Мы для всей этой радости заводим три регистра: два на адрес и один на модификатор.

После того, как мастер выставит адрес, он генерирует строб на линии адресного строба AS*. Это и будет сигналом для срабатывания защелки наших регистров. Не забываем инвертировать сигнал, чтобы строб стал положительным!
Вот как это будет выглядеть:

На рисунке я не указал еще несколько линий: LWORD*, A01, DS0*, DS1*, IACK*, добавьте их сами по вкусу.

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


Программируемый компаратор

Программируемый компаратор - веселая штука, которая сравнивает код на своих входах с уже запрограммированным в него кодом. Вот есть вот такой компаратор ALS528 (его datasheet):


Изначально все входы будут срабатывать на низкий уровень. Мы программируем компататор для того, чтобы он срабатывал на определенную комбинацию 0 и 1 на входах. Программирование каждого бита осуществляется по очереди.

Как происходит программирование:
1. Подключаем вход G к низкому уровню, а все входы P - к высокому.
2. Нужный вход P подключаем к +12В.
3. На G подаем импульс +12В.
4. Возвращаем выбранный P на высокий уровень. Повторяем процедуры 2-4 для всех нужных битов.

После подобной хирургической операции компаратор будет срабатывать только если сигналы на входах соответствуют запрограммированным. Например, мы хотим, чтобы компаратор среагировал на адрес BABA. Для этого аккуратно по очереди прожигаем биты P1, P3, P4, P5, P7, P9, P11, P12, P13. Тогда компаратор будет выдавать на выходе 0 только если код равен 1011 1010 1011 1010. Ни 1111 1111 1011 1010, ни даже на 1011 1011 1011 1011, ни на какую другую из 65536 комбинаций.

Использование программируемого компаратора позволяет избавиться от ПЗУ в вашей микросхеме, ведь адреса мы прошиваем в компараторах!

Нет, само программирование нас вообще не касается, мы априорно предполагаем, что какой-то правильный адрес зашит в компараторах и используем его.

P.S.
Ну вот, запилили уже интерфейс для DTB почти! Задаем вопросы в комментариях, не стесняемся!

Список статей

Часть 1. Введение. Евромеханика
Часть 2. Шины и устройства
Часть 3. Шина DTB
Часть 4. Slave-устройство на шине DTB. Циклы записи и чтения
Часть 5. Чтение адреса slave-устройством. Типы адресации. Регистр-защелка и компаратор
Часть 6. Программное управление slave-устройством. Дешифратор, D-триггер и свичи
Часть 7. Прерывания, прерыватели, шина приоритетных прерываний,вектор прерывания
Часть 8. Шинные формирователи
Часть 9. Рисуем схему по ЕСКД. Schemagee. Автоматическое создание списка элементов
Часть 10.Добавляем собственную микросхему в Schemagee
Часть 11. Импорт микросхемы из P-CAD в SchemaGee с последующим допиливанием