Qsys 中一个外设中的多个中断发送器
Multiple Interrupt Senders in one peripheral in Qsys
使用 Qsys(Quartus II x64 15.0.1 build 150)我用 Nios2/e 和几个标准外围组件制作了一个系统。我还添加了带有 1 个 MM-Slave 和 2 个中断发送器的自定义组件。对于它们中的每一个,我在创建 _hw.tcl 文件期间在组件编辑器中将此从属设置为 "Associated addressable interface"。
Qsys 报告没有错误或警告,但后来我尝试使用 New | 在 Eclipse 中创建 BSP 项目Nios 2 BSP 项目向导。我 select "SOPC Information File name",但 "CPU" ComboBox 仍然为空,并出现错误:"No Nios II CPU Found"。
然后我从主菜单启动 BSP 编辑器:Nios 2 | BSP 编辑器并按文件 |新的 Nios 2 BSP。我再次提供SOPC文件,这个工具找到了CPU,但也报错:"Can only have at most one IRQ associated with the following slaves of module "my_component" : mm_slave."
然后我返回到 Qsys 并删除了一个中断发送器,这次一切正常,但我需要生成多个中断。
那么,如果您 Nios2/e 连接到具有 1 个 MM-Slave 和多个中断发送器的自定义外围设备,该怎么办?
我有一些想法,但不喜欢它们:
为每个irq添加MM-Slave(看起来很浪费资源)。
不要在组件编辑器中指定"Associated addressable interface"(顺便说一句,但我不知道它是否会一直正常工作)。这个选项的真正作用是什么?
我说它会起作用是不准确的,很抱歉。实际上qsys和BSP是可以生成的,但是在BSP内部system.h IRQ号会被定义为-1,所以不会起作用。
将所有中断合并到一根线中(它们都将共享相同的优先级)。
将中断发送器配置为具有宽度大于 1 的 irq 信号(组件编辑器允许这样做但报告警告:"interrupt_sender: Signal irq_many[4] of type irq must have width [1]"。)与案例 2 一样,我不知道是什么将发生在 Altera 的 generators/compilers 内部。
组件编辑器阶段完成后,Qsys 不接受这样的系统。
请帮忙。
最后,我找到了以下内容:
一个。如果您在一个自定义 Qsys 模块中需要多个 IRQ 发送器,您每个都需要一个 MM-Slave。从 GUI 组织看来,您正在将 MM-Slave 分配给 IRQ,但(据我了解)它的工作方式恰恰相反:IRQ 与 MM-Slave 相关联,它可能有最多一个 IRQ。我并没有尝试 运行 它,但 BSP 文件看起来是正确的,并且至少所有内容都可以编译。
我希望有(或将有)更好的方法来实现这一目标。
乙。如果您可以在所有中断之间共享相同的优先级,那么您可以通过仅使用 1 个中断发送器并因此仅使用 1 个 MM-Slave 来避免该问题。它适用于开发板。
使用 Qsys(Quartus II x64 15.0.1 build 150)我用 Nios2/e 和几个标准外围组件制作了一个系统。我还添加了带有 1 个 MM-Slave 和 2 个中断发送器的自定义组件。对于它们中的每一个,我在创建 _hw.tcl 文件期间在组件编辑器中将此从属设置为 "Associated addressable interface"。
Qsys 报告没有错误或警告,但后来我尝试使用 New | 在 Eclipse 中创建 BSP 项目Nios 2 BSP 项目向导。我 select "SOPC Information File name",但 "CPU" ComboBox 仍然为空,并出现错误:"No Nios II CPU Found"。
然后我从主菜单启动 BSP 编辑器:Nios 2 | BSP 编辑器并按文件 |新的 Nios 2 BSP。我再次提供SOPC文件,这个工具找到了CPU,但也报错:"Can only have at most one IRQ associated with the following slaves of module "my_component" : mm_slave."
然后我返回到 Qsys 并删除了一个中断发送器,这次一切正常,但我需要生成多个中断。
那么,如果您 Nios2/e 连接到具有 1 个 MM-Slave 和多个中断发送器的自定义外围设备,该怎么办?
我有一些想法,但不喜欢它们:
为每个irq添加MM-Slave(看起来很浪费资源)。
不要在组件编辑器中指定"Associated addressable interface"(顺便说一句,但我不知道它是否会一直正常工作)。这个选项的真正作用是什么? 我说它会起作用是不准确的,很抱歉。实际上qsys和BSP是可以生成的,但是在BSP内部system.h IRQ号会被定义为-1,所以不会起作用。
将所有中断合并到一根线中(它们都将共享相同的优先级)。
将中断发送器配置为具有宽度大于 1 的 irq 信号(组件编辑器允许这样做但报告警告:"interrupt_sender: Signal irq_many[4] of type irq must have width [1]"。)与案例 2 一样,我不知道是什么将发生在 Altera 的 generators/compilers 内部。 组件编辑器阶段完成后,Qsys 不接受这样的系统。
请帮忙。
最后,我找到了以下内容:
一个。如果您在一个自定义 Qsys 模块中需要多个 IRQ 发送器,您每个都需要一个 MM-Slave。从 GUI 组织看来,您正在将 MM-Slave 分配给 IRQ,但(据我了解)它的工作方式恰恰相反:IRQ 与 MM-Slave 相关联,它可能有最多一个 IRQ。我并没有尝试 运行 它,但 BSP 文件看起来是正确的,并且至少所有内容都可以编译。 我希望有(或将有)更好的方法来实现这一目标。
乙。如果您可以在所有中断之间共享相同的优先级,那么您可以通过仅使用 1 个中断发送器并因此仅使用 1 个 MM-Slave 来避免该问题。它适用于开发板。