|
Контроллер SDRAM, Вопросы и детали синтеза |
|
|
|
Jan 16 2009, 10:57
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Всем привет! Намерен синтезировать собственный контроллер SDRAM на FPGA Stratix II 2S60, в данном случае в Quartus 7.2, но вне SOPC, и без NiosII. Есть вопросы, может кто-то знает ответ.
1. В описании на SDRAM (у меня это MT46V16M16P-6T) для выполнения команд WRITE, необходимо выдержать время tDH, необходимое для предварительной установки данных на шине DQ перед фронтом/спадом сигнала стробирования DQS этих данных. Для MT46V16M16P-6T оно должно быть более 0.4ns (очень малое, но есть). Если строить FSM контроллера, например, с тактовой частотой 100МГц, то не ясно как выдержать tDH и избежать гонок, то есть сигнал DQS нужно гарантированно задержать. Кто и как решил эту задачу?
|
|
|
|
|
 |
Ответов
|
Jan 16 2009, 11:04
|
Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192

|
Цитата(Волощенко @ Jan 16 2009, 13:57)  Всем привет! Намерен синтезировать собственный контроллер SDRAM на FPGA Stratix II 2S60, в данном случае в Quartus 7.2, но вне SOPC, и без NiosII. Есть вопросы, может кто-то знает ответ.
1. В описании на SDRAM (у меня это MT46V16M16P-6T) для выполнения команд WRITE, необходимо выдержать время tDH, необходимое для предварительной установки данных на шине DQ перед фронтом/спадом сигнала стробирования DQS этих данных. Для MT46V16M16P-6T оно должно быть более 0.4ns (очень малое, но есть). Если строить FSM контроллера, например, с тактовой частотой 100МГц, то не ясно как выдержать tDH и избежать гонок, то есть сигнал DQS нужно гарантированно задержать. Кто и как решил эту задачу? Сигнал DQS формируется в другом клоковом домене, сдвинутом по фазе относительно основного на 90 - 180 -270 градусов. Причем сдвиг этот можно осуществлять на самой последней стадии - в триггере в IO буфера, питая его сдвинутым клоком. Запись - не самое страшное. Что Вы будете делать с чтением?
|
|
|
|
|
Jan 16 2009, 11:37
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
Цитата(Kompot @ Jan 16 2009, 15:04)  Сигнал DQS формируется в другом клоковом домене, сдвинутом по фазе относительно основного на 90 - 180 -270 градусов. Причем сдвиг этот можно осуществлять на самой последней стадии - в триггере в IO буфера, питая его сдвинутым клоком. Спасибо, похоже что только так. Но просматривая SOPC для проекта от Альтеры full_featured (в нем как раз используется DDR SDRAM Controller MegaCore), я заметил, что согласно SOPC, эта корка синхронизируется только одним синхроимпульсом pll_c0. Хотя модуль PLL формирует еще один сигнал pll_c1, задержанный на 3380 ps. и, получается, что он также должен входить в корку SDRAM. Почему-то в SOPC эта связь не показывается. Выходит, что мне нужно вынуть из NiosII сигнал pll_c1 и передать его вместе с pll_c0 в мои схемы. Цитата(Kompot @ Jan 16 2009, 15:04)  Запись - не самое страшное. Что Вы будете делать с чтением? Я пока с чтением не заметил больших подвохов. Может плохо искал? Уточните... Меня больше смущает инициализация, похоже, что для ее начала нужен внешний толчок, например от NiosII. Так?
|
|
|
|
|
Jan 17 2009, 08:08
|

МедвеД Инженер I
   
Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951

|
Цитата(Волощенко @ Jan 16 2009, 20:37)  Спасибо, похоже что только так. Но просматривая SOPC для проекта от Альтеры full_featured (в нем как раз используется DDR SDRAM Controller MegaCore), я заметил, что согласно SOPC, эта корка синхронизируется только одним синхроимпульсом pll_c0. Хотя модуль PLL формирует еще один сигнал pll_c1, задержанный на 3380 ps. и, получается, что он также должен входить в корку SDRAM. Почему-то в SOPC эта связь не показывается. Выходит, что мне нужно вынуть из NiosII сигнал pll_c1 и передать его вместе с pll_c0 в мои схемы.
Я пока с чтением не заметил больших подвохов. Может плохо искал? Уточните... Меня больше смущает инициализация, похоже, что для ее начала нужен внешний толчок, например от NiosII. Так? на корку подаетё pll_c0, а на мелкосхему памяти pll_c1 чем и гарантируется выдержка всех времён (Tdh, Tsu) для начальной инициализации пишется автомат, который после ресета и делает ту самую инициализацию. а почему нельзя взять готовый и его использовать?
--------------------
Cogito ergo sum
|
|
|
|
|
Jan 19 2009, 12:38
|
Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192

|
Цитата(Волощенко @ Jan 17 2009, 22:28)  к Kompot и Postoroniy_V Спасибо за советы! Я сейчас в поиске открытой корки под verilog, чтобы переделать ее под свои задачи (где нужно много памяти и вычислений). Склоняюсь в сторону ХАРР200, похоже, здесь уже многие ее успешно применяли. Хотелось бы услышать краткие мнения и оценки, или замечания. А может есть другие корки, более надежные, понятные и лучше описанные? ХАРР200 работает. Но Вам я посоветовал бы взять ее только за основу, разобраться как она работает, выбросить все ненужное лично Вам и составить из тех кусков свой собственный, заточенный под Ваши нужды оптимизированный контроллер. Недостаток всех готовых корок в том, что они избыточны. Кроме того, подключение к корке со стороны памяти понятно. А вот что с другой стороны? Вам нужна там AMBA-швамба или какая другая спецовая embedded-шина? Всё зависит от того, что нужно Вам.
|
|
|
|
|
Jan 19 2009, 14:10
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
к dvladimСпасибо. Скачал проект, изучаю. Цитата(Kompot @ Jan 19 2009, 15:38)  ХАРР200 работает. Но Вам я посоветовал бы взять ее только за основу, разобраться как она работает, выбросить все ненужное лично Вам и составить из тех кусков свой собственный, заточенный под Ваши нужды оптимизированный контроллер. Спасибо за оценку. Цитата(Kompot @ Jan 19 2009, 15:38)  Недостаток всех готовых корок в том, что они избыточны. Кроме того, подключение к корке со стороны памяти понятно. Некоторую избыточность я уже тоже заметил. Уже есть 5-6 корок на verilog (с VHDL у меня трудности). Так как корки немного с функциональным избытком, то возникает проблема выбора основы. Цитата(Kompot @ Jan 19 2009, 15:38)  А вот что с другой стороны? Вам нужна там AMBA-швамба или какая другая спецовая embedded-шина? Всё зависит от того, что нужно Вам. Нужен еще один жесткий обработчик, но уже с прямым выходом/входом на SDRAM. У меня все 32Мбайт должны обновляться за каждые 3 сек, а из математики что-то похожее на двумерный фильтр. SDRAM должно как бы непрерывно работать в режиме чтение-запись по 8 слов, с автоувеличением адреса, то есть как бы не очень сложно. Считывать и подгружать думаю без FIFO, а старым проверенным способом из двух регистровых буферов: пока один загружается, второй выгружается и наоборот. Работой обработчика будет управлять одна или две FSM, затем результаты сжимаются, передаются в NiosII, а из него в Ethernet-100 пакетами udp. Вот теперь, поднимавшийся здесь вопрос о считывании из SDRAM. Планирую поставить на выходе SDRAM два переключаемых буфера (и на входе тоже). Каждый буфер состоит из двух очередей, по 4 регистра в каждой. Одна очередь синхронизируется прямым клоком, а другая инверсным. Когда один буфер освобождается от SDRAM, то считывание из него выполняется уже с помощью мультиплексора. То есть, в итоге, все должно работать на жесткий обработчик.
|
|
|
|
|
Jan 22 2009, 19:24
|

Участник

Группа: Участник
Сообщений: 31
Регистрация: 18-11-06
Из: St.Petersburg
Пользователь №: 22 470

|
Кстати, вопрос такой возник. Сколько занимает контроллер SD-RAM, сгенерироеваный с помощью альтеровского ядра? Интересно просто для сравнения. Когда-то сделал себе ядро для SD-RAM, которое еще на ACEX-е работаeт. Занимает оно у меня 145 LE и работает в режиме burst read burst write по 64 слова за одно обращение. Написано было на AHDL, кому интересно, "ужОсный код" можно посмотреть здесь: http://fforum.winglion.ru/viewtopic.php?t=341
--------------------
|
|
|
|
|
Jan 23 2009, 06:47
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377

|
к WingLion Спасибо за ссылки и коды. Хотел бы уточнить, контроллеры SDRAM делятся на SDR, DDR, DDR2. Тот, что Ваш, это SDR (single data rate). Я когда создавал тему, думал о DDR (double data rate), только не ввел это в название топика. У меня микросхема MT46V16M16 с DDR архитектурой.
Особенность контроллеров SDRAM для DDR состоит в том, что нужно иметь внутри дополнительную тактовую частоту, которая в два раза выше тактовой частоты памяти. Для этого потребуется PLL, т.е. для памяти с 100МГц, нужно дополнительно создать 200МГц для управляющей FSM. ИХМО
Теперь вопрос, наверное, к Kompot. Похоже, что нельзя использовать фронт сигнала DQS для стробирования считываемых данных, это так? Вы указывали на эту проблему? То есть, считывание возможно только под контролем FSM, работающей на частоте 200МГц, и лучше на DQS не уповать, так?
|
|
|
|
|
Jan 23 2009, 14:33
|
Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192

|
Цитата(Волощенко @ Jan 23 2009, 10:47)  к WingLion Спасибо за ссылки и коды. Хотел бы уточнить, контроллеры SDRAM делятся на SDR, DDR, DDR2. Тот, что Ваш, это SDR (single data rate). Я когда создавал тему, думал о DDR (double data rate), только не ввел это в название топика. У меня микросхема MT46V16M16 с DDR архитектурой.
Особенность контроллеров SDRAM для DDR состоит в том, что нужно иметь внутри дополнительную тактовую частоту, которая в два раза выше тактовой частоты памяти. Для этого потребуется PLL, т.е. для памяти с 100МГц, нужно дополнительно создать 200МГц для управляющей FSM. ИХМО
Теперь вопрос, наверное, к Kompot. Похоже, что нельзя использовать фронт сигнала DQS для стробирования считываемых данных, это так? Вы указывали на эту проблему? То есть, считывание возможно только под контролем FSM, работающей на частоте 200МГц, и лучше на DQS не уповать, так? 1. Защелкивать данные при чтении из ИС памяти лучше всего и правильнее всего именно по DQS. Защелкивать желательно в триггер, расположенный в IO блоке - кстати он может иметь настраиваемую задержку. 2. Вы неправы. Особенность ДДР не в удвоенной тактовой для FSM - Вы будете смеяться, все работает на тех же 100 МГц. Единственное отличие - данные надо передавать (и принимать) НА КАЖДОМ ПЕРЕПАДЕ тактового сигнала. А управление точно такое же как у SDRAM. (Ну, управляющих регистров больше, но сути не меняет). Очень неплохо иметь в FPGA в IO блоке DDR на вход и на выход. Например Xilinx Спартан3 имеет такие. Очень помогает работать с DDR памятью. Цитата(WingLion @ Jan 23 2009, 15:54)  Да, коды для обычной SD-RAM с single data rate.
o DDR пока только одни мечты. DDR2, DDR3 - совсем заоблачные.
с DDR сейчас и экспериментировать еще негде (лично мне, а не вообще). Но, думаю, что для DDR надо покупать альтеровскую IP, потому что цены на них сейчас уже не столь высоки, как было тогда, когда я взялся за работу над собственным контроллером SDR. И даже месяц возни с настройкой оказывается дороже чем покупное ядро. Кроме того, возможность бесплатных экспериментов с тестовыми версиями IP сильно все меняет. Ну что за пораженческие настроения!  ей богу! Самое сложное в таком контроллере - разобраться как работает ИС памяти, и построить управляющую FSM. И то и то Вам в жизни пригодится. Нарисовать datapath - сложности не представляет. ЧТо там еще? Адреса? Вы ведь способны нарисовать 22-разрядный синхронный счетчик с предустановкой и после него поставить 2->1 мультиплексор? Поверьте, Ваш собственный контроллер получится меньше и быстрее чем купленные корки. Ну и опыт какой- никакой появится. Удачи!
|
|
|
|
Сообщений в этой теме
Волощенко Контроллер SDRAM Jan 16 2009, 10:57  Kompot Цитата(Волощенко @ Jan 16 2009, 14:37) Я ... Jan 16 2009, 13:40    dvladim Цитата(Волощенко @ Jan 17 2009, 21:28) А ... Jan 17 2009, 19:25        WingLion Цитата(Волощенко @ Jan 23 2009, 09:47) к ... Jan 23 2009, 11:54         WingLion Цитата(Kompot @ Jan 23 2009, 17:33) Ну чт... Jan 23 2009, 16:47 Farsch Уважаемый WingLion! как я понимаю, ваш SDRAM к... Nov 10 2010, 12:46 torik ЦитатаКогда-то сделал себе ядро для SD-RAM, которо... Nov 11 2010, 05:52 Kuzmi4 Касательно Цитатаальтеровского SDRAM контроллер 16... Jul 31 2011, 17:28 des00 Цитата(Kuzmi4 @ Jul 31 2011, 12:28) В ине... Aug 1 2011, 03:31 Kuzmi4 2 des00
не подскажите как понимать самый последний... Aug 1 2011, 11:41 des00 Цитата(Kuzmi4 @ Aug 1 2011, 06:41) не под... Aug 1 2011, 11:54 Kuzmi4 Получается тогда что учёт minimum trace delay for ... Aug 1 2011, 12:03 des00 Цитата(Kuzmi4 @ Aug 1 2011, 06:03) Получа... Aug 1 2011, 12:25 Kuzmi4 2 des00
по моему проще было учитывать сразу всё, п... Aug 1 2011, 12:31 des00 Цитата(Kuzmi4 @ Aug 1 2011, 06:31) по мое... Aug 1 2011, 12:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|