使用Qsys (Quartus II x64 15.0.1 build 150)我用Nios2/e和几个标准外设组件制作了一个系统。我还添加了带有1个MM-Slave和2个Interrupt sender的自定义组件。在创建_hw时,我将每个从属设置为组件编辑器中的"关联可寻址接口"。tcl文件。
Qsys报告没有错误或警告,但后来我尝试在Eclipse中使用New | Nios 2 BSP项目向导制作BSP项目。我选择"SOPC信息文件名",但"CPU"组合框仍然为空,并且出现错误:"No Nios II CPU Found"。
然后从主菜单启动BSP编辑器:Nios 2 | BSP编辑器,按File | New Nios 2 BSP。我再次提供SOPC文件,这个工具找到了CPU,但也报告了错误:"最多只能有一个IRQ与模块"my_component"的以下奴隶相关联:mm_slave。"
然后我返回到Qsys并删除一个中断发送者,这一次一切都很好,但我需要生成多个中断。
那么,如果您将Nios2/e连接到带有1 MM-Slave和几个中断发送器的自定义外设,该怎么办?
我有一些想法,但不喜欢它们:
-
为每个irq添加MM-Slave(它看起来像浪费资源)。
-
不要在组件编辑器中指定"关联的可寻址接口"(它是顺便工作的,但我不知道它会一直正常工作)。这个选项的真正作用是什么?我说的不准确,它会工作,抱歉。在现实中,qsys和BSP可以生成,但是在BSP的系统中,h IRQ号将被定义为-1,因此它将不起作用。
-
将所有中断合并到一条线中(它们将共享相同的优先级)。
-
配置中断发送器具有宽度大于1的irq信号(组件编辑器允许这样做,但报告警告:"interrupt_sender: irq类型的信号irq_many[4]必须具有宽度[1]")。与情况2一样,我不知道Altera的生成器/编译器内部会发生什么。组件编辑器阶段完成后,Qsys不接受这样的系统
请帮。
最后,我发现了以下内容:
。如果在一个自定义Qsys模块中需要许多IRQ sender,则每个模块需要一个MM-Slave。从GUI组织来看,似乎您正在将MM-Slave分配给IRQ,但是(据我所知)它的工作方式正好相反:IRQ与MM-Slave绑定,并且它可能最多有一个IRQ。我没有尝试实际运行它,但BSP文件看起来正确,至少一切都编译。我希望有(或将会有)更好的方法来实现这一目标。
B。如果您可以在所有中断之间共享相同的优先级,那么您可以通过仅使用1个中断发送者和1个MM-Slave来避免这个问题。