Leka 0 26 сентября, 2018 Опубликовано 26 сентября, 2018 (изменено) · Жалоба По преамбуле калиброваться нет смысла, тк слишком короткая. Можно другое - по ошибкам выделять биения разностной частоты, и подстраиваться по фазе этой частоты. Пробовал, работает. Но это имеет смысл для жестко заданных протоколов, например ethernet. Для самопального много проще и компактнее по ресурсам будет принимать по всем фазам и выбрать правильные. 1Кбит*8фаз=1Кбайт, это 1 блок памяти в Циклоне. Пишем 8 потоков, а дальше пускаем только 1 из них с правильным контрольным кодом. Изменено 26 сентября, 2018 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба А что значит откалиброваться по преамбуле? Допустим, принимаю преамбулу, вижу ее смещение (у меня уже есть такое решение в модели) - определив величину битового смещения, начинаю кушать пакет. Что защищает от ситуации, чтобы не попасть на зону перехода, когда после приема 1250 бит пойдет зона на десятки бит, где битовое положение будет колбаситься туда-сюда из-за джиттера??? Ну, я ориентируюсь на xapp523. Там каждый бит данных семплируется четыре раза. При таком семплировании наибольшая ошибка в определении положения максимума в линии данных не будет превышать 0.25*UI. Далее вы начинаете принимать пакет, но поскольку клок на приемной стороне имеет систематическую ошибку, со временем возникает сдвиг между центром бита и временем семплирования этого бита. Джиттер здесь влияния не оказывает, так как его величина мала по сравнению с длительностью одного бита на частоте 400 МГц и он не приводит к систематическому смещению фронта данных. Таково жесткое требование на данное устройство. ... Но теперь я обязан убрать общий клок на приемной и передающей стороне, и не давать клок в параллель с данными. А чем вызвано столь "жесткое требование"? Для самопального много проще и компактнее по ресурсам будет принимать по всем фазам и выбрать правильные. Пишем 8 потоков, а дальше пускаем только 1 из них с правильным контрольным кодом. Не соглашусь. Проще и компактнее то, как описано у Xilinx'а в xapp523. Один конечный автомат на четыре состояния, один триггер для граничных условий и немного логики для управления этим автоматом. Этот метод, кроме всего прочего, позволяет подстраивать момент выборки бита на интервале меньшем десяти бит (для кодировки 8/10) и не зависеть от длины пакета в принципе. Ваш же метод при большой длине пакета может привести к ситуации, когда во всех восьми блоках памяти будут лежать данные с неверными CRC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Не соглашусь. Проще и компактнее то, как описано у Xilinx'а в xapp523. Один конечный автомат на четыре состояния, один триггер для граничных условий и немного логики для управления этим автоматом. Этот метод, кроме всего прочего, позволяет подстраивать момент выборки бита на интервале меньшем десяти бит (для кодировки 8/10) и не зависеть от длины пакета в принципе. Ваш же метод при большой длине пакета может привести к ситуации, когда во всех восьми блоках памяти будут лежать данные с неверными CRC. Скачал xapp523.zip размером 5138659 байт 75138e67fc7f40fda0e89e998214e645 Но там много пустых каталогов, нет файлов проекта, нет PDF-файлов с описанием. Вроде качал с официального сайта, но это странно очень. xapp224.zip не могу нигде скачать, но подозреваю там другой метод и другая идея, которая не так хороша, как в xapp523 - верно? Мне нравится xapp523, я почти уловил мысль, но не до конца. Там пример на 1250 мегабит SGMII, но я ожидаю, что могу взять не 8 а всего 4 фазы для этой идеи и обойтись лишь одним десериализатором (а не двумя, сдвинутыми на сколько-то пс при помощи IDELAY). Но нужно посимулить и понять идею глубже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Можно попробовать сделать 4 параллельные семы приема на вс длину пакета. Каждая сема тактируется частотами 400МГ, сдвинутыx на 90 градусов. Потребуется 3 вещи: 1. Сxема решения - с какой именно забирать данные (подобные реализаии видел, потребутся служебные символы вначале/коне пакета). 2. орошего выравнивания по времени для водныx триггеров сем и частот (вручну точно придется прибивать). 3. Плавание частоты передащей части от приемной за интервал передачи пакета не более чем на четверть периода символа. Каким образом все ляжет на конкретно Ваш чип - ответить не могу - не работал с ним. ЗЫ.. Извинясь за написание - проблема с ПО - часть символов не печатается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 26 сентября, 2018 Опубликовано 26 сентября, 2018 · Жалоба Там пример на 1250 мегабит SGMII, но я ожидаю, что могу взять не 8 а всего 4 фазы для этой идеи и обойтись лишь одним десериализатором (а не двумя, сдвинутыми на сколько-то пс при помощи IDELAY). Но нужно посимулить и понять идею глубже. С четырьмя семплами и одним десериализатором не получится следить за направлением смещения фронта данных относительно точек семплирования. В этом случае алгоритм "Bit Skip" работать не будет. Иными словами FSM из рисунка 9 должен шагать строго по кругу - либо по часовой стрелке, либо против. Недопустимы переходы между состояниями "по диагонали".. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 27 сентября, 2018 Опубликовано 27 сентября, 2018 · Жалоба С четырьмя семплами и одним десериализатором не получится следить за направлением смещения фронта данных относительно точек семплирования. В этом случае алгоритм "Bit Skip" работать не будет. Иными словами FSM из рисунка 9 должен шагать строго по кругу - либо по часовой стрелке, либо против. Недопустимы переходы между состояниями "по диагонали".. Так, похоже идея работать не будет, потому что в C10LP нет такого элемента как задержка входного сигнала на X пикосекунд. Где-то даже читал на форумах альтеры ответ сотрудника что типа "а нафига это теоретически было бы надо". К тому же не знаю, можно ли подать с одного входа на два десериализатора в C10LP задав соответствующие констрейны чтоб не расползалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 27 сентября, 2018 Опубликовано 27 сентября, 2018 · Жалоба Так, похоже идея работать не будет, потому что в C10LP нет такого элемента как задержка входного сигнала на X пикосекунд. А в чем смысл скрещивать ужа Altera и ежа Xilinx в одном проекте? Страсть к мазохизму? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewkrot 0 27 сентября, 2018 Опубликовано 27 сентября, 2018 · Жалоба Дык, если есть обратная пара так по ней клок и передавайте (в обратную сторону). И по этому клоку выставляйте данные в передатчике. CDC или или FIFO еще в помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 168 28 сентября, 2018 Опубликовано 28 сентября, 2018 · Жалоба А собрать трёхфазный генератор 200 МГц на ножках — политические убеждения не позволяют? Или это ещё хуже, чем асинхронщина? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться