Перейти к содержанию
    

Я правильно понимаю, что ваш контролер будет постоянно сканировать SDRAM и выдывать ее содержимое в LVDS матрицу? Если это так, то регенерация вам возможно вообще не понадобится (если правильно расположить данные в SDRAM)

Согласен, что если читать фрейм буфер чаще чем частота регенерации, то регенерация в этом случае не нужна. Но тут есть "спортивный" интерес сделать полноценный контроллер. Мало ли в других проектах пригодиться. Моя задача не сделать готовое устройство, а научиться полноценно работать с памятью. Сейчас хочу просто записать в память какое нибудь значение, и прочитать его и зажечь светодиоды на макетной плате. Вот смогу это реализовать, начну делать обычную фоторамку. Благо выводить данные на матрицу я научился ( во всяком случае генератор цветных полос работает как положено)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но тут есть "спортивный" интерес сделать полноценный контроллер. Мало ли в других проектах пригодиться. Моя задача не сделать готовое устройство, а научиться полноценно работать с памятью.
Тогда возьмите откуда нибудь (с opencore например) готовый контролер, и посмотрите, как он сделан. Потом можете написать свой (если процесс важнее результата :) )

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда возьмите откуда нибудь (с opencore например) готовый контролер, и посмотрите, как он сделан. Потом можете написать свой (если процесс важнее результата :) )

Собственно я сейчас этим и занимаюсь. Контроллер нашел. Разобрал его по полочкам. И сейчас пытаюсь написать модуль, который при помощи данного контроллера загружает\читает данные с памяти.

 

Алгоритм работы моего модуля такой (реализую на автомате Мили):

 

1. Ждем пока проинициализируется память и загрузятся настройки в регистр.

2. Затем по адресу "000000000000" в банк "00" пишем значение x"FF".

3. Затем по нажатию кнопки на макетной плате мой модуль должен загрузить записанное значение в регистр, и хранить его там, пока я не нажму кнопку сброса этого регистра.

4. Если в регистре храниться значение FF, то я зажигаю светодиод на макетной плате.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, что это просто треп ленивого...

Регенерацию динамической памяти можно найти в любом учебнике и студенты это должны учить... В конце концов можно взять описание любой отечественной микросхемы начиная с 30-ти летней давности...

В продолжение

http://www.ord.com.ru/files/book3/p234.html

http://www.155la3.ru/datafiles/kr1810vt3.pdf

 

и много много других...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В продолжение

http://www.ord.com.ru/files/book3/p234.html

http://www.155la3.ru/datafiles/kr1810vt3.pdf

 

и много много других...

Спасибо большое. Буду изучать и разбирать.

Вы как-то говорили, что можете по Skype показать как правильно работать в Modelsim'e. Был бы очень признателен, если вы покажите. Как с Вами связаться ?

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое. Буду изучать и разбирать.

Вы как-то говорили, что можете по Skype показать как правильно работать в Modelsim'e. Был бы очень признателен, если вы покажите. Как с Вами связаться ?

Так по скайпу и связаться... Хоть сейчас...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, что хоть и везде пишут про 64мс - необходимый минимальный период регенерации SDRAM, но вот у меня сейчас на столе плата с K4S561632N-LC75. Отключаю регенерацию её, но информация в ней держится без разрушения вплоть до 6 секунд. То есть - почти 100-кратный запас. Конечно условия тепличные, но всё же.....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Моделирование памяти работает, но меня очень смущает тот факт, что модель памяти отрабатывает не так как должна: у памяти выставлен параметр CL= 2. Соответственно между командой чтения и появлением данных должно пройти как минимум 2 такта, вот картинка производителя памяти, всё просто и понятно:

 

CAS.png

 

Но вот моделирование показывает, что данные появляются сразу на следующем такте, что расходиться с картинкой производителя:

 

CAS_2.png

 

Посмотрел я немного код модели памяти, не нашел ничего, что говорит о том, что данные должны выдаваться через 2 такта. Но сильно не пинайте, Verilog я знаю плохо, мог и не увидеть.....

Вот я и думаю: то ли я лыжник плохой, то ли лыжи не едут.

 

 

 

Вот код модели любезно скачанный на сайте производителя памяти:

UPD

Данные должны быть на 1/4 периода дальше, чем я накорябал.

sdr.v

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С проблемой моделирования разобрался. Судя по работе железа ошибка действительно в модели памяти.

 

Хотелось бы услышать совет по организации чтения и записи в память, с последующим выводом этих данных на 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

Забыл уточнить, что в памяти будет записано изображение, которое соответствует разрешению матрицы. Задача вывести изображение на матрицу.

 

Хотелось бы услышать мнение специалистов.

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поскольку задача вывода изображения на матрицу решена, и простенький контроллер работает, хотелось бы расширить функционал контроллера. Поскольку я планирую память использовать в качестве видеобуфера.

Прошу помощи в поиске литературы по работе с SDRAM памятью. Например какой-либо толковой информации по SDRAM Bank Interleave я не нашел. Про теневую регенерацию так-же почти нет информации. Да и тема правильной организации обращений к памяти для максимизации её пропускной способности очень актуальна (во всяком случае для меня). Прошу не закидывать тапками, а подсказать литературу.

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...