ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
979621
Evgeny_CD, Архитектор (18.02.2020 22:28 - 22:31, просмотров: 8445)
[Универсальный самосинхронизирующийся код для проводных шин]. По мотивам идей троичного кодирования в I3C -> Да здравствуют системы счисления по основанию 7! http://caxapa.ru/778579.html
http://caxapa.ru/978946.html
Пусть у нас есть некая шина из 3х бинарных линий. Каждая линия 0 или 1. В каждый момент времени шина имеет одно из 8 состояний, ибо 23=8. Если в данный момент времени шина имеет состояние K, то она может в будущем принять либо то же состояние, либо одно из 8-1=7 состояний. Для простоты считаем, что новое состояние =старое+изменение [0...6] по модулю 8. При этом если мы потребуем, чтобы на каждом такте у нас было новое состояние, то это эквивалентно: -- самосинхронизация - просто опрашиваем шину с повышенной частотой и ловим изменения в одной или более линий -- за каждый такт передается одна цифра системы счисления по основанию 7. Начинаем магию примитивной целочисленной арифметики. Все подходы я опускаю, даю финал. 75=16807, LOG2(16807) = 14,03677461 214=16384 214-1=16383 (75)-(214-1)=424 Если в течение 5 периодов мы передали 5 цифр по основанию 7, то мы передали число, которое в десятичной системе счисления представимо в диапазоне [0....16806] 14 двоичных бит кодируют десятичные числа в диапазоне [0...16383]. Этот диапазон входит в то, что кодируют 5 цифр по основанию 7 и еще останется 42410 "лишних" значения Как выделить начало группы бит? Все как описано, но используем удвоенный интервал времени. В течение удвоенного интервала времени мы тоже передаем одно из 7 значений. 14 бит - не очень удобно, хорошо бы 16. из 7 значений, которые мы передаем в течение удвоенного интервала, 4 назначаем на как маркер начала 16 битной последовательности, при этом эти 4 символа кодируют 2 бита. Остается 3 служебных символа - начало пакета, конец пакета, прерывание. КПД кодирования. 5 тактов на передачу основной части и 2 такта на служебный символ = 7 тактов. За 7 тактов по трех битной шине будет передан 21 бит, и при этом это неудобное количество, и не будет разделения на группы битов и служебные символы. В нашем варианте вместо 21 бита мы передадим 16 битов (кпд 76,2%), при этом у нас будет разделение на поля и служебные символы. Что нам это дает? MAX14483 - цифровой изолятор. 3 TX, 3 RX. 200 МБит/сек, 1.5 пФ проходная емкость. 25 - $4.51 SI8663BB-B-IU - цифровой изолятор. 3 TX, 3 RX. 150 МБит/сек, 2 пФ проходная емкость. 25 - $2.34. Немного ниже изоляция, но есть варианты толику дороже с "большой" изоляцией. 150*3=450 Мбит/сек сырая, *0.762=342,9 Мбит/сек, 42,86 Мбайт/сек чистая информационная емкость дуплексного канала связи. Самые дешевые FPGA всех времен и народов --> C ECP5 все понятно, там за $5 можно монстра сделать, но BGA 0.8. Мы будем хитрее. Например, LCMXO2-1200HC-6SG32I -40°C ~ 100°C 32-QFN 21 1280 7x9k - - 1 100 - $5.5 LCMXO2-1200HC-6TG100I IC FPGA 79 I/O 100TQFP 100 - $9.45 LCMXO2-2000HC-6TG100I IC FPGA 79 I/O 100TQFP 100 - $13.08 - это резерв по емкости. Это самая быстрые, со встроенным стабилизатором! Максимальная частота для IO LVTTL33 150 MHz 16-bit counter - 324 MHz 16x4 Pseudo-Dual Port RAM (one PFU) - 500 MHz Primary Clocks - 388 MHz Edge Clock - 400 MHz В чипе есть PLL и 7 9кбит блоков памяти 183 MHz макс. И встроенный FLASH! Явно этой FPGAшки хватит на простой кодер-декодер (без перевода в системы счисления) того, что я придумал. Эдакий PHY будет иметь снаружи 16 битную шину, в каждом 16 битном слове будет 4 цифры по основанию 7. Они будут кодироваться 4-х битными полями. Старший бит - признак служебного символа. Максимальная частота обмена 150/4 = 37,5 М 16 битных слов в секунду. Прокачает быстрая параллельная шина современного MCU. По DMA, конечно. DMA должен быть шустрый, лучше всего использовать отдельный блок памяти, чтобы в моменты интенсивного обмена проц там не лазил. На ECP5 за $5 получится полноценный модем, и там даже места на RISC-V софткор хватит, который реализует кусок протокола :) В итоге получится, скажем, STM32H7, который гальванически изолированно с проходной емкостью 3 пФ (2 - цифровой изолятор и 1 - DC-DC), скидывает результаты предварительной обработки на супер-вычислитель, который не сгорит, если на STM приплывет ~220V (сгорит ли сам STM - это вопрос схемотехники. Может и не сгореть.) Нужно додумать - защиту от сбоя. При относительном кодировании битовый сбой страшен - при декодировании все остальное будет мусором. Но гарантированное выделение служебных символов спасет. P.S. Идея относительного кодирования для смены состояния шины очевидна, она давно живет по мне. Но только сегодня придумал идею переменного такта обмена как идентификатор служебного символа. Это очень богатая идея, переменных тактов может быть несколько :)