Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Под подозрением модуль SDRAM SOPC Builder
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
misyachniy
Разработал первую тестовую плату на 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 ома впаивать для задержки - не помогает.

Где чего подкрутить?
Спасибо.
vetal
крутить надо pll.

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

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

http://www.alteraforum.com/forum/showthrea...p=4276#post4276
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.