[an error occurred while processing this directive]
|
На VHDL код выглядит куда более красиво. А картинки можно и в RTL посмотреть.
Самое сложное в UART - приёмник.
Для передатчика реализуется state mashine, которая просто тупо забирает байт, выплёвывает старт-бит, а затем сдвигает этот самый байт. Ну и стоп-бит следом. Главное - чтобы частота на входе была "хорошей".
Приёмник строится так:
Вы запускаете счётчик на частоте (минимум) в 4 раза выше, чем частота UART. По спаду START запускаете счётчик. Входные данные нужно обязательно синхронизовать (защёлкнуть). Значение, которое потом сдвигаете в регистре, выбирается по счёту 2 или 3 счётчика (если он в 4 раза "быстрее") - это чтобы попасть в середину бита.
Если будет глючить, значит нужно усложнять схему - сохранять все 4 (или больше) значений конкретного бита и делать мажоритарную схему - "кто больше".
Если и тут будет глючить, значить проблема с соответствием частот. В этом случае поможет дополнительная синхронизация счётчика (считающего тики в битах) от приходящих фронтов. Но это на длинне слов в сотни/десятки бит.