МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход

Фоторамка. Часть3. Фреймбуффер.

Фоторамка с платой Марсоход

Выбор чипа для фреймбуфера фоторамки оказался не простым. Изначально был соблазн использовать статическое ОЗУ. Оно имеет очень простой интерфейс - данные, адреса, и, практически один управляющий сигнал - "разрешение записи" (WE).
Могут быть еще какие- нибудь управляющие сигналы, типа CS и/или OE, но при использовании всего одного чипа они не нужны. Но, после продолжительных поисков в компьютерном хламе и  изучения множества даташитов, ничего подходящего найти не удалось - либо недостаточный объем, слабое быстродействие или +5В питание.

Пришлось думать дальше..

Из динамического ОЗУ первых поколений (асинхронного) тоже ничего не подошло.
В конце концов решено было  использовать синхронное динамическое ОЗУ (SDR SDRAM).
Что оно из себя представляет, можно почитать, например, в Википедии. В настоящее время такое ОЗУ используется в различной компьютерной периферии или в сетевом оборудовании. Какое-то время назад оно использовалось в качестве "основного" на материнских платах. Для этого, из отдельных чипов, делают специальные модули - димы (DIMM).
Один такой модуль мы и собираемся использовать.

DIMM

После припаивания проводов и "отсечения" лишнего получился такой шилд.

Вид снизу:

модуль памяти к плате Марсоход

Вид сверху:

модуль памяти к плате Марсоход

Конкретно на этот чип мне даташит найти не удалось, но в интернете есть много даташитов на подобные чипы от других производителей. Я пользовался вот этим 42s16800.pdf  от "ISSI" (

). Мне он показался наиболее полным.

К сожалению интерфейс у SDRAM довольно сложный. Напомню, что адресное пространство первого динамического ОЗУ, в отличие от статического, перестало быть "линейным". Оно было представлено в виде плоскости, состоящей из некоторого количества строк и столбцов. Поэтому адресная шина стала "мультиплексной", а к управляющим сигналам добавились сигналы фиксации строки и столбца (RAS, CAS).

C одной стороны, это уменьшило количество адресных линий, с другой - усложнило интерфейс. У синхронного динамического ОЗУ интерфейс еще сложнее. Появился тактовый сигнал (CLK), а основные управляющие сигналы RAS, CAS и WE потеряли свой изначальный смысл и являются тремя битами кода операции. Кроме того, появилась необходимость в процедуре инициализации, которая необходима для настройки режимов работы.

Для подключения к нашей платке Марсоход понадобилось 19 сигналов, четыре управляющих (RAS, CAS, WE и CLK), 12 адресов (A0-A11)  и три бита данных. Цоколевку дима SDR SDRAM-168 легко найти в интернете, но для удобства пайки, я выкинул лишнее (практически все нужное, кроме клока, находится в седней части, между двумя ключами) и расположил контакты в два столбца.


1         85
.         .
10        94
====================================
11 DQ8    95 DQ40 
12 VSS    96 VSS 
13 DQ9    97 DQ41 
14 DQ10   98 DQ42 
15 DQ11   99 DQ43 
16 DQ12   100 DQ44 
17 DQ13   101 DQ45 
18 VDD    102 VDD 
19 DQ14   103 DQ46 
20 DQ15   104 DQ47 
21 n/c    105 n/c 
22 n/c    106 n/c 
23 VSS    107 VSS 
24 n/c    108 n/c 
25 n/c    109 n/c 
26 VDD    110 VDD 
27 /WE    111 /CAS 
28 DQMB0  112 DQMB4 
29 DQMB1  113 DQMB5 
30 /S0    114 /S1 
31 DU     115 /RAS 
32 VSS    116 VSS 
33 A0     117 A1 
34 A2     118 A3 
35 A4     119 A5 
36 A6     120 A7 
37 A8     121 A9 
38 A10/AP 122 BA0 
39 BA1    123 A11 
40 VDD    124 VDD 
====================================
41 VDD    125 CK1 
42 CK0    126 A12 
43 VSS    127 VSS 
44 DU     128 CKE0 
.         .
84        168


Кроме сигналов, подключенных к платке Марсоход, есть и другие важные сигналы, которые нельзя оставлять "в воздухе"
Кратко опишу их назначение ( и куда нужно подключить ):

  • CS - чип селект, нужен когда чипов больше одного ( на "0")
  • CKE - разрешение клока ( на "1")
  • DQMx - имеют смысл в чипах с разрядностью более 8 бит, чтобы иметь доступ к каждому байту отдельно (все на "0")
  • BA0, BA1 - номер банка  (оба на "0")
  • A12 - старший адрес (на "0")

Для заполнения фреймбуфера нужными данными, первое, что пришло в голову - подключить к компьютеру через COM-порт. Что собственно и было реализовано в нашем проекте (

).

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

Необходимый для записи в порт файл можно сделать с помощью простенькой программки code (она так же есть в архиве с проектом). Она преобразует 24-битный битмап с разрешением 1280х800 в файл описанного формата.

Сначала мы пробовали подключать к стандартному COM-порту на компьютере. Даже на скорости 115200 получалось не очень быстро, весь экран заполняется секунд за 40.

Гораздо "живее" все работает через наш замечательный программатор mbftdi. Используемый в нем чип - двухканальный. Один канал уже занят под JTAG , а второй просто выведен на "гребенку", и его можно использовать для связи с нашей платкой Марсоход.

Под COM-порт в нашем проекте используется пин DN, а на программаторе Tx второго канала (на фотографии я его подписал).

 Фоторамка, проект с фреймбуффером

Максимальная скорость, на которой может работать UART на FTDI 12мбит, но получить такую частоту из 100Мгц имеющихся на плате Марсоход в проекте нельзя. Ближайшее, что нам подошло  - 5мбит.
В результате получилось вот так:

В дальнейшем, думаю, можно попробовать подключить нашу фоторамку, через какой-нибудь другой интерфейс, например через Ethernet.

 

Комментарии  

0 #25 Хлуденьков Владимир 05.09.2016 05:32
Сам понял. :lol:
Если сдрам можно тактировать на пониженной частоте, то ддр только на заданной (за редкими исключениями).
То есть по частоте в частности не проходим. Так что все на марсоход3!
0 #24 Хлуденьков Владимир 02.09.2016 11:08
Здравствуйте, Юрий.

Насколько я понял, это для тех модулей памяти, что в народе называли "PC-133".

А есть ли подобные проекты для подключения модулей "РС-400"?

Также очень интересно, можно ли пустить в дело планки от ноутбуков SO DIMM DDR-2 1GB?
0 #23 1408 14.11.2015 23:01
Доброго времени суток. В теме ПЛИС и прочей быстродействующ ей логики я новичок. Параллельно с освоением Verilog собираю свою отладочную плату на Cyclone I и столкнулся с вопросом использования ОЗУ. Перебрав кучу хлама в своих закромах нашел вот такую желзяку: http://pdf1.alldatasheet.com/datasheet-pdf/view/92781/HITACHI/HM5264805FTT-75.html
Сравнил дату с описанием в статье - все сходиться. Только осталось 2 вопроса:
1: Для работы с ОЗУ обязательно использовать только резервированные для этого пины , или можно сконфигурироват ь любые доступные?
2: Как правильно развести плату под ОЗУ, чтобы избежать глюков. На многих компьютерных платах дорожки идут как бы зигзагами, на сколько я знаю это и есть защита сигнальных линий. Как правильно расщитать такие проводники?
+1 #22 Danil 22.10.2013 10:11
Выложил код сюда: http://pastebin.com/4RNKu6gk
0 #21 Danil 22.10.2013 10:04
Цитирую umarsohod:

Скорее всего получилось не "один-в-один".
Посмотрите на свой модуль RTL-VIWERом, я думаю, будет видна разница.


Странно?! Сейчас проверил еще раз результат компиляции Ваш и мой на верилоге - результат один в один 29LE. :o
Правда я вчера переписывал его так сказать "на чистовую". Сделал его параметризируем ым на предмет тактовой частоты и бод-рэйта + проверил в железе на скоростях 9600 и 115200 :-)

Если кому нужно могу выложить код где нибудь.
+1 #20 umarsohod 21.10.2013 13:07
Цитирую Danil:
Здравствуйте!

Взял у вас из проекта модуль UARТ приемника и переписал его на verilog'e (к сожалению нельзя приложить код к комментарию).
Пробовал сравнить затраты ресурсов для обоих вариантов: получилось 22LE у вас и 29LE у меня. Логика работы переписана со схемы 1-в-1.

С чем может быть связана такая разница в расходе ресурсов камня? Неужели использование мегафункций всегда эффективнее написания модуля на verilog'e?

Скорее всего получилось не "один-в-один".
Посмотрите на свой модуль RTL-VIWERом, я думаю, будет видна разница.
0 #19 Danil 21.10.2013 11:42
Здравствуйте!

Взял у вас из проекта модуль UARТ приемника и переписал его на verilog'e (к сожалению нельзя приложить код к комментарию).
Пробовал сравнить затраты ресурсов для обоих вариантов: получилось 22LE у вас и 29LE у меня. Логика работы переписана со схемы 1-в-1.

С чем может быть связана такая разница в расходе ресурсов камня? Неужели использование мегафункций всегда эффективнее написания модуля на verilog'e?
0 #18 ULHEDER 09.06.2013 20:28
А ктонибудь подключал DDR2 к альтере макс2 ??
У меня этой памяти просто дофига от ноутов....

Хотел использовать для видеоплаты.


И ещё вопрос, вот вы использовали самый младший макс2 + SDRAM , сколько свободных ячеек осталось там?? или можно туда дополнительно впихнуть 2 алу 24бит ??.
Тоесть сам проект вывода картинки+2алу.. .
0 #17 Ю р и й 29.09.2012 08:14
Цитирую tetraa:
Здравствуйте. Прочитал что Вы считываете данные с ОЗУ со скоростю 100 мгц. Отражения сигналов и согласования на таких частотах не нужно учитывать?. Можно клочить микросхему памяти на низкой частоте (5 мгц *прим.)? Спасибо. :-)

1.Частота и длины проводов не очень большие, поэтому
все работает стабильно.
2.Ограничений на нижний предел тактовой частоты для SDR нет. Насколько я помню, такие ограничения есть для DDR и DDR2.
0 #16 tetraa 29.09.2012 04:46
Здравствуйте. Прочитал что Вы считываете данные с ОЗУ со скоростю 100 мгц. Отражения сигналов и согласования на таких частотах не нужно учитывать?. Можно клочить микросхему памяти на низкой частоте (5 мгц *прим.)? Спасибо. :-)
0 #15 Ю р и й 22.03.2012 10:32
Цитирую SAMY:
Спасибо! Кажись скомпилилось. Ещё маленький вопросик а получается в графическом педакторе если разводки не нарисовано а просто линии названы одинаково то получается они как бы соединены?
Спасибо.

Если линии названы одинаково, то они соединены, и
если линия и пин с одинаковыми именами, то они тоже соединены.
0 #14 SAMY 22.03.2012 10:05
Спасибо! Кажись скомпилилось. Ещё маленький вопросик а получается в графическом педакторе если разводки не нарисовано а просто линии названы одинаково то получается они как бы соединены?
Спасибо.
0 #13 Ю р и й 22.03.2012 05:47
Цитирую SAMY:
Здравствуйте Юрий. Очень заинтересовал ваш проект. Скачал, в квартусе 11 веб эдишин не компилится. Можете посмотреть что там да как? Откуда берёте клок 100 МГц?

Спасибо.

Удалите примитив "OUTPUT" с именем "f3[7..5]", и
вместо него поставьте "BIDIR" c именем "f3[7..5]".
А генератор на 100 МГц стоит на платке "марсохода" последней версии (v1.3).
0 #12 SAMY 21.03.2012 16:32
Здравствуйте Юрий. Очень заинтересовал ваш проект. Скачал, в квартусе 11 веб эдишин не компилится. Можете посмотреть что там да как? Откуда берёте клок 100 МГц?

Спасибо.
+1 #11 pixar 07.03.2012 23:47
Цитирую Ю р и й:
[quote name="pixar"]Про "30fps с переключением двух видео входов " - не понял.
Задача - модуль должен коммутировать два видeoканала HD 1920x1080 30fps на один выход. Источники видео - не синхронные , один из каналов должен идти в буфер, чтобы выровнять их по кадровой синxронизции. Буфер н а один кадр = 1920х1080х24бит = 49.8 Мбит, поток 49.8Мbх30fps = 1_492_992_000 bps.
Вопрос - на какой недорогой FPGA я могу сделать этот модуль с минимальными затратaми времени и нервов.
Пример - в Spartan6 есть железный контроллер DRAM , аналогичное IP ядро дял Сyclone использовать не так просто.
Рассматриваются FPGA Altera , Actel, Lattice, Xilinx.
Если есть опыт реализации чего-то подобного - посоветуйте пожалуйста.
0 #10 Ю р и й 07.03.2012 10:36
Цитирую pixar:
Можно ли реализовать HD frame buffer 1920x1080 30fps с переключением двух видео входов на Cyclone_2-3-4 ? На что лучше смотреть - Cyclone или Spartan_6 в плане максимально просто реализовать ?

На любой FPGA подобные проэкты реализуются гораздо проще чем на CPLD,
поскольку есть внутренняя память и гораздо больше LE. Нужно только подобрать
девбоард с достаточным количеством внешнего ОЗУ.
Про "30fps с переключением двух видео входов " - не понял.
0 #9 pixar 07.03.2012 09:57
Можно ли реализовать HD frame buffer 1920x1080 30fps с переключением двух видео входов на Cyclone_2-3-4 ? На что лучше смотреть - Cyclone или Spartan_6 в плане максимально просто реализовать ?
0 #8 Ю р и й 08.11.2011 05:25
Поскольку ОЗУ используется только в качестве фреймбуфера и регулярно перечитывается,
то в регенерации необходимости нет.
0 #7 Петрович 07.11.2011 20:14
Цитирую Ю р и й:
Цитирую A.P.:
Я чего-то недопонимаю. Как вы пишите и читаете во фреймбуфер одновременно?? Я так решил, потому что одна картинка плавно замещается второй. Или вы пишете только во время обратного хода луча. Поясните пожалуйста.

Обмен с ОЗУ происходит циклами по 32CLK.Частота CLK 100мгц.
За каждый чикл считывается 16 слов (3х-битных) и можно записать одно.
Таким образом скорость чтения данных - 50М слов а скорость записи около 3М.


Так, а можно вообще поподробнее ?
Рефрешите память ?
Кстати, вопрос... Как я понял, если я писал или читал область памяти не реже периода обновления, то её рефрешить не надо ?
+1 #6 Ю р и й 07.11.2011 09:43
Цитирую A.P.:
Я чего-то недопонимаю. Как вы пишите и читаете во фреймбуфер одновременно?? Я так решил, потому что одна картинка плавно замещается второй. Или вы пишете только во время обратного хода луча. Поясните пожалуйста.

Обмен с ОЗУ происходит циклами по 32CLK.Частота CLK 100мгц.
За каждый чикл считывается 16 слов (3х-битных) и можно записать одно.
Таким образом скорость чтения данных - 50М слов а скорость записи около 3М.
0 #5 A.P. 07.11.2011 08:59
Я чего-то недопонимаю. Как вы пишите и читаете во фреймбуфер одновременно?? Я так решил, потому что одна картинка плавно замещается второй. Или вы пишете только во время обратного хода луча. Поясните пожалуйста.
+1 #4 Имя 26.09.2011 18:23
теперь разбить ОЗУ на два буфера - в один писать, а из другого выводить для большей скорости смены изображений...
+1 #3 Ю р и й 16.09.2011 04:49
Цитирую remrum:
Молодцы,не перестаете удивлять своими проектами.
Чем обусловлен выбор схемотехнического проектирования?
И мне одному кажется,что на видео гораздо больше цветов чем 8 ?

1.Скорее привычка. Я этими квадратиками "думаю".
Но практически все проекты синхронные и довольно просто переводятся в верилог.
2.На диплей выводится только три бита, как в
предыдущем поекте.Но фотографии специальным образом подготовлены.За счет уменьшения разрешения (в два раза) получилось немного увеличить количество цветов.
+1 #2 remrum 15.09.2011 18:05
Молодцы,не перестаете удивлять своими проектами.
Чем обусловлен выбор схемотехническо го проектирования?
И мне одному кажется,что на видео гораздо больше цветов чем 8 ?
+2 #1 Michael 14.09.2011 15:40
А почему в шине данных вы используете только 3 бита а не 8 ? Не хватает ног на плате?

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Проекты Проект Марсоход Фоторамка. Часть3. Фреймбуффер.