【问题标题】:How to interact between Nios and FPGA?Nios和FPGA如何交互?
【发布时间】:2015-12-09 06:50:12
【问题描述】:

示例: 假设有一个 Nios 在 FPGA 上运行,它通过 SPI 接口随机(或每秒)向连接的显示器发送一个字符串。另一方面,还有监控按钮的 FPGA 代码。每次按下此按钮都应将一个字符串发送到同一个连接的显示器。

问题: FPGA 和 Nios 之间的交互(或通信)在一般情况下或在这种描述的情况下如何工作?当这段代码在 FPGA 代码下运行时,如何“通知”Nios 按下按钮?也许有一个关于这个主题的文档来了解它是如何工作的......

提前致谢

【问题讨论】:

  • 我相信网上有很多可用的资源,也有关于这个主题的书籍。
  • 啊哈,结论……

标签: vhdl communication fpga nios


【解决方案1】:

低速还是高速?

对于低速,将具有足够 I/O“引脚”的 GPIO 内核插入 NIOS 系统并重建它。将您的硬件连接到这些引脚,并使用 GPIO 驱动程序代码访问它们。完毕。按钮算作低速。 SPI 也可以,尽管您可能会为 NIOS 找到更好的 SPI 外设,所以我会使用它。

为了获得高速,您需要设计一个外设(IP 内核)来连接 NIOS 系统使用的任何总线,并提供连接到 VHDL 硬件所需的所有寄存器、内存、中断源等。您可以使用大量示例外围设备作为起点。然后,您可以再次从示例代码开始编写驱动程序软件以访问该外围设备。

这是一个复杂得多的项目,虽然它比 GPIO 快得多,但您会发现“高速”是相对的;与定制硬件相比,任何嵌入式 CPU 的速度都慢得惊人。我们在这里谈论的不是 2 的因数,而是数量级。


编辑:如上所述,无论您使用哪种方法,从软件端与硬件交互最好通过驱动程序软件完成。

如果您必须编写自己的驱动程序,则声明变量以匹配每个可访问的寄存器或内存块(由数组变量表示)。通常,供应商工具可以根据 VHDL 代码或其他描述为您创建框架驱动程序。我不知道 Altera/Nios 工具是如何设置的,但他们肯定有教程来教你他们的方法。

如果您有 Ada 编译器,您可以在包范围内声明这些变量,以保持适当的抽象和信息隐藏。但是如果你必须使用 C,没有包,你可能会被全局变量卡住。

您将每个变量固定在硬件将它们映射到的任何物理地址,并且您必须将它们声明为“易失性”,以便对它们的访问永远不会优化到寄存器中。

如果你的硬件可以中断 CPU,你必须编写一个中断处理函数,用 pragma 告诉编译器它应该连接到哪个中断向量。您需要从您自己的编译器文档和其他外围设备的驱动程序代码示例中获取确切的详细信息。

我将从这里开始: https://www.altera.com/support/support-resources/design-examples/intellectual-property/embedded/nios-ii/exm-developing-hal-drivers.html

带有示例代码和简短的“指南”文档

并使用NIOS software handbook 获得更多深度。

为了帮助找到您正在寻找的内容,显然 Altera 使用术语“HAL”(硬件抽象层)来描述驱动程序中直接访问硬件的部分,并使用“BSP”(板级支持包)来描述允许您向工具和软件团队描述硬件的设施。任何构建骨架驱动程序的工具都将与 BSP 相关联:我在软件手册中看到了一个名为“创建新 BSP”的部分。

【讨论】:

  • 我不确定我们是否在谈论同一个话题。问题是如何在 Nios 和 FPGA (vhdl) 代码之间进行交互。例如,我可以使用可以在 Nios 代码下检查的“全局”变量吗?如何在 FPGA vhdl-code 和 Nios-code 之间进行通信?
  • 我确实通过驱动软件回答了这个问题。编辑了更多细节。
  • 我认为这很好地回答了这个问题。我一直在寻找这样的教程或创建“骨架驱动程序”的工具,但我找不到任何东西。有谁知道在哪里可以找到 Altera (Nios) Max10?
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多