面向HMI应用的MachXO2 SPI外设扩展方案(VHDL)

逻辑主页

特性

MachXO2分线板(DigiKey料号220-2625-ND)是一款低成本可编程逻辑器件(PLD)开发板。MachXO2是搭载硬化ASIC门电路嵌入式功能块(EFB)的低功耗FPGA。本设计涵盖以下主题:

• 外设扩展应用介绍与概述
• MachXO2内部振荡器的实例化
• 通过FPGA架构中的Wishbone总线使用嵌入式功能块
• 定制VHDL组件设计与实例化,包含按钮消抖器、正交编码器接口(QEI)、格雷码解码器、Wishbone总线控制状态机及数据流状态机
• 用于验证的硬件测试模块,如七段数码管(SSEG)编码器与显示多路复用器

简介

本参考设计采用MachXO2低成本FPGA作为基于SPI的外设扩展器件。在工业控制与消费电子等应用中,正交编码器阵列、格雷码编码器及触觉开关常被用作人机交互界面。此类设计的核心需求在于需大量占用微控制器/处理器引脚。正交编码器通常需搭配专用接口外设来追踪旋钮输入位置,几乎无需处理器参与。多数微控制器/处理器提供的编码器接口数量有限。本参考设计通过MachXO2 FPGA采集2个旋转编码器(正交式与格雷码式各一)及按钮阵列的输入信号,经由SPI通信与ARM Cortex M3器件实现人机交互。原本需要14个引脚实现的功能,现仅需4个引脚即可完成。输入信号经过消抖处理以避免硬件抖动;按钮也可通过RC滤波器消抖以节省用户逻辑资源。格雷码编码器可选解码为标准十六进制格式。该设计具备完美扩展性,可通过实例化更多消抖电路、正交编码器接口、格雷码解码器及触觉按钮阵列来接入更多输入设备。

背景知识

MachXO2分线板是面向多种输入与控制应用的低成本、低功耗解决方案。当使用提供的硬核ASIC门电路实现全部EFB功能时,相比FPGA架构可节省逾500个LUT资源。嵌入式功能块包含以下硬核ASIC外设(摘自莱迪思技术文档TN1205):

• 两个I2C内核
• 一个SPI内核
• 一个16位定时器/计数器
• 用户闪存(MachXO2-640及以上密度型号)
• 动态PLL配置接口
• 通过I2C和SPI连接片内电源控制器的接口

嵌入式功能块的外设控制通过Wishbone总线接口实现,该总线符合OpenCores标准规范。该接口可通过两种主控方式之一访问:LatticeMico8或FPGA架构内的自定义状态机。本参考设计采用状态机控制Wishbone总线并访问SPI。另一个状态机负责数据操作与控制,管理通往Wishbone总线状态机的数据路径。系统模块级框图如图1所示。

1 MachXO2 SPI 系统模块级框图

应用场景

电路构建

实例化片内振荡器与嵌入式功能模块 (EFB)

需在顶层HDL封装文件中调用MachXO2库和程序包。请参考附带的top.vhd文件查看具体应用。其在top.vhd文件顶部显示如下:

Library MACHXO2;
Use MACHXO2.components.all;

该组件必须包含在顶层架构定义与主体描述之间(即声明部分)。标称频率可在组件声明中定义,并通过Generic Map进行实例化。本设计运行频率为38MHz。

要在EFB内实例化SPI外设,需使用IP express功能:点击Diamond工具栏中的IP express按钮即可执行。从左侧核心列表选择EFB,打开如图2所示的EFB配置窗口。

2 EFB 配置窗口

完成SPI设置后,点击Generate按钮将生成通过Wishbone总线接口的SPI总线HDL文件。具体操作详见Lattice技术文档TN1246《MachXO2器件中用户闪存与硬化控制功能使用参考指南》。

自定义 VHDL 组件设计与实例化

本设计包含按钮消抖器、正交编码器接口(QEI)、格雷码解码器、Wishbone总线控制状态机及数据流状态机。按钮消抖器作为时基滤波器,根据输入信号的持续时间更新输出。对于需要统计输入次数的电路,按钮消抖器尤为重要。QEI模块得益于消抖电路,可避免因编码器机械震颤产生的错误输入计数。QEI通过双通道异相输入跟踪旋钮位置。利用两通道间的相位差实现计数器增减。该模块还能追踪旋钮在恒定时间内的转动幅度(用于速度检测应用),但本设计中已注释此功能。格雷码解码器是将旋钮格雷码位置快速转换为标准十六进制序列的简易方法。Wishbone总线控制与数据流状态机是本设计中最复杂的两个组件。要理解这些状态机如何与Wishbone总线交互,请参阅Lattice TN1246了解总线读写信号及时序。

图3与图4分别展示了Wishbone总线控制状态机和数据流状态机的状态转移图。

3 Wishbone 控制状态机状态图

4 SPI 数据流状态机

硬件测试模块

本设计采用多个组件验证输入寄存器的数值。通过扩展板上的七段数码管和LED阵列显示这些数值。数码管最高有效半字节显示SPI主设备发送给MachXO2的地址。两个最低有效半字节显示取自MachXO2寄存器的正交编码器位置。板载LED显示格雷码转十六进制解码器的输出。七段数码管驱动需配合十六进制编码器和显示多路复用器等组件。这些组件控制显示数据及阳极切换。通过17位定时器实现约190Hz的显示刷新率。七段数码管如图5所示。

5 用于 SPI 验证的七段数码管

注意Arm Cortex M3(SPI主设备)在OLED屏(图6)显示的数据,与MachXO2(SPI从设备)数码管显示数据(图5)完全匹配。Wishbone控制状态机的忙信号已通过142号引脚引出供观测。

6 Arm Cortex M3 OLED 数据与 FPGA 数码管显示一致

VHDL组件层次结构如图7所示。该图通过Diamond工具栏的Generate Hierarchy按钮生成。

7 MachXO2 SPI 外设扩展层级结构

功能、限制与修改

本参考设计采用Lattice Diamond 1.4.2.105版本开发,配套软件使用Synopsis(Synplify Pro)和Aldec(Active HDL 8.3 Lattice WEB Edition II)。Lattice Diamond可作为独立开发环境,配合第三方综合与仿真软件使用。

结论

该参考设计展示了如何利用MachXO2实现外设扩展功能。通过配置八个正交编码器、两个格雷码编码器和八个按钮,可将处理器有效IO引脚数量从32个减少至仅需4个(用于SPI通信)。

附加信息

更多设计支持、产品教程、应用笔记、用户指南及其他文档可在Lattice官网查阅:https://www.latticesemi.com/zh-CN

附录:下载

完整的《面向HMI应用的MachXO2 SPI外设扩展》VHDL文件可在此处下载。

SPI_Peripheral_Expansion.zip (779.2 KB)