Flip-fl0p 4 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Я правильно понимаю, что ваш контролер будет постоянно сканировать SDRAM и выдывать ее содержимое в LVDS матрицу? Если это так, то регенерация вам возможно вообще не понадобится (если правильно расположить данные в SDRAM) Согласен, что если читать фрейм буфер чаще чем частота регенерации, то регенерация в этом случае не нужна. Но тут есть "спортивный" интерес сделать полноценный контроллер. Мало ли в других проектах пригодиться. Моя задача не сделать готовое устройство, а научиться полноценно работать с памятью. Сейчас хочу просто записать в память какое нибудь значение, и прочитать его и зажечь светодиоды на макетной плате. Вот смогу это реализовать, начну делать обычную фоторамку. Благо выводить данные на матрицу я научился ( во всяком случае генератор цветных полос работает как положено) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Но тут есть "спортивный" интерес сделать полноценный контроллер. Мало ли в других проектах пригодиться. Моя задача не сделать готовое устройство, а научиться полноценно работать с памятью.Тогда возьмите откуда нибудь (с opencore например) готовый контролер, и посмотрите, как он сделан. Потом можете написать свой (если процесс важнее результата :) ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Тогда возьмите откуда нибудь (с opencore например) готовый контролер, и посмотрите, как он сделан. Потом можете написать свой (если процесс важнее результата :) ) Собственно я сейчас этим и занимаюсь. Контроллер нашел. Разобрал его по полочкам. И сейчас пытаюсь написать модуль, который при помощи данного контроллера загружает\читает данные с памяти. Алгоритм работы моего модуля такой (реализую на автомате Мили): 1. Ждем пока проинициализируется память и загрузятся настройки в регистр. 2. Затем по адресу "000000000000" в банк "00" пишем значение x"FF". 3. Затем по нажатию кнопки на макетной плате мой модуль должен загрузить записанное значение в регистр, и хранить его там, пока я не нажму кнопку сброса этого регистра. 4. Если в регистре храниться значение FF, то я зажигаю светодиод на макетной плате. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Я думаю, что это просто треп ленивого... Регенерацию динамической памяти можно найти в любом учебнике и студенты это должны учить... В конце концов можно взять описание любой отечественной микросхемы начиная с 30-ти летней давности... В продолжение http://www.ord.com.ru/files/book3/p234.html http://www.155la3.ru/datafiles/kr1810vt3.pdf и много много других... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 20 сентября, 2016 Опубликовано 20 сентября, 2016 (изменено) · Жалоба В продолжение http://www.ord.com.ru/files/book3/p234.html http://www.155la3.ru/datafiles/kr1810vt3.pdf и много много других... Спасибо большое. Буду изучать и разбирать. Вы как-то говорили, что можете по Skype показать как правильно работать в Modelsim'e. Был бы очень признателен, если вы покажите. Как с Вами связаться ? Изменено 20 сентября, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Спасибо большое. Буду изучать и разбирать. Вы как-то говорили, что можете по Skype показать как правильно работать в Modelsim'e. Был бы очень признателен, если вы покажите. Как с Вами связаться ? Так по скайпу и связаться... Хоть сейчас... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 20 сентября, 2016 Опубликовано 20 сентября, 2016 · Жалоба Интересно, что хоть и везде пишут про 64мс - необходимый минимальный период регенерации SDRAM, но вот у меня сейчас на столе плата с K4S561632N-LC75. Отключаю регенерацию её, но информация в ней держится без разрушения вплоть до 6 секунд. То есть - почти 100-кратный запас. Конечно условия тепличные, но всё же..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 29 сентября, 2016 Опубликовано 29 сентября, 2016 (изменено) · Жалоба Моделирование памяти работает, но меня очень смущает тот факт, что модель памяти отрабатывает не так как должна: у памяти выставлен параметр CL= 2. Соответственно между командой чтения и появлением данных должно пройти как минимум 2 такта, вот картинка производителя памяти, всё просто и понятно: Но вот моделирование показывает, что данные появляются сразу на следующем такте, что расходиться с картинкой производителя: Посмотрел я немного код модели памяти, не нашел ничего, что говорит о том, что данные должны выдаваться через 2 такта. Но сильно не пинайте, Verilog я знаю плохо, мог и не увидеть..... Вот я и думаю: то ли я лыжник плохой, то ли лыжи не едут. Вот код модели любезно скачанный на сайте производителя памяти: UPD Данные должны быть на 1/4 периода дальше, чем я накорябал. sdr.v Изменено 29 сентября, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 4 октября, 2016 Опубликовано 4 октября, 2016 (изменено) · Жалоба С проблемой моделирования разобрался. Судя по работе железа ошибка действительно в модели памяти. Хотелось бы услышать совет по организации чтения и записи в память, с последующим выводом этих данных на LVDS матрицу. Ситуация какая: Контроллер запустился на частоте 50 Мгц. LVDS матрица разрешением 800х480 по Datasheet работает на частоте 33 Мгц (но по факту запускается спокойно и на 2 МГц, но видно как обновляется экран). Для упрощения работы с памятью я планирую применять только по 5 разрядов каждого цвета(15 битный цвет), т.к ячейка памяти имеет размер 16 бит. На данный момент контроллер может как одиночно обращаться к произвольным ячейкам, так и последовательно считывать/записывать всю строку (256 слов по 16 бит подряд максимум). Затем я обязан закрыть строку, чтобы открыть новую. Цикл одиночного чтения\записи занимает не менее 7 тактов: 1 такт - запрос чтения\записи. 2 такт - активация строки банка по выбранному адресу 3 такт - ожидание один такт 4 такт - команда чтения\записи по выбранному адресу 5 такт - ожидание один такт 6 такт - команда закрытия банка (precharge) 1041664 7 такт - ожидания один такт. На восьмом такте я могу снова произвести чтение\запись в любую ячейку. Такой режим меня не устраивает т.к. читать данные я могу со скоростью примерно 50/7 Мгц, что очень медленно. Хотя фактически я могу так читать данные, но изображение на матрице будет сильно мерцать. Так-же есть маленькая проблема: в качестве синхросигнала для матрицы я хотел бы применять внутренний сигнал ready_valid, формируемый контроллером, когда данные прочитаны с памяти. Но для полноценной работы матрицы мне необходима частота в 7 раз больше частоты данных для работы серилайзеров, чтобы выдавать данные в LVDS. Как её получить я не знаю. Встроенных умножителей на ПЛИС EP3C10E144C8 нет. Как будет работать матрица если в качестве опорной частоты PLL задать частоту 50Мгц/7 я не представляю. Если подумаю немного может, что и смогу придумать. Но этот вариант применять не хочется, поскольку он заведомо неправильный. Более интересен режим последовательного считывания всей строки. Ширина матрицы 800 пикселей(или 800 слов, где каждое слово - это отдельный пиксель), каждый из которых должен читаться со скоростью 34 МГц, а ширина банка 256 слов, каждое из которых может читаться со скоростью почти 50 Мгц ( почти потому, что часть времени уйдет на активацию банка, ожидания, и деактивацию банка) то, полноценно вывести данные на матрицу я опять же не смогу, из-за того что если я и запущу память и матрицу на одной частоте, то в этом случае будут паузы между переключением строк. Так как данные я могу читать быстрее матрицы, есть мысль сначала данные из памяти читать в асинхронный FIFO буфер а уже из буфера выводить на матрицу. Есть ещё мысль запустить память на частоте матрицы и применять BURST режим чтения всей страницы с командой BURST TERMINATE. Команды подавать во время "обртного хода луча", т.е когда данные на матрицу не выводятся. Но тут немного не хватает знаний в области работы памяти: не нашел информации про режим полностраничного чтения. Есть ли паузы между переходом строк ? Есть подозрение что пауз нет, т.к. встроенный в память контроллер сам все делает. UPD Забыл уточнить, что в памяти будет записано изображение, которое соответствует разрешению матрицы. Задача вывести изображение на матрицу. Хотелось бы услышать мнение специалистов. Изменено 4 октября, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 23 ноября, 2016 Опубликовано 23 ноября, 2016 (изменено) · Жалоба Поскольку задача вывода изображения на матрицу решена, и простенький контроллер работает, хотелось бы расширить функционал контроллера. Поскольку я планирую память использовать в качестве видеобуфера. Прошу помощи в поиске литературы по работе с SDRAM памятью. Например какой-либо толковой информации по SDRAM Bank Interleave я не нашел. Про теневую регенерацию так-же почти нет информации. Да и тема правильной организации обращений к памяти для максимизации её пропускной способности очень актуальна (во всяком случае для меня). Прошу не закидывать тапками, а подсказать литературу. Изменено 23 ноября, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться