Есть рабочий проект (вернее был). В нем есть свой компонентс примитивным DMA, который по заданному адресу по команде читает из памяти sdram. До сегодняшнего дня всё работало, всё читалось. Но возникла проблема - в ходе работы компонента используется прерывание. А так как компонент, обрабатывает пакеты, приходящие из вне, то время задержки при обработке прерывания (т.н. latency) оказалось слишком большое (что-то порядка 11us, против желаемых 0,9us). Решил использовать векторный контроллер прерываний (VIC). Как я понял внешие прерывания обрабатываются только Nios II/f.
До этого проект в проекте использовался Nios II/s. Поменял процессор, выставли Interrupt Controller - External. Поправил IRQ у компонентов системы. Остальное всё оставил старое. И запустил на Model Sim. Получил картинку, приведенную ниже. Данные tx_data_readdata =32'hxxxxxxx.
Плохой результат было списал на то, что неправильно преывание внешнее обрабатываю (инициализация и ф-ия обработки осталась та же, что и была для Innternal IC). Во вкладке Nios II -> Advanced Features Поставил Interrupt Controller = Internal. Эффекта ноль. Временные диаграммы симуляции точно такие же.
Вопрос? В чем проблема?
Кода возвращаю назад Nios II/s то данные tx_data_readdata читаются.
И еще вопрос. Нужно ли переделывать инициализацию прерывания и обработчик прерывания компонента при замене IIC на EIC (внутреннего на внешний контроллер)? Если надо то как?