July 2nd, 2021

QuatCore

Полудуплексный приёмопередатчик UART, 3 года спустя :)

Когда я только взялся за ПЛИС 3 года назад, соорудил передатчик UART на 27 ЛЭ (если делитель частоты на 8 бит), или 28 ЛЭ, если st=1 во время передачи предыдущего байта не должен перезапустить передачу, а просто должен игнорироваться.

Год назад вернулся к этому делу, и, как ни странно, меньше этот модуль не стал, при том же 8-битном делителе частоты получилось 30 ЛЭ, зато выход в кои-то веки стал регистровым, а не комбинаторным, гарантируя, что в линию не пойдёт высокочастотный "мусор" в некоторых местах (а он реально мешал передаче на 921 600 бод, и всё исправилось, когда выход стал напрямую с регистра). И в целом схема стала чрезвычайно "скоростной", даже на нашей медленной ПЛИС 5576ХС4Т и максимальном делении частоты с 80 МГц до 300 бод, предельная частота указывается в 96,15 МГц. (чем толще делитель частоты - тем ниже становится его предельная частота, особенно, если использовать компаратор для счёта "не до конца", и не защёлкивать его выход в регистр, прежде чем сбросить). Ну и нехорошая багофича, когда при первом же включении этот модуль начинает передавать, правда, сплошные единицы, была исправлена. В принципе, можно попытаться пару ЛЭ отыграть назад, если тактовая частота невелика, а потому делать схему "скоростной" не требуется, но есть риск, что в крупных проектах это усложнит жизнь фиттеру. А так он этот несчастный UART может "по остаточному принципу" впихнуть куда угодно, "размазать тонким слоем" по всему кристаллу :)

Похожая история с приёмником UART на 33 ЛЭ (3 года назад), и столько же (при делителе в 8 бит) занимает куда более новый приёмник UART для QuatCore.

Но тогда, 3 года назад, я ещё одного монстра сделал, полудуплексный приёмопередатчик, это "сиамские близнецы" из приёмника и передатчика, использующие общий делитель частоты, сдвиговый регистр и конечный автомат, что оправданно, если одновременный приём и передача невозможны. А именно так и есть на RS485! За счёт этого "совместного использования" ресурсов получилось сделать его размер 46 ЛЭ (при 8-битном делителе), что несколько меньше, чем 60 ЛЭ, которые получались при двух отдельных модулях.

Впрочем, мне этот модуль много крови попил, и я к нему не возращался, ДО СЕГОДНЯШНЕГО ДНЯ.

А сейчас стало интересно ещё разок попробовать его сделать, причём с "заделом" под CRC, и посмотреть, что из этого получится...

Collapse )

Неплохое начало: побили свой собственный рекорд в 46 ЛЭ (при 8-битном делителе), теперь всё то же самое умещается в 39 ЛЭ, имеет предельную частоту 100 МГц, регистровый выход (без "комбинаторных" помех). А когда тактовая частота 25 МГц и скорость передачи 921 600 бод, и вовсе 36 ЛЭ. А убрать выходы FrameError и LineBreak - будет 32 ЛЭ (!)

Теперь попробовать подсоединить CRC, и достроить с 8 до 16 бит. Но это уже в понедельник.