Полная версия этой страницы:
Захватить шину NIOS. Как ?
К NIOS на внешнюю шину подключена SRAM из которой исполняется программа и хрянятся несколько массивов с данными. Периодически отдельный от NIOS модуль должен писать/читать эту SRAM. Подскажите, как по простому захватить tristate шину у NIOS и разрешить на некоторое время доступ к SRAM другому устройству ? Во время захвата шины NIOS должен тоже остановиться.
Пока что реализовано так: если приходит запрос на захват, контроллер дожидается завершения RD WR, затем останавливает такты NIOS и мультиплексором переключает шину куда нужно. Но в этом случае останавливаются все таймеры и очень часто начинает глючить JTAG. Если на таймеры подавать отдельный clk, то объем NIOS сильно разрастается и уже с трудом влазит в ПЛИС, а место еще нужно.
murmel1
Apr 22 2010, 20:00
На сколько по-простому?
Вы что подключаете "отдельный" компонент вне SOPC ?
Если сделать это в SOPC необходимый арбитраж будет создан автоматически. Заводите "отдельный" в систему и подключайте внутри нее.
На сколько доступов нужно перехватить доступ ) ?
Если на десятки то это делается назначением квот в системе (термин точно не помню, а дома под рукой нет Q). Процу назначьте 1, вашему компоненту сколько надо, например 16. Это означает, что ваш компонент будет беспрепятственно иметь доступ 16 раз непрерывно, а проц смогут обрывать после каждого.
В более сложном случае создайте свой компонент SOPC - арбитр Avalon-MM с приоритетностью (у арбитра по молчанию приоритетность карусельная). Делов-то...
Ссылка на литературу: сигнал waitrequest
Хотите подробнее - пишите подробнее.
Останавливать клок - ничего не получите.
"(термин точно не помню, а дома под рукой нет Q)" арбитраж это называется
ОК, спасибо. Буду изучать.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.