Добавить очереди операций PBUS/SBUS, общую консоль, настройки Candle и SLCAN, декодеры DSView и обработку плотных графиков. Обновить протокол Бальзам и проверки общих компонентов.
9.6 KiB
Декодеры DSView для шин 96-контактного интерфейса
Два независимых декодера: Plates PBus и Plates SBus. Показывают адрес устройства, регистр, сырые 16-битные данные, результат проверок и итог каждого обращения. Повторные одинаковые обращения выводятся отдельно.
Декодеры устанавливаются в DSView и разбирают цифровой захват шин,
используемых с SETGUI. Формат взят из ParallelBusSlave_ver_2_0.vhd
и SerialBusSlave_ver_2_0.vhd из ip_repo репозитория PlatesSim. Зависимости
от установленного SETGUI или PlatesConf нет. Число 96 относится
к разъёму; ширина данных PBus составляет 16 бит.
Установка
- Закрыть DSView.
- Скопировать обе папки
plates_pbusиplates_sbusизdecodersв каталогdecodersиспользуемой установки DSView. Внутри каждой папки должны непосредственно лежать__init__.pyиpd.py. - Открыть DSView, загрузить захват или получить новый.
- В списке декодеров выбрать Plates PBus либо Plates SBus и назначить соответствующие каналы анализатора. При одновременном захвате обеих шин добавить оба декодера.
Используется sigrok API 3 и синтаксис Python 3.6+. Формат декодеров сверён со штатными пакетами установленного DSView и исходниками DSView. Общие сведения о пользовательских декодерах — в инструкции производителя.
Каналы PBus
| Сигнал декодера | Подключение | Назначение |
|---|---|---|
| PBCE | pbce |
Низкий уровень разрешает транзакцию |
| PBACK | pback |
Подтверждения адреса, данных и инверсии |
| D0…D15 | pbdata[0]…pbdata[15] |
Все 16 разрядов общей двунаправленной шины |
| PBCLK | pbclk, необязательно |
Проверка уровня тактовой линии в фазах ответа |
Для полного декодирования PBus требуется 18 каналов, с PBCLK — 19. Анализатор на 16 каналов не захватит полный набор одновременно. Назначать D0…D15 по номерам разрядов шины, а номера контактов 96-контактного разъёма брать из схемы конкретной платы.
Операция начинается со спада PBCE. Первый спад PBACK подтверждает адрес:
PBDATA[15:8] = dev*16 + reg, PBDATA[7:0] = ~PBDATA[15:8].
Следующий подъём PBACK подтверждает 16-битные данные; следующий спад —
их 16-битную инверсию. При назначенном PBCLK данные должны подтверждаться
при CLK=0, инверсия — при CLK=1. Выборка слов выполняется по ACK.
Неверная инверсия адреса, неверная инверсия ответа, нарушение фазы CLK
и незавершённое ожидание ACK выводятся отдельными предупреждениями.
Снятие CE до завершения или конец захвата сохраняют частичную операцию
с признаком complete=False. Начальный фрагмент захвата с уже низким CE
пропускается до следующего полного начала транзакции.
Каналы SBus
| Сигнал декодера | Подключение | Направление |
|---|---|---|
| SBCLK | sbclk |
Тактовая линия мастера |
| SBDATAIN | sbdatain |
ТМС → платы |
| SBDATAOUT | sbdataout |
Платы → ТМС |
Для SBus достаточно трёх каналов. Имена IN/OUT соответствуют входу и выходу ведомого блока в HDL.
Кадр содержит 29 бит старшим вперёд: направление (0 — чтение, 1 — запись), устройство (4), регистр (4), данные (16), CRC (4). Декодер выбирает биты по нарастающим фронтам SBCLK. Заголовок и данные записи идут по SBDATAIN; данные чтения и CRC ответа — по SBDATAOUT. CRC учитывает все 25 бит направления, адреса и данных, а затем четыре завершающие единицы по алгоритму HDL. Это собственный алгоритм, его нельзя заменять произвольным штатным CRC-4.
| Параметр | По умолчанию | Смысл |
|---|---|---|
| Frame gap (us) | 3,6 мкс | Минимальное время неподвижного CLK для синхронизации нового кадра |
| Write ACK sampling delay (us) | 0,5 мкс | Задержка выборки SBDATAOUT после последнего бита CRC записи |
Пауза учитывается при обоих уровнях CLK. Значение 3,6 мкс взято из текущих COUNT_RESET=180 и частоты блока SBus 50 МГц. Задержка ACK 0,5 мкс — настраиваемая точка наблюдения после проверки CRC и до сброса по паузе. Для другого ведомого или других времён обмена параметры нужно согласовать с захватом. Межкадровая пауза должна превышать длительность обычного неподвижного участка CLK внутри кадра; задержка ACK должна быть положительной и меньше межкадровой паузы.
Низкий SBDATAOUT в точке выборки подтверждает запись. Высокий уровень
помечается ACK HIGH (NACK / no response): по одному уровню нельзя
отличить отказ от отсутствия платы. CRC и ACK показываются независимо.
ACK frontend PlatesSim подтверждает CRC, но не доказывает помещение
команды в FIFO или её применение CPU1.
Если файл закончился до выборки ACK, полная запись сохраняется с ack=None.
Частичный кадр отмечается числом полученных битов; следующий кадр
синхронизируется после паузы. В начале захвата SBus ожидает наблюдаемую
паузу, чтобы фрагмент уже идущего обмена не стал ложным заголовком.
При записи включать в захват паузу перед первым кадром и время после CRC.
Проверки и границы подтверждённого
Из корня репозитория:
python -m unittest discover -s tools/dsview/tests -p test_plates_buses.py -v # Проверка декодеров на цифровых трассах без запуска DSView.
21 тест проверяет оба направления SBus, CRC, отдельную выборку ACK,
повторы, паузы обоих уровней, восстановление синхронизации, края диапазонов
PBus, обе инверсные проверки, фазы ACK, отсутствие каналов и обрывы захвата.
Среда тестов исполняет рабочие методы decode() и end() через подмену
API ожидания событий; сигналы формируются независимо от автоматов декодеров.
Дополнительно проверены синтаксис Python 3.6 и UTF-8 исходников.
Загрузка новых пакетов в интерфейсе DSView и захват физического обмена с SETGUI пока не проверены. Номера контактов разъёма и соответствие каналам анализатора задаются по фактическому подключению. Модели отдельных линий TK/PWM/ACK в эти декодеры не входят.
Python-выход каждого декодера содержит ['FRAME', словарь]. Общие поля:
bus, operation, dev, reg, value. У SBus отдельно доступны crc,
crc_expected, crc_ok, ack; у PBus — address_word, address_ok,
inverse, inverse_ok, errors, complete, ok.