Перейти к содержанию

MAX10 чтение/запись в UFM есть проблема.

Здравствуйте.

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

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

Смотрел в сигналтапе, адреса выставляются верно, а данные с таким вот смещением. В чём может быть дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Было бы здорово, если бы вы описали систему чуть боле подробно. Какие в ней компоненты, как взаимодействуют, чем тактируются (с какой частотой).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(DmitryR @ Dec 18 2017, 23:34) <{POST_SNAPBACK}>
Было бы здорово, если бы вы описали систему чуть боле подробно. Какие в ней компоненты, как взаимодействуют, чем тактируются (с какой частотой).

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

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

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

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

UPD: сделал обычную RAM, пишется/читается нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А вот так вот с наскока: не может ли это быть проблемой big/little endian вместе с разной разрядностью шин Avalon и UFM?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(dvladim @ Dec 20 2017, 06:16) <{POST_SNAPBACK}>
А вот так вот с наскока: не может ли это быть проблемой big/little endian вместе с разной разрядностью шин Avalon и UFM?


Я и так и так вертел, результат тот же.

Поделиться сообщением


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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Нет пишу и читаю по одному интерфейсу.

В UFM писать не получается, пока только читаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(wolfman @ Dec 18 2017, 23:10) <{POST_SNAPBACK}>
В Сигналтапе вижу, что данные с UFM выходят правильно, а вот в модуль I2C приходят в другом порядке.

Возможно вы младшие биты адреса меняете не вовремя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(DmitryR @ Dec 22 2017, 19:24) <{POST_SNAPBACK}>
Возможно вы младшие биты адреса меняете не вовремя.

Думал об этом, но тогда разве не должно все съехать?
А тут байты переставлены внутри двойного слова.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
DmitryR
Похоже вы были правы и проблема была с адресами. Немного задержал биты адреса и сигнал чтения. Всё читается правильно.

Но запись пока не удается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Дабы не создавать новую тему.

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

Может кто-то работал со страницами в UFM?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я честно говоря даже мануал не читал, а просто пристегнул библиотечные функции. Они работают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(DmitryR @ Jan 11 2018, 21:21) <{POST_SNAPBACK}>
Я честно говоря даже мануал не читал, а просто пристегнул библиотечные функции. Они работают.

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

Я подключил корку в qsys, работаю через стандартные Линуксовые функции(i2cget/i2cset). Доступ к регистрам и UFM через i2c.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
У меня там NIOS, и к нему есть библиотеки. Если вы хотите сделать иначе - то думаю, что самым быстрым способом будет изучить код этих библиотек. Там не очень много.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация