Несколько отправителей прерываний в одном периферийном устройстве в Qsys

Используя Qsys (Quartus II x64 15.0.1 build 150), я создал систему с Nios2/e и несколькими стандартными периферийными компонентами. Я также добавляю свой пользовательский компонент с 1 MM-Slave и 2 Interrupt Senders. Для каждого из них я установил это ведомое устройство как "Связанный адресуемый интерфейс" в редакторе компонентов при создании файла _hw.tcl.

Qsys не сообщает об ошибках или предупреждениях, но затем я попытался создать проект BSP в Eclipse, используя New | Мастер проектов Nios 2 BSP. Я выбираю "Имя информационного файла SOPC", но "CPU" ComboBox остается пустым, и появляется сообщение об ошибке: "Nios II CPU Found Found".

Затем я запускаю BSP Editor из главного меню: Nios 2 | BSP Editor и нажмите Файл | Новый Nios 2 BSP. Я снова предоставляю файл SOPC, и этот инструмент обнаружил ЦП, но также сообщает об ошибке: "Может быть только один IRQ, связанный со следующими ведомыми модулями"my_component": mm_slave".

Затем я вернулся в Qsys и удалил одного из отправителей прерываний, и на этот раз все работает нормально, но мне нужно сгенерировать более одного прерывания.

Так что делать, если у вас есть Nios2/e, подключенный к пользовательскому периферийному устройству с 1 MM-Slave и несколькими отправителями прерываний?

У меня есть некоторые идеи, но они мне не нравятся:

  1. Добавьте MM-Slave для каждого IRQ (это выглядит как трата ресурсов).

  2. Не указывайте "Связанный адресуемый интерфейс" в редакторе компонентов (он, кстати, работает, но я не знаю, будет ли он работать правильно все время). Что этот вариант действительно делает? Я был неточен, говоря, что это будет работать, извините за это. В действительности можно генерировать qsys и BSP, но внутри system.h BSP номер IRQ будет определен как -1, поэтому он не будет работать.

  3. Объедините все прерывания в один провод (все они будут иметь одинаковый приоритет).

  4. Сконфигурируйте отправителя прерывания, чтобы иметь сигнал irq с шириной более 1 (Редакторы компонентов позволяют это сделать, но выдают предупреждение: "interrupt_sender: Сигнал irq_many[4] типа irq должен иметь ширину [1]".) Как и в случае 2, я не не знаю, что будет внутри генераторов / компиляторов Altera. После завершения этапа редактора компонентов Qsys не принимает такую ​​систему.

Пожалуйста помоги.

1 ответ

Решение

Наконец, я нашел следующее:

О. Если вам нужно много отправителей IRQ внутри одного пользовательского модуля Qsys, вам нужно по одному MM-Slave для каждого. Из организации GUI кажется, что вы назначаете MM-Slave для IRQ, но (насколько я понимаю) он работает прямо противоположно: IRQ привязан к MM-Slave и может иметь максимум один IRQ. Я не пытался запустить его на самом деле, но файлы BSP выглядят корректно и все компилируется по крайней мере. Я надеюсь, что есть (или будет) лучший способ добиться этого.

B. Если вы можете использовать один и тот же приоритет для всех прерываний, вы можете избежать этой проблемы, используя только 1 отправителя прерываний и, следовательно, только 1 MM-Slave. Это работает на плате разработчиков.

Другие вопросы по тегам