реклама на сайте
подробности

 
 
> Передача данных UART => SDRAM память, Как правильно передать данные между UART и SDRAM контроллером
Flip-fl0p
сообщение Nov 6 2016, 16:14
Сообщение #1


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Добрый вечер уважаемые форумчане. Хочу попросить вашего совета по правильной организации передачи данных между UART и SDRAM контроллером.
Хочу записать изображение в SDRAM память, и вывести его на LVDS матрицу.
Изображение представляет собой набор пикселей, где каждый пиксель состоит из 3 байтов данных. Каждый байт передает данные о базовой составляющей цвета (RGB). Передача изображения из компьютера в SDRAM память будет через UART (9600/8-N-1).
Мой UART приемник работает по классической схеме: через частоту в 16 раз больше бодовой и выборкой трех значений с середины битового интервала, с последующим мажорированием. После принятия байта приемником он поступает на модуль, который после принятия трех байт, отбрасывает ненужные мне разряды цвета, и объединяет их в одно слово, являющееся цветом пикселя, которое будет записываться в SDRAM память.
Таким образом каждые 3 байта я должен передавать данные SDRAM контроллеру (который может работать на частоте до 133 МГц) для их записи в память.
Соответственно мы в итоге должны передать данные между 2 клоковыми доменами UART => SDRAM контроллер.
У меня есть 2 варианта по организации передачи данных: использовать протокол Handshake (рукопожатие) или FIFO буфер. Первый вариант кажется предпочтительным, поскольку применение FIFO буфера неоправданно из-за того, что скорость записи данных в него будет несопоставимо ниже, чем я могу этот буфер читать, и буфер будет всегда пустой. Можно накопить данные в буфере, и периодически его считывать по мере заполнения. Но не вижу рациональных причин так делать. Вот и хотелось бы услышать Ваше мнение, как правильнее организовать передачу данных. Естественно UART приемник и SDRAM контроллер реализованы в ПЛИС.

Сообщение отредактировал Flip-fl0p - Nov 6 2016, 16:31
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Flip-fl0p
сообщение Nov 8 2016, 11:11
Сообщение #2


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Реализовал я передачу данных между 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 выложил внизу. Буду рад всем недочётам, обнаруженным в проекте.





Прикрепленные файлы
Прикрепленный файл  PIXEL_RECEIVER.zip ( 2.4 мегабайт ) Кол-во скачиваний: 13
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Flip-fl0p   Передача данных UART => SDRAM память   Nov 6 2016, 16:14
- - iosifk   Цитата(Flip-fl0p @ Nov 6 2016, 19:14...   Nov 6 2016, 19:10
|- - Flip-fl0p   Цитата(iosifk @ Nov 6 2016, 22:10) Все кр...   Nov 6 2016, 22:29
|- - Александр77   Цитата(Flip-fl0p @ Nov 7 2016, 01:29...   Nov 7 2016, 04:16
|- - Flip-fl0p   Цитата(Александр77 @ Nov 7 2016, 07:16) С...   Nov 7 2016, 05:06
|- - Bad0512   Вижу 2 проблемы в вашем дизайне : 1. Вы не придума...   Nov 7 2016, 05:13
||- - Flip-fl0p   Цитата(Bad0512 @ Nov 7 2016, 08:13) Вижу ...   Nov 7 2016, 05:24
||- - Bad0512   Цитата(Flip-fl0p @ Nov 7 2016, 12:24...   Nov 7 2016, 06:59
||- - Flip-fl0p   Цитата(Bad0512 @ Nov 7 2016, 09:59) Ну хо...   Nov 7 2016, 07:29
||- - Bad0512   Цитата(Flip-fl0p @ Nov 7 2016, 14:29...   Nov 7 2016, 09:12
|- - iosifk   Цитата(Flip-fl0p @ Nov 7 2016, 08:06...   Nov 7 2016, 08:24
|- - iosifk   Цитата(Flip-fl0p @ Nov 7 2016, 08:06...   Nov 7 2016, 09:39
- - ViKo   Сделать счетчик таймаута приема. Если он сработал,...   Nov 7 2016, 03:24
- - ViKo   Что мешает ускорить скорость передачи до 250 кбит/...   Nov 7 2016, 06:31
- - tvcam   Я могу ошибиться, но не две минуты, 9600/8 = 1200 ...   Nov 7 2016, 06:46
- - warrior-2001   Реализуйте что-то типа Манчестера и будет вам счас...   Nov 7 2016, 09:15


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 01:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016