全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

不使用处理器控制FPGA总线

时间:2023-04-08 11:08

人气:

作者:admin

标签: 总线  嵌入式  处理器  FPGA 

导读:许多 FPGA 设计使用嵌入式处理器进行控制。一个典型的解决方案涉及使用 Nios 等软处理器,尽管带有内置硬处理器的 FPGA SoC 也变得很流行。图 1显示了一个典型的 Altera FPGA 系统,它包含...

许多 FPGA 设计使用嵌入式处理器进行控制。一个典型的解决方案涉及使用 Nios 等软处理器,尽管带有内置硬处理器的 FPGA SoC 也变得很流行。图 1显示了一个典型的 Altera FPGA 系统,它包含处理器和通过 Altera 的Avalon内存映射 (MM) 总线连接的混合外设 。这些处理器大大简化了终应用程序,但需要强大的编程背景和复杂工具链的知识。这会阻碍调试,特别是如果硬件工程师需要一种简单的方法来读取和写入外围设备而无需纠缠软件工程师。

4b2eefa8-d5ba-11ed-bfe3-dac502259ad0.jpg

图 1 使用 Avalon 内存映射总线连接的典型 Altera FPGA 系统

该设计理念使用 Altera 的SPI 从器件到 Avalon MM 桥接器来提供跳到 Avalon 总线上的简单方法。这种技术有两个优点:它不损害原来的系统设计,桥可以与嵌入式处理器共存。对于图 1所示的系统,SPI 桥允许工程师直接控制 LTC6948 小数 N PLL 的频率,设置 LTC1668 DAC 电压,从 LTC2498 ADC 读取电压,或从 LTC2983 读取温度,就像处理器可以。

Altera 为 SPI-Avalon MM 桥接器提供参考设计。不幸的是,文档充其量是稀疏的,并且使用 Nios 处理器作为 SPI 主机。这实际上违背了 SPI 桥的目的,因为 Nios 可以直接连接到 Avalon MM 总线。一个实用的 SPI 主控制器是凌力尔特的Linduino 微控制器,它是一个 Arduino 克隆,具有连接到 LT 演示板的额外功能。一项额外功能是电平转换 SPI 端口。当连接到电压低至 1.2V 的 FPGA I/O bank 时,这种电平转换功能特别有用。Linduino 固件可用于通过虚拟 COM 端口接受命令并将命令转换为 SPI 事务。

在对 Altera 示例设计(图 2的左侧)进行逆向工程后,开发了一个 Python 库来创建网桥可以接受的数据包。然后将这些数据包翻译成 Linduino 命令。然后,Python 脚本允许硬件工程师完全控制项目,而无需重新发明接口协议。LinearLabTools Python 文件夹中提供了一个示例 Python 脚本,用于控制 LTC1668 DAC 的数字模式发生器的频率。图 3显示了演示设置。

图 4显示了系统框图。请注意,数控振荡器 (NCO) 可由移位寄存器PIO 内核控制。包含移位寄存器用于调试,因为它允许直接控制 NCO。将 GPIO 线设置为高电平可启用 SPI-Avalon 桥接器,它进而控制 Avalon 总线上的 32 位 PIO 端口。然后 PIO 输出控制 NCO 频率。

4b544b18-d5ba-11ed-bfe3-dac502259ad0.jpg

图4 FPGA系统框图

在基本系统运行的情况下,可以将额外的外围内核连接到总线。为了设计系统,Altera 提供了一种名为 Qsys 的工具,它提供了一个 GUI 来将 IP 相互连接。Qsys 将 GUI 设计的系统(图 5)转换为 HDL。外设地址是完全可配置的。在这种情况下,PIO 设置为基址 0x0。

4b6ed528-d5ba-11ed-bfe3-dac502259ad0.jpg

图 5 Qsys GUI

在 FPGA 中实现设计后,LinearLabTools 中提供的 Python 库包含两个与设计接口的函数:

transaction_write (dc2026, base, write_size, data)

transaction_read (dc2026, base, read_size)

这些函数的个参数是 Linduino 串行端口实例。第二个参数是外设在 Avalon 总线上的地址。这些函数分别接受和返回字节列表。这两个函数的编写是为了在写入和读取 IP 时提供灵活性。要为提供的示例设置 NCO,只需要transaction_write 函数。公式 1 用于确定调谐字。

要以 50MSPS 采样率将 NCO 设置为 1kHz,调整值为 85899 或 0x00014F8B,它作为四个字节的列表传递。因此,将 DAC 设置为 1kHz 的 python 代码是:

transaction_write (linduino_serial_instance, 0, 0, [0x0, 0x01, 0x4F, 0x8B])

4bfee726-d5ba-11ed-bfe3-dac502259ad0.png

图 6 Python Avalon 总线示例

图 6中的 Python 脚本说明了配置 NCO 的简单文本界面。重要提示:桥接器使用 SPI 模式 3。这被痛苦地确定为正确的 通过反复试验模式,并通过分析 Altera 示例中的 Nios 处理器的 SPI 接口进行验证。

该设计理念提供了在不接触嵌入式处理器的情况下控制系统的能力,允许硬件工程师在不打扰软件工程师的情况下推进项目,并且对硬件设计的影响。

审核编辑:汤梓红

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信