Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с SDR SDRAM
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Cont
Разрабатываю контроллер SDRAM, ибо готовые корки не годятся. Однако при работе с памятью странное явление - слова записываются (или считываются) сдвинутые по адресу. Например, при burst = 0 пишу слово по нулевому адресу, а оно записывается по первому адресу. самое интересное - в симуляторе все правильно, а вот в действительности нет. пробовал врьировать параметры CAS, RCD - не помогает. (
Methane
Цитата(Cont @ Feb 24 2009, 21:06) *
Разрабатываю контроллер SDRAM, ибо готовые корки не годятся. Однако при работе с памятью странное явление - слова записываются (или считываются) сдвинутые по адресу. Например, при burst = 0 пишу слово по нулевому адресу, а оно записывается по первому адресу. самое интересное - в симуляторе все правильно, а вот в действительности нет. пробовал врьировать параметры CAS, RCD - не помогает. (

C PLL все в порядке?
Shtirlits
1. Загоните в симулятор post p&r.
2. Попробуйте многократное считывание с одного и того же адреса.
DmitryR
А также еще напишите, чем готовые корки не устроили, просто интересно.
Cont
2 Shtirlits
Результаты показали, что tsu не выполняется. Все-таки плиска древняя. Снизил частоту памяти и все стало на свои места. Однако мне нужно 130 мегагерц (или хотя бы 100). Как поступить в данной ситуации? Если мы DLL-ем сдвинем клок на 90 гардусов, данные будут записываться в память правильно, но как быть со считыванием. Этим же клоком их не считать(в триггер). Нужно ли вводить отдельно тактовый сигнал для считывания? Хотелось бы узнать как грамотно решить проблему.
2 DmitryR
По-моему, в coregen-e нет контроллера SDR sdram
Shtirlits
Надо подробностей про вашу память, плиску и задачу.
Пока я нафантазировал что-то про вашу проблему и вижу вот что:
Если клок откуда-то берется и идет к плис и к памяти, то его нужно от памяти оторвать.
Плис должна регистрами в IO pad-ах формировать не только сигналы для памяти, но и клок для нее.
Регистры при этом тактируются общим клоком или двумя клоками сформированными DLL-кой с нужным сдвигом фазы.
Cont
клок к памяти идет от плиски. сейчас моя проблема с формированием клоков(точнее подбором нужной фазы). я много вариантов перепробовал, но на частоте выше 80 мегагерц память работает не правильно
Shtirlits
Цитата(Cont @ Feb 27 2009, 07:10) *
клок к памяти идет от плиски.

Расскажите, из какого именно места он идет.
PS: и что это за плис и что за память?
axalay
Для сдрам я клоки сдвигал только по приему. А по записи либо ничего не делал, либо инвертировал-не помню. Если поможет, то могу подельтся верилоговской коркой, написанной мной давно
Cont
2 axalay: было бы не плохо, если выложите свои наработки

2 all:
Может быть следовало начать отдельную ветку на форуме, т.к. теперь вопрос иного, плана:

как эффективно использовать память? и как ее используют процессоры?

поясняю: память может работать в разных режимах(с разной длиной burst), при этом чтобы его изменить нужно заново проводить инициализацию памяти(а это относительно долгий процесс). например в один момент времени мы считываем/записываем с burst=4, но вот понадобилось изменить значание одного слова, а не сразу 4-х. Как поступать? Изменить burst на 1 или считать 4 слова в буфер, изменить значение одного из них и обатно записать 4 слова в sdram. Как то это не оптимально, а если всегда работать с burst=1 это уж совсем медленно
DmitryR
Цитата(Cont @ Feb 26 2009, 19:24) *
2 DmitryR
По-моему, в coregen-e нет контроллера SDR sdram
Это правда, но coregen - далеко не единственный источник богатства. На opencores например таких контроллеров есть два и один из них hardware-proven, а второй выходит на эту стадию. Конечно, качество кода на opencores в основном сильно отстает от фирменного, однако часто сильно опережает возможности одного разработчика, поэтому им стоит пользоваться хотя бы для справки, для шаблона.
Gothard
Цитата(Cont @ Feb 28 2009, 19:44) *
например в один момент времени мы считываем/записываем с burst=4, но вот понадобилось изменить значание одного слова, а не сразу 4-х. Как поступать? Изменить burst на 1 или считать 4 слова в буфер, изменить значение одного из них и обатно записать 4 слова в sdram

Именно для этого существуют сигналы маскирования - маскируется запись каждого слова внутри бурста. Если у вас DIMM - на каждый байт свой сигнал маскирования

Цитата(Cont @ Feb 27 2009, 07:10) *
клок к памяти идет от плиски. сейчас моя проблема с формированием клоков(точнее подбором нужной фазы). я много вариантов перепробовал, но на частоте выше 80 мегагерц память работает не правильно

Чем гадать на кофейной гуще - быстрее сделать нормальный расчет временной диаграммы передачи на запись в память и на чтение. В общем-то инженер так и должен поступать. Вот и увидите - реально ли работать свыше 80 мегагерц и что для этого надо.

Кстати - насколько я помню, у памяти SDRAM время tHOLD и для адреса и для данных порядка 0.7-1нс и приходится задерживать клок, если он выдается из плиса. В вашем случае я так понимаю надо бы клок выдавать по фазе 90 хотя-бы.
С приемом из памяти обычно проблем со сдвигом нет, но только если у вас "round-trip-time" в цепочке "клок из плиса"-память-"данные в плис" не превысит период синхросигнала минус tSETUP для плиса. Если превышает - тогда уж задерживайте приемный клок в плисе.
axalay
2 Cont: сообщите свою почту
DmitryR
Цитата(Cont @ Feb 28 2009, 19:44) *
Как поступать? Изменить burst на 1 или считать 4 слова в буфер, изменить значение одного из них и обатно записать 4 слова в sdram. Как то это не оптимально, а если всегда работать с burst=1 это уж совсем медленно
Надо работать конечно же всегда с максимальным burst, просто кэш ставить. Даже у небольшого кэша длина строки не будет меньше длины burst памяти, и все будет хорошо. Что до сложности кэша - тут уж кому что надо, или простота, или эффективность.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.