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

 
 
> Контроллер SDRAM, Вопросы и детали синтеза
Волощенко
сообщение Jan 16 2009, 10:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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 нужно гарантированно задержать. Кто и как решил эту задачу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kompot
сообщение Jan 16 2009, 11:04
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 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 буфера, питая его сдвинутым клоком.

Запись - не самое страшное. Что Вы будете делать с чтением?
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Jan 16 2009, 11:37
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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. Так?
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jan 17 2009, 08:08
Сообщение #4


МедвеД Инженер 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
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Jan 17 2009, 18:28
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



к Kompot и Postoroniy_V
Спасибо за советы!
Я сейчас в поиске открытой корки под verilog, чтобы переделать ее под свои задачи (где нужно много памяти и вычислений).
Склоняюсь в сторону ХАРР200, похоже, здесь уже многие ее успешно применяли. Хотелось бы услышать краткие мнения и оценки, или замечания.
А может есть другие корки, более надежные, понятные и лучше описанные?
Go to the top of the page
 
+Quote Post
Kompot
сообщение Jan 19 2009, 12:38
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192



Цитата(Волощенко @ Jan 17 2009, 22:28) *
к Kompot и Postoroniy_V
Спасибо за советы!
Я сейчас в поиске открытой корки под verilog, чтобы переделать ее под свои задачи (где нужно много памяти и вычислений).
Склоняюсь в сторону ХАРР200, похоже, здесь уже многие ее успешно применяли. Хотелось бы услышать краткие мнения и оценки, или замечания.
А может есть другие корки, более надежные, понятные и лучше описанные?



ХАРР200 работает. Но Вам я посоветовал бы взять ее только за основу, разобраться как она работает, выбросить все ненужное лично Вам и составить из тех кусков свой собственный, заточенный под Ваши нужды оптимизированный контроллер.

Недостаток всех готовых корок в том, что они избыточны. Кроме того, подключение к корке со стороны памяти понятно.
А вот что с другой стороны? Вам нужна там AMBA-швамба или какая другая спецовая embedded-шина? Всё зависит от того,
что нужно Вам.
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Jan 19 2009, 14:10
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 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, то считывание из него выполняется уже с помощью мультиплексора. То есть, в итоге, все должно работать на жесткий обработчик.
Go to the top of the page
 
+Quote Post
WingLion
сообщение Jan 22 2009, 19:24
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 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


--------------------
С уважением, WingLion.
http://fforum.winglion.ru
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Jan 23 2009, 06:47
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 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 не уповать, так?
Go to the top of the page
 
+Quote Post
Kompot
сообщение Jan 23 2009, 14:33
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 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 сильно все меняет.


Ну что за пораженческие настроения! crying.gif ей богу!

Самое сложное в таком контроллере - разобраться как работает ИС памяти, и построить управляющую FSM. И то и то Вам в жизни пригодится. Нарисовать datapath - сложности не представляет. ЧТо там еще? Адреса? Вы ведь способны нарисовать 22-разрядный синхронный счетчик с предустановкой и после него поставить 2->1 мультиплексор?
Поверьте, Ваш собственный контроллер получится меньше и быстрее чем купленные корки. Ну и опыт какой- никакой появится.

Удачи!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Волощенко   Контроллер 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


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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 11:00
Рейтинг@Mail.ru


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