Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MAX10 чтение/запись в UFM есть проблема.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
wolfman
Здравствуйте.

Использую Макс 10-ый, возникла идея вместо внешней флешки использовать UFM Макса. Подцепил корку в QSYS, загрузил Mif-файл,все вроде бы читается, но есть нюанс. Порядок байт не такой как в MIf-файле.

Т.е. в Mif- по нулевому адресу лежат такие данные: 0x1D05DE20, а читается из UFM 0x201d05de. Сначала подумал что проблема в отображении, т.к. читаю через i2c, начал вычитывать побайтно, таже хрень, в нулевом адресе сидит не "1D" или "20", как можно было бы ожидать, а "DE", "1D" сидит по 2-му адресу.

Смотрел в сигналтапе, адреса выставляются верно, а данные с таким вот смещением. В чём может быть дело?
DmitryR
Было бы здорово, если бы вы описали систему чуть боле подробно. Какие в ней компоненты, как взаимодействуют, чем тактируются (с какой частотой).
wolfman
Цитата(DmitryR @ Dec 18 2017, 23:34) *
Было бы здорово, если бы вы описали систему чуть боле подробно. Какие в ней компоненты, как взаимодействуют, чем тактируются (с какой частотой).

Система, в общем-то простая: доступ внешнего CPU к регистрам внутри Макса(чтение состояний, статистики, управление светодиодами, вентиляторами и прочее, ничего сверхъестественного). Модули практически все самописные, есть несколько модулей памяти, они штатные альтеровские. Всё подключено на шину Авалон-ММ, частота 50 МГц, данные 8 бит, адрес 16 бит. Доступ к регистрам на шине Авалон, через I2C: с одной стороны I2C слейв, с другой Авалон-ММ мастер.

Модуль I2C проверен и работает в примерно таком же проекте.

В Сигналтапе вижу, что данные с UFM выходят правильно, а вот в модуль I2C приходят в другом порядке. Возможно QSYS при согласовании разрядностей шин что-то перемудрил...

Попробую сделать согласование через свой модуль. Либо, как вариант, для тестирования доработать модуль I2C, чтобы он работал с 32-х битной шиной данных.

UPD: сделал обычную RAM, пишется/читается нормально.
dvladim
А вот так вот с наскока: не может ли это быть проблемой big/little endian вместе с разной разрядностью шин Avalon и UFM?
wolfman
Цитата(dvladim @ Dec 20 2017, 06:16) *
А вот так вот с наскока: не может ли это быть проблемой big/little endian вместе с разной разрядностью шин Avalon и UFM?


Я и так и так вертел, результат тот же.
Golikov A.
Вы пишите по одному интерфейсу, а читаете по другому?
Есть возможность записать и считать по одному и тому же?
Может в угоду какой-то оптимизации линии данных переставлены.
wolfman
Нет пишу и читаю по одному интерфейсу.

В UFM писать не получается, пока только читаю.
DmitryR
Цитата(wolfman @ Dec 18 2017, 23:10) *
В Сигналтапе вижу, что данные с UFM выходят правильно, а вот в модуль I2C приходят в другом порядке.

Возможно вы младшие биты адреса меняете не вовремя.
wolfman
Цитата(DmitryR @ Dec 22 2017, 19:24) *
Возможно вы младшие биты адреса меняете не вовремя.

Думал об этом, но тогда разве не должно все съехать?
А тут байты переставлены внутри двойного слова.
wolfman
DmitryR
Похоже вы были правы и проблема была с адресами. Немного задержал биты адреса и сигнал чтения. Всё читается правильно.

Но запись пока не удается.
wolfman
Все заработало.
wolfman
Дабы не создавать новую тему.

Возник вопрос: необходимо стирать только страницу, а не сектор целиком, по мануалу Альтеры/Интела, получается стирать только сектор.

Может кто-то работал со страницами в UFM?
DmitryR
Я честно говоря даже мануал не читал, а просто пристегнул библиотечные функции. Они работают.
wolfman
Цитата(DmitryR @ Jan 11 2018, 21:21) *
Я честно говоря даже мануал не читал, а просто пристегнул библиотечные функции. Они работают.

Хм, что значит: подключил библиотечные функции?

Я подключил корку в qsys, работаю через стандартные Линуксовые функции(i2cget/i2cset). Доступ к регистрам и UFM через i2c.
DmitryR
У меня там NIOS, и к нему есть библиотеки. Если вы хотите сделать иначе - то думаю, что самым быстрым способом будет изучить код этих библиотек. Там не очень много.
wolfman
Цитата(DmitryR @ Jan 17 2018, 00:13) *
У меня там NIOS, и к нему есть библиотеки. Если вы хотите сделать иначе - то думаю, что самым быстрым способом будет изучить код этих библиотек. Там не очень много.

Пока решили сделать по другому, вместо цикла запись-стирание, один раз стираем, а потом просто сдвигаем нолик. Кол-во записанных нулей даст необходимую величину.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.