Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: altufm_i2c
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
vitan
В epm570TC100 (Quartus 9.0) плохо работает сабж. Сбоит, часто не определяется на живом железе.
При компиляции варнинг:
Цитата
Circuit may not operate. Detected 4 non-operational path(s) clocked by clock "SCL" with clock skew larger than data delay.


Что с этим можно сделать? Перепробовал кучу настроек компилятора, создал тестовый проект с одной только этой функцией, менял назначение пинов... Цифры в репорте меняются не намного.

Кто-нибудь это юзал вживую?
iosifk
Цитата(vitan @ Nov 20 2013, 17:38) *
В epm570TC100 (Quartus 9.0) плохо работает сабж. Сбоит, часто не определяется на живом железе.

Чисто навскидку... У i2c медленные фронты... Я ставил фильтр от дребезга по фронтам..
vitan
Цитата(iosifk @ Nov 20 2013, 17:48) *
Чисто навскидку... У i2c медленные фронты... Я ставил фильтр от дребезга по фронтам..

Да тут почище дело...
Взял квартус 7.2. То же самое.
Удалил все ассайнменты, девайс сменил. Хоть бы хны.

Вот что дальше делать? cranky.gif

UPD. Исходно хотел сделать размер памяти 1К. Но если увеличивать, то и количество этих non-operational path(s) увеличивается.

UPD. Скачал с альтеры пример из комплекта к AN489. И там то же самое. Это как понимать-то?
vitan
Какой-то бред...
Выставил констрейн на другой клок, который вообще никак не связан с этим куском проекта, варнинги исчезли.

Но проблема осталась. Единственное, что еще можно попрбовать - это поставить поменьше подтяжку, чтобы фронт положительный был покруче. Но звонов никаких нет, снижение частоты тоже не помогает. Повторяется на двух платах.

Неужели никто не пользовал UFM в MAXII?
Stewart Little
Цитата(vitan @ Nov 20 2013, 20:53) *
Неужели никто не пользовал UFM в MAXII?

Я использовал, правда не I2C, а самописаный MicroWire в стиле 93Cxx. Проблем не припомню, завелось с пол-оборота, и на несколькис сотнях экземпляров работало без проблем. Правда, это было еще в дотаймквестовскую эру sm.gif , так что sdc для этого проекта не существовало.
А вот еще вопрос с уровнем Ваших внешних сигналов I2C - какой он у Вас? 3,3В? 5В?
Я, к примеру, делал специальный диодно-резисторный согласователь между FT254BM и MAX II.

Цитата(vitan @ Nov 20 2013, 16:38) *
Перепробовал кучу настроек компилятора...

А в настройках мегафункции чего-нибудь не пробовали подкрутить?
vitan
Цитата(Stewart Little @ Nov 20 2013, 22:47) *
А вот еще вопрос с уровнем Ваших внешних сигналов I2C - какой он у Вас? 3,3В? 5В?
Я, к примеру, делал специальный диодно-резисторный согласователь между FT254BM и MAX II.

Всё трехвольтовое.

Цитата(Stewart Little @ Nov 20 2013, 22:47) *
А в настройках мегафункции чего-нибудь не пробовали подкрутить?

Пробовал. Единственное, что получилось (правда уже могу ошибаться, много экспериментов уже прошло с тех пор) - указать режим записи Page, доступ разрешить по записи, и при этом указать, что нет стирания (NO_ERASE). Вроде бы, при таких настройках проходила успешно запись в "епромину", но только один раз, первый после прошивки самой плисины, да и то нестабильно.
Это еще как-то понять можно, но вот остальное я понять не могу. В частности, не понятно, почему она плохо определяется (делаю u-boot-ом i2c probe несколько раз). Ну и не пишется тоже.
Даже не знаю, мастер на шине аппаратно реализован в проце, другие девайсы на этой же шине работают... Времянки что ли анализировать альтеровские i2с-шные на предмет общеупотребительных значений?
Мда, не ожидал, думал, все с полпинка заведется... sad.gif
Stewart Little
Цитата(vitan @ Nov 20 2013, 22:16) *
Пробовал. Единственное, что получилось (правда уже могу ошибаться, много экспериментов уже прошло с тех пор) - указать режим записи Page, доступ разрешить по записи, и при этом указать, что нет стирания (NO_ERASE). Вроде бы, при таких настройках проходила успешно запись в "епромину", но только один раз, первый после прошивки самой плисины, да и то нестабильно.
Это еще как-то понять можно, но вот остальное я понять не могу. В частности, не понятно, почему она плохо определяется (делаю u-boot-ом i2c probe несколько раз). Ну и не пишется тоже.
Даже не знаю, мастер на шине аппаратно реализован в проце, другие девайсы на этой же шине работают... Времянки что ли анализировать альтеровские i2с-шные на предмет общеупотребительных значений?
Мда, не ожидал, думал, все с полпинка заведется... sad.gif

Насчет записи я не совсем понял. Вы хотите из MAX II сделать "полный аналог" еепромки?
Тогда следующие предостережения:
1. у UFM секторная организация. Соответственно, стриание происходит посекторно, ну и с повторной перезаписью вопросы возникают.
2. гарантированный ресурс UFM у МАХ II всего 100 циклов стирания-записи. По факту при нормальных условиях получается больше, но это уже на собственный страх и риск.
ПМСМ, из UFM хорошо можно только читать laughing.gif
vitan
Цитата(Stewart Little @ Nov 21 2013, 00:45) *
Насчет записи я не совсем понял. Вы хотите из MAX II сделать "полный аналог" еепромки?
Тогда следующие предостережения:
1. у UFM секторная организация. Соответственно, стриание происходит посекторно, ну и с повторной перезаписью вопросы возникают.
2. гарантированный ресурс UFM у МАХ II всего 100 циклов стирания-записи. По факту при нормальных условиях получается больше, но это уже на собственный страх и риск.
ПМСМ, из UFM хорошо можно только читать laughing.gif

Нет я про полный аналог все понимаю, мне не надо туда писать со страшной силой, имеющегося ресурса достаточно. Про секторную организацию тоже все правильно, но опять же, меня это устраивает. Вообще эта фигня планируется для хранения всякой ерунды типа мак-адресов, т.е. будет буквально один раз записываться на производстве, а потом даже может и блокироваться на запись (пока не решил, запустить бы...).
Тем не менее, запись хотелось бы иметь работающую, точнее даже так: я уверен, что если запись не работает, то и читаться\определяться нормально не будет. Т.е. я думаю, что косяк где-то в этой функции в части интерфейса i2c.
Уфф... Пойду резисторы попаяю...
vitan
Вот ведь.. И на старуху бывает проруха... sm.gif
Прошивал плисину не обычным байтбластером, а внешним программатором elnec, и с непривычки не заметил, что не выставлено предвариательное стирание. Сбои, вроде, исчезли.

Но теперь вторая проблема.
Хочу проинитить память данными. Подсовываю файл .mif, делаю дамп на железе и вижу, что данные идут через одно, а не друг за другом.
Т.е. у меня в файле написано:

00 : 55
01 : aa
02 : 12
03 : 34

А в реальности дамп следующий:

00 : 55
01 : ff
02 : aa
03 : ff
04 : 12
05 : ff
06 : 34
07 : ff

Перепробовал все комбинации width в файле не помогает. При этом ячейки с FF работают нормально (с учетом особенностей стирания, конечно), т.е. я могу их записать со стороны мастера на I2C.

В чем тут дело, не пойму никак?
vitan
А дело, похоже, в общей кривизне этой функции и документации на неё. Впервые столкнулся с тем, что для запуска функции недостаточно хелпа в квартусе.
Вот здесь объясняют, почему в данных пропуски, а также много чего еще. Зачем и почему такие сложности - загадка. И как именно сделать тот самый padding в mif-файле тоже весьма не отчетливо написано.
Но это еще не все. Реально можно указать размер 8К, о чем нигде ни слова, и это работает, только непонятно, как там все мапится...
Мда... Неожиданно низкое качество... crying.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.