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

 
 
 
Reply to this topicStart new topic
> Под подозрением модуль SDRAM SOPC Builder
misyachniy
сообщение Jun 20 2008, 14:40
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Разработал первую тестовую плату на Cyclone2
http://njnmnp.narod.ru/proj/video/video.html

Для экономии подсоединил выводы SDRAM (1Mx16x4BANK 7нс) DQM/DQL на землю CKE на притание.
Для тестирования памяти написал тестовую программу (Q7.2 + SP3)

Код
memory_base = MEMORY_BASE_ADDRES;

while (memory_base < 0x02800000)
{
    
  if (switcher!=0x55555555)switcher=0x55555555;
   else switcher=0xAAAAAAAA;
    
  IOWR_32DIRECT(memory_base, 0, switcher);
  Readed_32=IORD_32DIRECT(memory_base, 0);
  
  if (Readed_32 !=switcher)
  {
    for (;;);
  }
  memory_base +=0x04;  
}



Частота которую проект допускает равна 122МГц.
То есть при компиляции с частотой работы со SDRAM 144 - получаю "критический варнинг" с указаной частотой 122 МГц

Перевел проект на 108 Мгц, варнинг исчез.
При пошаговом прохождении - портится младшие 16 бит

Так как USB Blaster самодельный, то решил не использовать пошаговое прохождение.
Тест проходит корректно.

Для дальнейшего тестирования дописал программу еще одним циклом которая после указанного выше
тестирования еще раз считывает данные и проверяет.
Как оказалось считывает всегда с ошибкой - данные сдвинуты на 16 байт.

Изменил программу чтобы подсчитывать чило неправильных чтений

Код
memory_base = MEMORY_BASE_ADDRES;
CountAA=Count55=CountA5=Count5A=CountUnknown=0;
while (memory_base < 0x02800000)
{

  Readed_32=IORD_32DIRECT(memory_base, 0);
  switch(Readed_32)
  {
    case 0x55555555: Count55++; break;
    case 0xAAAAAAAA: CountAA++; break;
    case 0x5555AAAA: Count5A++; break;
    case 0xAAAA5555: CountA5++; break;
    default: CountUnknown++;
  }
  memory_base +=0x04;  
}

Ровно пополам поделились ошибки между Count5A и CountA5.

Для оделения "мух от котлет" понизил частоту до 86,4МГц.

Все работает как часы. И пошаговая отладка и прогон.
По моему что-то нужно "покрутить" в модуле SDRAM SOPC Builder.
Я тайминги подкручивал на 20% и побольше - результата нет.
Пробовал в цепь тактирования SDRAM резистор от 5 до 33 ома впаивать для задержки - не помогает.

Где чего подкрутить?
Спасибо.
Go to the top of the page
 
+Quote Post
vetal
сообщение Jun 20 2008, 14:58
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



крутить надо pll.

помимо достижения требуемых частотных характеристик внутри микросхемы требуется обеспечить правильные setup/hold для микросхемы sdram.

основная информация для этого : tcomin, tcomax, tsetupmin, tsetupmax, а так же время распространения тактового сигнала, минимальное и максимальное время распространения сигнала по плате для остальных сигналов на плате. А дальше можно расчитать в экселе рабочие окна со стороны плисины и sdram и с помощью pll "подтянуть" туда тактовый сигнал.
Если задать в timequest правильные параметры - квартус сам будет проверять вошли тайминги или нет.
Для наиболее правильной работы на линиях данных могут потребосваться резисторы(у плисин более жесткие ограничения на допустимые выбросы, чем у микросхем памяти), т.к. для большой частоты придется "натягивать" фронты.

http://www.alteraforum.com/forum/showthrea...p=4276#post4276
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 04:23
Рейтинг@Mail.ru


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