Реализовал я передачу данных между UART => ПЛИС следующим образом:
Для увеличения скорости передачи данных я выбрал скорость UART 230400 (8-N-1). Думаю можно и больше, но не тестировал.
Данные с uart приемника подаются в модуль PIXEL_CREATING, который принимает 3 байта, отбрасывает ненужные мене значения байтов и объединяет их в цвет пикселя, который мне нужно записать в память.
Когда модуль PIXEL_CREATING "собрал" пиксель и готов его записывать в память, формируется одиночный сигнал PIXEL_VALID (равный одному периоду синхрочастоты), который разрешает запись данных в FIFO буфер.
В FIFO буфере у меня настроен сигнал rdempty, синхронизированный(внутри FIFO буфера)с частотой работы SDRAM контроллера, которой я этот буфер читаю. Через 22 такта, (почему именно 22 такта я не знаю, есть зависимость от количества стадий синхронизации, настраиваемых в mega wizzard. В datasheet на эту мегафункцию, я не нашел данных про это. Буду благодарен, если услышу пояснения почему так.) после записи, буфер выдаст сигнал rdempty равный лог.0, который говорит о том, что в буфере есть данные. Этот сигнал я подаю на детектор заднего фронта. Детектированным фронтом READ_UART_FIFO_SIG я читаю данные из FIFO буфера. Этот же фронт- сигнал о том, что можно записывать данные в контроллер SDRAM. Таким образом я реализовал передачу данных между клоковомыи доменами. То, что я теряю 22 такта - меня не смущает, поскольку частоты приёма по UART и частоты записи в память очень сильно отличаются, и за время приёма одного байта по UART пройдет гораздо больше времени чем 22 такта...
Данные передаются нормально, сбоев нет. Изображение передано в матрицу без искажений.
Кому интересно, проект приёмника UART c модулем PIXEL_CREATING выложил внизу. Буду рад всем недочётам, обнаруженным в проекте.
