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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> MIG и Spartan 3A
Dmitrij68
сообщение Aug 21 2010, 17:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 10-01-06
Пользователь №: 13 025



Добрые люди, помогите!
Есть плата (покупная) на ней Spartan 3a и память Micron. Генерю при помощи мига (ISE12.2) исходники. Потом при помощи мига выполняю проверку (загружаю UCF который сгенерил MIG) и вижу 50 варнингов типа:

LUT delay location constraint "main_00/top0/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/five-slice_x77y105" for dqs_delayed column of dqs[0] is invalid or missing.

Slice location constraint "main_00/top0/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit0-slice_x78y109" allocated for dq[0] is invalid.

Проект компилится (с DCM и тестбенчами), разводится но не работает. Init_done выдает импульсы вместо "1".

Пробовал менять частоту с 166 до 133 не помогает, менял на spartan 3, то же самое.
Что не так делаю?
Go to the top of the page
 
+Quote Post
Putnik
сообщение Aug 21 2010, 19:33
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 4-09-07
Из: Зеленоград
Пользователь №: 30 272



Простите, что и тестбенчи развелись?
пишите, пожалуйста, конкретно что у вас не работает, не смешивайте - загрузка прошивки, тестбенч, или контроллер памяти в железке?


--------------------
за Навального!
Go to the top of the page
 
+Quote Post
fars
сообщение Aug 21 2010, 21:53
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 3-04-08
Из: Киев, Украина
Пользователь №: 36 452



Цитата(Dmitrij68 @ Aug 21 2010, 20:41) *
Добрые люди, помогите!
Есть плата (покупная) на ней Spartan 3a и память Micron. Генерю при помощи мига (ISE12.2) исходники. Потом при помощи мига выполняю проверку (загружаю UCF который сгенерил MIG) и вижу 50 варнингов типа:

LUT delay location constraint "main_00/top0/data_path0/data_read_controller0/gen_delay[0].dqs_delay_col0/five-slice_x77y105" for dqs_delayed column of dqs[0] is invalid or missing.

Slice location constraint "main_00/top0/data_path0/data_read0/gen_strobe[0].strobe_n/fifo_bit0-slice_x78y109" allocated for dq[0] is invalid.

Проект компилится (с DCM и тестбенчами), разводится но не работает.



Как я понял, вы кодогенератором MIG ( Memory Interface Generator ) сгенерили интерфейс к вашей памяти для работы с ней. Потом скомпилировали и провели синтезис. И оно почемуто не заработало biggrin.gif

Ну шо я скажу))) Словестное описание работы модуля, памяти и тестбеча, код в студию. Это раз.

По контрейнам и ио-стандартам - все правильно ли указали? (Это я намекаю на документацию к отладочной плате и внимательность - не обижайтесь ибо 90 процентов ошибок всегда в этом)

Пробывали что-нибудь записать в память с этим интерфейсом ???

Цитата
Init_done выдает импульсы вместо "1".


Эта фраза без кода ничего не значит.

Цитата
Пробовал менять частоту с 166 до 133 не помогает, менял на spartan 3, то же самое.


Ну это вы зря. Я бы начал отладку, с приличной постановки теста вашего модуля. То есть надо написать тестбенч.

А вообще интерфейс памяти проверяется, как записать чего-нибудь в память и просмотреть, чего туда записалось.
Go to the top of the page
 
+Quote Post
Dmitrij68
сообщение Aug 22 2010, 06:33
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 10-01-06
Пользователь №: 13 025



Сам MIG после генерации формирует две папки. Одна из них Example design. В нем проект, который содержит саму корку, DCM и типа тестбенча, который пишет по разным адресам и потом читает и сравнивает. На выходе три сигнала: init_done, error, valid. Проект синтезируется и разводится. (Или я ошибаюсь и он только для симуляции?) Ничего сам из кода не добавлял, только через UPDATE UCF подгрузил нужный UCF и настроил выходные ножки.

И почему первоначально сгенерированный UCF при проверке ему же не нравится? Для Virtex все хорошо, а для любого Спартана- нет!
Стандарты везде проверил. SSTL1_18 на данные и адреса/контроль
Тактовая дифф. LVDS_25.

Прежде чем писать/читать должен установиться Init_done. А он генерит. На выходе контроллера адреса бегут.

Сообщение отредактировал Dmitrij68 - Aug 22 2010, 07:38
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Aug 22 2010, 07:45
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Думаю, что проект уже поменялся после того, как вы поменяли ножки в UCF-файле, placement constraints поменялись,
а вы ему снова старые даете.
Go to the top of the page
 
+Quote Post
Dmitrij68
сообщение Aug 22 2010, 09:36
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 10-01-06
Пользователь №: 13 025



Цитата(Shtirlits @ Aug 22 2010, 11:45) *
Думаю, что проект уже поменялся после того, как вы поменяли ножки в UCF-файле, placement constraints поменялись,
а вы ему снова старые даете.


Я UCF подсовываю в Update UCF, т.е. он сам меняет и перегенерит UCF заново с новыми констрейнами для моих ножек. Проверял, там все нормально и с ногами и с расположение выходных/входных триггеров. Все корректируется.

Интересно, что если проверить первоначальный UCF который генерит MIG, при помощи Update UCF ему не понравится.

Сообщение отредактировал Dmitrij68 - Aug 22 2010, 09:38
Go to the top of the page
 
+Quote Post
Gothard
сообщение Aug 23 2010, 06:12
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 16-02-07
Из: Долгопрудный
Пользователь №: 25 406



Цитата(Dmitrij68 @ Aug 22 2010, 10:33) *
Стандарты везде проверил. SSTL1_18 на данные и адреса/контроль
Тактовая дифф. LVDS_25.

Извините, а почему тактовая дифф. LVDS_25? Что это за тактовая? Если она идет на м/с памяти разве не DIFF_SSTL_18 должно быть?
Кстати - проверьте, возможно для адреса/данных требуется SSTL_18 Class II а не Class I? Что за плата? Что подключено к плису?
Go to the top of the page
 
+Quote Post
Dmitrij68
сообщение Aug 23 2010, 09:27
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 10-01-06
Пользователь №: 13 025



Цитата(Gothard @ Aug 23 2010, 10:12) *
Извините, а почему тактовая дифф. LVDS_25? Что это за тактовая? Если она идет на м/с памяти разве не DIFF_SSTL_18 должно быть?
Кстати - проверьте, возможно для адреса/данных требуется SSTL_18 Class II а не Class I? Что за плата? Что подключено к плису?


NET "cntrl0_ddr2_dq[*]" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_a[*]" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_ba[*]" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_cke" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_cs_n" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_ras_n" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_cas_n" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_we_n" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_odt" IOSTANDARD = SSTL18_II;
NET "cntrl0_ddr2_dm[*]" IOSTANDARD = SSTL18_II;
NET "cntrl0_rst_dqs_div_in" IOSTANDARD = SSTL18_II;
NET "cntrl0_rst_dqs_div_out" IOSTANDARD = SSTL18_II;
NET "sys_clkb" IOSTANDARD = LVDS_25;
NET "sys_clk" IOSTANDARD = LVDS_25;
NET "cntrl0_led_error_output1" IOSTANDARD = LVCMOS33;
NET "cntrl0_data_valid_out" IOSTANDARD = LVCMOS33;
NET "cntrl0_init_done" IOSTANDARD = LVCMOS33;
NET "reset_in_n" IOSTANDARD = LVCMOS33;
NET "cntrl0_ddr2_dqs[*]" IOSTANDARD = DIFF_SSTL18_II;
NET "cntrl0_ddr2_dqs_n[*]" IOSTANDARD = DIFF_SSTL18_II;
NET "cntrl0_ddr2_ck[*]" IOSTANDARD = DIFF_SSTL18_II;
NET "cntrl0_ddr2_ck_n[*]" IOSTANDARD = DIFF_SSTL18_II;

Плата от Gennum. Подключен мостик PCIExpress и 2 микросхемы MT47H32M16, которые я в общем и пытаюсь запустить.
Go to the top of the page
 
+Quote Post
Gothard
сообщение Aug 23 2010, 09:56
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 16-02-07
Из: Долгопрудный
Пользователь №: 25 406



Со стандартами сигналов видимо все ок. Во всяком случае нужные клоки не LVDS25 а DIFF_SSTL18.
А насчет того, класс I нужно или класс II - это надо к документации на плату...
А LVDS кстати задан для опорных синхросигналов, идущих с генератора на плис. Убедитесь, что там LVDS smile.gif, а то кто его знает.


А вы промоделировать это чудо пробовали? Может на модели оно тоже пульсирует? Т.е. корка работает верно, но почему-то вы ее пересбрасываете?

Работал с MIGами на Virtex-4 и Virtex-5, так там init_done либо не подымается (когда при сборке платы накосячили - бывает smile.gif ), либо встает один раз и уже не падает.

Что осциллограф показывает? Что на шине данных происходит?
Go to the top of the page
 
+Quote Post
Avsetaki
сообщение Aug 23 2010, 10:24
Сообщение #10





Группа: Новичок
Сообщений: 5
Регистрация: 9-05-05
Пользователь №: 4 861



У меня была осцилляция Init_done на плате со Spartan-3ADSP, правда с DDR, и под EDK, а не MIG.
Проблема решилась когда dqs_div_in и dqs_div_out были отцеплены от соответствующих пинов, и закорочены напрямую внутри ПЛИС.
Может косяк того конкретного борда, не знаю.
Вдруг поможет.
Go to the top of the page
 
+Quote Post
Dmitrij68
сообщение Aug 23 2010, 14:10
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 10-01-06
Пользователь №: 13 025



Цитата(Gothard @ Aug 23 2010, 13:56) *
Со стандартами сигналов видимо все ок. Во всяком случае нужные клоки не LVDS25 а DIFF_SSTL18.
А насчет того, класс I нужно или класс II - это надо к документации на плату...
А LVDS кстати задан для опорных синхросигналов, идущих с генератора на плис. Убедитесь, что там LVDS smile.gif, а то кто его знает.


А вы промоделировать это чудо пробовали? Может на модели оно тоже пульсирует? Т.е. корка работает верно, но почему-то вы ее пересбрасываете?

Работал с MIGами на Virtex-4 и Virtex-5, так там init_done либо не подымается (когда при сборке платы накосячили - бывает smile.gif ), либо встает один раз и уже не падает.

Что осциллограф показывает? Что на шине данных происходит?


Моделировать не пробовал, надеялся что корка должна работать сразу. Раньше (с другими корками все было ОК, правда корки попроще), но похоже прийдется.
Кстати, если init в Virtex не работает, как определить что память проинициализирована?
И еще у меня две памяти в параллель (разумеется кроме данных, масок и dqs. Тактовые тоже разные), разрядность данных при генерации указал 32 (2 памяти по 16).
На шине адреса в младших разрядах бегут сигнальчики, а на данные не смотрел. Посмотрю сегодня.....

Цитата(Avsetaki @ Aug 23 2010, 14:24) *
У меня была осцилляция Init_done на плате со Spartan-3ADSP, правда с DDR, и под EDK, а не MIG.
Проблема решилась когда dqs_div_in и dqs_div_out были отцеплены от соответствующих пинов, и закорочены напрямую внутри ПЛИС.

Проверю и это.
Цитата(Avsetaki @ Aug 23 2010, 14:24) *
Может косяк того конкретного борда, не знаю.
Вдруг поможет.


К великому сожалению я не уверен что на плате все хорошо. Проверить нечем, нет тестового проекта..... crying.gif

Сообщение отредактировал Dmitrij68 - Aug 23 2010, 14:22
Go to the top of the page
 
+Quote Post
Gothard
сообщение Aug 24 2010, 06:09
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 16-02-07
Из: Долгопрудный
Пользователь №: 25 406



Цитата(Dmitrij68 @ Aug 23 2010, 18:10) *
Кстати, если init в Virtex не работает, как определить что память проинициализирована?

Если честно - не понял что вы имеете в виду smile.gif
init - это init_done?
что вы подразумеваете под память проинициализированна? выполнена последовательнсть, описываемая в даташите на память как Initialization?
Go to the top of the page
 
+Quote Post
Dmitrij68
сообщение Aug 24 2010, 06:18
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 10-01-06
Пользователь №: 13 025



Цитата(Gothard @ Aug 24 2010, 10:09) *
Если честно - не понял что вы имеете в виду smile.gif
init - это init_done?
что вы подразумеваете под память проинициализированна? выполнена последовательнсть, описываемая в даташите на память как Initialization?


cntrl0_init_done - выполнена последовательность, описываемая в даташите на память как Initialization
Go to the top of the page
 
+Quote Post
Gothard
сообщение Aug 24 2010, 06:33
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 16-02-07
Из: Долгопрудный
Пользователь №: 25 406



Цитата(Dmitrij68 @ Aug 24 2010, 10:18) *
cntrl0_init_done - выполнена последовательность, описываемая в даташите на память как Initialization

Не возьмусь утверждать что для Spartan именно так (Xilinx всякую свинью способны подложить smile.gif ), но для Vitex init_done - означает, что КОНТРОЛЛЕР выполнил инициализацию. А это включает в себя кроме инициализации памяти еще и калибровку DQS и данных.
Т.е. после появления этого сигнала вы уже можете сразу писать/читать память.

Извините, за некоторую расплывчатость, но конкретно для спартана эту корку не смотрел. Говорю исходя из того, что поведение корок одинаковое на всех семействах Xilinx.

Сообщение отредактировал Gothard - Aug 24 2010, 06:34
Go to the top of the page
 
+Quote Post
Dmitrij68
сообщение Aug 24 2010, 07:51
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 10-01-06
Пользователь №: 13 025



Цитата(Gothard @ Aug 24 2010, 10:33) *
Не возьмусь утверждать что для Spartan именно так (Xilinx всякую свинью способны подложить smile.gif ), но для Vitex init_done - означает, что КОНТРОЛЛЕР выполнил инициализацию. А это включает в себя кроме инициализации памяти еще и калибровку DQS и данных.
Т.е. после появления этого сигнала вы уже можете сразу писать/читать память.

Извините, за некоторую расплывчатость, но конкретно для спартана эту корку не смотрел. Говорю исходя из того, что поведение корок одинаковое на всех семействах Xilinx.


Для Spartan по ug086 init_done тоже самое. Послекалибровки и инициализации должен быть в "1".
Пришла отладочная ML510, попробую на ней завести память, а на Spartan начну с симуляции, т.к. идей больше нет пока.
Go to the top of the page
 
+Quote Post

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

 


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


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